* MiMicJsAPIのバージョン文字列。\r
* @name MiMicJS#VERSION\r
*/\r
- NS.VERSION="MiMicJsAPI/2.0.1";\r
+ NS.VERSION="MiMicJsAPI/2.0.2";\r
/**\r
* 配列要素、又は値がすべてInt値でない場合に例外を起こします。\r
* @name MiMicJS.assertInt\r
};\r
\r
/**\r
- * @private\r
* オブジェクトがジェネレータクラスであるかを返します。\r
+ * @private\r
*/\r
NS.isGenerator=function isGenerator(o)\r
{\r
return o.toString().indexOf('Generator')!=-1;\r
};\r
/**\r
+ * オブジェクトが関数であるかを返します。\r
+ * @private\r
+ */\r
+ NS.isFunction=function isFunction(o){\r
+ return (typeof o == 'function');\r
+ }\r
+ /**\r
* @private\r
* 現在の時刻を返します。\r
*/\r
window[key]=v[key];\r
}\r
}\r
+ /**\r
+ * MiMicSDK向けの内部関数です。\r
+ * 末尾引数が関数の場合にはその関数を、異なる場合はi_cbを返却します。\r
+ * @private\r
+ * @param i_arg\r
+ * 引数配列を指定します。\r
+ * @param i_default_cb\r
+ * 引数配列に関数がなかった場合に返す値を指定します。\r
+ */\r
+ NS._getCb=function _getCb(i_arg,i_default_cb)\r
+ {\r
+ if(i_arg.length==0){\r
+ return i_default_cb;\r
+ }\r
+ return NS.isFunction(i_arg[i_arg.length-1])?i_arg[i_arg.length-1]:i_default_cb;\r
+ }\r
+ /**\r
+ * MiMicSDK向けの関数です。\r
+ * 末尾の拡張変数を取り除いたarguments引数の数を返します。\r
+ * @private\r
+ */\r
+ NS._getBaseArgsLen=function _getBaseArgsLen(i_arg)\r
+ {\r
+ if(i_arg.length==0 || (!NS.isFunction(i_arg[i_arg.length-1]))){\r
+ return i_arg.length;\r
+ }\r
+ return i_arg.length==1?0:i_arg.length-1;\r
+ }\r
+ \r
+ /**\r
+ * MiMicSDK向けの関数です。\r
+ * インスタンスがyieldコール可能かをチェックし、可能ならコール関数を記録します。\r
+ * 関数は、インスタンスの_gen,_lcをチェックして、yieldが不可能な場合に例外を発生します。\r
+ * _assertYield.call(this)でコールして下さい。\r
+ * @private\r
+ */\r
+ NS._assertYield=function _assertYield()\r
+ {\r
+ if(this._gen && this._lc){\r
+ throw new NS.MiMicException(NS.Error.NG_YIELD_NOT_COMPLETED);\r
+ }\r
+ }\r
+ /**\r
+ * MiMicSDK向けの関数です。コンストラクタでイベントハンドラをセットアップする定型処理です。\r
+ * i_handlerにセットされたオブジェクトに従って_gen,_eventメンバをセットします。\r
+ * _initHandler.call(this,i_handler)でコールして下さい。\r
+ * @private\r
+ */\r
+ NS._initHandler=function _initHandler(i_handler)\r
+ {\r
+ if(NS.isGenerator(i_handler)){\r
+ this._gen=i_handler;\r
+ }else if(NS.isFunction(i_handler)){\r
+ return i_handler;\r
+ }else if(i_handler){\r
+ this._event=i_handler;\r
+ return i_handler.onNew;\r
+ }\r
+ return null;\r
+ }\r
+ \r
+ \r
}());\r
-\r
+ \r
(function(){\r
var NS=MiMicJS;\r
\r
rx+='})';\r
rxst=0;\r
{\r
- log(rx);//Debug\r
+// log(rx);//Debug\r
//JSONがたぶん確定\r
var j=eval(rx);\r
for(var i2=q.length-1;i2>=0;i2--){\r
sendMethod:function callJsonRpc(i_method,i_params,i_callback)\r
{\r
var v="{\"jsonrpc\":\"2.0\",\"method\":\""+i_method+"\",\"params\":["+i_params+"],\"id\":"+this._method_id+"}";\r
- log(v);//Debug\r
+// log(v);//Debug\r
this._ws.send(v);\r
this._q.push([this._method_id,i_callback]);//キューに記録\r
this._method_id=(this._method_id+1)&0x0fffffff;//IDインクリメント\r
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {PinName} i_params\r
* ピンIDを指定します。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.AnalogIn}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
MI.assertInt(i_params); \r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,\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
{\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
return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0]/10000;\r
- if(_t._event.onRead){_t._event.onRead(v);}\r
- if(_t._gen){_t._gen.next(v);}\r
- _t._lc=null;\r
- }\r
+ function (j)\r
+ {\r
+ var v=j.result[0]/10000;\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
{\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_u16);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.read_u16;\r
return _t._mcu.rpc(_t.RPC_NS+":read_u16",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onRead_u16){_t._event.onRead_u16(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
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {PinName} i_params\r
* ピンIDを指定します。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.AnalogOut}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
MI.assertInt(i_params);\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,\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
{\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
MI.assertNumber(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+Math.round(i_value*10000),\r
- function(j){\r
- if(_t._event.onWrite){_t._event.onWrite();}\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
{\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_u16);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.write;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+i_value,\r
- function(j){\r
- if(_t._event.onWrite_u16){_t._event.onWrite_u16();}\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
{\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
return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0]/10000;\r
- if(_t._event.onRead){_t._event.onRead(v);}\r
- if(_t._gen){_t._gen.next(v);}\r
- _t._lc=null;\r
- }\r
+ function (j)\r
+ {\r
+ var v=j.result[0]/10000;\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
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {[PinName...]} i_params\r
* ピンIDの配列を指定します。要素数の最大値は16です。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.BusIn}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
//Pin配列の正規化\r
var ap=i_params;\r
if(ap.length<1 ||ap.length>16){\r
for(;i<16;i++){\r
pins+=","+NS.PinName.NC;\r
}\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",pins,cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",pins,\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
{\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
return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onRead){_t._event.onRead(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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
- _t._lc=CLASS.mode;\r
+ var cb=MI._getCb(arguments,_t._event.onMode);\r
+ MI._assertYield.call(_t);\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":mode",_t._oid+","+i_value,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onMode){_t._event.onMode(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
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {[PinName...]} i_params\r
* ピンIDの配列を指定します。要素数の最大値は16です。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* \r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.BusIn}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
//Pin配列の正規化\r
var ap=i_params;\r
//数値のみの配列かな?\r
for(;i<16;i++){\r
pins+=","+NS.PinName.NC;\r
}\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",pins,cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",pins,\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
{\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
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,\r
- function(j){\r
- if(_t._event.onWrite){_t._event.onWrite();}\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
{\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
return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onRead){_t._event.onRead(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
{\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.onMode);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.mode;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":mode",_t._oid+","+i_value,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onMode){_t._event.onMode(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
}\r
{\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.onInput);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.input;\r
return _t._mcu.rpc(_t.RPC_NS+":input",_t._oid,\r
function (j)\r
{\r
- if(_t._event.onInput){_t._event.onInput();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\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.onOutput);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.mode;\r
return _t._mcu.rpc(_t.RPC_NS+":output",_t._oid,\r
function (j)\r
{\r
- if(_t._event.onOutput){_t._event.onOutput();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {[PinName...]} i_params\r
* ピンIDの配列を指定します。要素数の最大値は16です。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.BusOut}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
//Pin配列の正規化\r
var ap=i_params;\r
if(ap.length<1 ||ap.length>16){\r
for(;i<16;i++){\r
pins+=","+NS.PinName.NC;\r
}\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",pins,cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",pins,\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
{\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
MI.assertInt(i_value); \r
return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,\r
- function(j){\r
- if(_t._event.onWrite){_t._event.onWrite();}\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
{\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
return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onRead){_t._event.onRead(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
}\r
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {PinName} i_params\r
* ピンIDを指定します。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.DigitalIn}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
MI.assertInt(i_params);\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,\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
+ \r
}catch(e){\r
throw new MI.MiMicException(e);\r
}\r
{\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
return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
function (j)\r
{\r
var v=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
{\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.onMode);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.mode;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":mode",_t._oid+","+i_value,\r
function (j)\r
{\r
var v=j.result[0];\r
- if(_t._event.onMode){_t._event.onMode(v);}\r
+ if(cb){cb(v);}\r
if(_t._gen){_t._gen.next(v);}\r
_t._lc=null;\r
}\r
* <p>配列の場合は次の順番でパラメータを指定します。\r
* <pre>{pin,value}</pre>\r
* </p>\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* \r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.DigitalOut}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
+ function rcb(j)\r
{\r
_t._oid=j.result[0];\r
- if(_t._event.onNew){_t._event.onNew();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next(_t);}\r
_t._lc=null;\r
}\r
MI.assertInt(pr[0]);\r
if(pr[1]){\r
MI.assertInt(pr[1]);\r
- return _t._mcu.rpc(_t.RPC_NS+":_new2",pr[0]+","+pr[1],cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new2",pr[0]+","+pr[1],rcb);\r
}else{\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0],cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0],rcb);\r
}\r
}catch(e){\r
throw new MI.MiMicException(e);\r
{\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
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,\r
function(j){\r
- if(_t._event.onWrite){_t._event.onWrite();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\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
return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
function (j)\r
{\r
var v=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
* インスタンスをバインドする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
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.I2C}\r
* @example //Callback\r
* var st=0;\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
MI.assertInt(i_params); \r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],cb);\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
{\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
{\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==1){\r
+ //ベース引数の数で処理の切り替え\r
+ if(MI._getBaseArgsLen(arguments)==1){\r
MI.assertInt(arguments[0]);\r
- return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid+","+arguments[0],cb);\r
+ return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid+","+arguments[0],rcb);\r
}else{\r
var a=arguments;\r
MI.assertInt([a[0],a[1]]);\r
- return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+a[0]+","+a[1]+","+(a[2]?1:0),cb);\r
+ return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+a[0]+","+a[1]+","+(a[2]?1:0),rcb);\r
}\r
}catch(e){\r
throw new MI.MiMicException(e);\r
{\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(arguments.length==1){\r
+ if(MI._getBaseArgsLen(arguments)==1){\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
MI.assertInt(a[0]);\r
- return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+","+a[0]+",\""+MI.byteArray2bstr(a[1])+"\","+(a[2]?1:0),cb);\r
+ return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+","+a[0]+",\""+MI.byteArray2bstr(a[1])+"\","+(a[2]?1:0),rcb);\r
}\r
}catch(e){\r
throw new MI.MiMicException(e);\r
{\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.onStart);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.start; \r
return _t._mcu.rpc(_t.RPC_NS+":start",_t._oid,\r
- function (j)\r
- {\r
- if(_t._event.onStart){_t._event.onStart();}\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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
- _t._lc=CLASS.stop; \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
* インスタンスをバインドする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
* </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
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
{\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
{\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
{\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
{\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
* 引数が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
{\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
{\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
},\r
/**\r
* コールバック関数を全てキャンセルして、Mcuとの接続をシャットダウンします。\r
+ * この関数は即座に完了します。\r
* @name mbedJS.Mcu#shutdown\r
* @function\r
*/\r
* 指定idのオブジェクトをMCUのメモリから削除します。\r
* @name mbedJS.Mcu#disposeObject\r
* @function\r
+ * @param {int} i_oid\r
+ * オブジェクトID。\r
+ * mbedJSオブジェクトが所有するリモートオブジェクトのIDを指定します。\r
* @return {boolean}\r
* 結果を返します。\r
*/\r
* @constructor\r
* @param {mbedJS.Mcu} i_mcu\r
* インスタンスをバインドするMCUオブジェクトです。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.Memory}\r
* @example //Callback\r
* var s=0;\r
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
- if(_t._event.onNew){_t._event.onNew();}\r
- if(_t._gen){_t._gen.next(_t);}\r
- _t._lc=null;\r
- }\r
- return _t._mcu.rpc(_t.RPC_NS+":init","",cb);\r
+ var cb=MI._initHandler.call(_t,i_handler);\r
+ _t._mcu.rpc(_t.RPC_NS+":init","",\r
+ function(j)\r
+ {\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
//read(i_addr,i_len)\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
- var a=[i_addr,MI.isUndefined(i_size,1)];\r
+ var a=[i_addr,(MI._getBaseArgsLen(arguments)==1)?i_size:1];\r
MI.assertInt(a);\r
return _t._mcu.rpc(_t.RPC_NS+":read",a[0]+","+a[1],\r
function (j)\r
{\r
var v=MI.bstr2byteArray(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
{\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
MI.assertInt(i_addr);\r
MI.assertInt(i_v);\r
return _t._mcu.rpc(_t.RPC_NS+":write",i_addr+",\""+MI.byteArray2bstr(i_v)+"\"",\r
- function (j)\r
- {\r
- if(_t._event.onWrite){_t._event.onWrite();}\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
//read(i_addr,i_len)\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.onRead32);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.read32;\r
- var a=[i_addr,MI.isUndefined(i_size,4)];\r
+ \r
+ var a=[i_addr,(MI._getBaseArgsLen(arguments)==1)?4:i_size];\r
if(a[1]%4!=0){\r
throw new MI.MiMicException(MI.Error.NG_INVALID_ARG);\r
}\r
MI.assertInt(a);\r
return _t._mcu.rpc(_t.RPC_NS+":read",a[0]+","+a[1],\r
- function (j)\r
- {\r
- var v=MI.bstr2uintArray(j.result[0]);\r
- if(_t._event.onRead32){_t._event.onRead32(v);}\r
- if(_t._gen){_t._gen.next(v);}\r
- _t._lc=null;\r
- });\r
+ function (j)\r
+ {\r
+ var v=MI.bstr2uintArray(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
}\r
{\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.onWrite32);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.write32;\r
MI.assertInt(i_addr);\r
MI.assertInt(i_v);\r
return _t._mcu.rpc(_t.RPC_NS+":write",i_addr+",\""+MI.uintArray2bstr(i_v)+"\"",\r
- function (j)\r
- {\r
- if(_t._event.onWrite){_t._event.onWrite32();}\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
* <p>配列の場合は次の順番でパラメータを指定します。\r
* <pre>{port,mask}</pre>\r
* </p>\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.PortIn}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
//引数の正規化\r
var pr;\r
if(MI.isHashArray(i_params)){\r
pr=i_params;\r
}\r
MI.assertInt(pr);\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[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
{\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
return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onRead){_t._event.onRead(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
} \r
* <p>配列の場合は次の順番でパラメータを指定します。\r
* <pre>{port,mask}</pre>\r
* </p>\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.PortOut}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
//引数の正規化\r
var pr;\r
if(MI.isHashArray(i_params)){\r
pr=i_params;\r
}\r
MI.assertInt(pr);\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[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
{\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
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,\r
- function(j){\r
- if(_t._event.onWrite){_t._event.onWrite();}\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
{\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
return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onRead){_t._event.onRead(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
}\r
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {PinName} i_params\r
* ピンIDを指定します。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.PwmOut}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
MI.assertInt(i_params);\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,\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
{\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
MI.assertNumber(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+Math.round(i_value*10000),\r
function(j){\r
- if(_t._event.onWrite){_t._event.onWrite();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\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
return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,\r
function (j)\r
{\r
var v=j.result[0]/10000;\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
{\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.onPeriod);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.period;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":period_fx",_t._oid+","+Math.round(i_value*10000),\r
function(j){\r
- if(_t._event.onPeriod){_t._event.onPeriod();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\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.onPeriod_ms);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.period_ms;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":period_ms",_t._oid+","+Math.round(i_value),\r
function(j){\r
- if(_t._event.onPeriod_ms){_t._event.onPeriod_ms();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\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.onPeriod_us);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.period_us;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":period_us",_t._oid+","+Math.round(i_value),\r
function(j){\r
- if(_t._event.onPeriod_us){_t._event.onPeriod_us();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\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.onPulsewidth);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.pulsewidth;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_fx",_t._oid+","+Math.round(i_value*10000),\r
function(j){\r
- if(_t._event.onPulsewidth){_t._event.onPulsewidth();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\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.onPulsewidth_ms);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.pulsewidth_ms;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_ms",_t._oid+","+Math.round(i_value),\r
- function(j){\r
- if(_t._event.onPulsewidth_ms){_t._event.onPulsewidth_ms();}\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
{\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.onPulsewidth_us);\r
+ MI._assertYield.call(_t);\r
_t._lc=CLASS.pulsewidth_us;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_us",_t._oid+","+Math.round(i_value),\r
- function(j){\r
- if(_t._event.onPulsewidth_us){_t._event.onPulsewidth_us();}\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
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {[PinName,PinName,PinName]} i_params\r
* SPIを構成する3つのPinNameを格納する配列です。mosi,miso,sclkの順番です。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.SPI}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
MI.assertInt(i_params);\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+NS.PinName.NC,cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+NS.PinName.NC,\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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onWrite);\r
_t._lc=CLASS.write;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,\r
- function(j){\r
- var v=j.result[0];\r
- if(_t._event.onWrite){_t._event.onWrite(v);}\r
- if(_t._gen){_t._gen.next(v);}\r
- _t._lc=null;\r
- });\r
+ function(j){\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
}\r
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onFrequency);\r
_t._lc=CLASS.frequency;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_value,\r
- function(j){\r
- if(_t._event.onFrequency){_t._event.onFrequency();}\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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onFormat);\r
_t._lc=CLASS.format;\r
var mode=i_mode?i_mode:0;\r
MI.assertInt([i_bits,mode]);\r
return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+i_bits+","+mode,\r
- function(j){\r
- if(_t._event.onFormat){_t._event.onFormat();}\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
* @param {[PinName,PinName,PinName]} i_params\r
* SPIを構成する4つのPinNameを格納する配列です。\r
* mosi, miso, sclkの順番で設定します。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.SPI}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
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
+ var cb=MI._initHandler.call(_t,i_handler);\r
MI.assertInt(i_params);\r
- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+i_params[3],cb);\r
+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+i_params[3],\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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onFrequency);\r
_t._lc=CLASS.frequency;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_value,\r
function(j){\r
- if(_t._event.onFrequency){_t._event.onFrequency();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onFormat);\r
_t._lc=CLASS.format;\r
var mode=i_mode?i_mode:0;\r
MI.assertInt([i_bits,mode]);\r
return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+i_bits+","+mode,\r
function(j){\r
- if(_t._event.onFormat){_t._event.onFormat();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onRead);\r
_t._lc=CLASS.read;\r
return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
function (j)\r
{\r
var v=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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onReceive);\r
_t._lc=CLASS.receive;\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(cb){cb(v);}\r
if(_t._gen){_t._gen.next(v);}\r
_t._lc=null;\r
});\r
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onReply);\r
_t._lc=CLASS.reply;\r
MI.assertInt(i_value);\r
return _t._mcu.rpc(_t.RPC_NS+":reply",_t._oid+","+i_value,\r
function (j)\r
{\r
- if(_t._event.onReply){_t._event.onReply();}\r
+ if(cb){cb();}\r
if(_t._gen){_t._gen.next();}\r
_t._lc=null;\r
});\r
* インスタンスをバインドするMCUオブジェクトです。\r
* @param {[PinName,PinName]} i_params\r
* UARTを構成する2本のピンを指定します。tx,rxの順で設定します。\r
- * @param {HashMap|Generator} i_event\r
- * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * @param {HashMap|Generator|function} i_handler\r
+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
* <p>\r
* 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
* <ul>\r
* </ul>\r
* <p>\r
* Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * </p>\r
* <p>\r
+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
+ * </p>\r
* @return {mbedJS.Serial}\r
* @example //Callback\r
* var mcu=new mbedJS.Mcu("192.168.128.39",\r
{\r
try{\r
var _t=this;\r
+ var cb;\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
+ //ハンドラの初期化\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],cb);\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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onFormat);\r
_t._lc=CLASS.format;\r
var p=[MI.isUndefined(i_bits,8),MI.isUndefined(i_parity,_t.Parity.None),MI.isUndefined(i_stop_bits,1)];\r
MI.assertInt(p);\r
return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+p[0]+","+p[1]+","+p[2],\r
- function (j)\r
- {\r
- if(_t._event.onFormat){_t._event.onFormat();}\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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onReadable);\r
_t._lc=CLASS.readable;\r
return _t._mcu.rpc(_t.RPC_NS+":readable",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onReadable){_t._event.onReadable(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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onWriteable);\r
_t._lc=CLASS.writeable; \r
return _t._mcu.rpc(_t.RPC_NS+":writeable",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0]?true:false;\r
- if(_t._event.onWriteable){_t._event.onWriteable(v);}\r
- if(_t._gen){_t._gen.next(v);}\r
- _t._lc=null;\r
- }\r
+ function (j)\r
+ {\r
+ var v=j.result[0]?true:false;\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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onSend_break);\r
_t._lc=CLASS.send_break;\r
return _t._mcu.rpc(_t.RPC_NS+":send_break",_t._oid,\r
- function (j)\r
- {\r
- if(_t._event.onSend_break){_t._event.onSend_break();}\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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onPutc);\r
_t._lc=CLASS.putc;\r
MI.assertInt(i_c);\r
return _t._mcu.rpc(_t.RPC_NS+":putc",_t._oid+","+i_c,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onPutc){_t._event.onPutc(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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onPuts);\r
_t._lc=CLASS.puts;\r
return _t._mcu.rpc(_t.RPC_NS+":puts",_t._oid+",\""+i_s+"\"",\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onPuts){_t._event.onPuts(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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onGetc);\r
_t._lc=CLASS.getc;\r
return _t._mcu.rpc(_t.RPC_NS+":getc",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onGetc){_t._event.onGetc(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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onGets);\r
_t._lc=CLASS.gets;\r
MI.assertInt(i_len); \r
return _t._mcu.rpc(_t.RPC_NS+":gets",_t._oid+","+i_len,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(_t._event.onGets){_t._event.onGets(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
{\r
try{\r
var _t=this;\r
- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+ MI._assertYield.call(_t);\r
+ var cb=MI._getCb(arguments,_t._event.onBaud);\r
_t._lc=CLASS.baud;\r
MI.assertInt(i_baudrate); \r
return _t._mcu.rpc(_t.RPC_NS+":baud",_t._oid+","+i_baudrate,\r
- function (j)\r
- {\r
- if(_t._event.onBaud){_t._event.onBaud();}\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
});\r
}\r
\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.AnalogIn(mcu,mbedJS.PinName.A0,\r
+ function(){\r
+ log("[PASS]onNew");\r
+ pin.read(function(v)\r
+ {\r
+ log("[PASS]onread:"+v);\r
+ pin.read_u16(function(v){\r
+ log("[PASS]onRead_u16:"+v);\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
+\r
/**\r
* 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト\r
*/\r
<h1>AnalogIn test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
}\r
});\r
}\r
-\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.AnalogOut(mcu,mbedJS.PinName.p18,function(){\r
+ log("[PASS]onNew");\r
+ pin.write(0.5,function()\r
+ {\r
+ log("[PASS]onWrite");\r
+ pin.read(function(v)\r
+ {\r
+ log("[PASS]onread:"+v);\r
+ pin.write_u16(0,function()\r
+ {\r
+ log("[PASS]onWrite_u16:");\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
/**\r
* 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト\r
*/\r
<h1>Analogout test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
}\r
});\r
}\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.BusIn(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],function(){\r
+ log("[PASS]onNew");\r
+ pin.read(function(v)\r
+ {\r
+ log("[PASS]onread:"+v);\r
+ pin.mode(mbedJS.PinMode.PullDown,function(v){\r
+ log("[PASS]onMode:");\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
\r
/**\r
* 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト\r
<h1>BusIn test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
});\r
}\r
\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var bus=new mbedJS.BusInOut(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],function(){\r
+ log("[PASS]onNew");\r
+ bus.mode(mbedJS.PinMode.PullDown,function()\r
+ {\r
+ log("[PASS]onMode");\r
+ bus.output(function()\r
+ {\r
+ log("[PASS]onOutput:");\r
+ bus.write(1,function()\r
+ {\r
+ log("[PASS]onWrite:");\r
+ bus.input(function(){\r
+ log("[PASS]onInput:");\r
+ bus.read(function(v)\r
+ {\r
+ log("[PASS]onRead:"+v);\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
+\r
+\r
+\r
/**\r
* 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト\r
*/\r
<h1>BusInOut test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
});\r
}\r
\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var bus=new mbedJS.BusOut(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],function(){\r
+ log("[PASS]onNew");\r
+ bus.write(2,function()\r
+ {\r
+ log("[PASS]onWrite:");\r
+ bus.read(function(v){\r
+ log("[PASS]onRead:"+v);\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
+\r
/**\r
* 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト\r
*/\r
<h1>BusOut test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
});\r
}\r
\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.DigitalIn(mcu,mbedJS.PinName.P0_22,function(){\r
+ log("[PASS]onNew");\r
+ pin.mode(mbedJS.PinMode.PullUp,function()\r
+ {\r
+ log("[PASS]onMode:");\r
+ pin.read(function(v){\r
+ log("[PASS]onRead:"+v);\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
/**\r
* 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト\r
*/\r
<h1>DigitalIn test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
}\r
});\r
}\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.DigitalOut(mcu,mbedJS.PinName.P0_22,function(){\r
+ log("[PASS]onNew");\r
+ pin.read(function(v){\r
+ log("[PASS]onRead "+v);\r
+ pin.write((v+1)%2,function(){\r
+ log("[PASS]onWrite");\r
+ mcu.close(); \r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
\r
/**\r
* 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト\r
<h1>Digitalout test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<button onclick="sync2();">SYNC2</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
}\r
});\r
}\r
-\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var st=0;\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var i2c=new mbedJS.I2C(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],function(){\r
+ log("[PASS]onNew");\r
+ i2c.frequency(100000,function()\r
+ {\r
+ log("[PASS]onFrequency:");\r
+ i2c.start(function(){\r
+ log("[PASS]onStart:");\r
+ i2c.write(1,function(v){\r
+ log("[PASS]onWrite:"+v);\r
+ i2c.write(0,[1,2,3],false,function(v){\r
+ log("[PASS]onWrite:"+v);\r
+ i2c.read(1,function(v){\r
+ log("[PASS]onRead:"+v);\r
+ i2c.read(1,2,false,function(v){\r
+ log("[PASS]onRead:"+v.ret+":"+v.data);\r
+ i2c.stop(function(){\r
+ log("[PASS]onStop:");\r
+ mcu.close();\r
+ });\r
+ });\r
+ }); \r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
/**\r
* \r
*/\r
log("[PASS]onFrequency:");\r
yield i2c.start();\r
log("[PASS]onStart:");\r
- yield i2c.write(1);\r
- v=log("[PASS]onWrite:"+v);\r
- yield i2c.write(0,[1,2,3],false);\r
- v=log("[PASS]onWrite2:"+v);\r
- yield i2c.read(1);\r
+ v=yield i2c.write(1);\r
+ log("[PASS]onWrite:"+v);\r
+ v=yield i2c.write(0,[1,2,3],false);\r
+ log("[PASS]onWrite2:"+v);\r
+ v=yield i2c.read(1);\r
log("[PASS]onRead:"+v);\r
v=yield i2c.read(1,2,false);\r
log("[PASS]onRead:"+v.ret+":"+v.data);\r
<h1>I2C test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
}\r
});\r
}\r
+function async()\r
+{\r
+ log();\r
+ log("ASYNC");\r
+ var st=0;\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var i2c=new mbedJS.I2CSlave(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],function(){\r
+ log("[PASS]onNew");\r
+ i2c.frequency(100000,function()\r
+ {\r
+ log("[PASS]onFrequency:");\r
+ i2c.address(1,function()\r
+ {\r
+ log("[PASS]onAddress:");\r
+ i2c.receive(function(){\r
+ log("[PASS]onReceive:");\r
+ i2c.write(1,function(v){\r
+ log("[PASS]onWrite:"+v);\r
+ i2c.write([1,2,3],function(v){\r
+ log("[PASS]onWrite:"+v);\r
+ i2c.read(function(v){\r
+ log("[PASS]onRead:"+v);\r
+ i2c.read(2,false,function(v){\r
+ log("[PASS]onRead:"+v.ret+":"+v.data);\r
+ i2c.stop(function(){\r
+ log("[PASS]onStop:");\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
\r
/**\r
* \r
log("[PASS]onRead:"+v.ret+":"+v.data);\r
yield i2c.stop();\r
yield mcu.close();\r
+ log("[PASS]onstop");\r
}catch(e){\r
mcu.shutdown();\r
alert(e);\r
<body>\r
<h1>I2CSlave test</h1>\r
<hr/>\r
+<button onclick="async();">ASYNC2</button>\r
<button onclick="async();">ASYNC</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
}\r
});\r
}\r
+\r
+function async2()\r
+{\r
+ var s=0;\r
+ log();\r
+ log("ASYNC");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var mem=new mbedJS.Memory(mcu,function(){\r
+ mem.write(0x20080000,1,function(){\r
+ log("[PASS]onWrite:");\r
+ mem.read(0x20080000,1,function(v){\r
+ log("[PASS]onRead:"+v);\r
+ mem.read(0x20080001,1,function(v){\r
+ log("[PASS]onRead:"+v);\r
+ mem.read(0x20080000,8,function(v){\r
+ log("[PASS]onRead:"+v);\r
+ mem.write(0x20080001,[2],function(){\r
+ log("[PASS]onWrite:");\r
+ mem.write(0x20080004,[10,20,30],function(){\r
+ log("[PASS]onWrite:");\r
+ mem.write32(0x20080000,0xff,function(){\r
+ log("[PASS]onWrite32:");\r
+ mem.read32(0x20080000,function(v){\r
+ log("[PASS]onRead32:"+v);\r
+ mem.read32(0x20080004,4,function(v){\r
+ log("[PASS]onRead32:"+v);\r
+ mem.read32(0x20080000,16,function(v){\r
+ log("[PASS]onRead32:"+v);\r
+ mem.write32(0x20080004,[2],function(){\r
+ log("[PASS]onWrite32:"+s);\r
+ mem.write32(0x20080004,[10,20,30],function(){\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
function sync()\r
{\r
log();\r
<h1>Memory test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<button onclick="sync2();">SYNC2</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
}\r
});\r
}\r
-\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.PortIn(mcu,[mbedJS.PortName.Port0,0xffffffff],function(){\r
+ log("[PASS]onNew");\r
+ pin.read(function(v){\r
+ log("[PASS]read:"+v);\r
+ mcu.close();\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
/**\r
* Sync\r
*/\r
<h1>PortIn test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
}\r
});\r
}\r
-\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.PortOut(mcu,[mbedJS.PortName.Port0,0xffffffff],function(){\r
+ log("[PASS]onNew");\r
+ pin.write(1234,function()\r
+ {\r
+ log("[PASS]write:");\r
+ pin.read(function(v)\r
+ {\r
+ log("[PASS]read:"+v);\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
/**\r
* Sync\r
*/\r
<h1>PortOut test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
}\r
});\r
}\r
-\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.PwmOut(mcu,mbedJS.PinName.p21,function(){\r
+ log("[PASS]onNew");\r
+ pin.write(0.33,function(){\r
+ log("[PASS]onwrite:");\r
+ pin.read(function(v)\r
+ {\r
+ log("[PASS]onread:"+v);\r
+ pin.period(1.0,function(){\r
+ log("[PASS]onPeriod:");\r
+ pin.period_ms(1,function(){\r
+ log("[PASS]onPeriod_ms:");\r
+ pin.period_us(10,function(){\r
+ log("[PASS]onPeriod_us:");\r
+ pin.pulsewidth(3,function(){\r
+ log("[PASS]onPulseWidth:");\r
+ pin.pulsewidth_ms(30,function(){\r
+ log("[PASS]onPulseWidth_ms:");\r
+ pin.pulsewidth_us(40,function(){\r
+ log("[PASS]onPulseWidth_us:");\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
/**\r
* Sync\r
*/\r
<h1>Pwm test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
});\r
}\r
\r
+\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.SPI(mcu,[mbedJS.PinName.p5,mbedJS.PinName.p6,mbedJS.PinName.p7],function(){\r
+ log("[PASS]onNew");\r
+ pin.frequency(1000000,function()\r
+ {\r
+ log("[PASS]onFrequency:");\r
+ pin.format(8,3,function()\r
+ {\r
+ log("[PASS]onFormat:");\r
+ pin.write(39,function(v){\r
+ log("[PASS]onWrite:"+v);\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
/**\r
* 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト\r
*/\r
<h1>SPI test</h1>\r
<hr/>\r
<button onclick="async();">ASYNC</button>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
</body>
\ No newline at end of file
});\r
}\r
\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var pin=new mbedJS.SPISlave(mcu,[mbedJS.PinName.p5,mbedJS.PinName.p6,mbedJS.PinName.p7,mbedJS.PinName.p8],function(){\r
+ log("[PASS]onNew");\r
+ pin.frequency(1000000,function()\r
+ {\r
+ log("[PASS]onFrequency:");\r
+ pin.format(8,3,function()\r
+ {\r
+ log("[PASS]onFormat:");\r
+ pin.read(function(v){\r
+ log("[PASS]onread:"+v);\r
+ pin.receive(function(v)\r
+ {\r
+ log("[PASS]onReceive:"+v);\r
+ pin.reply(1,function(){\r
+ log("[PASS]onReply:");\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
+\r
+\r
/**\r
* \r
*/\r
<body>\r
<h1>SPISlave test</h1>\r
<hr/>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="async();">ASYNC</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r
}\r
});\r
}\r
-\r
+function async2()\r
+{\r
+ log();\r
+ log("ASYNC2");\r
+ var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ {\r
+ onNew:function(){\r
+ var uart=new mbedJS.Serial(mcu,[mbedJS.PinName.p9,mbedJS.PinName.p10],\r
+ function(){\r
+ log("[PASS]onNew");\r
+ uart.baud(115200,function()\r
+ {\r
+ log("[PASS]onBaud:");\r
+ uart.send_break(function(){\r
+ log("[PASS]onSend_break:");\r
+ uart.format(8,uart.Parity.None,1,function(){\r
+ log("[PASS]onForma:");\r
+ uart.readable(function(v){\r
+ log("[PASS]onReadable:"+v);\r
+ uart.writeable(function(v){\r
+ log("[PASS]onWritable:"+v);\r
+ uart.putc(32,function(v){\r
+ log("[PASS]onPutc:"+v);\r
+ uart.getc(function(v){\r
+ log("[PASS]onGetc:"+v);\r
+ uart.puts("1234",function(v){\r
+ log("[PASS]onPuts:"+v);\r
+ uart.gets(5,function(v){\r
+ log("[PASS]onGets:"+v);\r
+ mcu.close();\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ });\r
+ }); \r
+ });\r
+ },\r
+ onClose:function(){\r
+ log("[PASS]onClose");\r
+ },\r
+ onError:function(){\r
+ alert("Error");\r
+ }\r
+ });\r
+}\r
/**\r
* \r
*/\r
<body>\r
<h1>Serial test</h1>\r
<hr/>\r
+<button onclick="async2();">ASYNC2</button>\r
<button onclick="async();">ASYNC</button>\r
<button onclick="sync();">SYNC</button>\r
<textarea id="console" rows="15" cols="80"></textarea>\r