OSDN Git Service

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