/*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" : "getIP", "generate" : "jswrap_ethernet_getIP", "return" : ["JsVar",""] } Get the current IP address, subnet, gateway and mac address. */ JsVar *jswrap_ethernet_getIP(JsVar *wlanObj) { NOT_USED(wlanObj); if (networkState != NETWORKSTATE_ONLINE) { jsError("Not connected to the internet"); return 0; } JsNetwork net; if (!networkGetFromVar(&net)) return 0; wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO); /* If byte 1 is 0 we don't have a valid address */ JsVar *data = jsvNewWithFlags(JSV_OBJECT); networkPutAddressAsString(data, "ip", &gWIZNETINFO.ip[0], 4, 10, '.'); networkPutAddressAsString(data, "subnet", &gWIZNETINFO.sn[0], 4, 10, '.'); networkPutAddressAsString(data, "gateway", &gWIZNETINFO.gw[0], 4, 10, '.'); networkPutAddressAsString(data, "dns", &gWIZNETINFO.dns[0], 4, 10, '.'); networkPutAddressAsString(data, "mac", &gWIZNETINFO.mac[0], 6, 16, ':'); networkFree(&net); return data; }
void w5500_dhcp_assign() { S2E_Packet *value = get_S2E_Packet_pointer(); wiz_NetInfo gWIZNETINFO; getIPfromDHCP(gWIZNETINFO.ip); getGWfromDHCP(gWIZNETINFO.gw); getSNfromDHCP(gWIZNETINFO.sn); getDNSfromDHCP(gWIZNETINFO.dns); get_S2E_Packet_value(gWIZNETINFO.mac, value->network_info_common.mac, sizeof(gWIZNETINFO.mac[0]) * 6); set_S2E_Packet_value(value->network_info_common.local_ip, gWIZNETINFO.ip, sizeof(value->network_info_common.local_ip)); set_S2E_Packet_value(value->network_info_common.gateway, gWIZNETINFO.gw, sizeof(value->network_info_common.gateway)); set_S2E_Packet_value(value->network_info_common.subnet, gWIZNETINFO.sn, sizeof(value->network_info_common.subnet)); set_S2E_Packet_value(value->options.dns_server_ip, gWIZNETINFO.dns, sizeof(value->options.dns_server_ip)); if(value->options.dhcp_use) gWIZNETINFO.dhcp = NETINFO_DHCP; else gWIZNETINFO.dhcp = NETINFO_STATIC; ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO); // display_Net_Info(); // printf("DHCP LEASED TIME : %d sec. \r\n", getDHCPLeasetime()); }
///////////////////////////////////////////////////////////// // Intialize the network information to be used in WIZCHIP // ///////////////////////////////////////////////////////////// void network_init(void) { uint8_t tmpstr[6]; ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO); ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO); // Display Network Information ctlwizchip(CW_GET_ID,(void*)tmpstr); printf("\r\n=== %s NET CONF ===\r\n",(char*)tmpstr); printf("MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2], gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]); printf("SIP: %d.%d.%d.%d\r\n", gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]); printf("GAR: %d.%d.%d.%d\r\n", gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]); printf("SUB: %d.%d.%d.%d\r\n", gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]); printf("DNS: %d.%d.%d.%d\r\n", gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]); printf("======================\r\n"); }
void display_Net_Info() { wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*) &gWIZNETINFO); printf("[APP] MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n", gWIZNETINFO.mac[0], gWIZNETINFO.mac[1], gWIZNETINFO.mac[2], gWIZNETINFO.mac[3], gWIZNETINFO.mac[4], gWIZNETINFO.mac[5]); printf("[APP] IP: %d.%d.%d.%d\r\n", gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3]); printf("[APP] GW: %d.%d.%d.%d\r\n", gWIZNETINFO.gw[0], gWIZNETINFO.gw[1], gWIZNETINFO.gw[2], gWIZNETINFO.gw[3]); printf("[APP] SN: %d.%d.%d.%d\r\n", gWIZNETINFO.sn[0], gWIZNETINFO.sn[1], gWIZNETINFO.sn[2], gWIZNETINFO.sn[3]); printf("[APP] DNS: %d.%d.%d.%d\r\n", gWIZNETINFO.dns[0], gWIZNETINFO.dns[1], gWIZNETINFO.dns[2], gWIZNETINFO.dns[3]); }
void make_json_netinfo(uint8_t * buf, uint16_t * len) { wiz_NetInfo netinfo; ctlnetwork(CN_GET_NETINFO, (void*) &netinfo); // DHCP: 1 - Static, 2 - DHCP *len = sprintf((char *)buf, "NetinfoCallback({\"mac\":\"%.2X:%.2X:%.2X:%.2X:%.2X:%.2X\",\ \"ip\":\"%d.%d.%d.%d\",\ \"gw\":\"%d.%d.%d.%d\",\ \"sn\":\"%d.%d.%d.%d\",\ \"dns\":\"%d.%d.%d.%d\",\ \"dhcp\":\"%d\"\ });",
void display_Net_Info(void) { DevConfig *value = get_DevConfig_pointer(); wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*) &gWIZNETINFO); printf(" # MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n", gWIZNETINFO.mac[0], gWIZNETINFO.mac[1], gWIZNETINFO.mac[2], gWIZNETINFO.mac[3], gWIZNETINFO.mac[4], gWIZNETINFO.mac[5]); //printf(" # IP: %d.%d.%d.%d / Port: %d\r\n", gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3], value->network_info_common.local_port); printf(" # IP: %d.%d.%d.%d\r\n", gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3]); printf(" # GW: %d.%d.%d.%d\r\n", gWIZNETINFO.gw[0], gWIZNETINFO.gw[1], gWIZNETINFO.gw[2], gWIZNETINFO.gw[3]); printf(" # SN: %d.%d.%d.%d\r\n", gWIZNETINFO.sn[0], gWIZNETINFO.sn[1], gWIZNETINFO.sn[2], gWIZNETINFO.sn[3]); printf(" # DNS: %d.%d.%d.%d\r\n", gWIZNETINFO.dns[0], gWIZNETINFO.dns[1], gWIZNETINFO.dns[2], gWIZNETINFO.dns[3]); printf("\r\n"); }
void Net_Conf(void) { DevConfig *value = get_DevConfig_pointer(); wiz_NetInfo gWIZNETINFO; /* wizchip netconf */ get_DevConfig_value(gWIZNETINFO.mac, value->network_info_common.mac, sizeof(gWIZNETINFO.mac[0]) * 6); get_DevConfig_value(gWIZNETINFO.ip, value->network_info_common.local_ip, sizeof(gWIZNETINFO.ip[0]) * 4); get_DevConfig_value(gWIZNETINFO.gw, value->network_info_common.gateway, sizeof(gWIZNETINFO.gw[0]) * 4); get_DevConfig_value(gWIZNETINFO.sn, value->network_info_common.subnet, sizeof(gWIZNETINFO.sn[0]) * 4); get_DevConfig_value(gWIZNETINFO.dns, value->options.dns_server_ip, sizeof(gWIZNETINFO.dns)); if(value->options.dhcp_use) gWIZNETINFO.dhcp = NETINFO_DHCP; else gWIZNETINFO.dhcp = NETINFO_STATIC; ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO); }
// brief Initialize modules static void W5500_Init(void){ // Set Tx and Rx buffer size to 2KB uint8_t buffsize[8] = { 2, 2, 2, 2, 2, 2, 2, 2 }; // Reset module PMOD_PORT &= ~_BV(RST_W5500); //Set Rst low _delay_ms(500); //Minimun of 500us, 10ms to be safe PMOD_PORT |= _BV(RST_W5500); //Set rst high _delay_ms(1); // Wizchip initialize wizchip_init(buffsize, buffsize, 0, 0, cs_sel, cs_desel, 0, 0, spi_rb, spi_wb); // Wizchip netconf ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO); ctlwizchip(CW_SET_PHYCONF, (void*) &phyConf); }
static void Display_Net_Conf() { #ifdef _MAIN_DEBUG_ uint8_t tmpstr[6] = {0,}; #endif ctlnetwork(CN_GET_NETINFO, (void*) &gWIZNETINFO); #ifdef _MAIN_DEBUG_ // Display Network Information ctlwizchip(CW_GET_ID,(void*)tmpstr); if(gWIZNETINFO.dhcp == NETINFO_DHCP) printf("\r\n===== %s NET CONF : DHCP =====\r\n",(char*)tmpstr); else printf("\r\n===== %s NET CONF : Static =====\r\n",(char*)tmpstr); printf(" MAC : %02X:%02X:%02X:%02X:%02X:%02X\r\n", gWIZNETINFO.mac[0], gWIZNETINFO.mac[1], gWIZNETINFO.mac[2], gWIZNETINFO.mac[3], gWIZNETINFO.mac[4], gWIZNETINFO.mac[5]); printf(" IP : %d.%d.%d.%d\r\n", gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3]); printf(" GW : %d.%d.%d.%d\r\n", gWIZNETINFO.gw[0], gWIZNETINFO.gw[1], gWIZNETINFO.gw[2], gWIZNETINFO.gw[3]); printf(" SN : %d.%d.%d.%d\r\n", gWIZNETINFO.sn[0], gWIZNETINFO.sn[1], gWIZNETINFO.sn[2], gWIZNETINFO.sn[3]); printf("=======================================\r\n"); #endif }
/*JSON{ "type" : "method", "class" : "Ethernet", "name" : "getIP", "generate" : "jswrap_ethernet_getIP", "params" : [ ["options","JsVar","An optional `callback(err, ipinfo)` function to be called back with the IP information."] ], "return" : ["JsVar",""] } Get the current IP address, subnet, gateway and mac address. */ JsVar *jswrap_ethernet_getIP(JsVar *wlanObj, JsVar *callback) { NOT_USED(wlanObj); if (networkState != NETWORKSTATE_ONLINE) { jsExceptionHere(JSET_ERROR, "Not connected to the internet"); return 0; } JsNetwork net; if (!networkGetFromVar(&net)) return 0; wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO); /* If byte 1 is 0 we don't have a valid address */ JsVar *data = jsvNewObject(); networkPutAddressAsString(data, "ip", &gWIZNETINFO.ip[0], 4, 10, '.'); networkPutAddressAsString(data, "subnet", &gWIZNETINFO.sn[0], 4, 10, '.'); networkPutAddressAsString(data, "gateway", &gWIZNETINFO.gw[0], 4, 10, '.'); networkPutAddressAsString(data, "dns", &gWIZNETINFO.dns[0], 4, 10, '.'); networkPutAddressAsString(data, "mac", &gWIZNETINFO.mac[0], 6, 16, ':'); networkFree(&net); // Schedule callback if a function was provided if (jsvIsFunction(callback)) { JsVar *params[2]; params[0] = jsvNewWithFlags(JSV_NULL); params[1] = data; jsiQueueEvents(NULL, callback, params, 2); jsvUnLock(params[0]); } return data; }
static void Net_Conf() { /* wizchip netconf */ ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO); }
/*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; }
/* ********************************************************************************************************* * CHECK DHCP STATE * * Description: This function checks the state of DHCP. * Arguments : None. * Returns : None. * Note : ********************************************************************************************************* */ void check_DHCP_state(uint8_t s, wiz_NetInfo *pWIZNETINFO) { uint16_t len, i; uint8_t type, flag; uint8_t d_addr[4]; type = 0; if ((len = getSn_RX_RSR(s)) > 0) { type = parseDHCPMSG(s, len, pWIZNETINFO); } switch ( dhcp_state ) { case STATE_DHCP_DISCOVER : if (type == DHCP_OFFER) { jsiConsolePrintf("> Receive DHCP_OFFER\r\n"); for (i = 0; i < 4; i++) d_addr[i] = 0xff; send_DHCP_REQUEST(s, Cip, d_addr, pWIZNETINFO); dhcp_state = STATE_DHCP_REQUEST; } else check_Timeout(s, pWIZNETINFO); break; case STATE_DHCP_REQUEST : if (type == DHCP_ACK) { jsiConsolePrintf("> Receive DHCP_ACK\r\n"); if (check_leasedIP(s, pWIZNETINFO)) { //iinchip_init() - WIZnet chip reset & Delay (10ms); //Set_network(); ctlwizchip(CW_RESET_WIZCHIP, 0); ctlnetwork(CN_SET_NETINFO, (void*)&(*pWIZNETINFO)); /* for (i = 0; i < 12; i++) { //EEP_Write(EEP_LIP+i, *(uint8_t *)((*pWIZNETINFO).ip+i)); } */ next_time = jshGetSystemTime() + DHCP_WAIT_TIME; retry_count = 0; dhcp_state = STATE_DHCP_LEASED; } else { next_time = jshGetSystemTime() + DHCP_WAIT_TIME1; retry_count = 0; //dhcp_state = STATE_DHCP_DISCOVER; dhcp_state = STATE_DHCP_LEASED; jsiConsolePrintf("> => Recceived IP is invalid\r\n"); //iinchip_init(); //Set_Default(); //Set_network(); //ctlwizchip(CW_RESET_WIZCHIP, 0); //set_default_netinfo(); //ctlnetwork(CN_SET_NETINFO, (void*)&(*pWIZNETINFO)); } } else if (type == DHCP_NAK) { jsiConsolePrintf("> Receive DHCP_NACK\r\n"); next_time = jshGetSystemTime() + DHCP_WAIT_TIME; retry_count = 0; dhcp_state = STATE_DHCP_DISCOVER; } else check_Timeout(s, pWIZNETINFO); break; case STATE_DHCP_LEASED : if ((lease_time.lVal != 0xffffffff) && ((lease_time.lVal/2) < jshGetSystemTime())) { jsiConsolePrintf("> Renewal IP address \r\n"); type = 0; for (i = 0; i < 4; i++) OLD_SIP[i] = (*pWIZNETINFO).ip[i]; for (i = 0; i < 4; i++) d_addr[i] = DHCP_SIP[i]; DHCP_XID++; send_DHCP_REQUEST(s, (*pWIZNETINFO).ip, d_addr, pWIZNETINFO); dhcp_state = STATE_DHCP_REREQUEST; next_time = jshGetSystemTime() + DHCP_WAIT_TIME; } break; case STATE_DHCP_REREQUEST : if (type == DHCP_ACK) { retry_count = 0; flag = 0; for (i = 0; i < 4; i++) { if (OLD_SIP[i] != (*pWIZNETINFO).ip[i]) { flag = 1; break; } } // change to new IP address if (flag) { //iinchip_init(); //Set_network(); ctlwizchip(CW_RESET_WIZCHIP, 0); ctlnetwork(CN_SET_NETINFO, (void*)&(*pWIZNETINFO)); } next_time = jshGetSystemTime() + DHCP_WAIT_TIME; dhcp_state = STATE_DHCP_LEASED; } else if (type == DHCP_NAK) { next_time = jshGetSystemTime() + DHCP_WAIT_TIME; retry_count = 0; dhcp_state = STATE_DHCP_DISCOVER; // jsiConsolePrintf("state : STATE_DHCP_DISCOVER\r\n"); } else check_Timeout(s, pWIZNETINFO); break; case STATE_DHCP_RELEASE : break; default : break; } }
/*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; }
/** * @brief Main program * @param None * @retval None */ int main() { //uint8_t tx_size[8] = { 2, 2, 2, 2, 2, 2, 2, 2 }; //uint8_t rx_size[8] = { 2, 2, 2, 2, 2, 2, 2, 2 }; //uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x11, 0x22, 0x33}; //uint8_t src_addr[4] = {192, 168, 0, 80}; //uint8_t gw_addr[4] = {192, 168, 0, 1}; //uint8_t sub_addr[4] = {255, 255, 255, 0}; //uint8_t dns_server[4] = {8, 8, 8, 8}; // for Example domain name server //uint8_t tmp[8]; //int ret; int i; #if defined (_MAIN_DEBUG_) && defined (_USE_SDCARD_) int ret; #endif #if defined(F_APP_FTP) wiz_NetInfo gWIZNETINFO; #endif #if defined(F_APP_DHCP) || defined(F_APP_DNS) S2E_Packet *value = get_S2E_Packet_pointer(); #endif #if defined(F_APP_DNS) uint8_t dns_server_ip[4]; #endif /* External Clock */ CRG_PLL_InputFrequencySelect(CRG_OCLK); /* Set System init */ SystemInit(); /* UART Init */ UART_StructInit(&UART_InitStructure); UART_Init(UART_DEBUG,&UART_InitStructure); /* SysTick_Config */ SysTick_Config((GetSystemClock()/1000)); /* Set WZ_100US Register */ setTIC100US((GetSystemClock()/10000)); //getTIC100US(); //printf(" GetSystemClock: %X, getTIC100US: %X, (%X) \r\n", // GetSystemClock, getTIC100US(), *(uint32_t *)TIC100US); LED_Init(LED1); LED_Init(LED2); LED_Init(LED3); LED_Off(LED1); LED_Off(LED2); LED_Off(LED3); g_sdcard_done = 0; BOOT_Pin_Init(); Board_factory_Init(); EXTI_Configuration(); /* Load Configure Information */ load_S2E_Packet_from_storage(); UART_Configuration(); /* Check MAC Address */ check_mac_address(); Timer0_Configuration(); // ADC initialize ADC_Init(); #ifdef _MAIN_DEBUG_ uint8_t tmpstr[6] = {0,}; ctlwizchip(CW_GET_ID,(void*)tmpstr); printf("\r\n============================================\r\n"); printf(" WIZnet %s EVB Demo v%d.%.2d\r\n", tmpstr, VER_H, VER_L); printf("============================================\r\n"); printf(" WIZwiki Platform based WEBBoot Example\r\n"); printf("============================================\r\n"); #endif #ifdef __DEF_USED_IC101AG__ //For using IC+101AG *(volatile uint32_t *)(0x41003068) = 0x64; //TXD0 - set PAD strengh and pull-up *(volatile uint32_t *)(0x4100306C) = 0x64; //TXD1 - set PAD strengh and pull-up *(volatile uint32_t *)(0x41003070) = 0x64; //TXD2 - set PAD strengh and pull-up *(volatile uint32_t *)(0x41003074) = 0x64; //TXD3 - set PAD strengh and pull-up *(volatile uint32_t *)(0x41003050) = 0x64; //TXE - set PAD strengh and pull-up #endif #ifdef __DEF_USED_MDIO__ /* mdio Init */ mdio_init(GPIOB, MDC, MDIO ); /* PHY Link Check via gpio mdio */ while( link() == 0x0 ) { printf("."); delay(500); } printf("PHY is linked. \r\n"); #else delay(1000); delay(1000); #endif Mac_Conf(); #if defined(F_APP_DHCP) if(value->options.dhcp_use) // DHCP { uint32_t ret; uint8_t dhcp_retry = 0; #ifdef _MAIN_DEBUG_ printf(" - DHCP Client running\r\n"); #endif DHCP_init(SOCK_DHCP, TX_BUF); reg_dhcp_cbfunc(w5500_dhcp_assign, w5500_dhcp_assign, w5500_dhcp_conflict); while(1) { ret = DHCP_run(); if(ret == DHCP_IP_LEASED) { #ifdef _MAIN_DEBUG_ printf(" - DHCP Success: DHCP Leased time : %ld Sec.\r\n\r\n", getDHCPLeasetime()); #endif break; } else if(ret == DHCP_FAILED) { dhcp_retry++; #ifdef _MAIN_DEBUG_ if(dhcp_retry <= 3) printf(" - DHCP Timeout occurred and retry [%d]\r\n", dhcp_retry); #endif } if(dhcp_retry > 3) { #ifdef _MAIN_DEBUG_ printf(" - DHCP Failed\r\n\r\n"); #endif value->options.dhcp_use = 0; Net_Conf(); break; } do_udp_config(SOCK_CONFIG); } } else // Static { Net_Conf(); } #else Net_Conf(); #endif #ifdef _MAIN_DEBUG_ display_Net_Info(); #endif #if defined(F_APP_ATC) atc_init(&rxring, &txring); op_mode = OP_DATA; #endif TFTP_init(SOCK_TFTP, socket_buf); ret = application_update(); printf("[DEBUG] check trigger:%d ret:%d \r\n", get_bootpin_Status(), ret); if((get_bootpin_Status() == 1) && (ret != TFTP_FAIL)) { uint32_t tmp; #if !defined(MULTIFLASH_ENABLE) tmp = *(volatile uint32_t *)APP_BASE; #else tmp = *(volatile uint32_t *)flash.flash_app_base; #endif if((tmp & 0xffffffff) != 0xffffffff) { printf("[DEBUG] application_jump\r\n"); application_jump(); } } #ifdef _USE_SDCARD_ // SD card Initialization ret = mmc_mount(); if(ret <= 0) { #ifdef _MAIN_DEBUG_ printf("\r\n - Can't mount SD card: Please Reboot WIZ750WEB Board or Insert SD card\r\n"); #endif //while(!(ret = mmc_mount())); } if(ret > 0) { #ifdef _MAIN_DEBUG_ display_SDcard_Info(ret); #endif } #endif httpServer_init(TX_BUF, RX_BUF, MAX_HTTPSOCK, socknumlist); #ifdef _USE_WATCHDOG_ reg_httpServer_cbfunc(NVIC_SystemReset, IWDG_ReloadCounter); // Callback: STM32 MCU Reset / WDT Reset (IWDG) #else reg_httpServer_cbfunc(NVIC_SystemReset, NULL); // Callback: STM32 MCU Reset #endif IO_status_init(); #if defined(F_APP_FTP) ctlnetwork(CN_GET_NETINFO, (void*) &gWIZNETINFO); ftpd_init(gWIZNETINFO.ip); // Added by James for FTP #endif #ifdef _USE_WATCHDOG_ // IWDG Initialization: STM32 Independent WatchDog IWDG_Configureation(); #endif while (1) { #ifdef _USE_WATCHDOG_ IWDG_ReloadCounter(); // Feed IWDG #endif #if defined(F_APP_ATC) atc_run(); #endif if(g_op_mode == NORMAL_MODE) { do_udp_config(SOCK_CONFIG); } else { if(TFTP_run() != TFTP_PROGRESS) g_op_mode = NORMAL_MODE; } #if defined(F_APP_DHCP) if(value->options.dhcp_use) DHCP_run(); #endif for(i = 0; i < MAX_HTTPSOCK; i++) httpServer_run(i); // HTTP server handler #if defined(F_APP_FTP) ftpd_run(FTP_DBUF); #endif #ifdef _USE_WATCHDOG_ IWDG_ReloadCounter(); // Feed IWDG #endif } return 0; }
uint8_t ftpc_run(uint8_t * dbuf) { #ifndef Need_UARTGetCharBlocking_func uint16_t size = 0; long ret = 0; uint32_t send_byte, recv_byte; uint32_t blocklen; uint32_t remain_filesize; uint32_t remain_datasize; uint8_t msg_c; uint8_t dat[50]={0,}; uint32_t totalSize = 0, availableSize = 0; switch(getSn_SR(CTRL_SOCK)) { case SOCK_ESTABLISHED : if(!connect_state_control_ftpc){ printf("%d:FTP Connected\r\n", CTRL_SOCK); strcpy(ftpc.workingdir, "/"); connect_state_control_ftpc = 1; } if(gMenuStart){ gMenuStart = 0; printf("\r\n----------------------------------------\r\n"); printf("Press menu key\r\n"); printf("----------------------------------------\r\n"); printf("1> View FTP Server Directory\r\n"); printf("2> View My Directory\r\n"); printf("3> Sets the type of file to be transferred. Current state : %s\r\n", (ftpc.type==ASCII_TYPE)?"Ascii":"Binary"); printf("4> Sets Data Connection. Current state : %s\r\n", (ftpc.dsock_mode==ACTIVE_MODE)?"Active":"Passive"); printf("5> Put File to Server\r\n"); printf("6> Get File from Server\r\n"); #if defined(F_FILESYSTEM) printf("7> Delete My File\r\n"); #endif printf("----------------------------------------\r\n"); while(1){ msg_c=ftp_getc(); if(msg_c=='1'){ if(ftpc.dsock_mode==PASSIVE_MODE){ sprintf(dat,"PASV\r\n"); send(CTRL_SOCK, (uint8_t *)dat, strlen(dat)); Command.First = f_dir; break; } else{ wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*) &gWIZNETINFO); sprintf(dat,"PORT %d,%d,%d,%d,%d,%d\r\n", gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3], (uint8_t)(local_port>>8), (uint8_t)(local_port&0x00ff)); send(CTRL_SOCK, (uint8_t *)dat, strlen(dat)); Command.First = f_dir; gModeActivePassiveflag = 1; break; } break; } else if(msg_c=='5'){ if(ftpc.dsock_mode==PASSIVE_MODE){ sprintf(dat,"PASV\r\n"); send(CTRL_SOCK, (uint8_t *)dat, strlen(dat)); Command.First = f_put; break; } else{ wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*) &gWIZNETINFO); sprintf(dat,"PORT %d,%d,%d,%d,%d,%d\r\n", gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3], (uint8_t)(local_port>>8), (uint8_t)(local_port&0x00ff)); send(CTRL_SOCK, (uint8_t *)dat, strlen(dat)); Command.First = f_put; gModeActivePassiveflag = 1; break; } } else if(msg_c=='6'){ if(ftpc.dsock_mode==PASSIVE_MODE){ sprintf(dat,"PASV\r\n"); send(CTRL_SOCK, (uint8_t *)dat, strlen(dat)); Command.First = f_get; break; } else{ wiz_NetInfo gWIZNETINFO; ctlnetwork(CN_GET_NETINFO, (void*) &gWIZNETINFO); sprintf(dat,"PORT %d,%d,%d,%d,%d,%d\r\n", gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3], (uint8_t)(local_port>>8), (uint8_t)(local_port&0x00ff)); send(CTRL_SOCK, (uint8_t *)dat, strlen(dat)); Command.First = f_get; gModeActivePassiveflag = 1; break; } } else if(msg_c=='2'){ #if defined(F_FILESYSTEM) scan_files(ftpc.workingdir, dbuf, (int *)&size); printf("\r\n%s\r\n", dbuf); #else if (strncmp(ftpc.workingdir, "/$Recycle.Bin", sizeof("/$Recycle.Bin")) != 0) size = sprintf(dbuf, "drwxr-xr-x 1 ftp ftp 0 Dec 31 2014 $Recycle.Bin\r\n-rwxr-xr-x 1 ftp ftp 512 Dec 31 2014 test.txt\r\n"); printf("\r\n%s\r\n", dbuf); #endif gMenuStart = 1; break; } else if(msg_c=='3'){ printf("1> ASCII\r\n"); printf("2> BINARY\r\n"); while(1){ msg_c=ftp_getc(); if(msg_c=='1'){ sprintf(dat,"TYPE %c\r\n", TransferAscii); ftpc.type = ASCII_TYPE; send(CTRL_SOCK, (uint8_t *)dat, strlen(dat)); break; } else if(msg_c=='2'){ sprintf(dat,"TYPE %c\r\n", TransferBinary); ftpc.type = IMAGE_TYPE; send(CTRL_SOCK, (uint8_t *)dat, strlen(dat)); break; } else{ printf("\r\nRetry...\r\n"); } } break; } else if(msg_c=='4'){ printf("1> ACTIVE\r\n"); printf("2> PASSIVE\r\n"); while(1){ msg_c=ftp_getc(); if(msg_c=='1'){ ftpc.dsock_mode=ACTIVE_MODE; break; } else if(msg_c=='2'){ ftpc.dsock_mode=PASSIVE_MODE; break; } else{ printf("\r\nRetry...\r\n"); } } gMenuStart = 1; break; } #if defined(F_FILESYSTEM) else if(msg_c=='7'){ printf(">del filename?"); sprintf(ftpc.filename, "/%s\r\n", User_Keyboard_MSG()); if (f_unlink((const char *)ftpc.filename) != 0){ printf("\r\nCould not delete.\r\n"); } else{ printf("\r\nDeleted.\r\n"); } gMenuStart = 1; break; } #endif else{ printf("\r\nRetry...\r\n"); } }