Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of libMiMic by
mbed/jsonrpc/RpcHandlerBase.h@85:416f8bbbdf54, 2014-07-04 (annotated)
- Committer:
- nyatla
- Date:
- Fri Jul 04 14:28:46 2014 +0000
- Revision:
- 85:416f8bbbdf54
- Parent:
- 78:8cdb8fc7eda8
RPC???I2C/Slave/Memory/Serial???; ?????????????RPC????????;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyatla | 77:8651d3c19a55 | 1 | #include "mod/ModJsonRpc.h" |
nyatla | 77:8651d3c19a55 | 2 | #include "MbedJsApi.h" |
nyatla | 77:8651d3c19a55 | 3 | #include "mbed.h" |
nyatla | 77:8651d3c19a55 | 4 | namespace MiMic |
nyatla | 77:8651d3c19a55 | 5 | { |
nyatla | 77:8651d3c19a55 | 6 | |
nyatla | 77:8651d3c19a55 | 7 | /** |
nyatla | 77:8651d3c19a55 | 8 | * JSONRPCハンドラのベースクラス。 |
nyatla | 77:8651d3c19a55 | 9 | * よく使う関数群を定義します。 |
nyatla | 77:8651d3c19a55 | 10 | */ |
nyatla | 77:8651d3c19a55 | 11 | class RpcHandlerBase |
nyatla | 77:8651d3c19a55 | 12 | { |
nyatla | 77:8651d3c19a55 | 13 | public: |
nyatla | 77:8651d3c19a55 | 14 | /** |
nyatla | 77:8651d3c19a55 | 15 | * MiMicRPCの定義するピンIDをmbedピンIDへ変換します。 |
nyatla | 77:8651d3c19a55 | 16 | * ターゲットごとに実装します。 |
nyatla | 77:8651d3c19a55 | 17 | */ |
nyatla | 77:8651d3c19a55 | 18 | static PinName pinId2PinName(unsigned int i_id); |
nyatla | 77:8651d3c19a55 | 19 | static PinMode pinmodeId2PinMode(unsigned int i_id); |
nyatla | 77:8651d3c19a55 | 20 | static PortName portId2PortName(unsigned int i_id); |
nyatla | 77:8651d3c19a55 | 21 | |
nyatla | 77:8651d3c19a55 | 22 | /** |
nyatla | 77:8651d3c19a55 | 23 | * Websocketコネクションに同期したオブジェクトリストにnewオブジェクトを登録します。 |
nyatla | 77:8651d3c19a55 | 24 | * 登録するオブジェクトは、{@link BasicRpcObject}でラップする必要があります。 |
nyatla | 77:8651d3c19a55 | 25 | */ |
nyatla | 77:8651d3c19a55 | 26 | static void addNewObjectBatch(ModJsonRpc* i_mod,unsigned int i_id,ModJsonRpc::BasicRpcObject* i_new_object) |
nyatla | 77:8651d3c19a55 | 27 | { |
nyatla | 77:8651d3c19a55 | 28 | int i=i_mod->addObject(i_new_object); |
nyatla | 77:8651d3c19a55 | 29 | if(i<0){ |
nyatla | 77:8651d3c19a55 | 30 | delete i_new_object; |
nyatla | 77:8651d3c19a55 | 31 | i_mod->putError(i_id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 77:8651d3c19a55 | 32 | return; |
nyatla | 77:8651d3c19a55 | 33 | } |
nyatla | 77:8651d3c19a55 | 34 | i_mod->putResult(i_id,"%d",i); |
nyatla | 77:8651d3c19a55 | 35 | return; |
nyatla | 77:8651d3c19a55 | 36 | } |
nyatla | 77:8651d3c19a55 | 37 | /** i_idx番目のRPCパラメータをiidとしてインスタンスを取得します。*/ |
nyatla | 77:8651d3c19a55 | 38 | static void* getObjectBatch(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,int i_idx=0) |
nyatla | 77:8651d3c19a55 | 39 | { |
nyatla | 77:8651d3c19a55 | 40 | NyLPC_TInt32 v; |
nyatla | 77:8651d3c19a55 | 41 | if(!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,i_idx,&v)){ |
nyatla | 77:8651d3c19a55 | 42 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 77:8651d3c19a55 | 43 | return NULL; |
nyatla | 77:8651d3c19a55 | 44 | } |
nyatla | 77:8651d3c19a55 | 45 | void* ret=i_mod->getObject(v); |
nyatla | 77:8651d3c19a55 | 46 | if(ret==NULL){ |
nyatla | 77:8651d3c19a55 | 47 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INTERNAL_ERROR); |
nyatla | 77:8651d3c19a55 | 48 | return NULL; |
nyatla | 77:8651d3c19a55 | 49 | } |
nyatla | 77:8651d3c19a55 | 50 | return ret; |
nyatla | 77:8651d3c19a55 | 51 | } |
nyatla | 77:8651d3c19a55 | 52 | |
nyatla | 77:8651d3c19a55 | 53 | /** u...パラメータをN個のPinIDと解釈して返す。失敗した場合は終了処理も行う。 |
nyatla | 77:8651d3c19a55 | 54 | */ |
nyatla | 77:8651d3c19a55 | 55 | static bool getParamsAsPin(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,PinName* o_pins,int i_num_of_pins) |
nyatla | 77:8651d3c19a55 | 56 | { |
nyatla | 77:8651d3c19a55 | 57 | for(int i=0;i<i_num_of_pins;i++){ |
nyatla | 77:8651d3c19a55 | 58 | NyLPC_TUInt32 p; |
nyatla | 77:8651d3c19a55 | 59 | if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,i,&p)){ |
nyatla | 77:8651d3c19a55 | 60 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 77:8651d3c19a55 | 61 | return false; |
nyatla | 77:8651d3c19a55 | 62 | } |
nyatla | 77:8651d3c19a55 | 63 | o_pins[i]=pinId2PinName(p); |
nyatla | 77:8651d3c19a55 | 64 | } |
nyatla | 77:8651d3c19a55 | 65 | return true; |
nyatla | 77:8651d3c19a55 | 66 | } |
nyatla | 85:416f8bbbdf54 | 67 | static bool getParamByte(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,unsigned char &o_val,int i_idx) |
nyatla | 85:416f8bbbdf54 | 68 | { |
nyatla | 85:416f8bbbdf54 | 69 | if(!NyLPC_TJsonRpcParserResult_getByte(i_rpc,i_idx,(NyLPC_TUInt8*)&o_val)){ |
nyatla | 85:416f8bbbdf54 | 70 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 85:416f8bbbdf54 | 71 | return false; |
nyatla | 85:416f8bbbdf54 | 72 | } |
nyatla | 85:416f8bbbdf54 | 73 | return true; |
nyatla | 85:416f8bbbdf54 | 74 | } |
nyatla | 85:416f8bbbdf54 | 75 | static bool getParamByteArray(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,const unsigned char* &o_val,unsigned char &o_len,int i_idx) |
nyatla | 85:416f8bbbdf54 | 76 | { |
nyatla | 85:416f8bbbdf54 | 77 | if(!NyLPC_TJsonRpcParserResult_getByteArray(i_rpc,i_idx,(const NyLPC_TUInt8**)&o_val,&o_len)){ |
nyatla | 85:416f8bbbdf54 | 78 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 85:416f8bbbdf54 | 79 | return false; |
nyatla | 85:416f8bbbdf54 | 80 | } |
nyatla | 85:416f8bbbdf54 | 81 | return true; |
nyatla | 85:416f8bbbdf54 | 82 | } |
nyatla | 85:416f8bbbdf54 | 83 | static bool getParamString(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,const char* &o_val,int i_idx) |
nyatla | 85:416f8bbbdf54 | 84 | { |
nyatla | 85:416f8bbbdf54 | 85 | if(!NyLPC_TJsonRpcParserResult_getStr(i_rpc,i_idx,(const NyLPC_TChar**)&o_val,NULL)){ |
nyatla | 85:416f8bbbdf54 | 86 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 85:416f8bbbdf54 | 87 | return false; |
nyatla | 85:416f8bbbdf54 | 88 | } |
nyatla | 85:416f8bbbdf54 | 89 | return true; |
nyatla | 85:416f8bbbdf54 | 90 | } |
nyatla | 77:8651d3c19a55 | 91 | static bool getParamInt(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,int& o_val,int i_idx) |
nyatla | 77:8651d3c19a55 | 92 | { |
nyatla | 77:8651d3c19a55 | 93 | if(!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,i_idx,((NyLPC_TInt32*)&o_val))){ |
nyatla | 77:8651d3c19a55 | 94 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 77:8651d3c19a55 | 95 | return false; |
nyatla | 77:8651d3c19a55 | 96 | } |
nyatla | 77:8651d3c19a55 | 97 | return true; |
nyatla | 77:8651d3c19a55 | 98 | } |
nyatla | 77:8651d3c19a55 | 99 | static bool getParamUInt(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,unsigned int& o_val,int i_idx) |
nyatla | 77:8651d3c19a55 | 100 | { |
nyatla | 77:8651d3c19a55 | 101 | if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,i_idx,((NyLPC_TUInt32*)&o_val))){ |
nyatla | 77:8651d3c19a55 | 102 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 77:8651d3c19a55 | 103 | return false; |
nyatla | 77:8651d3c19a55 | 104 | } |
nyatla | 77:8651d3c19a55 | 105 | return true; |
nyatla | 77:8651d3c19a55 | 106 | } |
nyatla | 77:8651d3c19a55 | 107 | static bool getParamsInt(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,int* o_val,int i_num_ofparams,int i_start=0) |
nyatla | 77:8651d3c19a55 | 108 | { |
nyatla | 77:8651d3c19a55 | 109 | for(int i=0;i<i_num_ofparams;i++){ |
nyatla | 77:8651d3c19a55 | 110 | if(!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,i_start+i,(NyLPC_TInt32*)(o_val+i))){ |
nyatla | 77:8651d3c19a55 | 111 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 77:8651d3c19a55 | 112 | return false; |
nyatla | 77:8651d3c19a55 | 113 | } |
nyatla | 77:8651d3c19a55 | 114 | } |
nyatla | 77:8651d3c19a55 | 115 | return true; |
nyatla | 77:8651d3c19a55 | 116 | } |
nyatla | 77:8651d3c19a55 | 117 | static bool getParamsUInt(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,unsigned int* o_val,int i_num_ofparams,int i_start=0) |
nyatla | 77:8651d3c19a55 | 118 | { |
nyatla | 77:8651d3c19a55 | 119 | for(int i=0;i<i_num_ofparams;i++){ |
nyatla | 77:8651d3c19a55 | 120 | if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,i_start+i,(NyLPC_TUInt32*)(o_val+i))){ |
nyatla | 77:8651d3c19a55 | 121 | i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); |
nyatla | 77:8651d3c19a55 | 122 | return false; |
nyatla | 77:8651d3c19a55 | 123 | } |
nyatla | 77:8651d3c19a55 | 124 | } |
nyatla | 77:8651d3c19a55 | 125 | return true; |
nyatla | 77:8651d3c19a55 | 126 | } |
nyatla | 77:8651d3c19a55 | 127 | |
nyatla | 77:8651d3c19a55 | 128 | }; |
nyatla | 77:8651d3c19a55 | 129 | |
nyatla | 77:8651d3c19a55 | 130 | } |