/*JSON{ "type" : "method", "class" : "Ethernet", "name" : "setIP", "generate" : "jswrap_ethernet_setIP", "params" : [ ["options","JsVar","Object containing IP address options `{ ip : '1,2,3,4', subnet, gateway, dns, mac }`, or do not supply an object in order to force DHCP."], ["options","JsVar","An optional `callback(err)` function to invoke when ip is set. `err==null` on success, or a string on failure."] ], "return" : ["bool","True on success"] } Set the current IP address or get an IP from DHCP (if no options object is specified) If 'mac' is specified as an option, it must be a string of the form `"00:01:02:03:04:05"` */ bool jswrap_ethernet_setIP(JsVar *wlanObj, JsVar *options, JsVar *callback) { NOT_USED(wlanObj); if (networkState != NETWORKSTATE_ONLINE) { jsExceptionHere(JSET_ERROR, "Not connected to the internet"); return false; } JsNetwork net; if (!networkGetFromVar(&net)) return false; const char *errorMessage = 0; wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO); if (!gWIZNETINFO.mac[0] && !gWIZNETINFO.mac[1] && !gWIZNETINFO.mac[2] && !gWIZNETINFO.mac[3] && !gWIZNETINFO.mac[4] && !gWIZNETINFO.mac[5]) { // wow - no mac address - WIZ550BoB? Set up a simple one // in WIZnet's range of addresses gWIZNETINFO.mac[0]=0x00; gWIZNETINFO.mac[1]=0x08; gWIZNETINFO.mac[2]=0xDC; gWIZNETINFO.mac[3]=0x01; gWIZNETINFO.mac[4]=0x02; gWIZNETINFO.mac[5]=0x03; } if (jsvIsObject(options)) { _eth_getIP_set_address(options, "ip", &gWIZNETINFO.ip[0]); _eth_getIP_set_address(options, "subnet", &gWIZNETINFO.sn[0]); _eth_getIP_set_address(options, "gateway", &gWIZNETINFO.gw[0]); _eth_getIP_set_address(options, "dns", &gWIZNETINFO.dns[0]); JsVar *info = jsvObjectGetChild(options, "mac", 0); if (info) { char buf[64]; jsvGetString(info, buf, sizeof(buf)); networkParseMACAddress(&gWIZNETINFO.mac[0], buf); // TODO: check failure? jsvUnLock(info); } gWIZNETINFO.dhcp = NETINFO_STATIC; errorMessage = 0; // all ok } else { // DHCP uint8_t DHCPisSuccess = getIP_DHCPS(net_wiznet_getFreeSocket(), &gWIZNETINFO); if (DHCPisSuccess == 1) { // info in lease_time.lVal errorMessage = 0; // all ok } else { errorMessage = "DHCP failed"; jsWarn(errorMessage); } } ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO); networkFree(&net); // Schedule callback if a function was provided if (jsvIsFunction(callback)) { JsVar *params[1]; params[0] = errorMessage ? jsvNewFromString(errorMessage) : jsvNewWithFlags(JSV_NULL); jsiQueueEvents(NULL, callback, params, 1); jsvUnLock(params[0]); } return errorMessage==0; }
/*JSON{ "type" : "method", "class" : "Ethernet", "name" : "setIP", "generate" : "jswrap_ethernet_setIP", "params" : [ ["options","JsVar","Object containing IP address options `{ ip : '1,2,3,4', subnet, gateway, dns, mac }`, or do not supply an object in order to force DHCP."] ], "return" : ["bool","True on success"] } Set the current IP address or get an IP from DHCP (if no options object is specified) If 'mac' is specified as an option, it must be a string of the form `"00:01:02:03:04:05"` */ bool jswrap_ethernet_setIP(JsVar *wlanObj, JsVar *options) { NOT_USED(wlanObj); if (networkState != NETWORKSTATE_ONLINE) { jsError("Not connected to the internet"); return false; } JsNetwork net; if (!networkGetFromVar(&net)) return false; bool success = false; wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO); if (!gWIZNETINFO.mac[0] && !gWIZNETINFO.mac[1] && !gWIZNETINFO.mac[2] && !gWIZNETINFO.mac[3] && !gWIZNETINFO.mac[4] && !gWIZNETINFO.mac[5]) { // wow - no mac address - WIZ550BoB? Set up a simple one // in WIZnet's range of addresses gWIZNETINFO.mac[0]=0x00; gWIZNETINFO.mac[1]=0x08; gWIZNETINFO.mac[2]=0xDC; gWIZNETINFO.mac[3]=0x01; gWIZNETINFO.mac[4]=0x02; gWIZNETINFO.mac[5]=0x03; } if (jsvIsObject(options)) { _eth_getIP_set_address(options, "ip", &gWIZNETINFO.ip[0]); _eth_getIP_set_address(options, "subnet", &gWIZNETINFO.sn[0]); _eth_getIP_set_address(options, "gateway", &gWIZNETINFO.gw[0]); _eth_getIP_set_address(options, "dns", &gWIZNETINFO.dns[0]); JsVar *info = jsvObjectGetChild(options, "mac", 0); if (info) { char buf[64]; jsvGetString(info, buf, sizeof(buf)); networkParseMACAddress(&gWIZNETINFO.mac[0], buf); // TODO: check failure? jsvUnLock(info); } gWIZNETINFO.dhcp = NETINFO_STATIC; success = true; } else { // DHCP uint8_t DHCPisSuccess = getIP_DHCPS(net_wiznet_getFreeSocket(), &gWIZNETINFO); if (DHCPisSuccess == 1) { // info in lease_time.lVal success = true; } else { jsWarn("DHCP failed"); success = false; } } ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO); networkFree(&net); return success; }