Fri, 08 Nov 2019 22:40:15 +0100
Increaded stacksize for the user process. Implemented the network update using the proven brewboard code. Reverted the lock release and display sendbuffer lines to the previous code. The networks status screen uses the wifi lock.
/** * @file config.c * @brief BrewBoard configuration files. */ #include "config.h" static const char *TAG = "config"; unit_t units[3]; ///< Pressure test units SemaphoreHandle_t xSemaphoreUnits = NULL; ///< Semaphore Units records void write_config() { uint8_t *dst = (uint8_t *)&config; FILE *f = fopen("/spiffs/etc/config.conf", "w+"); if (f == NULL) { ESP_LOGE(TAG, "write /spiffs/etc/config.conf failed"); return; } size_t bytes = fwrite(dst, 1, sizeof(config), f); fclose(f); if (bytes != sizeof(config)) { ESP_LOGE(TAG, "/spiffs/etc/config.conf written %d/%d bytes", bytes, sizeof(config)); } else { ESP_LOGI(TAG, "/spiffs/etc/config.conf written %d bytes", bytes); } } void read_config() { uint8_t *dst; uint8_t mac_addr[8] = {0}; FILE *f = fopen("/spiffs/etc/config.conf", "r"); if (f == NULL) { // No configuration yet, create it. esp_efuse_mac_get_default(mac_addr); config.Version = 1; sprintf(config.hostname, "co2meter-%02x%02x%02x", mac_addr[3], mac_addr[4], mac_addr[5]); config.mqtt_server[0] = '\0'; config.mqtt_port = 1883; config.mqtt_user[0] = '\0'; config.mqtt_pwd[0] = '\0'; sprintf(config.uuid, "c0ffeeee-dead-beef-cafe-%02x%02x%02x%02x%02x%02x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); write_config(); } else { dst = (uint8_t*)&config; size_t bytes = fread(dst, 1, sizeof(config), f); fclose(f); ESP_LOGI(TAG, "/spiffs/etc/config.conf read %d bytes", bytes); } } void write_units() { uint8_t *dst = (uint8_t *)&units; FILE *f = fopen("/spiffs/etc/units.conf", "w+"); if (f == NULL) { ESP_LOGE(TAG, "write /spiffs/etc/units.conf failed"); return; } size_t bytes = fwrite(dst, 1, sizeof(units), f); fclose(f); if (bytes != sizeof(units)) { ESP_LOGE(TAG, "/spiffs/etc/units.conf written %d/%d bytes", bytes, sizeof(units)); } else { ESP_LOGI(TAG, "/spiffs/etc/units.conf written %d bytes", bytes); } } void read_units() { uint8_t *dst; uint8_t mac_addr[8] = {0}; FILE *f = fopen("/spiffs/etc/units.conf", "r"); if (f == NULL) { // No units yet, create them. esp_efuse_mac_get_default(mac_addr); for (int i = 0; i < 3; i++) { memset(&units[i], 0, sizeof(unit_t)); sprintf(units[i].uuid, "c0ffeeee-dead-beef-caf%d-%02x%02x%02x%02x%02x%02x", i & 3, mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); sprintf(units[i].alias, "unit%d", (i + 1) & 3); } write_units(); } else { dst = (uint8_t*)&units; size_t bytes = fread(dst, 1, sizeof(units), f); fclose(f); ESP_LOGI(TAG, "/spiffs/etc/units.conf read %d bytes", bytes); for (int i = 0; i < 3; i++) ESP_LOGI(TAG, "%d %s %d %4d %3d", i, units[i].alias, units[i].pressure_channel, units[i].pressure_voltage, units[i].pressure_zero); } } int add_station(uint8_t *SSID, uint8_t *Password) { FILE *f; uint8_t *dst = (uint8_t *)&wifiStation; if (read_station(SSID) >= 0) { ESP_LOGE(TAG, "add_station %s already excists", SSID); return -1; } f = fopen("/spiffs/etc/stations.conf", "a+"); if (f == NULL) { ESP_LOGE(TAG, "write /spiffs/etc/stations.conf failed"); return -1; } memset(dst, 0, sizeof(wifiStation)); sprintf(wifiStation.SSID, "%s", (char *)SSID); sprintf(wifiStation.Password, "%s", (char *)Password); wifiStation.hide = false; fwrite(dst, 1, sizeof(wifiStation), f); fclose(f); ESP_LOGI(TAG, "add_station %s record: %d", (char *)SSID, read_station(SSID)); /* Return the record number */ return read_station(SSID); } int read_station(uint8_t *SSID) { uint8_t *dst = (uint8_t *)&wifiStation; static int rc; FILE *f; size_t bytes; if ((SSID == NULL) || (strlen((char *)SSID) == 0)) { ESP_LOGI(TAG, "read_station(NULL)"); return -1; } memset(dst, 0, sizeof(wifiStation)); f = fopen("/spiffs/etc/stations.conf", "r+"); if (f == NULL) { f = fopen("/spiffs/etc/stations.conf", "w+"); fclose(f); ESP_LOGI(TAG, "/spiffs/etc/stations.conf created, return -1"); return -1; } rc = 0; fseek(f, 0, SEEK_SET); while (1) { bytes = fread(dst, 1, sizeof(wifiStation), f); if (bytes < sizeof(wifiStation)) { fclose(f); memset(dst, 0, sizeof(wifiStation)); return -1; } if (strcmp(wifiStation.SSID, (char *)SSID) == 0) { // Fount it fclose(f); return rc; } rc++; } return -1; } void remove_station(uint8_t *SSID) { FILE *n, *o; uint8_t *dst; size_t bytes; n = fopen("/spiffs/etc/stations.new", "a"); if (n == NULL) { ESP_LOGE(TAG, "cannot create /spiffs/etc/stations.new"); return; } o = fopen("/spiffs/etc/stations.conf", "r"); if (o == NULL) { ESP_LOGE(TAG, "cannot open spiffs/etc/stations.conf for reading"); fclose(n); return; } dst = (uint8_t*)&wifiStation; while (true) { bytes = fread(dst, 1, sizeof(wifiStation), o); if (bytes == 0) break; if ((strcmp((char *)SSID, wifiStation.SSID) == 0) || (strlen(wifiStation.SSID) == 0)) { // Record to delete, don't copy } else { fwrite(dst, 1, sizeof(wifiStation), n); } } fclose(o); fclose(n); rename("/spiffs/etc/stations.conf", "/spiffs/etc/stations.old"); rename("/spiffs/etc/stations.new", "/spiffs/etc/stations.conf"); unlink("/spiffs/etc/stations.old"); }