OSDN Git Service

JSAPIのSerial,I2C,Memoryクラスを追加
authornyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Thu, 3 Jul 2014 11:24:24 +0000 (11:24 +0000)
committernyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Thu, 3 Jul 2014 11:24:24 +0000 (11:24 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@380 47198e57-cb75-475f-84c4-a814cd6f29e0

misc/mbedJS/mbddJS.API/make_mbedJS.bat
misc/mbedJS/mbddJS.API/mbedJS/MiMicCore.js
misc/mbedJS/mbddJS.API/mbedJS/mbed.I2C.js [new file with mode: 0644]
misc/mbedJS/mbddJS.API/mbedJS/mbed.I2CSlave.js [new file with mode: 0644]
misc/mbedJS/mbddJS.API/mbedJS/mbed.Memory.js
misc/mbedJS/mbddJS.API/mbedJS/mbed.Serial.js [new file with mode: 0644]
misc/mbedJS/mbddJS.API/test.BusInOut.html
misc/mbedJS/mbddJS.API/test.I2C.html [new file with mode: 0644]
misc/mbedJS/mbddJS.API/test.I2CSlave.html [new file with mode: 0644]
misc/mbedJS/mbddJS.API/test.MCU.html
misc/mbedJS/mbddJS.API/test.Serial.html [new file with mode: 0644]

index 5efb937..9bf9bef 100644 (file)
@@ -18,6 +18,10 @@ copy /b ^
 +"%DIR_MBED%\mbed.SPI.js" ^\r
 +"%DIR_MBED%\mbed.SPISlave.js" ^\r
 +"%DIR_MBED%\mbed.Memory.js" ^\r
++"%DIR_MBED%\mbed.I2C.js" ^\r
++"%DIR_MBED%\mbed.I2CSlave.js" ^\r
++"%DIR_MBED%\mbed.Serial.js" ^\r
+\r
  "mbedJS.all.js"\r
 \r
 \r
index b1c82d1..9194bd7 100644 (file)
@@ -13,7 +13,7 @@ var MiMicJS={};
         * MiMicJsAPIのバージョン文字列。\r
         * @name MiMicJS#VERSION\r
         */\r
-       NS.VERSION="MiMicJsAPI/2.0.0";\r
+       NS.VERSION="MiMicJsAPI/2.0.1";\r
        /**\r
         * 配列要素、又は値がすべてInt値でない場合に例外を起こします。\r
         * @name MiMicJS.assertInt\r
@@ -52,6 +52,13 @@ var MiMicJS={};
                }\r
        };\r
        /**\r
+        * @private\r
+        */\r
+       NS.isUndefined=function(v,def){\r
+               if(arguments.length==1){return v === void 0;}\r
+               return (v === void 0)?def:v;\r
+       };\r
+       /**\r
         * 数値であるかを確認します。\r
         * @private\r
         */\r
@@ -530,7 +537,8 @@ var MiMicJS={};
                                                case '}':\r
                                                        rx+='})';\r
                                                        rxst=0;\r
-                                                       {log(rx);\r
+                                                       {\r
+//                                                             log(rx);//Debug\r
                                                                //JSONがたぶん確定\r
                                                                var j=eval(rx);\r
                                                                for(var i2=q.length-1;i2>=0;i2--){\r
@@ -598,8 +606,8 @@ var MiMicJS={};
                 */\r
                sendMethod:function callJsonRpc(i_method,i_params,i_callback)\r
                {\r
-                       var v="{\"verdion\":\"2.0\",\"method\":\""+i_method+"\",\"params\":["+i_params+"],\"id\":"+this._method_id+"}";\r
-                       log(v);\r
+                       var v="{\"jsonrpc\":\"2.0\",\"method\":\""+i_method+"\",\"params\":["+i_params+"],\"id\":"+this._method_id+"}";\r
+//                     log(v);//Debug\r
                        this._ws.send(v);\r
                        this._q.push([this._method_id,i_callback]);//キューに記録\r
                        this._method_id=(this._method_id+1)&0x0fffffff;//IDインクリメント\r
diff --git a/misc/mbedJS/mbddJS.API/mbedJS/mbed.I2C.js b/misc/mbedJS/mbddJS.API/mbedJS/mbed.I2C.js
new file mode 100644 (file)
index 0000000..31b1e8a
--- /dev/null
@@ -0,0 +1,347 @@
+/**\r
+ * @fileOverview I2Cクラスを定義します。\r
+ */\r
+(function(){\r
+var NS=mbedJS;\r
+var MI=MiMicJS;\r
+\r
+/**\r
+ * I2Cクラスです。\r
+ * <a href="https://mbed.org/handbook/I2C">mbed::I2C</a>と同等の機能を持ちます。\r
+ * @constructor\r
+ * @name mbedJS.I2C\r
+ * @param {mbedJS.Mcu} i_mcu\r
+ * インスタンスをバインドするMCUオブジェクトです。\r
+ * @param {[PinName,PinName]} i_params\r
+ * i2Cバスを構成するピンIDを指定します。sda,sclの順番です。\r
+ * @param {HashMap|Generator} i_event\r
+ * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * <p>\r
+ * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
+ * <ul>\r
+ * <li>{function()} onNew -\r
+ * インスタンスが使用可能になった時に呼び出されます。\r
+ * </li>\r
+ * <li>{function()} onFrequency -\r
+ * frequency関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * <li>{function(ret,data)} onRead -\r
+ * read関数が完了したときに呼び出されます。\r
+ * <ul>\r
+ * <li>ret {int}-は成功/失敗フラグを返します。read.1とread.2の場合で意味が異なります。\r
+ * read.1の場合、 0:ACK(成功),1:NACK(失敗)です。read.2の場合、読みだした値です。</li>\r
+ * <li>data {byte[]}-読みだしたデータの配列です。read.1の場合のみ有効です。</li>\r
+ * </ul> \r
+ * </li>\r
+ * <li>{function(ret)} onWrite -\r
+ * write関数が完了したときに呼び出されます。\r
+ * <ul>\r
+ * <li>ret {int}-成功/失敗フラグを返します。write.1とwrite.2の場合で意味が異なります。\r
+ * write.1の場合、ACK:0(成功),NACK:それ以外です。write.2の場合、ACKを受信すると1を返します。</li>\r
+ * </ul> \r
+ * </li>\r
+ * <li>{function()} onStart -\r
+ * start関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * <li>{function()} onStop -\r
+ * stop関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * </ul>\r
+ * <p>\r
+ * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * <p>\r
+ * @return {mbedJS.I2C}\r
+ * @example //Callback\r
+ * var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ * {\r
+ *   onNew:function(){\r
+ *     var pin=new mbedJS.I2C(mcu,mbedJS.PinName.A0,{\r
+ *     onNew:function(){\r
+ *       pin.read();\r
+ *     },\r
+ *     onRead:function(v)\r
+ *     {\r
+ *       pin.read_u16();\r
+ *     },\r
+ *     onRead_u16:function(v){\r
+ *       mcu.close();\r
+ *     }});\r
+ *   },\r
+ *   onClose:function(){},\r
+ *   onError:function(){}\r
+ * });\r
+ * @example //Generator\r
+ * var g=function*(){\r
+ * try{\r
+ *   var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
+ *   yield mcu.waitForNew();\r
+ *   var pin=new mbedJS.I2C(mcu,mbedJS.PinName.A0,g);\r
+ *   yield pin.waitForNew();\r
+ *   var v=yield pin.read();\r
+ *   v=yield pin.read_u16();\r
+ *   yield mcu.close();\r
+ * }catch(e){\r
+ *   mcu.shutdown();\r
+ * }}();\r
+ * g.next();\r
+ */\r
+var CLASS=function I2C(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
+               MI.assertInt(i_params);         \r
+               return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],cb);\r
+       }catch(e){\r
+               throw new MI.MiMicException(e);\r
+       }       \r
+}\r
+CLASS.prototype=\r
+{\r
+       /** @private */\r
+       RPC_NS:"mbedJS:I2C",\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
+        * Generatorモードのときに使用する関数です。\r
+        * Generatorモードの時は、yieldと併用してnew I2C()の完了を待ちます。\r
+        * @name mbedJS.I2C#waitForNew\r
+        * @function\r
+        */\r
+       waitForNew:function I2C_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
+        * Hz単位でバスの速度を指定します。\r
+        * 関数の完了時にonFrequencyイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2C#frequency\r
+        * @function\r
+        * @param {int} i_hz\r
+        * Hz単位のバス速度です。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       frequency:function I2C_frequency(i_hz)\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.frequency;\r
+                       MI.assertInt(i_hz);\r
+                       return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_hz,\r
+                       function (j)\r
+                       {\r
+                               if(_t._event.onFrequency){_t._event.onFrequency();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * 引数が3個の場合\r
+        * @name mbedJS.I2C#read.1\r
+        * @function\r
+        * @param {int} address\r
+        * 8ビットのI2CSlaveアドレスです。\r
+        * @param {int} length\r
+        * 読み出すデータの長さです。256未満の値を指定してください。\r
+        * @param {boolean} repeated\r
+        * Repeated start, true - do not send stop at end\r
+        * Optionalです。省略時はfalseです。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {HashMap}\r
+        * {ret:int,data:[byte]}\r
+        * Generatorの場合は戻り値オブジェクトを返します。\r
+        * <ul>\r
+        * <li>ret {int}- 成功フラグ 0:ACK(成功),1:NACK(失敗)</li>\r
+        * <li>data {byte[]}- 読みだしたデータ</li>\r
+        * </ul>\r
+        */\r
+       /**\r
+        * 引数が1個の場合\r
+        * @name mbedJS.I2C#read.2\r
+        * @function\r
+        * @param {int} ack\r
+        * indicates if the byte is to be acknowledged (1 = acknowledge)\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は読みだした値を返します。\r
+        */\r
+       /**\r
+        * バスから値を読み出します。\r
+        * 関数の完了時にonReadイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2C#read\r
+        * @function\r
+        * @param ...\r
+        * 詳細はmbedJS.I2C#read.Nを参照してください。\r
+        */     \r
+       read:function I2C_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
+                       function cb(j){\r
+                               var v=j.result.length>1?{ret:j.result[0],data:MI.bstr2byteArray(j.result[1])}: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
+                       if(arguments.length==1){\r
+                               MI.assertInt(arguments[0]);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid+","+arguments[0],cb);\r
+                       }else{\r
+                               var a=arguments;\r
+                               MI.assertInt([a[0],a[1]]);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+a[0]+","+a[1]+","+(a[2]?1:0),cb);\r
+                       }\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }\r
+       },\r
+       /**\r
+        * 引数が3個の場合\r
+        * @name mbedJS.I2C#write.1\r
+        * @function\r
+        * @param {int} address\r
+        * 8ビットのI2CSlaveアドレスです。\r
+        * @param {byte[]} data\r
+        * 送信するデータを格納したバイト配列です。\r
+        * @param {boolean} repeated\r
+        * Repeated start, true - do not send stop at end\r
+        * Optionalです。省略時はfalseです。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は成功/失敗フラグを返します。ACK:0(成功),NACK:それ以外です。\r
+        */\r
+       /**\r
+        * 引数が1個の場合\r
+        * @name mbedJS.I2C#write.2\r
+        * @function\r
+        * @param {int} data\r
+        * 送信データを指定します。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は成功/失敗フラグを返します。ACKを受信すると1を返します。\r
+        */     \r
+       /**\r
+        * バスに値を書き込みます。\r
+        * 関数の完了時にonWriteイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2C#write\r
+        * @function\r
+        * @param ...\r
+        * 詳細はmbedJS.I2C#write.Nを参照してください。\r
+        */     \r
+       write:function I2C_write(/*...*/)\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.write;\r
+                       function cb(j){\r
+                               var v=j.result[0];\r
+                               if(_t._event.onWrite){_t._event.onWrite(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       if(arguments.length==1){\r
+                               MI.assertInt(arguments[0]);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],cb);\r
+                       }else{\r
+                               var a=arguments;\r
+                               MI.assertInt(a[0]);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+","+a[0]+",\""+MI.byteArray2bstr(a[1])+"\","+(a[2]?1:0),cb);\r
+                       }\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * I2Cバスを開始状態にします。\r
+        * 関数の完了時にonStartイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2C#start\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       start:function I2C_start()\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.start;                     \r
+                       return _t._mcu.rpc(_t.RPC_NS+":start",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               if(_t._event.onStart){_t._event.onStart();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * I2Cバスを停止状態にします。\r
+        * 関数の完了時にonStopイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2C#stop\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       stop:function I2C_stop()\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.stop;                      \r
+                       return _t._mcu.rpc(_t.RPC_NS+":stop",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               if(_t._event.onStop){_t._event.onStop();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       }       \r
+}\r
+NS.I2C=CLASS;\r
+}());
\ No newline at end of file
diff --git a/misc/mbedJS/mbddJS.API/mbedJS/mbed.I2CSlave.js b/misc/mbedJS/mbddJS.API/mbedJS/mbed.I2CSlave.js
new file mode 100644 (file)
index 0000000..5c68a02
--- /dev/null
@@ -0,0 +1,372 @@
+/**\r
+ * @fileOverview I2CSlaveクラスを定義します。\r
+ */\r
+(function(){\r
+var NS=mbedJS;\r
+var MI=MiMicJS;\r
+\r
+/**\r
+ * I2CSlaveクラスです。\r
+ * <a href="https://mbed.org/handbook/I2CSlave">mbed::I2CSlave</a>と同等の機能を持ちます。\r
+ * @constructor\r
+ * @name mbedJS.I2CSlave\r
+ * @param {mbedJS.Mcu} i_mcu\r
+ * インスタンスをバインドするMCUオブジェクトです。\r
+ * @param {[PinName,PinName]} i_params\r
+ * i2Cバスを構成するピンIDを指定します。sda,sclの順番です。\r
+ * @param {HashMap|Generator} i_event\r
+ * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * <p>\r
+ * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
+ * <ul>\r
+ * <li>{function()} onNew -\r
+ * インスタンスが使用可能になった時に呼び出されます。\r
+ * </li>\r
+ * <li>{function()} onFrequency -\r
+ * frequency関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * <li>{function(ret,data)} onRead -\r
+ * read関数が完了したときに呼び出されます。\r
+ * <ul>\r
+ * <li>ret {int}-は成功/失敗フラグを返します。read.1とread.2の場合で意味が異なります。\r
+ * read.1の場合、 0:ACK(成功),1:NACK(失敗)です。read.2の場合、読みだした値です。</li>\r
+ * <li>data {byte[]}-読みだしたデータの配列です。read.1の場合のみ有効です。</li>\r
+ * </ul> \r
+ * </li>\r
+ * <li>{function(ret)} onWrite -\r
+ * write関数が完了したときに呼び出されます。\r
+ * <ul>\r
+ * <li>ret {int}-成功/失敗フラグを返します。write.1とwrite.2の場合で意味が異なります。\r
+ * write.1の場合、ACK:0(成功),NACK:それ以外です。write.2の場合、ACKを受信すると1を返します。</li>\r
+ * </ul> \r
+ * </li>\r
+ * <li>{function(v)} onReceive -\r
+ * receive関数が完了したときに呼び出されます。\r
+ * <li>v {int}-受信ステータス値を返します。mbedJS.I2CSlave#RxStatusの値です。</li>\r
+ * </ul> \r
+ * </li>\r
+ * <li>{function()} onStop -\r
+ * stop関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * <li>{function()} onAddress -\r
+ * address関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * </ul>\r
+ * <p>\r
+ * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * <p>\r
+ * @return {mbedJS.I2CSlave}\r
+ * @example //Callback\r
+ * var mcu=new mbedJS.Mcu("192.168.128.39",\r
+ * {\r
+ *   onNew:function(){\r
+ *     var pin=new mbedJS.I2CSlave(mcu,mbedJS.PinName.A0,{\r
+ *     onNew:function(){\r
+ *       pin.read();\r
+ *     },\r
+ *     onRead:function(v)\r
+ *     {\r
+ *       pin.read_u16();\r
+ *     },\r
+ *     onRead_u16:function(v){\r
+ *       mcu.close();\r
+ *     }});\r
+ *   },\r
+ *   onClose:function(){},\r
+ *   onError:function(){}\r
+ * });\r
+ * @example //Generator\r
+ * var g=function*(){\r
+ * try{\r
+ *   var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
+ *   yield mcu.waitForNew();\r
+ *   var pin=new mbedJS.I2CSlave(mcu,mbedJS.PinName.A0,g);\r
+ *   yield pin.waitForNew();\r
+ *   var v=yield pin.read();\r
+ *   v=yield pin.read_u16();\r
+ *   yield mcu.close();\r
+ * }catch(e){\r
+ *   mcu.shutdown();\r
+ * }}();\r
+ * g.next();\r
+ */\r
+var CLASS=function I2CSlave(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
+               MI.assertInt(i_params);         \r
+               return _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],cb);\r
+       }catch(e){\r
+               throw new MI.MiMicException(e);\r
+       }       \r
+}\r
+CLASS.prototype=\r
+{\r
+       /** @private */\r
+       RPC_NS:"mbedJS:I2CSlave",\r
+       RxStatus:{\r
+               NoData:0,ReadAddressed:1,WriteGeneral:2,WriteAddressed:3},\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
+        * Generatorモードのときに使用する関数です。\r
+        * Generatorモードの時は、yieldと併用してnew I2CSlave()の完了を待ちます。\r
+        * @name mbedJS.I2CSlave#waitForNew\r
+        * @function\r
+        */\r
+       waitForNew:function I2CSlave_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
+        * I2CSlaveのアドレスを設定します。\r
+        * 関数の完了時にonAddressイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2CSlave#address\r
+        * @function\r
+        * @param {int} i_value\r
+        * 8ビットのアドレス値です。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       address:function I2CSlave_address(i_value)\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.write;\r
+                       MI.assertInt(i_value);\r
+                       return _t._mcu.rpc(_t.RPC_NS+":address",_t._oid+","+i_value,\r
+                       function(j){\r
+                               if(_t._event.onAddress){_t._event.onAddress();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       });\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },      \r
+       /**\r
+        * Hz単位でバスの速度を指定します。\r
+        * 関数の完了時にonFrequencyイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2CSlave#frequency\r
+        * @function\r
+        * @param {int} i_hz\r
+        * Hz単位のバス速度です。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       frequency:function I2CSlave_frequency(i_hz)\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.frequency;\r
+                       MI.assertInt(i_hz);\r
+                       return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_hz,\r
+                       function (j)\r
+                       {\r
+                               if(_t._event.onFrequency){_t._event.onFrequency();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * 引数が2個の場合\r
+        * @name mbedJS.I2CSlave#read.1\r
+        * @function\r
+        * @param {int} length\r
+        * 読み出すデータの長さです。256未満の値を指定してください。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {HashMap}\r
+        * {ret:int,data:[byte]}\r
+        * Generatorの場合は戻り値オブジェクトを返します。\r
+        * <ul>\r
+        * <li>ret {int}- 成功フラグ 0:ACK(成功),1:NACK(失敗)</li>\r
+        * <li>data {byte[]}- 読みだしたデータ</li>\r
+        * </ul>\r
+        */\r
+       /**\r
+        * 引数が0個の場合\r
+        * @name mbedJS.I2CSlave#read.2\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は読みだした値を返します。\r
+        */\r
+       /**\r
+        * バスから値を読み出します。\r
+        * 関数の完了時にonReadイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2CSlave#read\r
+        * @function\r
+        * @param ...\r
+        * 詳細はmbedJS.I2CSlave#read.Nを参照してください。\r
+        */     \r
+       read:function I2CSlave_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
+                       function cb(j){\r
+                               var v=j.result.length>1?{ret:j.result[0],data:MI.bstr2byteArray(j.result[1])}: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
+                       if(arguments.length==0){\r
+                               return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid,cb);\r
+                       }else{\r
+                               MI.assertInt(arguments[0]);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+arguments[0],cb);\r
+                       }\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * I2CSlaveバスを開始状態にします。\r
+        * 関数の完了時にonReceiveイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2CSlave#receive\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は受信ステータス値を返します。mbedJS.I2CSlave#RxStatusの値です。\r
+        */\r
+       receive:function I2CSlave_receive()\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.start;                     \r
+                       return _t._mcu.rpc(_t.RPC_NS+":receive",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               var v=j.result[0];\r
+                               if(_t._event.onReceive){_t._event.onReceive(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * 引数が3個の場合\r
+        * @name mbedJS.I2CSlave#write.1\r
+        * @function\r
+        * @param {int} address\r
+        * 8ビットのI2CSlaveSlaveアドレスです。\r
+        * @param {byte[]} data\r
+        * 送信するデータを格納したバイト配列です。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は成功/失敗フラグを返します。ACK:0(成功),NACK:それ以外です。\r
+        */\r
+       /**\r
+        * 引数が1個の場合\r
+        * @name mbedJS.I2CSlave#write.2\r
+        * @function\r
+        * @param {int} data\r
+        * 送信データを指定します。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は成功/失敗フラグを返します。ACKを受信すると1を返します。\r
+        */     \r
+       /**\r
+        * バスに値を書き込みます。\r
+        * 関数の完了時にonWriteイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2CSlave#write\r
+        * @function\r
+        * @param ...\r
+        * 詳細はmbedJS.I2CSlave#write.Nを参照してください。\r
+        */     \r
+       write:function I2CSlave_write(/*...*/)\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.write;\r
+                       function cb(j){\r
+                               var v=j.result[0];\r
+                               if(_t._event.onWrite){_t._event.onWrite(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       if(!MI.isArray(arguments[0])){\r
+                               MI.assertInt(arguments[0]);\r
+                               return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],cb);\r
+                       }else{\r
+                               var a=arguments;\r
+                               return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+",\""+MI.byteArray2bstr(a[0])+"\"",cb);\r
+                       }\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * I2CSlaveを受信状態に戻します。\r
+        * 関数の完了時にonStopイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.I2CSlave#stop\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       stop:function I2CSlave_stop()\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.stop;                      \r
+                       return _t._mcu.rpc(_t.RPC_NS+":stop",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               if(_t._event.onStop){_t._event.onStop();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       }       \r
+}\r
+NS.I2CSlave=CLASS;\r
+}());
\ No newline at end of file
index 9347e4d..2b54284 100644 (file)
@@ -20,14 +20,23 @@ var MI=MiMicJS;
  * <li>{function()} onNew -\r
  * インスタンスが使用可能になった時に呼び出されます。\r
  * </li>\r
- * <li>{function(v)} onRead  -\r
- * readé\96¢æ\95°ã\81®ã\82³ã\83¼ã\83«ã\83\90ã\83\83ã\82¯é\96¢æ\95°ã\81§す。\r
+ * <li>{function(v)} onRead -\r
+ * readé\96¢æ\95°ã\81\8cå®\8cäº\86ã\81\97ã\81\9fæ\99\82ã\81«å\91¼ã\81³å\87ºã\81\95ã\82\8cã\81¾す。\r
  *     <ul>\r
- *             <li>{int} v - 現在のピンの値です。</li>\r
+ *             <li>{byte[]} v - 読みだしたバイト値を格納した配列です。</li>\r
  *     </ul>\r
  * </li>\r
- * <li>{function()} onMode -\r
- * mode関数のコールバック関数です。\r
+ * <li>{function(v)} onRead32 -\r
+ * read32関数が完了した時に呼び出されます。\r
+ *     <ul>\r
+ *             <li>{int[]} v - 読みだしたuint32値を格納した配列です。</li>\r
+ *     </ul>\r
+ * </li>\r
+ * <li>{function()} onWrite -\r
+ * write関数が完了した時に呼び出されます。\r
+ * </li>\r
+ * <li>{function()} onWrite32 -\r
+ * write32関数が完了した時に呼び出されます。\r
  * </li>\r
  * </ul>\r
  * <p>\r
@@ -104,7 +113,7 @@ CLASS.prototype=
                        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
-                       var a=[i_addr,arguments.length<2?1:i_size];\r
+                       var a=[i_addr,MI.isUndefined(i_size,1)];\r
                        MI.assertInt(a);\r
                        return _t._mcu.rpc(_t.RPC_NS+":read",a[0]+","+a[1],\r
                        function (j)\r
@@ -175,7 +184,7 @@ CLASS.prototype=
                        var _t=this;\r
                        if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}\r
                        _t._lc=CLASS.read32;\r
-                       var a=[i_addr,arguments.length<2?4:i_size];\r
+                       var a=[i_addr,MI.isUndefined(i_size,4)];\r
                        if(a[1]%4!=0){\r
                                throw new MI.MiMicException(MI.Error.NG_INVALID_ARG);\r
                        }\r
diff --git a/misc/mbedJS/mbddJS.API/mbedJS/mbed.Serial.js b/misc/mbedJS/mbddJS.API/mbedJS/mbed.Serial.js
new file mode 100644 (file)
index 0000000..ee29dba
--- /dev/null
@@ -0,0 +1,413 @@
+/**\r
+ * @fileOverview AnalogInクラスを定義します。\r
+ */\r
+(function(){\r
+var NS=mbedJS;\r
+var MI=MiMicJS;\r
+\r
+/**\r
+ * Serialクラスです。\r
+ * <a href="https://mbed.org/handbook/Serial">mbed::Serial</a>と同等の機能を持ちます。\r
+ * @constructor\r
+ * @name mbedJS.Serial\r
+ * @param {mbedJS.Mcu} i_mcu\r
+ * インスタンスをバインドするMCUオブジェクトです。\r
+ * @param {[PinName,PinName]} i_params\r
+ * UARTを構成する2本のピンを指定します。tx,rxの順で設定します。\r
+ * @param {HashMap|Generator} i_event\r
+ * 非同期イベントハンドラの連想配列、又はGeneratorです。\r
+ * <p>\r
+ * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
+ * <ul>\r
+ * <li>{function()} onNew -\r
+ * インスタンスが使用可能になった時に呼び出されます。\r
+ * </li>\r
+ * <li>{function()} onFormat -\r
+ * format関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * <li>{function(v)} onReadable -\r
+ * read関数が完了したときに呼び出されます。\r
+ *     <ul>\r
+ *             <li>{boolean} v - 読出しが可能化の真偽値です。</li>\r
+ *     </ul>\r
+ * </li>\r
+ * <li>{function(v)} onWriteable -\r
+ * write関数が完了したときに呼び出されます。\r
+ *     <ul>\r
+ *             <li>{boolean} v - 書き込みが可能化の真偽値です。</li>\r
+ *     </ul>\r
+ * </li>\r
+ * <li>{function()} onSend_break -\r
+ * send_break関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * <li>{function(v)} onPutc -\r
+ * putc関数が完了したときに呼び出されます。\r
+ *     <ul>\r
+ *             <li>{int} v - 謎の戻り値です。</li>\r
+ *     </ul>\r
+ * </li>\r
+ * <li>{function(v)} onPuts -\r
+ * puts関数が完了したときに呼び出されます。\r
+ *     <ul>\r
+ *             <li>{int} v - 謎の戻り値です。</li>\r
+ *     </ul>\r
+ * </li>\r
+ * <li>{function(v)} onGetc -\r
+ * getc関数が完了したときに呼び出されます。\r
+ *     <ul>\r
+ *             <li>{int} v - 読みだした1バイトの値です。</li>\r
+ *     </ul>\r
+ * </li>\r
+ * <li>{function(v)} onGets -\r
+ * gets関数が完了したときに呼び出されます。\r
+ *     <ul>\r
+ *             <li>{int} v - 読みだした文字列です。</li>\r
+ *     </ul>\r
+ * </li>\r
+ * <li>{function()} onBaud -\r
+ * baud関数が完了したときに呼び出されます。\r
+ * </li>\r
+ * </ul>\r
+ * <p>\r
+ * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
+ * <p>\r
+ * @return {mbedJS.Serial}\r
+ * @example //Callback\r
+ * @example //Generator\r
+ */\r
+var CLASS=function Serial(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
+               MI.assertInt(i_params);         \r
+               _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],cb);\r
+       }catch(e){\r
+               throw new MI.MiMicException(e);\r
+       }       \r
+}\r
+CLASS.prototype=\r
+{\r
+       /** @private */\r
+       RPC_NS:"mbedJS:Serial",\r
+       /**\r
+        * @namespace\r
+        * @name mbedJS.Serial#Parity\r
+        * mbedJS.Serial#format関数に指定する値の種類です。\r
+        * None,Odd,Even,Forced1,Forced0があります。\r
+        */\r
+    Parity:{\r
+       None:0,Odd:1,Even:2,Forced1:3,Forced0:4\r
+    },\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
+        * Generatorモードのときに使用する関数です。\r
+        * Generatorモードの時は、yieldと併用してnew AnalogIn()の完了を待ちます。\r
+        * @name mbedJS.Serial#waitForNew\r
+        * @function\r
+        */\r
+       waitForNew:function Serial_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
+        * フォーマットを設定します。\r
+        * 関数の完了時にonFormatイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#format\r
+        * @function\r
+        * @param {int} i_bits\r
+        * ビット数です。省略時は8です。\r
+        * @param {int} i_parity\r
+        * パリティの値です。省略時はmbedJS.Serial#Parity.Noneです。\r
+        * @param {int} i_stop_bits\r
+        * ストップビットの値です。省略時は1です。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       format:function SerialIn_format(i_bits,i_parity,i_stop_bits)\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.format;\r
+                       var p=[MI.isUndefined(i_bits,8),MI.isUndefined(i_parity,_t.Parity.None),MI.isUndefined(i_stop_bits,1)];\r
+                       MI.assertInt(p);\r
+                       return _t._mcu.rpc(_t.RPC_NS+":format",_t._oid+","+p[0]+","+p[1]+","+p[2],\r
+                       function (j)\r
+                       {\r
+                               if(_t._event.onFormat){_t._event.onFormat();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * 読出し可能かを返します。\r
+        * 関数の完了時にonReadableイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#readable\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {boolean}\r
+        * Generatorモードの時は状態値の真偽値を返します。\r
+        */\r
+       readable:function Serial_readable()\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.readable;\r
+                       return _t._mcu.rpc(_t.RPC_NS+":readable",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               var v=j.result[0];\r
+                               if(_t._event.onReadable){_t._event.onReadable(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * 書き込み可能かを返します。\r
+        * 関数の完了時にonWriteableイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#writeable\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {boolean}\r
+        * Generatorモードの時は状態値の真偽値を返します。\r
+        */\r
+       writeable:function Serial_writeable()\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.writeable;                 \r
+                       return _t._mcu.rpc(_t.RPC_NS+":writeable",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               var v=j.result[0]?true:false;\r
+                               if(_t._event.onWriteable){_t._event.onWriteable(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * ブレーク信号を送信します。\r
+        * 関数の完了時にonSend_breakイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#send_break\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       send_break:function Serial_send_break()\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.send_break;\r
+                       return _t._mcu.rpc(_t.RPC_NS+":send_break",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               if(_t._event.onSend_break){_t._event.onSend_break();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       },\r
+       /**\r
+        * 1バイトの値を出力します。\r
+        * 関数の完了時にonPutcイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#putc\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は謎の値を返します。\r
+        */\r
+       putc:function Serial_putc(i_c)\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.putc;\r
+                       MI.assertInt(i_c);\r
+                       return _t._mcu.rpc(_t.RPC_NS+":putc",_t._oid+","+i_c,\r
+                       function (j)\r
+                       {\r
+                               var v=j.result[0];\r
+                               if(_t._event.onPutc){_t._event.onPutc(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }\r
+       },\r
+       /**\r
+        * 文字列を出力します。\r
+        * 関数の完了時にonPutsイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#puts\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は謎の値を返します。\r
+        */\r
+       puts:function Serial_puts(i_s)\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.puts;\r
+                       return _t._mcu.rpc(_t.RPC_NS+":puts",_t._oid+",\""+i_s+"\"",\r
+                       function (j)\r
+                       {\r
+                               var v=j.result[0];\r
+                               if(_t._event.onPuts){_t._event.onPuts(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }\r
+       },\r
+       /**\r
+        * 1バイトを読み込みます。\r
+        * 関数の完了時にonGetcイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#getc\r
+        * @function\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {int}\r
+        * Generatorモードの時は受信した数値を返します。\r
+        */\r
+       getc:function Serial_getc()\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.getc;\r
+                       return _t._mcu.rpc(_t.RPC_NS+":getc",_t._oid,\r
+                       function (j)\r
+                       {\r
+                               var v=j.result[0];\r
+                               if(_t._event.onGetc){_t._event.onGetc(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }\r
+       },\r
+       /**\r
+        * 文字列を読み込みます。\r
+        * 関数の完了時にonGetsイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#gets\r
+        * @function\r
+        * @param {int} i_len\r
+        * 受信メモリのサイズを指定します。256未満を指定してください。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        * @return {string}\r
+        * Generatorモードの時は受信した文字列を返します。\r
+        */\r
+       gets:function Serial_gets(i_len)\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.gets;\r
+                       MI.assertInt(i_len);                    \r
+                       return _t._mcu.rpc(_t.RPC_NS+":gets",_t._oid+","+i_len,\r
+                       function (j)\r
+                       {\r
+                               var v=j.result[0];\r
+                               if(_t._event.onGets){_t._event.onGets(v);}\r
+                               if(_t._gen){_t._gen.next(v);}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }\r
+       },\r
+       /**\r
+        * ボーレイトを設定します。\r
+        * 関数の完了時にonBaudイベントが発生します。\r
+        * Generatorモードの時は、yieldと併用して完了を待機できます。\r
+        * @name mbedJS.Serial#baud\r
+        * @function\r
+        * @param {int} i_baudrate\r
+        * ボーレイトの値です。\r
+        * @return {int}\r
+        * Callbackモードの時はRPCメソッドのインデクスを返します。\r
+        */\r
+       baud:function Serial_baud(i_baudrate)\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.baud;\r
+                       MI.assertInt(i_baudrate);                       \r
+                       return _t._mcu.rpc(_t.RPC_NS+":baud",_t._oid+","+i_baudrate,\r
+                       function (j)\r
+                       {\r
+                               if(_t._event.onBaud){_t._event.onBaud();}\r
+                               if(_t._gen){_t._gen.next();}\r
+                                _t._lc=null;\r
+                       }\r
+                       );\r
+               }catch(e){\r
+                       throw new MI.MiMicException(e);\r
+               }                       \r
+       }       \r
+}\r
+NS.Serial=CLASS;\r
+}());
\ No newline at end of file
index 9d0cad3..57a5f20 100644 (file)
@@ -85,7 +85,7 @@ function sync()
        log();\r
        var g=function*(){\r
        try{\r
-               var mcu=new mbedJS.Mcu("192.168.128.39/",g);\r
+               var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
                yield mcu.waitForNew();\r
                var bus=new mbedJS.BusInOut(mcu,[mbedJS.PinName.P0_21,mbedJS.PinName.P0_22],g);\r
                yield bus.waitForNew();\r
diff --git a/misc/mbedJS/mbddJS.API/test.I2C.html b/misc/mbedJS/mbddJS.API/test.I2C.html
new file mode 100644 (file)
index 0000000..124f324
--- /dev/null
@@ -0,0 +1,145 @@
+\r
+<html>\r
+<head>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<script type="text/javascript" src="mbedJS/mbed.types.js"></script>\r
+<script type="text/javascript" src="mbedJS/MiMicCore.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Mcu.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.DigitalOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.DigitalIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.AnalogOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.AnalogIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusInOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.PortOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Portin.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.PwmOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.SPI.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.SPISlave.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Serial.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.I2C.js"></script>\r
+<script type="text/javascript">\r
+\r
+\r
+function log(v)\r
+{\r
+       if(v===undefined){\r
+               document.getElementById("console").value='';\r
+       }else{\r
+               document.getElementById("console").value+='['+(new Date())+']'+v+'\n';\r
+       }\r
+}\r
+\r
+/**ASYNCAPIのテスト*/\r
+function async()\r
+{\r
+       log();\r
+       log("ASYNC");\r
+       var st=0;\r
+       var mcu=new mbedJS.Mcu("192.168.128.39",\r
+       {\r
+               onNew:function(){\r
+                       var i2c=new mbedJS.I2C(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],{\r
+                       onNew:function(){\r
+                               log("[PASS]onNew");\r
+                               i2c.frequency(100000);\r
+                       },\r
+                       onFrequency:function()\r
+                       {\r
+                               log("[PASS]onFrequency:");\r
+                               i2c.start();\r
+                       },\r
+                       onStart:function(){\r
+                               log("[PASS]onStart:");\r
+                               st=0;\r
+                               i2c.write(1);\r
+//                             i2c.write(1);\r
+                       },\r
+                       onWrite:function(v){\r
+                               log("[PASS]onWrite:"+v);\r
+                               if(st==0){\r
+                                       i2c.write(0,[1,2,3],false);\r
+                                       st++;\r
+                               }else{\r
+                                       i2c.read(1);\r
+                                       st=0;\r
+                               }\r
+                       },\r
+                       onRead:function(v){\r
+                               if(st==0){\r
+                                       log("[PASS]onRead:"+v);\r
+                                       i2c.read(1,2,false);\r
+                                       st++;\r
+                               }else{\r
+                                       log("[PASS]onRead:"+v.ret+":"+v.data);\r
+                                       i2c.stop();\r
+                               }\r
+\r
+                       },\r
+                       onStop:function(){\r
+                               log("[PASS]onStop:");\r
+                               mcu.close();\r
+                       }\r
+                       });\r
+               },\r
+               onClose:function(){\r
+                       log("[PASS]onClose");\r
+               },\r
+               onError:function(){\r
+                       alert("Error");\r
+               }\r
+       });\r
+}\r
+\r
+/**\r
+ * \r
+ */\r
+function sync()\r
+{\r
+       log();\r
+       var g=function*(){\r
+       try{\r
+               var v;\r
+               var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
+               yield mcu.waitForNew();\r
+               var i2c=new mbedJS.I2C(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],g);\r
+               yield i2c.waitForNew();\r
+               log("[PASS]onNew");\r
+               yield i2c.frequency(100000);\r
+               log("[PASS]onFrequency:");\r
+               yield i2c.start();\r
+               log("[PASS]onStart:");\r
+               yield i2c.write(1);\r
+               v=log("[PASS]onWrite:"+v);\r
+               yield i2c.write(0,[1,2,3],false);\r
+               v=log("[PASS]onWrite2:"+v);\r
+               yield i2c.read(1);\r
+               log("[PASS]onRead:"+v);\r
+               v=yield i2c.read(1,2,false);\r
+               log("[PASS]onRead:"+v.ret+":"+v.data);\r
+               yield i2c.stop();\r
+               log("[PASS]onStop:");\r
+               yield mcu.close();\r
+       }catch(e){\r
+               mcu.shutdown();\r
+               alert(e);\r
+               throw e;\r
+       }\r
+       }();\r
+       g.next();\r
+       return;\r
+\r
+}\r
+\r
+\r
+\r
+</script>\r
+</head>\r
+<body>\r
+<h1>I2C test</h1>\r
+<hr/>\r
+<button onclick="async();">ASYNC</button>\r
+<button onclick="sync();">SYNC</button>\r
+<textarea id="console" rows="15" cols="80"></textarea>\r
+</body>
\ No newline at end of file
diff --git a/misc/mbedJS/mbddJS.API/test.I2CSlave.html b/misc/mbedJS/mbddJS.API/test.I2CSlave.html
new file mode 100644 (file)
index 0000000..660fb3a
--- /dev/null
@@ -0,0 +1,151 @@
+\r
+<html>\r
+<head>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<script type="text/javascript" src="mbedJS/mbed.types.js"></script>\r
+<script type="text/javascript" src="mbedJS/MiMicCore.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Mcu.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.DigitalOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.DigitalIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.AnalogOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.AnalogIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusInOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.PortOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Portin.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.PwmOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.SPI.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.SPISlave.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Serial.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.I2C.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.I2CSlave.js"></script>\r
+<script type="text/javascript">\r
+\r
+\r
+function log(v)\r
+{\r
+       if(v===undefined){\r
+               document.getElementById("console").value='';\r
+       }else{\r
+               document.getElementById("console").value+='['+(new Date())+']'+v+'\n';\r
+       }\r
+}\r
+\r
+/**ASYNCAPIのテスト*/\r
+function async()\r
+{\r
+       log();\r
+       log("ASYNC");\r
+       var st=0;\r
+       var mcu=new mbedJS.Mcu("192.168.128.39",\r
+       {\r
+               onNew:function(){\r
+                       var i2c=new mbedJS.I2CSlave(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],{\r
+                       onNew:function(){\r
+                               log("[PASS]onNew");\r
+                               i2c.frequency(100000);\r
+                       },\r
+                       onFrequency:function()\r
+                       {\r
+                               log("[PASS]onFrequency:");\r
+                               i2c.address(1);\r
+                       },\r
+                       onAddress:function()\r
+                       {\r
+                               log("[PASS]onAddress:");\r
+                               i2c.receive();\r
+                       },\r
+                       onReceive:function(){\r
+                               log("[PASS]onReceive:");\r
+                               st=0;\r
+                               i2c.write(1);\r
+//                             i2c.write(1);\r
+                       },\r
+                       onWrite:function(v){\r
+                               log("[PASS]onWrite:"+v);\r
+                               if(st==0){\r
+                                       i2c.write([1,2,3]);\r
+                                       st++;\r
+                               }else{\r
+                                       i2c.read();\r
+                                       st=0;\r
+                               }\r
+                       },\r
+                       onRead:function(v){\r
+                               if(st==0){\r
+                                       log("[PASS]onRead:"+v);\r
+                                       i2c.read(2,false);\r
+                                       st++;\r
+                               }else{\r
+                                       log("[PASS]onRead:"+v.ret+":"+v.data);\r
+                                       i2c.stop();\r
+                               }\r
+\r
+                       },\r
+                       onStop:function(){\r
+                               log("[PASS]onStop:");\r
+                               mcu.close();\r
+                       }\r
+                       });\r
+               },\r
+               onClose:function(){\r
+                       log("[PASS]onClose");\r
+               },\r
+               onError:function(){\r
+                       alert("Error");\r
+               }\r
+       });\r
+}\r
+\r
+/**\r
+ * \r
+ */\r
+function sync()\r
+{\r
+       log();\r
+       var g=function*(){\r
+       try{\r
+               var v;\r
+               var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
+               yield mcu.waitForNew();\r
+               var i2c=new mbedJS.I2CSlave(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],g);\r
+               yield i2c.waitForNew();\r
+               yield i2c.frequency(100000);\r
+               log("[PASS]onFrequency:");\r
+               yield i2c.address(1);\r
+               log("[PASS]onAddress:");\r
+               v=yield i2c.receive();\r
+               log("[PASS]onReceive:"+v);\r
+               v=yield i2c.write(1);\r
+               log("[PASS]onWrite:"+v);\r
+               v=yield i2c.write([1,2,3]);\r
+               log("[PASS]onWrite:"+v);\r
+               v=yield i2c.read();\r
+               log("[PASS]onRead:"+v);\r
+               v=yield i2c.read(2,false);\r
+               log("[PASS]onRead:"+v.ret+":"+v.data);\r
+               yield i2c.stop();\r
+               yield mcu.close();\r
+       }catch(e){\r
+               mcu.shutdown();\r
+               alert(e);\r
+               throw e;\r
+       }\r
+       }();\r
+       g.next();\r
+       return;\r
+\r
+}\r
+\r
+\r
+\r
+</script>\r
+</head>\r
+<body>\r
+<h1>I2CSlave test</h1>\r
+<hr/>\r
+<button onclick="async();">ASYNC</button>\r
+<button onclick="sync();">SYNC</button>\r
+<textarea id="console" rows="15" cols="80"></textarea>\r
+</body>
\ No newline at end of file
index ce1cd73..7750148 100644 (file)
@@ -47,7 +47,7 @@ function sync()
        var g=function*(){\r
 try{\r
 log(1);\r
-               var mcu=new mbedJS.Mcu("ws://192.168.128.39/rpc/",g);\r
+               var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
 log(2);\r
                yield mcu.waitForNew();\r
                yield mcu.close();\r
diff --git a/misc/mbedJS/mbddJS.API/test.Serial.html b/misc/mbedJS/mbddJS.API/test.Serial.html
new file mode 100644 (file)
index 0000000..7fca708
--- /dev/null
@@ -0,0 +1,152 @@
+\r
+<html>\r
+<head>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<script type="text/javascript" src="mbedJS/mbed.types.js"></script>\r
+<script type="text/javascript" src="mbedJS/MiMicCore.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Mcu.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.DigitalOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.DigitalIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.AnalogOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.AnalogIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusIn.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.BusInOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.PortOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Portin.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.PwmOut.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.SPI.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.SPISlave.js"></script>\r
+<script type="text/javascript" src="mbedJS/mbed.Serial.js"></script>\r
+<script type="text/javascript">\r
+\r
+\r
+function log(v)\r
+{\r
+       if(v===undefined){\r
+               document.getElementById("console").value='';\r
+       }else{\r
+               document.getElementById("console").value+='['+(new Date())+']'+v+'\n';\r
+       }\r
+}\r
+\r
+/**ASYNCAPIのテスト*/\r
+function async()\r
+{\r
+       log();\r
+       log("ASYNC");\r
+       var mcu=new mbedJS.Mcu("192.168.128.39",\r
+       {\r
+               onNew:function(){\r
+                       var uart=new mbedJS.Serial(mcu,[mbedJS.PinName.p9,mbedJS.PinName.p10],{\r
+                       onNew:function(){\r
+                               log("[PASS]onNew");\r
+                               uart.baud(115200);\r
+                       },\r
+                       onBaud:function()\r
+                       {\r
+                               log("[PASS]onBaud:");\r
+                               uart.send_break();\r
+                       },\r
+                       onSend_break:function(){\r
+                               log("[PASS]onSend_break:");\r
+                               uart.format(8,uart.Parity.None,1);\r
+                       },\r
+                       onFormat:function(){\r
+                               log("[PASS]onForma:");\r
+                               uart.readable();\r
+                       },\r
+                       onReadable:function(v){\r
+                               log("[PASS]onReadable:"+v);\r
+                               uart.writeable();\r
+                       },\r
+                       onWriteable:function(v){\r
+                               log("[PASS]onWritable:"+v);\r
+                               uart.putc(32);\r
+                       },\r
+                       onPutc:function(v){\r
+                               log("[PASS]onPutc:"+v);\r
+                               uart.getc();\r
+                       },\r
+                       onGetc:function(v){\r
+                               log("[PASS]onGetc:"+v);\r
+                               uart.puts("1234");\r
+                       },\r
+                       onPuts:function(v){\r
+                               log("[PASS]onPuts:"+v);\r
+                               uart.gets(5);\r
+                       },\r
+                       onGets:function(v){\r
+                               log("[PASS]onGets:");\r
+                               mcu.close();\r
+                       }\r
+                       \r
+                       \r
+                       });\r
+               },\r
+               onClose:function(){\r
+                       log("[PASS]onClose");\r
+               },\r
+               onError:function(){\r
+                       alert("Error");\r
+               }\r
+       });\r
+}\r
+\r
+/**\r
+ * \r
+ */\r
+function sync()\r
+{\r
+       log();\r
+       var g=function*(){\r
+       try{\r
+               var v;\r
+               var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
+               yield mcu.waitForNew();\r
+               var uart=new mbedJS.Serial(mcu,[mbedJS.PinName.p9,mbedJS.PinName.p10],g);\r
+               log(1);\r
+               yield uart.waitForNew();\r
+               log(2);\r
+               yield uart.baud(115200);\r
+               log("[PASS]onBaud:");\r
+               yield uart.send_break();\r
+               log("[PASS]onSend_break:");\r
+               yield uart.format(8,uart.Parity.None,1);\r
+               log("[PASS]onForma:");\r
+               v=yield uart.readable();\r
+               log("[PASS]onReadable:"+v);\r
+               v=yield uart.writeable();\r
+               log("[PASS]onWritable:"+v);\r
+               v=yield uart.putc(32);\r
+               log("[PASS]onPutc:"+v);\r
+               v=yield uart.getc();\r
+               log("[PASS]onGetc:"+v);\r
+               v=yield uart.puts("1234");\r
+               log("[PASS]onPuts:"+v);\r
+               v=yield uart.gets(5);\r
+               log("[PASS]onGets:"+v);\r
+               yield mcu.close();\r
+               log(5);\r
+       }catch(e){\r
+               mcu.shutdown();\r
+               alert(e);\r
+               throw e;\r
+       }\r
+       }();\r
+       g.next();\r
+       return;\r
+\r
+}\r
+\r
+\r
+\r
+</script>\r
+</head>\r
+<body>\r
+<h1>Serial test</h1>\r
+<hr/>\r
+<button onclick="async();">ASYNC</button>\r
+<button onclick="sync();">SYNC</button>\r
+<textarea id="console" rows="15" cols="80"></textarea>\r
+</body>
\ No newline at end of file