OSDN Git Service

バイナリ文字列(BSTR)転送に関する機能追加
[mimic/MiMicSDK.git] / misc / mbedJS / mbddJS.API / mbedJS / MiMicCore.js
index 28f5fa0..f4a8a3c 100644 (file)
@@ -122,18 +122,14 @@ var MiMicJS={};
         */\r
        NS.hexout=function hexout(i_val,i_digit)\r
        {\r
-               try{\r
-                       var dt=["","0","00","000","0000","00000","000000","0000000"];\r
-                       var s=(i_val>>>0).toString(16).toLowerCase();\r
-                       if(s.length>i_digit){\r
-                               //マイナスだともれなくエラー\r
-                               throw new MiMicException(EE.NG);\r
-                       }\r
-                       var l=i_digit-s.length;\r
-                       return dt[l]+s;\r
-               }catch(e){\r
-                       throw new MiMicException(e);\r
+               var dt=["","0","00","000","0000","00000","000000","0000000"];\r
+               var s=(i_val>>>0).toString(16).toLowerCase();\r
+               if(s.length>i_digit){\r
+                       //マイナスだともれなくエラー\r
+                       throw new NS.MiMicException(EE.NG);\r
                }\r
+               var l=i_digit-s.length;\r
+               return dt[l]+s;\r
        };\r
        /**\r
         * @private\r
@@ -146,6 +142,84 @@ var MiMicJS={};
                return s;\r
        };\r
        /**\r
+        * @private\r
+        * 32bit値のエンディアンを交換します。\r
+        * @param v\r
+        * 交換する値\r
+        * @return\r
+        * 交換後の値\r
+        */\r
+       NS.bswap32=function bswap32(v)\r
+       {\r
+               return ((v<<24)&0xff000000)|((v<<16)&0xff0000)|((v>>16)&0xff00)|((v>>24)&0xff);\r
+       };\r
+       /**\r
+        * @private\r
+        * バイナリ文字列をバイト値として配列に変換します。\r
+        * @param v\r
+        * 数値配列\r
+        */\r
+       NS.bstr2byteArray=function bstr2byteArray(v)\r
+       {\r
+               var r=new Array();\r
+               if(v.length%2!=0){\r
+                       throw new NS.MiMicException();                  \r
+               }\r
+               for(var i=0;i<v.length;i+=2){\r
+                       r.push(parseInt(v.substr(i,2),16));\r
+               }\r
+               return r;\r
+       };\r
+       /**\r
+        * @private\r
+        * バイナリ文字列を32bitUInt数値配列に変換します。\r
+        * Uint値はLittleEndianとして解釈します。\r
+        * @param {int[]} v\r
+        * 数値配列\r
+        */\r
+       NS.bstr2uintArray=function bstr2uintArray(v)\r
+       {\r
+               var r=new Array();\r
+               if(v.length%8!=0){\r
+                       throw new NS.MiMicException();                  \r
+               }\r
+               for(var i=0;i<v.length;i+=8){\r
+                       r.push(NS.bswap32(parseInt(v.substr(i,8),16)));\r
+               }\r
+               return r;\r
+       };\r
+       /**\r
+        * ByteArrayをBinarayStringに変換します。\r
+        * @param v\r
+        * @return {String}\r
+        */\r
+       NS.byteArray2bstr=function byteArray2bstr(v)\r
+       {\r
+               var s=NS.isArray(v)?v:[v];\r
+               var r="";\r
+               for(var i=0;i<s.length;i++){\r
+                       r+=NS.hexout(s[i],2,16);\r
+               }\r
+               return r;\r
+       };\r
+       /**\r
+        * UInt32ArrayをBinarayStringに変換します。\r
+        * 出力はLittleEndianの配列です。\r
+        * @param v\r
+        * UInt32の配列\r
+        * @return {String}\r
+        */     \r
+       NS.uintArray2bstr=function uintArray2bstr(v)\r
+       {\r
+               var s=NS.isArray(v)?v:[v];\r
+               var r="";\r
+               for(var i=0;i<s.length;i++){\r
+                       r+=NS.hexout(NS.bswap32(s[i]),8,16);\r
+               }\r
+               return r;\r
+       };\r
+       \r
+       /**\r
         * 連想配列の内容をルートオブジェクト直下に展開します。\r
         * この関数は名前空間を汚染します。十分に注意して使用してください。\r
         * @name MiMicJS.using\r
@@ -456,7 +530,7 @@ var MiMicJS={};
                                                case '}':\r
                                                        rx+='})';\r
                                                        rxst=0;\r
-                                                       {\r
+                                                       {log(rx);\r
                                                                //JSONがたぶん確定\r
                                                                var j=eval(rx);\r
                                                                for(var i2=q.length-1;i2>=0;i2--){\r
@@ -524,7 +598,9 @@ var MiMicJS={};
                 */\r
                sendMethod:function callJsonRpc(i_method,i_params,i_callback)\r
                {\r
-                       this._ws.send("{\"verdion\":\"2.0\",\"method\":\""+i_method+"\",\"params\":["+i_params+"],\"id\":"+this._method_id+"}");\r
+                       var v="{\"verdion\":\"2.0\",\"method\":\""+i_method+"\",\"params\":["+i_params+"],\"id\":"+this._method_id+"}";\r
+                       log(v);\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
                        return this._method_id;\r