• R/O
  • HTTP
  • SSH
  • HTTPS

MiMicSDK: 提交

MiMicSDK


Commit MetaInfo

修訂f1a34aabf691ea938759c784f65055b4374feac3 (tree)
時間2014-07-10 18:16:07
作者nyatla <nyatla@4719...>
Commiternyatla

Log Message

2.0.2
ペリフェラルクラスのコールバック引数対応。
MCUは未実施

git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@384 47198e57-cb75-475f-84c4-a814cd6f29e0

Change Summary

差異

--- a/misc/mbedJS/mbddJS.API/mbedJS/MiMicCore.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/MiMicCore.js
@@ -13,7 +13,7 @@ var MiMicJS={};
1313 * MiMicJsAPIのバージョン文字列。
1414 * @name MiMicJS#VERSION
1515 */
16- NS.VERSION="MiMicJsAPI/2.0.1";
16+ NS.VERSION="MiMicJsAPI/2.0.2";
1717 /**
1818 * 配列要素、又は値がすべてInt値でない場合に例外を起こします。
1919 * @name MiMicJS.assertInt
@@ -76,8 +76,8 @@ var MiMicJS={};
7676 };
7777
7878 /**
79- * @private
8079 * オブジェクトがジェネレータクラスであるかを返します。
80+ * @private
8181 */
8282 NS.isGenerator=function isGenerator(o)
8383 {
@@ -85,6 +85,13 @@ var MiMicJS={};
8585 return o.toString().indexOf('Generator')!=-1;
8686 };
8787 /**
88+ * オブジェクトが関数であるかを返します。
89+ * @private
90+ */
91+ NS.isFunction=function isFunction(o){
92+ return (typeof o == 'function');
93+ }
94+ /**
8895 * @private
8996 * 現在の時刻を返します。
9097 */
@@ -247,8 +254,70 @@ var MiMicJS={};
247254 window[key]=v[key];
248255 }
249256 }
257+ /**
258+ * MiMicSDK向けの内部関数です。
259+ * 末尾引数が関数の場合にはその関数を、異なる場合はi_cbを返却します。
260+ * @private
261+ * @param i_arg
262+ * 引数配列を指定します。
263+ * @param i_default_cb
264+ * 引数配列に関数がなかった場合に返す値を指定します。
265+ */
266+ NS._getCb=function _getCb(i_arg,i_default_cb)
267+ {
268+ if(i_arg.length==0){
269+ return i_default_cb;
270+ }
271+ return NS.isFunction(i_arg[i_arg.length-1])?i_arg[i_arg.length-1]:i_default_cb;
272+ }
273+ /**
274+ * MiMicSDK向けの関数です。
275+ * 末尾の拡張変数を取り除いたarguments引数の数を返します。
276+ * @private
277+ */
278+ NS._getBaseArgsLen=function _getBaseArgsLen(i_arg)
279+ {
280+ if(i_arg.length==0 || (!NS.isFunction(i_arg[i_arg.length-1]))){
281+ return i_arg.length;
282+ }
283+ return i_arg.length==1?0:i_arg.length-1;
284+ }
285+
286+ /**
287+ * MiMicSDK向けの関数です。
288+ * インスタンスがyieldコール可能かをチェックし、可能ならコール関数を記録します。
289+ * 関数は、インスタンスの_gen,_lcをチェックして、yieldが不可能な場合に例外を発生します。
290+ * _assertYield.call(this)でコールして下さい。
291+ * @private
292+ */
293+ NS._assertYield=function _assertYield()
294+ {
295+ if(this._gen && this._lc){
296+ throw new NS.MiMicException(NS.Error.NG_YIELD_NOT_COMPLETED);
297+ }
298+ }
299+ /**
300+ * MiMicSDK向けの関数です。コンストラクタでイベントハンドラをセットアップする定型処理です。
301+ * i_handlerにセットされたオブジェクトに従って_gen,_eventメンバをセットします。
302+ * _initHandler.call(this,i_handler)でコールして下さい。
303+ * @private
304+ */
305+ NS._initHandler=function _initHandler(i_handler)
306+ {
307+ if(NS.isGenerator(i_handler)){
308+ this._gen=i_handler;
309+ }else if(NS.isFunction(i_handler)){
310+ return i_handler;
311+ }else if(i_handler){
312+ this._event=i_handler;
313+ return i_handler.onNew;
314+ }
315+ return null;
316+ }
317+
318+
250319 }());
251-
320+
252321 (function(){
253322 var NS=MiMicJS;
254323
@@ -542,7 +611,7 @@ var MiMicJS={};
542611 rx+='})';
543612 rxst=0;
544613 {
545- log(rx);//Debug
614+// log(rx);//Debug
546615 //JSONがたぶん確定
547616 var j=eval(rx);
548617 for(var i2=q.length-1;i2>=0;i2--){
@@ -611,7 +680,7 @@ var MiMicJS={};
611680 sendMethod:function callJsonRpc(i_method,i_params,i_callback)
612681 {
613682 var v="{\"jsonrpc\":\"2.0\",\"method\":\""+i_method+"\",\"params\":["+i_params+"],\"id\":"+this._method_id+"}";
614- log(v);//Debug
683+// log(v);//Debug
615684 this._ws.send(v);
616685 this._q.push([this._method_id,i_callback]);//キューに記録
617686 this._method_id=(this._method_id+1)&0x0fffffff;//IDインクリメント
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.AnalogIn.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.AnalogIn.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {PinName} i_params
1616 * ピンIDを指定します。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -37,7 +37,10 @@ var MI=MiMicJS;
3737 * </ul>
3838 * <p>
3939 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
40+ * </p>
4041 * <p>
42+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
43+ * </p>
4144 * @return {mbedJS.AnalogIn}
4245 * @example //Callback
4346 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -79,17 +82,17 @@ var CLASS=function AnalogIn(i_mcu,i_params,i_handler)
7982 var _t=this;
8083 _t._mcu=i_mcu;
8184 _t._lc=CLASS;
82- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
83- else if(i_handler){_t._event=i_handler}
84- function cb(j)
85- {
86- _t._oid=j.result[0];
87- if(_t._event.onNew){_t._event.onNew();}
88- if(_t._gen){_t._gen.next(_t);}
89- _t._lc=null;
90- }
85+ var cb=MI._initHandler.call(_t,i_handler);
9186 MI.assertInt(i_params);
92- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);
87+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,
88+ function(j)
89+ {
90+ _t._oid=j.result[0];
91+ if(cb){cb();}
92+ if(_t._gen){_t._gen.next(_t);}
93+ _t._lc=null;
94+ }
95+ );
9396 }catch(e){
9497 throw new MI.MiMicException(e);
9598 }
@@ -136,16 +139,17 @@ CLASS.prototype=
136139 {
137140 try{
138141 var _t=this;
139- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
142+ var cb=MI._getCb(arguments,_t._event.onRead);
143+ MI._assertYield.call(_t);
140144 _t._lc=CLASS.read;
141145 return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,
142- function (j)
143- {
144- var v=j.result[0]/10000;
145- if(_t._event.onRead){_t._event.onRead(v);}
146- if(_t._gen){_t._gen.next(v);}
147- _t._lc=null;
148- }
146+ function (j)
147+ {
148+ var v=j.result[0]/10000;
149+ if(cb){cb(v);}
150+ if(_t._gen){_t._gen.next(v);}
151+ _t._lc=null;
152+ }
149153 );
150154 }catch(e){
151155 throw new MI.MiMicException(e);
@@ -166,16 +170,17 @@ CLASS.prototype=
166170 {
167171 try{
168172 var _t=this;
169- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
173+ var cb=MI._getCb(arguments,_t._event.onRead_u16);
174+ MI._assertYield.call(_t);
170175 _t._lc=CLASS.read_u16;
171176 return _t._mcu.rpc(_t.RPC_NS+":read_u16",_t._oid,
172- function (j)
173- {
174- var v=j.result[0];
175- if(_t._event.onRead_u16){_t._event.onRead_u16(v);}
176- if(_t._gen){_t._gen.next(v);}
177- _t._lc=null;
178- }
177+ function (j)
178+ {
179+ var v=j.result[0];
180+ if(cb){cb(v);}
181+ if(_t._gen){_t._gen.next(v);}
182+ _t._lc=null;
183+ }
179184 );
180185 }catch(e){
181186 throw new MI.MiMicException(e);
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.AnalogOut.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.AnalogOut.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {PinName} i_params
1616 * ピンIDを指定します。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -37,7 +37,10 @@ var MI=MiMicJS;
3737 * </ul>
3838 * <p>
3939 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
40+ * </p>
4041 * <p>
42+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
43+ * </p>
4144 * @return {mbedJS.AnalogOut}
4245 * @example //Callback
4346 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -89,17 +92,17 @@ var CLASS=function AnalogOut(i_mcu,i_params,i_handler)
8992 var _t=this;
9093 _t._mcu=i_mcu;
9194 _t._lc=CLASS;
92- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
93- else if(i_handler){_t._event=i_handler}
94- function cb(j)
95- {
96- _t._oid=j.result[0];
97- if(_t._event.onNew){_t._event.onNew();}
98- if(_t._gen){_t._gen.next(_t);}
99- _t._lc=null;
100- }
95+ var cb=MI._initHandler.call(_t,i_handler);
10196 MI.assertInt(i_params);
102- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);
97+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,
98+ function(j)
99+ {
100+ _t._oid=j.result[0];
101+ if(cb){cb();}
102+ if(_t._gen){_t._gen.next(_t);}
103+ _t._lc=null;
104+ }
105+ );
103106 }catch(e){
104107 throw new MI.MiMicException(e);
105108 }
@@ -146,15 +149,17 @@ CLASS.prototype=
146149 {
147150 try{
148151 var _t=this;
149- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
152+ var cb=MI._getCb(arguments,_t._event.onWrite);
153+ MI._assertYield.call(_t);
150154 _t._lc=CLASS.write;
151155 MI.assertNumber(i_value);
152156 return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+Math.round(i_value*10000),
153- function(j){
154- if(_t._event.onWrite){_t._event.onWrite();}
155- if(_t._gen){_t._gen.next();}
156- _t._lc=null;
157- });
157+ function(j){
158+ if(cb){cb();}
159+ if(_t._gen){_t._gen.next();}
160+ _t._lc=null;
161+ }
162+ );
158163 }catch(e){
159164 throw new MI.MiMicException(e);
160165 }
@@ -174,15 +179,17 @@ CLASS.prototype=
174179 {
175180 try{
176181 var _t=this;
177- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
182+ var cb=MI._getCb(arguments,_t._event.onWrite_u16);
183+ MI._assertYield.call(_t);
178184 _t._lc=CLASS.write;
179185 MI.assertInt(i_value);
180186 return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+i_value,
181- function(j){
182- if(_t._event.onWrite_u16){_t._event.onWrite_u16();}
183- if(_t._gen){_t._gen.next();}
184- _t._lc=null;
185- });
187+ function(j){
188+ if(cb){cb();}
189+ if(_t._gen){_t._gen.next();}
190+ _t._lc=null;
191+ }
192+ );
186193 }catch(e){
187194 throw new MI.MiMicException(e);
188195 }
@@ -202,16 +209,17 @@ CLASS.prototype=
202209 {
203210 try{
204211 var _t=this;
205- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
212+ var cb=MI._getCb(arguments,_t._event.onRead);
213+ MI._assertYield.call(_t);
206214 _t._lc=CLASS.read;
207215 return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,
208- function (j)
209- {
210- var v=j.result[0]/10000;
211- if(_t._event.onRead){_t._event.onRead(v);}
212- if(_t._gen){_t._gen.next(v);}
213- _t._lc=null;
214- }
216+ function (j)
217+ {
218+ var v=j.result[0]/10000;
219+ if(cb){cb(v);}
220+ if(_t._gen){_t._gen.next(v);}
221+ _t._lc=null;
222+ }
215223 );
216224 }catch(e){
217225 throw new MI.MiMicException(e);
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.BusIn.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.BusIn.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {[PinName...]} i_params
1616 * ピンIDの配列を指定します。要素数の最大値は16です。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -34,7 +34,10 @@ var MI=MiMicJS;
3434 * </ul>
3535 * <p>
3636 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
37+ * </p>
3738 * <p>
39+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
40+ * </p>
3841 * @return {mbedJS.BusIn}
3942 * @example //Callback
4043 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -78,15 +81,7 @@ var CLASS=function BusIn(i_mcu,i_params,i_handler)
7881 var _t=this;
7982 _t._mcu=i_mcu;
8083 _t._lc=CLASS;
81- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
82- else if(i_handler){_t._event=i_handler}
83- function cb(j)
84- {
85- _t._oid=j.result[0];
86- if(_t._event.onNew){_t._event.onNew();}
87- if(_t._gen){_t._gen.next(_t);}
88- _t._lc=null;
89- }
84+ var cb=MI._initHandler.call(_t,i_handler);
9085 //Pin配列の正規化
9186 var ap=i_params;
9287 if(ap.length<1 ||ap.length>16){
@@ -102,7 +97,15 @@ var CLASS=function BusIn(i_mcu,i_params,i_handler)
10297 for(;i<16;i++){
10398 pins+=","+NS.PinName.NC;
10499 }
105- return _t._mcu.rpc(_t.RPC_NS+":_new1",pins,cb);
100+ _t._mcu.rpc(_t.RPC_NS+":_new1",pins,
101+ function(j)
102+ {
103+ _t._oid=j.result[0];
104+ if(cb){cb();}
105+ if(_t._gen){_t._gen.next(_t);}
106+ _t._lc=null;
107+ }
108+ );
106109 }catch(e){
107110 throw new MI.MiMicException(e);
108111 }
@@ -149,16 +152,17 @@ CLASS.prototype=
149152 {
150153 try{
151154 var _t=this;
152- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
155+ var cb=MI._getCb(arguments,_t._event.onRead);
156+ MI._assertYield.call(_t);
153157 _t._lc=CLASS.read;
154158 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
155- function (j)
156- {
157- var v=j.result[0];
158- if(_t._event.onRead){_t._event.onRead(v);}
159- if(_t._gen){_t._gen.next(v);}
160- _t._lc=null;
161- }
159+ function (j)
160+ {
161+ var v=j.result[0];
162+ if(cb){cb(v);}
163+ if(_t._gen){_t._gen.next(v);}
164+ _t._lc=null;
165+ }
162166 );
163167 }catch(e){
164168 throw new MI.MiMicException(e);
@@ -179,17 +183,17 @@ CLASS.prototype=
179183 {
180184 try{
181185 var _t=this;
182- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
183- _t._lc=CLASS.mode;
186+ var cb=MI._getCb(arguments,_t._event.onMode);
187+ MI._assertYield.call(_t);
184188 MI.assertInt(i_value);
185189 return _t._mcu.rpc(_t.RPC_NS+":mode",_t._oid+","+i_value,
186- function (j)
187- {
188- var v=j.result[0];
189- if(_t._event.onMode){_t._event.onMode(v);}
190- if(_t._gen){_t._gen.next(v);}
191- _t._lc=null;
192- }
190+ function (j)
191+ {
192+ var v=j.result[0];
193+ if(cb){cb(v);}
194+ if(_t._gen){_t._gen.next(v);}
195+ _t._lc=null;
196+ }
193197 );
194198 }catch(e){
195199 throw new MI.MiMicException(e);
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.BusInOut.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.BusInOut.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {[PinName...]} i_params
1616 * ピンIDの配列を指定します。要素数の最大値は16です。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -44,7 +44,10 @@ var MI=MiMicJS;
4444 *
4545 * <p>
4646 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
47+ * </p>
4748 * <p>
49+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
50+ * </p>
4851 * @return {mbedJS.BusIn}
4952 * @example //Callback
5053 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -105,15 +108,7 @@ var CLASS=function BusInOut(i_mcu,i_params,i_handler)
105108 var _t=this;
106109 _t._mcu=i_mcu;
107110 _t._lc=CLASS;
108- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
109- else if(i_handler){_t._event=i_handler}
110- function cb(j)
111- {
112- _t._oid=j.result[0];
113- if(_t._event.onNew){_t._event.onNew();}
114- if(_t._gen){_t._gen.next(_t);}
115- _t._lc=null;
116- }
111+ var cb=MI._initHandler.call(_t,i_handler);
117112 //Pin配列の正規化
118113 var ap=i_params;
119114 //数値のみの配列かな?
@@ -129,7 +124,15 @@ var CLASS=function BusInOut(i_mcu,i_params,i_handler)
129124 for(;i<16;i++){
130125 pins+=","+NS.PinName.NC;
131126 }
132- return _t._mcu.rpc(_t.RPC_NS+":_new1",pins,cb);
127+ _t._mcu.rpc(_t.RPC_NS+":_new1",pins,
128+ function(j)
129+ {
130+ _t._oid=j.result[0];
131+ if(cb){cb();}
132+ if(_t._gen){_t._gen.next(_t);}
133+ _t._lc=null;
134+ }
135+ );
133136 }catch(e){
134137 throw new MI.MiMicException(e);
135138 }
@@ -175,15 +178,17 @@ CLASS.prototype=
175178 {
176179 try{
177180 var _t=this;
178- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
181+ var cb=MI._getCb(arguments,_t._event.onWrite);
182+ MI._assertYield.call(_t);
179183 _t._lc=CLASS.write;
180184 MI.assertInt(i_value);
181185 return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,
182- function(j){
183- if(_t._event.onWrite){_t._event.onWrite();}
184- if(_t._gen){_t._gen.next();}
185- _t._lc=null;
186- });
186+ function(j){
187+ if(cb){cb();}
188+ if(_t._gen){_t._gen.next();}
189+ _t._lc=null;
190+ }
191+ );
187192 }catch(e){
188193 throw new MI.MiMicException(e);
189194 }
@@ -203,16 +208,17 @@ CLASS.prototype=
203208 {
204209 try{
205210 var _t=this;
206- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
211+ var cb=MI._getCb(arguments,_t._event.onRead);
212+ MI._assertYield.call(_t);
207213 _t._lc=CLASS.read;
208214 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
209- function (j)
210- {
211- var v=j.result[0];
212- if(_t._event.onRead){_t._event.onRead(v);}
213- if(_t._gen){_t._gen.next(v);}
214- _t._lc=null;
215- }
215+ function (j)
216+ {
217+ var v=j.result[0];
218+ if(cb){cb(v);}
219+ if(_t._gen){_t._gen.next(v);}
220+ _t._lc=null;
221+ }
216222 );
217223 }catch(e){
218224 throw new MI.MiMicException(e);
@@ -233,17 +239,19 @@ CLASS.prototype=
233239 {
234240 try{
235241 var _t=this;
236- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
242+ var cb=MI._getCb(arguments,_t._event.onMode);
243+ MI._assertYield.call(_t);
237244 _t._lc=CLASS.mode;
238245 MI.assertInt(i_value);
239246 return _t._mcu.rpc(_t.RPC_NS+":mode",_t._oid+","+i_value,
240- function (j)
241- {
242- var v=j.result[0];
243- if(_t._event.onMode){_t._event.onMode(v);}
244- if(_t._gen){_t._gen.next(v);}
245- _t._lc=null;
246- });
247+ function (j)
248+ {
249+ var v=j.result[0];
250+ if(cb){cb(v);}
251+ if(_t._gen){_t._gen.next(v);}
252+ _t._lc=null;
253+ }
254+ );
247255 }catch(e){
248256 throw new MI.MiMicException(e);
249257 }
@@ -261,12 +269,13 @@ CLASS.prototype=
261269 {
262270 try{
263271 var _t=this;
264- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
272+ var cb=MI._getCb(arguments,_t._event.onInput);
273+ MI._assertYield.call(_t);
265274 _t._lc=CLASS.input;
266275 return _t._mcu.rpc(_t.RPC_NS+":input",_t._oid,
267276 function (j)
268277 {
269- if(_t._event.onInput){_t._event.onInput();}
278+ if(cb){cb();}
270279 if(_t._gen){_t._gen.next();}
271280 _t._lc=null;
272281 });
@@ -287,12 +296,13 @@ CLASS.prototype=
287296 {
288297 try{
289298 var _t=this;
290- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
299+ var cb=MI._getCb(arguments,_t._event.onOutput);
300+ MI._assertYield.call(_t);
291301 _t._lc=CLASS.mode;
292302 return _t._mcu.rpc(_t.RPC_NS+":output",_t._oid,
293303 function (j)
294304 {
295- if(_t._event.onOutput){_t._event.onOutput();}
305+ if(cb){cb();}
296306 if(_t._gen){_t._gen.next();}
297307 _t._lc=null;
298308 });
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.BusOut.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.BusOut.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {[PinName...]} i_params
1616 * ピンIDの配列を指定します。要素数の最大値は16です。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -34,7 +34,10 @@ var MI=MiMicJS;
3434 * </ul>
3535 * <p>
3636 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
37+ * </p>
3738 * <p>
39+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
40+ * </p>
3841 * @return {mbedJS.BusOut}
3942 * @example //Callback
4043 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -80,15 +83,7 @@ var CLASS=function BusOut(i_mcu,i_params,i_handler)
8083 var _t=this;
8184 _t._mcu=i_mcu;
8285 _t._lc=CLASS;
83- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
84- else if(i_handler){_t._event=i_handler}
85- function cb(j)
86- {
87- _t._oid=j.result[0];
88- if(_t._event.onNew){_t._event.onNew();}
89- if(_t._gen){_t._gen.next(_t);}
90- _t._lc=null;
91- }
86+ var cb=MI._initHandler.call(_t,i_handler);
9287 //Pin配列の正規化
9388 var ap=i_params;
9489 if(ap.length<1 ||ap.length>16){
@@ -104,7 +99,15 @@ var CLASS=function BusOut(i_mcu,i_params,i_handler)
10499 for(;i<16;i++){
105100 pins+=","+NS.PinName.NC;
106101 }
107- return _t._mcu.rpc(_t.RPC_NS+":_new1",pins,cb);
102+ _t._mcu.rpc(_t.RPC_NS+":_new1",pins,
103+ function(j)
104+ {
105+ _t._oid=j.result[0];
106+ if(cb){cb();}
107+ if(_t._gen){_t._gen.next(_t);}
108+ _t._lc=null;
109+ }
110+ );
108111 }catch(e){
109112 throw new MI.MiMicException(e);
110113 }
@@ -151,15 +154,17 @@ CLASS.prototype=
151154 {
152155 try{
153156 var _t=this;
154- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
157+ var cb=MI._getCb(arguments,_t._event.onWrite);
158+ MI._assertYield.call(_t);
155159 _t._lc=CLASS.write;
156160 MI.assertInt(i_value);
157161 return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,
158- function(j){
159- if(_t._event.onWrite){_t._event.onWrite();}
160- if(_t._gen){_t._gen.next();}
161- _t._lc=null;
162- });
162+ function(j){
163+ if(cb){cb();}
164+ if(_t._gen){_t._gen.next();}
165+ _t._lc=null;
166+ }
167+ );
163168 }catch(e){
164169 throw new MI.MiMicException(e);
165170 }
@@ -179,16 +184,18 @@ CLASS.prototype=
179184 {
180185 try{
181186 var _t=this;
182- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
187+ var cb=MI._getCb(arguments,_t._event.onRead);
188+ MI._assertYield.call(_t);
183189 _t._lc=CLASS.read;
184190 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
185- function (j)
186- {
187- var v=j.result[0];
188- if(_t._event.onRead){_t._event.onRead(v);}
189- if(_t._gen){_t._gen.next(v);}
190- _t._lc=null;
191- });
191+ function (j)
192+ {
193+ var v=j.result[0];
194+ if(cb){cb(v);}
195+ if(_t._gen){_t._gen.next(v);}
196+ _t._lc=null;
197+ }
198+ );
192199 }catch(e){
193200 throw new MI.MiMicException(e);
194201 }
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.DigitalIn.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.DigitalIn.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {PinName} i_params
1616 * ピンIDを指定します。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -34,7 +34,10 @@ var MI=MiMicJS;
3434 * </ul>
3535 * <p>
3636 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
37+ * </p>
3738 * <p>
39+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
40+ * </p>
3841 * @return {mbedJS.DigitalIn}
3942 * @example //Callback
4043 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -78,17 +81,18 @@ var CLASS=function DigitalIn(i_mcu,i_params,i_handler)
7881 var _t=this;
7982 _t._mcu=i_mcu;
8083 _t._lc=CLASS;
81- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
82- else if(i_handler){_t._event=i_handler}
83- function cb(j)
84- {
85- _t._oid=j.result[0];
86- if(_t._event.onNew){_t._event.onNew();}
87- if(_t._gen){_t._gen.next(_t);}
88- _t._lc=null;
89- }
84+ var cb=MI._initHandler.call(_t,i_handler);
9085 MI.assertInt(i_params);
91- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);
86+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,
87+ function(j)
88+ {
89+ _t._oid=j.result[0];
90+ if(cb){cb();}
91+ if(_t._gen){_t._gen.next(_t);}
92+ _t._lc=null;
93+ }
94+ );
95+
9296 }catch(e){
9397 throw new MI.MiMicException(e);
9498 }
@@ -135,13 +139,14 @@ CLASS.prototype=
135139 {
136140 try{
137141 var _t=this;
138- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
142+ var cb=MI._getCb(arguments,_t._event.onRead);
143+ MI._assertYield.call(_t);
139144 _t._lc=CLASS.read;
140145 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
141146 function (j)
142147 {
143148 var v=j.result[0];
144- if(_t._event.onRead){_t._event.onRead(v);}
149+ if(cb){cb(v);}
145150 if(_t._gen){_t._gen.next(v);}
146151 _t._lc=null;
147152 }
@@ -165,14 +170,15 @@ CLASS.prototype=
165170 {
166171 try{
167172 var _t=this;
168- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
173+ var cb=MI._getCb(arguments,_t._event.onMode);
174+ MI._assertYield.call(_t);
169175 _t._lc=CLASS.mode;
170176 MI.assertInt(i_value);
171177 return _t._mcu.rpc(_t.RPC_NS+":mode",_t._oid+","+i_value,
172178 function (j)
173179 {
174180 var v=j.result[0];
175- if(_t._event.onMode){_t._event.onMode(v);}
181+ if(cb){cb(v);}
176182 if(_t._gen){_t._gen.next(v);}
177183 _t._lc=null;
178184 }
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.DigitalOut.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.DigitalOut.js
@@ -28,8 +28,8 @@ var MI=MiMicJS;
2828 * <p>配列の場合は次の順番でパラメータを指定します。
2929 * <pre>{pin,value}</pre>
3030 * </p>
31- * @param {HashMap|Generator} i_event
32- * 非同期イベントハンドラの連想配列、又はGeneratorです。
31+ * @param {HashMap|Generator|function} i_handler
32+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
3333 * <p>
3434 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
3535 *
@@ -49,7 +49,10 @@ var MI=MiMicJS;
4949 * </ul>
5050 * <p>
5151 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
52+ * </p>
5253 * <p>
54+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
55+ * </p>
5356 * @return {mbedJS.DigitalOut}
5457 * @example //Callback
5558 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -95,12 +98,11 @@ var CLASS=function DigitalOut(i_mcu,i_params,i_handler)
9598 var _t=this;
9699 _t._mcu=i_mcu;
97100 _t._lc=CLASS;
98- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
99- else if(i_handler){_t._event=i_handler}
100- function cb(j)
101+ var cb=MI._initHandler.call(_t,i_handler);
102+ function rcb(j)
101103 {
102104 _t._oid=j.result[0];
103- if(_t._event.onNew){_t._event.onNew();}
105+ if(cb){cb();}
104106 if(_t._gen){_t._gen.next(_t);}
105107 _t._lc=null;
106108 }
@@ -116,9 +118,9 @@ var CLASS=function DigitalOut(i_mcu,i_params,i_handler)
116118 MI.assertInt(pr[0]);
117119 if(pr[1]){
118120 MI.assertInt(pr[1]);
119- return _t._mcu.rpc(_t.RPC_NS+":_new2",pr[0]+","+pr[1],cb);
121+ _t._mcu.rpc(_t.RPC_NS+":_new2",pr[0]+","+pr[1],rcb);
120122 }else{
121- return _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0],cb);
123+ _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0],rcb);
122124 }
123125 }catch(e){
124126 throw new MI.MiMicException(e);
@@ -165,12 +167,13 @@ CLASS.prototype=
165167 {
166168 try{
167169 var _t=this;
168- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
170+ var cb=MI._getCb(arguments,_t._event.onWrite);
171+ MI._assertYield.call(_t);
169172 _t._lc=CLASS.write;
170173 MI.assertInt(i_value);
171174 return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,
172175 function(j){
173- if(_t._event.onWrite){_t._event.onWrite();}
176+ if(cb){cb();}
174177 if(_t._gen){_t._gen.next();}
175178 _t._lc=null;
176179 });
@@ -193,13 +196,14 @@ CLASS.prototype=
193196 {
194197 try{
195198 var _t=this;
196- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
199+ var cb=MI._getCb(arguments,_t._event.onRead);
200+ MI._assertYield.call(_t);
197201 _t._lc=CLASS.read;
198202 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
199203 function (j)
200204 {
201205 var v=j.result[0];
202- if(_t._event.onRead){_t._event.onRead(v);}
206+ if(cb){cb(v);}
203207 if(_t._gen){_t._gen.next(v);}
204208 _t._lc=null;
205209 }
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.I2C.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.I2C.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {[PinName,PinName]} i_params
1616 * i2Cバスを構成するピンIDを指定します。sda,sclの順番です。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -49,7 +49,10 @@ var MI=MiMicJS;
4949 * </ul>
5050 * <p>
5151 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
52+ * </p>
5253 * <p>
54+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
55+ * </p>
5356 * @return {mbedJS.I2C}
5457 * @example //Callback
5558 * var st=0;
@@ -126,17 +129,17 @@ var CLASS=function I2C(i_mcu,i_params,i_handler)
126129 var _t=this;
127130 _t._mcu=i_mcu;
128131 _t._lc=CLASS;
129- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
130- else if(i_handler){_t._event=i_handler}
131- function cb(j)
132- {
133- _t._oid=j.result[0];
134- if(_t._event.onNew){_t._event.onNew();}
135- if(_t._gen){_t._gen.next(_t);}
136- _t._lc=null;
137- }
132+ var cb=MI._initHandler.call(_t,i_handler);
138133 MI.assertInt(i_params);
139- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],cb);
134+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],
135+ function (j)
136+ {
137+ _t._oid=j.result[0];
138+ if(cb){cb();}
139+ if(_t._gen){_t._gen.next(_t);}
140+ _t._lc=null;
141+ }
142+ );
140143 }catch(e){
141144 throw new MI.MiMicException(e);
142145 }
@@ -183,16 +186,17 @@ CLASS.prototype=
183186 {
184187 try{
185188 var _t=this;
186- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
189+ var cb=MI._getCb(arguments,_t._event.onFrequency);
190+ MI._assertYield.call(_t);
187191 _t._lc=CLASS.frequency;
188192 MI.assertInt(i_hz);
189193 return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_hz,
190- function (j)
191- {
192- if(_t._event.onFrequency){_t._event.onFrequency();}
193- if(_t._gen){_t._gen.next();}
194- _t._lc=null;
195- }
194+ function (j)
195+ {
196+ if(cb){cb();}
197+ if(_t._gen){_t._gen.next();}
198+ _t._lc=null;
199+ }
196200 );
197201 }catch(e){
198202 throw new MI.MiMicException(e);
@@ -243,21 +247,23 @@ CLASS.prototype=
243247 {
244248 try{
245249 var _t=this;
246- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
250+ var cb=MI._getCb(arguments,_t._event.onRead);
251+ MI._assertYield.call(_t);
247252 _t._lc=CLASS.read;
248- function cb(j){
253+ function rcb(j){
249254 var v=j.result.length>1?{ret:j.result[0],data:MI.bstr2byteArray(j.result[1])}:j.result[0];
250- if(_t._event.onRead){_t._event.onRead(v);}
255+ if(cb){cb(v);}
251256 if(_t._gen){_t._gen.next(v);}
252257 _t._lc=null;
253258 }
254- if(arguments.length==1){
259+ //ベース引数の数で処理の切り替え
260+ if(MI._getBaseArgsLen(arguments)==1){
255261 MI.assertInt(arguments[0]);
256- return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid+","+arguments[0],cb);
262+ return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid+","+arguments[0],rcb);
257263 }else{
258264 var a=arguments;
259265 MI.assertInt([a[0],a[1]]);
260- return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+a[0]+","+a[1]+","+(a[2]?1:0),cb);
266+ return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+a[0]+","+a[1]+","+(a[2]?1:0),rcb);
261267 }
262268 }catch(e){
263269 throw new MI.MiMicException(e);
@@ -303,21 +309,22 @@ CLASS.prototype=
303309 {
304310 try{
305311 var _t=this;
306- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
312+ var cb=MI._getCb(arguments,_t._event.onWrite);
313+ MI._assertYield.call(_t);
307314 _t._lc=CLASS.write;
308- function cb(j){
315+ function rcb(j){
309316 var v=j.result[0];
310- if(_t._event.onWrite){_t._event.onWrite(v);}
317+ if(cb){cb(v);}
311318 if(_t._gen){_t._gen.next(v);}
312319 _t._lc=null;
313320 }
314- if(arguments.length==1){
321+ if(MI._getBaseArgsLen(arguments)==1){
315322 MI.assertInt(arguments[0]);
316- return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],cb);
323+ return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],rcb);
317324 }else{
318325 var a=arguments;
319326 MI.assertInt(a[0]);
320- return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+","+a[0]+",\""+MI.byteArray2bstr(a[1])+"\","+(a[2]?1:0),cb);
327+ return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+","+a[0]+",\""+MI.byteArray2bstr(a[1])+"\","+(a[2]?1:0),rcb);
321328 }
322329 }catch(e){
323330 throw new MI.MiMicException(e);
@@ -336,15 +343,16 @@ CLASS.prototype=
336343 {
337344 try{
338345 var _t=this;
339- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
346+ var cb=MI._getCb(arguments,_t._event.onStart);
347+ MI._assertYield.call(_t);
340348 _t._lc=CLASS.start;
341349 return _t._mcu.rpc(_t.RPC_NS+":start",_t._oid,
342- function (j)
343- {
344- if(_t._event.onStart){_t._event.onStart();}
345- if(_t._gen){_t._gen.next();}
346- _t._lc=null;
347- }
350+ function (j)
351+ {
352+ if(cb){cb();}
353+ if(_t._gen){_t._gen.next();}
354+ _t._lc=null;
355+ }
348356 );
349357 }catch(e){
350358 throw new MI.MiMicException(e);
@@ -363,15 +371,16 @@ CLASS.prototype=
363371 {
364372 try{
365373 var _t=this;
366- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
367- _t._lc=CLASS.stop;
374+ var cb=MI._getCb(arguments,_t._event.onStop);
375+ MI._assertYield.call(_t);
376+ _t._lc=CLASS.stop;
368377 return _t._mcu.rpc(_t.RPC_NS+":stop",_t._oid,
369- function (j)
370- {
371- if(_t._event.onStop){_t._event.onStop();}
372- if(_t._gen){_t._gen.next();}
373- _t._lc=null;
374- }
378+ function (j)
379+ {
380+ if(cb){cb();}
381+ if(_t._gen){_t._gen.next();}
382+ _t._lc=null;
383+ }
375384 );
376385 }catch(e){
377386 throw new MI.MiMicException(e);
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.I2CSlave.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.I2CSlave.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {[PinName,PinName]} i_params
1616 * i2Cバスを構成するピンIDを指定します。sda,sclの順番です。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -54,7 +54,10 @@ var MI=MiMicJS;
5454 * </ul>
5555 * <p>
5656 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
57+ * </p>
5758 * <p>
59+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
60+ * </p>
5861 * @return {mbedJS.I2CSlave}
5962 * @example //Callback
6063 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -138,17 +141,17 @@ var CLASS=function I2CSlave(i_mcu,i_params,i_handler)
138141 var _t=this;
139142 _t._mcu=i_mcu;
140143 _t._lc=CLASS;
141- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
142- else if(i_handler){_t._event=i_handler}
143- function cb(j)
144- {
145- _t._oid=j.result[0];
146- if(_t._event.onNew){_t._event.onNew();}
147- if(_t._gen){_t._gen.next(_t);}
148- _t._lc=null;
149- }
150- MI.assertInt(i_params);
151- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],cb);
144+ var cb=MI._initHandler.call(_t,i_handler);
145+ MI.assertInt(i_params);
146+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],
147+ function(j)
148+ {
149+ _t._oid=j.result[0];
150+ if(cb){cb();}
151+ if(_t._gen){_t._gen.next(_t);}
152+ _t._lc=null;
153+ }
154+ );
152155 }catch(e){
153156 throw new MI.MiMicException(e);
154157 }
@@ -202,15 +205,17 @@ CLASS.prototype=
202205 {
203206 try{
204207 var _t=this;
205- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
208+ var cb=MI._getCb(arguments,_t._event.onAddress);
209+ MI._assertYield.call(_t);
206210 _t._lc=CLASS.write;
207211 MI.assertInt(i_value);
208212 return _t._mcu.rpc(_t.RPC_NS+":address",_t._oid+","+i_value,
209- function(j){
210- if(_t._event.onAddress){_t._event.onAddress();}
211- if(_t._gen){_t._gen.next();}
212- _t._lc=null;
213- });
213+ function(j){
214+ if(cb){cb();}
215+ if(_t._gen){_t._gen.next();}
216+ _t._lc=null;
217+ }
218+ );
214219 }catch(e){
215220 throw new MI.MiMicException(e);
216221 }
@@ -230,16 +235,17 @@ CLASS.prototype=
230235 {
231236 try{
232237 var _t=this;
233- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
238+ var cb=MI._getCb(arguments,_t._event.onFrequency);
239+ MI._assertYield.call(_t);
234240 _t._lc=CLASS.frequency;
235241 MI.assertInt(i_hz);
236242 return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_hz,
237- function (j)
238- {
239- if(_t._event.onFrequency){_t._event.onFrequency();}
240- if(_t._gen){_t._gen.next();}
241- _t._lc=null;
242- }
243+ function (j)
244+ {
245+ if(cb){cb();}
246+ if(_t._gen){_t._gen.next();}
247+ _t._lc=null;
248+ }
243249 );
244250 }catch(e){
245251 throw new MI.MiMicException(e);
@@ -283,19 +289,20 @@ CLASS.prototype=
283289 {
284290 try{
285291 var _t=this;
286- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
292+ var cb=MI._getCb(arguments,_t._event.onRead);
293+ MI._assertYield.call(_t);
287294 _t._lc=CLASS.read;
288- function cb(j){
295+ function rcb(j){
289296 var v=j.result.length>1?{ret:j.result[0],data:MI.bstr2byteArray(j.result[1])}:j.result[0];
290- if(_t._event.onRead){_t._event.onRead(v);}
297+ if(cb){cb(v);}
291298 if(_t._gen){_t._gen.next(v);}
292299 _t._lc=null;
293300 }
294- if(arguments.length==0){
295- return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid,cb);
301+ if(MI._getBaseArgsLen(arguments)==0){
302+ return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid,rcb);
296303 }else{
297304 MI.assertInt(arguments[0]);
298- return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+arguments[0],cb);
305+ return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+arguments[0],rcb);
299306 }
300307 }catch(e){
301308 throw new MI.MiMicException(e);
@@ -316,16 +323,17 @@ CLASS.prototype=
316323 {
317324 try{
318325 var _t=this;
319- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
326+ var cb=MI._getCb(arguments,_t._event.onReceive);
327+ MI._assertYield.call(_t);
320328 _t._lc=CLASS.start;
321329 return _t._mcu.rpc(_t.RPC_NS+":receive",_t._oid,
322- function (j)
323- {
324- var v=j.result[0];
325- if(_t._event.onReceive){_t._event.onReceive(v);}
326- if(_t._gen){_t._gen.next(v);}
327- _t._lc=null;
328- }
330+ function (j)
331+ {
332+ var v=j.result[0];
333+ if(cb){cb(v);}
334+ if(_t._gen){_t._gen.next(v);}
335+ _t._lc=null;
336+ }
329337 );
330338 }catch(e){
331339 throw new MI.MiMicException(e);
@@ -335,8 +343,6 @@ CLASS.prototype=
335343 * 引数が3個の場合
336344 * @name mbedJS.I2CSlave#write.1
337345 * @function
338- * @param {int} address
339- * 8ビットのI2CSlaveSlaveアドレスです。
340346 * @param {byte[]} data
341347 * 送信するデータを格納したバイト配列です。
342348 * @return {int}
@@ -368,20 +374,21 @@ CLASS.prototype=
368374 {
369375 try{
370376 var _t=this;
371- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
377+ var cb=MI._getCb(arguments,_t._event.onWrite);
378+ MI._assertYield.call(_t);
372379 _t._lc=CLASS.write;
373- function cb(j){
380+ function rcb(j){
374381 var v=j.result[0];
375- if(_t._event.onWrite){_t._event.onWrite(v);}
382+ if(cb){cb(v);}
376383 if(_t._gen){_t._gen.next(v);}
377384 _t._lc=null;
378385 }
379386 if(!MI.isArray(arguments[0])){
380387 MI.assertInt(arguments[0]);
381- return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],cb);
388+ return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],rcb);
382389 }else{
383390 var a=arguments;
384- return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+",\""+MI.byteArray2bstr(a[0])+"\"",cb);
391+ return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+",\""+MI.byteArray2bstr(a[0])+"\"",rcb);
385392 }
386393 }catch(e){
387394 throw new MI.MiMicException(e);
@@ -400,15 +407,16 @@ CLASS.prototype=
400407 {
401408 try{
402409 var _t=this;
403- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
410+ var cb=MI._getCb(arguments,_t._event.onStop);
411+ MI._assertYield.call(_t);
404412 _t._lc=CLASS.stop;
405413 return _t._mcu.rpc(_t.RPC_NS+":stop",_t._oid,
406- function (j)
407- {
408- if(_t._event.onStop){_t._event.onStop();}
409- if(_t._gen){_t._gen.next();}
410- _t._lc=null;
411- }
414+ function (j)
415+ {
416+ if(cb){cb();}
417+ if(_t._gen){_t._gen.next();}
418+ _t._lc=null;
419+ }
412420 );
413421 }catch(e){
414422 throw new MI.MiMicException(e);
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.Mcu.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.Mcu.js
@@ -157,6 +157,7 @@ CLASS.prototype=
157157 },
158158 /**
159159 * コールバック関数を全てキャンセルして、Mcuとの接続をシャットダウンします。
160+ * この関数は即座に完了します。
160161 * @name mbedJS.Mcu#shutdown
161162 * @function
162163 */
@@ -220,6 +221,9 @@ CLASS.prototype=
220221 * 指定idのオブジェクトをMCUのメモリから削除します。
221222 * @name mbedJS.Mcu#disposeObject
222223 * @function
224+ * @param {int} i_oid
225+ * オブジェクトID。
226+ * mbedJSオブジェクトが所有するリモートオブジェクトのIDを指定します。
223227 * @return {boolean}
224228 * 結果を返します。
225229 */
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.Memory.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.Memory.js
@@ -12,8 +12,8 @@ var MI=MiMicJS;
1212 * @constructor
1313 * @param {mbedJS.Mcu} i_mcu
1414 * インスタンスをバインドするMCUオブジェクトです。
15- * @param {HashMap|Generator} i_event
16- * 非同期イベントハンドラの連想配列、又はGeneratorです。
15+ * @param {HashMap|Generator|function} i_handler
16+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1717 * <p>
1818 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
1919 * <ul>
@@ -41,7 +41,10 @@ var MI=MiMicJS;
4141 * </ul>
4242 * <p>
4343 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
44+ * </p>
4445 * <p>
46+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
47+ * </p>
4548 * @return {mbedJS.Memory}
4649 * @example //Callback
4750 * var s=0;
@@ -166,15 +169,15 @@ var CLASS=function Memory(i_mcu,i_handler)
166169 var _t=this;
167170 _t._mcu=i_mcu;
168171 _t._lc=CLASS;
169- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
170- else if(i_handler){_t._event=i_handler}
171- function cb(j)
172- {
173- if(_t._event.onNew){_t._event.onNew();}
174- if(_t._gen){_t._gen.next(_t);}
175- _t._lc=null;
176- }
177- return _t._mcu.rpc(_t.RPC_NS+":init","",cb);
172+ var cb=MI._initHandler.call(_t,i_handler);
173+ _t._mcu.rpc(_t.RPC_NS+":init","",
174+ function(j)
175+ {
176+ if(cb){cb();}
177+ if(_t._gen){_t._gen.next(_t);}
178+ _t._lc=null;
179+ }
180+ );
178181 }catch(e){
179182 throw new MI.MiMicException(e);
180183 }
@@ -225,15 +228,16 @@ CLASS.prototype=
225228 //read(i_addr,i_len)
226229 try{
227230 var _t=this;
228- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
231+ var cb=MI._getCb(arguments,_t._event.onRead);
232+ MI._assertYield.call(_t);
229233 _t._lc=CLASS.read;
230- var a=[i_addr,MI.isUndefined(i_size,1)];
234+ var a=[i_addr,(MI._getBaseArgsLen(arguments)==1)?i_size:1];
231235 MI.assertInt(a);
232236 return _t._mcu.rpc(_t.RPC_NS+":read",a[0]+","+a[1],
233237 function (j)
234238 {
235239 var v=MI.bstr2byteArray(j.result[0]);
236- if(_t._event.onRead){_t._event.onRead(v);}
240+ if(cb){cb(v);}
237241 if(_t._gen){_t._gen.next(v);}
238242 _t._lc=null;
239243 });
@@ -259,17 +263,18 @@ CLASS.prototype=
259263 {
260264 try{
261265 var _t=this;
262- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
266+ var cb=MI._getCb(arguments,_t._event.onWrite);
267+ MI._assertYield.call(_t);
263268 _t._lc=CLASS.write;
264269 MI.assertInt(i_addr);
265270 MI.assertInt(i_v);
266271 return _t._mcu.rpc(_t.RPC_NS+":write",i_addr+",\""+MI.byteArray2bstr(i_v)+"\"",
267- function (j)
268- {
269- if(_t._event.onWrite){_t._event.onWrite();}
270- if(_t._gen){_t._gen.next();}
271- _t._lc=null;
272- }
272+ function (j)
273+ {
274+ if(cb){cb();}
275+ if(_t._gen){_t._gen.next();}
276+ _t._lc=null;
277+ }
273278 );
274279 }catch(e){
275280 throw new MI.MiMicException(e);
@@ -296,21 +301,24 @@ CLASS.prototype=
296301 //read(i_addr,i_len)
297302 try{
298303 var _t=this;
299- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
304+ var cb=MI._getCb(arguments,_t._event.onRead32);
305+ MI._assertYield.call(_t);
300306 _t._lc=CLASS.read32;
301- var a=[i_addr,MI.isUndefined(i_size,4)];
307+
308+ var a=[i_addr,(MI._getBaseArgsLen(arguments)==1)?4:i_size];
302309 if(a[1]%4!=0){
303310 throw new MI.MiMicException(MI.Error.NG_INVALID_ARG);
304311 }
305312 MI.assertInt(a);
306313 return _t._mcu.rpc(_t.RPC_NS+":read",a[0]+","+a[1],
307- function (j)
308- {
309- var v=MI.bstr2uintArray(j.result[0]);
310- if(_t._event.onRead32){_t._event.onRead32(v);}
311- if(_t._gen){_t._gen.next(v);}
312- _t._lc=null;
313- });
314+ function (j)
315+ {
316+ var v=MI.bstr2uintArray(j.result[0]);
317+ if(cb){cb(v);}
318+ if(_t._gen){_t._gen.next(v);}
319+ _t._lc=null;
320+ }
321+ );
314322 }catch(e){
315323 throw new MI.MiMicException(e);
316324 }
@@ -333,17 +341,18 @@ CLASS.prototype=
333341 {
334342 try{
335343 var _t=this;
336- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
344+ var cb=MI._getCb(arguments,_t._event.onWrite32);
345+ MI._assertYield.call(_t);
337346 _t._lc=CLASS.write32;
338347 MI.assertInt(i_addr);
339348 MI.assertInt(i_v);
340349 return _t._mcu.rpc(_t.RPC_NS+":write",i_addr+",\""+MI.uintArray2bstr(i_v)+"\"",
341- function (j)
342- {
343- if(_t._event.onWrite){_t._event.onWrite32();}
344- if(_t._gen){_t._gen.next();}
345- _t._lc=null;
346- }
350+ function (j)
351+ {
352+ if(cb){cb();}
353+ if(_t._gen){_t._gen.next();}
354+ _t._lc=null;
355+ }
347356 );
348357 }catch(e){
349358 throw new MI.MiMicException(e);
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.PortIn.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.PortIn.js
@@ -25,8 +25,8 @@ var MI=MiMicJS;
2525 * <p>配列の場合は次の順番でパラメータを指定します。
2626 * <pre>{port,mask}</pre>
2727 * </p>
28- * @param {HashMap|Generator} i_event
29- * 非同期イベントハンドラの連想配列、又はGeneratorです。
28+ * @param {HashMap|Generator|function} i_handler
29+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
3030 * <p>
3131 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
3232 * <ul>
@@ -42,7 +42,10 @@ var MI=MiMicJS;
4242 * </ul>
4343 * <p>
4444 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
45+ * </p>
4546 * <p>
47+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
48+ * </p>
4649 * @return {mbedJS.PortIn}
4750 * @example //Callback
4851 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -87,15 +90,7 @@ var CLASS=function PortIn(i_mcu,i_params,i_handler)
8790 var _t=this;
8891 _t._mcu=i_mcu;
8992 _t._lc=CLASS;
90- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
91- else if(i_handler){_t._event=i_handler}
92- function cb(j)
93- {
94- _t._oid=j.result[0];
95- if(_t._event.onNew){_t._event.onNew();}
96- if(_t._gen){_t._gen.next(_t);}
97- _t._lc=null;
98- }
93+ var cb=MI._initHandler.call(_t,i_handler);
9994 //引数の正規化
10095 var pr;
10196 if(MI.isHashArray(i_params)){
@@ -104,7 +99,15 @@ var CLASS=function PortIn(i_mcu,i_params,i_handler)
10499 pr=i_params;
105100 }
106101 MI.assertInt(pr);
107- return _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],cb);
102+ _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],
103+ function(j)
104+ {
105+ _t._oid=j.result[0];
106+ if(cb){cb();}
107+ if(_t._gen){_t._gen.next(_t);}
108+ _t._lc=null;
109+ }
110+ );
108111 }catch(e){
109112 throw new MI.MiMicException(e);
110113 }
@@ -151,16 +154,18 @@ CLASS.prototype=
151154 {
152155 try{
153156 var _t=this;
154- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
157+ var cb=MI._getCb(arguments,_t._event.onRead);
158+ MI._assertYield.call(_t);
155159 _t._lc=CLASS.read;
156160 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
157- function (j)
158- {
159- var v=j.result[0];
160- if(_t._event.onRead){_t._event.onRead(v);}
161- if(_t._gen){_t._gen.next(v);}
162- _t._lc=null;
163- });
161+ function (j)
162+ {
163+ var v=j.result[0];
164+ if(cb){cb(v);}
165+ if(_t._gen){_t._gen.next(v);}
166+ _t._lc=null;
167+ }
168+ );
164169 }catch(e){
165170 throw new MI.MiMicException(e);
166171 }
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.PortOut.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.PortOut.js
@@ -25,8 +25,8 @@ var MI=MiMicJS;
2525 * <p>配列の場合は次の順番でパラメータを指定します。
2626 * <pre>{port,mask}</pre>
2727 * </p>
28- * @param {HashMap|Generator} i_event
29- * 非同期イベントハンドラの連想配列、又はGeneratorです。
28+ * @param {HashMap|Generator|function} i_handler
29+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
3030 * <p>
3131 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
3232 * <ul>
@@ -45,7 +45,10 @@ var MI=MiMicJS;
4545 * </ul>
4646 * <p>
4747 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
48+ * </p>
4849 * <p>
50+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
51+ * </p>
4952 * @return {mbedJS.PortOut}
5053 * @example //Callback
5154 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -91,15 +94,7 @@ var CLASS=function PortOut(i_mcu,i_params,i_handler)
9194 var _t=this;
9295 _t._mcu=i_mcu;
9396 _t._lc=CLASS;
94- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
95- else if(i_handler){_t._event=i_handler}
96- function cb(j)
97- {
98- _t._oid=j.result[0];
99- if(_t._event.onNew){_t._event.onNew();}
100- if(_t._gen){_t._gen.next(_t);}
101- _t._lc=null;
102- }
97+ var cb=MI._initHandler.call(_t,i_handler);
10398 //引数の正規化
10499 var pr;
105100 if(MI.isHashArray(i_params)){
@@ -108,7 +103,15 @@ var CLASS=function PortOut(i_mcu,i_params,i_handler)
108103 pr=i_params;
109104 }
110105 MI.assertInt(pr);
111- return _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],cb);
106+ _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],
107+ function(j)
108+ {
109+ _t._oid=j.result[0];
110+ if(cb){cb();}
111+ if(_t._gen){_t._gen.next(_t);}
112+ _t._lc=null;
113+ }
114+ );
112115 }catch(e){
113116 throw new MI.MiMicException(e);
114117 }
@@ -154,15 +157,17 @@ CLASS.prototype=
154157 {
155158 try{
156159 var _t=this;
157- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
160+ var cb=MI._getCb(arguments,_t._event.onWrite);
161+ MI._assertYield.call(_t);
158162 _t._lc=CLASS.write;
159163 MI.assertInt(i_value);
160164 return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,
161- function(j){
162- if(_t._event.onWrite){_t._event.onWrite();}
163- if(_t._gen){_t._gen.next();}
164- _t._lc=null;
165- });
165+ function(j){
166+ if(cb){cb();}
167+ if(_t._gen){_t._gen.next();}
168+ _t._lc=null;
169+ }
170+ );
166171 }catch(e){
167172 throw new MI.MiMicException(e);
168173 }
@@ -182,16 +187,18 @@ CLASS.prototype=
182187 {
183188 try{
184189 var _t=this;
185- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
190+ var cb=MI._getCb(arguments,_t._event.onRead);
191+ MI._assertYield.call(_t);
186192 _t._lc=CLASS.read;
187193 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
188- function (j)
189- {
190- var v=j.result[0];
191- if(_t._event.onRead){_t._event.onRead(v);}
192- if(_t._gen){_t._gen.next(v);}
193- _t._lc=null;
194- });
194+ function (j)
195+ {
196+ var v=j.result[0];
197+ if(cb){cb(v);}
198+ if(_t._gen){_t._gen.next(v);}
199+ _t._lc=null;
200+ }
201+ );
195202 }catch(e){
196203 throw new MI.MiMicException(e);
197204 }
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.PwmOut.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.PwmOut.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {PinName} i_params
1616 * ピンIDを指定します。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -52,7 +52,10 @@ var MI=MiMicJS;
5252 * </ul>
5353 * <p>
5454 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
55+ * </p>
5556 * <p>
57+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
58+ * </p>
5659 * @return {mbedJS.PwmOut}
5760 * @example //Callback
5861 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -122,17 +125,17 @@ var CLASS=function PwmOut(i_mcu,i_params,i_handler)
122125 var _t=this;
123126 _t._mcu=i_mcu;
124127 _t._lc=CLASS;
125- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
126- else if(i_handler){_t._event=i_handler}
127- function cb(j)
128- {
129- _t._oid=j.result[0];
130- if(_t._event.onNew){_t._event.onNew();}
131- if(_t._gen){_t._gen.next(_t);}
132- _t._lc=null;
133- }
128+ var cb=MI._initHandler.call(_t,i_handler);
134129 MI.assertInt(i_params);
135- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);
130+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,
131+ function(j)
132+ {
133+ _t._oid=j.result[0];
134+ if(cb){cb();}
135+ if(_t._gen){_t._gen.next(_t);}
136+ _t._lc=null;
137+ }
138+ );
136139 }catch(e){
137140 throw new MI.MiMicException(e);
138141 }
@@ -180,12 +183,13 @@ CLASS.prototype=
180183 {
181184 try{
182185 var _t=this;
183- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
186+ var cb=MI._getCb(arguments,_t._event.onWrite);
187+ MI._assertYield.call(_t);
184188 _t._lc=CLASS.write;
185189 MI.assertNumber(i_value);
186190 return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+Math.round(i_value*10000),
187191 function(j){
188- if(_t._event.onWrite){_t._event.onWrite();}
192+ if(cb){cb();}
189193 if(_t._gen){_t._gen.next();}
190194 _t._lc=null;
191195 });
@@ -207,13 +211,14 @@ CLASS.prototype=
207211 {
208212 try{
209213 var _t=this;
210- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
214+ var cb=MI._getCb(arguments,_t._event.onRead);
215+ MI._assertYield.call(_t);
211216 _t._lc=CLASS.read;
212217 return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,
213218 function (j)
214219 {
215220 var v=j.result[0]/10000;
216- if(_t._event.onRead){_t._event.onRead(v);}
221+ if(cb){cb(v);}
217222 if(_t._gen){_t._gen.next(v);}
218223 _t._lc=null;
219224 });
@@ -237,12 +242,13 @@ CLASS.prototype=
237242 {
238243 try{
239244 var _t=this;
240- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
245+ var cb=MI._getCb(arguments,_t._event.onPeriod);
246+ MI._assertYield.call(_t);
241247 _t._lc=CLASS.period;
242248 MI.assertInt(i_value);
243249 return _t._mcu.rpc(_t.RPC_NS+":period_fx",_t._oid+","+Math.round(i_value*10000),
244250 function(j){
245- if(_t._event.onPeriod){_t._event.onPeriod();}
251+ if(cb){cb();}
246252 if(_t._gen){_t._gen.next();}
247253 _t._lc=null;
248254 });
@@ -266,12 +272,13 @@ CLASS.prototype=
266272 {
267273 try{
268274 var _t=this;
269- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
275+ var cb=MI._getCb(arguments,_t._event.onPeriod_ms);
276+ MI._assertYield.call(_t);
270277 _t._lc=CLASS.period_ms;
271278 MI.assertInt(i_value);
272279 return _t._mcu.rpc(_t.RPC_NS+":period_ms",_t._oid+","+Math.round(i_value),
273280 function(j){
274- if(_t._event.onPeriod_ms){_t._event.onPeriod_ms();}
281+ if(cb){cb();}
275282 if(_t._gen){_t._gen.next();}
276283 _t._lc=null;
277284 });
@@ -295,12 +302,13 @@ CLASS.prototype=
295302 {
296303 try{
297304 var _t=this;
298- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
305+ var cb=MI._getCb(arguments,_t._event.onPeriod_us);
306+ MI._assertYield.call(_t);
299307 _t._lc=CLASS.period_us;
300308 MI.assertInt(i_value);
301309 return _t._mcu.rpc(_t.RPC_NS+":period_us",_t._oid+","+Math.round(i_value),
302310 function(j){
303- if(_t._event.onPeriod_us){_t._event.onPeriod_us();}
311+ if(cb){cb();}
304312 if(_t._gen){_t._gen.next();}
305313 _t._lc=null;
306314 });
@@ -324,12 +332,13 @@ CLASS.prototype=
324332 {
325333 try{
326334 var _t=this;
327- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
335+ var cb=MI._getCb(arguments,_t._event.onPulsewidth);
336+ MI._assertYield.call(_t);
328337 _t._lc=CLASS.pulsewidth;
329338 MI.assertInt(i_value);
330339 return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_fx",_t._oid+","+Math.round(i_value*10000),
331340 function(j){
332- if(_t._event.onPulsewidth){_t._event.onPulsewidth();}
341+ if(cb){cb();}
333342 if(_t._gen){_t._gen.next();}
334343 _t._lc=null;
335344 });
@@ -352,15 +361,17 @@ CLASS.prototype=
352361 {
353362 try{
354363 var _t=this;
355- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
364+ var cb=MI._getCb(arguments,_t._event.onPulsewidth_ms);
365+ MI._assertYield.call(_t);
356366 _t._lc=CLASS.pulsewidth_ms;
357367 MI.assertInt(i_value);
358368 return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_ms",_t._oid+","+Math.round(i_value),
359- function(j){
360- if(_t._event.onPulsewidth_ms){_t._event.onPulsewidth_ms();}
361- if(_t._gen){_t._gen.next();}
362- _t._lc=null;
363- });
369+ function(j){
370+ if(cb){cb();}
371+ if(_t._gen){_t._gen.next();}
372+ _t._lc=null;
373+ }
374+ );
364375 }catch(e){
365376 throw new MI.MiMicException(e);
366377 }
@@ -380,15 +391,17 @@ CLASS.prototype=
380391 {
381392 try{
382393 var _t=this;
383- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
394+ var cb=MI._getCb(arguments,_t._event.onPulsewidth_us);
395+ MI._assertYield.call(_t);
384396 _t._lc=CLASS.pulsewidth_us;
385397 MI.assertInt(i_value);
386398 return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_us",_t._oid+","+Math.round(i_value),
387- function(j){
388- if(_t._event.onPulsewidth_us){_t._event.onPulsewidth_us();}
389- if(_t._gen){_t._gen.next();}
390- _t._lc=null;
391- });
399+ function(j){
400+ if(cb){cb();}
401+ if(_t._gen){_t._gen.next();}
402+ _t._lc=null;
403+ }
404+ );
392405 }catch(e){
393406 throw new MI.MiMicException(e);
394407 }
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.SPI.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.SPI.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {[PinName,PinName,PinName]} i_params
1616 * SPIを構成する3つのPinNameを格納する配列です。mosi,miso,sclkの順番です。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -37,7 +37,10 @@ var MI=MiMicJS;
3737 * </ul>
3838 * <p>
3939 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
40+ * </p>
4041 * <p>
42+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
43+ * </p>
4144 * @return {mbedJS.SPI}
4245 * @example //Callback
4346 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -87,17 +90,17 @@ var CLASS=function SPI(i_mcu,i_params,i_handler)
8790 var _t=this;
8891 _t._mcu=i_mcu;
8992 _t._lc=CLASS;
90- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
91- else if(i_handler){_t._event=i_handler}
92- function cb(j)
93- {
94- _t._oid=j.result[0];
95- if(_t._event.onNew){_t._event.onNew();}
96- if(_t._gen){_t._gen.next(_t);}
97- _t._lc=null;
98- }
93+ var cb=MI._initHandler.call(_t,i_handler);
9994 MI.assertInt(i_params);
100- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+NS.PinName.NC,cb);
95+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+NS.PinName.NC,
96+ function(j)
97+ {
98+ _t._oid=j.result[0];
99+ if(cb){cb();}
100+ if(_t._gen){_t._gen.next(_t);}
101+ _t._lc=null;
102+ }
103+ );
101104 }catch(e){
102105 throw new MI.MiMicException(e);
103106 }
@@ -144,16 +147,18 @@ CLASS.prototype=
144147 {
145148 try{
146149 var _t=this;
147- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
150+ MI._assertYield.call(_t);
151+ var cb=MI._getCb(arguments,_t._event.onWrite);
148152 _t._lc=CLASS.write;
149153 MI.assertInt(i_value);
150154 return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,
151- function(j){
152- var v=j.result[0];
153- if(_t._event.onWrite){_t._event.onWrite(v);}
154- if(_t._gen){_t._gen.next(v);}
155- _t._lc=null;
156- });
155+ function(j){
156+ var v=j.result[0];
157+ if(cb){cb(v);}
158+ if(_t._gen){_t._gen.next(v);}
159+ _t._lc=null;
160+ }
161+ );
157162 }catch(e){
158163 throw new MI.MiMicException(e);
159164 }
@@ -173,15 +178,17 @@ CLASS.prototype=
173178 {
174179 try{
175180 var _t=this;
176- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
181+ MI._assertYield.call(_t);
182+ var cb=MI._getCb(arguments,_t._event.onFrequency);
177183 _t._lc=CLASS.frequency;
178184 MI.assertInt(i_value);
179185 return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_value,
180- function(j){
181- if(_t._event.onFrequency){_t._event.onFrequency();}
182- if(_t._gen){_t._gen.next();}
183- _t._lc=null;
184- });
186+ function(j){
187+ if(cb){cb();}
188+ if(_t._gen){_t._gen.next();}
189+ _t._lc=null;
190+ }
191+ );
185192 }catch(e){
186193 throw new MI.MiMicException(e);
187194 }
@@ -202,16 +209,18 @@ CLASS.prototype=
202209 {
203210 try{
204211 var _t=this;
205- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
212+ MI._assertYield.call(_t);
213+ var cb=MI._getCb(arguments,_t._event.onFormat);
206214 _t._lc=CLASS.format;
207215 var mode=i_mode?i_mode:0;
208216 MI.assertInt([i_bits,mode]);
209217 return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+i_bits+","+mode,
210- function(j){
211- if(_t._event.onFormat){_t._event.onFormat();}
212- if(_t._gen){_t._gen.next();}
213- _t._lc=null;
214- });
218+ function(j){
219+ if(cb){cb();}
220+ if(_t._gen){_t._gen.next();}
221+ _t._lc=null;
222+ }
223+ );
215224 }catch(e){
216225 throw new MI.MiMicException(e);
217226 }
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.SPISlave.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.SPISlave.js
@@ -15,8 +15,8 @@ var MI=MiMicJS;
1515 * @param {[PinName,PinName,PinName]} i_params
1616 * SPIを構成する4つのPinNameを格納する配列です。
1717 * mosi, miso, sclkの順番で設定します。
18- * @param {HashMap|Generator} i_event
19- * 非同期イベントハンドラの連想配列、又はGeneratorです。
18+ * @param {HashMap|Generator|function} i_handler
19+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
2020 * <p>
2121 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2222 * <ul>
@@ -44,7 +44,10 @@ var MI=MiMicJS;
4444 * </ul>
4545 * <p>
4646 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
47+ * </p>
4748 * <p>
49+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
50+ * </p>
4851 * @return {mbedJS.SPI}
4952 * @example //Callback
5053 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -104,17 +107,17 @@ var CLASS=function SPISlave(i_mcu,i_params,i_handler)
104107 var _t=this;
105108 _t._mcu=i_mcu;
106109 _t._lc=CLASS;
107- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
108- else if(i_handler){_t._event=i_handler}
109- function cb(j)
110- {
111- _t._oid=j.result[0];
112- if(_t._event.onNew){_t._event.onNew();}
113- if(_t._gen){_t._gen.next(_t);}
114- _t._lc=null;
115- }
110+ var cb=MI._initHandler.call(_t,i_handler);
116111 MI.assertInt(i_params);
117- return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+i_params[3],cb);
112+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+i_params[3],
113+ function(j)
114+ {
115+ _t._oid=j.result[0];
116+ if(cb){cb();}
117+ if(_t._gen){_t._gen.next(_t);}
118+ _t._lc=null;
119+ }
120+ );
118121 }catch(e){
119122 throw new MI.MiMicException(e);
120123 }
@@ -162,12 +165,13 @@ CLASS.prototype=
162165 {
163166 try{
164167 var _t=this;
165- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
168+ MI._assertYield.call(_t);
169+ var cb=MI._getCb(arguments,_t._event.onFrequency);
166170 _t._lc=CLASS.frequency;
167171 MI.assertInt(i_value);
168172 return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_value,
169173 function(j){
170- if(_t._event.onFrequency){_t._event.onFrequency();}
174+ if(cb){cb();}
171175 if(_t._gen){_t._gen.next();}
172176 _t._lc=null;
173177 });
@@ -191,13 +195,14 @@ CLASS.prototype=
191195 {
192196 try{
193197 var _t=this;
194- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
198+ MI._assertYield.call(_t);
199+ var cb=MI._getCb(arguments,_t._event.onFormat);
195200 _t._lc=CLASS.format;
196201 var mode=i_mode?i_mode:0;
197202 MI.assertInt([i_bits,mode]);
198203 return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+i_bits+","+mode,
199204 function(j){
200- if(_t._event.onFormat){_t._event.onFormat();}
205+ if(cb){cb();}
201206 if(_t._gen){_t._gen.next();}
202207 _t._lc=null;
203208 });
@@ -220,13 +225,14 @@ CLASS.prototype=
220225 {
221226 try{
222227 var _t=this;
223- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
228+ MI._assertYield.call(_t);
229+ var cb=MI._getCb(arguments,_t._event.onRead);
224230 _t._lc=CLASS.read;
225231 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
226232 function (j)
227233 {
228234 var v=j.result[0];
229- if(_t._event.onRead){_t._event.onRead(v);}
235+ if(cb){cb(v);}
230236 if(_t._gen){_t._gen.next(v);}
231237 _t._lc=null;
232238 });
@@ -249,13 +255,14 @@ CLASS.prototype=
249255 {
250256 try{
251257 var _t=this;
252- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
258+ MI._assertYield.call(_t);
259+ var cb=MI._getCb(arguments,_t._event.onReceive);
253260 _t._lc=CLASS.receive;
254261 return _t._mcu.rpc(_t.RPC_NS+":receive",_t._oid,
255262 function (j)
256263 {
257264 var v=j.result[0];
258- if(_t._event.onReceive){_t._event.onReceive(v);}
265+ if(cb){cb(v);}
259266 if(_t._gen){_t._gen.next(v);}
260267 _t._lc=null;
261268 });
@@ -278,13 +285,14 @@ CLASS.prototype=
278285 {
279286 try{
280287 var _t=this;
281- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
288+ MI._assertYield.call(_t);
289+ var cb=MI._getCb(arguments,_t._event.onReply);
282290 _t._lc=CLASS.reply;
283291 MI.assertInt(i_value);
284292 return _t._mcu.rpc(_t.RPC_NS+":reply",_t._oid+","+i_value,
285293 function (j)
286294 {
287- if(_t._event.onReply){_t._event.onReply();}
295+ if(cb){cb();}
288296 if(_t._gen){_t._gen.next();}
289297 _t._lc=null;
290298 });
--- a/misc/mbedJS/mbddJS.API/mbedJS/mbed.Serial.js
+++ b/misc/mbedJS/mbddJS.API/mbedJS/mbed.Serial.js
@@ -14,8 +14,8 @@ var MI=MiMicJS;
1414 * インスタンスをバインドするMCUオブジェクトです。
1515 * @param {[PinName,PinName]} i_params
1616 * UARTを構成する2本のピンを指定します。tx,rxの順で設定します。
17- * @param {HashMap|Generator} i_event
18- * 非同期イベントハンドラの連想配列、又はGeneratorです。
17+ * @param {HashMap|Generator|function} i_handler
18+ * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
1919 * <p>
2020 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
2121 * <ul>
@@ -70,7 +70,10 @@ var MI=MiMicJS;
7070 * </ul>
7171 * <p>
7272 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
73+ * </p>
7374 * <p>
75+ * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
76+ * </p>
7477 * @return {mbedJS.Serial}
7578 * @example //Callback
7679 * var mcu=new mbedJS.Mcu("192.168.128.39",
@@ -146,19 +149,21 @@ var CLASS=function Serial(i_mcu,i_params,i_handler)
146149 {
147150 try{
148151 var _t=this;
152+ var cb;
149153 _t._mcu=i_mcu;
150154 _t._lc=CLASS;
151- if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
152- else if(i_handler){_t._event=i_handler}
153- function cb(j)
154- {
155- _t._oid=j.result[0];
156- if(_t._event.onNew){_t._event.onNew();}
157- if(_t._gen){_t._gen.next(_t);}
158- _t._lc=null;
159- }
155+ //ハンドラの初期化
156+ var cb=MI._initHandler.call(_t,i_handler);
160157 MI.assertInt(i_params);
161- _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],cb);
158+ _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],
159+ function(j)
160+ {
161+ _t._oid=j.result[0];
162+ if(cb){cb();}
163+ if(_t._gen){_t._gen.next(_t);}
164+ _t._lc=null;
165+ }
166+ );
162167 }catch(e){
163168 throw new MI.MiMicException(e);
164169 }
@@ -218,17 +223,18 @@ CLASS.prototype=
218223 {
219224 try{
220225 var _t=this;
221- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
226+ MI._assertYield.call(_t);
227+ var cb=MI._getCb(arguments,_t._event.onFormat);
222228 _t._lc=CLASS.format;
223229 var p=[MI.isUndefined(i_bits,8),MI.isUndefined(i_parity,_t.Parity.None),MI.isUndefined(i_stop_bits,1)];
224230 MI.assertInt(p);
225231 return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+p[0]+","+p[1]+","+p[2],
226- function (j)
227- {
228- if(_t._event.onFormat){_t._event.onFormat();}
229- if(_t._gen){_t._gen.next();}
230- _t._lc=null;
231- }
232+ function (j)
233+ {
234+ if(cb){cb();}
235+ if(_t._gen){_t._gen.next();}
236+ _t._lc=null;
237+ }
232238 );
233239 }catch(e){
234240 throw new MI.MiMicException(e);
@@ -249,16 +255,17 @@ CLASS.prototype=
249255 {
250256 try{
251257 var _t=this;
252- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
258+ MI._assertYield.call(_t);
259+ var cb=MI._getCb(arguments,_t._event.onReadable);
253260 _t._lc=CLASS.readable;
254261 return _t._mcu.rpc(_t.RPC_NS+":readable",_t._oid,
255- function (j)
256- {
257- var v=j.result[0];
258- if(_t._event.onReadable){_t._event.onReadable(v);}
259- if(_t._gen){_t._gen.next(v);}
260- _t._lc=null;
261- }
262+ function (j)
263+ {
264+ var v=j.result[0];
265+ if(cb){cb(v);}
266+ if(_t._gen){_t._gen.next(v);}
267+ _t._lc=null;
268+ }
262269 );
263270 }catch(e){
264271 throw new MI.MiMicException(e);
@@ -279,16 +286,17 @@ CLASS.prototype=
279286 {
280287 try{
281288 var _t=this;
282- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
289+ MI._assertYield.call(_t);
290+ var cb=MI._getCb(arguments,_t._event.onWriteable);
283291 _t._lc=CLASS.writeable;
284292 return _t._mcu.rpc(_t.RPC_NS+":writeable",_t._oid,
285- function (j)
286- {
287- var v=j.result[0]?true:false;
288- if(_t._event.onWriteable){_t._event.onWriteable(v);}
289- if(_t._gen){_t._gen.next(v);}
290- _t._lc=null;
291- }
293+ function (j)
294+ {
295+ var v=j.result[0]?true:false;
296+ if(cb){cb(v);}
297+ if(_t._gen){_t._gen.next(v);}
298+ _t._lc=null;
299+ }
292300 );
293301 }catch(e){
294302 throw new MI.MiMicException(e);
@@ -307,15 +315,16 @@ CLASS.prototype=
307315 {
308316 try{
309317 var _t=this;
310- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
318+ MI._assertYield.call(_t);
319+ var cb=MI._getCb(arguments,_t._event.onSend_break);
311320 _t._lc=CLASS.send_break;
312321 return _t._mcu.rpc(_t.RPC_NS+":send_break",_t._oid,
313- function (j)
314- {
315- if(_t._event.onSend_break){_t._event.onSend_break();}
316- if(_t._gen){_t._gen.next();}
317- _t._lc=null;
318- }
322+ function (j)
323+ {
324+ if(cb){cb();}
325+ if(_t._gen){_t._gen.next();}
326+ _t._lc=null;
327+ }
319328 );
320329 }catch(e){
321330 throw new MI.MiMicException(e);
@@ -336,17 +345,18 @@ CLASS.prototype=
336345 {
337346 try{
338347 var _t=this;
339- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
348+ MI._assertYield.call(_t);
349+ var cb=MI._getCb(arguments,_t._event.onPutc);
340350 _t._lc=CLASS.putc;
341351 MI.assertInt(i_c);
342352 return _t._mcu.rpc(_t.RPC_NS+":putc",_t._oid+","+i_c,
343- function (j)
344- {
345- var v=j.result[0];
346- if(_t._event.onPutc){_t._event.onPutc(v);}
347- if(_t._gen){_t._gen.next(v);}
348- _t._lc=null;
349- }
353+ function (j)
354+ {
355+ var v=j.result[0];
356+ if(cb){cb(v);}
357+ if(_t._gen){_t._gen.next(v);}
358+ _t._lc=null;
359+ }
350360 );
351361 }catch(e){
352362 throw new MI.MiMicException(e);
@@ -367,16 +377,17 @@ CLASS.prototype=
367377 {
368378 try{
369379 var _t=this;
370- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
380+ MI._assertYield.call(_t);
381+ var cb=MI._getCb(arguments,_t._event.onPuts);
371382 _t._lc=CLASS.puts;
372383 return _t._mcu.rpc(_t.RPC_NS+":puts",_t._oid+",\""+i_s+"\"",
373- function (j)
374- {
375- var v=j.result[0];
376- if(_t._event.onPuts){_t._event.onPuts(v);}
377- if(_t._gen){_t._gen.next(v);}
378- _t._lc=null;
379- }
384+ function (j)
385+ {
386+ var v=j.result[0];
387+ if(cb){cb(v);}
388+ if(_t._gen){_t._gen.next(v);}
389+ _t._lc=null;
390+ }
380391 );
381392 }catch(e){
382393 throw new MI.MiMicException(e);
@@ -397,16 +408,17 @@ CLASS.prototype=
397408 {
398409 try{
399410 var _t=this;
400- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
411+ MI._assertYield.call(_t);
412+ var cb=MI._getCb(arguments,_t._event.onGetc);
401413 _t._lc=CLASS.getc;
402414 return _t._mcu.rpc(_t.RPC_NS+":getc",_t._oid,
403- function (j)
404- {
405- var v=j.result[0];
406- if(_t._event.onGetc){_t._event.onGetc(v);}
407- if(_t._gen){_t._gen.next(v);}
408- _t._lc=null;
409- }
415+ function (j)
416+ {
417+ var v=j.result[0];
418+ if(cb){cb(v);}
419+ if(_t._gen){_t._gen.next(v);}
420+ _t._lc=null;
421+ }
410422 );
411423 }catch(e){
412424 throw new MI.MiMicException(e);
@@ -429,17 +441,18 @@ CLASS.prototype=
429441 {
430442 try{
431443 var _t=this;
432- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
444+ MI._assertYield.call(_t);
445+ var cb=MI._getCb(arguments,_t._event.onGets);
433446 _t._lc=CLASS.gets;
434447 MI.assertInt(i_len);
435448 return _t._mcu.rpc(_t.RPC_NS+":gets",_t._oid+","+i_len,
436- function (j)
437- {
438- var v=j.result[0];
439- if(_t._event.onGets){_t._event.onGets(v);}
440- if(_t._gen){_t._gen.next(v);}
441- _t._lc=null;
442- }
449+ function (j)
450+ {
451+ var v=j.result[0];
452+ if(cb){cb(v);}
453+ if(_t._gen){_t._gen.next(v);}
454+ _t._lc=null;
455+ }
443456 );
444457 }catch(e){
445458 throw new MI.MiMicException(e);
@@ -460,16 +473,17 @@ CLASS.prototype=
460473 {
461474 try{
462475 var _t=this;
463- if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
476+ MI._assertYield.call(_t);
477+ var cb=MI._getCb(arguments,_t._event.onBaud);
464478 _t._lc=CLASS.baud;
465479 MI.assertInt(i_baudrate);
466480 return _t._mcu.rpc(_t.RPC_NS+":baud",_t._oid+","+i_baudrate,
467- function (j)
468- {
469- if(_t._event.onBaud){_t._event.onBaud();}
470- if(_t._gen){_t._gen.next();}
471- _t._lc=null;
472- }
481+ function (j)
482+ {
483+ if(cb){cb();}
484+ if(_t._gen){_t._gen.next();}
485+ _t._lc=null;
486+ }
473487 );
474488 }catch(e){
475489 throw new MI.MiMicException(e);
--- a/misc/mbedJS/mbddJS.API/test.AnalogIn.html
+++ b/misc/mbedJS/mbddJS.API/test.AnalogIn.html
@@ -62,6 +62,35 @@ function async()
6262 });
6363 }
6464
65+function async2()
66+{
67+ log();
68+ log("ASYNC2");
69+ var mcu=new mbedJS.Mcu("192.168.128.39",
70+ {
71+ onNew:function(){
72+ var pin=new mbedJS.AnalogIn(mcu,mbedJS.PinName.A0,
73+ function(){
74+ log("[PASS]onNew");
75+ pin.read(function(v)
76+ {
77+ log("[PASS]onread:"+v);
78+ pin.read_u16(function(v){
79+ log("[PASS]onRead_u16:"+v);
80+ mcu.close();
81+ });
82+ });
83+ });
84+ },
85+ onClose:function(){
86+ log("[PASS]onClose");
87+ },
88+ onError:function(){
89+ alert("Error");
90+ }
91+ });
92+}
93+
6594 /**
6695 * 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト
6796 */
@@ -101,6 +130,7 @@ function sync()
101130 <h1>AnalogIn test</h1>
102131 <hr/>
103132 <button onclick="async();">ASYNC</button>
133+<button onclick="async2();">ASYNC2</button>
104134 <button onclick="sync();">SYNC</button>
105135 <textarea id="console" rows="15" cols="80"></textarea>
106136 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.AnalogOut.html
+++ b/misc/mbedJS/mbddJS.API/test.AnalogOut.html
@@ -69,7 +69,38 @@ function async()
6969 }
7070 });
7171 }
72-
72+function async2()
73+{
74+ log();
75+ log("ASYNC");
76+ var mcu=new mbedJS.Mcu("192.168.128.39",
77+ {
78+ onNew:function(){
79+ var pin=new mbedJS.AnalogOut(mcu,mbedJS.PinName.p18,function(){
80+ log("[PASS]onNew");
81+ pin.write(0.5,function()
82+ {
83+ log("[PASS]onWrite");
84+ pin.read(function(v)
85+ {
86+ log("[PASS]onread:"+v);
87+ pin.write_u16(0,function()
88+ {
89+ log("[PASS]onWrite_u16:");
90+ mcu.close();
91+ });
92+ });
93+ });
94+ });
95+ },
96+ onClose:function(){
97+ log("[PASS]onClose");
98+ },
99+ onError:function(){
100+ alert("Error");
101+ }
102+ });
103+}
73104 /**
74105 * 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト
75106 */
@@ -113,6 +144,7 @@ function sync()
113144 <h1>Analogout test</h1>
114145 <hr/>
115146 <button onclick="async();">ASYNC</button>
147+<button onclick="async2();">ASYNC2</button>
116148 <button onclick="sync();">SYNC</button>
117149 <textarea id="console" rows="15" cols="80"></textarea>
118150 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.BusIn.html
+++ b/misc/mbedJS/mbddJS.API/test.BusIn.html
@@ -61,6 +61,33 @@ function async()
6161 }
6262 });
6363 }
64+function async2()
65+{
66+ log();
67+ log("ASYNC2");
68+ var mcu=new mbedJS.Mcu("192.168.128.39",
69+ {
70+ onNew:function(){
71+ var pin=new mbedJS.BusIn(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],function(){
72+ log("[PASS]onNew");
73+ pin.read(function(v)
74+ {
75+ log("[PASS]onread:"+v);
76+ pin.mode(mbedJS.PinMode.PullDown,function(v){
77+ log("[PASS]onMode:");
78+ mcu.close();
79+ });
80+ });
81+ });
82+ },
83+ onClose:function(){
84+ log("[PASS]onClose");
85+ },
86+ onError:function(){
87+ alert("Error");
88+ }
89+ });
90+}
6491
6592 /**
6693 * 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト
@@ -101,6 +128,7 @@ function sync()
101128 <h1>BusIn test</h1>
102129 <hr/>
103130 <button onclick="async();">ASYNC</button>
131+<button onclick="async2();">ASYNC2</button>
104132 <button onclick="sync();">SYNC</button>
105133 <textarea id="console" rows="15" cols="80"></textarea>
106134 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.BusInOut.html
+++ b/misc/mbedJS/mbddJS.API/test.BusInOut.html
@@ -77,6 +77,48 @@ function async()
7777 });
7878 }
7979
80+function async2()
81+{
82+ log();
83+ log("ASYNC2");
84+ var mcu=new mbedJS.Mcu("192.168.128.39",
85+ {
86+ onNew:function(){
87+ var bus=new mbedJS.BusInOut(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],function(){
88+ log("[PASS]onNew");
89+ bus.mode(mbedJS.PinMode.PullDown,function()
90+ {
91+ log("[PASS]onMode");
92+ bus.output(function()
93+ {
94+ log("[PASS]onOutput:");
95+ bus.write(1,function()
96+ {
97+ log("[PASS]onWrite:");
98+ bus.input(function(){
99+ log("[PASS]onInput:");
100+ bus.read(function(v)
101+ {
102+ log("[PASS]onRead:"+v);
103+ mcu.close();
104+ });
105+ });
106+ });
107+ });
108+ });
109+ });
110+ },
111+ onClose:function(){
112+ log("[PASS]onClose");
113+ },
114+ onError:function(){
115+ alert("Error");
116+ }
117+ });
118+}
119+
120+
121+
80122 /**
81123 * 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト
82124 */
@@ -120,6 +162,7 @@ function sync()
120162 <h1>BusInOut test</h1>
121163 <hr/>
122164 <button onclick="async();">ASYNC</button>
165+<button onclick="async2();">ASYNC2</button>
123166 <button onclick="sync();">SYNC</button>
124167 <textarea id="console" rows="15" cols="80"></textarea>
125168 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.BusOut.html
+++ b/misc/mbedJS/mbddJS.API/test.BusOut.html
@@ -63,6 +63,34 @@ function async()
6363 });
6464 }
6565
66+function async2()
67+{
68+ log();
69+ log("ASYNC2");
70+ var mcu=new mbedJS.Mcu("192.168.128.39",
71+ {
72+ onNew:function(){
73+ var bus=new mbedJS.BusOut(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],function(){
74+ log("[PASS]onNew");
75+ bus.write(2,function()
76+ {
77+ log("[PASS]onWrite:");
78+ bus.read(function(v){
79+ log("[PASS]onRead:"+v);
80+ mcu.close();
81+ });
82+ });
83+ });
84+ },
85+ onClose:function(){
86+ log("[PASS]onClose");
87+ },
88+ onError:function(){
89+ alert("Error");
90+ }
91+ });
92+}
93+
6694 /**
6795 * 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト
6896 */
@@ -100,6 +128,7 @@ function sync()
100128 <h1>BusOut test</h1>
101129 <hr/>
102130 <button onclick="async();">ASYNC</button>
131+<button onclick="async2();">ASYNC2</button>
103132 <button onclick="sync();">SYNC</button>
104133 <textarea id="console" rows="15" cols="80"></textarea>
105134 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.DigitalIn.html
+++ b/misc/mbedJS/mbddJS.API/test.DigitalIn.html
@@ -62,6 +62,33 @@ function async()
6262 });
6363 }
6464
65+function async2()
66+{
67+ log();
68+ log("ASYNC2");
69+ var mcu=new mbedJS.Mcu("192.168.128.39",
70+ {
71+ onNew:function(){
72+ var pin=new mbedJS.DigitalIn(mcu,mbedJS.PinName.P0_22,function(){
73+ log("[PASS]onNew");
74+ pin.mode(mbedJS.PinMode.PullUp,function()
75+ {
76+ log("[PASS]onMode:");
77+ pin.read(function(v){
78+ log("[PASS]onRead:"+v);
79+ mcu.close();
80+ });
81+ });
82+ });
83+ },
84+ onClose:function(){
85+ log("[PASS]onClose");
86+ },
87+ onError:function(){
88+ alert("Error");
89+ }
90+ });
91+}
6592 /**
6693 * 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト
6794 */
@@ -101,6 +128,7 @@ function sync()
101128 <h1>DigitalIn test</h1>
102129 <hr/>
103130 <button onclick="async();">ASYNC</button>
131+<button onclick="async2();">ASYNC2</button>
104132 <button onclick="sync();">SYNC</button>
105133 <textarea id="console" rows="15" cols="80"></textarea>
106134 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.DigitalOut.html
+++ b/misc/mbedJS/mbddJS.API/test.DigitalOut.html
@@ -49,6 +49,32 @@ function async()
4949 }
5050 });
5151 }
52+function async2()
53+{
54+ log();
55+ log("ASYNC2");
56+ var mcu=new mbedJS.Mcu("192.168.128.39",
57+ {
58+ onNew:function(){
59+ var pin=new mbedJS.DigitalOut(mcu,mbedJS.PinName.P0_22,function(){
60+ log("[PASS]onNew");
61+ pin.read(function(v){
62+ log("[PASS]onRead "+v);
63+ pin.write((v+1)%2,function(){
64+ log("[PASS]onWrite");
65+ mcu.close();
66+ });
67+ });
68+ });
69+ },
70+ onClose:function(){
71+ log("[PASS]onClose");
72+ },
73+ onError:function(){
74+ alert("Error");
75+ }
76+ });
77+}
5278
5379 /**
5480 * 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト
@@ -93,6 +119,7 @@ function sync()
93119 <h1>Digitalout test</h1>
94120 <hr/>
95121 <button onclick="async();">ASYNC</button>
122+<button onclick="async2();">ASYNC2</button>
96123 <button onclick="sync();">SYNC</button>
97124 <button onclick="sync2();">SYNC2</button>
98125 <textarea id="console" rows="15" cols="80"></textarea>
--- a/misc/mbedJS/mbddJS.API/test.I2C.html
+++ b/misc/mbedJS/mbddJS.API/test.I2C.html
@@ -91,7 +91,49 @@ function async()
9191 }
9292 });
9393 }
94-
94+function async2()
95+{
96+ log();
97+ log("ASYNC2");
98+ var st=0;
99+ var mcu=new mbedJS.Mcu("192.168.128.39",
100+ {
101+ onNew:function(){
102+ var i2c=new mbedJS.I2C(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],function(){
103+ log("[PASS]onNew");
104+ i2c.frequency(100000,function()
105+ {
106+ log("[PASS]onFrequency:");
107+ i2c.start(function(){
108+ log("[PASS]onStart:");
109+ i2c.write(1,function(v){
110+ log("[PASS]onWrite:"+v);
111+ i2c.write(0,[1,2,3],false,function(v){
112+ log("[PASS]onWrite:"+v);
113+ i2c.read(1,function(v){
114+ log("[PASS]onRead:"+v);
115+ i2c.read(1,2,false,function(v){
116+ log("[PASS]onRead:"+v.ret+":"+v.data);
117+ i2c.stop(function(){
118+ log("[PASS]onStop:");
119+ mcu.close();
120+ });
121+ });
122+ });
123+ });
124+ });
125+ });
126+ });
127+ });
128+ },
129+ onClose:function(){
130+ log("[PASS]onClose");
131+ },
132+ onError:function(){
133+ alert("Error");
134+ }
135+ });
136+}
95137 /**
96138 *
97139 */
@@ -110,11 +152,11 @@ function sync()
110152 log("[PASS]onFrequency:");
111153 yield i2c.start();
112154 log("[PASS]onStart:");
113- yield i2c.write(1);
114- v=log("[PASS]onWrite:"+v);
115- yield i2c.write(0,[1,2,3],false);
116- v=log("[PASS]onWrite2:"+v);
117- yield i2c.read(1);
155+ v=yield i2c.write(1);
156+ log("[PASS]onWrite:"+v);
157+ v=yield i2c.write(0,[1,2,3],false);
158+ log("[PASS]onWrite2:"+v);
159+ v=yield i2c.read(1);
118160 log("[PASS]onRead:"+v);
119161 v=yield i2c.read(1,2,false);
120162 log("[PASS]onRead:"+v.ret+":"+v.data);
@@ -140,6 +182,7 @@ function sync()
140182 <h1>I2C test</h1>
141183 <hr/>
142184 <button onclick="async();">ASYNC</button>
185+<button onclick="async2();">ASYNC2</button>
143186 <button onclick="sync();">SYNC</button>
144187 <textarea id="console" rows="15" cols="80"></textarea>
145188 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.I2CSlave.html
+++ b/misc/mbedJS/mbddJS.API/test.I2CSlave.html
@@ -97,6 +97,53 @@ function async()
9797 }
9898 });
9999 }
100+function async()
101+{
102+ log();
103+ log("ASYNC");
104+ var st=0;
105+ var mcu=new mbedJS.Mcu("192.168.128.39",
106+ {
107+ onNew:function(){
108+ var i2c=new mbedJS.I2CSlave(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],function(){
109+ log("[PASS]onNew");
110+ i2c.frequency(100000,function()
111+ {
112+ log("[PASS]onFrequency:");
113+ i2c.address(1,function()
114+ {
115+ log("[PASS]onAddress:");
116+ i2c.receive(function(){
117+ log("[PASS]onReceive:");
118+ i2c.write(1,function(v){
119+ log("[PASS]onWrite:"+v);
120+ i2c.write([1,2,3],function(v){
121+ log("[PASS]onWrite:"+v);
122+ i2c.read(function(v){
123+ log("[PASS]onRead:"+v);
124+ i2c.read(2,false,function(v){
125+ log("[PASS]onRead:"+v.ret+":"+v.data);
126+ i2c.stop(function(){
127+ log("[PASS]onStop:");
128+ mcu.close();
129+ });
130+ });
131+ });
132+ });
133+ });
134+ });
135+ });
136+ });
137+ });
138+ },
139+ onClose:function(){
140+ log("[PASS]onClose");
141+ },
142+ onError:function(){
143+ alert("Error");
144+ }
145+ });
146+}
100147
101148 /**
102149 *
@@ -127,6 +174,7 @@ function sync()
127174 log("[PASS]onRead:"+v.ret+":"+v.data);
128175 yield i2c.stop();
129176 yield mcu.close();
177+ log("[PASS]onstop");
130178 }catch(e){
131179 mcu.shutdown();
132180 alert(e);
@@ -145,6 +193,7 @@ function sync()
145193 <body>
146194 <h1>I2CSlave test</h1>
147195 <hr/>
196+<button onclick="async();">ASYNC2</button>
148197 <button onclick="async();">ASYNC</button>
149198 <button onclick="sync();">SYNC</button>
150199 <textarea id="console" rows="15" cols="80"></textarea>
--- a/misc/mbedJS/mbddJS.API/test.Memory.html
+++ b/misc/mbedJS/mbddJS.API/test.Memory.html
@@ -104,6 +104,62 @@ function async()
104104 }
105105 });
106106 }
107+
108+function async2()
109+{
110+ var s=0;
111+ log();
112+ log("ASYNC");
113+ var mcu=new mbedJS.Mcu("192.168.128.39",
114+ {
115+ onNew:function(){
116+ var mem=new mbedJS.Memory(mcu,function(){
117+ mem.write(0x20080000,1,function(){
118+ log("[PASS]onWrite:");
119+ mem.read(0x20080000,1,function(v){
120+ log("[PASS]onRead:"+v);
121+ mem.read(0x20080001,1,function(v){
122+ log("[PASS]onRead:"+v);
123+ mem.read(0x20080000,8,function(v){
124+ log("[PASS]onRead:"+v);
125+ mem.write(0x20080001,[2],function(){
126+ log("[PASS]onWrite:");
127+ mem.write(0x20080004,[10,20,30],function(){
128+ log("[PASS]onWrite:");
129+ mem.write32(0x20080000,0xff,function(){
130+ log("[PASS]onWrite32:");
131+ mem.read32(0x20080000,function(v){
132+ log("[PASS]onRead32:"+v);
133+ mem.read32(0x20080004,4,function(v){
134+ log("[PASS]onRead32:"+v);
135+ mem.read32(0x20080000,16,function(v){
136+ log("[PASS]onRead32:"+v);
137+ mem.write32(0x20080004,[2],function(){
138+ log("[PASS]onWrite32:"+s);
139+ mem.write32(0x20080004,[10,20,30],function(){
140+ mcu.close();
141+ });
142+ });
143+ });
144+ });
145+ });
146+ });
147+ });
148+ });
149+ });
150+ });
151+ });
152+ });
153+ });
154+ },
155+ onClose:function(){
156+ log("[PASS]onClose");
157+ },
158+ onError:function(){
159+ alert("Error");
160+ }
161+ });
162+}
107163 function sync()
108164 {
109165 log();
@@ -157,6 +213,7 @@ function sync()
157213 <h1>Memory test</h1>
158214 <hr/>
159215 <button onclick="async();">ASYNC</button>
216+<button onclick="async2();">ASYNC2</button>
160217 <button onclick="sync();">SYNC</button>
161218 <button onclick="sync2();">SYNC2</button>
162219 <textarea id="console" rows="15" cols="80"></textarea>
--- a/misc/mbedJS/mbddJS.API/test.PortIn.html
+++ b/misc/mbedJS/mbddJS.API/test.PortIn.html
@@ -57,7 +57,29 @@ function async()
5757 }
5858 });
5959 }
60-
60+function async2()
61+{
62+ log();
63+ log("ASYNC2");
64+ var mcu=new mbedJS.Mcu("192.168.128.39",
65+ {
66+ onNew:function(){
67+ var pin=new mbedJS.PortIn(mcu,[mbedJS.PortName.Port0,0xffffffff],function(){
68+ log("[PASS]onNew");
69+ pin.read(function(v){
70+ log("[PASS]read:"+v);
71+ mcu.close();
72+ });
73+ });
74+ },
75+ onClose:function(){
76+ log("[PASS]onClose");
77+ },
78+ onError:function(){
79+ alert("Error");
80+ }
81+ });
82+}
6183 /**
6284 * Sync
6385 */
@@ -96,6 +118,7 @@ function sync()
96118 <h1>PortIn test</h1>
97119 <hr/>
98120 <button onclick="async();">ASYNC</button>
121+<button onclick="async2();">ASYNC2</button>
99122 <button onclick="sync();">SYNC</button>
100123 <textarea id="console" rows="15" cols="80"></textarea>
101124 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.PortOut.html
+++ b/misc/mbedJS/mbddJS.API/test.PortOut.html
@@ -62,7 +62,34 @@ function async()
6262 }
6363 });
6464 }
65-
65+function async2()
66+{
67+ log();
68+ log("ASYNC2");
69+ var mcu=new mbedJS.Mcu("192.168.128.39",
70+ {
71+ onNew:function(){
72+ var pin=new mbedJS.PortOut(mcu,[mbedJS.PortName.Port0,0xffffffff],function(){
73+ log("[PASS]onNew");
74+ pin.write(1234,function()
75+ {
76+ log("[PASS]write:");
77+ pin.read(function(v)
78+ {
79+ log("[PASS]read:"+v);
80+ mcu.close();
81+ });
82+ });
83+ });
84+ },
85+ onClose:function(){
86+ log("[PASS]onClose");
87+ },
88+ onError:function(){
89+ alert("Error");
90+ }
91+ });
92+}
6693 /**
6794 * Sync
6895 */
@@ -103,6 +130,7 @@ function sync()
103130 <h1>PortOut test</h1>
104131 <hr/>
105132 <button onclick="async();">ASYNC</button>
133+<button onclick="async2();">ASYNC2</button>
106134 <button onclick="sync();">SYNC</button>
107135 <textarea id="console" rows="15" cols="80"></textarea>
108136 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.PwmOut.html
+++ b/misc/mbedJS/mbddJS.API/test.PwmOut.html
@@ -87,7 +87,51 @@ function async()
8787 }
8888 });
8989 }
90-
90+function async2()
91+{
92+ log();
93+ log("ASYNC2");
94+ var mcu=new mbedJS.Mcu("192.168.128.39",
95+ {
96+ onNew:function(){
97+ var pin=new mbedJS.PwmOut(mcu,mbedJS.PinName.p21,function(){
98+ log("[PASS]onNew");
99+ pin.write(0.33,function(){
100+ log("[PASS]onwrite:");
101+ pin.read(function(v)
102+ {
103+ log("[PASS]onread:"+v);
104+ pin.period(1.0,function(){
105+ log("[PASS]onPeriod:");
106+ pin.period_ms(1,function(){
107+ log("[PASS]onPeriod_ms:");
108+ pin.period_us(10,function(){
109+ log("[PASS]onPeriod_us:");
110+ pin.pulsewidth(3,function(){
111+ log("[PASS]onPulseWidth:");
112+ pin.pulsewidth_ms(30,function(){
113+ log("[PASS]onPulseWidth_ms:");
114+ pin.pulsewidth_us(40,function(){
115+ log("[PASS]onPulseWidth_us:");
116+ mcu.close();
117+ });
118+ });
119+ });
120+ });
121+ });
122+ });
123+ });
124+ });
125+ });
126+ },
127+ onClose:function(){
128+ log("[PASS]onClose");
129+ },
130+ onError:function(){
131+ alert("Error");
132+ }
133+ });
134+}
91135 /**
92136 * Sync
93137 */
@@ -138,6 +182,7 @@ function sync()
138182 <h1>Pwm test</h1>
139183 <hr/>
140184 <button onclick="async();">ASYNC</button>
185+<button onclick="async2();">ASYNC</button>
141186 <button onclick="sync();">SYNC</button>
142187 <textarea id="console" rows="15" cols="80"></textarea>
143188 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.SPI.html
+++ b/misc/mbedJS/mbddJS.API/test.SPI.html
@@ -67,6 +67,38 @@ function async()
6767 });
6868 }
6969
70+
71+function async2()
72+{
73+ log();
74+ log("ASYNC2");
75+ var mcu=new mbedJS.Mcu("192.168.128.39",
76+ {
77+ onNew:function(){
78+ var pin=new mbedJS.SPI(mcu,[mbedJS.PinName.p5,mbedJS.PinName.p6,mbedJS.PinName.p7],function(){
79+ log("[PASS]onNew");
80+ pin.frequency(1000000,function()
81+ {
82+ log("[PASS]onFrequency:");
83+ pin.format(8,3,function()
84+ {
85+ log("[PASS]onFormat:");
86+ pin.write(39,function(v){
87+ log("[PASS]onWrite:"+v);
88+ mcu.close();
89+ });
90+ });
91+ });
92+ });
93+ },
94+ onClose:function(){
95+ log("[PASS]onClose");
96+ },
97+ onError:function(){
98+ alert("Error");
99+ }
100+ });
101+}
70102 /**
71103 * 誤った使用方法でExceptionが出た場合にシャットダウンできるかのテスト
72104 */
@@ -107,6 +139,7 @@ function sync()
107139 <h1>SPI test</h1>
108140 <hr/>
109141 <button onclick="async();">ASYNC</button>
142+<button onclick="async2();">ASYNC2</button>
110143 <button onclick="sync();">SYNC</button>
111144 <textarea id="console" rows="15" cols="80"></textarea>
112145 </body>
\ No newline at end of file
--- a/misc/mbedJS/mbddJS.API/test.SPISlave.html
+++ b/misc/mbedJS/mbddJS.API/test.SPISlave.html
@@ -78,6 +78,46 @@ function async()
7878 });
7979 }
8080
81+function async2()
82+{
83+ log();
84+ log("ASYNC2");
85+ var mcu=new mbedJS.Mcu("192.168.128.39",
86+ {
87+ onNew:function(){
88+ var pin=new mbedJS.SPISlave(mcu,[mbedJS.PinName.p5,mbedJS.PinName.p6,mbedJS.PinName.p7,mbedJS.PinName.p8],function(){
89+ log("[PASS]onNew");
90+ pin.frequency(1000000,function()
91+ {
92+ log("[PASS]onFrequency:");
93+ pin.format(8,3,function()
94+ {
95+ log("[PASS]onFormat:");
96+ pin.read(function(v){
97+ log("[PASS]onread:"+v);
98+ pin.receive(function(v)
99+ {
100+ log("[PASS]onReceive:"+v);
101+ pin.reply(1,function(){
102+ log("[PASS]onReply:");
103+ mcu.close();
104+ });
105+ });
106+ });
107+ });
108+ });
109+ });
110+ },
111+ onClose:function(){
112+ log("[PASS]onClose");
113+ },
114+ onError:function(){
115+ alert("Error");
116+ }
117+ });
118+}
119+
120+
81121 /**
82122 *
83123 */
@@ -121,6 +161,7 @@ function sync()
121161 <body>
122162 <h1>SPISlave test</h1>
123163 <hr/>
164+<button onclick="async2();">ASYNC2</button>
124165 <button onclick="async();">ASYNC</button>
125166 <button onclick="sync();">SYNC</button>
126167 <textarea id="console" rows="15" cols="80"></textarea>
--- a/misc/mbedJS/mbddJS.API/test.Serial.html
+++ b/misc/mbedJS/mbddJS.API/test.Serial.html
@@ -92,7 +92,55 @@ function async()
9292 }
9393 });
9494 }
95-
95+function async2()
96+{
97+ log();
98+ log("ASYNC2");
99+ var mcu=new mbedJS.Mcu("192.168.128.39",
100+ {
101+ onNew:function(){
102+ var uart=new mbedJS.Serial(mcu,[mbedJS.PinName.p9,mbedJS.PinName.p10],
103+ function(){
104+ log("[PASS]onNew");
105+ uart.baud(115200,function()
106+ {
107+ log("[PASS]onBaud:");
108+ uart.send_break(function(){
109+ log("[PASS]onSend_break:");
110+ uart.format(8,uart.Parity.None,1,function(){
111+ log("[PASS]onForma:");
112+ uart.readable(function(v){
113+ log("[PASS]onReadable:"+v);
114+ uart.writeable(function(v){
115+ log("[PASS]onWritable:"+v);
116+ uart.putc(32,function(v){
117+ log("[PASS]onPutc:"+v);
118+ uart.getc(function(v){
119+ log("[PASS]onGetc:"+v);
120+ uart.puts("1234",function(v){
121+ log("[PASS]onPuts:"+v);
122+ uart.gets(5,function(v){
123+ log("[PASS]onGets:"+v);
124+ mcu.close();
125+ });
126+ });
127+ });
128+ });
129+ });
130+ });
131+ });
132+ });
133+ });
134+ });
135+ },
136+ onClose:function(){
137+ log("[PASS]onClose");
138+ },
139+ onError:function(){
140+ alert("Error");
141+ }
142+ });
143+}
96144 /**
97145 *
98146 */
@@ -146,6 +194,7 @@ function sync()
146194 <body>
147195 <h1>Serial test</h1>
148196 <hr/>
197+<button onclick="async2();">ASYNC2</button>
149198 <button onclick="async();">ASYNC</button>
150199 <button onclick="sync();">SYNC</button>
151200 <textarea id="console" rows="15" cols="80"></textarea>
Show on old repository browser