2 * @fileOverview BusInOutクラスを定義します。
\r
10 * <a href="https://mbed.org/handbook/BusInOut">mbed::BusInOut</a>と同等の機能を持ちます。
\r
11 * @name mbedJS.BusInOut
\r
13 * @param {mbedJS.Mcu} i_mcu
\r
14 * インスタンスをバインドするMCUオブジェクトです。
\r
15 * @param {[PinName...]} i_params
\r
16 * ピンIDの配列を指定します。要素数の最大値は16です。
\r
17 * @param {HashMap|Generator} i_event
\r
18 * 非同期イベントハンドラの連想配列、又はGeneratorです。
\r
20 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
\r
22 * <li>{function()} onNew -
\r
23 * インスタンスが使用可能になった時に呼び出されます。
\r
25 * <li>{function(v)} onRead -
\r
26 * read関数のコールバック関数です。
\r
28 * <li>{int} v - 現在のピンの値です。</li>
\r
31 * <li>{function()} onWrite -
\r
32 * write関数のコールバック関数です。
\r
35 * <li>{function()} onOutput -
\r
36 * output関数のコールバック関数です。
\r
38 * <li>{function()} onInput -
\r
39 * input関数のコールバック関数です。
\r
41 * <li>{function()} onMode -
\r
42 * mode関数のコールバック関数です。
\r
46 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
\r
48 * @return {mbedJS.BusIn}
\r
49 * @example //Callback
\r
50 * var mcu=new mbedJS.Mcu("192.168.128.39",
\r
53 * var bus=new mbedJS.BusInOut(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],{
\r
55 * bus.mode(mbedJS.PinMode.PullDown);
\r
61 * onOutput:function()
\r
65 * onWrite:function()
\r
69 * onInput:function(){
\r
72 * onRead:function(v)
\r
77 * onClose:function(){
\r
79 * onError:function(){
\r
83 * @example //Generator
\r
84 * var g=function*(){
\r
86 * var mcu=new mbedJS.Mcu("192.168.128.39",g);
\r
87 * yield mcu.waitForNew();
\r
88 * var bus=new mbedJS.BusInOut(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],g);
\r
89 * yield bus.waitForNew();
\r
90 * yield bus.mode(mbedJS.PinMode.PullDown);
\r
91 * yield bus.output();
\r
92 * yield bus.write(1);
\r
93 * yield bus.input();
\r
94 * var v=yield bus.read();
\r
95 * yield mcu.close();
\r
102 var CLASS=function BusInOut(i_mcu,i_params,i_handler)
\r
108 if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
\r
109 else if(i_handler){_t._event=i_handler}
\r
112 _t._oid=j.result[0];
\r
113 if(_t._event.onNew){_t._event.onNew();}
\r
114 if(_t._gen){_t._gen.next(_t);}
\r
121 if(ap.length<1 ||ap.length>16){
\r
122 throw new MI.MiMicException(MI.NG_INVALID_ARG);
\r
126 for(;i<i_params.length;i++){
\r
130 pins+=","+NS.PinName.NC;
\r
132 return _t._mcu.rpc(_t.RPC_NS+":_new1",pins,cb);
\r
134 throw new MI.MiMicException(e);
\r
140 RPC_NS:"mbedJS:BusInOut",
\r
141 /** @private 最後にコールしたAPIです。*/
\r
143 /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/
\r
145 /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/
\r
147 /** @private リモートインスタンスのオブジェクトIDです。*/
\r
150 * Generatorモードのときに使用する関数です。
\r
151 * Generatorモードの時は、yieldと併用してnew BusInOut()の完了を待ちます。
\r
152 * @name mbedJS.BusInOut#waitForNew
\r
155 waitForNew:function BusInOut_waitForNew()
\r
158 if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}
\r
159 this._lc=CLASS.waitForNew;
\r
161 throw new MI.MiMicException(e);
\r
166 * 関数の完了時にonWriteイベントが発生します。
\r
167 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
168 * @name mbedJS.BusInOut#write
\r
170 * @param {int} i_value
\r
172 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
174 write:function BusInOut_write(i_value)
\r
178 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
179 _t._lc=CLASS.write;
\r
180 MI.assertInt(i_value);
\r
181 return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,
\r
183 if(_t._event.onWrite){_t._event.onWrite();}
\r
184 if(_t._gen){_t._gen.next();}
\r
188 throw new MI.MiMicException(e);
\r
193 * 関数の完了時にonReadイベントが発生します。
\r
194 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
195 * @name mbedJS.BusInOut#read
\r
198 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
200 * Generatorモードの時はピンの値を返します。
\r
202 read:function BusInOut_read()
\r
206 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
208 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
\r
212 if(_t._event.onRead){_t._event.onRead(v);}
\r
213 if(_t._gen){_t._gen.next(v);}
\r
218 throw new MI.MiMicException(e);
\r
223 * 関数の完了時にonModeイベントが発生します。
\r
224 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
225 * @name mbedJS.BusInOut#mode
\r
227 * @param {PinMode} i_value
\r
230 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
232 mode:function BusInOut_mode(i_value)
\r
236 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
238 MI.assertInt(i_value);
\r
239 return _t._mcu.rpc(_t.RPC_NS+":mode",_t._oid+","+i_value,
\r
243 if(_t._event.onMode){_t._event.onMode(v);}
\r
244 if(_t._gen){_t._gen.next(v);}
\r
248 throw new MI.MiMicException(e);
\r
253 * 関数の完了時にonInputイベントが発生します。
\r
254 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
255 * @name mbedJS.BusInOut#input
\r
258 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
260 input:function BusInOut_input()
\r
264 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
265 _t._lc=CLASS.input;
\r
266 return _t._mcu.rpc(_t.RPC_NS+":input",_t._oid,
\r
269 if(_t._event.onInput){_t._event.onInput();}
\r
270 if(_t._gen){_t._gen.next();}
\r
274 throw new MI.MiMicException(e);
\r
279 * 関数の完了時にonOutputイベントが発生します。
\r
280 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
281 * @name mbedJS.BusInOut#output
\r
284 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
286 output:function BusInOut_output()
\r
290 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
292 return _t._mcu.rpc(_t.RPC_NS+":output",_t._oid,
\r
295 if(_t._event.onOutput){_t._event.onOutput();}
\r
296 if(_t._gen){_t._gen.next();}
\r
300 throw new MI.MiMicException(e);
\r