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
RpcHandlerBase.h
00001 #include "mod/ModJsonRpc.h" 00002 #include "MbedJsApi.h" 00003 #include "mbed.h" 00004 namespace MiMic 00005 { 00006 00007 /** 00008 * JSONRPCハンドラのベースクラス。 00009 * よく使う関数群を定義します。 00010 */ 00011 class RpcHandlerBase 00012 { 00013 public: 00014 /** 00015 * MiMicRPCの定義するピンIDをmbedピンIDへ変換します。 00016 * ターゲットごとに実装します。 00017 */ 00018 static PinName pinId2PinName(unsigned int i_id); 00019 static PinMode pinmodeId2PinMode(unsigned int i_id); 00020 static PortName portId2PortName(unsigned int i_id); 00021 00022 /** 00023 * Websocketコネクションに同期したオブジェクトリストにnewオブジェクトを登録します。 00024 * 登録するオブジェクトは、{@link BasicRpcObject}でラップする必要があります。 00025 */ 00026 static void addNewObjectBatch(ModJsonRpc* i_mod,unsigned int i_id,ModJsonRpc::BasicRpcObject* i_new_object) 00027 { 00028 int i=i_mod->addObject(i_new_object); 00029 if(i<0){ 00030 delete i_new_object; 00031 i_mod->putError(i_id,ModJsonRpc::INVALID_PARAMS); 00032 return; 00033 } 00034 i_mod->putResult(i_id,"%d",i); 00035 return; 00036 } 00037 /** i_idx番目のRPCパラメータをiidとしてインスタンスを取得します。*/ 00038 static void* getObjectBatch(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,int i_idx=0) 00039 { 00040 NyLPC_TInt32 v; 00041 if(!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,i_idx,&v)){ 00042 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00043 return NULL; 00044 } 00045 void* ret=i_mod->getObject(v); 00046 if(ret==NULL){ 00047 i_mod->putError(i_rpc->method.id,ModJsonRpc::INTERNAL_ERROR); 00048 return NULL; 00049 } 00050 return ret; 00051 } 00052 00053 /** u...パラメータをN個のPinIDと解釈して返す。失敗した場合は終了処理も行う。 00054 */ 00055 static bool getParamsAsPin(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,PinName* o_pins,int i_num_of_pins) 00056 { 00057 for(int i=0;i<i_num_of_pins;i++){ 00058 NyLPC_TUInt32 p; 00059 if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,i,&p)){ 00060 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00061 return false; 00062 } 00063 o_pins[i]=pinId2PinName(p); 00064 } 00065 return true; 00066 } 00067 static bool getParamByte(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,unsigned char &o_val,int i_idx) 00068 { 00069 if(!NyLPC_TJsonRpcParserResult_getByte(i_rpc,i_idx,(NyLPC_TUInt8*)&o_val)){ 00070 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00071 return false; 00072 } 00073 return true; 00074 } 00075 static bool getParamByteArray(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,const unsigned char* &o_val,unsigned char &o_len,int i_idx) 00076 { 00077 if(!NyLPC_TJsonRpcParserResult_getByteArray(i_rpc,i_idx,(const NyLPC_TUInt8**)&o_val,&o_len)){ 00078 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00079 return false; 00080 } 00081 return true; 00082 } 00083 static bool getParamString(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,const char* &o_val,int i_idx) 00084 { 00085 if(!NyLPC_TJsonRpcParserResult_getStr(i_rpc,i_idx,(const NyLPC_TChar**)&o_val,NULL)){ 00086 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00087 return false; 00088 } 00089 return true; 00090 } 00091 static bool getParamInt(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,int& o_val,int i_idx) 00092 { 00093 if(!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,i_idx,((NyLPC_TInt32*)&o_val))){ 00094 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00095 return false; 00096 } 00097 return true; 00098 } 00099 static bool getParamUInt(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,unsigned int& o_val,int i_idx) 00100 { 00101 if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,i_idx,((NyLPC_TUInt32*)&o_val))){ 00102 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00103 return false; 00104 } 00105 return true; 00106 } 00107 static bool getParamsInt(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,int* o_val,int i_num_ofparams,int i_start=0) 00108 { 00109 for(int i=0;i<i_num_ofparams;i++){ 00110 if(!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,i_start+i,(NyLPC_TInt32*)(o_val+i))){ 00111 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00112 return false; 00113 } 00114 } 00115 return true; 00116 } 00117 static bool getParamsUInt(ModJsonRpc* i_mod,const union NyLPC_TJsonRpcParserResult* i_rpc,unsigned int* o_val,int i_num_ofparams,int i_start=0) 00118 { 00119 for(int i=0;i<i_num_ofparams;i++){ 00120 if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,i_start+i,(NyLPC_TUInt32*)(o_val+i))){ 00121 i_mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS); 00122 return false; 00123 } 00124 } 00125 return true; 00126 } 00127 00128 }; 00129 00130 }
Generated on Tue Jul 12 2022 16:22:59 by
