OSDN Git Service

10d9aec13e09929451dfb45b10f7ca729f266b09
[mimic/MiMicSDK.git] / misc / mbedJS / mbddJS.API / mbedJS / mbed.PwmOut.js
1 /**\r
2  * @fileOverview PwmOutクラスを定義します。\r
3  */\r
4 (function(){\r
5 var NS=mbedJS;\r
6 var MI=MiMicJS;\r
7 \r
8 /**\r
9  * PwmOutクラスです。\r
10  * <a href="https://mbed.org/handbook/PwmOut">mbed::PwmOut</a>と同等の機能を持ちます。\r
11  * @name mbedJS.PwmOut\r
12  * @constructor\r
13  * @param {mbedJS.Mcu} i_mcu\r
14  * インスタンスをバインドするMCUオブジェクトです。\r
15  * @param {PinName} i_params\r
16  * ピンIDを指定します。\r
17  * @param {HashMap|Generator} i_event\r
18  * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
19  * <p>\r
20  * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
21  * <ul>\r
22  * <li>{function()} onNew -\r
23  * インスタンスが使用可能になった時に呼び出されます。\r
24  * </li>\r
25  * <li>{function()} onWrite -\r
26  * write関数のコールバック関数です。\r
27  * </li>\r
28  * <li>{function(v)} onRead  -\r
29  * read関数のコールバック関数です。\r
30  *      <ul>\r
31  *              <li>{int} v - 現在のピンの値です。</li>\r
32  *      </ul>\r
33  * </li>\r
34  * <li>{function()} onPeriod -\r
35  * period関数のコールバック関数です。\r
36  * </li>\r
37  * <li>{function()} onPeriod_ms -\r
38  * period_ms関数のコールバック関数です。\r
39  * </li>\r
40  * <li>{function()} onPeriod_us -\r
41  * period_ns関数のコールバック関数です。\r
42  * </li>\r
43  * <li>{function()} onPulsewidth -\r
44  * pulswidth関数のコールバック関数です。\r
45  * </li>\r
46  * <li>{function()} onPulsewidth_ms -\r
47  * pulswidth_ms関数のコールバック関数です。\r
48  * </li>\r
49  * <li>{function()} onPulsewidth_us -\r
50  * pulswidth_us関数のコールバック関数です。\r
51  * </li>\r
52  * </ul>\r
53  * <p>\r
54  * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
55  * <p>\r
56  * @return {mbedJS.PwmOut}\r
57  * @example //Callback\r
58  * var mcu=new mbedJS.Mcu("192.168.128.39",\r
59  * {\r
60  *   onNew:function(){\r
61  *     var pin=new mbedJS.PwmOut(mcu,mbedJS.PinName.p21,{\r
62  *     onNew:function(){\r
63  *       pin.write(0.33);\r
64  *     },\r
65  *     onWrite:function()\r
66  *     {\r
67  *       pin.read();\r
68  *     },\r
69  *     onRead:function(v)\r
70  *     {\r
71  *       pin.period(1.0);\r
72  *     },\r
73  *     onPeriod:function(){\r
74  *       pin.period_ms(1);\r
75  *     },\r
76  *     onPeriod_ms:function(){\r
77  *       pin.period_us(10);\r
78  *     },\r
79  *     onPeriod_us:function(){\r
80  *       pin.pulsewidth(3);\r
81  *     },\r
82  *     onPulsewidth:function(){\r
83  *       pin.pulsewidth_ms(30);\r
84  *     },\r
85  *     onPulsewidth_ms:function(){\r
86  *       pin.pulsewidth_us(40);\r
87  *     },\r
88  *     onPulsewidth_us:function(){\r
89  *       mcu.close();\r
90  *     }\r
91  *     });\r
92  *   },\r
93  *   onClose:function(){\r
94  *   },\r
95  *   onError:function(){\r
96  *   }\r
97  * });\r
98  * @example //Generator\r
99  * var g=function*(){\r
100  * try{\r
101  *   var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
102  *   yield mcu.waitForNew();\r
103  *   var pin=new mbedJS.PwmOut(mcu,mbedJS.PinName.p21,g);\r
104  *   yield pin.waitForNew();\r
105  *   yield pin.write(0.33);\r
106  *   var v=yield pin.read();\r
107  *   yield pin.period(1.0);\r
108  *   yield pin.period_ms(1);\r
109  *   yield pin.period_us(10);\r
110  *   yield pin.pulsewidth(3);\r
111  *   yield pin.pulsewidth_ms(30);\r
112  *   yield pin.pulsewidth_us(40);\r
113  *   yield mcu.close();\r
114  * }catch(e){\r
115  *   mcu.shutdown();\r
116  * }}();\r
117  * g.next();\r
118  */\r
119 var CLASS=function PwmOut(i_mcu,i_params,i_handler)\r
120 {\r
121         try{\r
122                 var _t=this;\r
123                 _t._mcu=i_mcu;\r
124                 _t._lc=CLASS;\r
125                 if(MI.isGenerator(i_handler)){_t._gen=i_handler;}\r
126                 else if(i_handler){_t._event=i_handler}\r
127                 function cb(j)\r
128                 {\r
129                         _t._oid=j.result[0];\r
130                         if(_t._event.onNew){_t._event.onNew();}\r
131                         if(_t._gen){_t._gen.next(_t);}\r
132                         _t._lc=null;\r
133                 }\r
134                 MI.assertInt(i_params);\r
135                 return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);\r
136         }catch(e){\r
137                 throw new MI.MiMicException(e);\r
138         }\r
139 }\r
140 CLASS.prototype=\r
141 {\r
142         /** @private */\r
143         RPC_NS:"mbedJS:PwmOut",\r
144         /** @private 最後にコールしたAPIです。*/\r
145         _lc:null,\r
146         /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
147         _gen:null,\r
148         /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
149         _event:{},\r
150         /** @private リモートインスタンスのオブジェクトIDです。*/\r
151         _oid:null,\r
152         /**\r
153          * Generatorモードのときに使用する関数です。\r
154          * Generatorモードの時は、yieldと併用してnew PwmOut()の完了を待ちます。\r
155          * @name mbedJS.PwmOut#waitForNew\r
156          * @function\r
157          */\r
158         waitForNew:function PwmOut_waitForNew()\r
159         {\r
160                 try{\r
161                         if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
162                         this._lc=CLASS.waitForNew;\r
163                 }catch(e){\r
164                         throw new MI.MiMicException(e);\r
165                 }                       \r
166         },\r
167         /**\r
168          * ピンに値を出力します。\r
169          * 関数の完了時にonWriteイベントが発生します。\r
170          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
171          * @name mbedJS.PwmOut#write\r
172          * @function\r
173          * @param {float} i_value\r
174          * [0,1]の値を指定します。\r
175          * @return {int|none}\r
176          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
177          * <p>Generatorモードの時は戻り値はありません。</p>\r
178          */\r
179         write:function PwmOut_write(i_value)\r
180         {\r
181                 try{\r
182                         var _t=this;\r
183                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
184                         _t._lc=CLASS.write;\r
185                         MI.assertNumber(i_value);\r
186                         return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+Math.round(i_value*10000),\r
187                         function(j){\r
188                                 if(_t._event.onWrite){_t._event.onWrite();}\r
189                                 if(_t._gen){_t._gen.next();}\r
190                                  _t._lc=null;\r
191                         });\r
192                 }catch(e){\r
193                         throw new MI.MiMicException(e);\r
194                 }\r
195         },\r
196         /**\r
197          * ピンから値を読み込みます。\r
198          * 関数の完了時にonReadイベントが発生します。\r
199          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
200          * @name mbedJS.PwmOut#read\r
201          * @function\r
202          * @return {int|float}\r
203          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
204          * <p>Generatorモードの時はピンの値を返します。</p>\r
205          */\r
206         read:function PwmOut_read()\r
207         {\r
208                 try{\r
209                         var _t=this;\r
210                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
211                         _t._lc=CLASS.read;\r
212                         return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,\r
213                         function (j)\r
214                         {\r
215                                 var v=j.result[0]/10000;\r
216                                 if(_t._event.onRead){_t._event.onRead(v);}\r
217                                 if(_t._gen){_t._gen.next(v);}\r
218                                  _t._lc=null;\r
219                         });\r
220                 }catch(e){\r
221                         throw new MI.MiMicException(e);\r
222                 }                       \r
223         },\r
224         /**\r
225          * PWMの周期を設定します。\r
226          * 関数の完了時にonPeriodイベントが発生します。\r
227          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
228          * @name mbedJS.PwmOut#period\r
229          * @function\r
230          * @param {float} i_value\r
231          * 秒単位の周期を設定します。\r
232          * @return {int|none}\r
233          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
234          * <p>Generatorモードの時は戻り値はありません。</p>\r
235          */\r
236         period:function PwmOut_period(i_value)\r
237         {\r
238                 try{\r
239                         var _t=this;\r
240                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
241                         _t._lc=CLASS.period;\r
242                         MI.assertInt(i_value);\r
243                         return _t._mcu.rpc(_t.RPC_NS+":period_fx",_t._oid+","+Math.round(i_value*10000),\r
244                         function(j){\r
245                                 if(_t._event.onPeriod){_t._event.onPeriod();}\r
246                                 if(_t._gen){_t._gen.next();}\r
247                                  _t._lc=null;\r
248                         });\r
249                 }catch(e){\r
250                         throw new MI.MiMicException(e);\r
251                 }\r
252         },\r
253         /**\r
254          * PWMの周期を設定します。\r
255          * 関数の完了時にonPeriod_msイベントが発生します。\r
256          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
257          * @name mbedJS.PwmOut#period_ms\r
258          * @function\r
259          * @param {int} i_value\r
260          * ms単位の周期を設定します。\r
261          * @return {int|none}\r
262          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
263          * <p>Generatorモードの時は戻り値はありません。</p>\r
264          */\r
265         period_ms:function PwmOut_period_ms(i_value)\r
266         {\r
267                 try{\r
268                         var _t=this;\r
269                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
270                         _t._lc=CLASS.period_ms;\r
271                         MI.assertInt(i_value);\r
272                         return _t._mcu.rpc(_t.RPC_NS+":period_ms",_t._oid+","+Math.round(i_value),\r
273                         function(j){\r
274                                 if(_t._event.onPeriod_ms){_t._event.onPeriod_ms();}\r
275                                 if(_t._gen){_t._gen.next();}\r
276                                  _t._lc=null;\r
277                         });\r
278                 }catch(e){\r
279                         throw new MI.MiMicException(e);\r
280                 }\r
281         },\r
282         /**\r
283          * PWMの周期を設定します。\r
284          * 関数の完了時にonPeriod_usイベントが発生します。\r
285          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
286          * @name mbedJS.PwmOut#period_us\r
287          * @function\r
288          * @param {int} i_value\r
289          * 整数値を指定します。\r
290          * @return {int|none}\r
291          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
292          * <p>Generatorモードの時は戻り値はありません。</p>\r
293          */\r
294         period_us:function PwmOut_period_us(i_value)\r
295         {\r
296                 try{\r
297                         var _t=this;\r
298                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
299                         _t._lc=CLASS.period_us;\r
300                         MI.assertInt(i_value);\r
301                         return _t._mcu.rpc(_t.RPC_NS+":period_us",_t._oid+","+Math.round(i_value),\r
302                         function(j){\r
303                                 if(_t._event.onPeriod_us){_t._event.onPeriod_us();}\r
304                                 if(_t._gen){_t._gen.next();}\r
305                                  _t._lc=null;\r
306                         });\r
307                 }catch(e){\r
308                         throw new MI.MiMicException(e);\r
309                 }\r
310         },\r
311         /**\r
312          * PWMの周期を設定します。\r
313          * 関数の完了時にonPeriodイベントが発生します。\r
314          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
315          * @name mbedJS.PwmOut#pulsewidth\r
316          * @function\r
317          * @param {float} i_value\r
318          * 秒単位の周期を設定します。\r
319          * @return {int|none}\r
320          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
321          * <p>Generatorモードの時は戻り値はありません。</p>\r
322          */\r
323         pulsewidth:function PwmOut_pulsewidth(i_value)\r
324         {\r
325                 try{\r
326                         var _t=this;\r
327                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
328                         _t._lc=CLASS.pulsewidth;\r
329                         MI.assertInt(i_value);\r
330                         return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_fx",_t._oid+","+Math.round(i_value*10000),\r
331                         function(j){\r
332                                 if(_t._event.onPulsewidth){_t._event.onPulsewidth();}\r
333                                 if(_t._gen){_t._gen.next();}\r
334                                  _t._lc=null;\r
335                         });\r
336                 }catch(e){\r
337                         throw new MI.MiMicException(e);\r
338                 }\r
339         },\r
340         /**\r
341          * PWMの周期を設定します。\r
342          * 関数の完了時にonPulsewidth_msイベントが発生します。\r
343          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
344          * @name mbedJS.PwmOut#pulsewidth_ms\r
345          * @function\r
346          * @param {int} i_value\r
347          * ms単位の周期を設定します。\r
348          * @return {int}\r
349          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
350          */\r
351         pulsewidth_ms:function PwmOut_pulsewidth_ms(i_value)\r
352         {\r
353                 try{\r
354                         var _t=this;\r
355                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
356                         _t._lc=CLASS.pulsewidth_ms;\r
357                         MI.assertInt(i_value);\r
358                         return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_ms",_t._oid+","+Math.round(i_value),\r
359                         function(j){\r
360                                 if(_t._event.onPulsewidth_ms){_t._event.onPulsewidth_ms();}\r
361                                 if(_t._gen){_t._gen.next();}\r
362                                  _t._lc=null;\r
363                         });\r
364                 }catch(e){\r
365                         throw new MI.MiMicException(e);\r
366                 }\r
367         },\r
368         /**\r
369          * PWMの周期を設定します。\r
370          * 関数の完了時にonPulsewidth_usイベントが発生します。\r
371          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
372          * @name mbedJS.PwmOut#pulsewidth_us\r
373          * @function\r
374          * @param {int} i_value\r
375          * 整数値を指定します。\r
376          * @return {int}\r
377          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
378          */\r
379         pulsewidth_us:function PwmOut_pulsewidth_us(i_value)\r
380         {\r
381                 try{\r
382                         var _t=this;\r
383                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
384                         _t._lc=CLASS.pulsewidth_us;\r
385                         MI.assertInt(i_value);\r
386                         return _t._mcu.rpc(_t.RPC_NS+":pulsewidth_us",_t._oid+","+Math.round(i_value),\r
387                         function(j){\r
388                                 if(_t._event.onPulsewidth_us){_t._event.onPulsewidth_us();}\r
389                                 if(_t._gen){_t._gen.next();}\r
390                                  _t._lc=null;\r
391                         });\r
392                 }catch(e){\r
393                         throw new MI.MiMicException(e);\r
394                 }\r
395         }       \r
396 }\r
397 NS.PwmOut=CLASS;\r
398 }());