2 * @fileOverview SPIクラスを定義します。
\r
10 * <a href="https://mbed.org/handbook/SPI">mbed::SPI</a>と同等の機能を持ちます。
\r
13 * @param {mbedJS.Mcu} i_mcu
\r
14 * インスタンスをバインドするMCUオブジェクトです。
\r
15 * @param {[PinName,PinName,PinName]} i_params
\r
16 * SPIを構成する3つのPinNameを格納する配列です。mosi,miso,sclkの順番です。
\r
17 * @param {HashMap|Generator} i_event
\r
18 * 非同期イベントハンドラの連想配列、又はGeneratorです。
\r
20 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
\r
22 * <li>{function()} onNew -
\r
23 * インスタンスが使用可能になった時に呼び出されます。
\r
25 * <li>{function(v)} onWrite -
\r
26 * write関数のコールバック関数です。
\r
28 * <li>{int} v - 受信した8BIT値です。</li>
\r
31 * <li>{function(v)} onFrequency -
\r
32 * frequency関数のコールバック関数です。
\r
34 * <li>{function(v)} onFormat -
\r
35 * format関数のコールバック関数です。
\r
39 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
\r
41 * @return {mbedJS.SPI}
\r
42 * @example //Callback
\r
43 * var mcu=new mbedJS.Mcu("192.168.128.39",
\r
46 * var pin=new mbedJS.SPI(mcu,[mbedJS.PinName.p5,mbedJS.PinName.p6,mbedJS.PinName.p7],{
\r
48 * pin.frequency(1000000);
\r
50 * onFrequency:function()
\r
54 * onFormat:function()
\r
58 * onWrite:function(v){
\r
62 * onClose:function(){
\r
64 * onError:function(){
\r
67 * @example //Generator
\r
68 * var g=function*(){
\r
70 * var mcu=new mbedJS.Mcu("192.168.128.39",g);
\r
71 * yield mcu.waitForNew();
\r
72 * var pin=new mbedJS.SPI(mcu,[mbedJS.PinName.p5,mbedJS.PinName.p6,mbedJS.PinName.p7],g);
\r
73 * yield pin.waitForNew();
\r
74 * yield pin.frequency(1000000);
\r
75 * yield pin.format(8,3);
\r
76 * v=yield pin.write(39);
\r
77 * yield mcu.close();
\r
84 var CLASS=function SPI(i_mcu,i_params,i_handler)
\r
90 if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
\r
91 else if(i_handler){_t._event=i_handler}
\r
94 _t._oid=j.result[0];
\r
95 if(_t._event.onNew){_t._event.onNew();}
\r
96 if(_t._gen){_t._gen.next(_t);}
\r
99 MI.assertInt(i_params);
\r
100 return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+NS.PinName.NC,cb);
\r
102 throw new MI.MiMicException(e);
\r
109 RPC_NS:"mbedJS:SPI",
\r
110 /** @private 最後にコールしたAPIです。*/
\r
112 /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/
\r
114 /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/
\r
116 /** @private リモートインスタンスのオブジェクトIDです。*/
\r
119 * Generatorモードのときに使用する関数です。
\r
120 * Generatorモードの時は、yieldと併用してnew SPI()の完了を待ちます。
\r
121 * @name mbedJS.SPI#waitForNew
\r
124 waitForNew:function SPI_waitForNew()
\r
127 if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}
\r
128 this._lc=CLASS.waitForNew;
\r
130 throw new MI.MiMicException(e);
\r
135 * 関数の完了時にonWriteイベントが発生します。
\r
136 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
137 * @name mbedJS.SPI#write
\r
139 * @param {int} i_value
\r
141 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
143 write:function SPI_write(i_value)
\r
147 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
148 _t._lc=CLASS.write;
\r
149 MI.assertInt(i_value);
\r
150 return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,
\r
153 if(_t._event.onWrite){_t._event.onWrite(v);}
\r
154 if(_t._gen){_t._gen.next(v);}
\r
158 throw new MI.MiMicException(e);
\r
163 * 関数の完了時にonFrequencyイベントが発生します。
\r
164 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
165 * @name mbedJS.SPI#frequency
\r
167 * @param {int} i_value
\r
168 * frequencyに設定する値です。
\r
170 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
172 frequency:function SPI_frequency(i_value)
\r
176 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
177 _t._lc=CLASS.frequency;
\r
178 MI.assertInt(i_value);
\r
179 return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_value,
\r
181 if(_t._event.onFrequency){_t._event.onFrequency();}
\r
182 if(_t._gen){_t._gen.next();}
\r
186 throw new MI.MiMicException(e);
\r
191 * 関数の完了時にonFrequencyイベントが発生します。
\r
192 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
193 * @name mbedJS.SPI#format
\r
195 * @param {int} i_bits
\r
196 * @param {int} i_mode
\r
197 * 省略可能です。省略時は0になります。
\r
199 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
201 format:function SPI_format(i_bits,i_mode)
\r
205 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
206 _t._lc=CLASS.format;
\r
207 var mode=i_mode?i_mode:0;
\r
208 MI.assertInt([i_bits,mode]);
\r
209 return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+i_bits+","+mode,
\r
211 if(_t._event.onFormat){_t._event.onFormat();}
\r
212 if(_t._gen){_t._gen.next();}
\r
216 throw new MI.MiMicException(e);
\r