Jun Furutani / libMiMic

Fork of libMiMic by Ryo Iizuka

Committer:
nyatla
Date:
Sat Jun 14 17:42:11 2014 +0000
Revision:
76:b375b3d750d8
Parent:
75:2a18df0ef111
Child:
77:8651d3c19a55
MiMic core r361???; JsonRPC????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 72:c118a7aa37a3 1 #include "mod/ModJsonRpc.h"
nyatla 75:2a18df0ef111 2 #include "MbedJsApi.h"
nyatla 72:c118a7aa37a3 3 #include "mbed.h"
nyatla 72:c118a7aa37a3 4 namespace MiMic
nyatla 72:c118a7aa37a3 5 {
nyatla 76:b375b3d750d8 6
nyatla 76:b375b3d750d8 7
nyatla 72:c118a7aa37a3 8 class RpcHandlerBase
nyatla 72:c118a7aa37a3 9 {
nyatla 72:c118a7aa37a3 10 public:
nyatla 76:b375b3d750d8 11 static void addNewObjectBatch(ModJsonRpc& i_mod,unsigned int i_id,ModJsonRpc::BasicRpcObject* i_new_object)
nyatla 72:c118a7aa37a3 12 {
nyatla 72:c118a7aa37a3 13 int i=i_mod.addObject(i_new_object);
nyatla 72:c118a7aa37a3 14 if(i<0){
nyatla 72:c118a7aa37a3 15 delete i_new_object;
nyatla 72:c118a7aa37a3 16 i_mod.putError(i_id,ModJsonRpc::INVALID_PARAMS);
nyatla 72:c118a7aa37a3 17 return;
nyatla 72:c118a7aa37a3 18 }
nyatla 72:c118a7aa37a3 19 i_mod.putResult(i_id,"%d",i);
nyatla 72:c118a7aa37a3 20 return;
nyatla 72:c118a7aa37a3 21 }
nyatla 72:c118a7aa37a3 22 static void* getObjectBatch(ModJsonRpc& i_mod,unsigned int i_id,int i_iid)
nyatla 72:c118a7aa37a3 23 {
nyatla 72:c118a7aa37a3 24 void* ret=i_mod.getObject(i_iid);
nyatla 72:c118a7aa37a3 25 if(ret==NULL){
nyatla 72:c118a7aa37a3 26 i_mod.putError(i_id,ModJsonRpc::INTERNAL_ERROR);
nyatla 72:c118a7aa37a3 27 }
nyatla 72:c118a7aa37a3 28 return ret;
nyatla 72:c118a7aa37a3 29 }
nyatla 72:c118a7aa37a3 30 };
nyatla 72:c118a7aa37a3 31
nyatla 72:c118a7aa37a3 32 class DigitalOutHandler :RpcHandlerBase
nyatla 72:c118a7aa37a3 33 {
nyatla 72:c118a7aa37a3 34 public:
nyatla 72:c118a7aa37a3 35 static NyLPC_TBool new1(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
nyatla 72:c118a7aa37a3 36 {
nyatla 72:c118a7aa37a3 37 ModJsonRpc* mod=(ModJsonRpc*)i_param;
nyatla 72:c118a7aa37a3 38 NyLPC_TUInt32 pin;
nyatla 72:c118a7aa37a3 39 if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,0,&pin)){
nyatla 72:c118a7aa37a3 40 mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
nyatla 72:c118a7aa37a3 41 }else{
nyatla 76:b375b3d750d8 42 addNewObjectBatch(*mod,i_rpc->method.id,new ModJsonRpc::RpcObject<DigitalOut>(new DigitalOut(MbedJsApi::pinId2PinName(pin))));
nyatla 72:c118a7aa37a3 43 }
nyatla 72:c118a7aa37a3 44 return NyLPC_TBool_TRUE;
nyatla 72:c118a7aa37a3 45 }
nyatla 72:c118a7aa37a3 46 static NyLPC_TBool new2(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
nyatla 72:c118a7aa37a3 47 {
nyatla 72:c118a7aa37a3 48 ModJsonRpc* mod=(ModJsonRpc*)i_param;
nyatla 72:c118a7aa37a3 49 NyLPC_TUInt32 pin;
nyatla 72:c118a7aa37a3 50 NyLPC_TInt32 value;
nyatla 72:c118a7aa37a3 51 //pin number
nyatla 72:c118a7aa37a3 52 if( (!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,0,&pin)) ||
nyatla 72:c118a7aa37a3 53 (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,1,&value)))
nyatla 72:c118a7aa37a3 54 {
nyatla 72:c118a7aa37a3 55 mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
nyatla 72:c118a7aa37a3 56 }else{
nyatla 76:b375b3d750d8 57 addNewObjectBatch(*mod,i_rpc->method.id,new ModJsonRpc::RpcObject<DigitalOut>(new DigitalOut(MbedJsApi::pinId2PinName(pin),value)));
nyatla 72:c118a7aa37a3 58 }
nyatla 72:c118a7aa37a3 59 return NyLPC_TBool_TRUE;
nyatla 72:c118a7aa37a3 60 }
nyatla 72:c118a7aa37a3 61 static NyLPC_TBool write(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
nyatla 72:c118a7aa37a3 62 {
nyatla 72:c118a7aa37a3 63 ModJsonRpc* mod=(ModJsonRpc*)i_param;
nyatla 72:c118a7aa37a3 64 NyLPC_TInt32 iid,value;
nyatla 72:c118a7aa37a3 65 if( (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,0,&iid)) ||
nyatla 72:c118a7aa37a3 66 (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,1,&value)))
nyatla 72:c118a7aa37a3 67 {
nyatla 72:c118a7aa37a3 68 mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
nyatla 72:c118a7aa37a3 69 }else{
nyatla 72:c118a7aa37a3 70 DigitalOut* inst=(DigitalOut*)getObjectBatch(*mod,i_rpc->method.id,iid);
nyatla 72:c118a7aa37a3 71 if(inst!=NULL){
nyatla 72:c118a7aa37a3 72 inst->write(value);
nyatla 72:c118a7aa37a3 73 mod->putResult(i_rpc->method.id,"");
nyatla 72:c118a7aa37a3 74 }
nyatla 72:c118a7aa37a3 75 }
nyatla 72:c118a7aa37a3 76 return NyLPC_TBool_TRUE;
nyatla 72:c118a7aa37a3 77 }
nyatla 72:c118a7aa37a3 78 static NyLPC_TBool read(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
nyatla 72:c118a7aa37a3 79 {
nyatla 72:c118a7aa37a3 80 ModJsonRpc* mod=(ModJsonRpc*)i_param;
nyatla 72:c118a7aa37a3 81 NyLPC_TInt32 iid;
nyatla 72:c118a7aa37a3 82 if( (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,0,&iid)))
nyatla 72:c118a7aa37a3 83 {
nyatla 72:c118a7aa37a3 84 mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
nyatla 72:c118a7aa37a3 85 }else{
nyatla 72:c118a7aa37a3 86 DigitalOut* inst=(DigitalOut*)getObjectBatch(*mod,i_rpc->method.id,iid);
nyatla 72:c118a7aa37a3 87 if(inst!=NULL){
nyatla 72:c118a7aa37a3 88 int v=inst->read();
nyatla 72:c118a7aa37a3 89 mod->putResult(i_rpc->method.id,"%d",v);
nyatla 72:c118a7aa37a3 90 }
nyatla 72:c118a7aa37a3 91 }
nyatla 72:c118a7aa37a3 92 return NyLPC_TBool_TRUE;
nyatla 72:c118a7aa37a3 93 }
nyatla 72:c118a7aa37a3 94 };
nyatla 72:c118a7aa37a3 95
nyatla 72:c118a7aa37a3 96
nyatla 72:c118a7aa37a3 97
nyatla 75:2a18df0ef111 98 const static struct NyLPC_TJsonRpcMethodDef func_table[]=
nyatla 75:2a18df0ef111 99 {
nyatla 75:2a18df0ef111 100 { "_new1" ,"u" ,DigitalOutHandler::new1},
nyatla 75:2a18df0ef111 101 { "_new2" ,"ud" ,DigitalOutHandler::new2},
nyatla 75:2a18df0ef111 102 { "write" ,"dd" ,DigitalOutHandler::write},
nyatla 75:2a18df0ef111 103 { "read" ,"d" ,DigitalOutHandler::read},
nyatla 75:2a18df0ef111 104 { NULL ,NULL ,NULL}
nyatla 75:2a18df0ef111 105 };
nyatla 75:2a18df0ef111 106
nyatla 75:2a18df0ef111 107 const struct NyLPC_TJsonRpcClassDef MbedJsApi::RPC_MBED_DIGITAL_OUT={
nyatla 75:2a18df0ef111 108 "mbedJS","DigitalOut",func_table
nyatla 75:2a18df0ef111 109 };
nyatla 72:c118a7aa37a3 110
nyatla 72:c118a7aa37a3 111
nyatla 72:c118a7aa37a3 112
nyatla 72:c118a7aa37a3 113 }