#include "config.h" #include #include "lwip/api.h" #include "lwip/opt.h" #include "lwip/sys.h" #include "zflash.h" #include "zboard.h" #define CONFIG_SIZE ((sizeof(config_t) / 4) + ((sizeof(config_t) % 4) > 0 ? 1 : 0)) static config_t s_config; static bool s_is_first_init = false; void config_init(void) { #if 1 IP4_ADDR((ip4_addr_t *)&s_config.ip, 192, 168, 8, 10); IP4_ADDR((ip4_addr_t *)&s_config.gw, 192, 168, 8, 1); IP4_ADDR((ip4_addr_t *)&s_config.netmask, 255, 255, 255, 0); s_config.localport = SERVICE_PORT; s_config.obtaining_ip_mode = OBTAINING_IP_MODE_DHCP; // dhcp s_config.mask = 1; // #endif if (config_flash_write() < 0) { printf("flash write config error\r\n"); } else { printf("flash write config success\r\n"); } config_flash_read(); /*dumpconfig*/ config_dump_config(); } bool config_is_first_init(void) { return s_is_first_init; } void config_dump_config(void) { printf("=================config================\r\n"); printf("= config obtaining_ip_mode %u\r\n", s_config.obtaining_ip_mode); printf("= config ip %s\r\n", inet_ntoa(s_config.ip)); printf("= config gw: %s\r\n", inet_ntoa(s_config.gw)); printf("= config netmask: %s\r\n", inet_ntoa(s_config.netmask)); printf("= config localport: %u\r\n", s_config.localport); } bool config_update(void) { // if (stmflash_write(FLASH_SAVE_ADDR, (uint32_t *)&s_config, CONFIG_SIZE) < 0) // { // printf("flash write config error\r\n"); // return false; // } // config_dump_config(); return true; } void config_flash_read(void) { uint32_t config_flash_write_start_address = FLASH_START_ADDRESS; printf("=================read================\r\n"); printf("mask: %d\r\n", FlashRead(config_flash_write_start_address + 0)); printf("obtaining_ip_mode: %d\r\n", FlashRead(config_flash_write_start_address + 4)); printf("ip: %d\r\n", FlashRead(config_flash_write_start_address + 8)); printf("gw: %d\r\n", FlashRead(config_flash_write_start_address + 12)); printf("netmask: %d\r\n", FlashRead(config_flash_write_start_address + 16)); printf("localport: %d\r\n", FlashRead(config_flash_write_start_address + 20)); } config_t *config_get(void) { return &s_config; } int8_t config_flash_write(void) { HAL_StatusTypeDef status; uint32_t config_flash_write_start_address = FLASH_START_ADDRESS; status = FlashErase(); if (status != HAL_OK) { printf("flash erase error, status:%d\r\n", status); return -1; } status = FlashWrite(config_flash_write_start_address + 0, s_config.mask); if (status != HAL_OK) { printf("flash write error, status:%d\r\n", status); return -2; } status = FlashWrite(config_flash_write_start_address + 4, s_config.obtaining_ip_mode); if (status != HAL_OK) { printf("flash write error, status:%d\r\n", status); return -3; } status = FlashWrite(config_flash_write_start_address + 8, s_config.ip); if (status != HAL_OK) { printf("flash write error, status:%d\r\n", status); return -4; } status = FlashWrite(config_flash_write_start_address + 12, s_config.gw); if (status != HAL_OK) { printf("flash write error, status:%d\r\n", status); return -5; } status = FlashWrite(config_flash_write_start_address + 16, s_config.netmask); if (status != HAL_OK) { printf("flash write error, status:%d\r\n", status); return -6; } status = FlashWrite(config_flash_write_start_address + 20, s_config.localport); if (status != HAL_OK) { printf("flash write error, status:%d\r\n", status); return -7; } return 0; }