OSDN Git Service

3fe23f53bd3298ef2d8994f63ab3ff370a6e5855
[mimic/MiMicSDK.git] / misc / mbedJS / mbddJS.API / mbedJS / mbed.BusIn.js
1 (function(){\r
2 var NS=mbedJS;\r
3 var MI=MiMicJS;\r
4 \r
5 /**\r
6  * @name mbedJS.BusIn\r
7  * BusInクラスです。\r
8  * <a href="https://mbed.org/handbook/BusIn">mbed::BusIn</a>と同等の機能を持ちます。\r
9  * @constructor\r
10  * @param {mbedJS.Mcu} i_mcu\r
11  * インスタンスをバインドするMCUオブジェクトです。\r
12  * @param {[PinName...]} i_params\r
13  * ピンIDの配列を指定します。要素数の最大値は16です。\r
14  * @param {HashMap|Generator} i_event\r
15  * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
16  * <p>\r
17  * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
18  * <ul>\r
19  * <li>{function()} onNew -\r
20  * インスタンスが使用可能になった時に呼び出されます。\r
21  * </li>\r
22  * <li>{function(v)} onRead  -\r
23  * read関数のコールバック関数です。\r
24  *      <ul>\r
25  *              <li>{int} v - 現在のピンの値です。</li>\r
26  *      </ul>\r
27  * </li>\r
28  * <li>{function()} onMode -\r
29  * mode関数のコールバック関数です。\r
30  * </li>\r
31  * </ul>\r
32  * <p>\r
33  * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
34  * <p>\r
35  * @return {mbedJS.BusIn}\r
36  * @example\r
37  */\r
38 var CLASS=function BusIn(i_mcu,i_params,i_handler)\r
39 {\r
40         try{\r
41                 var _t=this;\r
42                 _t._mcu=i_mcu;\r
43                 _t._lc=CLASS;\r
44                 if(MI.isGenerator(i_handler)){_t._gen=i_handler;}\r
45                 else if(i_handler){_t._event=i_handler}\r
46                 function cb(j)\r
47                 {\r
48                         _t._oid=j.result[0];\r
49                         if(_t._event.onNew){_t._event.onNew();}\r
50                         if(_t._gen){_t._gen.next(_t);}\r
51                         _t._lc=null;\r
52                 }\r
53                 //Pin配列の正規化\r
54                 var ap=i_params;\r
55                 if(ap.length<1 ||ap.length>16){\r
56                         throw new MI.MiMicException(MI.NG_INVALID_ARG);\r
57                 }\r
58                 //数値のみの配列かな?\r
59                 MI.assertInt(ap);\r
60                 var pins=ap[0];\r
61                 var i=1;\r
62                 for(;i<i_params.length;i++){\r
63                         pins+=","+ap[i];\r
64                 }\r
65                 for(;i<16;i++){\r
66                         pins+=","+NS.PinName.NC;\r
67                 }\r
68                 return _t._mcu.rpc(_t.RPC_NS+":_new1",pins,cb);\r
69         }catch(e){\r
70                 throw new MI.MiMicException(e);\r
71         }\r
72 }\r
73 CLASS.prototype=\r
74 {\r
75         /** @private */\r
76         RPC_NS:"mbedJS:BusIn",\r
77         /** @private 最後にコールしたAPIです。*/\r
78         _lc:null,\r
79         /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
80         _gen:null,\r
81         /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
82         _event:{},\r
83         /** @private リモートインスタンスのオブジェクトIDです。*/\r
84         _oid:null,\r
85         /**\r
86          * @name mbedJS.BusIn#waitForNew\r
87          * @function\r
88          * Generatorモードのときに使用する関数です。\r
89          * Generatorモードの時は、yieldと併用してnew BusIn()の完了を待ちます。\r
90          */\r
91         waitForNew:function BusIn_waitForNew()\r
92         {\r
93                 try{\r
94                         if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
95                         this._lc=CLASS.waitForNew;\r
96                 }catch(e){\r
97                         throw new MI.MiMicException(e);\r
98                 }\r
99         },\r
100         /**\r
101          * @name mbedJS.BusIn#read\r
102          * @function\r
103          * ピンから値を読み込みます。\r
104          * 関数の完了時にonReadイベントが発生します。\r
105          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
106          * @return {int|int}\r
107          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
108          * <p>Generatorモードの時はピンの値を返します。</p>\r
109          */\r
110         read:function BusIn_read()\r
111         {\r
112                 try{\r
113                         var _t=this;\r
114                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
115                         _t._lc=CLASS.read;\r
116                         return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
117                         function (j)\r
118                         {\r
119                                 var v=j.result[0];\r
120                                 if(_t._event.onRead){_t._event.onRead(v);}\r
121                                 if(_t._gen){_t._gen.next(v);}\r
122                                  _t._lc=null;\r
123                         }\r
124                         );\r
125                 }catch(e){\r
126                         throw new MI.MiMicException(e);\r
127                 }\r
128         },\r
129         /**\r
130          * @name mbedJS.BusIn#mode\r
131          * @function\r
132          * ピンモードを設定します。\r
133          * 関数の完了時にonModeイベントが発生します。\r
134          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
135          * @param {PinMode} i_value\r
136          * PinModeの値です。\r
137          * @return {int|none}\r
138          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
139          */\r
140         mode:function BusIn_mode(i_value)\r
141         {\r
142                 try{\r
143                         var _t=this;\r
144                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
145                         _t._lc=CLASS.mode;\r
146                         MI.assertInt(i_value);\r
147                         return _t._mcu.rpc(_t.RPC_NS+":mode",_t._oid+","+i_value,\r
148                         function (j)\r
149                         {\r
150                                 var v=j.result[0];\r
151                                 if(_t._event.onMode){_t._event.onMode(v);}\r
152                                 if(_t._gen){_t._gen.next(v);}\r
153                                  _t._lc=null;\r
154                         }\r
155                         );\r
156                 }catch(e){\r
157                         throw new MI.MiMicException(e);\r
158                 }                       \r
159         }       \r
160 }\r
161 NS.BusIn=CLASS;\r
162 }());