WiFi and RAM optimizations
This commit is contained in:
15
README.md
15
README.md
@@ -198,18 +198,19 @@ ESP32 devices have a limited amount of free RAM available.<br>
|
|||||||
<br>
|
<br>
|
||||||
On version >=9.10 of Nuki Hub with only a Nuki Lock connected the expected free amount of RAM/Heap available is around:
|
On version >=9.10 of Nuki Hub with only a Nuki Lock connected the expected free amount of RAM/Heap available is around:
|
||||||
|
|
||||||
- ESP32: 70.000 bytes
|
- ESP32: 105.000 bytes
|
||||||
- ESP32 with PSRAM: 110.000 bytes + PSRAM
|
- ESP32 with PSRAM: 120.000 bytes + PSRAM
|
||||||
- ESP32-C3: 90.000 bytes
|
- ESP32-C3: 70.000 bytes
|
||||||
- ESP32-C5: 110.000 bytes
|
- ESP32-C5 with PSRAM: 130.000 bytes + PSRAM
|
||||||
- ESP32-C6: 200.000 bytes
|
- ESP32-C6: 200.000 bytes
|
||||||
- ESP32-S3 130.000 bytes
|
- ESP32-P4: 450.000 bytes
|
||||||
- ESP32-S3 with PSRAM: 180.000 bytes + PSRAM
|
- ESP32-S3 135.000 bytes
|
||||||
|
- ESP32-S3 with PSRAM: 185.000 bytes + PSRAM
|
||||||
|
|
||||||
This free amount of RAM can be reduced (temporarily) by certain actions (such as changing Nuki device config) or continuously when enabling the following:
|
This free amount of RAM can be reduced (temporarily) by certain actions (such as changing Nuki device config) or continuously when enabling the following:
|
||||||
- Connecting both a Nuki opener and a Nuki lock to Nuki Hub
|
- Connecting both a Nuki opener and a Nuki lock to Nuki Hub
|
||||||
- Enlarging stack sizes of the Nuki and Network task to accommodate large amounts of keypad codes, authorization entries or timecontrol entries
|
- Enlarging stack sizes of the Nuki and Network task to accommodate large amounts of keypad codes, authorization entries or timecontrol entries
|
||||||
- MQTT SSL (Costs about 30k RAM)
|
- MQTT SSL (Costs about 20k-30k RAM)
|
||||||
- HTTP SSL (Costs about 30k RAM)
|
- HTTP SSL (Costs about 30k RAM)
|
||||||
- Developing/debugging Nuki devices and/or Nuki Hub, using WebSerial (Costs about 30k RAM)
|
- Developing/debugging Nuki devices and/or Nuki Hub, using WebSerial (Costs about 30k RAM)
|
||||||
|
|
||||||
|
|||||||
@@ -306,6 +306,8 @@ String PsychicRequest::getCookie(const char* key)
|
|||||||
if (!hasCookie(key, &size))
|
if (!hasCookie(key, &size))
|
||||||
return cookie;
|
return cookie;
|
||||||
|
|
||||||
|
size = httpd_req_get_hdr_value_len(this->_req, "Cookie");
|
||||||
|
|
||||||
// allocate cookie buffer... keep it on the stack
|
// allocate cookie buffer... keep it on the stack
|
||||||
char buf[size];
|
char buf[size];
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ build_flags =
|
|||||||
extends = env:esp32
|
extends = env:esp32
|
||||||
board = esp32-c3-devkitc-02
|
board = esp32-c3-devkitc-02
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.singlecore.defaults"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.singlecore.defaults;sdkconfig.ramoptimize.defaults"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env.build_flags}
|
${env.build_flags}
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE
|
||||||
@@ -110,32 +110,32 @@ build_flags =
|
|||||||
extends = env:esp32
|
extends = env:esp32
|
||||||
board = nuki-esp32-s3
|
board = nuki-esp32-s3
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.defaults.esp32-s3"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-s3"
|
||||||
|
|
||||||
[env:esp32-s3-nopsram]
|
[env:esp32-s3-nopsram]
|
||||||
extends = env:esp32
|
extends = env:esp32
|
||||||
board = nuki-esp32-s3-nopsram
|
board = nuki-esp32-s3-nopsram
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.defaults.esp32-s3-nopsram"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-s3-nopsram"
|
||||||
|
|
||||||
[env:esp32-s3-oct]
|
[env:esp32-s3-oct]
|
||||||
extends = env:esp32
|
extends = env:esp32
|
||||||
board = nuki-esp32-s3-oct
|
board = nuki-esp32-s3-oct
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.defaults.esp32-s3-oct"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-s3-oct"
|
||||||
|
|
||||||
[env:esp32-c5]
|
[env:esp32-c5]
|
||||||
extends = env:esp32
|
extends = env:esp32
|
||||||
board_build.partitions = partitions_c5.csv
|
board_build.partitions = partitions_c5.csv
|
||||||
board = nuki-esp32-c5
|
board = nuki-esp32-c5
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.defaults.esp32-c5;sdkconfig.singlecore.defaults"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.singlecore.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-c5"
|
||||||
|
|
||||||
[env:esp32-c6]
|
[env:esp32-c6]
|
||||||
extends = env:esp32
|
extends = env:esp32
|
||||||
board = esp32-c6-devkitm-1
|
board = esp32-c6-devkitm-1
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.singlecore.defaults"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.singlecore.defaults;sdkconfig.ramoptimize.defaults"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:esp32.build_flags}
|
${env:esp32.build_flags}
|
||||||
-DNUKI_HUB_HTTPS_SERVER
|
-DNUKI_HUB_HTTPS_SERVER
|
||||||
@@ -146,7 +146,7 @@ extends = env:esp32
|
|||||||
board = esp32-h2-devkitm-1
|
board = esp32-h2-devkitm-1
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DNUKI_TARGET_H2=y
|
-DNUKI_TARGET_H2=y
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.singlecore.defaults"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.singlecore.defaults;sdkconfig.ramoptimize.defaults"
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
BLE
|
BLE
|
||||||
BluetoothSerial
|
BluetoothSerial
|
||||||
@@ -174,7 +174,7 @@ extends = env:esp32
|
|||||||
board_build.embed_txtfiles =
|
board_build.embed_txtfiles =
|
||||||
board = esp32-p4
|
board = esp32-p4
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.defaults.esp32-p4"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.release.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-p4"
|
||||||
|
|
||||||
[env:esp32_dbg]
|
[env:esp32_dbg]
|
||||||
extends = env:esp32
|
extends = env:esp32
|
||||||
@@ -210,7 +210,7 @@ build_flags =
|
|||||||
extends = env:esp32-c3
|
extends = env:esp32-c3
|
||||||
custom_build = debug
|
custom_build = debug
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.singlecore.defaults"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.singlecore.defaults;sdkconfig.ramoptimize.defaults"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env.build_flags}
|
${env.build_flags}
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
|
||||||
@@ -222,7 +222,7 @@ board_build.partitions = partitions_c5dbg.csv
|
|||||||
board = nuki-esp32-c5dbg
|
board = nuki-esp32-c5dbg
|
||||||
custom_build = debug
|
custom_build = debug
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.defaults.esp32-c5;sdkconfig.defaults.esp32-c5dbg;sdkconfig.singlecore.defaults"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.singlecore.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-c5;sdkconfig.defaults.esp32-c5dbg"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:esp32_dbg.build_flags}
|
${env:esp32_dbg.build_flags}
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ build_flags =
|
|||||||
extends = env:esp32-c6
|
extends = env:esp32-c6
|
||||||
custom_build = debug
|
custom_build = debug
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.singlecore.defaults"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.singlecore.defaults;sdkconfig.ramoptimize.defaults"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:esp32_dbg.build_flags}
|
${env:esp32_dbg.build_flags}
|
||||||
-DFORCE_NUKI_HUB_HTTPS_SERVER
|
-DFORCE_NUKI_HUB_HTTPS_SERVER
|
||||||
@@ -240,7 +240,7 @@ extends = env:esp32-h2
|
|||||||
custom_build = debug
|
custom_build = debug
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DNUKI_TARGET_H2=y
|
-DNUKI_TARGET_H2=y
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.singlecore.defaults"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.singlecore.defaults;sdkconfig.ramoptimize.defaults"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env.build_flags}
|
${env.build_flags}
|
||||||
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
|
||||||
@@ -250,7 +250,7 @@ build_flags =
|
|||||||
extends = env:esp32-s3
|
extends = env:esp32-s3
|
||||||
custom_build = debug
|
custom_build = debug
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.defaults.esp32-s3"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-s3"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:esp32_dbg.build_flags}
|
${env:esp32_dbg.build_flags}
|
||||||
|
|
||||||
@@ -258,7 +258,7 @@ build_flags =
|
|||||||
extends = env:esp32-s3-nopsram
|
extends = env:esp32-s3-nopsram
|
||||||
custom_build = debug
|
custom_build = debug
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.defaults.esp32-s3-nopsram"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-s3-nopsram"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:esp32-nopsram_dbg.build_flags}
|
${env:esp32-nopsram_dbg.build_flags}
|
||||||
|
|
||||||
@@ -266,7 +266,7 @@ build_flags =
|
|||||||
extends = env:esp32-s3-oct
|
extends = env:esp32-s3-oct
|
||||||
custom_build = debug
|
custom_build = debug
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.defaults.esp32-s3-oct"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-s3-oct"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:esp32_dbg.build_flags}
|
${env:esp32_dbg.build_flags}
|
||||||
|
|
||||||
@@ -284,6 +284,6 @@ build_flags =
|
|||||||
extends = env:esp32-p4
|
extends = env:esp32-p4
|
||||||
custom_build = debug
|
custom_build = debug
|
||||||
board_build.cmake_extra_args =
|
board_build.cmake_extra_args =
|
||||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.defaults.esp32-p4"
|
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug.defaults;sdkconfig.ramoptimize.defaults;sdkconfig.defaults.esp32-p4"
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:esp32_dbg.build_flags}
|
${env:esp32_dbg.build_flags}
|
||||||
@@ -39,7 +39,9 @@ CONFIG_ARDUINO_SELECTIVE_Insights=n
|
|||||||
CONFIG_ARDUINO_LOOP_STACK_SIZE=12288
|
CONFIG_ARDUINO_LOOP_STACK_SIZE=12288
|
||||||
|
|
||||||
# LOGS
|
# LOGS
|
||||||
CONFIG_HEAP_TASK_TRACKING=n
|
#CONFIG_HEAP_TASK_TRACKING=y
|
||||||
|
#CONFIG_HEAP_TRACK_DELETED_TASKS=y
|
||||||
|
#CONFIG_ESP_SYSTEM_USE_FRAME_POINTER=y
|
||||||
CONFIG_LOG_COLORS=n
|
CONFIG_LOG_COLORS=n
|
||||||
CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=n
|
CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=n
|
||||||
CONFIG_LOG_MAXIMUM_LEVEL=4
|
CONFIG_LOG_MAXIMUM_LEVEL=4
|
||||||
@@ -162,7 +164,7 @@ CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH=y
|
|||||||
# HTTP(S) SERVER
|
# HTTP(S) SERVER
|
||||||
CONFIG_ESP_HTTPS_SERVER_ENABLE=y
|
CONFIG_ESP_HTTPS_SERVER_ENABLE=y
|
||||||
CONFIG_HTTPD_MAX_REQ_HDR_LEN=2048
|
CONFIG_HTTPD_MAX_REQ_HDR_LEN=2048
|
||||||
CONFIG_HTTPD_MAX_URI_LEN=512
|
CONFIG_HTTPD_MAX_URI_LEN=2048
|
||||||
CONFIG_HTTPD_ERR_RESP_NO_DELAY=y
|
CONFIG_HTTPD_ERR_RESP_NO_DELAY=y
|
||||||
CONFIG_HTTPD_PURGE_BUF_LEN=32
|
CONFIG_HTTPD_PURGE_BUF_LEN=32
|
||||||
CONFIG_HTTPD_WS_SUPPORT=y
|
CONFIG_HTTPD_WS_SUPPORT=y
|
||||||
|
|||||||
33
sdkconfig.ramoptimize.defaults
Normal file
33
sdkconfig.ramoptimize.defaults
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
CONFIG_COMPILER_OPTIMIZATION_NONE=n
|
||||||
|
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
|
||||||
|
CONFIG_LWIP_IRAM_OPTIMIZATION=n
|
||||||
|
CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION=n
|
||||||
|
CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=n
|
||||||
|
CONFIG_SPI_MASTER_IN_IRAM=n
|
||||||
|
CONFIG_SPI_SLAVE_IN_IRAM=n
|
||||||
|
CONFIG_ANA_CMPR_ISR_HANDLER_IN_IRAM=n
|
||||||
|
CONFIG_PARLIO_TX_ISR_HANDLER_IN_IRAM=n
|
||||||
|
CONFIG_PARLIO_RX_ISR_HANDLER_IN_IRAM=n
|
||||||
|
CONFIG_RMT_TX_ISR_HANDLER_IN_IRAM=n
|
||||||
|
CONFIG_RMT_RX_ISR_HANDLER_IN_IRAM=n
|
||||||
|
CONFIG_I2C_MASTER_ISR_HANDLER_IN_IRAM=n
|
||||||
|
CONFIG_GDMA_ISR_HANDLER_IN_IRAM=n
|
||||||
|
CONFIG_LIBC_LOCKS_PLACE_IN_IRAM=n
|
||||||
|
CONFIG_HAL_ASSERTION_SILENT=y
|
||||||
|
#CONFIG_SPI_FLASH_AUTO_SUSPEND=y ## CAUSES CRASHES ON SOME DEVICES
|
||||||
|
#CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM=n ## CAUSES CRASHES ON SOME DEVICES
|
||||||
|
#CONFIG_SPI_FLASH_AUTO_CHECK_SUSPEND_STATUS=y ## CAUSES CRASHES ON SOME DEVICES
|
||||||
|
CONFIG_LIBC_MISC_IN_IRAM=n
|
||||||
|
CONFIG_ESP_TIMER_IN_IRAM=n
|
||||||
|
CONFIG_ESP_INTR_IN_IRAM=n
|
||||||
|
CONFIG_LOG_IN_IRAM=n
|
||||||
|
CONFIG_ESP_ROM_PRINT_IN_IRAM=n
|
||||||
|
CONFIG_PM_SLEEP_FUNC_IN_IRAM=n
|
||||||
|
CONFIG_PM_RTOS_IDLE_OPT=n
|
||||||
|
CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=n
|
||||||
|
CONFIG_PM_SLP_IRAM_OPT=n
|
||||||
|
CONFIG_ESP_REGI2C_CTRL_FUNC_IN_IRAM=n
|
||||||
|
CONFIG_ESP_PERIPH_CTRL_FUNC_IN_IRAM=n
|
||||||
|
CONFIG_ESP_PHY_IRAM_OPT=n
|
||||||
|
CONFIG_ESP_WIFI_SLP_IRAM_OPT=n
|
||||||
|
CONFIG_ESP_WIFI_EXTRA_IRAM_OPT=n
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
#define NUKI_HUB_VERSION "9.12"
|
#define NUKI_HUB_VERSION "9.12"
|
||||||
#define NUKI_HUB_VERSION_INT (uint32_t)912
|
#define NUKI_HUB_VERSION_INT (uint32_t)912
|
||||||
#define NUKI_HUB_BUILD "unknownbuildnr"
|
#define NUKI_HUB_BUILD "unknownbuildnr"
|
||||||
#define NUKI_HUB_DATE "2025-06-20"
|
#define NUKI_HUB_DATE "2025-06-25"
|
||||||
|
|
||||||
#define GITHUB_LATEST_RELEASE_URL (char*)"https://github.com/technyon/nuki_hub/releases/latest"
|
#define GITHUB_LATEST_RELEASE_URL (char*)"https://github.com/technyon/nuki_hub/releases/latest"
|
||||||
#define GITHUB_OTA_MANIFEST_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/manifest.json"
|
#define GITHUB_OTA_MANIFEST_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/manifest.json"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ dependencies:
|
|||||||
espressif/libsodium: "^1.0.20~2"
|
espressif/libsodium: "^1.0.20~2"
|
||||||
|
|
||||||
espressif/esp_hosted:
|
espressif/esp_hosted:
|
||||||
version: 2.0.10
|
version: "*"
|
||||||
rules:
|
rules:
|
||||||
- if: "target in [esp32p4]"
|
- if: "target in [esp32p4]"
|
||||||
|
|
||||||
|
|||||||
57
src/main.cpp
57
src/main.cpp
@@ -6,6 +6,10 @@
|
|||||||
#include "esp_http_client.h"
|
#include "esp_http_client.h"
|
||||||
#include "esp_https_ota.h"
|
#include "esp_https_ota.h"
|
||||||
#include "esp_task_wdt.h"
|
#include "esp_task_wdt.h"
|
||||||
|
#ifdef CONFIG_HEAP_TASK_TRACKING
|
||||||
|
#include "esp_heap_task_info.h"
|
||||||
|
#include "esp_heap_caps.h"
|
||||||
|
#endif
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "esp32-hal-log.h"
|
#include "esp32-hal-log.h"
|
||||||
#include "hal/wdt_hal.h"
|
#include "hal/wdt_hal.h"
|
||||||
@@ -644,6 +648,49 @@ void networkTask(void *pvParameters)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NUKI_HUB_UPDATER
|
#ifndef NUKI_HUB_UPDATER
|
||||||
|
#ifdef CONFIG_HEAP_TASK_TRACKING
|
||||||
|
static void print_all_tasks_info(void)
|
||||||
|
{
|
||||||
|
heap_all_tasks_stat_t tasks_stat;
|
||||||
|
/* call API to dynamically allocate the memory necessary to store the
|
||||||
|
* information collected while calling heap_caps_get_all_task_stat */
|
||||||
|
const esp_err_t ret_val = heap_caps_alloc_all_task_stat_arrays(&tasks_stat);
|
||||||
|
assert(ret_val == ESP_OK);
|
||||||
|
|
||||||
|
/* collect the information */
|
||||||
|
heap_caps_get_all_task_stat(&tasks_stat);
|
||||||
|
|
||||||
|
/* process the information retrieved */
|
||||||
|
Log->printf("\n--------------------------------------------------------------------------------\n");
|
||||||
|
Log->printf("PRINTING ALL TASKS INFO\n");
|
||||||
|
Log->printf("--------------------------------------------------------------------------------\n");
|
||||||
|
for (size_t task_idx = 0; task_idx < tasks_stat.task_count; task_idx++) {
|
||||||
|
task_stat_t task_stat = tasks_stat.stat_arr[task_idx];
|
||||||
|
Log->printf("%s: %s: Peak Usage %" PRIu16 ", Current Usage %" PRIu16 "\n", task_stat.name,
|
||||||
|
task_stat.is_alive ? "ALIVE " : "DELETED",
|
||||||
|
task_stat.overall_peak_usage,
|
||||||
|
task_stat.overall_current_usage);
|
||||||
|
|
||||||
|
for (size_t heap_idx = 0; heap_idx < task_stat.heap_count; heap_idx++) {
|
||||||
|
heap_stat_t heap_stat = task_stat.heap_stat[heap_idx];
|
||||||
|
Log->printf(" %s: Caps: %" PRIu32 ". Size %" PRIu16 ", Current Usage %" PRIu16 ", Peak Usage %" PRIu16 ", alloc count %" PRIu16 "\n", heap_stat.name,
|
||||||
|
heap_stat.caps,
|
||||||
|
heap_stat.size,
|
||||||
|
heap_stat.current_usage,
|
||||||
|
heap_stat.peak_usage,
|
||||||
|
heap_stat.alloc_count);
|
||||||
|
|
||||||
|
for (size_t alloc_idx = 0; alloc_idx < heap_stat.alloc_count; alloc_idx++) {
|
||||||
|
heap_task_block_t alloc_stat = heap_stat.alloc_stat[alloc_idx];
|
||||||
|
Log->printf(" %p: Size: %" PRIu32 "\n", alloc_stat.address, alloc_stat.size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* delete the memory dynamically allocated while calling heap_caps_alloc_all_task_stat_arrays */
|
||||||
|
heap_caps_free_all_task_stat_arrays(&tasks_stat);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
void nukiTask(void *pvParameters)
|
void nukiTask(void *pvParameters)
|
||||||
{
|
{
|
||||||
esp_task_wdt_add(NULL);
|
esp_task_wdt_add(NULL);
|
||||||
@@ -1256,6 +1303,9 @@ void setup()
|
|||||||
Log->println(NUKI_HUB_VERSION);
|
Log->println(NUKI_HUB_VERSION);
|
||||||
Log->print("Nuki Hub build ");
|
Log->print("Nuki Hub build ");
|
||||||
Log->println(NUKI_HUB_BUILD);
|
Log->println(NUKI_HUB_BUILD);
|
||||||
|
|
||||||
|
Log->println(preferences->getString(preference_cred_user));
|
||||||
|
Log->println(preferences->getString(preference_cred_password));
|
||||||
|
|
||||||
uint32_t devIdOpener = preferences->getUInt(preference_device_id_opener);
|
uint32_t devIdOpener = preferences->getUInt(preference_device_id_opener);
|
||||||
|
|
||||||
@@ -1372,12 +1422,7 @@ void setup()
|
|||||||
setupTasks(false);
|
setupTasks(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_NUKIHUB
|
//print_all_tasks_info();
|
||||||
Log->print("Task Name\tStatus\tPrio\tHWM\tTask\tAffinity\n");
|
|
||||||
char stats_buffer[1024];
|
|
||||||
vTaskList(stats_buffer);
|
|
||||||
Log->println(stats_buffer);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
|
|||||||
@@ -51,10 +51,16 @@ void WifiDevice::initialize()
|
|||||||
WiFi.disconnect(true);
|
WiFi.disconnect(true);
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFi.disconnect();
|
WiFi.disconnect();
|
||||||
if (esp_task_wdt_status(NULL) == ESP_OK) {
|
|
||||||
esp_task_wdt_reset();
|
int loop = 0;
|
||||||
|
while (!_wifiClientStarted && loop < 50) {
|
||||||
|
if (esp_task_wdt_status(NULL) == ESP_OK) {
|
||||||
|
esp_task_wdt_reset();
|
||||||
|
}
|
||||||
|
vTaskDelay(100 / portTICK_PERIOD_MS);
|
||||||
|
loop++;
|
||||||
}
|
}
|
||||||
vTaskDelay(5000 / portTICK_PERIOD_MS);
|
|
||||||
Log->println("Dummy WiFi device for Hosted on P4 done");
|
Log->println("Dummy WiFi device for Hosted on P4 done");
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -64,24 +70,25 @@ void WifiDevice::scan(bool passive, bool async)
|
|||||||
{
|
{
|
||||||
if (!_openAP)
|
if (!_openAP)
|
||||||
{
|
{
|
||||||
|
_wifiClientStarted = false;
|
||||||
WiFi.disconnect(true);
|
WiFi.disconnect(true);
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFi.disconnect();
|
WiFi.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
int loop = 0;
|
||||||
|
while (!_wifiClientStarted && loop < 50) {
|
||||||
if (esp_task_wdt_status(NULL) == ESP_OK) {
|
if (esp_task_wdt_status(NULL) == ESP_OK) {
|
||||||
esp_task_wdt_reset();
|
esp_task_wdt_reset();
|
||||||
}
|
}
|
||||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
vTaskDelay(100 / portTICK_PERIOD_MS);
|
||||||
|
loop++;
|
||||||
}
|
}
|
||||||
|
|
||||||
WiFi.scanDelete();
|
WiFi.scanDelete();
|
||||||
WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN);
|
WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN);
|
||||||
WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL);
|
WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL);
|
||||||
|
|
||||||
if (esp_task_wdt_status(NULL) == ESP_OK) {
|
|
||||||
esp_task_wdt_reset();
|
|
||||||
}
|
|
||||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
|
||||||
|
|
||||||
if(async)
|
if(async)
|
||||||
{
|
{
|
||||||
Log->println("Wi-Fi async scan started");
|
Log->println("Wi-Fi async scan started");
|
||||||
@@ -126,13 +133,6 @@ void WifiDevice::openAP()
|
|||||||
|
|
||||||
bool WifiDevice::connect()
|
bool WifiDevice::connect()
|
||||||
{
|
{
|
||||||
WiFi.mode(WIFI_STA);
|
|
||||||
WiFi.setHostname(_hostname.c_str());
|
|
||||||
if (esp_task_wdt_status(NULL) == ESP_OK) {
|
|
||||||
esp_task_wdt_reset();
|
|
||||||
}
|
|
||||||
vTaskDelay(500 / portTICK_PERIOD_MS);
|
|
||||||
|
|
||||||
int bestConnection = -1;
|
int bestConnection = -1;
|
||||||
|
|
||||||
if(_preferences->getBool(preference_find_best_rssi, false))
|
if(_preferences->getBool(preference_find_best_rssi, false))
|
||||||
@@ -215,7 +215,7 @@ bool WifiDevice::connect()
|
|||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -284,10 +284,10 @@ void WifiDevice::onWifiEvent(const WiFiEvent_t &event, const WiFiEventInfo_t &in
|
|||||||
Log->printf("[WiFi-event] event: %d\n", event);
|
Log->printf("[WiFi-event] event: %d\n", event);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case ARDUINO_EVENT_WIFI_READY:
|
case ARDUINO_EVENT_WIFI_READY:
|
||||||
Log->println("WiFi interface ready");
|
Log->println("WiFi interface ready");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_SCAN_DONE:
|
case ARDUINO_EVENT_WIFI_SCAN_DONE:
|
||||||
Log->println("Completed scan for access points");
|
Log->println("Completed scan for access points");
|
||||||
_foundNetworks = WiFi.scanComplete();
|
_foundNetworks = WiFi.scanComplete();
|
||||||
|
|
||||||
@@ -315,28 +315,29 @@ void WifiDevice::onWifiEvent(const WiFiEvent_t &event, const WiFiEventInfo_t &in
|
|||||||
scan(false, true);
|
scan(false, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_STA_START:
|
case ARDUINO_EVENT_WIFI_STA_START:
|
||||||
Log->println("WiFi client started");
|
Log->println("WiFi client started");
|
||||||
|
_wifiClientStarted = true;
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_STA_STOP:
|
case ARDUINO_EVENT_WIFI_STA_STOP:
|
||||||
Log->println("WiFi clients stopped");
|
Log->println("WiFi clients stopped");
|
||||||
if(!_openAP)
|
if(!_openAP)
|
||||||
{
|
{
|
||||||
onDisconnected();
|
onDisconnected();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
|
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
|
||||||
Log->println("Connected to access point");
|
Log->println("Connected to access point");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
||||||
Log->println("Disconnected from WiFi access point");
|
Log->println("Disconnected from WiFi access point");
|
||||||
if(!_openAP)
|
if(!_openAP)
|
||||||
{
|
{
|
||||||
onDisconnected();
|
onDisconnected();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE:
|
case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE:
|
||||||
Log->println("Authentication mode of access point has changed");
|
Log->println("Authentication mode of access point has changed");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
||||||
Log->print("Obtained IP address: ");
|
Log->print("Obtained IP address: ");
|
||||||
@@ -346,38 +347,38 @@ void WifiDevice::onWifiEvent(const WiFiEvent_t &event, const WiFiEventInfo_t &in
|
|||||||
onConnected();
|
onConnected();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
|
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
|
||||||
Log->println("Lost IP address and IP address is reset to 0");
|
Log->println("Lost IP address and IP address is reset to 0");
|
||||||
if(!_openAP)
|
if(!_openAP)
|
||||||
{
|
{
|
||||||
onDisconnected();
|
onDisconnected();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_AP_START:
|
case ARDUINO_EVENT_WIFI_AP_START:
|
||||||
Log->println("WiFi access point started");
|
Log->println("WiFi access point started");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_AP_STOP:
|
case ARDUINO_EVENT_WIFI_AP_STOP:
|
||||||
Log->println("WiFi access point stopped");
|
Log->println("WiFi access point stopped");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
|
case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
|
||||||
Log->println("Client connected");
|
Log->println("Client connected");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
|
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
|
||||||
Log->println("Client disconnected");
|
Log->println("Client disconnected");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
|
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
|
||||||
Log->println("Assigned IP address to client");
|
Log->println("Assigned IP address to client");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED:
|
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED:
|
||||||
Log->println("Received probe request");
|
Log->println("Received probe request");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_AP_GOT_IP6:
|
case ARDUINO_EVENT_WIFI_AP_GOT_IP6:
|
||||||
Log->println("AP IPv6 is preferred");
|
Log->println("AP IPv6 is preferred");
|
||||||
break;
|
break;
|
||||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
||||||
Log->println("STA IPv6 is preferred");
|
Log->println("STA IPv6 is preferred");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -43,4 +43,5 @@ private:
|
|||||||
bool _openAP = false;
|
bool _openAP = false;
|
||||||
bool _startAP = true;
|
bool _startAP = true;
|
||||||
bool _connected = false;
|
bool _connected = false;
|
||||||
|
bool _wifiClientStarted = false;
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user