OSDN Git Service

e0a28be321d3e48eca71fa862fa55c1e2961f79f
[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} 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()} 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  * @return {mbedJS.AnalogOut}\r
42  * @example //Callback\r
43  * var mcu=new mbedJS.Mcu("192.168.128.39",\r
44  * {\r
45  *   onNew:function(){\r
46  *     var pin=new mbedJS.AnalogOut(mcu,mbedJS.PinName.p18,{\r
47  *     onNew:function(){\r
48  *       pin.write(0.5);\r
49  *     },\r
50  *     onWrite:function()\r
51  *     {\r
52  *       pin.read();\r
53  *     },\r
54  *     onRead:function(v)\r
55  *     {\r
56  *       pin.write_u16(0);\r
57  *     },\r
58  *     onWrite_u16:function()\r
59  *     {\r
60  *       mcu.close();\r
61  *     }\r
62  *     });\r
63  *   },\r
64  *   onClose:function(){\r
65  *   },\r
66  *   onError:function(){\r
67  *   }\r
68  * });\r
69  * @example //Generator\r
70  * var g=function*(){\r
71  * try{\r
72  *   var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
73  *   yield mcu.waitForNew();\r
74  *   var pin=new mbedJS.AnalogOut(mcu,mbedJS.PinName.p18,g);\r
75  *   yield pin.waitForNew();\r
76  *   v=yield pin.write(0.3);\r
77  *   var v=yield pin.read();\r
78  *   v=yield pin.write_u16(1000);\r
79  *   var v=yield pin.read();\r
80  *   yield mcu.close();\r
81  * }catch(e){\r
82  *   mcu.shutdown();\r
83  * }}();\r
84  * g.next();\r
85  */\r
86 var CLASS=function AnalogOut(i_mcu,i_params,i_handler)\r
87 {\r
88         try{\r
89                 var _t=this;\r
90                 _t._mcu=i_mcu;\r
91                 _t._lc=CLASS;\r
92                 if(MI.isGenerator(i_handler)){_t._gen=i_handler;}\r
93                 else if(i_handler){_t._event=i_handler}\r
94                 function cb(j)\r
95                 {\r
96                         _t._oid=j.result[0];\r
97                         if(_t._event.onNew){_t._event.onNew();}\r
98                         if(_t._gen){_t._gen.next(_t);}\r
99                         _t._lc=null;\r
100                 }\r
101                 MI.assertInt(i_params);\r
102                 return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params,cb);\r
103         }catch(e){\r
104                 throw new MI.MiMicException(e);\r
105         }\r
106 }\r
107 CLASS.prototype=\r
108 {\r
109         /** @private */\r
110         RPC_NS:"mbedJS:AnalogOut",\r
111         /** @private 最後にコールしたAPIです。*/\r
112         _lc:null,\r
113         /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
114         _gen:null,\r
115         /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
116         _event:{},\r
117         /** @private リモートインスタンスのオブジェクトIDです。*/\r
118         _oid:null,\r
119         /**\r
120          * Generatorモードのときに使用する関数です。\r
121          * Generatorモードの時は、yieldと併用してnew AnalogOut()の完了を待ちます。\r
122          * @name mbedJS.AnalogOut#waitForNew\r
123          * @function\r
124          */\r
125         waitForNew:function AnalogOut_waitForNew()\r
126         {\r
127                 try{\r
128                         if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
129                         this._lc=CLASS.waitForNew;\r
130                 }catch(e){\r
131                         throw new MI.MiMicException(e);\r
132                 }                       \r
133         },      \r
134         /**\r
135          * ピンに値を出力します。\r
136          * 関数の完了時にonWriteイベントが発生します。\r
137          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
138          * @name mbedJS.AnalogOut#write\r
139          * @function\r
140          * @param {float} i_value\r
141          * [0,1]の範囲で値を指定します。\r
142          * @return {int}\r
143          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
144          */\r
145         write:function AnalogOut_write(i_value)\r
146         {\r
147                 try{\r
148                         var _t=this;\r
149                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
150                         _t._lc=CLASS.write;\r
151                         MI.assertNumber(i_value);\r
152                         return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+Math.round(i_value*10000),\r
153                         function(j){\r
154                                 if(_t._event.onWrite){_t._event.onWrite();}\r
155                                 if(_t._gen){_t._gen.next();}\r
156                                  _t._lc=null;\r
157                         });\r
158                 }catch(e){\r
159                         throw new MI.MiMicException(e);\r
160                 }                       \r
161         },\r
162         /**\r
163          * ピンに値を出力します。\r
164          * 関数の完了時にonWrite_u16イベントが発生します。\r
165          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
166          * @name mbedJS.AnalogOut#write_u16\r
167          * @function\r
168          * @param {int} i_value\r
169          * [0,0xffff]の範囲の整数を指定します。\r
170          * @return {int}\r
171          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
172          */\r
173         write_u16:function AnalogOut_write_u16(i_value)\r
174         {\r
175                 try{\r
176                         var _t=this;\r
177                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
178                         _t._lc=CLASS.write;\r
179                         MI.assertInt(i_value);\r
180                         return _t._mcu.rpc(_t.RPC_NS+":write_fx",_t._oid+","+i_value,\r
181                         function(j){\r
182                                 if(_t._event.onWrite_u16){_t._event.onWrite_u16();}\r
183                                 if(_t._gen){_t._gen.next();}\r
184                                  _t._lc=null;\r
185                         });\r
186                 }catch(e){\r
187                         throw new MI.MiMicException(e);\r
188                 }                       \r
189         },      \r
190         /**\r
191          * ピンから値を読み込みます。\r
192          * 関数の完了時にonReadイベントが発生します。\r
193          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
194          * @name mbedJS.AnalogOut#read\r
195          * @function\r
196          * @return {int}\r
197          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
198          * @return {float}\r
199          * Generatorモードの時はピンの値を返します。\r
200          */\r
201         read:function AnalogOut_read()\r
202         {\r
203                 try{\r
204                         var _t=this;\r
205                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
206                         _t._lc=CLASS.read;\r
207                         return _t._mcu.rpc(_t.RPC_NS+":read_fx",_t._oid,\r
208                         function (j)\r
209                         {\r
210                                 var v=j.result[0]/10000;\r
211                                 if(_t._event.onRead){_t._event.onRead(v);}\r
212                                 if(_t._gen){_t._gen.next(v);}\r
213                                  _t._lc=null;\r
214                         }\r
215                         );\r
216                 }catch(e){\r
217                         throw new MI.MiMicException(e);\r
218                 }\r
219         }\r
220 }\r
221 NS.AnalogOut=CLASS;\r
222 }());