OSDN Git Service

6060402108dfc51a05827e4079e164ab076c54d3
[mimic/MiMicSDK.git] / misc / mbedJS / mbddJS.API / mbedJS / mbed.SPI.js
1 (function(){\r
2 var NS=mbedJS;\r
3 var MI=MiMicJS;\r
4 \r
5 /**\r
6  * @name mbedJS.SPI\r
7  * SPIクラスです。\r
8  * <a href="https://mbed.org/handbook/SPI">mbed::SPI</a>と同等の機能を持ちます。\r
9  * @constructor\r
10  * @param {mbedJS.Mcu} i_mcu\r
11  * インスタンスをバインドするMCUオブジェクトです。\r
12  * @param {[PinName,PinName,PinName]} i_params\r
13  * SPIを構成する3つのPinNameを格納する配列です。mosi,miso,sclkの順番です。\r
14  * @param {HashMap|Generator} i_event\r
15  * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
16  * <p>\r
17  * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
18  * <ul>\r
19  * <li>{function()} onNew -\r
20  * インスタンスが使用可能になった時に呼び出されます。\r
21  * </li>\r
22  * <li>{function(v)} onWrite -\r
23  * write関数のコールバック関数です。\r
24  *      <ul>\r
25  *              <li>{int} v - 受信した8BIT値です。</li>\r
26  *      </ul>\r
27  * </li>\r
28  * <li>{function(v)} onFrequency  -\r
29  * frequency関数のコールバック関数です。\r
30  * </li>\r
31  * <li>{function(v)} onFormat  -\r
32  * format関数のコールバック関数です。\r
33  * </li>\r
34  * </ul>\r
35  * <p>\r
36  * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
37  * <p>\r
38  * @return {mbedJS.SPI}\r
39  * @example\r
40  */\r
41 var CLASS=function SPI(i_mcu,i_params,i_handler)\r
42 {\r
43         try{\r
44                 var _t=this;\r
45                 _t._mcu=i_mcu;\r
46                 _t._lc=CLASS;\r
47                 if(MI.isGenerator(i_handler)){_t._gen=i_handler;}\r
48                 else if(i_handler){_t._event=i_handler}\r
49                 function cb(j)\r
50                 {\r
51                         _t._oid=j.result[0];\r
52                         if(_t._event.onNew){_t._event.onNew();}\r
53                         if(_t._gen){_t._gen.next(_t);}\r
54                         _t._lc=null;\r
55                 }\r
56                 MI.assertInt(i_params);\r
57                 return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1]+","+i_params[2]+","+NS.PinName.NC,cb);\r
58         }catch(e){\r
59                 throw new MI.MiMicException(e);\r
60         }\r
61                 \r
62 }\r
63 CLASS.prototype=\r
64 {\r
65         /** @private */\r
66         RPC_NS:"mbedJS:SPI",\r
67         /** @private 最後にコールしたAPIです。*/\r
68         _lc:null,\r
69         /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
70         _gen:null,\r
71         /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
72         _event:{},\r
73         /** @private リモートインスタンスのオブジェクトIDです。*/\r
74         _oid:null,\r
75         /**\r
76          * @name mbedJS.SPI#waitForNew\r
77          * @function\r
78          * Generatorモードのときに使用する関数です。\r
79          * Generatorモードの時は、yieldと併用してnew SPI()の完了を待ちます。\r
80          */\r
81         waitForNew:function SPI_waitForNew()\r
82         {\r
83                 try{\r
84                         if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
85                         this._lc=CLASS.waitForNew;\r
86                 }catch(e){\r
87                         throw new MI.MiMicException(e);\r
88                 }                       \r
89         },      \r
90         /**\r
91          * @name mbedJS.SPI#write\r
92          * @function\r
93          * ピンに値を出力します。\r
94          * 関数の完了時にonWriteイベントが発生します。\r
95          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
96          * @param {int} i_value\r
97          * @return {int|none}\r
98          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
99          * <p>Generatorモードの時は戻り値はありません。</p>\r
100          */\r
101         write:function SPI_write(i_value)\r
102         {\r
103                 try{\r
104                         var _t=this;\r
105                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
106                         _t._lc=CLASS.write;\r
107                         MI.assertInt(i_value);\r
108                         return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,\r
109                         function(j){\r
110                                 var v=j.result[0];\r
111                                 if(_t._event.onWrite){_t._event.onWrite(v);}\r
112                                 if(_t._gen){_t._gen.next(v);}\r
113                                  _t._lc=null;\r
114                         });\r
115                 }catch(e){\r
116                         throw new MI.MiMicException(e);\r
117                 }\r
118         },\r
119         /**\r
120          * @name mbedJS.SPI#frequency\r
121          * @function\r
122          * ピンに値を出力します。\r
123          * 関数の完了時にonFrequencyイベントが発生します。\r
124          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
125          * @param {int} i_value\r
126          * \r
127          * @return {int|none}\r
128          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
129          * <p>Generatorモードの時は戻り値はありません。</p>\r
130          */\r
131         frequency:function SPI_frequency(i_value)\r
132         {\r
133                 try{\r
134                         var _t=this;\r
135                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
136                         _t._lc=CLASS.frequency;\r
137                         MI.assertInt(i_value);\r
138                         return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_value,\r
139                         function(j){\r
140                                 if(_t._event.onFrequency){_t._event.onFrequency();}\r
141                                 if(_t._gen){_t._gen.next();}\r
142                                  _t._lc=null;\r
143                         });\r
144                 }catch(e){\r
145                         throw new MI.MiMicException(e);\r
146                 }\r
147         },      \r
148         /**\r
149          * @name mbedJS.SPI#format\r
150          * @function\r
151          * ピンに値を出力します。\r
152          * 関数の完了時にonFrequencyイベントが発生します。\r
153          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
154          * @param {int} i_bits\r
155          * @param {int} i_mode\r
156          * 省略可能です。省略時は0になります。\r
157          * @return {int|none}\r
158          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
159          * <p>Generatorモードの時は戻り値はありません。</p>\r
160          */\r
161         format:function SPI_format(i_bits,i_mode)\r
162         {\r
163                 try{\r
164                         var _t=this;\r
165                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
166                         _t._lc=CLASS.format;\r
167                         var mode=i_mode?i_mode:0;\r
168                         MI.assertInt([i_bits,mode]);\r
169                         return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+i_bits+","+mode,\r
170                         function(j){\r
171                                 if(_t._event.onFormat){_t._event.onFormat();}\r
172                                 if(_t._gen){_t._gen.next();}\r
173                                  _t._lc=null;\r
174                         });\r
175                 }catch(e){\r
176                         throw new MI.MiMicException(e);\r
177                 }\r
178         }\r
179 }\r
180 NS.SPI=CLASS;\r
181 }());