OSDN Git Service

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