OSDN Git Service

mbed.jsの更新
[mimic/MiMicSDK.git] / misc / MiMicVM / mbed.js / mimic / mbed.PortOut.js
1 (function(){\r
2 var NS=mbedJS;\r
3 var MI=MiMicJS;\r
4 \r
5 /**\r
6  * @name mbedJS.PortOut\r
7  * PortOutクラスです。\r
8  * <a href="https://mbed.org/handbook/PortOut">mbed::PortOut</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()} onWrite -\r
34  * write関数のコールバック関数です。\r
35  * </li>\r
36  * <li>{function(v)} onRead  -\r
37  * read関数のコールバック関数です。\r
38  *      <ul>\r
39  *              <li>{int} v - 現在のピンの値です。</li>\r
40  *      </ul>\r
41  * </li>\r
42  * </ul>\r
43  * <p>\r
44  * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
45  * <p>\r
46  * @return {mbedJS.PortOut}\r
47  * @example\r
48  */\r
49 var CLASS=function PortOut(i_mcu,i_params,i_handler)\r
50 {\r
51         try{\r
52                 var _t=this;\r
53                 _t._mcu=i_mcu;\r
54                 _t._lc=CLASS;\r
55                 if(MI.isGenerator(i_handler)){_t._gen=i_handler;}\r
56                 else if(i_handler){_t._event=i_handler}\r
57                 function cb(j)\r
58                 {\r
59                         _t._oid=j.result[0];\r
60                         if(_t._event.onNew){_t._event.onNew();}\r
61                         if(_t._gen){_t._gen.next(_t);}\r
62                         _t._lc=null;\r
63                 }\r
64                 //引数の正規化\r
65                 var pr;\r
66                 if(MI.isHashArray(i_params)){\r
67                         pr=[i_params.port,i_params.mask];\r
68                 }else if(MI.isArray(i_params)){\r
69                         pr=i_params;\r
70                 }\r
71                 MI.assertInt(pr);\r
72                 return _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],cb);\r
73         }catch(e){\r
74                 throw new MI.MiMicException(e);\r
75         }\r
76 }\r
77 CLASS.prototype=\r
78 {\r
79         /** @private */\r
80         RPC_NS:"mbedJS:PortOut",\r
81         /** @private 最後にコールしたAPIです。*/\r
82         _lc:null,\r
83         /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
84         _gen:null,\r
85         /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
86         _event:{},\r
87         /** @private リモートインスタンスのオブジェクトIDです。*/\r
88         _oid:null,\r
89         /**\r
90          * @name mbedJS.PortOut#waitForNew\r
91          * @function\r
92          * Generatorモードのときに使用する関数です。\r
93          * Generatorモードの時は、yieldと併用してnew PortOut()の完了を待ちます。\r
94          */\r
95         waitForNew:function DigitalOut_waitForNew()\r
96         {\r
97                 try{\r
98                         if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
99                         this._lc=CLASS.waitForNew;\r
100                 }catch(e){\r
101                         throw new MI.MiMicException(e);\r
102                 }\r
103         },\r
104         /**\r
105          * @name mbedJS.PortOut#write\r
106          * @function\r
107          * ポートへ値を出力します。\r
108          * 関数の完了時にonWriteイベントが発生します。\r
109          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
110          * @param {int} i_value\r
111          * @return {int|none}\r
112          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
113          * <p>Generatorモードの時は戻り値はありません。</p>\r
114          */\r
115         write:function PortOut_write(i_value)\r
116         {\r
117                 try{\r
118                         var _t=this;\r
119                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
120                         _t._lc=CLASS.write;\r
121                         MI.assertInt(i_value);\r
122                         return _t._mcu.rpc(_t.RPC_NS+":write",_t._oid+","+i_value,\r
123                         function(j){\r
124                                 if(_t._event.onWrite){_t._event.onWrite();}\r
125                                 if(_t._gen){_t._gen.next();}\r
126                                  _t._lc=null;\r
127                         });\r
128                 }catch(e){\r
129                         throw new MI.MiMicException(e);\r
130                 }\r
131         },\r
132         /**\r
133          * @name mbedJS.PortOut#write\r
134          * @function\r
135          * ポートから値を読み込みます。\r
136          * 関数の完了時にonReadイベントが発生します。\r
137          * Generatorモードの時は、yieldと併用して完了を待機できます。\r
138          * @return {int|int}\r
139          * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
140          * <p>Generatorモードの時はポートの値を返します。</p>\r
141          */\r
142         read:function PortOut_read()\r
143         {\r
144                 try{\r
145                         var _t=this;\r
146                         if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
147                         _t._lc=CLASS.read;\r
148                         return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
149                         function (j)\r
150                         {\r
151                                 var v=j.result[0];\r
152                                 if(_t._event.onRead){_t._event.onRead(v);}\r
153                                 if(_t._gen){_t._gen.next(v);}\r
154                                  _t._lc=null;\r
155                         });\r
156                 }catch(e){\r
157                         throw new MI.MiMicException(e);\r
158                 }\r
159         }\r
160 }\r
161 NS.PortOut=CLASS;\r
162 }());