void W5500_Init() { uint8_t memsize[2][8] = { { 2, 2, 2, 2, 2, 2, 2, 2 }, { 2, 2, 2, 2, 2, 2, 2, 2 } }; Chip_GPIO_SetPinState(LPC_GPIO, 0, 2, true); // SSEL(CS) Chip_GPIO_SetPinState(LPC_GPIO, 0, 22, false); // N_RESET delay_cnt(1000); Chip_GPIO_SetPinState(LPC_GPIO, 0, 22, true); // N_RESET reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect); reg_wizchip_spi_cbfunc(wizchip_read, wizchip_write); reg_wizchip_spiburst_cbfunc(wizchip_readburst, wizchip_writeburst); /* wizchip initialize*/ if (ctlwizchip(CW_INIT_WIZCHIP, (void*) memsize) == -1) { //printf("WIZCHIP Initialized fail.\r\n"); while (1); } /* For Delay */ delay_cnt(10000); setRCR(3); }
static void process_set_info(uint8_t sock, Remote_Info *remote_info, WIZnet_Header *wiznet_header) { uint16_t len; uint8_t buffer[sizeof(WIZnet_Header) + sizeof(WIZnet_Set_Info_Reply)]; uint32_t ptr; WIZnet_Set_Info set_info; WIZnet_Set_Info_Reply reply; S2E_Packet *s2e_packet = get_S2E_Packet_pointer(); uint8_t ip[4]; uint16_t port; getsockopt(sock, SO_REMAINSIZE, &len); if(len != wiznet_header->length) return; recvfrom(sock, (uint8_t *)&set_info, sizeof(WIZnet_Set_Info), ip, &port); if((wiznet_header->valid & 0x80)) decrypt((wiznet_header->valid & 0x7F), (uint8_t *)&set_info, len); if(memcmp(set_info.dst_mac_address, s2e_packet->network_info_common.mac, 6)) return; if(strcmp((char *)set_info.set_pw, (char *)s2e_packet->options.pw_setting)) return; //update config msg set_S2E_Packet_value(s2e_packet, &set_info.system_info, sizeof(S2E_Packet)); s2e_packet->fw_ver[0] = MAJOR_VER; s2e_packet->fw_ver[1] = MINOR_VER; s2e_packet->fw_ver[2] = MAINTENANCE_VER; //save to storage save_S2E_Packet_to_storage(); // reply wiznet_header->length = sizeof(WIZnet_Set_Info_Reply); wiznet_header->op_code[1] = WIZNET_REPLY; memcpy(reply.src_mac_address, s2e_packet->network_info_common.mac, 6); memcpy(&reply.system_info, s2e_packet, sizeof(S2E_Packet)); if((wiznet_header->valid & 0x80)) encrypt((wiznet_header->valid & 0x7F), (uint8_t *)&reply, sizeof(WIZnet_Set_Info_Reply)); ptr = 0; memcpy(buffer, wiznet_header, sizeof(WIZnet_Header)); ptr += sizeof(WIZnet_Header); memcpy(buffer + ptr, (void *)&reply, sizeof(WIZnet_Set_Info_Reply)); ptr += sizeof(WIZnet_Set_Info_Reply); if(wiznet_header->unicast == 0) { memset(remote_info->ip, 255, 4); } sendto(sock, buffer, ptr, remote_info->ip, remote_info->port); delay_cnt(100); NVIC_SystemReset(); }
static void process_factory_reset(uint8_t sock, Remote_Info *remote_info, WIZnet_Header *wiznet_header) { uint16_t len; uint8_t buffer[sizeof(WIZnet_Header) + sizeof(WIZnet_Factory_Reset_Reply)]; uint32_t ptr; WIZnet_Factory_Reset factory_reset; WIZnet_Factory_Reset_Reply reply; S2E_Packet *s2e_packet = get_S2E_Packet_pointer(); uint8_t ip[4]; uint16_t port; getsockopt(sock, SO_REMAINSIZE, &len); if(len != wiznet_header->length) return; recvfrom(sock, (uint8_t *)&factory_reset, sizeof(WIZnet_Factory_Reset), ip, &port); if((wiznet_header->valid & 0x80)) decrypt((wiznet_header->valid & 0x7F), (uint8_t *)&factory_reset, len); if(memcmp(factory_reset.dst_mac_address, s2e_packet->network_info_common.mac, 6)) return; if(strcmp((char *)factory_reset.set_pw, (char *)s2e_packet->options.pw_setting)) return; // set factory value set_S2E_Packet_to_factory_value(); save_S2E_Packet_to_storage(); // reply wiznet_header->length = sizeof(WIZnet_Reset_Reply); wiznet_header->op_code[1] = WIZNET_REPLY; memcpy(reply.src_mac_address, s2e_packet->network_info_common.mac, 6); if((wiznet_header->valid & 0x80)) encrypt((wiznet_header->valid & 0x7F), (uint8_t *)&reply, sizeof(WIZnet_Factory_Reset_Reply)); ptr = 0; memcpy(buffer, wiznet_header, sizeof(WIZnet_Header)); ptr += sizeof(WIZnet_Header); memcpy(buffer + ptr, (void *)&reply, sizeof(WIZnet_Factory_Reset_Reply)); ptr += sizeof(WIZnet_Factory_Reset_Reply); if(wiznet_header->unicast == 0) { memset(remote_info->ip, 255, 4); } sendto(sock, buffer, ptr, remote_info->ip, remote_info->port); // Reboot to bootloader delay_cnt(100); NVIC_SystemReset(); }
int main(void) { #if defined (__USE_LPCOPEN) #if !defined(NO_BOARD_LIB) // Read clock settings and update SystemCoreClock variable SystemCoreClockUpdate(); // Set up and initialize all required blocks and // functions related to the board hardware Board_Init(); // Set the LED to the state of "On" Board_LED_Set(0, true); #endif #endif uint8_t ip[4] = {0,}; uint8_t gw[4] = {0,}; uint8_t sn[4] = {0,}; uint8_t dns[4] = {0,}; SPI_Init(); W5500_Init(); //Net_Conf(); // if ( SOCK_TCPS0 == socket(SOCK_TCPS1,Sn_MR_UDP,DHCP_CLIENT_PORT,0) ){ // printf("%d Socket open\n\r", SOCK_TCPS1); // } DHCP_init(SOCK_TCPS0, gDATABUF); while (DHCP_run() != DHCP_IP_LEASED) printf("."),delay_cnt(10000); printf("\r\n"); Board_LED_Set(0, false); Board_LED_Set(1, true); getIPfromDHCP(ip); getGWfromDHCP(gw); getSNfromDHCP(sn); getDNSfromDHCP(dns); printf("< DHCP IP Leased!! >\r\n"); //printf("MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n", DHCP_CHADDR[0], DHCP_CHADDR[1], DHCP_CHADDR[2], DHCP_CHADDR[3], DHCP_CHADDR[4], DHCP_CHADDR[0]); printf("IP : %3d.%3d.%3d.%3d\r\n", ip[0], ip[1], ip[2], ip[3]); printf("GW : %3d.%3d.%3d.%3d\r\n", gw[0], gw[1], gw[2], gw[3]); printf("SN : %3d.%3d.%3d.%3d\r\n", sn[0], sn[1], sn[2], sn[3]); printf("DNS : %3d.%3d.%3d.%3d\r\n", dns[0], dns[1], dns[2], dns[3]); DHCP_stop(); DNS_Query(); while(1) { } return 0 ; }
static void process_firmware_upload_init(uint8_t sock, Remote_Info *remote_info, WIZnet_Header *wiznet_header) { S2E_Packet *value = get_S2E_Packet_pointer(); struct __network_info_common tmp; uint16_t len; WIZnet_Firmware_Upload_Init firmware_upload; uint8_t buffer[sizeof(WIZnet_Header) + sizeof(WIZnet_Firmware_Upload_Done_Reply)]; uint32_t ptr; WIZnet_Firmware_Upload_Init_Reply reply; Firmware_Upload_Info firmware_upload_info; S2E_Packet *s2e_packet = get_S2E_Packet_pointer(); uint8_t ip[4]; uint16_t port; getsockopt(sock, SO_REMAINSIZE, &len); if(len != wiznet_header->length) return; recvfrom(sock, (uint8_t *)&firmware_upload, sizeof(WIZnet_Firmware_Upload_Init), ip, &port); if(wiznet_header->op_code[0] != FIRMWARE_UPLOAD_INIT) return; if((wiznet_header->valid & 0x80)) decrypt((wiznet_header->valid & 0x7F), (uint8_t *)&firmware_upload, len); if(memcmp(firmware_upload.dst_mac_address, s2e_packet->network_info_common.mac, 6)) return; if(strcmp((char *)firmware_upload.set_pw, (char *)s2e_packet->options.pw_setting)) return; /* Storee Current Network Information (For DHCP) */ memcpy(&tmp, &(value->network_info_common), sizeof(struct __network_info_common)); load_S2E_Packet_from_storage(); memcpy(&(value->network_info_common), &tmp, sizeof(struct __network_info_common)); save_S2E_Packet_to_storage(); //write the TFTP server ip, port, filename and etc. to storage memcpy(&firmware_upload_info.wiznet_header , wiznet_header , sizeof(WIZnet_Header)); memcpy(&firmware_upload_info.configtool_info , remote_info , sizeof(Remote_Info)); memcpy(firmware_upload_info.tftp_info.ip , (uint8_t *) (firmware_upload.server_ip) , sizeof(uint8_t)*4); memcpy((uint8_t *)&(firmware_upload_info.tftp_info.port) , (uint8_t *)&(firmware_upload.server_port), sizeof(uint8_t)*2); memcpy(firmware_upload_info.filename , (uint8_t *) (firmware_upload.file_name) , sizeof(uint8_t)*50); write_storage(0, &firmware_upload_info, sizeof(Firmware_Upload_Info)); // reply wiznet_header->length = sizeof(WIZnet_Firmware_Upload_Init_Reply); wiznet_header->op_code[1] = WIZNET_REPLY; memcpy(reply.src_mac_address, s2e_packet->network_info_common.mac, 6); if((wiznet_header->valid & 0x80)) encrypt((wiznet_header->valid & 0x7F), (uint8_t *)&reply, sizeof(WIZnet_Firmware_Upload_Init_Reply)); ptr = 0; memcpy(buffer, wiznet_header, sizeof(WIZnet_Header)); ptr += sizeof(WIZnet_Header); memcpy(buffer + ptr, (void *)&reply, sizeof(WIZnet_Firmware_Upload_Init_Reply)); ptr += sizeof(WIZnet_Firmware_Upload_Init_Reply); if(wiznet_header->unicast == 0) { memset(remote_info->ip, 255, 4); } sendto(sock, buffer, ptr, remote_info->ip, remote_info->port); // Reboot to bootloader delay_cnt(100); NVIC_SystemReset(); }