Jun Furutani / libMiMic

Fork of libMiMic by Ryo Iizuka

Revision:
72:c118a7aa37a3
Child:
75:2a18df0ef111
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed/jsonrpc/RpcDigitalOut.cpp	Fri Jun 13 11:06:33 2014 +0000
@@ -0,0 +1,108 @@
+#include "NyLPC_http.h"
+#include "mod/ModJsonRpc.h"
+#include "mbed.h"
+namespace MiMic
+{
+    class RpcHandlerBase
+    {
+    public:
+        static void addNewObjectBatch(ModJsonRpc& i_mod,unsigned int i_id,void* i_new_object)
+        {
+            int i=i_mod.addObject(i_new_object);
+            if(i<0){
+                delete i_new_object;
+                i_mod.putError(i_id,ModJsonRpc::INVALID_PARAMS);
+                return;
+            }
+            i_mod.putResult(i_id,"%d",i);
+            return;
+        }
+        static void* getObjectBatch(ModJsonRpc& i_mod,unsigned int i_id,int i_iid)
+        {
+            void* ret=i_mod.getObject(i_iid);
+            if(ret==NULL){
+                i_mod.putError(i_id,ModJsonRpc::INTERNAL_ERROR);
+            }
+            return ret;
+        }
+    };
+    
+    class DigitalOutHandler :RpcHandlerBase
+    {
+    public:
+        static NyLPC_TBool new1(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
+        {
+            ModJsonRpc* mod=(ModJsonRpc*)i_param;
+            NyLPC_TUInt32 pin;
+            if(!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,0,&pin)){
+                mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
+            }else{
+                addNewObjectBatch(*mod,i_rpc->method.id,new DigitalOut(PinName(pin)));
+            }
+            return NyLPC_TBool_TRUE;
+        }
+        static NyLPC_TBool new2(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
+        {
+            ModJsonRpc* mod=(ModJsonRpc*)i_param;
+            NyLPC_TUInt32 pin;
+            NyLPC_TInt32 value;
+            //pin number
+            if( (!NyLPC_TJsonRpcParserResult_getUInt32(i_rpc,0,&pin)) ||
+                (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,1,&value)))
+            {
+                mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
+            }else{
+                addNewObjectBatch(*mod,i_rpc->method.id,new DigitalOut(PinName(pin),value));
+            }
+            return NyLPC_TBool_TRUE;            
+        }
+        static NyLPC_TBool write(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
+        {
+            ModJsonRpc* mod=(ModJsonRpc*)i_param;
+            NyLPC_TInt32 iid,value;            
+            if( (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,0,&iid)) ||
+                (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,1,&value)))
+            {
+                mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
+            }else{
+                DigitalOut* inst=(DigitalOut*)getObjectBatch(*mod,i_rpc->method.id,iid);
+                if(inst!=NULL){
+                    inst->write(value);
+                    mod->putResult(i_rpc->method.id,"");
+                }
+            }
+            return NyLPC_TBool_TRUE;            
+        }
+        static NyLPC_TBool read(const union NyLPC_TJsonRpcParserResult* i_rpc,void* i_param)
+        {
+            ModJsonRpc* mod=(ModJsonRpc*)i_param;
+            NyLPC_TInt32 iid;            
+            if( (!NyLPC_TJsonRpcParserResult_getInt32(i_rpc,0,&iid)))
+            {
+                mod->putError(i_rpc->method.id,ModJsonRpc::INVALID_PARAMS);
+            }else{
+                DigitalOut* inst=(DigitalOut*)getObjectBatch(*mod,i_rpc->method.id,iid);
+                if(inst!=NULL){
+                    int v=inst->read();
+                    mod->putResult(i_rpc->method.id,"%d",v);
+                }
+            }
+            return NyLPC_TBool_TRUE; 
+        }
+    };
+    
+    
+    
+    const struct NyLPC_TJsonRpcMethodDef RpcDigitalOut[]=
+    {
+        { "_new1"   ,"u"    ,DigitalOutHandler::new1},
+        { "_new2"   ,"ud"   ,DigitalOutHandler::new2},
+        { "write"   ,"dd"   ,DigitalOutHandler::write},
+        { "read"    ,"d"    ,DigitalOutHandler::read},
+        { NULL      ,NULL   ,NULL}
+    };
+    
+
+
+
+}