OSDN Git Service

e84c346c1e25b66759ecd0f243e3ff0c51fd471f
[mimic/MiMicSDK.git] / misc / mbedJS / mbddJS.API / mbedJS / mbed.AnalogOut.js
1 /**\r
2  * @fileOverview AnalogOutクラスを定義します。\r
3  */\r
4 (function(){\r
5 var NS=mbedJS;\r
6 var MI=MiMicJS;\r
7 \r
8 /**\r
9  * AnalogOutクラスです。\r
10  * <a href="https://mbed.org/handbook/AnalogOut">mbed::AnalogOut</a>と同等の機能を持ちます。\r
11  * @name mbedJS.AnalogOut\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|function} i_handler\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()} onWrite_u16 -\r
29  * write関数のコールバック関数です。\r
30  * </li>\r
31  * <li>{function(v)} onRead  -\r
32  * read関数のコールバック関数です。\r
33  *      <ul>\r
34  *              <li>{int} v - 現在のピンの値です。</li>\r
35  *      </ul>\r
36  * </li>\r
37  * </ul>\r
38  * <p>\r
39  * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
40  * </p>\r
41  * <p>\r
42  * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
43  * </p>\r
44  * @return {mbedJS.AnalogOut}\r
45  * @example //Callback\r
46  * var mcu=new mbedJS.Mcu("192.168.128.39",\r
47  * {\r
48  *   onNew:function(){\r
49  *     var pin=new mbedJS.AnalogOut(mcu,mbedJS.PinName.p18,{\r
50  *     onNew:function(){\r
51  *       pin.write(0.5);\r
52  *     },\r
53  *     onWrite:function()\r
54  *     {\r
55  *       pin.read();\r
56  *     },\r
57  *     onRead:function(v)\r
58  *     {\r
59  *       pin.write_u16(0);\r
60  *     },\r
61  *     onWrite_u16:function()\r
62  *     {\r
63  *       mcu.close();\r
64  *     }\r
65  *     });\r
66  *   },\r
67  *   onClose:function(){\r
68  *   },\r
69  *   onError:function(){\r
70  *   }\r
71  * });\r
72  * @example //Generator\r
73  * var g=function*(){\r
74  * try{\r
75  *   var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
76  *   yield mcu.waitForNew();\r
77  *   var pin=new mbedJS.AnalogOut(mcu,mbedJS.PinName.p18,g);\r
78  *   yield pin.waitForNew();\r
79  *   v=yield pin.write(0.3);\r
80  *   var v=yield pin.read();\r
81  *   v=yield pin.write_u16(1000);\r
82  *   var v=yield pin.read();\r
83  *   yield mcu.close();\r
84  * }catch(e){\r
85  *   mcu.shutdown();\r
86  * }}();\r
87  * g.next();\r
88  */\r
89 var CLASS=function AnalogOut(i_mcu,i_params,i_handler)\r
90 {\r
91         try{\r
92                 var _t=this;\r
93                 _t._mcu=i_mcu;\r
94                 _t._lc=CLASS;\r
95                 var cb=MI._initHandler.call(_t,i_handler);\r
96                 MI.assertInt(i_params);\r
97                 _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,\r
98                         function(j)\r
99                         {\r
100                                 _t._oid=j.result[0];\r
101                                 if(cb){cb();}\r
102                                 if(_t._gen){_t._gen.next(_t);}\r
103                                 _t._lc=null;\r
104                         }               \r
105                 );\r
106         }catch(e){\r
107                 throw new MI.MiMicException(e);\r
108         }\r
109 }\r
110 CLASS.prototype=\r
111 {\r
112         /** @private */\r
113         RPC_NS:"mbedJS:AnalogOut",\r
114         /** @private 最後にコールしたAPIです。*/\r
115         _lc:null,\r
116         /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
117         _gen:null,\r
118         /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
119         _event:{},\r
120         /** @private リモートインスタンスのオブジェクトIDです。*/\r
121         _oid:null,\r
122         /**\r
123          * Generatorモードのときに使用する関数です。\r
124          * Generatorモードの時は、yieldと併用してnew AnalogOut()の完了を待ちます。\r
125          * @name mbedJS.AnalogOut#waitForNew\r
126          * @function\r
127          */\r
128         waitForNew:function AnalogOut_waitForNew()\r
129         {\r
130                 try{\r
131                         if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
132                         this._lc=CLASS.waitForNew;\r
133                 }catch(e){\r
134                         throw new MI.MiMicException(e);\r
135                 }                       \r
136         },      \r
137         /**\r
138          * ピンに値を出力します。\r
139          * 関数の完了時にonWriteイベントが発生します。\r
140          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
141          * @name mbedJS.AnalogOut#write\r
142          * @function\r
143          * @param {float} i_value\r
144          * [0,1]の範囲で値を指定します。\r
145          * @return {int}\r
146          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
147          */\r
148         write:function AnalogOut_write(i_value)\r
149         {\r
150                 try{\r
151                         var _t=this;\r
152                         var cb=MI._getCb(arguments,_t._event.onWrite);\r
153                         MI._assertYield.call(_t);\r
154                         _t._lc=CLASS.write;\r
155                         MI.assertNumber(i_value);\r
156                         return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+Math.round(i_value*10000),\r
157                                 function(j){\r
158                                         if(cb){cb();}\r
159                                         if(_t._gen){_t._gen.next();}\r
160                                          _t._lc=null;\r
161                                 }\r
162                         );\r
163                 }catch(e){\r
164                         throw new MI.MiMicException(e);\r
165                 }                       \r
166         },\r
167         /**\r
168          * ピンに値を出力します。\r
169          * 関数の完了時にonWrite_u16イベントが発生します。\r
170          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
171          * @name mbedJS.AnalogOut#write_u16\r
172          * @function\r
173          * @param {int} i_value\r
174          * [0,0xffff]の範囲の整数を指定します。\r
175          * @return {int}\r
176          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
177          */\r
178         write_u16:function AnalogOut_write_u16(i_value)\r
179         {\r
180                 try{\r
181                         var _t=this;\r
182                         var cb=MI._getCb(arguments,_t._event.onWrite_u16);\r
183                         MI._assertYield.call(_t);\r
184                         _t._lc=CLASS.write;\r
185                         MI.assertInt(i_value);\r
186                         return _t._mcu.rpc(_t.RPC_NS+":write_u16",_t._oid+","+i_value,\r
187                                 function(j){\r
188                                         if(cb){cb();}\r
189                                         if(_t._gen){_t._gen.next();}\r
190                                          _t._lc=null;\r
191                                 }\r
192                         );\r
193                 }catch(e){\r
194                         throw new MI.MiMicException(e);\r
195                 }                       \r
196         },      \r
197         /**\r
198          * ピンから値を読み込みます。\r
199          * 関数の完了時にonReadイベントが発生します。\r
200          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
201          * @name mbedJS.AnalogOut#read\r
202          * @function\r
203          * @return {int}\r
204          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
205          * @return {float}\r
206          * Generatorモードの時はピンの値を返します。\r
207          */\r
208         read:function AnalogOut_read()\r
209         {\r
210                 try{\r
211                         var _t=this;\r
212                         var cb=MI._getCb(arguments,_t._event.onRead);\r
213                         MI._assertYield.call(_t);\r
214                         _t._lc=CLASS.read;\r
215                         return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,\r
216                                 function (j)\r
217                                 {\r
218                                         var v=j.result[0]/10000;\r
219                                         if(cb){cb(v);}\r
220                                         if(_t._gen){_t._gen.next(v);}\r
221                                          _t._lc=null;\r
222                                 }\r
223                         );\r
224                 }catch(e){\r
225                         throw new MI.MiMicException(e);\r
226                 }\r
227         },\r
228         /**\r
229          * MCUに生成されているオブジェクトを破棄します。\r
230          * @name mbedJS.AnalogOut#dispose\r
231          * @function\r
232          */\r
233         dispose:function AnalogOut_dispose()\r
234         {\r
235                 return this._mcu._dispose.apply(this,arguments);\r
236         }\r
237 \r
238 }\r
239 NS.AnalogOut=CLASS;\r
240 }());