3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
\r
4 <link href="./mimic.css" rel="stylesheet" type="text/css">
\r
5 <script src="./slib.js"></script>
\r
7 <style id="user-style-nyatla-bg-img">
\r
17 width:60px;height:40px;
\r
28 background-color:#4169E1;
\r
30 border:solid 1px #aaaaaa;
\r
35 margin:2px 2px 2px 2px;
\r
36 padding:2px 2px 2px 2px;
\r
48 border:solid 1px #aaaaaa;
\r
50 .table1 input,select
\r
59 <script type="text/javascript">
\r
62 function getElem(id){return document.getElementById(id);}
\r
64 function str2HexArray(i_str,delim,len,digit)
\r
66 var l=i_str.split(delim);
\r
69 for(var i=0;i<len;i++){
\r
70 var v=parseInt(l[i],digit);
\r
71 if(!isNaN(v) && v>=0 && v<=255){
\r
74 throw "str2HexArray failed.";
\r
79 throw "str2HexArray failed.";
\r
82 function int2hex(v,d){var r=v.toString(16);while(r.length<d){r="0"+r;}return r;}
\r
83 function int2hex2(v){return int2hex(v,2);}
\r
84 function arrayToHex(ar)
\r
86 if(ar==null){return null;}
\r
88 for(var i=0;i<ar.length;i++){
\r
89 ret+=int2hex2(ar[i]);
\r
93 function int2str(val){return val.toString(10);}
\r
94 function int2IpAddr(v){return int2str((v>>24)&0xff)+"."+int2str((v>>16)&0xff)+"."+int2str((v>>8)&0xff)+"."+int2str((v>>0)&0xff);}
\r
95 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
97 var Ui=new Object();
\r
98 Ui.IpAddrInput=function(id)
\r
104 _t.getIpAddr=function(){
\r
105 return str2HexArray(tags.input.value,".",4,10);
\r
107 _t.getText=function(){
\r
108 return tags.input.value;
\r
110 _t.setIpValue=function(v1)
\r
112 tags.input.value=int2IpAddr(v1);
\r
115 Ui.IpSetting=function(id)
\r
119 mode:getElem(id+"_mode"),
\r
120 div:getElem(id+"_div")
\r
125 _t.addr=new Ui.IpAddrInput(id+"_addr");
\r
126 _t.mask=new Ui.IpAddrInput(id+"_mask");
\r
127 _t.gw=new Ui.IpAddrInput(id+"_defgw");
\r
128 tags.mode.addEventListener("change",function()
\r
130 tags.div.style.visibility=(tags.mode.selectedIndex==0)?"visible":"hidden";
\r
131 if(_t.events.onchange!=null){
\r
132 _t.events.onchange(tags.mode.selectedIndex);
\r
135 _t.setValue=function(v)
\r
137 tags.mode.selectedIndex=(v.flags & 0x03);
\r
138 tags.div.style.visibility=(tags.mode.selectedIndex==0)?"visible":"hidden";
\r
139 _t.addr.setIpValue(v.ip);
\r
140 _t.mask.setIpValue(v.mask);
\r
141 _t.gw.setIpValue(v.droute);
\r
143 _t.getValue=function()
\r
149 ret.flag=tags.mode.selectedIndex;
\r
151 ret.addr=_t.addr.getIpAddr();
\r
153 ret.mask=_t.mask.getIpAddr();
\r
155 ret.gw=_t.gw.getIpAddr();
\r
158 throw "Invalid value:"+err;
\r
162 Ui.MacAddr=function(id)
\r
168 _t.getMacAddr=function()
\r
171 return str2HexArray(tags.input.value,":",6,16);
\r
173 throw "Invalid MAC address '"+tags.input.value+"'";
\r
176 _t.setMacValue=function(v1,v2)
\r
178 tags.input.value=int2MacAddr(v1,v2);
\r
181 Ui.HostName=function(id)
\r
187 _t.getValue=function()
\r
189 var r=tags.input.value;
\r
190 if(r.length<1 ||r.length>31 || r.match(/[^(a-z0-9_)]/i)){
\r
191 throw "Invalid Host name."
\r
195 _t.setValue=function(v1)
\r
197 tags.input.value=v1;
\r
200 Ui.Services=function(id)
\r
204 http_port:getElem(id+"_http_port"),
\r
205 mdns:getElem(id+"_mdns_sw"),
\r
206 upnp:getElem(id+"_upnp_sw")
\r
208 _t.getValue=function()
\r
211 port:parseInt(tags.http_port.value),
\r
212 flag:(tags.mdns.selectedIndex==1?0x01:0x00)|(tags.upnp.selectedIndex==1?0x02:0x00)};
\r
213 if(isNaN(r.port) || r.port<=0){
\r
214 throw "Invalid port number";
\r
218 _t.init=function(cfg)
\r
220 tags.http_port.value=cfg.http_port;
\r
221 tags.mdns.selectedIndex=(cfg.flags&0x01)!=0?1:0;
\r
222 tags.upnp.selectedIndex=(cfg.flags&0x02)!=0?1:0;
\r
227 Ui.Cmd=function(id)
\r
231 update:getElem(id+"_update"),
\r
232 cancel:getElem(id+"_cancel")
\r
234 _t.events={onupdate:null}
\r
235 tags.update.onclick=function()
\r
237 if(_t.events.onupdate!=null){
\r
238 _t.events.onupdate();
\r
241 tags.cancel.onclick=function()
\r
243 if(window.confirm('Do you want to cancel?')){
\r
244 document.location="./index.html";
\r
247 tags.update.disabled=false;
\r
248 _t.disable=function(){tags.update.disabled=true;}
\r
252 function Application()
\r
254 var SETUP_API="/setup/setup.api";
\r
256 macaddr:new Ui.MacAddr("in_emac"),
\r
257 cmd:new Ui.Cmd("cmd"),
\r
258 ipset:new Ui.IpSetting("in_ip"),
\r
259 srv:new Ui.Services("srv"),
\r
260 hostname:new Ui.HostName("in_host")
\r
262 ui.cmd.events.onupdate=function(){
\r
265 var mac=ui.macaddr.getMacAddr();
\r
266 var host=ui.hostname.getValue();
\r
267 var ipv4=ui.ipset.getValue();
\r
268 var srv=ui.srv.getValue();
\r
269 var pm=arrayToHex(mac)+"ffff"
\r
270 +int2hex(ipv4.flag,8)+arrayToHex(ipv4.addr)+arrayToHex(ipv4.mask)+arrayToHex(ipv4.gw)
\r
271 +int2hex(srv.flag,8)+int2hex(srv.port,4)+"0000";
\r
273 var ret=eval("("+slib.xhr(SETUP_API+"?c=update&p="+pm+"&host="+host).responseText+")");
\r
274 if(ret.result!=0x0){
\r
275 throw "Configuration update is failed. code=0x"+ret.result;
\r
277 throw "Configuration is changed.\n Restart the MiMicRemoteMCU to enable the setting.";
\r
285 function setInnerHTML(n,v){getElem(n).innerHTML=v;}
\r
286 var cfg=eval("("+slib.xhr(SETUP_API+"?c=get").responseText+")");
\r
287 setInnerHTML("cur_version",cfg.application);
\r
288 setInnerHTML("cur_lan",cfg.landev);
\r
289 setInnerHTML("cur_host",cfg.cur.host);
\r
290 setInnerHTML("cur_mac",int2MacAddr(cfg.cur.mac00010203,cfg.cur.mac0405xxxx));
\r
291 setInnerHTML("cur_ip",int2IpAddr(cfg.cur.ipv4.ip));
\r
292 setInnerHTML("cur_mask",int2IpAddr(cfg.cur.ipv4.mask));
\r
293 setInnerHTML("cur_droute",int2IpAddr(cfg.cur.ipv4.droute));
\r
294 setInnerHTML("cur_service",
\r
295 "Http Port="+cfg.cur.services.http_port+","+
\r
296 "mDNS="+((cfg.cur.services.flags&0x01)?"Enable":"Disable")+","+
\r
297 "UPnP="+((cfg.cur.services.flags&0x02)?"Enable":"Disable"));
\r
298 ui.macaddr.setMacValue(cfg.cfg.mac00010203,cfg.cfg.mac0405xxxx);
\r
299 ui.ipset.setValue(cfg.cfg.ipv4);
\r
300 ui.hostname.setValue(cfg.cfg.host);
\r
301 ui.srv.init(cfg.cfg.services);
\r
303 ui.update.disable();
\r
304 alert("MiMic configurator failed initialization.'"+e.toString()+"'");
\r
311 app=new Application();
\r
317 <body onload="init();">
\r
318 <h1 style="float:left;"><img src="./mimiclogo.png"/><span id="idx" >mbedJS configuration</span></h1>
\r
319 <div style="float:right;" ><a href="/">Return to top</a></div>
\r
320 <hr style="clear:both;" />
\r
321 <h2>Current configuration</h2>
\r
322 <table class="table1 ">
\r
323 <colgroup><col span="1" class="col1" /></colgroup>
\r
324 <colgroup><col span="2" class="col2" /></colgroup>
\r
325 <tr><td>Version</td><td><p id="cur_version"></p></td></tr>
\r
326 <tr><td>LAN PHY</td><td><p id="cur_lan"</p></td></tr>
\r
327 <tr><td>MAC Address</td><td><p id="cur_mac"></p></td></tr>
\r
328 <tr><td>Host Name</td><td><p id="cur_host"></p></td></tr>
\r
329 <tr><td>IP Address</td><td><p id="cur_ip"></p></td></tr>
\r
330 <tr><td>Net Mask</td><td><p id="cur_mask"></p></td></tr>
\r
331 <tr><td>Default Gateway</td><td><p id="cur_droute"></p></td></tr>
\r
332 <tr><td>Services</td><td><p id="cur_service"></p></td></tr>
\r
335 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
337 <h2>OnChip configuration</h2>
\r
340 <table class="table1">
\r
341 <colgroup><col span="1" class="col1" /></colgroup>
\r
342 <colgroup><col span="2" class="col2" /></colgroup>
\r
343 <tr><td>MAC Address</td><td><input id="in_emac" type="text"/></td></tr>
\r
344 <tr><td>Host Name</td><td><input id="in_host" type="text"/></td></tr>
\r
346 <td>IP Address</td>
\r
348 <div><select id="in_ip_mode"><option>Manual</option><option>DHCP</option><option>AutoIP</option><option>AutoIP+DHCP</option></select></div>
\r
349 <div id="in_ip_div">
\r
350 <table class="table2">
\r
351 <tr><td>Address</td><td><input id="in_ip_addr" type="text"/></td></tr>
\r
352 <tr><td>Mask</td><td><input id="in_ip_mask" type="text"/></td></tr>
\r
353 <tr><td>Gateway</td><td><input id="in_ip_defgw" type="text"/></td></tr>
\r
360 <table class="table1">
\r
361 <colgroup><col span="1" class="col1" /></colgroup>
\r
362 <colgroup><col span="2" class="col2" /></colgroup>
\r
363 <tr><td>HTTP Port</td><td><input id="srv_http_port" type="text"/></td></tr>
\r
364 <tr><td>mDNS</td><td><select id="srv_mdns_sw"><option>Disable</option><option>Enable</option></select></td></tr>
\r
365 <tr><td>UPnP</td><td><select id="srv_upnp_sw"><option>Disable</option><option>Enable</option></select></td></tr>
\r
369 <button id="cmd_update">Update</button>
\r
370 <button id="cmd_cancel">Cancel</button>
\r
371 <div class="footer">
\r
372 MiMic project<br/>Copyright (C) 2011-2013 <a href="http://nyatla.jp">nyatla.jp</a> All Rights Reserved.
\r