Skip to content

Commit

Permalink
Merge pull request #11 from Forairaaaaa/add-nvs-format-to-factory-reset
Browse files Browse the repository at this point in the history
fix network config stack overflow
  • Loading branch information
Forairaaaaa authored Jun 21, 2024
2 parents 4583ba7 + c21caf5 commit 8ff2200
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 99 deletions.
2 changes: 1 addition & 1 deletion app/hal/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ namespace OTA_UPGRADE
/* -------------------------------------------------------------------------- */
typedef std::function<void(const std::string& log, bool pushScreen, bool clear)> OnLogPageRenderCallback_t;

#define APP_VERSION "V1.1.2"
#define APP_VERSION "V1.1.3"

/* -------------------------------------------------------------------------- */
/* NVS keys */
Expand Down
7 changes: 5 additions & 2 deletions platforms/vameter/main/hal_vameter/components/hal_fs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ void HAL_VAMeter::_backup_config_file()
{
spdlog::info("create config backup");

// _print_stack_high_water_mark();

// Config
spdlog::info("open {}", _system_config_path);
FILE* config_file = fopen(_system_config_path, "rb");
Expand All @@ -205,12 +207,13 @@ void HAL_VAMeter::_backup_config_file()
}

// Copy and save
char buffer[1024];
char* buffer = new char[1024];
size_t bytesRead;
while ((bytesRead = fread(buffer, 1, sizeof(buffer), config_file)) > 0)
while ((bytesRead = fread(buffer, 1, 1024, config_file)) > 0)
{
fwrite(buffer, 1, bytesRead, config_backup_file);
}
delete[] buffer;

fclose(config_file);
fclose(config_backup_file);
Expand Down
55 changes: 34 additions & 21 deletions platforms/vameter/main/hal_vameter/components/hal_web_server.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/*
* SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
*
* SPDX-License-Identifier: MIT
*/
* SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
*
* SPDX-License-Identifier: MIT
*/
#include "../hal_vameter.h"
#include "../hal_config.h"
#include "../../../app/assets/assets.h"
Expand Down Expand Up @@ -113,6 +113,13 @@ void HAL_VAMeter::_web_server_page_loading()
});
}

void HAL_VAMeter::_print_stack_high_water_mark()
{
TaskHandle_t task_handle = xTaskGetCurrentTaskHandle();
UBaseType_t stack_high_water_mark = uxTaskGetStackHighWaterMark(task_handle);
spdlog::info("Stack high water mark: {} bytes", stack_high_water_mark * sizeof(StackType_t));
}

/* -------------------------------------------------------------------------- */
/* Normal apis */
/* -------------------------------------------------------------------------- */
Expand All @@ -134,28 +141,34 @@ void HAL_VAMeter::_web_server_api_loading()
// spdlog::info("get json:\n{}", request->body().c_str());
spdlog::info("handle set config");

// _print_stack_high_water_mark();

// Parse
JsonDocument doc;
DeserializationError error = deserializeJson(doc, request->body().c_str());
if (error != DeserializationError::Ok)
{
spdlog::error("json parse failed");
spdlog::error("get:\n{}", request->body().c_str());
return request->reply(500, "application/json", "{\"msg\":\"json parse failed\"}");
}
JsonDocument doc;
DeserializationError error = deserializeJson(doc, request->body().c_str());
if (error != DeserializationError::Ok)
{
spdlog::error("json parse failed");
spdlog::error("get:\n{}", request->body().c_str());
return request->reply(500, "application/json", "{\"msg\":\"json parse failed\"}");
}

// Copy
std::string string_buffer;
// Copy
std::string string_buffer;

string_buffer = doc["wifiSsid"].as<std::string>();
if (string_buffer != "null")
_config.wifiSsid = string_buffer;

string_buffer = doc["wifiSsid"].as<std::string>();
if (string_buffer != "null")
_config.wifiSsid = string_buffer;
string_buffer = doc["wifiPassword"].as<std::string>();
if (string_buffer != "null")
_config.wifiPassword = string_buffer;

string_buffer = doc["wifiPassword"].as<std::string>();
if (string_buffer != "null")
_config.wifiPassword = string_buffer;
// ...
}

// ...
// _print_stack_high_water_mark();

saveSystemConfig();

Expand Down Expand Up @@ -279,7 +292,7 @@ bool HAL_VAMeter::startWebServer(OnLogPageRenderCallback_t onLogPageRender, bool

_web_server_page_loading();
_web_server_api_loading();
_web_server_ws_api_loading();
// _web_server_ws_api_loading();
}

spdlog::info("web server started");
Expand Down
1 change: 1 addition & 0 deletions platforms/vameter/main/hal_vameter/hal_vameter.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class HAL_VAMeter : public HAL
void _web_server_page_loading();
void _web_server_api_loading();
void _web_server_ws_api_loading();
void _print_stack_high_water_mark();

public:
inline std::string type() override { return "VAMeter"; }
Expand Down
150 changes: 75 additions & 75 deletions platforms/vameter/sdkconfig
Original file line number Diff line number Diff line change
Expand Up @@ -1936,6 +1936,45 @@ CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y
# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set
# end of Wi-Fi Provisioning Manager

#
# ESP Insights
#
# CONFIG_ESP_INSIGHTS_ENABLED is not set
# CONFIG_ESP_INSIGHTS_TRANSPORT_MQTT is not set
CONFIG_ESP_INSIGHTS_TRANSPORT_HTTPS=y
CONFIG_ESP_INSIGHTS_TRANSPORT_HTTPS_HOST="https://client.insights.espressif.com"
CONFIG_ESP_INSIGHTS_CLOUD_POST_MIN_INTERVAL_SEC=60
CONFIG_ESP_INSIGHTS_CLOUD_POST_MAX_INTERVAL_SEC=240
CONFIG_ESP_INSIGHTS_META_VERSION_10=y
# end of ESP Insights

#
# LittleFS
#
# CONFIG_LITTLEFS_SDMMC_SUPPORT is not set
CONFIG_LITTLEFS_MAX_PARTITIONS=3
CONFIG_LITTLEFS_PAGE_SIZE=256
CONFIG_LITTLEFS_OBJ_NAME_LEN=64
CONFIG_LITTLEFS_READ_SIZE=128
CONFIG_LITTLEFS_WRITE_SIZE=128
CONFIG_LITTLEFS_LOOKAHEAD_SIZE=128
CONFIG_LITTLEFS_CACHE_SIZE=512
CONFIG_LITTLEFS_BLOCK_CYCLES=512
CONFIG_LITTLEFS_USE_MTIME=y
# CONFIG_LITTLEFS_USE_ONLY_HASH is not set
# CONFIG_LITTLEFS_HUMAN_READABLE is not set
CONFIG_LITTLEFS_MTIME_USE_SECONDS=y
# CONFIG_LITTLEFS_MTIME_USE_NONCE is not set
# CONFIG_LITTLEFS_SPIFFS_COMPAT is not set
# CONFIG_LITTLEFS_FLUSH_FILE_EVERY_WRITE is not set
# CONFIG_LITTLEFS_FCNTL_GET_PATH is not set
# CONFIG_LITTLEFS_MULTIVERSION is not set
# CONFIG_LITTLEFS_MALLOC_STRATEGY_DISABLE is not set
CONFIG_LITTLEFS_MALLOC_STRATEGY_DEFAULT=y
# CONFIG_LITTLEFS_MALLOC_STRATEGY_INTERNAL is not set
CONFIG_LITTLEFS_ASSERTS=y
# end of LittleFS

#
# TinyUSB Stack
#
Expand Down Expand Up @@ -2020,30 +2059,10 @@ CONFIG_TINYUSB_NET_MODE_NONE=y
# end of TinyUSB Stack

#
# ESP RainMaker Common
# Zigbee
#
CONFIG_ESP_RMAKER_LIB_ESP_MQTT=y
# CONFIG_ESP_RMAKER_LIB_AWS_IOT is not set
CONFIG_ESP_RMAKER_MQTT_GLUE_LIB=1
CONFIG_ESP_RMAKER_MQTT_PORT_443=y
# CONFIG_ESP_RMAKER_MQTT_PORT_8883 is not set
CONFIG_ESP_RMAKER_MQTT_PORT=1
# CONFIG_ESP_RMAKER_MQTT_PERSISTENT_SESSION is not set
CONFIG_ESP_RMAKER_MQTT_SEND_USERNAME=y
CONFIG_ESP_RMAKER_MQTT_PRODUCT_NAME="RMDev"
CONFIG_ESP_RMAKER_MQTT_PRODUCT_VERSION="1x0"
CONFIG_ESP_RMAKER_MQTT_PRODUCT_SKU="EX00"
CONFIG_ESP_RMAKER_MQTT_USE_CERT_BUNDLE=y
CONFIG_ESP_RMAKER_MAX_MQTT_SUBSCRIPTIONS=10
CONFIG_ESP_RMAKER_NETWORK_OVER_WIFI=y
CONFIG_ESP_RMAKER_WORK_QUEUE_TASK_STACK=4096
CONFIG_ESP_RMAKER_WORK_QUEUE_TASK_PRIORITY=5
CONFIG_ESP_RMAKER_FACTORY_PARTITION_NAME="fctry"
CONFIG_ESP_RMAKER_FACTORY_NAMESPACE="rmaker_creds"
CONFIG_ESP_RMAKER_DEF_TIMEZONE="Asia/Shanghai"
CONFIG_ESP_RMAKER_SNTP_SERVER_NAME="pool.ntp.org"
CONFIG_ESP_RMAKER_MAX_COMMANDS=10
# end of ESP RainMaker Common
# CONFIG_ZB_ENABLED is not set
# end of Zigbee

#
# mDNS
Expand Down Expand Up @@ -2090,12 +2109,6 @@ CONFIG_RTC_STORE_CRITICAL_DATA_SIZE=4096
# end of RTC Store
# end of Diagnostics data store

#
# Zigbee
#
# CONFIG_ZB_ENABLED is not set
# end of Zigbee

#
# jsmn
#
Expand All @@ -2104,6 +2117,32 @@ CONFIG_RTC_STORE_CRITICAL_DATA_SIZE=4096
# CONFIG_JSMN_STATIC is not set
# end of jsmn

#
# ESP RainMaker Common
#
CONFIG_ESP_RMAKER_LIB_ESP_MQTT=y
# CONFIG_ESP_RMAKER_LIB_AWS_IOT is not set
CONFIG_ESP_RMAKER_MQTT_GLUE_LIB=1
CONFIG_ESP_RMAKER_MQTT_PORT_443=y
# CONFIG_ESP_RMAKER_MQTT_PORT_8883 is not set
CONFIG_ESP_RMAKER_MQTT_PORT=1
# CONFIG_ESP_RMAKER_MQTT_PERSISTENT_SESSION is not set
CONFIG_ESP_RMAKER_MQTT_SEND_USERNAME=y
CONFIG_ESP_RMAKER_MQTT_PRODUCT_NAME="RMDev"
CONFIG_ESP_RMAKER_MQTT_PRODUCT_VERSION="1x0"
CONFIG_ESP_RMAKER_MQTT_PRODUCT_SKU="EX00"
CONFIG_ESP_RMAKER_MQTT_USE_CERT_BUNDLE=y
CONFIG_ESP_RMAKER_MAX_MQTT_SUBSCRIPTIONS=10
CONFIG_ESP_RMAKER_NETWORK_OVER_WIFI=y
CONFIG_ESP_RMAKER_WORK_QUEUE_TASK_STACK=4096
CONFIG_ESP_RMAKER_WORK_QUEUE_TASK_PRIORITY=5
CONFIG_ESP_RMAKER_FACTORY_PARTITION_NAME="fctry"
CONFIG_ESP_RMAKER_FACTORY_NAMESPACE="rmaker_creds"
CONFIG_ESP_RMAKER_DEF_TIMEZONE="Asia/Shanghai"
CONFIG_ESP_RMAKER_SNTP_SERVER_NAME="pool.ntp.org"
CONFIG_ESP_RMAKER_MAX_COMMANDS=10
# end of ESP RainMaker Common

#
# DSP Library
#
Expand All @@ -2121,52 +2160,6 @@ CONFIG_DSP_MAX_FFT_SIZE_4096=y
CONFIG_DSP_MAX_FFT_SIZE=4096
# end of DSP Library

#
# ESP Insights
#
# CONFIG_ESP_INSIGHTS_ENABLED is not set
# CONFIG_ESP_INSIGHTS_TRANSPORT_MQTT is not set
CONFIG_ESP_INSIGHTS_TRANSPORT_HTTPS=y
CONFIG_ESP_INSIGHTS_TRANSPORT_HTTPS_HOST="https://client.insights.espressif.com"
CONFIG_ESP_INSIGHTS_CLOUD_POST_MIN_INTERVAL_SEC=60
CONFIG_ESP_INSIGHTS_CLOUD_POST_MAX_INTERVAL_SEC=240
CONFIG_ESP_INSIGHTS_META_VERSION_10=y
# end of ESP Insights

#
# ESP Secure Cert Manager
#
CONFIG_ESP_SECURE_CERT_DS_PERIPHERAL=y
# CONFIG_ESP_SECURE_CERT_SUPPORT_LEGACY_FORMATS is not set
# end of ESP Secure Cert Manager

#
# LittleFS
#
# CONFIG_LITTLEFS_SDMMC_SUPPORT is not set
CONFIG_LITTLEFS_MAX_PARTITIONS=3
CONFIG_LITTLEFS_PAGE_SIZE=256
CONFIG_LITTLEFS_OBJ_NAME_LEN=64
CONFIG_LITTLEFS_READ_SIZE=128
CONFIG_LITTLEFS_WRITE_SIZE=128
CONFIG_LITTLEFS_LOOKAHEAD_SIZE=128
CONFIG_LITTLEFS_CACHE_SIZE=512
CONFIG_LITTLEFS_BLOCK_CYCLES=512
CONFIG_LITTLEFS_USE_MTIME=y
# CONFIG_LITTLEFS_USE_ONLY_HASH is not set
# CONFIG_LITTLEFS_HUMAN_READABLE is not set
CONFIG_LITTLEFS_MTIME_USE_SECONDS=y
# CONFIG_LITTLEFS_MTIME_USE_NONCE is not set
# CONFIG_LITTLEFS_SPIFFS_COMPAT is not set
# CONFIG_LITTLEFS_FLUSH_FILE_EVERY_WRITE is not set
# CONFIG_LITTLEFS_FCNTL_GET_PATH is not set
# CONFIG_LITTLEFS_MULTIVERSION is not set
# CONFIG_LITTLEFS_MALLOC_STRATEGY_DISABLE is not set
CONFIG_LITTLEFS_MALLOC_STRATEGY_DEFAULT=y
# CONFIG_LITTLEFS_MALLOC_STRATEGY_INTERNAL is not set
CONFIG_LITTLEFS_ASSERTS=y
# end of LittleFS

#
# Diagnostics
#
Expand All @@ -2184,6 +2177,13 @@ CONFIG_DIAG_ENABLE_NETWORK_VARIABLES=y
# CONFIG_DIAG_MORE_NETWORK_VARS is not set
# CONFIG_DIAG_USE_EXTERNAL_LOG_WRAP is not set
# end of Diagnostics

#
# ESP Secure Cert Manager
#
CONFIG_ESP_SECURE_CERT_DS_PERIPHERAL=y
# CONFIG_ESP_SECURE_CERT_SUPPORT_LEGACY_FORMATS is not set
# end of ESP Secure Cert Manager
# end of Component config

# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set
Expand Down

0 comments on commit 8ff2200

Please sign in to comment.