2 * @fileOverview PortInクラスを定義します。
\r
10 * <a href="https://mbed.org/handbook/PortIn">mbed::PortIn</a>と同等の機能を持ちます。
\r
11 * @name mbedJS.PortIn
\r
13 * @param {mbedJS.Mcu} i_mcu
\r
14 * インスタンスをバインドするMCUオブジェクトです。
\r
15 * @param {HashMap|Array} i_params
\r
17 * HashNapの場合は以下のメンバを指定できます。
\r
19 * <li>{PortName} port -
\r
21 * <li>{uint32} mask -
\r
22 * ポートマスクを指定します。</li>
\r
25 * <p>配列の場合は次の順番でパラメータを指定します。
\r
26 * <pre>{port,mask}</pre>
\r
28 * @param {HashMap|Generator|function} i_handler
\r
29 * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
\r
31 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
\r
33 * <li>{function()} onNew -
\r
34 * インスタンスが使用可能になった時に呼び出されます。
\r
36 * <li>{function(v)} onRead -
\r
37 * read関数のコールバック関数です。
\r
39 * <li>{int} v - 現在のポートの値です。</li>
\r
44 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
\r
47 * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
\r
49 * @return {mbedJS.PortIn}
\r
50 * @example //Callback
\r
51 * var mcu=new mbedJS.Mcu("192.168.128.39",
\r
54 * var pin=new mbedJS.PortIn(mcu,[mbedJS.PortName.Port0,0xffffffff],{
\r
56 * log("[PASS]onNew");
\r
59 * onRead:function(v)
\r
61 * log("[PASS]read:"+v);
\r
65 * onClose:function(){
\r
66 * log("[PASS]onClose");
\r
68 * onError:function(){
\r
72 * @example //Generator
\r
73 * var g=function*(){
\r
75 * var mcu=new mbedJS.Mcu("192.168.128.39",g);
\r
76 * yield mcu.waitForNew();
\r
77 * var port=new mbedJS.PortIn(mcu,[mbedJS.PortName.Port0,0xffffffff],g);
\r
78 * yield port.waitForNew();
\r
79 * var v=yield port.read();
\r
80 * yield mcu.close();
\r
87 var CLASS=function PortIn(i_mcu,i_params,i_handler)
\r
93 var cb=MI._initHandler.call(_t,i_handler);
\r
96 if(MI.isHashArray(i_params)){
\r
97 pr=[i_params.port,i_params.mask];
\r
98 }else if(MI.isArray(i_params)){
\r
102 _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],
\r
105 _t._oid=j.result[0];
\r
107 if(_t._gen){_t._gen.next(_t);}
\r
112 throw new MI.MiMicException(e);
\r
118 RPC_NS:"mbedJS:PortIn",
\r
119 /** @private 最後にコールしたAPIです。*/
\r
121 /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/
\r
123 /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/
\r
125 /** @private リモートインスタンスのオブジェクトIDです。*/
\r
128 * Generatorモードのときに使用する関数です。
\r
129 * Generatorモードの時は、yieldと併用してnew PortIn()の完了を待ちます。
\r
130 * @name mbedJS.PortIn#waitForNew
\r
133 waitForNew:function PortIn_waitForNew()
\r
136 if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}
\r
137 this._lc=CLASS.waitForNew;
\r
139 throw new MI.MiMicException(e);
\r
144 * 関数の完了時にonReadイベントが発生します。
\r
145 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
146 * @name mbedJS.PortIn#read
\r
149 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
151 * Generatorモードの時はポートの値を返します。
\r
153 read:function PortIn_read()
\r
157 var cb=MI._getCb(arguments,_t._event.onRead);
\r
158 MI._assertYield.call(_t);
\r
160 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
\r
165 if(_t._gen){_t._gen.next(v);}
\r
170 throw new MI.MiMicException(e);
\r
174 * MCUに生成されているオブジェクトを破棄します。
\r
175 * @name mbedJS.PortIn#dispose
\r
178 dispose:function PortIn_dispose()
\r
180 return this._mcu._dispose.apply(this,arguments);
\r