This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Fork of libMiMic by
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} }; }