OSDN Git Service

100,10,110等のipアドレスを正しく表示できなかった問題を修正
[mimic/MiMicSDK.git] / misc / mbedJS / mbddJS.API / mbedJS / mbed.DigitalOut.js
1 /**\r
2  * @fileOverview DigitalOutクラスを定義します。\r
3  */\r
4 (function(){\r
5 var NS=mbedJS;\r
6 var MI=MiMicJS;\r
7 \r
8 /**\r
9  * DigitalOutクラスです。\r
10  * <a href="https://mbed.org/handbook/DigitalOut">mbed::DigitalOut</a>と同等の機能を持ちます。\r
11  * @name mbedJS.DigitalOut\r
12  * @constructor\r
13  * @param {mbedJS.Mcu} i_mcu\r
14  * インスタンスをバインドするMCUオブジェクトです。\r
15  * @param {PinName|HashMap|Array} i_params\r
16  * PinName又はコンストラクタの引数を格納した連想配列、配列です。\r
17  * 複数のパラメータを指定する場合は連想配列を使用してください。\r
18  * <p>PinNameの場合は制御するPinIDを指定します。</p>\r
19  * <p>\r
20  * HashMapの場合は以下のメンバを指定できます。\r
21  * <ul>\r
22  * <li>{PinName} pin -\r
23  * ピンIDを指定します。</li>\r
24  * <li>{int} value -\r
25  * ピンの初期値を指定します。</li>\r
26  * </ul>\r
27  * </p>\r
28  * <p>配列の場合は次の順番でパラメータを指定します。\r
29  * <pre>{pin,value}</pre>\r
30  * </p>\r
31  * @param {HashMap|Generator|function} i_handler\r
32  * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
33  * <p>\r
34  * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
35  * \r
36  * <ul>\r
37  * <li>{function()} onNew -\r
38  * インスタンスが使用可能になった時に呼び出されます。\r
39  * </li>\r
40  * <li>{function()} onWrite -\r
41  * write関数のコールバック関数です。\r
42  * </li>\r
43  * <li>{function(v)} onRead  -\r
44  * read関数のコールバック関数です。\r
45  *      <ul>\r
46  *              <li>{int} v - 現在のピンの値です。</li>\r
47  *      </ul>\r
48  * </li>\r
49  * </ul>\r
50  * <p>\r
51  * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
52  * </p>\r
53  * <p>\r
54  * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
55  * </p>\r
56  * @return {mbedJS.DigitalOut}\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.DigitalOut(mcu,mbedJS.PinName.P0_22,{\r
62  *     onNew:function(){\r
63  *       pin.read();\r
64  *     },\r
65  *     onWrite:function(){\r
66  *       mcu.close();\r
67  *     },\r
68  *     onRead:function(v){\r
69  *       pin.write((v+1)%2);\r
70  *     }});\r
71  *   },\r
72  *   onClose:function(){\r
73  *   },\r
74  *   onError:function(){\r
75  *   }\r
76  * });\r
77  * @example //Generator\r
78  * var g=function*(){\r
79  * try{\r
80  *   var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
81  *   yield mcu.waitForNew();\r
82  *   var pin=new mbedJS.DigitalOut(mcu,{pin:mbedJS.PinName.P0_22,value:0},g);\r
83  *   yield pin.waitForNew();\r
84  *   var v=yield pin.read();\r
85  *   yield pin.write((v+1)%2);\r
86  *   v=yield pin.read();\r
87  *   yield pin.write((v+1)%2);\r
88  *   yield mcu.close();\r
89  * }catch(e){\r
90  *   mcu.shutdown();\r
91  * }\r
92  * }();\r
93  * g.next();\r
94  */\r
95 var CLASS=function DigitalOut(i_mcu,i_params,i_handler)\r
96 {\r
97         try{\r
98                 var _t=this;\r
99                 _t._mcu=i_mcu;\r
100                 _t._lc=CLASS;\r
101                 var cb=MI._initHandler.call(_t,i_handler);\r
102                 function rcb(j)\r
103                 {\r
104                         _t._oid=j.result[0];\r
105                         if(cb){cb();}\r
106                         if(_t._gen){_t._gen.next(_t);}\r
107                         _t._lc=null;\r
108                 }\r
109                 //パラメタ生成\r
110                 var pr;\r
111                 if(MI.isHashArray(i_params)){\r
112                         pr=[i_params.pin,i_params.value];\r
113                 }else if(MI.isArray(i_params)){\r
114                         pr=[i_params[0],null];\r
115                 }else{\r
116                         pr=[i_params,null];\r
117                 }\r
118                 MI.assertInt(pr[0]);\r
119                 if(pr[1]){\r
120                         MI.assertInt(pr[1]);\r
121                         _t._mcu.rpc(_t.RPC_NS+":_new2",pr[0]+","+pr[1],rcb);\r
122                 }else{\r
123                         _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0],rcb);\r
124                 }\r
125         }catch(e){\r
126                 throw new MI.MiMicException(e);\r
127         }\r
128 }\r
129 CLASS.prototype=\r
130 {\r
131         /** @private */\r
132         RPC_NS:"mbedJS:DigitalOut",\r
133         /** @private 最後にコールしたAPIです。*/\r
134         _lc:null,\r
135         /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
136         _gen:null,\r
137         /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
138         _event:{},\r
139         /** @private リモートインスタンスのオブジェクトIDです。*/\r
140         _oid:null,\r
141         /**\r
142          * Generatorモードのときに使用する関数です。\r
143          * Generatorモードの時は、yieldと併用してnew DigitalOut()の完了を待ちます。\r
144          * @name mbedJS.DigitalOut#waitForNew\r
145          * @function\r
146          */\r
147         waitForNew:function DigitalOut_waitForNew()\r
148         {\r
149                 try{\r
150                         if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
151                         this._lc=CLASS.waitForNew;\r
152                 }catch(e){\r
153                         throw new MI.MiMicException(e);\r
154                 }\r
155         },      \r
156         /**\r
157          * ピンに値を出力します。\r
158          * 関数の完了時にonWriteイベントが発生します。\r
159          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
160          * @name mbedJS.DigitalOut#write\r
161          * @function\r
162          * @param {int} i_value\r
163          * @return {int}\r
164          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
165          */\r
166         write:function DigitalOut_write(i_value)\r
167         {\r
168                 try{\r
169                         var _t=this;\r
170                         var cb=MI._getCb(arguments,_t._event.onWrite);\r
171                         MI._assertYield.call(_t);\r
172                         _t._lc=CLASS.write;\r
173                         MI.assertInt(i_value);\r
174                         return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,\r
175                         function(j){\r
176                                 if(cb){cb();}\r
177                                 if(_t._gen){_t._gen.next();}\r
178                                  _t._lc=null;\r
179                         });\r
180                 }catch(e){\r
181                         throw new MI.MiMicException(e);\r
182                 }\r
183         },\r
184         /**\r
185          * ピンから値を読み込みます。\r
186          * 関数の完了時にonReadイベントが発生します。\r
187          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
188          * @name mbedJS.DigitalOut#read\r
189          * @function\r
190          * @return {int}\r
191          * Callbackモードの時はRPCメソッドのインデクスを返します。\r
192          * @return {int}\r
193          * Generatorモードの時はピンの値を返します。\r
194          */\r
195         read:function DigitalOut_read()\r
196         {\r
197                 try{\r
198                         var _t=this;\r
199                         var cb=MI._getCb(arguments,_t._event.onRead);\r
200                         MI._assertYield.call(_t);\r
201                         _t._lc=CLASS.read;\r
202                         return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
203                         function (j)\r
204                         {\r
205                                 var v=j.result[0];\r
206                                 if(cb){cb(v);}\r
207                                 if(_t._gen){_t._gen.next(v);}\r
208                                  _t._lc=null;\r
209                         }\r
210                         );\r
211                 }catch(e){\r
212                         throw new MI.MiMicException(e);\r
213                 }\r
214         },\r
215         /**\r
216          * MCUに生成されているオブジェクトを破棄します。\r
217          * @name mbedJS.DigitalOut#dispose\r
218          * @function\r
219          */\r
220         dispose:function DigitalOut_dispose()\r
221         {\r
222                 return this._mcu._dispose.apply(this,arguments);\r
223         }\r
224 \r
225 }\r
226 NS.DigitalOut=CLASS;\r
227 }());