/*JSON{ "type":"method", "class" : "Ethernet", "name" : "setIP", "generate" : "jswrap_ethernet_setIP", "description" : "Set the current IP address for get an IP from DHCP (if no options object is specified)", "params" : [ [ "options", "JsVar", "Object containing IP address options `{ ip : '1,2,3,4', subnet, gateway, dns }`, or do not supply an object in otder to force DHCP."] ], "return" : ["bool", "True on success"] }*/ bool jswrap_ethernet_setIP(JsVar *wlanObj, JsVar *options) { NOT_USED(wlanObj); if (networkState != NETWORKSTATE_ONLINE) { jsError("Not connected to the internet"); return false; } bool success = false; wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO); 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]); 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); return success; }
/*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; }
/*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; }
void WIZ_Config(void) { uint8 i; wiz_NetInfo netinfo; extern u_char GET_SN_MASK[4]; /**< Subnet mask received from the DHCP server */ extern u_char GET_GW_IP[4]; /**< Gateway ip address received from the DHCP server */ extern u_char GET_SIP[4]; /**< Local ip address received from the DHCP server */ Reset_W5200(); wizInit(); if(Enable_DHCP == OFF){ for(i=0; i<4; i++){ netinfo.Mac[i] = Mac[i]; netinfo.IP[i] = IP[i]; netinfo.Subnet[i] = Subnet[i]; netinfo.Gateway[i] = Gateway[i]; netinfo.DNSServerIP[i] = DNSServerIP[i]; } netinfo.Mac[i] = Mac[i]; i++; netinfo.Mac[i] = Mac[i]; } else{ for(i=0; i<6; i++){ SRC_MAC_ADDR[i] = Mac[i]; } printf("Delay for 2 Seconds..\r\n"); Delay_ms(2000); // Set DHCP init_dhcp_client(SOCK_DHCP, wizSWReset, wizSWReset); getIP_DHCPS(); for(i=0; i<4; i++){ netinfo.Mac[i] = SRC_MAC_ADDR[i]; netinfo.IP[i] = GET_SIP[i]; netinfo.Subnet[i] = GET_SN_MASK[i]; netinfo.Gateway[i] = GET_GW_IP[i]; netinfo.DNSServerIP[i] = GET_DNS_IP[i]; } netinfo.Mac[i] = SRC_MAC_ADDR[i]; i++; netinfo.Mac[i] = SRC_MAC_ADDR[i]; } SetNetInfo(&netinfo); printf("\r\n--------------------------------------- \r\n"); printf("W5200E01-M3 \r\n"); printf("Network Configuration Information \r\n"); printf("--------------------------------------- "); GetNetInfo(&netinfo); printf("\r\nMAC : %.2X.%.2X.%.2X.%.2X.%.2X.%.2X", netinfo.Mac[0],netinfo.Mac[1],netinfo.Mac[2],netinfo.Mac[3],netinfo.Mac[4],netinfo.Mac[5]); printf("\r\nIP : %d.%d.%d.%d", netinfo.IP[0],netinfo.IP[1],netinfo.IP[2],netinfo.IP[3]); printf("\r\nSN : %d.%d.%d.%d", netinfo.Subnet[0],netinfo.Subnet[1],netinfo.Subnet[2],netinfo.Subnet[3]); printf("\r\nGW : %d.%d.%d.%d", netinfo.Gateway[0],netinfo.Gateway[1],netinfo.Gateway[2],netinfo.Gateway[3]); printf("\r\nDNS server : %d.%d.%d.%d", netinfo.DNSServerIP[0],netinfo.DNSServerIP[1],netinfo.DNSServerIP[2],netinfo.DNSServerIP[3]); }