OSDN Git Service

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