OSDN Git Service

setup.api 1.3に対応
authornyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Sun, 9 Jun 2013 13:09:09 +0000 (13:09 +0000)
committernyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Sun, 9 Jun 2013 13:09:09 +0000 (13:09 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@256 47198e57-cb75-475f-84c4-a814cd6f29e0

misc/html.mbed/setup.html

index e25a570..e83612b 100644 (file)
@@ -9,43 +9,51 @@
                width:95%;\r
                height:95%;\r
        }\r
-       .table,p{\r
+       button{\r
+               font-weight:bold;\r
+               text-align:center;\r
+               font-size:12px;\r
+               padding:0px;\r
+               width:60px;height:40px;\r
+       }\r
+       .exp{\r
+               font-size:9px;\r
+       }\r
+       .table1,p{\r
                width:480px;\r
        }\r
-       .table td\r
+       .table1 tr\r
        {\r
-               margin:2px 2px 2px 2px;\r
-               padding:2px 2px 2px 2px;\r
-       }\r
-       .text_row, .input_row{\r
                height:25px;\r
                background-color:#4169E1;\r
                color:white;\r
                border:solid 1px #aaaaaa;\r
                font-weight:bold;\r
        }\r
-       .td1{\r
-               font-weight:bold;\r
-               font-size:14px;\r
+       .table1 td\r
+       {\r
+               margin:2px 2px 2px 2px;\r
+               padding:2px 2px 2px 2px;\r
+               font-size:12px;\r
+       }\r
+       .table1 .col1{\r
                width:120px;\r
        }\r
-       .td2{\r
+       .table1 p{\r
                font-weight:normal;\r
-               font-size:12px;\r
+               width:100%;\r
        }\r
-       .input_row input{\r
-               width:200px;\r
+       input,select\r
+       {\r
                border:solid 1px #aaaaaa;\r
        }\r
-       button{\r
-               font-weight:bold;\r
-               text-align:center;\r
-               font-size:12px;\r
-               padding:0px;\r
-               width:60px;height:40px;\r
+       .table1 input,select\r
+       {\r
+               width:200px;\r
        }\r
-       p{\r
-               font-size:9px;\r
+       .table2 input\r
+       {\r
+               width:100px;\r
        }\r
 </style>\r
 <script type="text/javascript">\r
@@ -71,19 +79,11 @@ function str2HexArray(i_str,delim,len,digit)
        throw "str2HexArray failed.";\r
 }\r
 \r
-function int2hex2(val)\r
-{\r
-       var r=val.toString(16);\r
-       if(r.length<2){\r
-               r="0"+r;\r
-       }\r
-       return r;\r
-}\r
+function int2hex(v,d){var r=v.toString(16);while(r.length<d){r="0"+r;}return r;}\r
+function int2hex2(v){return int2hex(v,2);}\r
 function arrayToHex(ar)\r
 {\r
-       if(ar==null){\r
-               return null;\r
-       }\r
+       if(ar==null){return null;}\r
        var ret="";\r
        for(var i=0;i<ar.length;i++){\r
                ret+=int2hex2(ar[i]);\r
@@ -94,7 +94,6 @@ function int2str(val){return val.toString(10);}
 function int2IpAddr(v){return int2str((v>>24)&0xff)+"."+int2str((v>>16)&0xff)+"."+int2str((v>>8)&0xff)+"."+int2str((v>>0)&0xff);}\r
 function int2MacAddr(v1,v2){return int2hex2((v1>>24)&0xff)+":"+int2hex2((v1>>16)&0xff)+":"+int2hex2((v1>>8)&0xff)+":"+int2hex2((v1>>0)&0xff)+":"+int2hex2((v2>>24)&0xff)+":"+int2hex2((v2>>16)&0xff);}\r
 \r
-\r
 var Ui=new Object();\r
 Ui.IpAddrInput=function(id)\r
 {\r
@@ -102,17 +101,8 @@ Ui.IpAddrInput=function(id)
        _t._tags={\r
                input:getElem(id)\r
        };\r
-       _t.events={\r
-               onchange:null\r
-       };\r
-       _t._tags.input.onChange=function()\r
-       {\r
-               if(_t.events.onchange!=null){\r
-                       _t.events.onchange();\r
-               }\r
-       }\r
        _t.getIpAddr=function(){\r
-               return str2HexArray(_t._tags.input.value,".",4,10);\r
+                       return str2HexArray(_t._tags.input.value,".",4,10);\r
        }\r
        _t.getText=function(){\r
                return _t._tags.input.value;\r
@@ -122,176 +112,194 @@ Ui.IpAddrInput=function(id)
                _t._tags.input.value=int2IpAddr(v1);\r
        }\r
 }\r
-\r
-Ui.MacAddr=function(id)\r
+Ui.IpSetting=function(id)\r
 {\r
-       this._tags={\r
-               input:getElem(id)\r
+       var _t=this;\r
+       _t._tags={\r
+               mode:getElem(id+"_mode"),\r
+               div:getElem(id+"_div")\r
        };\r
-       this.events={\r
+       _t.events={\r
                onchange:null\r
        };\r
-       var _t=this;\r
-       this._tags.input.onChange=function()\r
+       _t.addr=new Ui.IpAddrInput(id+"_addr");\r
+       _t.mask=new Ui.IpAddrInput(id+"_mask");\r
+       _t.gw=new Ui.IpAddrInput(id+"_defgw");\r
+       _t._tags.mode.addEventListener("change",function()\r
        {\r
+               _t._tags.div.style.visibility=(_t._tags.mode.selectedIndex==0)?"visible":"hidden";\r
                if(_t.events.onchange!=null){\r
-                       _t.events.onchange();\r
+                       _t.events.onchange(_t._tags.mode.selectedIndex);\r
+               }\r
+       });\r
+       _t.setValue=function(v)\r
+       {\r
+               _t._tags.mode.selectedIndex=(v.flags & 0x03);\r
+               _t._tags.div.style.visibility=(_t._tags.mode.selectedIndex==0)?"visible":"hidden";\r
+               _t.addr.setIpValue(v.ip);\r
+               _t.mask.setIpValue(v.mask);\r
+               _t.gw.setIpValue(v.droute);\r
+       };\r
+       _t.getValue=function()\r
+       {\r
+               var ret={};\r
+               var err;\r
+               try{\r
+                       err="IP Mode";\r
+                       ret.flag=_t._tags.mode.selectedIndex;\r
+                       err="IP Address";\r
+                       ret.addr=_t.addr.getIpAddr();\r
+                       err="IP Mask";\r
+                       ret.mask=_t.mask.getIpAddr();\r
+                       err="IP Gateway";\r
+                       ret.gw=_t.gw.getIpAddr();\r
+                       return ret;\r
+               }catch(e){\r
+                       throw "Invalid value:"+err;\r
                }\r
-       }       \r
+       }\r
 }\r
-Ui.MacAddr.prototype=\r
+Ui.MacAddr=function(id)\r
 {\r
-       events:null,\r
-       _tags:null,\r
-       getMacAddr:function(){\r
-               return str2HexArray(this._tags.input.value,":",6,16);\r
-       },\r
-       getText:function()\r
+       var _t=this;\r
+       _t._tags={\r
+               input:getElem(id)\r
+       };\r
+       _t.getMacAddr=function()\r
        {\r
-               return this._tags.input.value;\r
-       },\r
-       setMacValue:function(v1,v2)\r
+               try{\r
+                       return str2HexArray(_t._tags.input.value,":",6,16);\r
+               }catch(e){\r
+                       throw "Invalid MAC address '"+_t._tags.input.value+"'";\r
+               }\r
+       }\r
+       _t.setMacValue=function(v1,v2)\r
        {\r
-               this._tags.input.value=int2MacAddr(v1,v2);\r
+               _t._tags.input.value=int2MacAddr(v1,v2);\r
        }\r
 }\r
-\r
-Ui.AccessMode=function(id)\r
+Ui.HostName=function(id)\r
 {\r
-       this._tags={\r
-               select:getElem(id)\r
-       };\r
-       this.events={\r
-               onchange:null\r
-       };\r
        var _t=this;\r
-       this._tags.select.onChange=function()\r
+       _t._tags={\r
+               input:getElem(id)\r
+       };\r
+       _t.getValue=function()\r
        {\r
-               if(_t.events.onchange!=null){\r
-                       _t.events.onchange();\r
+               var r=_t._tags.input.value;\r
+               if(r.length<1 ||r.length>31 || r.match(/[^(a-z0-9_)]/i)){\r
+                       throw "Invalid Host name."\r
                }\r
-       }       \r
+               return r;\r
+       },\r
+       _t.setValue=function(v1)\r
+       {\r
+               _t._tags.input.value=v1;\r
+       }\r
 }\r
-Ui.AccessMode.prototype=\r
+Ui.Services=function(id)\r
 {\r
-       events:null,\r
-       _tags:null,\r
-       getMode:function(){\r
-               return this._tags.select.selectedIndex ;\r
-       },\r
-       setValue:function(v1)\r
+       var _t=this;\r
+       _t._tags={\r
+               http_port:getElem(id+"_http_port"),\r
+               mdns:getElem(id+"_mdns_sw")\r
+       };\r
+       _t.getValue=function()\r
        {\r
-               this._tags.select.selectedIndex =v1;\r
+               var r={\r
+                       port:parseInt(_t._tags.http_port.value),\r
+                       flag:_t._tags.mdns.selectedIndex&0x01};\r
+               if(isNaN(r.port) || r.port<=0){\r
+                       throw "Invalid port number";\r
+               }\r
+               return r;\r
+       }\r
+       _t.init=function(cfg)\r
+       {\r
+               _t._tags.http_port.value=cfg.http_port;\r
+               _t._tags.mdns.selectedIndex=(cfg.flags&0x01)!=0?1:0;\r
        }\r
 }\r
 \r
 \r
-\r
-Ui.UpdateButton=function(id)\r
+Ui.Cmd=function(id)\r
 {\r
-       this._tags={button:getElem(id)};\r
-       this.events={onclick:null}\r
        var _t=this;\r
-       this._tags.button.onclick=function()\r
+       _t._tags={\r
+               update:getElem(id+"_update"),\r
+               cancel:getElem(id+"_cancel")\r
+       };\r
+       _t.events={onupdate:null}\r
+       _t._tags.update.onclick=function()\r
        {\r
-               if(_t.events.onclick!=null){\r
-                       _t.events.onclick();\r
+               if(_t.events.onupdate!=null){\r
+                       _t.events.onupdate();\r
                }               \r
        }\r
-       this._tags.button.disabled=false;\r
-}\r
-Ui.UpdateButton.prototype=\r
-{\r
-       events:null,_tags:null,\r
-       disable:function(){this._tags.button.disabled=true;}\r
-}\r
-Ui.CancelButton=function(id)\r
-{\r
-       this._tags={button:getElem(id)};\r
-       this._tags.button.onclick=function()\r
+       _t._tags.cancel.onclick=function()\r
        {\r
                if(window.confirm('Do you want to cancel?')){\r
                        document.location="./index.html";\r
                }\r
        }\r
+       _t._tags.update.disabled=false;\r
+       _t.disable=function(){_t._tags.update.disabled=true;}\r
 }\r
 \r
 \r
-\r
 function Application()\r
 {\r
-       var SETUP_API="/setup/setup.api"; \r
+       var SETUP_API="http://192.168.0.39/setup/setup.api"; \r
        var ui={\r
-               macaddr:new Ui.MacAddr("macaddrinput"),\r
-               cancel:new Ui.CancelButton("cancel"),\r
-               update:new Ui.UpdateButton("updatebtn"),\r
-               ipaddr:new Ui.IpAddrInput("ipinput"),\r
-               subnetmask:new Ui.IpAddrInput("subnetinput"),\r
-               dgateway:new Ui.IpAddrInput("dginput"),\r
-               mvm_ac:new Ui.AccessMode("mvmselect"),\r
-               setup_ac:new Ui.AccessMode("setupselect")\r
+               macaddr:new Ui.MacAddr("in_emac"),\r
+               cmd:new Ui.Cmd("cmd"),\r
+               ipset:new Ui.IpSetting("in_ip"),\r
+               srv:new Ui.Services("srv"),\r
+               hostname:new Ui.HostName("in_host")\r
        }\r
-       ui.update.events.onclick=function(){\r
+       ui.cmd.events.onupdate=function(){\r
                //値チェック\r
-               try{\r
-                       var sq=0;\r
-                       var mac=ui.macaddr.getMacAddr();\r
-                       sq=1;\r
-                       var ip=ui.ipaddr.getIpAddr();\r
-                       sq=2;\r
-                       var subnet=ui.subnetmask.getIpAddr();\r
-                       sq=3;\r
-                       var dgate=ui.dgateway.getIpAddr();\r
-                       sq=4;\r
-                       var pm=arrayToHex(mac)+"ffff"\r
-                               +arrayToHex(ip)\r
-                               +arrayToHex(subnet)\r
-                               +arrayToHex(dgate)\r
-                               +"00500000"\r
-                               +int2hex2(ui.mvm_ac.getMode())+int2hex2(ui.setup_ac.getMode())+"ffff";\r
-                       sq=5;\r
-                       //LPCXPressoへ送信\r
-                       var ret=eval("("+slib.xhr(SETUP_API+"?c=update&p="+pm).responseText+")");\r
-                       sq=6;\r
+       try{\r
+               var mac=ui.macaddr.getMacAddr();\r
+               var host=ui.hostname.getValue();\r
+               var ipv4=ui.ipset.getValue();\r
+               var srv=ui.srv.getValue();\r
+               var pm=arrayToHex(mac)+"ffff"\r
+                       +int2hex(ipv4.flag,8)+arrayToHex(ipv4.addr)+arrayToHex(ipv4.mask)+arrayToHex(ipv4.gw)\r
+                       +int2hex(srv.flag,8)+int2hex(srv.port,4)+"0000";\r
+               //LPCXPressoへ送信\r
+               var ret=eval("("+slib.xhr(SETUP_API+"?c=update&p="+pm+"&host="+host).responseText+")");\r
                        if(ret.result!=0x0){\r
-                               alert("Configuration update is failed. code=0x"+ret.result);\r
+                               throw "Configuration update is failed. code=0x"+ret.result;\r
                        }else{\r
-                               alert("Configuration is changed.\n Restart the MiMicRemoteMCU to enable the setting.");\r
-                       }\r
-               }catch(e){\r
-                       switch(sq){\r
-                       case 0: alert("Invalid MAC address '"+ui.macaddr.getText()+"'");break;\r
-                       case 1: alert("Invalid IP address '"+ui.ipaddr.getText()+"'");break;\r
-                       case 2: alert("Invalid subnet mask '"+ui.subnetmask.getText()+"'");break;\r
-                       case 3: alert("Invalid default gateway'"+ui.dgateway.getText()+"'");break;\r
-                       case 6: alert("MiMic configuration process failed at XHR.");break;\r
-                       default:\r
-                               alert("MiMic configuration process failed by '"+e.toString()+"'.");break;\r
+                               throw "Configuration is changed.\n Restart the MiMicRemoteMCU to enable the setting.";\r
                        }\r
-               }\r
-               \r
+       }catch(e){\r
+               alert(e);\r
+       }\r
+\r
        }\r
        try{\r
                function setInnerHTML(n,v){getElem(n).innerHTML=v;}\r
                var cfg=eval("("+slib.xhr(SETUP_API+"?c=get").responseText+")");\r
-               setInnerHTML("td_cur_version",cfg.application);\r
-               setInnerHTML("td_cur_lan",cfg.info.landev);\r
-               setInnerHTML("td_cur_cdr",cfg.info.coredbg);\r
-               setInnerHTML("td_cur_mac",int2MacAddr(cfg.info.mac00010203,cfg.info.mac0405xxxx));\r
-               setInnerHTML("td_cur_ip",int2IpAddr(cfg.info.ip));\r
-               setInnerHTML("td_cur_mask",int2IpAddr(cfg.info.mask));\r
-               setInnerHTML("td_cur_droute",int2IpAddr(cfg.info.droute));\r
-               \r
-               ui.macaddr.setMacValue(cfg.mac00010203,cfg.mac0405xxxx);\r
-               ui.ipaddr.setIpValue(cfg.ip);\r
-               ui.subnetmask.setIpValue(cfg.mask);\r
-               ui.dgateway.setIpValue(cfg.droute);\r
-               ui.mvm_ac.setValue((cfg.access>>24)&0xff);\r
-               ui.setup_ac.setValue((cfg.access>>16)&0xff);\r
+               setInnerHTML("cur_version",cfg.application);\r
+               setInnerHTML("cur_lan",cfg.landev);\r
+               setInnerHTML("cur_host",cfg.cur.host);\r
+               setInnerHTML("cur_mac",int2MacAddr(cfg.cur.mac00010203,cfg.cur.mac0405xxxx));\r
+               setInnerHTML("cur_ip",int2IpAddr(cfg.cur.ipv4.ip));\r
+               setInnerHTML("cur_mask",int2IpAddr(cfg.cur.ipv4.mask));\r
+               setInnerHTML("cur_droute",int2IpAddr(cfg.cur.ipv4.droute));\r
+               setInnerHTML("cur_service",\r
+                       "Http Port="+cfg.cur.services.http_port+","+\r
+                       "mDNS="+((cfg.cur.services.flags&0x01)?"Enable":"Disable"));\r
+               ui.macaddr.setMacValue(cfg.cfg.mac00010203,cfg.cfg.mac0405xxxx);\r
+               ui.ipset.setValue(cfg.cfg.ipv4);\r
+               ui.hostname.setValue(cfg.cfg.host);\r
+               ui.srv.init(cfg.cfg.services);\r
        }catch(e){\r
                ui.update.disable();\r
                alert("MiMic configurator failed initialization.'"+e.toString()+"'");\r
-       }       \r
+       }\r
 }\r
 \r
 \r
@@ -304,39 +312,57 @@ function init()
 </script>\r
 </head>\r
 <body onload="init();">\r
-<h1>MiMic RemoteMCU on-chip configuration </h1>\r
+<h1>MiMic RemoteMCU configuration </h1>\r
 <hr/>\r
-\r
        <h2>Current configuration</h2>\r
-       <table class="table">\r
-               <tr class="text_row" ><td class="td1">Version</td><td class="td2" id="td_cur_version"></td></tr>\r
-               <tr class="text_row" ><td class="td1">LAN PHY</td><td class="td2" id="td_cur_lan"></td></tr>\r
-               <tr class="text_row" ><td class="td1">CDR type</td><td class="td2" id="td_cur_cdr"></td></tr>\r
-               <tr class="text_row" ><td class="td1">MAC address</td><td class="td2" id="td_cur_mac"></td></tr>\r
-               <tr class="text_row" ><td class="td1">IP address</td><td class="td2" id="td_cur_ip"></td></tr>\r
-               <tr class="text_row" ><td class="td1">Net Mask</td><td class="td2" id="td_cur_mask"></td></tr>\r
-               <tr class="text_row" ><td class="td1">Default gateway</td><td class="td2" id="td_cur_droute"></td></tr>\r
+       <table class="table1 ">\r
+               <colgroup><col span="1" class="col1" /></colgroup>\r
+               <colgroup><col span="2" class="col2" /></colgroup>\r
+               <tr><td>Version</td><td><p id="cur_version"></p></td></tr>\r
+               <tr><td>LAN PHY</td><td><p id="cur_lan"</p></td></tr>\r
+               <tr><td>MAC Address</td><td><p id="cur_mac"></p></td></tr>\r
+               <tr><td>Host Name</td><td><p id="cur_host"></p></td></tr>\r
+               <tr><td>IP Address</td><td><p id="cur_ip"></p></td></tr>\r
+               <tr><td>Net Mask</td><td><p id="cur_mask"></p></td></tr>\r
+               <tr><td>Default Gateway</td><td><p id="cur_droute"></p></td></tr>\r
+               <tr><td>Services</td><td><p id="cur_service"></p></td></tr>\r
        </table>\r
-       <p>\r
+       <p class="exp">\r
 If local setting file available, current information might be different with onchip-setting. To fully enable on-chip setting, please remove the setting file "/mimic.cfg" in mbed  local file system or SDcard file system.\r
        </p>\r
+       <h2>OnChip configuration</h2>\r
        \r
-       <h2>Ethernet</h2>\r
-       <table class="table">\r
-               <tr class="input_row"><td class="td1">MAC address</td><td><input id="macaddrinput" type="text"/></td></tr>\r
-               <tr class="input_row"><td class="td1">IP address</td><td><input id="ipinput" type="text"/></td></tr>\r
-               <tr class="input_row"><td class="td1">Subnet mask</td><td><input id="subnetinput" type="text"/></td></tr>\r
-               <tr class="input_row"><td class="td1">Default gateway</td><td><input id="dginput" type="text"/></td></tr>\r
+       <h3>Ethernet</h3>\r
+       <table class="table1">\r
+               <colgroup><col span="1" class="col1" /></colgroup>\r
+               <colgroup><col span="2" class="col2" /></colgroup>\r
+               <tr><td>MAC Address</td><td><input id="in_emac" type="text"/></td></tr>\r
+               <tr><td>Host Name</td><td><input id="in_host" type="text"/></td></tr>\r
+               <tr>\r
+                       <td>IP Address</td>\r
+                       <td>\r
+                               <div><select id="in_ip_mode"><option>Manual</option><option>DHCP</option><option>AutoIP</option><option>AutoIP+DHCP</option></select></div>\r
+                               <div id="in_ip_div">\r
+                                       <table class="table2">\r
+                                               <tr><td>Address</td><td><input id="in_ip_addr" type="text"/></td></tr>\r
+                                               <tr><td>Mask</td><td><input id="in_ip_mask" type="text"/></td></tr>\r
+                                               <tr><td>Gateway</td><td><input id="in_ip_defgw" type="text"/></td></tr>\r
+                                       </table>\r
+                               </div>\r
+                       </td>\r
+               </tr>\r
        </table>\r
-       <h2>Security(unsupported)</h2>\r
-       <table class="table">\r
-               <tr class="input_row"><td class="td1">setup.api</td><td><select id="setupselect" style="visibility:hidden"><option value="0">Subnet only</option><option value="1">All</option></select></div>\r
-               <tr class="input_row"><td class="td1">mvm.api</td><td><select id="mvmselect" style="visibility:hidden"><option value="0">Subnet only</option><option value="1">All</option></select></div>\r
+       <h3>Service</h3>\r
+       <table class="table1">\r
+               <colgroup><col span="1" class="col1" /></colgroup>\r
+               <colgroup><col span="2" class="col2" /></colgroup>\r
+               <tr><td>HTTP Port</td><td><input id="srv_http_port" type="text"/></td></tr>\r
+               <tr><td>mDNS</td><td><select id="srv_mdns_sw"><option>Disable</option><option>Enable</option></select></td></tr>\r
        </table>\r
        <br/>\r
        <br/>\r
-       <button id="updatebtn">Update</button>\r
-       <button id="cancel">Cancel</button>\r
+       <button id="cmd_update">Update</button>\r
+       <button id="cmd_cancel">Cancel</button>\r
 <div class="footer">\r
 <a href="http://nyatla.jp/mimic/wp" alt="http://nyatla.jp/mimic/wp">\r
 <img src="./mimiclogo.png"/></a>\r