Merge pull request #647 from ourairquality/libmain-save-wifi-params
libmain: add a compile option to avoid saving wifi params to flash
This commit is contained in:
commit
a8c60e0960
3 changed files with 60 additions and 4 deletions
|
@ -3,6 +3,9 @@ PROGRAM=sysparam_editor
|
|||
# Setting this to 1..3 will add extra debugging output to stdout
|
||||
EXTRA_CFLAGS = -DSYSPARAM_DEBUG=0
|
||||
|
||||
# Avoid writing the wifi state to flash when using wificfg.
|
||||
EXTRA_CFLAGS += -DWIFI_PARAM_SAVE=0
|
||||
|
||||
include ../../common.mk
|
||||
|
||||
# `make dump-flash` can be used to view the current contents of the sysparam
|
||||
|
|
|
@ -4,9 +4,12 @@ EXTRA_COMPONENTS=extras/dhcpserver extras/wificfg
|
|||
|
||||
# For the mDNS responder included under extras:
|
||||
# EXTRA_COMPONENTS += extras/mdnsresponder
|
||||
# EXTRA_CFLAGS=-DEXTRAS_MDNS_RESPONDER
|
||||
# EXTRA_CFLAGS += -DEXTRAS_MDNS_RESPONDER
|
||||
|
||||
# For the mDNS responder included with lwip:
|
||||
EXTRA_CFLAGS=-DLWIP_MDNS_RESPONDER=1 -DLWIP_NUM_NETIF_CLIENT_DATA=1 -DLWIP_NETIF_EXT_STATUS_CALLBACK=1
|
||||
EXTRA_CFLAGS += -DLWIP_MDNS_RESPONDER=1 -DLWIP_NUM_NETIF_CLIENT_DATA=1 -DLWIP_NETIF_EXT_STATUS_CALLBACK=1
|
||||
|
||||
# Avoid writing the wifi state to flash when using wificfg.
|
||||
EXTRA_CFLAGS += -DWIFI_PARAM_SAVE=0
|
||||
|
||||
include ../../common.mk
|
||||
|
|
|
@ -576,6 +576,56 @@ enum sdk_dhcp_status sdk_wifi_station_dhcpc_status(void) {
|
|||
return sdk_dhcpc_flag;
|
||||
}
|
||||
|
||||
|
||||
#ifndef WIFI_PARAM_SAVE
|
||||
#define WIFI_PARAM_SAVE 1
|
||||
#endif
|
||||
|
||||
#if WIFI_PARAM_SAVE
|
||||
static void wifi_save_protect(uint32_t sector, uint32_t sector_size, uint32_t *arg2, size_t size) {
|
||||
uint32_t *buffer = malloc(size);
|
||||
uint32_t offset = sector * sector_size;
|
||||
|
||||
do {
|
||||
sdk_spi_flash_erase_sector(sector);
|
||||
sdk_spi_flash_write(offset, arg2, size);
|
||||
sdk_spi_flash_read(offset, buffer, size);
|
||||
if (memcmp(buffer, arg2, size) == 0) {
|
||||
break;
|
||||
}
|
||||
printf("[W]sec %d error\n", sector);
|
||||
} while (1);
|
||||
|
||||
free(buffer);
|
||||
}
|
||||
#endif
|
||||
|
||||
void sdk_wifi_param_save_protect(struct sdk_g_ic_saved_st *params) {
|
||||
#if WIFI_PARAM_SAVE
|
||||
uint32_t sector_size = sdk_flashchip.sector_size;
|
||||
uint32_t sectors = sdk_flashchip.chip_size / sector_size;
|
||||
|
||||
uint32_t dir_sector = sectors - 1;
|
||||
struct param_dir_st dir;
|
||||
sdk_spi_flash_read(dir_sector * sector_size, (uint32_t *)&dir, sizeof(dir));
|
||||
uint8_t current_sector = dir.current_sector ? 1 : 0;
|
||||
dir.current_sector = current_sector;
|
||||
|
||||
uint32_t param_sector_start = sectors - 3;
|
||||
wifi_save_protect(param_sector_start + current_sector, sector_size,
|
||||
(uint32_t *)params, sizeof(struct sdk_g_ic_saved_st));
|
||||
|
||||
dir.cksum_magic = 0x55AA55AA;
|
||||
uint32_t save_count = dir.save_count + 1;
|
||||
dir.save_count = (save_count) ? save_count : 1;
|
||||
dir.cksum_len[current_sector] = sizeof(dir);
|
||||
uint32_t checksum = sdk_system_get_checksum((uint8_t *)params, sizeof(dir));
|
||||
dir.cksum_value[current_sector] = checksum;
|
||||
wifi_save_protect(dir_sector, sector_size, (uint32_t *)&dir, sizeof(dir));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
uint8_t sdk_wifi_station_get_connect_status() {
|
||||
if (sdk_wifi_get_opmode() == 2) // ESPCONN_AP
|
||||
return 0xff;
|
||||
|
|
Loading…
Reference in a new issue