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
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
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
_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
_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
</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