This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Dependents: MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more
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 15:46:17 by 1.7.2