OSDN Git Service

2.0.2
[mimic/MiMicSDK.git] / misc / mbedJS / mbddJS.API / mbedJS / mbed.I2CSlave.js
index 7ab644f..572e634 100644 (file)
@@ -14,8 +14,8 @@ var MI=MiMicJS;
  * インスタンスをバインドするMCUオブジェクトです。\r
  * @param {[PinName,PinName]} i_params\r
  * i2Cバスを構成するピンIDを指定します。sda,sclの順番です。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
  * <p>\r
  * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
  * <ul>\r
@@ -54,7 +54,10 @@ var MI=MiMicJS;
  * </ul>\r
  * <p>\r
  * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
  * <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
  * @return {mbedJS.I2CSlave}\r
  * @example //Callback\r
  * var mcu=new mbedJS.Mcu("192.168.128.39",\r
@@ -138,17 +141,17 @@ var CLASS=function I2CSlave(i_mcu,i_params,i_handler)
                var _t=this;\r
                _t._mcu=i_mcu;\r
                _t._lc=CLASS;\r
-               if(MI.isGenerator(i_handler)){_t._gen=i_handler;}\r
-               else if(i_handler){_t._event=i_handler}\r
-               function cb(j)\r
-               {\r
-                       _t._oid=j.result[0];\r
-                       if(_t._event.onNew){_t._event.onNew();}\r
-                       if(_t._gen){_t._gen.next(_t);}\r
-                       _t._lc=null;\r
-               }\r
-               MI.assertInt(i_params);         \r
-               return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],cb);\r
+               var cb=MI._initHandler.call(_t,i_handler);\r
+               MI.assertInt(i_params);\r
+               _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],\r
+                       function(j)\r
+                       {\r
+                               _t._oid=j.result[0];\r
+                               if(cb){cb();}\r
+                               if(_t._gen){_t._gen.next(_t);}\r
+                               _t._lc=null;\r
+                       }\r
+               );\r
        }catch(e){\r
                throw new MI.MiMicException(e);\r
        }       \r
@@ -202,15 +205,17 @@ CLASS.prototype=
        {\r
                try{\r
                        var _t=this;\r
-                       if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+                       var cb=MI._getCb(arguments,_t._event.onAddress);\r
+                       MI._assertYield.call(_t);\r
                        _t._lc=CLASS.write;\r
                        MI.assertInt(i_value);\r
                        return _t._mcu.rpc(_t.RPC_NS+":address",_t._oid+","+i_value,\r
-                       function(j){\r
-                               if(_t._event.onAddress){_t._event.onAddress();}\r
-                               if(_t._gen){_t._gen.next();}\r
-                                _t._lc=null;\r
-                       });\r
+                               function(j){\r
+                                       if(cb){cb();}\r
+                                       if(_t._gen){_t._gen.next();}\r
+                                        _t._lc=null;\r
+                               }\r
+                       );\r
                }catch(e){\r
                        throw new MI.MiMicException(e);\r
                }                       \r
@@ -230,16 +235,17 @@ CLASS.prototype=
        {\r
                try{\r
                        var _t=this;\r
-                       if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+                       var cb=MI._getCb(arguments,_t._event.onFrequency);\r
+                       MI._assertYield.call(_t);\r
                        _t._lc=CLASS.frequency;\r
                        MI.assertInt(i_hz);\r
                        return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_hz,\r
-                       function (j)\r
-                       {\r
-                               if(_t._event.onFrequency){_t._event.onFrequency();}\r
-                               if(_t._gen){_t._gen.next();}\r
-                                _t._lc=null;\r
-                       }\r
+                               function (j)\r
+                               {\r
+                                       if(cb){cb();}\r
+                                       if(_t._gen){_t._gen.next();}\r
+                                        _t._lc=null;\r
+                               }\r
                        );\r
                }catch(e){\r
                        throw new MI.MiMicException(e);\r
@@ -283,19 +289,20 @@ CLASS.prototype=
        {\r
                try{\r
                        var _t=this;\r
-                       if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+                       var cb=MI._getCb(arguments,_t._event.onRead);\r
+                       MI._assertYield.call(_t);\r
                        _t._lc=CLASS.read;\r
-                       function cb(j){\r
+                       function rcb(j){\r
                                var v=j.result.length>1?{ret:j.result[0],data:MI.bstr2byteArray(j.result[1])}:j.result[0];\r
-                               if(_t._event.onRead){_t._event.onRead(v);}\r
+                               if(cb){cb(v);}\r
                                if(_t._gen){_t._gen.next(v);}\r
                                 _t._lc=null;\r
                        }\r
-                       if(arguments.length==0){\r
-                               return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid,cb);\r
+                       if(MI._getBaseArgsLen(arguments)==0){\r
+                               return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid,rcb);\r
                        }else{\r
                                MI.assertInt(arguments[0]);\r
-                               return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+arguments[0],cb);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+arguments[0],rcb);\r
                        }\r
                }catch(e){\r
                        throw new MI.MiMicException(e);\r
@@ -316,16 +323,17 @@ CLASS.prototype=
        {\r
                try{\r
                        var _t=this;\r
-                       if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+                       var cb=MI._getCb(arguments,_t._event.onReceive);\r
+                       MI._assertYield.call(_t);\r
                        _t._lc=CLASS.start;                     \r
                        return _t._mcu.rpc(_t.RPC_NS+":receive",_t._oid,\r
-                       function (j)\r
-                       {\r
-                               var v=j.result[0];\r
-                               if(_t._event.onReceive){_t._event.onReceive(v);}\r
-                               if(_t._gen){_t._gen.next(v);}\r
-                                _t._lc=null;\r
-                       }\r
+                               function (j)\r
+                               {\r
+                                       var v=j.result[0];\r
+                                       if(cb){cb(v);}\r
+                                       if(_t._gen){_t._gen.next(v);}\r
+                                        _t._lc=null;\r
+                               }\r
                        );\r
                }catch(e){\r
                        throw new MI.MiMicException(e);\r
@@ -335,8 +343,6 @@ CLASS.prototype=
         * 引数が3個の場合\r
         * @name mbedJS.I2CSlave#write.1\r
         * @function\r
-        * @param {int} address\r
-        * 8ビットのI2CSlaveSlaveアドレスです。\r
         * @param {byte[]} data\r
         * 送信するデータを格納したバイト配列です。\r
         * @return {int}\r
@@ -368,20 +374,21 @@ CLASS.prototype=
        {\r
                try{\r
                        var _t=this;\r
-                       if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+                       var cb=MI._getCb(arguments,_t._event.onWrite);\r
+                       MI._assertYield.call(_t);\r
                        _t._lc=CLASS.write;\r
-                       function cb(j){\r
+                       function rcb(j){\r
                                var v=j.result[0];\r
-                               if(_t._event.onWrite){_t._event.onWrite(v);}\r
+                               if(cb){cb(v);}\r
                                if(_t._gen){_t._gen.next(v);}\r
                                 _t._lc=null;\r
                        }\r
                        if(!MI.isArray(arguments[0])){\r
                                MI.assertInt(arguments[0]);\r
-                               return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],cb);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],rcb);\r
                        }else{\r
                                var a=arguments;\r
-                               return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+",\""+MI.byteArray2bstr(a[0])+"\"",cb);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+",\""+MI.byteArray2bstr(a[0])+"\"",rcb);\r
                        }\r
                }catch(e){\r
                        throw new MI.MiMicException(e);\r
@@ -400,15 +407,16 @@ CLASS.prototype=
        {\r
                try{\r
                        var _t=this;\r
-                       if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+                       var cb=MI._getCb(arguments,_t._event.onStop);\r
+                       MI._assertYield.call(_t);\r
                        _t._lc=CLASS.stop;                      \r
                        return _t._mcu.rpc(_t.RPC_NS+":stop",_t._oid,\r
-                       function (j)\r
-                       {\r
-                               if(_t._event.onStop){_t._event.onStop();}\r
-                               if(_t._gen){_t._gen.next();}\r
-                                _t._lc=null;\r
-                       }\r
+                               function (j)\r
+                               {\r
+                                       if(cb){cb();}\r
+                                       if(_t._gen){_t._gen.next();}\r
+                                        _t._lc=null;\r
+                               }\r
                        );\r
                }catch(e){\r
                        throw new MI.MiMicException(e);\r