OSDN Git Service

git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@371 47198e57-cb75-475f-84c4-a814cd...
[mimic/MiMicSDK.git] / misc / mbedJS / mbddJS.API / mbedJS / mbed.PortIn.js
diff --git a/misc/mbedJS/mbddJS.API/mbedJS/mbed.PortIn.js b/misc/mbedJS/mbddJS.API/mbedJS/mbed.PortIn.js
new file mode 100644 (file)
index 0000000..8c8d61f
--- /dev/null
@@ -0,0 +1,131 @@
+(function(){\r
+var NS=mbedJS;\r
+var MI=MiMicJS;\r
+\r
+/**\r
+ * @name mbedJS.PortIn\r
+ * PortInクラスです。\r
+ * <a href="https://mbed.org/handbook/PortIn">mbed::PortIn</a>と同等の機能を持ちます。\r
+ * @constructor\r
+ * @param {mbedJS.Mcu} i_mcu\r
+ * インスタンスをバインドするMCUオブジェクトです。\r
+ * @param {HashMap|Array} i_params\r
+ * <p>\r
+ * HashNapの場合は以下のメンバを指定できます。\r
+ * <ul>\r
+ * <li>{PortName} port -\r
+ * ポート名を指定します。</li>\r
+ * <li>{uint32} mask -\r
+ * ポートマスクを指定します。</li>\r
+ * </ul>\r
+ * </p>\r
+ * <p>配列の場合は次の順番でパラメータを指定します。\r
+ * <pre>{port,mask}</pre>\r
+ * </p>\r
+ * @param {HashMap|Generator} i_event\r
+ * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * <p>\r
+ * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
+ * <ul>\r
+ * <li>{function()} onNew -\r
+ * インスタンスが使用可能になった時に呼び出されます。\r
+ * </li>\r
+ * <li>{function(v)} onRead -\r
+ * read関数のコールバック関数です。\r
+ *     <ul>\r
+ *             <li>{int} v - 現在のポートの値です。</li>\r
+ *     </ul>\r
+ * </li>\r
+ * </ul>\r
+ * <p>\r
+ * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * <p>\r
+ * @return {mbedJS.PortIn}\r
+ * @example\r
+ */\r
+var CLASS=function PortIn(i_mcu,i_params,i_handler)\r
+{\r
+       try{\r
+               var _t=this;\r
+               _t._mcu=i_mcu;\r
+               _t._lc=CLASS;\r
+               if(MI.isGenerator(i_handler)){_t._gen=i_handler;}\r
+               else if(i_handler){_t._event=i_handler}\r
+               function cb(j)\r
+               {\r
+                       _t._oid=j.result[0];\r
+                       if(_t._event.onNew){_t._event.onNew();}\r
+                       if(_t._gen){_t._gen.next(_t);}\r
+                       _t._lc=null;\r
+               }\r
+               //引数の正規化\r
+               var pr;\r
+               if(MI.isHashArray(i_params)){\r
+                       pr=[i_params.port,i_params.mask];\r
+               }else if(MI.isArray(i_params)){\r
+                       pr=i_params;\r
+               }\r
+               MI.assertInt(pr);\r
+               return _t._mcu.rpc(_t.RPC_NS+":_new1",pr[0]+","+pr[1],cb);\r
+       }catch(e){\r
+               throw new MI.MiMicException(e);\r
+       }       \r
+}\r
+CLASS.prototype=\r
+{\r
+       /** @private */\r
+       RPC_NS:"mbedJS:PortIn",\r
+       /** @private 最後にコールしたAPIです。*/\r
+       _lc:null,\r
+       /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
+       _gen:null,\r
+       /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
+       _event:{},\r
+       /** @private リモートインスタンスのオブジェクトIDです。*/\r
+       _oid:null,\r
+       /**\r
+        * @name mbedJS.PortIn#waitForNew\r
+        * @function\r
+        * Generatorモードのときに使用する関数です。\r
+        * Generatorモードの時は、yieldと併用してnew PortIn()の完了を待ちます。\r
+        */\r
+       waitForNew:function PortIn_waitForNew()\r
+       {\r
+               try{\r
+                       if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
+                       this._lc=CLASS.waitForNew;\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }\r
+       },\r
+       /**\r
+        * @name mbedJS.PortIn#read\r
+        * @function\r
+        * ピンから値を読み込みます。\r
+        * 関数の完了時にonReadイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @return {int|int}\r
+        * <p>Callbackモードの時はRPCメソッドのインデクスを返します。</p>\r
+        * <p>Generatorモードの時はポートの値を返します。</p>\r
+        */\r
+       read:function PortIn_read()\r
+       {\r
+               try{\r
+                       var _t=this;\r
+                       if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
+                       _t._lc=CLASS.read;\r
+                       return _t._mcu.rpc(_t.RPC_NS+":read",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               var v=j.result[0];\r
+                               if(_t._event.onRead){_t._event.onRead(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       });\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       }       \r
+}\r
+NS.PortIn=CLASS;\r
+}());
\ No newline at end of file