This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Fork of libMiMic by Ryo Iizuka

mbed/jsonrpc/RpcDigitalOut.cpp

Committer:
nyatla
Date:
2014-06-13
Revision:
72:c118a7aa37a3
Child:
75:2a18df0ef111

File content as of revision 72:c118a7aa37a3:

#include "NyLPC_http.h"
#include "mod/ModJsonRpc.h"
#include "mbed.h"
namespace MiMic
{
    class RpcHandlerBase
    {
    public:
        static void addNewObjectBatch(ModJsonRpc& i_mod,unsigned int i_id,void* i_new_object)
        {
            int i=i_mod.addObject(i_new_object);
            if(i<0){
                delete i_new_object;
                i_mod.putError(i_id,ModJsonRpc::INVALID_PARAMS);
                return;
            }
            i_mod.putResult(i_id,"%d",i);
            return;
        }
        static void* getObjectBatch(ModJsonRpc& i_mod,unsigned int i_id,int i_iid)
        {
            void* ret=i_mod.getObject(i_iid);
            if(ret==NULL){
                i_mod.putError(i_id,ModJsonRpc::INTERNAL_ERROR);
            }
            return ret;
        }
    };
    
    class DigitalOutHandler :RpcHandlerBase
    {
    public:
        static NyLPC_TBool new1(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
        {
            ModJsonRpc* mod=(ModJsonRpc*)i_param;
            NyLPC_TUInt32 pin;
            if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,0,&pin)){
                mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
            }else{
                addNewObjectBatch(*mod,i_rpc->method.id,new DigitalOut(PinName(pin)));
            }
            return NyLPC_TBool_TRUE;
        }
        static NyLPC_TBool new2(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
        {
            ModJsonRpc* mod=(ModJsonRpc*)i_param;
            NyLPC_TUInt32 pin;
            NyLPC_TInt32 value;
            //pin number
            if( (!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,0,&pin)) ||
                (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,1,&value)))
            {
                mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
            }else{
                addNewObjectBatch(*mod,i_rpc->method.id,new DigitalOut(PinName(pin),value));
            }
            return NyLPC_TBool_TRUE;            
        }
        static NyLPC_TBool write(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
        {
            ModJsonRpc* mod=(ModJsonRpc*)i_param;
            NyLPC_TInt32 iid,value;            
            if( (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,0,&iid)) ||
                (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,1,&value)))
            {
                mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
            }else{
                DigitalOut* inst=(DigitalOut*)getObjectBatch(*mod,i_rpc->method.id,iid);
                if(inst!=NULL){
                    inst->write(value);
                    mod->putResult(i_rpc->method.id,"");
                }
            }
            return NyLPC_TBool_TRUE;            
        }
        static NyLPC_TBool read(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
        {
            ModJsonRpc* mod=(ModJsonRpc*)i_param;
            NyLPC_TInt32 iid;            
            if( (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,0,&iid)))
            {
                mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
            }else{
                DigitalOut* inst=(DigitalOut*)getObjectBatch(*mod,i_rpc->method.id,iid);
                if(inst!=NULL){
                    int v=inst->read();
                    mod->putResult(i_rpc->method.id,"%d",v);
                }
            }
            return NyLPC_TBool_TRUE; 
        }
    };
    
    
    
    const struct NyLPC_TJsonRpcMethodDef RpcDigitalOut[]=
    {
        { "_new1"   ,"u"    ,DigitalOutHandler::new1},
        { "_new2"   ,"ud"   ,DigitalOutHandler::new2},
        { "write"   ,"dd"   ,DigitalOutHandler::write},
        { "read"    ,"d"    ,DigitalOutHandler::read},
        { NULL      ,NULL   ,NULL}
    };
    



}