2 * @fileOverview DigitalOutクラスを定義します。
\r
10 * <a href="https://mbed.org/handbook/DigitalOut">mbed::DigitalOut</a>と同等の機能を持ちます。
\r
11 * @name mbedJS.DigitalOut
\r
13 * @param {mbedJS.Mcu} i_mcu
\r
14 * インスタンスをバインドするMCUオブジェクトです。
\r
15 * @param {PinName|HashMap|Array} i_params
\r
16 * PinName又はコンストラクタの引数を格納した連想配列、配列です。
\r
17 * 複数のパラメータを指定する場合は連想配列を使用してください。
\r
18 * <p>PinNameの場合は制御するPinIDを指定します。</p>
\r
20 * HashMapの場合は以下のメンバを指定できます。
\r
22 * <li>{PinName} pin -
\r
25 * ピンの初期値を指定します。</li>
\r
28 * <p>配列の場合は次の順番でパラメータを指定します。
\r
29 * <pre>{pin,value}</pre>
\r
31 * @param {HashMap|Generator|function} i_handler
\r
32 * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。
\r
34 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
\r
37 * <li>{function()} onNew -
\r
38 * インスタンスが使用可能になった時に呼び出されます。
\r
40 * <li>{function()} onWrite -
\r
41 * write関数のコールバック関数です。
\r
43 * <li>{function(v)} onRead -
\r
44 * read関数のコールバック関数です。
\r
46 * <li>{int} v - 現在のピンの値です。</li>
\r
51 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
\r
54 * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。
\r
56 * @return {mbedJS.DigitalOut}
\r
57 * @example //Callback
\r
58 * var mcu=new mbedJS.Mcu("192.168.128.39",
\r
61 * var pin=new mbedJS.DigitalOut(mcu,mbedJS.PinName.P0_22,{
\r
65 * onWrite:function(){
\r
68 * onRead:function(v){
\r
69 * pin.write((v+1)%2);
\r
72 * onClose:function(){
\r
74 * onError:function(){
\r
77 * @example //Generator
\r
78 * var g=function*(){
\r
80 * var mcu=new mbedJS.Mcu("192.168.128.39",g);
\r
81 * yield mcu.waitForNew();
\r
82 * var pin=new mbedJS.DigitalOut(mcu,{pin:mbedJS.PinName.P0_22,value:0},g);
\r
83 * yield pin.waitForNew();
\r
84 * var v=yield pin.read();
\r
85 * yield pin.write((v+1)%2);
\r
86 * v=yield pin.read();
\r
87 * yield pin.write((v+1)%2);
\r
88 * yield mcu.close();
\r
95 var CLASS=function DigitalOut(i_mcu,i_params,i_handler)
\r
101 var cb=MI._initHandler.call(_t,i_handler);
\r
104 _t._oid=j.result[0];
\r
106 if(_t._gen){_t._gen.next(_t);}
\r
111 if(MI.isHashArray(i_params)){
\r
112 pr=[i_params.pin,i_params.value];
\r
113 }else if(MI.isArray(i_params)){
\r
114 pr=[i_params[0],null];
\r
116 pr=[i_params,null];
\r
118 MI.assertInt(pr[0]);
\r
120 MI.assertInt(pr[1]);
\r
121 _t._mcu.rpc(_t.RPC_NS+":_new2",pr[0]+","+pr[1],rcb);
\r
123 _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0],rcb);
\r
126 throw new MI.MiMicException(e);
\r
132 RPC_NS:"mbedJS:DigitalOut",
\r
133 /** @private 最後にコールしたAPIです。*/
\r
135 /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/
\r
137 /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/
\r
139 /** @private リモートインスタンスのオブジェクトIDです。*/
\r
142 * Generatorモードのときに使用する関数です。
\r
143 * Generatorモードの時は、yieldと併用してnew DigitalOut()の完了を待ちます。
\r
144 * @name mbedJS.DigitalOut#waitForNew
\r
147 waitForNew:function DigitalOut_waitForNew()
\r
150 if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}
\r
151 this._lc=CLASS.waitForNew;
\r
153 throw new MI.MiMicException(e);
\r
158 * 関数の完了時にonWriteイベントが発生します。
\r
159 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
160 * @name mbedJS.DigitalOut#write
\r
162 * @param {int} i_value
\r
164 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
166 write:function DigitalOut_write(i_value)
\r
170 var cb=MI._getCb(arguments,_t._event.onWrite);
\r
171 MI._assertYield.call(_t);
\r
172 _t._lc=CLASS.write;
\r
173 MI.assertInt(i_value);
\r
174 return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,
\r
177 if(_t._gen){_t._gen.next();}
\r
181 throw new MI.MiMicException(e);
\r
186 * 関数の完了時にonReadイベントが発生します。
\r
187 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
188 * @name mbedJS.DigitalOut#read
\r
191 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
193 * Generatorモードの時はピンの値を返します。
\r
195 read:function DigitalOut_read()
\r
199 var cb=MI._getCb(arguments,_t._event.onRead);
\r
200 MI._assertYield.call(_t);
\r
202 return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,
\r
207 if(_t._gen){_t._gen.next(v);}
\r
212 throw new MI.MiMicException(e);
\r
216 NS.DigitalOut=CLASS;
\r