This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Dependents:   MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers RpcHandlerBase.h Source File

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 }