You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

134 lines
3.6 KiB

#include "config.h"
#include <lwip/sockets.h>
#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;
}