From 82168f34ebad112d1e4caa44539b6b380da2c55b Mon Sep 17 00:00:00 2001 From: kozmotronik Date: Mon, 7 Jul 2025 20:25:45 +0300 Subject: [PATCH 01/18] Delete this ghost file appeared out of nowhere. --- dev | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dev diff --git a/dev b/dev deleted file mode 100644 index e69de29..0000000 -- 2.39.5 From 5a3895614682d03b140cb7b5d6a48480d104f3ce Mon Sep 17 00:00:00 2001 From: kozmotronik Date: Mon, 7 Jul 2025 22:57:02 +0300 Subject: [PATCH 02/18] Restructure the project tree. Restructured the project tree to align with Espressif's project tree pattern and practice. Also updated the affected cmake files. Fixes: #1033 --- relay_chn/CMakeLists.txt => CMakeLists.txt | 0 relay_chn/Kconfig => Kconfig | 0 app_test/CMakeLists.txt | 13 - .../idf_component.yml => idf_component.yml | 0 {relay_chn/include => include}/relay_chn.h | 0 {relay_chn/src => src}/relay_chn.c | 0 test_apps/CMakeLists.txt | 17 + {app_test => test_apps}/main/CMakeLists.txt | 0 {app_test => test_apps}/main/test_relay_chn.c | 0 {app_test => test_apps}/sdkconfig | 691 +----------------- {relay_chn => test_apps}/sdkconfig.defaults | 0 {app_test => test_apps}/sdkconfig.old | 0 12 files changed, 40 insertions(+), 681 deletions(-) rename relay_chn/CMakeLists.txt => CMakeLists.txt (100%) rename relay_chn/Kconfig => Kconfig (100%) delete mode 100644 app_test/CMakeLists.txt rename relay_chn/idf_component.yml => idf_component.yml (100%) rename {relay_chn/include => include}/relay_chn.h (100%) rename {relay_chn/src => src}/relay_chn.c (100%) create mode 100644 test_apps/CMakeLists.txt rename {app_test => test_apps}/main/CMakeLists.txt (100%) rename {app_test => test_apps}/main/test_relay_chn.c (100%) rename {app_test => test_apps}/sdkconfig (69%) rename {relay_chn => test_apps}/sdkconfig.defaults (100%) rename {app_test => test_apps}/sdkconfig.old (100%) diff --git a/relay_chn/CMakeLists.txt b/CMakeLists.txt similarity index 100% rename from relay_chn/CMakeLists.txt rename to CMakeLists.txt diff --git a/relay_chn/Kconfig b/Kconfig similarity index 100% rename from relay_chn/Kconfig rename to Kconfig diff --git a/app_test/CMakeLists.txt b/app_test/CMakeLists.txt deleted file mode 100644 index 333328b..0000000 --- a/app_test/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -# Define component search paths -# IMPORTANT: We should tell to the ESP-IDF -# where it can find relay_chn component. -# We add the 'relay_chn' directory to the COMPONENT_DIRS by specifying: ../relay_chn -set(EXTRA_COMPONENT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/../relay_chn") - -# Include ESP-IDF project build system -include($ENV{IDF_PATH}/tools/cmake/project.cmake) - -# Define the name of this project -project(relay_chn_app_test) \ No newline at end of file diff --git a/relay_chn/idf_component.yml b/idf_component.yml similarity index 100% rename from relay_chn/idf_component.yml rename to idf_component.yml diff --git a/relay_chn/include/relay_chn.h b/include/relay_chn.h similarity index 100% rename from relay_chn/include/relay_chn.h rename to include/relay_chn.h diff --git a/relay_chn/src/relay_chn.c b/src/relay_chn.c similarity index 100% rename from relay_chn/src/relay_chn.c rename to src/relay_chn.c diff --git a/test_apps/CMakeLists.txt b/test_apps/CMakeLists.txt new file mode 100644 index 0000000..01a2a3f --- /dev/null +++ b/test_apps/CMakeLists.txt @@ -0,0 +1,17 @@ +# This is the project CMakeLists.txt file for the test subproject +cmake_minimum_required(VERSION 3.5) + +# Define component search paths +# IMPORTANT: We should tell to the ESP-IDF +# where it can find relay_chn component. +# We add the 'relay_chn' root directory to the EXTRA_COMPONENT_DIRS by specifying: "../" +set(EXTRA_COMPONENT_DIRS "../") + +# "Trim" the build. Include the minimal set of components, main, and anything it depends on. +set(COMPONENTS main) + +# Include ESP-IDF project build system +include($ENV{IDF_PATH}/tools/cmake/project.cmake) + +# Define the name of this project +project(relay_chn_test) \ No newline at end of file diff --git a/app_test/main/CMakeLists.txt b/test_apps/main/CMakeLists.txt similarity index 100% rename from app_test/main/CMakeLists.txt rename to test_apps/main/CMakeLists.txt diff --git a/app_test/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c similarity index 100% rename from app_test/main/test_relay_chn.c rename to test_apps/main/test_relay_chn.c diff --git a/app_test/sdkconfig b/test_apps/sdkconfig similarity index 69% rename from app_test/sdkconfig rename to test_apps/sdkconfig index c059e0b..cb194db 100644 --- a/app_test/sdkconfig +++ b/test_apps/sdkconfig @@ -1,6 +1,6 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Configuration +# Espressif IoT Development Framework (ESP-IDF) 5.4.2 Project Configuration # CONFIG_SOC_ADC_SUPPORTED=y CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y @@ -79,6 +79,7 @@ CONFIG_SOC_ADC_SHARED_POWER=y CONFIG_SOC_APB_BACKUP_DMA=y CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y +CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y CONFIG_SOC_CACHE_MEMORY_IBANK_SIZE=0x4000 CONFIG_SOC_CPU_CORES_NUM=1 CONFIG_SOC_CPU_INTR_NUM=32 @@ -215,6 +216,8 @@ CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=2 +CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32 +CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16 CONFIG_SOC_MWDT_SUPPORT_XTAL=y CONFIG_SOC_TWAI_CONTROLLER_NUM=1 CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y @@ -502,31 +505,6 @@ CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y # Component config # -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_JTAG is not set -CONFIG_APPTRACE_DEST_NONE=y -# CONFIG_APPTRACE_DEST_UART1 is not set -# CONFIG_APPTRACE_DEST_USB_CDC is not set -CONFIG_APPTRACE_DEST_UART_NONE=y -CONFIG_APPTRACE_UART_TASK_PRIO=1 -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# Bluetooth -# -# CONFIG_BT_ENABLED is not set -CONFIG_BT_ALARM_MAX_NUM=50 -# end of Bluetooth - -# -# Console Library -# -# CONFIG_CONSOLE_SORTED_HELP is not set -# end of Console Library - # # Driver Configurations # @@ -542,6 +520,7 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # Legacy ADC Driver Configuration # # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set # # Legacy ADC Calibration Configuration @@ -554,30 +533,41 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # Legacy Timer Group Driver Configurations # # CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy Timer Group Driver Configurations # # Legacy RMT Driver Configurations # # CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy RMT Driver Configurations # # Legacy I2S Driver Configurations # # CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy I2S Driver Configurations +# +# Legacy I2C Driver Configurations +# +# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set +# end of Legacy I2C Driver Configurations + # # Legacy SDM Driver Configurations # # CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy SDM Driver Configurations # # Legacy Temperature Sensor Driver Configurations # # CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy Temperature Sensor Driver Configurations # end of Driver Configurations @@ -589,37 +579,6 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y CONFIG_EFUSE_MAX_BLK_LEN=256 # end of eFuse Bit Manager -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y -# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set -# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# ADC and ADC Calibration -# -# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set -# CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3 is not set -# CONFIG_ADC_ONESHOT_FORCE_USE_ADC2_ON_C3 is not set -# CONFIG_ADC_ENABLE_DEBUG_LOG is not set -# end of ADC and ADC Calibration - -# -# Wireless Coexistence -# -CONFIG_ESP_COEX_ENABLED=y -# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_ESP_COEX_GPIO_DEBUG is not set -# end of Wireless Coexistence - # # Common ESP-related # @@ -638,6 +597,7 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y # CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set # CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +CONFIG_GPTIMER_OBJ_CACHE_SAFE=y # CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set # end of ESP-Driver:GPTimer Configurations @@ -704,18 +664,6 @@ CONFIG_SPI_SLAVE_ISR_IN_IRAM=y CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y # end of ESP-Driver:USB Serial/JTAG Configuration -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set -# CONFIG_ETH_USE_OPENETH is not set -# CONFIG_ETH_TRANSMIT_MUTEX is not set -# end of Ethernet - # # Event Loop Library # @@ -724,53 +672,6 @@ CONFIG_ESP_EVENT_POST_FROM_ISR=y CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # end of Event Loop Library -# -# GDB Stub -# -CONFIG_ESP_GDBSTUB_ENABLED=y -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set -CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y -CONFIG_ESP_GDBSTUB_MAX_TASKS=32 -# end of GDB Stub - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set -CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 -CONFIG_HTTPD_MAX_URI_LEN=512 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -# CONFIG_HTTPD_WS_SUPPORT is not set -# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set -CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000 -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set -# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set -CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set -CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS server - # # Hardware Settings # @@ -848,8 +749,10 @@ CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y # GDMA Configurations # CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y -# CONFIG_GDMA_ISR_IRAM_SAFE is not set +CONFIG_GDMA_ISR_HANDLER_IN_IRAM=y +CONFIG_GDMA_OBJ_DRAM_SAFE=y # CONFIG_GDMA_ENABLE_DEBUG_LOG is not set +# CONFIG_GDMA_ISR_IRAM_SAFE is not set # end of GDMA Configurations # @@ -862,56 +765,16 @@ CONFIG_XTAL_FREQ=40 CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y # end of Hardware Settings -# -# ESP-Driver:LCD Controller Configurations -# -# CONFIG_LCD_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:LCD Controller Configurations - # # ESP-MM: Memory Management Configurations # # end of ESP-MM: Memory Management Configurations -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y -CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y -# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set -# CONFIG_ESP_NETIF_L2_TAP is not set -# CONFIG_ESP_NETIF_BRIDGE_EN is not set -# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set -# end of ESP NETIF Adapter - # # Partition API Configuration # # end of Partition API Configuration -# -# PHY -# -CONFIG_ESP_PHY_ENABLED=y -CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP_PHY_MAX_TX_POWER=20 -# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set -CONFIG_ESP_PHY_ENABLE_USB=y -# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set -CONFIG_ESP_PHY_RF_CAL_PARTIAL=y -# CONFIG_ESP_PHY_RF_CAL_NONE is not set -# CONFIG_ESP_PHY_RF_CAL_FULL is not set -CONFIG_ESP_PHY_CALIBRATION_MODE=0 -# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set -# CONFIG_ESP_PHY_RECORD_USED_TIME is not set -# end of PHY - # # Power Management # @@ -920,10 +783,6 @@ CONFIG_ESP_PHY_CALIBRATION_MODE=0 CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y # end of Power Management -# -# ESP PSRAM -# - # # ESP Ringbuf # @@ -944,7 +803,6 @@ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=160 # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y @@ -1028,122 +886,6 @@ CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y CONFIG_ESP_TIMER_IMPL_SYSTIMER=y # end of ESP Timer (High Resolution Timer) -# -# Wi-Fi -# -CONFIG_ESP_WIFI_ENABLED=y -CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32 -CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y -# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 -CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 -# CONFIG_ESP_WIFI_CSI_ENABLED is not set -CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP_WIFI_TX_BA_WIN=6 -CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP_WIFI_RX_BA_WIN=6 -CONFIG_ESP_WIFI_NVS_ENABLED=y -CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP_WIFI_IRAM_OPT=y -# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set -CONFIG_ESP_WIFI_RX_IRAM_OPT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP_WIFI_ENABLE_SAE_PK=y -CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y -# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 -CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 -CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 -# CONFIG_ESP_WIFI_FTM_ENABLE is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y -# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set -CONFIG_ESP_WIFI_GMAC_SUPPORT=y -CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y -# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set -CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 -CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y -CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y -# CONFIG_ESP_WIFI_WAPI_PSK is not set -# CONFIG_ESP_WIFI_SUITE_B_192 is not set -# CONFIG_ESP_WIFI_11KV_SUPPORT is not set -# CONFIG_ESP_WIFI_MBO_SUPPORT is not set -# CONFIG_ESP_WIFI_DPP_SUPPORT is not set -# CONFIG_ESP_WIFI_11R_SUPPORT is not set -# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set - -# -# WPS Configuration Options -# -# CONFIG_ESP_WIFI_WPS_STRICT is not set -# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set -# end of WPS Configuration Options - -# CONFIG_ESP_WIFI_DEBUG_PRINT is not set -# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set -CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y -# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set -# end of Wi-Fi - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -CONFIG_FATFS_VOLUME_COUNT=2 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -# CONFIG_FATFS_SECTOR_512 is not set -CONFIG_FATFS_SECTOR_4096=y -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -# CONFIG_FATFS_USE_FASTSEEK is not set -CONFIG_FATFS_USE_STRFUNC_NONE=y -# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set -# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set -CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 -# CONFIG_FATFS_IMMEDIATE_FSYNC is not set -# CONFIG_FATFS_USE_LABEL is not set -CONFIG_FATFS_LINK_LOCK=y -# end of FAT Filesystem support - # # FreeRTOS # @@ -1223,7 +965,6 @@ CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y -# CONFIG_HAL_ECDSA_GEN_SIG_CM is not set # end of Hardware Abstraction Layer (HAL) and Low Level (LL) # @@ -1283,189 +1024,6 @@ CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # end of Format # end of Log -# -# LWIP -# -CONFIG_LWIP_ENABLE=y -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" -# CONFIG_LWIP_NETIF_API is not set -CONFIG_LWIP_TCPIP_TASK_PRIO=18 -# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set -# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -# CONFIG_LWIP_IRAM_OPTIMIZATION is not set -# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_ND6=y -# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set -CONFIG_LWIP_MAX_SOCKETS=10 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -# CONFIG_LWIP_SO_RCVBUF is not set -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP_DEFAULT_TTL=64 -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 -# CONFIG_LWIP_IP_FORWARD is not set -# CONFIG_LWIP_STATS is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_ESP_MLDV6_REPORT=y -CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y -# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set -# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set -# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set -CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set -CONFIG_LWIP_DHCP_OPTIONS_LEN=68 -CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 -CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 - -# -# DHCP server -# -CONFIG_LWIP_DHCPS=y -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 -CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y -CONFIG_LWIP_DHCPS_ADD_DNS=y -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV4=y -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 -# CONFIG_LWIP_IPV6_FORWARD is not set -# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=16 -CONFIG_LWIP_MAX_LISTENING_TCP=16 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=12 -CONFIG_LWIP_TCP_MSS=1440 -CONFIG_LWIP_TCP_TMR_INTERVAL=250 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760 -CONFIG_LWIP_TCP_WND_DEFAULT=5760 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 -CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 -# CONFIG_LWIP_TCP_SACK_OUT is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=16 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES=5 -CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3 -CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10 -# CONFIG_LWIP_PPP_SUPPORT is not set -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -CONFIG_LWIP_ICMP=y -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_SNTP_MAX_SERVERS=1 -# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -CONFIG_LWIP_SNTP_STARTUP_DELAY=y -CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 -# end of SNTP - -# -# DNS -# -CONFIG_LWIP_DNS_MAX_HOST_IP=1 -CONFIG_LWIP_DNS_MAX_SERVERS=3 -# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set -# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set -# end of DNS - -CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y -# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set -# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set -# CONFIG_LWIP_HOOK_IP6_INPUT_NONE is not set -CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT=y -# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - # # mbedTLS # @@ -1519,6 +1077,7 @@ CONFIG_MBEDTLS_HAVE_TIME=y # CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y +CONFIG_MBEDTLS_SHA1_C=y CONFIG_MBEDTLS_SHA512_C=y # CONFIG_MBEDTLS_SHA3_C is not set CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y @@ -1599,25 +1158,9 @@ CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_THREADING_C is not set CONFIG_MBEDTLS_ERROR_STRINGS=y -CONFIG_MBEDTLS_FS_IO=y +# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set # end of mbedTLS -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -# CONFIG_MQTT_PROTOCOL_5 is not set -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - # # Newlib # @@ -1634,34 +1177,6 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y # CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set # end of Newlib -# -# NVS -# -# CONFIG_NVS_ENCRYPTION is not set -# CONFIG_NVS_ASSERT_ERROR_CHECK is not set -# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set -# end of NVS - -# -# OpenThread -# -# CONFIG_OPENTHREAD_ENABLED is not set - -# -# OpenThread Spinel -# -# CONFIG_OPENTHREAD_SPINEL_ONLY is not set -# end of OpenThread Spinel -# end of OpenThread - -# -# Protocomm -# -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y -# end of Protocomm - # # PThreads # @@ -1701,6 +1216,7 @@ CONFIG_SPI_FLASH_BROWNOUT_RESET=y # CONFIG_SPI_FLASH_AUTO_SUSPEND is not set CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 # CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set +# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set # end of Optional and Experimental Features (READ DOCS FIRST) # end of Main Flash configuration @@ -1744,55 +1260,6 @@ CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y # end of SPI Flash driver -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# - -# -# Websocket -# -CONFIG_WS_TRANSPORT=y -CONFIG_WS_BUFFER_SIZE=1024 -# CONFIG_WS_DYNAMIC_BUFFER is not set -# end of Websocket -# end of TCP Transport - # # Unity unit testing library # @@ -1805,43 +1272,6 @@ CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y # CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set # end of Unity unit testing library -# -# Virtual file system -# -CONFIG_VFS_SUPPORT_IO=y -CONFIG_VFS_SUPPORT_DIR=y -CONFIG_VFS_SUPPORT_SELECT=y -CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y -# CONFIG_VFS_SELECT_IN_RAM is not set -CONFIG_VFS_SUPPORT_TERMIOS=y -CONFIG_VFS_MAX_COUNT=8 - -# -# Host File System I/O (Semihosting) -# -CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# end of Host File System I/O (Semihosting) - -CONFIG_VFS_INITIALIZE_DEV_NULL=y -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y -# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set -# end of Wi-Fi Provisioning Manager - # # Relay Channel Driver Configuration # @@ -1885,17 +1315,9 @@ CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y -# CONFIG_EXTERNAL_COEX_ENABLE is not set -# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y -CONFIG_GDBSTUB_SUPPORT_TASKS=y -CONFIG_GDBSTUB_MAX_TASKS=32 -# CONFIG_OTA_ALLOW_HTTP is not set # CONFIG_ESP_SYSTEM_PD_FLASH is not set CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND=y CONFIG_ESP32C3_RTC_CLK_SRC_INT_RC=y @@ -1903,12 +1325,6 @@ CONFIG_ESP32C3_RTC_CLK_SRC_INT_RC=y # CONFIG_ESP32C3_RTC_CLK_SRC_EXT_OSC is not set # CONFIG_ESP32C3_RTC_CLK_SRC_INT_8MD256 is not set CONFIG_ESP32C3_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# CONFIG_REDUCE_PHY_TX_POWER is not set -# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y # CONFIG_ESP32C3_DEFAULT_CPU_FREQ_80 is not set CONFIG_ESP32C3_DEFAULT_CPU_FREQ_160=y @@ -1936,7 +1352,6 @@ CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_ESP32C3_DEBUG_OCDAWARE=y CONFIG_BROWNOUT_DET=y CONFIG_ESP32C3_BROWNOUT_DET=y -CONFIG_ESP32C3_BROWNOUT_DET=y CONFIG_BROWNOUT_DET_LVL_SEL_7=y CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_7=y # CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set @@ -1953,68 +1368,11 @@ CONFIG_BROWNOUT_DET_LVL=7 CONFIG_ESP32C3_BROWNOUT_DET_LVL=7 CONFIG_IPC_TASK_STACK_SIZE=1024 CONFIG_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP32_WIFI_ENABLED=y -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=6 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y -CONFIG_WPA_MBEDTLS_CRYPTO=y -CONFIG_WPA_MBEDTLS_TLS_CLIENT=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_SUITE_B_192 is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# CONFIG_WPA_MBO_SUPPORT is not set -# CONFIG_WPA_DPP_SUPPORT is not set -# CONFIG_WPA_11R_SUPPORT is not set -# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set -# CONFIG_WPA_WPS_STRICT is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y CONFIG_TIMER_TASK_PRIORITY=1 CONFIG_TIMER_TASK_STACK_DEPTH=2048 CONFIG_TIMER_QUEUE_LENGTH=10 # CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set # CONFIG_HAL_ASSERTION_SILIENT is not set -# CONFIG_L2_TO_L3_COPY is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=32 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=12 -CONFIG_TCP_MSS=1440 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5760 -CONFIG_TCP_WND_DEFAULT=5760 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC_SYSTIMER=y # CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC is not set # CONFIG_ESP32C3_TIME_SYSCALL_USE_SYSTIMER is not set @@ -2027,7 +1385,4 @@ CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_SUPPORT_TERMIOS=y -CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 # End of deprecated options diff --git a/relay_chn/sdkconfig.defaults b/test_apps/sdkconfig.defaults similarity index 100% rename from relay_chn/sdkconfig.defaults rename to test_apps/sdkconfig.defaults diff --git a/app_test/sdkconfig.old b/test_apps/sdkconfig.old similarity index 100% rename from app_test/sdkconfig.old rename to test_apps/sdkconfig.old -- 2.39.5 From 9b2274ed7c1c0d9836a3ec1db9d9b2f2280345e6 Mon Sep 17 00:00:00 2001 From: ismail Date: Fri, 11 Jul 2025 17:35:50 +0300 Subject: [PATCH 03/18] Add default configs for unit tests. --- test_apps/sdkconfig.defaults | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test_apps/sdkconfig.defaults b/test_apps/sdkconfig.defaults index c43f2b5..2b5191a 100644 --- a/test_apps/sdkconfig.defaults +++ b/test_apps/sdkconfig.defaults @@ -1,5 +1,4 @@ -# For IDF 5.0 -CONFIG_ESP_TASK_WDT_EN=n - -# For IDF4.4 -CONFIG_ESP_TASK_WDT=n \ No newline at end of file +# Relay Channel Driver Default Configuration for Testing +CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS=200 +CONFIG_RELAY_CHN_COUNT=2 +CONFIG_RELAY_CHN_ENABLE_TILTING=y \ No newline at end of file -- 2.39.5 From b239b50abe1b79e67339c1657baf5d4f02089904 Mon Sep 17 00:00:00 2001 From: ismail Date: Fri, 11 Jul 2025 18:28:59 +0300 Subject: [PATCH 04/18] Fix invalid channel ID handling. Fix the issue where get_state* functions do not handle when id is RELAY_CHN_ID_ALL. Fixes #1037. --- include/relay_chn.h | 1 + src/relay_chn.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/relay_chn.h b/include/relay_chn.h index 4f500bf..6f31edc 100644 --- a/include/relay_chn.h +++ b/include/relay_chn.h @@ -49,6 +49,7 @@ typedef enum relay_chn_direction_enum relay_chn_direction_t; * @brief Enums that represent the state of a relay channel. */ enum relay_chn_state_enum { + RELAY_CHN_STATE_UNDEFINED, ///< The relay channel state is undefined. RELAY_CHN_STATE_FREE, ///< The relay channel is free to run or execute commands. RELAY_CHN_STATE_STOPPED, ///< The relay channel is stopped and not running. RELAY_CHN_STATE_FORWARD, ///< The relay channel is running in the forward direction. diff --git a/src/relay_chn.c b/src/relay_chn.c index 124ff18..02ce94b 100644 --- a/src/relay_chn.c +++ b/src/relay_chn.c @@ -648,16 +648,16 @@ static void relay_chn_issue_cmd(relay_chn_t* relay_chn, relay_chn_cmd_t cmd) /* relay_chn APIs */ relay_chn_state_t relay_chn_get_state(uint8_t chn_id) { - if (!relay_chn_is_channel_id_valid(chn_id)) { - return RELAY_CHN_STATE_STOPPED; + if (!relay_chn_is_channel_id_valid(chn_id) || chn_id == RELAY_CHN_ID_ALL) { + return RELAY_CHN_STATE_UNDEFINED; } return relay_channels[chn_id].state; } char *relay_chn_get_state_str(uint8_t chn_id) { - if (!relay_chn_is_channel_id_valid(chn_id)) { - return "INVALID"; + if (!relay_chn_is_channel_id_valid(chn_id) || chn_id == RELAY_CHN_ID_ALL) { + return relay_chn_state_str(RELAY_CHN_STATE_UNDEFINED); } return relay_chn_state_str(relay_channels[chn_id].state); } -- 2.39.5 From a90649a4d30262c9f79f72641123b7efbb7fb385 Mon Sep 17 00:00:00 2001 From: ismail Date: Fri, 11 Jul 2025 18:32:28 +0300 Subject: [PATCH 05/18] Clean and add more tests. Clean the unnecessary codes and logging macros to keep the test output cleaner. Add fail tests for the `get_state*` functions. --- test_apps/main/test_relay_chn.c | 110 ++++++++++++++------------------ test_apps/sdkconfig | 1 - 2 files changed, 49 insertions(+), 62 deletions(-) diff --git a/test_apps/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c index fe920ce..4986a48 100644 --- a/test_apps/main/test_relay_chn.c +++ b/test_apps/main/test_relay_chn.c @@ -15,11 +15,6 @@ const uint8_t gpio_count = sizeof(gpio_map) / sizeof(gpio_map[0]); // Assuming 2 GPIOs are used per channel const uint8_t relay_chn_count = gpio_count / 2; -// Retrieve inertia value from SDKconfig -#ifndef CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS -#define CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS 500 // Default if not defined in SDKconfig -#endif - const uint32_t opposite_inertia_ms = CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS; // Tolerant delay margin to ensure operations complete, especially after inertia. @@ -27,40 +22,35 @@ const uint32_t test_delay_margin_ms = 50; // --- Test Setup/Teardown Functions --- void setUp(void) { - ESP_LOGI("TEST_SETUP", "Running setUp for relay_chn tests."); // Re-create the component before each test. relay_chn_create returns esp_err_t. - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - // Ensure all relays are stopped at the beginning, and transition to FREE state - for (uint8_t i = 0; i < relay_chn_count; i++) { - relay_chn_stop(i); // relay_chn_stop returns void - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); // Wait for FREE state - } - ESP_LOGI("TEST_SETUP", "All channels initialized to RELAY_CHN_STATE_FREE."); + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); } void tearDown(void) { - ESP_LOGI("TEST_TEARDOWN", "Running tearDown for relay_chn tests."); - // Stop all relays after each test, and transition to FREE state - for (uint8_t i = 0; i < relay_chn_count; i++) { - relay_chn_stop(i); // relay_chn_stop returns void - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); // Wait for FREE state - } - ESP_LOGI("TEST_TEARDOWN", "All channels returned to RELAY_CHN_STATE_FREE."); + } // --- Basic Functionality Tests --- // TEST_CASE 1: Test that relay channels initialize correctly to RELAY_CHN_STATE_FREE TEST_CASE("Relay channels initialize correctly to FREE state", "[relay_chn]") { - ESP_LOGI("TEST", "Running test: Relay channels initialize correctly to FREE state"); for (uint8_t i = 0; i < relay_chn_count; i++) { TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); } } +// TEST_CASE 1: Test that relays do nothing when an invlid channel id given +TEST_CASE("Run forward does nothing if channel id is invalid", "[relay_chn]") { + for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { + relay_chn_run_forward(i); // relay_chn_run_forward returns void + // Short delay for state to update + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + // TEST_CASE 2: Test that relays run in the forward direction and update their state TEST_CASE("Relay channels run forward and update state", "[relay_chn]") { - ESP_LOGI("TEST", "Running test: Relay channels run forward and update state"); for (uint8_t i = 0; i < relay_chn_count; i++) { relay_chn_run_forward(i); // relay_chn_run_forward returns void // Short delay for state to update @@ -69,9 +59,18 @@ TEST_CASE("Relay channels run forward and update state", "[relay_chn]") { } } -// TEST_CASE 3: Test that relays run in the reverse direction and update their state +// TEST_CASE 3: Test that relays do nothing when an invlid channel id given +TEST_CASE("Run reverse does nothing if channel id is invalid", "[relay_chn]") { + for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { + relay_chn_run_reverse(i); // relay_chn_run_forward returns void + // Short delay for state to update + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + +// TEST_CASE 4: Test that relays run in the reverse direction and update their state TEST_CASE("Relay channels run reverse and update state", "[relay_chn]") { - ESP_LOGI("TEST", "Running test: Relay channels run reverse and update state"); for (uint8_t i = 0; i < relay_chn_count; i++) { relay_chn_run_reverse(i); // relay_chn_run_reverse returns void vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); @@ -79,10 +78,9 @@ TEST_CASE("Relay channels run reverse and update state", "[relay_chn]") { } } -// TEST_CASE 4: Test that relays stop and transition to RELAY_CHN_STATE_FREE +// TEST_CASE 5: Test that relays stop and transition to RELAY_CHN_STATE_FREE // This test also verifies the transition to FREE state after a STOP command. TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn]") { - ESP_LOGI("TEST", "Running test: Relay channels stop and update to FREE state"); for (uint8_t i = 0; i < relay_chn_count; i++) { // First, run forward to test stopping and transitioning to FREE state relay_chn_run_forward(i); // relay_chn_run_forward returns void @@ -101,28 +99,34 @@ TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn]") { } } -// TEST_CASE 5: Test function calls with invalid channel IDs -// TEST_CASE("Invalid channel ID handling", "[relay_chn]") { -// ESP_LOGI("TEST", "Running test: Invalid channel ID handling"); -// uint8_t invalid_channel_id = relay_chn_count + 1; // An ID that is out of bounds +// TEST_CASE 6: Get state should return UNDEFINED when id is not valid +TEST_CASE("Get state returns UNDEFINED when id is invalid", "[relay_chn]") { + for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(i)); + } + // Test for running states also + relay_chn_run_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(i)); + } +} -// // These calls are expected to return ESP_ERR_INVALID_ARG, so TEST_ASSERT_EQUAL is appropriate. -// TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_run_forward(invalid_channel_id)); -// TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_run_reverse(invalid_channel_id)); -// TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_stop(invalid_channel_id)); - -// // Test tilt commands only if tilt functionality is enabled -// #if CONFIG_RELAY_CHN_ENABLE_TILTING == 1 -// TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_tilt_forward(invalid_channel_id)); -// TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_tilt_reverse(invalid_channel_id)); -// #endif - -// TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_get_state(invalid_channel_id)); -// } +// TEST_CASE 7: Get state string should return "UNKNOWN" when id is not valid +TEST_CASE("Get state string returns UNKNOWN when id is invalid", "[relay_chn]") { + for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(i)); + } + // Test for running states also + relay_chn_run_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(i)); + } +} -// TEST_CASE 6: Test independent operation of multiple relay channels +// TEST_CASE 8: Test independent operation of multiple relay channels TEST_CASE("Multiple channels can operate independently", "[relay_chn]") { - ESP_LOGI("TEST", "Running test: Multiple channels can operate independently"); if (relay_chn_count >= 2) { // Start Channel 0 in forward direction relay_chn_run_forward(0); // relay_chn_run_forward returns void @@ -160,7 +164,6 @@ TEST_CASE("Multiple channels can operate independently", "[relay_chn]") { // TEST_CASE 7: Test transition from forward to reverse with inertia and state checks // Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_REVERSE TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][inertia]") { - ESP_LOGI("TEST", "Running test: Forward to Reverse transition with opposite inertia"); uint8_t ch = 0; // Channel to test // 1. Start in forward direction @@ -182,7 +185,6 @@ TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][in // TEST_CASE 8: Test transition from reverse to forward with inertia and state checks // Scenario: RELAY_CHN_STATE_REVERSE -> (relay_chn_run_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_FORWARD TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][inertia]") { - ESP_LOGI("TEST", "Running test: Reverse to Forward transition with opposite inertia"); uint8_t ch = 0; // 1. Start in reverse direction @@ -203,7 +205,6 @@ TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][in // TEST_CASE 9: Test issuing the same run command while already running (no inertia expected) // Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD TEST_CASE("Running in same direction does not incur inertia", "[relay_chn][inertia]") { - ESP_LOGI("TEST", "Running test: Running in same direction does not incur inertia"); uint8_t ch = 0; // 1. Start in forward direction @@ -222,7 +223,6 @@ TEST_CASE("Running in same direction does not incur inertia", "[relay_chn][inert // TEST_CASE 10: Test transition from FREE state to running (no inertia expected) // Scenario: RELAY_CHN_STATE_FREE -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD TEST_CASE("FREE to Running transition without inertia", "[relay_chn][inertia]") { - ESP_LOGI("TEST", "Running test: FREE to Running transition without inertia"); uint8_t ch = 0; // setUp() should have already brought the channel to FREE state @@ -262,7 +262,6 @@ void prepare_channel_for_tilt(uint8_t chn_id, int initial_cmd) { // TEST_CASE 11: Test transition from running forward to tilt forward // Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_tilt_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_FORWARD TEST_CASE("Run Forward to Tilt Forward transition with inertia", "[relay_chn][tilt][inertia]") { - ESP_LOGI("TEST", "Running test: Run Forward to Tilt Forward transition with inertia"); uint8_t ch = 0; // Prepare channel by running forward first to set last_run_cmd @@ -287,7 +286,6 @@ TEST_CASE("Run Forward to Tilt Forward transition with inertia", "[relay_chn][ti // TEST_CASE 12: Test transition from running reverse to tilt reverse // Scenario: RELAY_CHN_STATE_REVERSE -> (relay_chn_tilt_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_REVERSE TEST_CASE("Run Reverse to Tilt Reverse transition with inertia", "[relay_chn][tilt][inertia]") { - ESP_LOGI("TEST", "Running test: Run Reverse to Tilt Reverse transition with inertia"); uint8_t ch = 0; // Prepare channel by running reverse first to set last_run_cmd @@ -310,7 +308,6 @@ TEST_CASE("Run Reverse to Tilt Reverse transition with inertia", "[relay_chn][ti // TEST_CASE 13: Test transition from FREE state to tilt forward (now with preparation) // Scenario: RELAY_CHN_STATE_FREE -> (prepare) -> RELAY_CHN_STATE_FREE -> (relay_chn_tilt_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_FORWARD TEST_CASE("FREE to Tilt Forward transition with inertia (prepared)", "[relay_chn][tilt][inertia]") { - ESP_LOGI("TEST", "Running test: FREE to Tilt Forward transition with inertia (prepared)"); uint8_t ch = 0; // Prepare channel by running forward first to set last_run_cmd @@ -327,7 +324,6 @@ TEST_CASE("FREE to Tilt Forward transition with inertia (prepared)", "[relay_chn // TEST_CASE 14: Test transition from FREE state to tilt reverse (now with preparation) // Scenario: RELAY_CHN_STATE_FREE -> (prepare) -> RELAY_CHN_STATE_FREE -> (relay_chn_tilt_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_REVERSE TEST_CASE("FREE to Tilt Reverse transition with inertia (prepared)", "[relay_chn][tilt][inertia]") { - ESP_LOGI("TEST", "Running test: FREE to Tilt Reverse transition with inertia (prepared)"); uint8_t ch = 0; // Prepare channel by running reverse first to set last_run_cmd @@ -343,7 +339,6 @@ TEST_CASE("FREE to Tilt Reverse transition with inertia (prepared)", "[relay_chn // TEST_CASE 15: Test transition from tilt forward to run forward (inertia expected for run) // Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD TEST_CASE("Tilt Forward to Run Forward transition with inertia", "[relay_chn][tilt][inertia]") { - ESP_LOGI("TEST", "Running test: Tilt Forward to Run Forward transition with inertia"); uint8_t ch = 0; // Prepare channel by running forward first to set last_run_cmd, then tilt @@ -363,7 +358,6 @@ TEST_CASE("Tilt Forward to Run Forward transition with inertia", "[relay_chn][ti // TEST_CASE 16: Test transition from tilt reverse to run reverse (no inertia expected for run) // Scenario: RELAY_CHN_STATE_TILT_REVERSE -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_REVERSE TEST_CASE("Tilt Reverse to Run Reverse transition with inertia", "[relay_chn][tilt][inertia]") { - ESP_LOGI("TEST", "Running test: Tilt Reverse to Run Reverse transition with inertia"); uint8_t ch = 0; // Prepare channel by running reverse first to set last_run_cmd, then tilt @@ -382,7 +376,6 @@ TEST_CASE("Tilt Reverse to Run Reverse transition with inertia", "[relay_chn][ti // TEST_CASE 17: Test transition from tilt forward to run reverse (without inertia) // Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_REVERSE TEST_CASE("Tilt Forward to Run Reverse transition without inertia", "[relay_chn][tilt][inertia]") { - ESP_LOGI("TEST", "Running test: Tilt Forward to Run Reverse transition without inertia"); uint8_t ch = 0; // Prepare channel by running forward first to set last_run_cmd, then tilt @@ -400,7 +393,6 @@ TEST_CASE("Tilt Forward to Run Reverse transition without inertia", "[relay_chn] // TEST_CASE 18: Test stopping from a tilt state (no inertia for stop command itself) // Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_stop) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_FREE TEST_CASE("Tilt to Stop transition without immediate inertia for stop", "[relay_chn][tilt][inertia]") { - ESP_LOGI("TEST", "Running test: Tilt to Stop transition without immediate inertia for stop"); uint8_t ch = 0; // Prepare channel by running forward first to set last_run_cmd, then tilt @@ -420,7 +412,6 @@ TEST_CASE("Tilt to Stop transition without immediate inertia for stop", "[relay_ // If tilt functionality is disabled, these tests are skipped. // A dummy test case is added to indicate this in the test output. TEST_CASE("Tilt functionality is disabled, skipping tilt tests", "[relay_chn][tilt_disabled]") { - ESP_LOGI("TEST", "Tilt functionality is disabled (CONFIG_RELAY_CHN_ENABLE_TILTING is 0). Skipping tilt tests."); TEST_ASSERT_TRUE(true); // Just to ensure at least one test passes for visibility } #endif // CONFIG_RELAY_CHN_ENABLE_TILTING @@ -430,13 +421,10 @@ TEST_CASE("Tilt functionality is disabled, skipping tilt tests", "[relay_chn][ti // --- app_main function --- void app_main(void) { - ESP_LOGI("APP_MAIN", "Starting relay_chn unit tests..."); - // Run the Unity test runner unity_run_all_tests(); // After tests complete, instead of restarting, the device will halt. - ESP_LOGI("APP_MAIN", "All relay_chn tests completed. Device halted."); while (1) { vTaskDelay(pdMS_TO_TICKS(1000)); // Wait with low power consumption } diff --git a/test_apps/sdkconfig b/test_apps/sdkconfig index cb194db..3f36eb7 100644 --- a/test_apps/sdkconfig +++ b/test_apps/sdkconfig @@ -79,7 +79,6 @@ CONFIG_SOC_ADC_SHARED_POWER=y CONFIG_SOC_APB_BACKUP_DMA=y CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y -CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y CONFIG_SOC_CACHE_MEMORY_IBANK_SIZE=0x4000 CONFIG_SOC_CPU_CORES_NUM=1 CONFIG_SOC_CPU_INTR_NUM=32 -- 2.39.5 From f1cb9283412490b2eca19dcd68bf77d685cf4ad9 Mon Sep 17 00:00:00 2001 From: ismail Date: Mon, 14 Jul 2025 11:37:14 +0300 Subject: [PATCH 06/18] Add missing destroy function. The component allocates resources (timers, event loop) in relay_chn_create but never frees them. This is a resource leak. Hence, a destroy function added to free the resources gracefully. Fixes #1048. --- include/relay_chn.h | 7 +++++++ src/relay_chn.c | 32 ++++++++++++++++++++++++++++++++ test_apps/main/test_relay_chn.c | 3 ++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/include/relay_chn.h b/include/relay_chn.h index 6f31edc..5d7f8a0 100644 --- a/include/relay_chn.h +++ b/include/relay_chn.h @@ -97,6 +97,13 @@ typedef void (*relay_chn_state_listener_t)(uint8_t chn_id, relay_chn_state_t old */ esp_err_t relay_chn_create(const gpio_num_t* gpio_map, uint8_t gpio_count); +/** + * @brief Destroy the relay channels and free resources. + * + * This function cleans up the relay channels and releases any resources allocated during their creation. + */ +void relay_chn_destroy(void); + /** * @brief Register a channel state change listener. * diff --git a/src/relay_chn.c b/src/relay_chn.c index 02ce94b..cbeab97 100644 --- a/src/relay_chn.c +++ b/src/relay_chn.c @@ -370,6 +370,38 @@ esp_err_t relay_chn_create(const gpio_num_t* gpio_map, uint8_t gpio_count) return ret; } +void relay_chn_destroy(void) +{ + // Destroy the event loop + esp_event_loop_delete(relay_chn_event_loop); + relay_chn_event_loop = NULL; + + // Free the listeners + if (relay_chn_state_listener_manager.listeners != NULL) { + free(relay_chn_state_listener_manager.listeners); + relay_chn_state_listener_manager.listeners = NULL; + } + + // Destroy the timers and reset GPIOs + for (int i = 0; i < RELAY_CHN_COUNT; i++) { + relay_chn_t* relay_chn = &relay_channels[i]; + if (relay_chn->inertia_timer != NULL) { + esp_timer_delete(relay_chn->inertia_timer); + relay_chn->inertia_timer = NULL; + } + +#if RELAY_CHN_ENABLE_TILTING == 1 + if (relay_chn->tilt_control.tilt_timer != NULL) { + esp_timer_delete(relay_chn->tilt_control.tilt_timer); + relay_chn->tilt_control.tilt_timer = NULL; + } +#endif // RELAY_CHN_ENABLE_TILTING + + gpio_reset_pin(relay_chn->output.forward_pin); + gpio_reset_pin(relay_chn->output.reverse_pin); + } +} + static int relay_chn_listener_index(relay_chn_state_listener_t listener) { for (int i = 0; i < relay_chn_state_listener_manager.listener_count; i++) { diff --git a/test_apps/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c index 4986a48..5360cc8 100644 --- a/test_apps/main/test_relay_chn.c +++ b/test_apps/main/test_relay_chn.c @@ -27,9 +27,10 @@ void setUp(void) { } void tearDown(void) { - + relay_chn_destroy(); // Clean up after each test } + // --- Basic Functionality Tests --- // TEST_CASE 1: Test that relay channels initialize correctly to RELAY_CHN_STATE_FREE -- 2.39.5 From 1ee70be715b06be7fc18e1152be4d89943777db8 Mon Sep 17 00:00:00 2001 From: ismail Date: Mon, 14 Jul 2025 12:11:51 +0300 Subject: [PATCH 07/18] Fix invalid ID test loops. --- test_apps/main/test_relay_chn.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/test_apps/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c index 5360cc8..c92651a 100644 --- a/test_apps/main/test_relay_chn.c +++ b/test_apps/main/test_relay_chn.c @@ -42,8 +42,9 @@ TEST_CASE("Relay channels initialize correctly to FREE state", "[relay_chn]") { // TEST_CASE 1: Test that relays do nothing when an invlid channel id given TEST_CASE("Run forward does nothing if channel id is invalid", "[relay_chn]") { - for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { - relay_chn_run_forward(i); // relay_chn_run_forward returns void + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + relay_chn_run_forward(invalid_id); // relay_chn_run_forward returns void // Short delay for state to update vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); @@ -62,8 +63,9 @@ TEST_CASE("Relay channels run forward and update state", "[relay_chn]") { // TEST_CASE 3: Test that relays do nothing when an invlid channel id given TEST_CASE("Run reverse does nothing if channel id is invalid", "[relay_chn]") { - for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { - relay_chn_run_reverse(i); // relay_chn_run_forward returns void + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + relay_chn_run_reverse(invalid_id); // relay_chn_run_forward returns void // Short delay for state to update vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); @@ -102,27 +104,31 @@ TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn]") { // TEST_CASE 6: Get state should return UNDEFINED when id is not valid TEST_CASE("Get state returns UNDEFINED when id is invalid", "[relay_chn]") { - for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(i)); + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(invalid_id)); } // Test for running states also relay_chn_run_forward(RELAY_CHN_ID_ALL); vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(i)); + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(invalid_id)); } } // TEST_CASE 7: Get state string should return "UNKNOWN" when id is not valid TEST_CASE("Get state string returns UNKNOWN when id is invalid", "[relay_chn]") { - for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(i)); + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(invalid_id)); } // Test for running states also relay_chn_run_forward(RELAY_CHN_ID_ALL); vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - for (uint8_t i = relay_chn_count*2; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(i)); + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(invalid_id)); } } -- 2.39.5 From db62a7b5b244efab7484013d5f45d04dbbc32fc9 Mon Sep 17 00:00:00 2001 From: ismail Date: Mon, 14 Jul 2025 14:24:26 +0300 Subject: [PATCH 08/18] Fix listener memory allocation bug. - Replaced the buggy, oldschool, plain pointer based list approach with more robust FreeRTOS linked list implementation for the listener API. Fixes #1049. - Added relevant test cases. Refs #1030. --- src/relay_chn.c | 153 ++++++++++++++++++-------------- test_apps/main/test_relay_chn.c | 122 +++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 69 deletions(-) diff --git a/src/relay_chn.c b/src/relay_chn.c index cbeab97..4e719ba 100644 --- a/src/relay_chn.c +++ b/src/relay_chn.c @@ -23,6 +23,7 @@ #include "esp_event_base.h" #include "esp_event.h" #include "relay_chn.h" +#include "freertos/idf_additions.h" #include "sdkconfig.h" @@ -180,13 +181,19 @@ static esp_err_t relay_chn_dispatch_tilt_cmd(relay_chn_t *relay_chn, relay_chn_t /** - * @brief Structure to manage the state change listeners. + * @brief Structure to hold a listener entry in the linked list. */ -struct relay_chn_state_listener_manager_type { - uint8_t listener_count; ///< The number of registered listeners. - relay_chn_state_listener_t *listeners; ///< The list that holds references to the registered listeners. -} relay_chn_state_listener_manager; +typedef struct relay_chn_listener_entry_type { + relay_chn_state_listener_t listener; ///< The listener function pointer. + ListItem_t list_item; ///< FreeRTOS list item. +} relay_chn_listener_entry_t; +/** + * @brief The list that holds references to the registered listeners. + * + * Uses a FreeRTOS list for safe and dynamic management of listeners. + */ +static List_t relay_chn_listener_list; static relay_chn_t relay_channels[RELAY_CHN_COUNT]; static esp_event_loop_handle_t relay_chn_event_loop; @@ -360,12 +367,8 @@ esp_err_t relay_chn_create(const gpio_num_t* gpio_map, uint8_t gpio_count) ESP_RETURN_ON_ERROR(ret, TAG, "Failed to initialize tilt feature"); #endif - // Init the state listener manager - relay_chn_state_listener_manager.listeners = malloc(sizeof(relay_chn_state_listener_t*)); - if (relay_chn_state_listener_manager.listeners == NULL) { - ESP_LOGE(TAG, "Failed to initialize memory for the listeners!"); - ret = ESP_ERR_NO_MEM; - } + // Init the state listener list + vListInitialise(&relay_chn_listener_list); return ret; } @@ -377,9 +380,11 @@ void relay_chn_destroy(void) relay_chn_event_loop = NULL; // Free the listeners - if (relay_chn_state_listener_manager.listeners != NULL) { - free(relay_chn_state_listener_manager.listeners); - relay_chn_state_listener_manager.listeners = NULL; + while (listCURRENT_LIST_LENGTH(&relay_chn_listener_list) > 0) { + ListItem_t *pxItem = listGET_HEAD_ENTRY(&relay_chn_listener_list); + relay_chn_listener_entry_t *entry = listGET_LIST_ITEM_OWNER(pxItem); + uxListRemove(pxItem); + free(entry); } // Destroy the timers and reset GPIOs @@ -402,74 +407,77 @@ void relay_chn_destroy(void) } } -static int relay_chn_listener_index(relay_chn_state_listener_t listener) +/** + * @brief Find a listener entry in the list by its function pointer. + * + * This function replaces the old index-based search and is used to check + * for the existence of a listener before registration or for finding it + * during unregistration. + * + * @param listener The listener function pointer to find. + * @return Pointer to the listener entry if found, otherwise NULL. + */ +static relay_chn_listener_entry_t* find_listener_entry(relay_chn_state_listener_t listener) { - for (int i = 0; i < relay_chn_state_listener_manager.listener_count; i++) { - if (relay_chn_state_listener_manager.listeners[i] == listener) { - // This is the listener to unregister. Check if it is in the middle - ESP_LOGD(TAG, "relay_chn_listener_index: Listener %p; found at index %d.", listener, i); - return i; + // Iterate through the linked list of listeners + for (ListItem_t *pxListItem = listGET_HEAD_ENTRY(&relay_chn_listener_list); + pxListItem != listGET_END_MARKER(&relay_chn_listener_list); + pxListItem = listGET_NEXT(pxListItem)) { + + relay_chn_listener_entry_t *entry = (relay_chn_listener_entry_t *) listGET_LIST_ITEM_OWNER(pxListItem); + if (entry->listener == listener) { + // Found the listener, return the entry + return entry; } } - return -1; + + // Listener was not found in the list + return NULL; } esp_err_t relay_chn_register_listener(relay_chn_state_listener_t listener) { - if (listener == NULL) { - ESP_LOGE(TAG, "relay_chn_register_listener: A NULL listener given."); - return ESP_ERR_INVALID_ARG; - } + ESP_RETURN_ON_FALSE(listener, ESP_ERR_INVALID_ARG, TAG, "Listener cannot be NULL"); - if (relay_chn_listener_index(listener) > -1) { - ESP_LOGD(TAG, "relay_chn_register_listener: The listener %p is already registered.", listener); + // Check for duplicates + if (find_listener_entry(listener) != NULL) { + ESP_LOGD(TAG, "Listener %p already registered", listener); return ESP_OK; } - ESP_LOGD(TAG, "relay_chn_register_listener: Register listener: %p", listener); - relay_chn_state_listener_manager.listeners[relay_chn_state_listener_manager.listener_count] = listener; - // Update listener count - relay_chn_state_listener_manager.listener_count++; + // Allocate memory for the new listener entry + relay_chn_listener_entry_t *entry = malloc(sizeof(relay_chn_listener_entry_t)); + ESP_RETURN_ON_FALSE(entry, ESP_ERR_NO_MEM, TAG, "Failed to allocate memory for listener"); + // Initialize and insert the new listener + entry->listener = listener; + vListInitialiseItem(&(entry->list_item)); + listSET_LIST_ITEM_OWNER(&(entry->list_item), (void *)entry); + vListInsertEnd(&relay_chn_listener_list, &(entry->list_item)); + + ESP_LOGD(TAG, "Registered listener %p", listener); return ESP_OK; } void relay_chn_unregister_listener(relay_chn_state_listener_t listener) { - if (listener == NULL) { - ESP_LOGD(TAG, "relay_chn_unregister_listener: A NULL listener given, nothing to do."); - return; - } - // Search the listener in the listeners list and get its index if exists - int i = relay_chn_listener_index(listener); - if (i == -1) { - ESP_LOGD(TAG, "relay_chn_unregister_listener: %p is not registered already.", listener); + if (listener == NULL) + { + ESP_LOGD(TAG, "Cannot unregister a NULL listener."); return; } - uint8_t max_index = relay_chn_state_listener_manager.listener_count - 1; - // Check whether the listener's index is in the middle - if (i == max_index) { - // free(&relay_chn_state_listener_manager.listeners[i]); - relay_chn_state_listener_manager.listeners[i] = NULL; + // Find the listener entry in the list + relay_chn_listener_entry_t *entry = find_listener_entry(listener); + + if (entry != NULL) { + // Remove the item from the list and free the allocated memory + uxListRemove(&(entry->list_item)); + free(entry); + ESP_LOGD(TAG, "Unregistered listener %p", listener); + } else { + ESP_LOGD(TAG, "Listener %p not found for unregistration.", listener); } - else { - // It is in the middle, so align the next elements in the list and then free the last empty pointer - // Align the next elements - uint8_t num_of_elements = max_index - i; - relay_chn_state_listener_t *pnext = NULL; - // (i + j): current index; (i + j + 1): next index - for (uint8_t j = 0; j < num_of_elements; j++) { - uint8_t current_index = i + j; - uint8_t next_index = current_index + 1; - pnext = &relay_chn_state_listener_manager.listeners[next_index]; - relay_chn_state_listener_manager.listeners[current_index] = *pnext; - } - // free(&relay_chn_state_listener_manager.listeners[max_index]); // Free the last element - relay_chn_state_listener_manager.listeners[max_index] = NULL; // Free the last element - } - // Decrease listener count - relay_chn_state_listener_manager.listener_count--; } /** @@ -524,17 +532,24 @@ static esp_err_t relay_chn_start_esp_timer_once(esp_timer_handle_t esp_timer, ui static void relay_chn_update_state(relay_chn_t *relay_chn, relay_chn_state_t new_state) { - relay_chn_state_t old = relay_chn->state; + relay_chn_state_t old_state = relay_chn->state; + + // Only update and notify if the state has actually changed. + if (old_state == new_state) { + return; + } + relay_chn->state = new_state; - for (uint8_t i = 0; i < relay_chn_state_listener_manager.listener_count; i++) { - relay_chn_state_listener_t listener = relay_chn_state_listener_manager.listeners[i]; - if (listener == NULL) { - relay_chn_state_listener_manager.listener_count -= 1; - ESP_LOGD(TAG, "relay_chn_update_state: A listener is NULL at index: %u", i); + // Iterate through the linked list of listeners and notify them. + for (ListItem_t *pxListItem = listGET_HEAD_ENTRY(&relay_chn_listener_list); + pxListItem != listGET_END_MARKER(&relay_chn_listener_list); + pxListItem = listGET_NEXT(pxListItem)) { + relay_chn_listener_entry_t *entry = (relay_chn_listener_entry_t *) listGET_LIST_ITEM_OWNER(pxListItem); + if (entry && entry->listener) { + // Emit the state change to the listeners + entry->listener(relay_chn->id, old_state, new_state); } - // Emit the state change to the listeners - listener(relay_chn->id, old, new_state); } } diff --git a/test_apps/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c index c92651a..9d9eea2 100644 --- a/test_apps/main/test_relay_chn.c +++ b/test_apps/main/test_relay_chn.c @@ -6,6 +6,7 @@ #include #include #include "sdkconfig.h" // For accessing CONFIG_* values +#include // Test GPIOs and channel IDs // Please ensure these GPIOs are correct and suitable for your board. @@ -242,6 +243,127 @@ TEST_CASE("FREE to Running transition without inertia", "[relay_chn][inertia]") TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); } +// --- Listener Test Globals --- +typedef struct { + uint8_t chn_id; + relay_chn_state_t old_state; + relay_chn_state_t new_state; + int call_count; +} listener_callback_info_t; + +static listener_callback_info_t listener1_info; +static listener_callback_info_t listener2_info; + +// --- Listener Test Helper Functions --- + +// Clear the memory from possible garbage values +static void reset_listener_info(listener_callback_info_t* info) { + memset(info, 0, sizeof(listener_callback_info_t)); +} + +static void test_listener_1(uint8_t chn_id, relay_chn_state_t old_state, relay_chn_state_t new_state) { + listener1_info.chn_id = chn_id; + listener1_info.old_state = old_state; + listener1_info.new_state = new_state; + listener1_info.call_count++; +} + +static void test_listener_2(uint8_t chn_id, relay_chn_state_t old_state, relay_chn_state_t new_state) { + listener2_info.chn_id = chn_id; + listener2_info.old_state = old_state; + listener2_info.new_state = new_state; + listener2_info.call_count++; +} + +// ### Listener Functionality Tests + +TEST_CASE("Listener is called on state change", "[relay_chn][listener]") { + uint8_t ch = 0; + reset_listener_info(&listener1_info); + + // 1. Register the listener + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); + + // 2. Trigger a state change + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Allow event to be processed + + // 3. Verify the listener was called with correct parameters + TEST_ASSERT_EQUAL(1, listener1_info.call_count); + TEST_ASSERT_EQUAL(ch, listener1_info.chn_id); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener1_info.old_state); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener1_info.new_state); + + // 4. Unregister to clean up + relay_chn_unregister_listener(test_listener_1); +} + +TEST_CASE("Unregistered listener is not called", "[relay_chn][listener]") { + uint8_t ch = 0; + reset_listener_info(&listener1_info); + + // 1. Register and then immediately unregister the listener + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); + relay_chn_unregister_listener(test_listener_1); + + // 2. Trigger a state change + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 3. Verify the listener was NOT called + TEST_ASSERT_EQUAL(0, listener1_info.call_count); +} + +TEST_CASE("Multiple listeners are called on state change", "[relay_chn][listener]") { + uint8_t ch = 0; + reset_listener_info(&listener1_info); + reset_listener_info(&listener2_info); + + // 1. Register two different listeners + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); + TEST_ESP_OK(relay_chn_register_listener(test_listener_2)); + + // 2. Trigger a state change + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 3. Verify listener 1 was called correctly + TEST_ASSERT_EQUAL(1, listener1_info.call_count); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener1_info.old_state); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener1_info.new_state); + + // 4. Verify listener 2 was also called correctly + TEST_ASSERT_EQUAL(1, listener2_info.call_count); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener2_info.old_state); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener2_info.new_state); + + // 5. Clean up + relay_chn_unregister_listener(test_listener_1); + relay_chn_unregister_listener(test_listener_2); +} + +TEST_CASE("Listener registration handles invalid arguments and duplicates", "[relay_chn][listener]") { + reset_listener_info(&listener1_info); + + // 1. Registering a NULL listener should fail + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_register_listener(NULL)); + + // 2. Unregistering a NULL listener should not crash + relay_chn_unregister_listener(NULL); + + // 3. Registering the same listener twice should be handled gracefully + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); // Second call should be a no-op + + // 4. Trigger a state change and verify the listener is only called ONCE + relay_chn_run_forward(0); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(1, listener1_info.call_count); + + // 5. Clean up + relay_chn_unregister_listener(test_listener_1); +} + // ### Tilt Functionality Tests (Conditional) -- 2.39.5 From 82312ba7c376e6fbc08345afaa2cb5b8286152da Mon Sep 17 00:00:00 2001 From: ismail Date: Tue, 15 Jul 2025 12:17:46 +0300 Subject: [PATCH 09/18] Add NULL handling for the `gpio_num` pointer. Fixes #1050. --- src/relay_chn.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/relay_chn.c b/src/relay_chn.c index 4e719ba..6fdc016 100644 --- a/src/relay_chn.c +++ b/src/relay_chn.c @@ -298,6 +298,8 @@ static esp_err_t relay_chn_create_event_loop() esp_err_t relay_chn_create(const gpio_num_t* gpio_map, uint8_t gpio_count) { + ESP_RETURN_ON_FALSE(gpio_map, ESP_ERR_INVALID_ARG, TAG, "gpio_map cannot be NULL"); + // Check if the device's GPIOs are enough for the number of channels if (RELAY_CHN_COUNT > (GPIO_PIN_COUNT / 2)) { ESP_LOGE(TAG, "Not enough GPIOs for the number of channels!"); -- 2.39.5 From a587036093c6d279f281e306c9da053ed28326e3 Mon Sep 17 00:00:00 2001 From: ismail Date: Tue, 15 Jul 2025 12:23:21 +0300 Subject: [PATCH 10/18] Add tests for init error handling. Added tests for covering initialization error handling cases like; NULL pointer, invalid GPIO count etc. This changed implied removing the `relay_chn_create` from the Unity's `setUp` function and place it in each testcase. Refs #1050, #1030. --- test_apps/main/test_relay_chn.c | 155 ++++++++++++++++++++++++++------ 1 file changed, 129 insertions(+), 26 deletions(-) diff --git a/test_apps/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c index 9d9eea2..d0975fd 100644 --- a/test_apps/main/test_relay_chn.c +++ b/test_apps/main/test_relay_chn.c @@ -8,6 +8,9 @@ #include "sdkconfig.h" // For accessing CONFIG_* values #include + +const char *TAG = "RELAY_CHN_TEST"; + // Test GPIOs and channel IDs // Please ensure these GPIOs are correct and suitable for your board. // Two channels (4 GPIOs) are used as an example. @@ -21,28 +24,56 @@ const uint32_t opposite_inertia_ms = CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS; // Tolerant delay margin to ensure operations complete, especially after inertia. const uint32_t test_delay_margin_ms = 50; +static bool g_is_component_initialized = false; + // --- Test Setup/Teardown Functions --- void setUp(void) { - // Re-create the component before each test. relay_chn_create returns esp_err_t. - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + // Reset state before each test. Initialization is now done inside each test case + // to allow for testing of initialization failures. + g_is_component_initialized = false; } void tearDown(void) { - relay_chn_destroy(); // Clean up after each test + // Conditionally destroy the component to avoid crashing if creation failed. + if (g_is_component_initialized) { + relay_chn_destroy(); + } } +// --- Initialization Tests --- + +TEST_CASE("relay_chn_create handles invalid arguments", "[relay_chn][init]") +{ + // 1. Test with NULL gpio_map + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(NULL, gpio_count)); + + // 2. Test with incorrect gpio_count (must be RELAY_CHN_COUNT * 2) + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, gpio_count - 1)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, 1)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, 0)); + + // 3. Test with invalid GPIO numbers (GPIO_NUM_MAX is an invalid GPIO for output) + gpio_num_t invalid_gpio_map[] = {GPIO_NUM_4, GPIO_NUM_MAX, GPIO_NUM_18, GPIO_NUM_19}; + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(invalid_gpio_map, gpio_count)); +} + // --- Basic Functionality Tests --- -// TEST_CASE 1: Test that relay channels initialize correctly to RELAY_CHN_STATE_FREE +// TEST_CASE: Test that relay channels initialize correctly to RELAY_CHN_STATE_FREE TEST_CASE("Relay channels initialize correctly to FREE state", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + for (uint8_t i = 0; i < relay_chn_count; i++) { TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); } } -// TEST_CASE 1: Test that relays do nothing when an invlid channel id given +// TEST_CASE: Test that relays do nothing when an invlid channel id given TEST_CASE("Run forward does nothing if channel id is invalid", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; for (uint8_t i = 0; i < relay_chn_count; i++) { int invalid_id = relay_chn_count * 2 + i; relay_chn_run_forward(invalid_id); // relay_chn_run_forward returns void @@ -52,8 +83,11 @@ TEST_CASE("Run forward does nothing if channel id is invalid", "[relay_chn]") { } } -// TEST_CASE 2: Test that relays run in the forward direction and update their state +// TEST_CASE: Test that relays run in the forward direction and update their state TEST_CASE("Relay channels run forward and update state", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + for (uint8_t i = 0; i < relay_chn_count; i++) { relay_chn_run_forward(i); // relay_chn_run_forward returns void // Short delay for state to update @@ -62,19 +96,26 @@ TEST_CASE("Relay channels run forward and update state", "[relay_chn]") { } } -// TEST_CASE 3: Test that relays do nothing when an invlid channel id given +// TEST_CASE: Test that relays do nothing when an invlid channel id given TEST_CASE("Run reverse does nothing if channel id is invalid", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Verify that no valid channels were affected for (uint8_t i = 0; i < relay_chn_count; i++) { int invalid_id = relay_chn_count * 2 + i; - relay_chn_run_reverse(invalid_id); // relay_chn_run_forward returns void - // Short delay for state to update + // Call run_reverse with an invalid ID + relay_chn_run_reverse(invalid_id); vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); } } -// TEST_CASE 4: Test that relays run in the reverse direction and update their state +// TEST_CASE: Test that relays run in the reverse direction and update their state TEST_CASE("Relay channels run reverse and update state", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + for (uint8_t i = 0; i < relay_chn_count; i++) { relay_chn_run_reverse(i); // relay_chn_run_reverse returns void vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); @@ -82,9 +123,12 @@ TEST_CASE("Relay channels run reverse and update state", "[relay_chn]") { } } -// TEST_CASE 5: Test that relays stop and transition to RELAY_CHN_STATE_FREE +// TEST_CASE: Test that relays stop and transition to RELAY_CHN_STATE_FREE // This test also verifies the transition to FREE state after a STOP command. TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + for (uint8_t i = 0; i < relay_chn_count; i++) { // First, run forward to test stopping and transitioning to FREE state relay_chn_run_forward(i); // relay_chn_run_forward returns void @@ -103,8 +147,11 @@ TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn]") { } } -// TEST_CASE 6: Get state should return UNDEFINED when id is not valid +// TEST_CASE: Get state should return UNDEFINED when id is not valid TEST_CASE("Get state returns UNDEFINED when id is invalid", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + for (uint8_t i = 0; i < relay_chn_count; i++) { int invalid_id = relay_chn_count * 2 + i; TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(invalid_id)); @@ -118,8 +165,11 @@ TEST_CASE("Get state returns UNDEFINED when id is invalid", "[relay_chn]") { } } -// TEST_CASE 7: Get state string should return "UNKNOWN" when id is not valid +// TEST_CASE: Get state string should return "UNKNOWN" when id is not valid TEST_CASE("Get state string returns UNKNOWN when id is invalid", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + for (uint8_t i = 0; i < relay_chn_count; i++) { int invalid_id = relay_chn_count * 2 + i; TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(invalid_id)); @@ -133,8 +183,11 @@ TEST_CASE("Get state string returns UNKNOWN when id is invalid", "[relay_chn]") } } -// TEST_CASE 8: Test independent operation of multiple relay channels +// TEST_CASE: Test independent operation of multiple relay channels TEST_CASE("Multiple channels can operate independently", "[relay_chn]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + if (relay_chn_count >= 2) { // Start Channel 0 in forward direction relay_chn_run_forward(0); // relay_chn_run_forward returns void @@ -169,11 +222,14 @@ TEST_CASE("Multiple channels can operate independently", "[relay_chn]") { // This section specifically targets the inertia periods and complex state transitions as per the component's logic. -// TEST_CASE 7: Test transition from forward to reverse with inertia and state checks +// TEST_CASE: Test transition from forward to reverse with inertia and state checks // Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_REVERSE TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][inertia]") { uint8_t ch = 0; // Channel to test + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // 1. Start in forward direction relay_chn_run_forward(ch); // relay_chn_run_forward returns void vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Short delay for state stabilization @@ -190,11 +246,14 @@ TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][in TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); // Should now be in reverse state } -// TEST_CASE 8: Test transition from reverse to forward with inertia and state checks +// TEST_CASE: Test transition from reverse to forward with inertia and state checks // Scenario: RELAY_CHN_STATE_REVERSE -> (relay_chn_run_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_FORWARD TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // 1. Start in reverse direction relay_chn_run_reverse(ch); // relay_chn_run_reverse returns void vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); @@ -210,11 +269,14 @@ TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][in TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); } -// TEST_CASE 9: Test issuing the same run command while already running (no inertia expected) +// TEST_CASE: Test issuing the same run command while already running (no inertia expected) // Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD TEST_CASE("Running in same direction does not incur inertia", "[relay_chn][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // 1. Start in forward direction relay_chn_run_forward(ch); // relay_chn_run_forward returns void vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); @@ -228,11 +290,14 @@ TEST_CASE("Running in same direction does not incur inertia", "[relay_chn][inert TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); } -// TEST_CASE 10: Test transition from FREE state to running (no inertia expected) +// TEST_CASE: Test transition from FREE state to running (no inertia expected) // Scenario: RELAY_CHN_STATE_FREE -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD TEST_CASE("FREE to Running transition without inertia", "[relay_chn][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // setUp() should have already brought the channel to FREE state TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); @@ -279,6 +344,9 @@ static void test_listener_2(uint8_t chn_id, relay_chn_state_t old_state, relay_c TEST_CASE("Listener is called on state change", "[relay_chn][listener]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + reset_listener_info(&listener1_info); // 1. Register the listener @@ -300,6 +368,9 @@ TEST_CASE("Listener is called on state change", "[relay_chn][listener]") { TEST_CASE("Unregistered listener is not called", "[relay_chn][listener]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + reset_listener_info(&listener1_info); // 1. Register and then immediately unregister the listener @@ -316,6 +387,9 @@ TEST_CASE("Unregistered listener is not called", "[relay_chn][listener]") { TEST_CASE("Multiple listeners are called on state change", "[relay_chn][listener]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + reset_listener_info(&listener1_info); reset_listener_info(&listener2_info); @@ -343,6 +417,9 @@ TEST_CASE("Multiple listeners are called on state change", "[relay_chn][listener } TEST_CASE("Listener registration handles invalid arguments and duplicates", "[relay_chn][listener]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + reset_listener_info(&listener1_info); // 1. Registering a NULL listener should fail @@ -388,11 +465,14 @@ void prepare_channel_for_tilt(uint8_t chn_id, int initial_cmd) { TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(chn_id)); } -// TEST_CASE 11: Test transition from running forward to tilt forward +// TEST_CASE: Test transition from running forward to tilt forward // Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_tilt_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_FORWARD TEST_CASE("Run Forward to Tilt Forward transition with inertia", "[relay_chn][tilt][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // Prepare channel by running forward first to set last_run_cmd prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); @@ -412,11 +492,14 @@ TEST_CASE("Run Forward to Tilt Forward transition with inertia", "[relay_chn][ti TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); } -// TEST_CASE 12: Test transition from running reverse to tilt reverse +// TEST_CASE: Test transition from running reverse to tilt reverse // Scenario: RELAY_CHN_STATE_REVERSE -> (relay_chn_tilt_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_REVERSE TEST_CASE("Run Reverse to Tilt Reverse transition with inertia", "[relay_chn][tilt][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // Prepare channel by running reverse first to set last_run_cmd prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); @@ -434,11 +517,14 @@ TEST_CASE("Run Reverse to Tilt Reverse transition with inertia", "[relay_chn][ti TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); } -// TEST_CASE 13: Test transition from FREE state to tilt forward (now with preparation) +// TEST_CASE: Test transition from FREE state to tilt forward (now with preparation) // Scenario: RELAY_CHN_STATE_FREE -> (prepare) -> RELAY_CHN_STATE_FREE -> (relay_chn_tilt_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_FORWARD TEST_CASE("FREE to Tilt Forward transition with inertia (prepared)", "[relay_chn][tilt][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // Prepare channel by running forward first to set last_run_cmd prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); // Ensure we are back to FREE @@ -450,11 +536,14 @@ TEST_CASE("FREE to Tilt Forward transition with inertia (prepared)", "[relay_chn TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); } -// TEST_CASE 14: Test transition from FREE state to tilt reverse (now with preparation) +// TEST_CASE: Test transition from FREE state to tilt reverse (now with preparation) // Scenario: RELAY_CHN_STATE_FREE -> (prepare) -> RELAY_CHN_STATE_FREE -> (relay_chn_tilt_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_REVERSE TEST_CASE("FREE to Tilt Reverse transition with inertia (prepared)", "[relay_chn][tilt][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // Prepare channel by running reverse first to set last_run_cmd prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); // Ensure we are back to FREE @@ -465,11 +554,14 @@ TEST_CASE("FREE to Tilt Reverse transition with inertia (prepared)", "[relay_chn TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); } -// TEST_CASE 15: Test transition from tilt forward to run forward (inertia expected for run) +// TEST_CASE: Test transition from tilt forward to run forward (inertia expected for run) // Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD TEST_CASE("Tilt Forward to Run Forward transition with inertia", "[relay_chn][tilt][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // Prepare channel by running forward first to set last_run_cmd, then tilt prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); relay_chn_tilt_forward(ch); // Go to tilt state @@ -484,11 +576,14 @@ TEST_CASE("Tilt Forward to Run Forward transition with inertia", "[relay_chn][ti TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); } -// TEST_CASE 16: Test transition from tilt reverse to run reverse (no inertia expected for run) +// TEST_CASE: Test transition from tilt reverse to run reverse (no inertia expected for run) // Scenario: RELAY_CHN_STATE_TILT_REVERSE -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_REVERSE TEST_CASE("Tilt Reverse to Run Reverse transition with inertia", "[relay_chn][tilt][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // Prepare channel by running reverse first to set last_run_cmd, then tilt prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); relay_chn_tilt_reverse(ch); // Go to tilt state @@ -502,11 +597,14 @@ TEST_CASE("Tilt Reverse to Run Reverse transition with inertia", "[relay_chn][ti TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); } -// TEST_CASE 17: Test transition from tilt forward to run reverse (without inertia) +// TEST_CASE: Test transition from tilt forward to run reverse (without inertia) // Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_REVERSE TEST_CASE("Tilt Forward to Run Reverse transition without inertia", "[relay_chn][tilt][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // Prepare channel by running forward first to set last_run_cmd, then tilt prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); relay_chn_tilt_forward(ch); // Go to tilt state @@ -519,11 +617,14 @@ TEST_CASE("Tilt Forward to Run Reverse transition without inertia", "[relay_chn] TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); } -// TEST_CASE 18: Test stopping from a tilt state (no inertia for stop command itself) +// TEST_CASE: Test stopping from a tilt state (no inertia for stop command itself) // Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_stop) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_FREE TEST_CASE("Tilt to Stop transition without immediate inertia for stop", "[relay_chn][tilt][inertia]") { uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + // Prepare channel by running forward first to set last_run_cmd, then tilt prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); relay_chn_tilt_forward(ch); // Go to tilt state @@ -553,6 +654,8 @@ void app_main(void) { // Run the Unity test runner unity_run_all_tests(); + ESP_LOGI(TAG, "============================== END OF TESTS =============================="); + // After tests complete, instead of restarting, the device will halt. while (1) { vTaskDelay(pdMS_TO_TICKS(1000)); // Wait with low power consumption -- 2.39.5 From 74f4341c1d2d2662b51add3e09c6ae145a25d35e Mon Sep 17 00:00:00 2001 From: ismail Date: Tue, 15 Jul 2025 16:14:19 +0300 Subject: [PATCH 11/18] Add test cases for direction flip. Closes #1051. --- test_apps/main/test_relay_chn.c | 85 +++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/test_apps/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c index d0975fd..92ba06d 100644 --- a/test_apps/main/test_relay_chn.c +++ b/test_apps/main/test_relay_chn.c @@ -647,6 +647,91 @@ TEST_CASE("Tilt functionality is disabled, skipping tilt tests", "[relay_chn][ti #endif // CONFIG_RELAY_CHN_ENABLE_TILTING +// ### Direction Flipping Tests + +TEST_CASE("Single channel direction can be flipped", "[relay_chn][direction]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + const uint8_t ch = 0; + + // 1. Initial direction should be default + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(ch)); + + // 2. Flip the direction + relay_chn_flip_direction(ch); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); // Wait for flip inertia + + // 3. Verify direction is flipped + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(ch)); + + // 4. Flip back + relay_chn_flip_direction(ch); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); // Wait for flip inertia + + // 5. Verify direction is back to default + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(ch)); +} + +TEST_CASE("All channels direction can be flipped simultaneously", "[relay_chn][direction]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Flip all channels + relay_chn_flip_direction(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + + // 2. Verify all channels are flipped + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(i)); + } + + // 3. Flip all back + relay_chn_flip_direction(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + + // 4. Verify all channels are back to default + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(i)); + } +} + +TEST_CASE("Flipping a running channel stops it and flips direction", "[relay_chn][direction]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + const uint8_t ch = 0; + + // 1. Start channel running and verify state + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); + + // 2. Flip the direction while running + relay_chn_flip_direction(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Give time for events to process + + // 3. The channel should stop as part of the flip process + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(ch)); + + // 4. Wait for the flip inertia to pass, after which it should be FREE and FLIPPED + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(ch)); +} + +TEST_CASE("Direction flip handles invalid channel ID gracefully", "[relay_chn][direction]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + const uint8_t invalid_ch = relay_chn_count + 5; + + relay_chn_flip_direction(invalid_ch); // Call with an invalid ID + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(invalid_ch)); +} + + // ### `app_main` Function // --- app_main function --- -- 2.39.5 From a9a8169710b9eb65d797ebf635335f77c5a9e73d Mon Sep 17 00:00:00 2001 From: ismail Date: Wed, 16 Jul 2025 11:42:44 +0300 Subject: [PATCH 12/18] Add test cases for `ID_ALL` channel id. Add test cases to test all relevant functions that support operating with the `RELAY_CHN_ID_ALL` channel id. Closes #1052. --- test_apps/main/test_relay_chn.c | 137 +++++++++++++++++++++++++++++++- 1 file changed, 136 insertions(+), 1 deletion(-) diff --git a/test_apps/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c index 92ba06d..9c097d9 100644 --- a/test_apps/main/test_relay_chn.c +++ b/test_apps/main/test_relay_chn.c @@ -123,6 +123,56 @@ TEST_CASE("Relay channels run reverse and update state", "[relay_chn]") { } } + +// ### Broadcast Command (RELAY_CHN_ID_ALL) Tests + +TEST_CASE("run_forward with ID_ALL sets all channels to FORWARD", "[relay_chn][all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + relay_chn_run_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); + } +} + +TEST_CASE("run_reverse with ID_ALL sets all channels to REVERSE", "[relay_chn][all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + relay_chn_run_reverse(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i)); + } +} + +TEST_CASE("stop with ID_ALL stops all running channels", "[relay_chn][all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Start all channels forward to ensure they are in a known running state + relay_chn_run_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 2. Stop all channels using the broadcast command + relay_chn_stop(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + + // 3. Verify all channels have transitioned to the FREE state + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + + + // TEST_CASE: Test that relays stop and transition to RELAY_CHN_STATE_FREE // This test also verifies the transition to FREE state after a STOP command. TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn]") { @@ -638,6 +688,91 @@ TEST_CASE("Tilt to Stop transition without immediate inertia for stop", "[relay_ TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); } +// ### Tilt Broadcast Command (RELAY_CHN_ID_ALL) Tests + +TEST_CASE("tilt_forward with ID_ALL sets all channels to TILT_FORWARD", "[relay_chn][tilt][all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Prepare all channels. + for (uint8_t i = 0; i < relay_chn_count; i++) { + prepare_channel_for_tilt(i, RELAY_CHN_CMD_FORWARD); + } + + // 2. Issue tilt forward to all channels + relay_chn_tilt_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Tilt from FREE doesn't have stop-inertia + + // 3. Verify all channels are tilting forward + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(i)); + } +} + +TEST_CASE("tilt_reverse with ID_ALL sets all channels to TILT_REVERSE", "[relay_chn][tilt][all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Prepare all channels. + for (uint8_t i = 0; i < relay_chn_count; i++) { + prepare_channel_for_tilt(i, RELAY_CHN_CMD_REVERSE); + } + + // 2. Issue tilt reverse to all channels + relay_chn_tilt_reverse(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 3. Verify all channels are tilting reverse + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(i)); + } +} + +TEST_CASE("tilt_stop with ID_ALL stops all tilting channels", "[relay_chn][tilt][all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Prepare and start all channels tilting forward + for (uint8_t i = 0; i < relay_chn_count; i++) { + prepare_channel_for_tilt(i, RELAY_CHN_CMD_REVERSE); + } + relay_chn_tilt_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 2. Stop tilting on all channels + relay_chn_tilt_stop(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + + // 3. Verify all channels are free + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + +TEST_CASE("tilt_auto with ID_ALL tilts channels based on last run direction", "[relay_chn][tilt][all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // This test requires at least 2 channels to demonstrate different behaviors + TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(2, relay_chn_count, "Test requires at least 2 channels"); + + // 1. Prepare channel 0 with last run FORWARD and channel 1 with last run REVERSE + prepare_channel_for_tilt(0, RELAY_CHN_CMD_FORWARD); + prepare_channel_for_tilt(1, RELAY_CHN_CMD_REVERSE); + + // 2. Issue auto tilt command to all channels + relay_chn_tilt_auto(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Tilt from FREE state is dispatched immediately + + // 3. Verify channel 0 tilts forward (last run was forward) and channel 1 tilts reverse (last run was reverse) + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(0)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(1)); +} + #else // CONFIG_RELAY_CHN_ENABLE_TILTING == 0 // If tilt functionality is disabled, these tests are skipped. // A dummy test case is added to indicate this in the test output. @@ -673,7 +808,7 @@ TEST_CASE("Single channel direction can be flipped", "[relay_chn][direction]") TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(ch)); } -TEST_CASE("All channels direction can be flipped simultaneously", "[relay_chn][direction]") +TEST_CASE("All channels direction can be flipped simultaneously", "[relay_chn][direction][all]") { TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); g_is_component_initialized = true; -- 2.39.5 From a1434847485e61a920cb9c41c0be1de6249c05ae Mon Sep 17 00:00:00 2001 From: ismail Date: Mon, 21 Jul 2025 15:37:49 +0300 Subject: [PATCH 13/18] Break down tests into categories. Break down tests into categories to improve maintainability and test granularity. This makes it easier to execute unit tests in CI/CD pipelines. Closes #1054. --- test_apps/CMakeLists.txt | 3 + test_apps/main/CMakeLists.txt | 23 +- test_apps/main/test_app_main.c | 47 + test_apps/main/test_common.c | 17 + test_apps/main/test_common.h | 25 + test_apps/main/test_relay_chn.c | 883 -------------- test_apps/main/test_relay_chn_core.c | 403 ++++++ test_apps/main/test_relay_chn_listener.c | 135 +++ test_apps/main/test_relay_chn_tilt.c | 285 +++++ test_apps/sdkconfig | 741 ++++++------ test_apps/sdkconfig.defaults | 4 + test_apps/sdkconfig.old | 1411 ++++++---------------- 12 files changed, 1705 insertions(+), 2272 deletions(-) create mode 100644 test_apps/main/test_app_main.c create mode 100644 test_apps/main/test_common.c create mode 100644 test_apps/main/test_common.h delete mode 100644 test_apps/main/test_relay_chn.c create mode 100644 test_apps/main/test_relay_chn_core.c create mode 100644 test_apps/main/test_relay_chn_listener.c create mode 100644 test_apps/main/test_relay_chn_tilt.c diff --git a/test_apps/CMakeLists.txt b/test_apps/CMakeLists.txt index 01a2a3f..68f3b1f 100644 --- a/test_apps/CMakeLists.txt +++ b/test_apps/CMakeLists.txt @@ -13,5 +13,8 @@ set(COMPONENTS main) # Include ESP-IDF project build system include($ENV{IDF_PATH}/tools/cmake/project.cmake) +# Inject the test tag into the build +add_compile_definitions(RELAY_CHN_UNITY_TEST_GROUP_TAG=\"$ENV{RELAY_CHN_UNITY_TEST_GROUP_TAG}\") + # Define the name of this project project(relay_chn_test) \ No newline at end of file diff --git a/test_apps/main/CMakeLists.txt b/test_apps/main/CMakeLists.txt index 572c3c0..2fec2dc 100644 --- a/test_apps/main/CMakeLists.txt +++ b/test_apps/main/CMakeLists.txt @@ -1,3 +1,20 @@ -idf_component_register(SRCS "test_relay_chn.c" - INCLUDE_DIRS "." - REQUIRES unity relay_chn) \ No newline at end of file +# === These files must be included in any case === +set(srcs "test_common.c" + "test_app_main.c" + "test_relay_chn_core.c" + "test_relay_chn_listener.c") + +if(CONFIG_RELAY_CHN_ENABLE_TILTING) + list(APPEND srcs "test_relay_chn_tilt.c") +endif() + +message(STATUS "srcs=${srcs}") + +# In order for the cases defined by `TEST_CASE` to be linked into the final elf, +# the component can be registered as WHOLE_ARCHIVE +idf_component_register( + SRCS ${srcs} + INCLUDE_DIRS "." + REQUIRES unity relay_chn + WHOLE_ARCHIVE +) diff --git a/test_apps/main/test_app_main.c b/test_apps/main/test_app_main.c new file mode 100644 index 0000000..c60c8d2 --- /dev/null +++ b/test_apps/main/test_app_main.c @@ -0,0 +1,47 @@ + +#include "esp_log.h" +#include "esp_system.h" +#include "test_common.h" +#include "unity.h" +#include "unity_internals.h" +#include "unity_test_runner.h" +#include + + +#ifndef RELAY_CHN_UNITY_TEST_GROUP_TAG +#warning "RELAY_CHN_UNITY_TEST_GROUP_TAG is not defined, using default 'relay_chn'" +#define RELAY_CHN_UNITY_TEST_GROUP_TAG "relay_chn" +#endif + +void setUp() +{ + g_is_component_initialized = false; +} + +void tearDown() +{ + // Clean up after each test + if (g_is_component_initialized) { + relay_chn_destroy(); + g_is_component_initialized = false; + } +} + +void app_main(void) +{ + UNITY_BEGIN(); + + // Log general test information + ESP_LOGI(TEST_TAG, "Available test count: %d", unity_get_test_count()); + ESP_LOGI(TEST_TAG, "Running tests for tag: %s", RELAY_CHN_UNITY_TEST_GROUP_TAG); + + if (strncmp(RELAY_CHN_UNITY_TEST_GROUP_TAG, "all", strlen("all")) == 0) { + unity_run_all_tests(); + } + else { + unity_run_tests_by_tag(RELAY_CHN_UNITY_TEST_GROUP_TAG, false); + } + + UNITY_END(); + ESP_LOGI(TEST_TAG, "All tests complete."); +} diff --git a/test_apps/main/test_common.c b/test_apps/main/test_common.c new file mode 100644 index 0000000..c952b68 --- /dev/null +++ b/test_apps/main/test_common.c @@ -0,0 +1,17 @@ +#include "test_common.h" + +const char *TEST_TAG = "RELAY_CHN_TEST"; + +// GPIO eลŸlemesi (รถrn: GPIO_NUM_4 vs GPIO_NUM_5) +const gpio_num_t gpio_map[] = { + GPIO_NUM_4, GPIO_NUM_5, GPIO_NUM_18, GPIO_NUM_19 +}; + +const uint8_t gpio_count = sizeof(gpio_map) / sizeof(gpio_map[0]); +const uint8_t relay_chn_count = gpio_count / 2; + +// Konfigรผrasyon tabanlฤฑ inertia sรผresi +const uint32_t opposite_inertia_ms = CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS; +const uint32_t test_delay_margin_ms = 50; // ms toleransฤฑ + +bool g_is_component_initialized = false; diff --git a/test_apps/main/test_common.h b/test_apps/main/test_common.h new file mode 100644 index 0000000..50d3f63 --- /dev/null +++ b/test_apps/main/test_common.h @@ -0,0 +1,25 @@ +#pragma once + +#include // For memset +#include "unity.h" +#include "relay_chn.h" +#include "driver/gpio.h" +#include "esp_log.h" +#include "sdkconfig.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + +// Test log tag +extern const char *TEST_TAG; + +// GPIO konfigรผrasyonlarฤฑ +extern const gpio_num_t gpio_map[]; +extern const uint8_t gpio_count; +extern const uint8_t relay_chn_count; + +// Config parametreleri +extern const uint32_t opposite_inertia_ms; +extern const uint32_t test_delay_margin_ms; + +// Init durumu +extern bool g_is_component_initialized; diff --git a/test_apps/main/test_relay_chn.c b/test_apps/main/test_relay_chn.c deleted file mode 100644 index 9c097d9..0000000 --- a/test_apps/main/test_relay_chn.c +++ /dev/null @@ -1,883 +0,0 @@ -#include "driver/gpio.h" -#include "unity.h" -#include "unity_test_utils.h" -#include "relay_chn.h" // Main header file for the relay_chn component -#include -#include -#include -#include "sdkconfig.h" // For accessing CONFIG_* values -#include - - -const char *TAG = "RELAY_CHN_TEST"; - -// Test GPIOs and channel IDs -// Please ensure these GPIOs are correct and suitable for your board. -// Two channels (4 GPIOs) are used as an example. -const gpio_num_t gpio_map[] = {GPIO_NUM_4, GPIO_NUM_5, GPIO_NUM_18, GPIO_NUM_19}; -const uint8_t gpio_count = sizeof(gpio_map) / sizeof(gpio_map[0]); -// Assuming 2 GPIOs are used per channel -const uint8_t relay_chn_count = gpio_count / 2; - -const uint32_t opposite_inertia_ms = CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS; - -// Tolerant delay margin to ensure operations complete, especially after inertia. -const uint32_t test_delay_margin_ms = 50; - -static bool g_is_component_initialized = false; - -// --- Test Setup/Teardown Functions --- -void setUp(void) { - // Reset state before each test. Initialization is now done inside each test case - // to allow for testing of initialization failures. - g_is_component_initialized = false; -} - -void tearDown(void) { - // Conditionally destroy the component to avoid crashing if creation failed. - if (g_is_component_initialized) { - relay_chn_destroy(); - } -} - - -// --- Initialization Tests --- - -TEST_CASE("relay_chn_create handles invalid arguments", "[relay_chn][init]") -{ - // 1. Test with NULL gpio_map - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(NULL, gpio_count)); - - // 2. Test with incorrect gpio_count (must be RELAY_CHN_COUNT * 2) - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, gpio_count - 1)); - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, 1)); - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, 0)); - - // 3. Test with invalid GPIO numbers (GPIO_NUM_MAX is an invalid GPIO for output) - gpio_num_t invalid_gpio_map[] = {GPIO_NUM_4, GPIO_NUM_MAX, GPIO_NUM_18, GPIO_NUM_19}; - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(invalid_gpio_map, gpio_count)); -} - -// --- Basic Functionality Tests --- - -// TEST_CASE: Test that relay channels initialize correctly to RELAY_CHN_STATE_FREE -TEST_CASE("Relay channels initialize correctly to FREE state", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); - } -} - -// TEST_CASE: Test that relays do nothing when an invlid channel id given -TEST_CASE("Run forward does nothing if channel id is invalid", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - for (uint8_t i = 0; i < relay_chn_count; i++) { - int invalid_id = relay_chn_count * 2 + i; - relay_chn_run_forward(invalid_id); // relay_chn_run_forward returns void - // Short delay for state to update - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); - } -} - -// TEST_CASE: Test that relays run in the forward direction and update their state -TEST_CASE("Relay channels run forward and update state", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - for (uint8_t i = 0; i < relay_chn_count; i++) { - relay_chn_run_forward(i); // relay_chn_run_forward returns void - // Short delay for state to update - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); - } -} - -// TEST_CASE: Test that relays do nothing when an invlid channel id given -TEST_CASE("Run reverse does nothing if channel id is invalid", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Verify that no valid channels were affected - for (uint8_t i = 0; i < relay_chn_count; i++) { - int invalid_id = relay_chn_count * 2 + i; - // Call run_reverse with an invalid ID - relay_chn_run_reverse(invalid_id); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); - } -} - -// TEST_CASE: Test that relays run in the reverse direction and update their state -TEST_CASE("Relay channels run reverse and update state", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - for (uint8_t i = 0; i < relay_chn_count; i++) { - relay_chn_run_reverse(i); // relay_chn_run_reverse returns void - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i)); - } -} - - -// ### Broadcast Command (RELAY_CHN_ID_ALL) Tests - -TEST_CASE("run_forward with ID_ALL sets all channels to FORWARD", "[relay_chn][all]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - relay_chn_run_forward(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); - } -} - -TEST_CASE("run_reverse with ID_ALL sets all channels to REVERSE", "[relay_chn][all]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - relay_chn_run_reverse(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i)); - } -} - -TEST_CASE("stop with ID_ALL stops all running channels", "[relay_chn][all]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // 1. Start all channels forward to ensure they are in a known running state - relay_chn_run_forward(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - - // 2. Stop all channels using the broadcast command - relay_chn_stop(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - - // 3. Verify all channels have transitioned to the FREE state - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); - } -} - - - -// TEST_CASE: Test that relays stop and transition to RELAY_CHN_STATE_FREE -// This test also verifies the transition to FREE state after a STOP command. -TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - for (uint8_t i = 0; i < relay_chn_count; i++) { - // First, run forward to test stopping and transitioning to FREE state - relay_chn_run_forward(i); // relay_chn_run_forward returns void - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); - - // Now, issue the stop command - relay_chn_stop(i); // relay_chn_stop returns void - // Immediately after stop, state should be STOPPED - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); - - // Then, wait for the inertia period for it to transition to RELAY_CHN_STATE_FREE - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); - } -} - -// TEST_CASE: Get state should return UNDEFINED when id is not valid -TEST_CASE("Get state returns UNDEFINED when id is invalid", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - for (uint8_t i = 0; i < relay_chn_count; i++) { - int invalid_id = relay_chn_count * 2 + i; - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(invalid_id)); - } - // Test for running states also - relay_chn_run_forward(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - for (uint8_t i = 0; i < relay_chn_count; i++) { - int invalid_id = relay_chn_count * 2 + i; - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(invalid_id)); - } -} - -// TEST_CASE: Get state string should return "UNKNOWN" when id is not valid -TEST_CASE("Get state string returns UNKNOWN when id is invalid", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - for (uint8_t i = 0; i < relay_chn_count; i++) { - int invalid_id = relay_chn_count * 2 + i; - TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(invalid_id)); - } - // Test for running states also - relay_chn_run_forward(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - for (uint8_t i = 0; i < relay_chn_count; i++) { - int invalid_id = relay_chn_count * 2 + i; - TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(invalid_id)); - } -} - -// TEST_CASE: Test independent operation of multiple relay channels -TEST_CASE("Multiple channels can operate independently", "[relay_chn]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - if (relay_chn_count >= 2) { - // Start Channel 0 in forward direction - relay_chn_run_forward(0); // relay_chn_run_forward returns void - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(0)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(1)); // Other channel should not be affected - - // Start Channel 1 in reverse direction - relay_chn_run_reverse(1); // relay_chn_run_reverse returns void - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(0)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(1)); - - // Stop Channel 0 and wait for it to become FREE - relay_chn_stop(0); // relay_chn_stop returns void - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(0)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(1)); // Other channel should continue running - - // Stop Channel 1 and wait for it to become FREE - relay_chn_stop(1); // relay_chn_stop returns void - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(0)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(1)); - } else { - ESP_LOGW("TEST", "Skipping 'Multiple channels can operate independently' test: Not enough channels available."); - } -} - - -// ### Inertia and State Transition Tests - -// This section specifically targets the inertia periods and complex state transitions as per the component's logic. - -// TEST_CASE: Test transition from forward to reverse with inertia and state checks -// Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_REVERSE -TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][inertia]") { - uint8_t ch = 0; // Channel to test - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // 1. Start in forward direction - relay_chn_run_forward(ch); // relay_chn_run_forward returns void - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Short delay for state stabilization - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); - - // 2. Issue reverse command - relay_chn_run_reverse(ch); // relay_chn_run_reverse returns void - // Immediately after the command, the motor should be stopped - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE_PENDING, relay_chn_get_state(ch)); - - // Wait for the inertia period (after which the reverse command will be dispatched) - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); // Should now be in reverse state -} - -// TEST_CASE: Test transition from reverse to forward with inertia and state checks -// Scenario: RELAY_CHN_STATE_REVERSE -> (relay_chn_run_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_FORWARD -TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // 1. Start in reverse direction - relay_chn_run_reverse(ch); // relay_chn_run_reverse returns void - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); - - // 2. Issue forward command - relay_chn_run_forward(ch); // relay_chn_run_forward returns void - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD_PENDING, relay_chn_get_state(ch)); - - // Wait for inertia - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test issuing the same run command while already running (no inertia expected) -// Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD -TEST_CASE("Running in same direction does not incur inertia", "[relay_chn][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // 1. Start in forward direction - relay_chn_run_forward(ch); // relay_chn_run_forward returns void - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); - - // 2. Issue the same forward command again - relay_chn_run_forward(ch); // relay_chn_run_forward returns void - // As per the code, is_direction_opposite_to_current_motion should return false, so no inertia. - // Just a short delay to check state remains the same. - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test transition from FREE state to running (no inertia expected) -// Scenario: RELAY_CHN_STATE_FREE -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD -TEST_CASE("FREE to Running transition without inertia", "[relay_chn][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // setUp() should have already brought the channel to FREE state - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); - - // Start in forward direction - relay_chn_run_forward(ch); // relay_chn_run_forward returns void - // No inertia is expected when starting from FREE state. - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); -} - -// --- Listener Test Globals --- -typedef struct { - uint8_t chn_id; - relay_chn_state_t old_state; - relay_chn_state_t new_state; - int call_count; -} listener_callback_info_t; - -static listener_callback_info_t listener1_info; -static listener_callback_info_t listener2_info; - -// --- Listener Test Helper Functions --- - -// Clear the memory from possible garbage values -static void reset_listener_info(listener_callback_info_t* info) { - memset(info, 0, sizeof(listener_callback_info_t)); -} - -static void test_listener_1(uint8_t chn_id, relay_chn_state_t old_state, relay_chn_state_t new_state) { - listener1_info.chn_id = chn_id; - listener1_info.old_state = old_state; - listener1_info.new_state = new_state; - listener1_info.call_count++; -} - -static void test_listener_2(uint8_t chn_id, relay_chn_state_t old_state, relay_chn_state_t new_state) { - listener2_info.chn_id = chn_id; - listener2_info.old_state = old_state; - listener2_info.new_state = new_state; - listener2_info.call_count++; -} - -// ### Listener Functionality Tests - -TEST_CASE("Listener is called on state change", "[relay_chn][listener]") { - uint8_t ch = 0; - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - reset_listener_info(&listener1_info); - - // 1. Register the listener - TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); - - // 2. Trigger a state change - relay_chn_run_forward(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Allow event to be processed - - // 3. Verify the listener was called with correct parameters - TEST_ASSERT_EQUAL(1, listener1_info.call_count); - TEST_ASSERT_EQUAL(ch, listener1_info.chn_id); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener1_info.old_state); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener1_info.new_state); - - // 4. Unregister to clean up - relay_chn_unregister_listener(test_listener_1); -} - -TEST_CASE("Unregistered listener is not called", "[relay_chn][listener]") { - uint8_t ch = 0; - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - reset_listener_info(&listener1_info); - - // 1. Register and then immediately unregister the listener - TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); - relay_chn_unregister_listener(test_listener_1); - - // 2. Trigger a state change - relay_chn_run_forward(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - - // 3. Verify the listener was NOT called - TEST_ASSERT_EQUAL(0, listener1_info.call_count); -} - -TEST_CASE("Multiple listeners are called on state change", "[relay_chn][listener]") { - uint8_t ch = 0; - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - reset_listener_info(&listener1_info); - reset_listener_info(&listener2_info); - - // 1. Register two different listeners - TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); - TEST_ESP_OK(relay_chn_register_listener(test_listener_2)); - - // 2. Trigger a state change - relay_chn_run_forward(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - - // 3. Verify listener 1 was called correctly - TEST_ASSERT_EQUAL(1, listener1_info.call_count); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener1_info.old_state); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener1_info.new_state); - - // 4. Verify listener 2 was also called correctly - TEST_ASSERT_EQUAL(1, listener2_info.call_count); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener2_info.old_state); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener2_info.new_state); - - // 5. Clean up - relay_chn_unregister_listener(test_listener_1); - relay_chn_unregister_listener(test_listener_2); -} - -TEST_CASE("Listener registration handles invalid arguments and duplicates", "[relay_chn][listener]") { - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - reset_listener_info(&listener1_info); - - // 1. Registering a NULL listener should fail - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_register_listener(NULL)); - - // 2. Unregistering a NULL listener should not crash - relay_chn_unregister_listener(NULL); - - // 3. Registering the same listener twice should be handled gracefully - TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); - TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); // Second call should be a no-op - - // 4. Trigger a state change and verify the listener is only called ONCE - relay_chn_run_forward(0); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(1, listener1_info.call_count); - - // 5. Clean up - relay_chn_unregister_listener(test_listener_1); -} - - -// ### Tilt Functionality Tests (Conditional) - -// This section will only be compiled if **`CONFIG_RELAY_CHN_ENABLE_TILTING`** is defined as **`1`** in `sdkconfig`. - -#if CONFIG_RELAY_CHN_ENABLE_TILTING == 1 - -#define RELAY_CHN_CMD_FORWARD 1 -#define RELAY_CHN_CMD_REVERSE 2 - -// Helper function to prepare channel for tilt tests -void prepare_channel_for_tilt(uint8_t chn_id, int initial_cmd) { - // Ensure the channel has had a 'last_run_cmd' - if (initial_cmd == RELAY_CHN_CMD_FORWARD) { - relay_chn_run_forward(chn_id); - } else { // Assuming initial_cmd is RELAY_CHN_CMD_REVERSE - relay_chn_run_reverse(chn_id); - } - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Allow command to process - relay_chn_stop(chn_id); // Stop it to set last_run_cmd but return to FREE for next test - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(chn_id)); -} - -// TEST_CASE: Test transition from running forward to tilt forward -// Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_tilt_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_FORWARD -TEST_CASE("Run Forward to Tilt Forward transition with inertia", "[relay_chn][tilt][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Prepare channel by running forward first to set last_run_cmd - prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); - - // 1. Start in forward direction - relay_chn_run_forward(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); - - // 2. Issue tilt forward command - relay_chn_tilt_forward(ch); - // After tilt command, it should immediately stop and then trigger inertia. - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(ch)); - - // Wait for the inertia period (after which the tilt command will be dispatched) - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test transition from running reverse to tilt reverse -// Scenario: RELAY_CHN_STATE_REVERSE -> (relay_chn_tilt_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_REVERSE -TEST_CASE("Run Reverse to Tilt Reverse transition with inertia", "[relay_chn][tilt][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Prepare channel by running reverse first to set last_run_cmd - prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); - - // 1. Start in reverse direction - relay_chn_run_reverse(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); - - // 2. Issue tilt reverse command - relay_chn_tilt_reverse(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(ch)); - - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test transition from FREE state to tilt forward (now with preparation) -// Scenario: RELAY_CHN_STATE_FREE -> (prepare) -> RELAY_CHN_STATE_FREE -> (relay_chn_tilt_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_FORWARD -TEST_CASE("FREE to Tilt Forward transition with inertia (prepared)", "[relay_chn][tilt][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Prepare channel by running forward first to set last_run_cmd - prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); // Ensure we are back to FREE - - // Issue tilt forward command - relay_chn_tilt_forward(ch); - // From FREE state, tilt command should still incur the inertia due to the internal timer logic - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test transition from FREE state to tilt reverse (now with preparation) -// Scenario: RELAY_CHN_STATE_FREE -> (prepare) -> RELAY_CHN_STATE_FREE -> (relay_chn_tilt_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_REVERSE -TEST_CASE("FREE to Tilt Reverse transition with inertia (prepared)", "[relay_chn][tilt][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Prepare channel by running reverse first to set last_run_cmd - prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); // Ensure we are back to FREE - - // Issue tilt reverse command - relay_chn_tilt_reverse(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test transition from tilt forward to run forward (inertia expected for run) -// Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD -TEST_CASE("Tilt Forward to Run Forward transition with inertia", "[relay_chn][tilt][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Prepare channel by running forward first to set last_run_cmd, then tilt - prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); - relay_chn_tilt_forward(ch); // Go to tilt state - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); - - // 2. Issue run forward command - relay_chn_run_forward(ch); - // From Tilt to Run in the same logical name but in the opposite direction, inertia is expected. - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD_PENDING, relay_chn_get_state(ch)); - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test transition from tilt reverse to run reverse (no inertia expected for run) -// Scenario: RELAY_CHN_STATE_TILT_REVERSE -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_REVERSE -TEST_CASE("Tilt Reverse to Run Reverse transition with inertia", "[relay_chn][tilt][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Prepare channel by running reverse first to set last_run_cmd, then tilt - prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); - relay_chn_tilt_reverse(ch); // Go to tilt state - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); - - // 2. Issue run reverse command - relay_chn_run_reverse(ch); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE_PENDING, relay_chn_get_state(ch)); - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test transition from tilt forward to run reverse (without inertia) -// Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_REVERSE -TEST_CASE("Tilt Forward to Run Reverse transition without inertia", "[relay_chn][tilt][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Prepare channel by running forward first to set last_run_cmd, then tilt - prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); - relay_chn_tilt_forward(ch); // Go to tilt state - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); - - // 2. Issue run reverse command (opposite direction) - relay_chn_run_reverse(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); -} - -// TEST_CASE: Test stopping from a tilt state (no inertia for stop command itself) -// Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_stop) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_FREE -TEST_CASE("Tilt to Stop transition without immediate inertia for stop", "[relay_chn][tilt][inertia]") { - uint8_t ch = 0; - - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // Prepare channel by running forward first to set last_run_cmd, then tilt - prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); - relay_chn_tilt_forward(ch); // Go to tilt state - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); - - // 2. Issue stop command - relay_chn_stop(ch); - // Stop command should apply immediately, setting state to FREE since last state was tilt. - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); -} - -// ### Tilt Broadcast Command (RELAY_CHN_ID_ALL) Tests - -TEST_CASE("tilt_forward with ID_ALL sets all channels to TILT_FORWARD", "[relay_chn][tilt][all]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // 1. Prepare all channels. - for (uint8_t i = 0; i < relay_chn_count; i++) { - prepare_channel_for_tilt(i, RELAY_CHN_CMD_FORWARD); - } - - // 2. Issue tilt forward to all channels - relay_chn_tilt_forward(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Tilt from FREE doesn't have stop-inertia - - // 3. Verify all channels are tilting forward - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(i)); - } -} - -TEST_CASE("tilt_reverse with ID_ALL sets all channels to TILT_REVERSE", "[relay_chn][tilt][all]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // 1. Prepare all channels. - for (uint8_t i = 0; i < relay_chn_count; i++) { - prepare_channel_for_tilt(i, RELAY_CHN_CMD_REVERSE); - } - - // 2. Issue tilt reverse to all channels - relay_chn_tilt_reverse(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - - // 3. Verify all channels are tilting reverse - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(i)); - } -} - -TEST_CASE("tilt_stop with ID_ALL stops all tilting channels", "[relay_chn][tilt][all]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // 1. Prepare and start all channels tilting forward - for (uint8_t i = 0; i < relay_chn_count; i++) { - prepare_channel_for_tilt(i, RELAY_CHN_CMD_REVERSE); - } - relay_chn_tilt_forward(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - - // 2. Stop tilting on all channels - relay_chn_tilt_stop(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - - // 3. Verify all channels are free - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); - } -} - -TEST_CASE("tilt_auto with ID_ALL tilts channels based on last run direction", "[relay_chn][tilt][all]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // This test requires at least 2 channels to demonstrate different behaviors - TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(2, relay_chn_count, "Test requires at least 2 channels"); - - // 1. Prepare channel 0 with last run FORWARD and channel 1 with last run REVERSE - prepare_channel_for_tilt(0, RELAY_CHN_CMD_FORWARD); - prepare_channel_for_tilt(1, RELAY_CHN_CMD_REVERSE); - - // 2. Issue auto tilt command to all channels - relay_chn_tilt_auto(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Tilt from FREE state is dispatched immediately - - // 3. Verify channel 0 tilts forward (last run was forward) and channel 1 tilts reverse (last run was reverse) - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(0)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(1)); -} - -#else // CONFIG_RELAY_CHN_ENABLE_TILTING == 0 -// If tilt functionality is disabled, these tests are skipped. -// A dummy test case is added to indicate this in the test output. -TEST_CASE("Tilt functionality is disabled, skipping tilt tests", "[relay_chn][tilt_disabled]") { - TEST_ASSERT_TRUE(true); // Just to ensure at least one test passes for visibility -} -#endif // CONFIG_RELAY_CHN_ENABLE_TILTING - - -// ### Direction Flipping Tests - -TEST_CASE("Single channel direction can be flipped", "[relay_chn][direction]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - const uint8_t ch = 0; - - // 1. Initial direction should be default - TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(ch)); - - // 2. Flip the direction - relay_chn_flip_direction(ch); - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); // Wait for flip inertia - - // 3. Verify direction is flipped - TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(ch)); - - // 4. Flip back - relay_chn_flip_direction(ch); - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); // Wait for flip inertia - - // 5. Verify direction is back to default - TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(ch)); -} - -TEST_CASE("All channels direction can be flipped simultaneously", "[relay_chn][direction][all]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - - // 1. Flip all channels - relay_chn_flip_direction(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - - // 2. Verify all channels are flipped - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(i)); - } - - // 3. Flip all back - relay_chn_flip_direction(RELAY_CHN_ID_ALL); - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - - // 4. Verify all channels are back to default - for (uint8_t i = 0; i < relay_chn_count; i++) { - TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(i)); - } -} - -TEST_CASE("Flipping a running channel stops it and flips direction", "[relay_chn][direction]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - const uint8_t ch = 0; - - // 1. Start channel running and verify state - relay_chn_run_forward(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); - - // 2. Flip the direction while running - relay_chn_flip_direction(ch); - vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Give time for events to process - - // 3. The channel should stop as part of the flip process - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(ch)); - - // 4. Wait for the flip inertia to pass, after which it should be FREE and FLIPPED - vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); - TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); - TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(ch)); -} - -TEST_CASE("Direction flip handles invalid channel ID gracefully", "[relay_chn][direction]") -{ - TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); - g_is_component_initialized = true; - const uint8_t invalid_ch = relay_chn_count + 5; - - relay_chn_flip_direction(invalid_ch); // Call with an invalid ID - TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(invalid_ch)); -} - - -// ### `app_main` Function - -// --- app_main function --- -void app_main(void) { - // Run the Unity test runner - unity_run_all_tests(); - - ESP_LOGI(TAG, "============================== END OF TESTS =============================="); - - // After tests complete, instead of restarting, the device will halt. - while (1) { - vTaskDelay(pdMS_TO_TICKS(1000)); // Wait with low power consumption - } -} \ No newline at end of file diff --git a/test_apps/main/test_relay_chn_core.c b/test_apps/main/test_relay_chn_core.c new file mode 100644 index 0000000..0f29c3e --- /dev/null +++ b/test_apps/main/test_relay_chn_core.c @@ -0,0 +1,403 @@ +#include "test_common.h" + + +// --- Initialization Tests --- + +TEST_CASE("relay_chn_create handles invalid arguments", "[relay_chn][core]") +{ + // 1. Test with NULL gpio_map + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(NULL, gpio_count)); + + // 2. Test with incorrect gpio_count (must be RELAY_CHN_COUNT * 2) + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, gpio_count - 1)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, 1)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(gpio_map, 0)); + + // 3. Test with invalid GPIO numbers (GPIO_NUM_MAX is an invalid GPIO for output) + gpio_num_t invalid_gpio_map[] = {GPIO_NUM_4, GPIO_NUM_MAX, GPIO_NUM_18, GPIO_NUM_19}; + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_create(invalid_gpio_map, gpio_count)); +} + +// --- Basic Functionality Tests --- + +// TEST_CASE: Test that relay channels initialize correctly to RELAY_CHN_STATE_FREE +TEST_CASE("Relay channels initialize correctly to FREE state", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + +// TEST_CASE: Test that relays do nothing when an invlid channel id given +TEST_CASE("Run forward does nothing if channel id is invalid", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + relay_chn_run_forward(invalid_id); // relay_chn_run_forward returns void + // Short delay for state to update + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + +// TEST_CASE: Test that relays run in the forward direction and update their state +TEST_CASE("Relay channels run forward and update state", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + for (uint8_t i = 0; i < relay_chn_count; i++) { + relay_chn_run_forward(i); // relay_chn_run_forward returns void + // Short delay for state to update + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); + } +} + +// TEST_CASE: Test that relays do nothing when an invlid channel id given +TEST_CASE("Run reverse does nothing if channel id is invalid", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Verify that no valid channels were affected + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + // Call run_reverse with an invalid ID + relay_chn_run_reverse(invalid_id); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + +// TEST_CASE: Test that relays run in the reverse direction and update their state +TEST_CASE("Relay channels run reverse and update state", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + for (uint8_t i = 0; i < relay_chn_count; i++) { + relay_chn_run_reverse(i); // relay_chn_run_reverse returns void + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i)); + } +} + + +// ### Broadcast Command (RELAY_CHN_ID_ALL) Tests + +TEST_CASE("run_forward with ID_ALL sets all channels to FORWARD", "[relay_chn][core][id_all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + relay_chn_run_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); + } +} + +TEST_CASE("run_reverse with ID_ALL sets all channels to REVERSE", "[relay_chn][core][id_all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + relay_chn_run_reverse(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i)); + } +} + +TEST_CASE("stop with ID_ALL stops all running channels", "[relay_chn][core][id_all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Start all channels forward to ensure they are in a known running state + relay_chn_run_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 2. Stop all channels using the broadcast command + relay_chn_stop(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + + // 3. Verify all channels have transitioned to the FREE state + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + + + +// TEST_CASE: Test that relays stop and transition to RELAY_CHN_STATE_FREE +// This test also verifies the transition to FREE state after a STOP command. +TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + for (uint8_t i = 0; i < relay_chn_count; i++) { + // First, run forward to test stopping and transitioning to FREE state + relay_chn_run_forward(i); // relay_chn_run_forward returns void + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i)); + + // Now, issue the stop command + relay_chn_stop(i); // relay_chn_stop returns void + // Immediately after stop, state should be STOPPED + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i)); + + // Then, wait for the inertia period for it to transition to RELAY_CHN_STATE_FREE + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + +// TEST_CASE: Get state should return UNDEFINED when id is not valid +TEST_CASE("Get state returns UNDEFINED when id is invalid", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(invalid_id)); + } + // Test for running states also + relay_chn_run_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_UNDEFINED, relay_chn_get_state(invalid_id)); + } +} + +// TEST_CASE: Get state string should return "UNKNOWN" when id is not valid +TEST_CASE("Get state string returns UNKNOWN when id is invalid", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(invalid_id)); + } + // Test for running states also + relay_chn_run_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + for (uint8_t i = 0; i < relay_chn_count; i++) { + int invalid_id = relay_chn_count * 2 + i; + TEST_ASSERT_EQUAL_STRING("UNKNOWN", relay_chn_get_state_str(invalid_id)); + } +} + +// TEST_CASE: Test independent operation of multiple relay channels +TEST_CASE("Multiple channels can operate independently", "[relay_chn][core]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + if (relay_chn_count >= 2) { + // Start Channel 0 in forward direction + relay_chn_run_forward(0); // relay_chn_run_forward returns void + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(0)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(1)); // Other channel should not be affected + + // Start Channel 1 in reverse direction + relay_chn_run_reverse(1); // relay_chn_run_reverse returns void + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(0)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(1)); + + // Stop Channel 0 and wait for it to become FREE + relay_chn_stop(0); // relay_chn_stop returns void + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(0)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(1)); // Other channel should continue running + + // Stop Channel 1 and wait for it to become FREE + relay_chn_stop(1); // relay_chn_stop returns void + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(0)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(1)); + } else { + ESP_LOGW("TEST", "Skipping 'Multiple channels can operate independently' test: Not enough channels available."); + } +} + + +// ### Inertia and State Transition Tests + +// This section specifically targets the inertia periods and complex state transitions as per the component's logic. + +// TEST_CASE: Test transition from forward to reverse with inertia and state checks +// Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_REVERSE +TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][core][inertia]") { + uint8_t ch = 0; // Channel to test + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Start in forward direction + relay_chn_run_forward(ch); // relay_chn_run_forward returns void + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Short delay for state stabilization + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); + + // 2. Issue reverse command + relay_chn_run_reverse(ch); // relay_chn_run_reverse returns void + // Immediately after the command, the motor should be stopped + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE_PENDING, relay_chn_get_state(ch)); + + // Wait for the inertia period (after which the reverse command will be dispatched) + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); // Should now be in reverse state +} + +// TEST_CASE: Test transition from reverse to forward with inertia and state checks +// Scenario: RELAY_CHN_STATE_REVERSE -> (relay_chn_run_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_FORWARD +TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][core][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Start in reverse direction + relay_chn_run_reverse(ch); // relay_chn_run_reverse returns void + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); + + // 2. Issue forward command + relay_chn_run_forward(ch); // relay_chn_run_forward returns void + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD_PENDING, relay_chn_get_state(ch)); + + // Wait for inertia + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test issuing the same run command while already running (no inertia expected) +// Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD +TEST_CASE("Running in same direction does not incur inertia", "[relay_chn][core][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Start in forward direction + relay_chn_run_forward(ch); // relay_chn_run_forward returns void + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); + + // 2. Issue the same forward command again + relay_chn_run_forward(ch); // relay_chn_run_forward returns void + // As per the code, is_direction_opposite_to_current_motion should return false, so no inertia. + // Just a short delay to check state remains the same. + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test transition from FREE state to running (no inertia expected) +// Scenario: RELAY_CHN_STATE_FREE -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD +TEST_CASE("FREE to Running transition without inertia", "[relay_chn][core][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // setUp() should have already brought the channel to FREE state + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); + + // Start in forward direction + relay_chn_run_forward(ch); // relay_chn_run_forward returns void + // No inertia is expected when starting from FREE state. + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); +} + +// ### Direction Flipping Tests + +TEST_CASE("Single channel direction can be flipped", "[relay_chn][core][direction]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + const uint8_t ch = 0; + + // 1. Initial direction should be default + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(ch)); + + // 2. Flip the direction + relay_chn_flip_direction(ch); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); // Wait for flip inertia + + // 3. Verify direction is flipped + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(ch)); + + // 4. Flip back + relay_chn_flip_direction(ch); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); // Wait for flip inertia + + // 5. Verify direction is back to default + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(ch)); +} + +TEST_CASE("All channels direction can be flipped simultaneously", "[relay_chn][core][direction][id_all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Flip all channels + relay_chn_flip_direction(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + + // 2. Verify all channels are flipped + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(i)); + } + + // 3. Flip all back + relay_chn_flip_direction(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + + // 4. Verify all channels are back to default + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(i)); + } +} + +TEST_CASE("Flipping a running channel stops it and flips direction", "[relay_chn][core][direction]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + const uint8_t ch = 0; + + // 1. Start channel running and verify state + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); + + // 2. Flip the direction while running + relay_chn_flip_direction(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Give time for events to process + + // 3. The channel should stop as part of the flip process + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(ch)); + + // 4. Wait for the flip inertia to pass, after which it should be FREE and FLIPPED + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_FLIPPED, relay_chn_get_direction(ch)); +} + +TEST_CASE("Direction flip handles invalid channel ID gracefully", "[relay_chn][core][direction]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + const uint8_t invalid_ch = relay_chn_count + 5; + + relay_chn_flip_direction(invalid_ch); // Call with an invalid ID + TEST_ASSERT_EQUAL(RELAY_CHN_DIRECTION_DEFAULT, relay_chn_get_direction(invalid_ch)); +} \ No newline at end of file diff --git a/test_apps/main/test_relay_chn_listener.c b/test_apps/main/test_relay_chn_listener.c new file mode 100644 index 0000000..9415068 --- /dev/null +++ b/test_apps/main/test_relay_chn_listener.c @@ -0,0 +1,135 @@ +#include "test_common.h" + + +// --- Listener Test Globals --- +typedef struct { + uint8_t chn_id; + relay_chn_state_t old_state; + relay_chn_state_t new_state; + int call_count; +} listener_callback_info_t; + +static listener_callback_info_t listener1_info; +static listener_callback_info_t listener2_info; + +// --- Listener Test Helper Functions --- + +// Clear the memory from possible garbage values +static void reset_listener_info(listener_callback_info_t* info) { + memset(info, 0, sizeof(listener_callback_info_t)); +} + +static void test_listener_1(uint8_t chn_id, relay_chn_state_t old_state, relay_chn_state_t new_state) { + listener1_info.chn_id = chn_id; + listener1_info.old_state = old_state; + listener1_info.new_state = new_state; + listener1_info.call_count++; +} + +static void test_listener_2(uint8_t chn_id, relay_chn_state_t old_state, relay_chn_state_t new_state) { + listener2_info.chn_id = chn_id; + listener2_info.old_state = old_state; + listener2_info.new_state = new_state; + listener2_info.call_count++; +} + +// ### Listener Functionality Tests + +TEST_CASE("Listener is called on state change", "[relay_chn][listener]") { + uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + reset_listener_info(&listener1_info); + + // 1. Register the listener + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); + + // 2. Trigger a state change + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Allow event to be processed + + // 3. Verify the listener was called with correct parameters + TEST_ASSERT_EQUAL(1, listener1_info.call_count); + TEST_ASSERT_EQUAL(ch, listener1_info.chn_id); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener1_info.old_state); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener1_info.new_state); + + // 4. Unregister to clean up + relay_chn_unregister_listener(test_listener_1); +} + +TEST_CASE("Unregistered listener is not called", "[relay_chn][listener]") { + uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + reset_listener_info(&listener1_info); + + // 1. Register and then immediately unregister the listener + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); + relay_chn_unregister_listener(test_listener_1); + + // 2. Trigger a state change + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 3. Verify the listener was NOT called + TEST_ASSERT_EQUAL(0, listener1_info.call_count); +} + +TEST_CASE("Multiple listeners are called on state change", "[relay_chn][listener]") { + uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + reset_listener_info(&listener1_info); + reset_listener_info(&listener2_info); + + // 1. Register two different listeners + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); + TEST_ESP_OK(relay_chn_register_listener(test_listener_2)); + + // 2. Trigger a state change + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 3. Verify listener 1 was called correctly + TEST_ASSERT_EQUAL(1, listener1_info.call_count); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener1_info.old_state); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener1_info.new_state); + + // 4. Verify listener 2 was also called correctly + TEST_ASSERT_EQUAL(1, listener2_info.call_count); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, listener2_info.old_state); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, listener2_info.new_state); + + // 5. Clean up + relay_chn_unregister_listener(test_listener_1); + relay_chn_unregister_listener(test_listener_2); +} + +TEST_CASE("Listener registration handles invalid arguments and duplicates", "[relay_chn][listener]") { + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + reset_listener_info(&listener1_info); + + // 1. Registering a NULL listener should fail + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, relay_chn_register_listener(NULL)); + + // 2. Unregistering a NULL listener should not crash + relay_chn_unregister_listener(NULL); + + // 3. Registering the same listener twice should be handled gracefully + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); + TEST_ESP_OK(relay_chn_register_listener(test_listener_1)); // Second call should be a no-op + + // 4. Trigger a state change and verify the listener is only called ONCE + relay_chn_run_forward(0); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(1, listener1_info.call_count); + + // 5. Clean up + relay_chn_unregister_listener(test_listener_1); +} diff --git a/test_apps/main/test_relay_chn_tilt.c b/test_apps/main/test_relay_chn_tilt.c new file mode 100644 index 0000000..177d8a1 --- /dev/null +++ b/test_apps/main/test_relay_chn_tilt.c @@ -0,0 +1,285 @@ +#include "test_common.h" + + +// ### Tilt Functionality Tests (Conditional) + +// This section will only be compiled if **`CONFIG_RELAY_CHN_ENABLE_TILTING`** is defined as **`1`** in `sdkconfig`. + +#ifndef CONFIG_RELAY_CHN_ENABLE_TILTING +#error "This test requires CONFIG_RELAY_CHN_ENABLE_TILTING" +#endif + +#define RELAY_CHN_CMD_FORWARD 1 +#define RELAY_CHN_CMD_REVERSE 2 + +// Helper function to prepare channel for tilt tests +void prepare_channel_for_tilt(uint8_t chn_id, int initial_cmd) { + // Ensure the channel has had a 'last_run_cmd' + if (initial_cmd == RELAY_CHN_CMD_FORWARD) { + relay_chn_run_forward(chn_id); + } else { // Assuming initial_cmd is RELAY_CHN_CMD_REVERSE + relay_chn_run_reverse(chn_id); + } + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Allow command to process + relay_chn_stop(chn_id); // Stop it to set last_run_cmd but return to FREE for next test + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(chn_id)); +} + +// TEST_CASE: Test transition from running forward to tilt forward +// Scenario: RELAY_CHN_STATE_FORWARD -> (relay_chn_tilt_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_FORWARD +TEST_CASE("Run Forward to Tilt Forward transition with inertia", "[relay_chn][tilt][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare channel by running forward first to set last_run_cmd + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); + + // 1. Start in forward direction + relay_chn_run_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); + + // 2. Issue tilt forward command + relay_chn_tilt_forward(ch); + // After tilt command, it should immediately stop and then trigger inertia. + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(ch)); + + // Wait for the inertia period (after which the tilt command will be dispatched) + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test transition from running reverse to tilt reverse +// Scenario: RELAY_CHN_STATE_REVERSE -> (relay_chn_tilt_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_REVERSE +TEST_CASE("Run Reverse to Tilt Reverse transition with inertia", "[relay_chn][tilt][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare channel by running reverse first to set last_run_cmd + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); + + // 1. Start in reverse direction + relay_chn_run_reverse(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); + + // 2. Issue tilt reverse command + relay_chn_tilt_reverse(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(ch)); + + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test transition from FREE state to tilt forward (now with preparation) +// Scenario: RELAY_CHN_STATE_FREE -> (prepare) -> RELAY_CHN_STATE_FREE -> (relay_chn_tilt_forward) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_FORWARD +TEST_CASE("FREE to Tilt Forward transition with inertia (prepared)", "[relay_chn][tilt][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare channel by running forward first to set last_run_cmd + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); // Ensure we are back to FREE + + // Issue tilt forward command + relay_chn_tilt_forward(ch); + // From FREE state, tilt command should still incur the inertia due to the internal timer logic + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test transition from FREE state to tilt reverse (now with preparation) +// Scenario: RELAY_CHN_STATE_FREE -> (prepare) -> RELAY_CHN_STATE_FREE -> (relay_chn_tilt_reverse) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_TILT_REVERSE +TEST_CASE("FREE to Tilt Reverse transition with inertia (prepared)", "[relay_chn][tilt][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare channel by running reverse first to set last_run_cmd + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); // Ensure we are back to FREE + + // Issue tilt reverse command + relay_chn_tilt_reverse(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test transition from tilt forward to run forward (inertia expected for run) +// Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_run_forward) -> RELAY_CHN_STATE_FORWARD +TEST_CASE("Tilt Forward to Run Forward transition with inertia", "[relay_chn][tilt][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare channel by running forward first to set last_run_cmd, then tilt + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); + relay_chn_tilt_forward(ch); // Go to tilt state + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); + + // 2. Issue run forward command + relay_chn_run_forward(ch); + // From Tilt to Run in the same logical name but in the opposite direction, inertia is expected. + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD_PENDING, relay_chn_get_state(ch)); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test transition from tilt reverse to run reverse (no inertia expected for run) +// Scenario: RELAY_CHN_STATE_TILT_REVERSE -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_REVERSE +TEST_CASE("Tilt Reverse to Run Reverse transition with inertia", "[relay_chn][tilt][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare channel by running reverse first to set last_run_cmd, then tilt + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); + relay_chn_tilt_reverse(ch); // Go to tilt state + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); + + // 2. Issue run reverse command + relay_chn_run_reverse(ch); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE_PENDING, relay_chn_get_state(ch)); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test transition from tilt forward to run reverse (without inertia) +// Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_run_reverse) -> RELAY_CHN_STATE_REVERSE +TEST_CASE("Tilt Forward to Run Reverse transition without inertia", "[relay_chn][tilt][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare channel by running forward first to set last_run_cmd, then tilt + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); + relay_chn_tilt_forward(ch); // Go to tilt state + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); + + // 2. Issue run reverse command (opposite direction) + relay_chn_run_reverse(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(ch)); +} + +// TEST_CASE: Test stopping from a tilt state (no inertia for stop command itself) +// Scenario: RELAY_CHN_STATE_TILT_FORWARD -> (relay_chn_stop) -> RELAY_CHN_STATE_STOPPED -> (inertia) -> RELAY_CHN_STATE_FREE +TEST_CASE("Tilt to Stop transition without immediate inertia for stop", "[relay_chn][tilt][inertia]") { + uint8_t ch = 0; + + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare channel by running forward first to set last_run_cmd, then tilt + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); + relay_chn_tilt_forward(ch); // Go to tilt state + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); + + // 2. Issue stop command + relay_chn_stop(ch); + // Stop command should apply immediately, setting state to FREE since last state was tilt. + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(ch)); +} + +// ### Tilt Broadcast Command (RELAY_CHN_ID_ALL) Tests + +TEST_CASE("tilt_forward with ID_ALL sets all channels to TILT_FORWARD", "[relay_chn][tilt][id_all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Prepare all channels. + for (uint8_t i = 0; i < relay_chn_count; i++) { + prepare_channel_for_tilt(i, RELAY_CHN_CMD_FORWARD); + } + + // 2. Issue tilt forward to all channels + relay_chn_tilt_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Tilt from FREE doesn't have stop-inertia + + // 3. Verify all channels are tilting forward + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(i)); + } +} + +TEST_CASE("tilt_reverse with ID_ALL sets all channels to TILT_REVERSE", "[relay_chn][tilt][id_all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Prepare all channels. + for (uint8_t i = 0; i < relay_chn_count; i++) { + prepare_channel_for_tilt(i, RELAY_CHN_CMD_REVERSE); + } + + // 2. Issue tilt reverse to all channels + relay_chn_tilt_reverse(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 3. Verify all channels are tilting reverse + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(i)); + } +} + +TEST_CASE("tilt_stop with ID_ALL stops all tilting channels", "[relay_chn][tilt][id_all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // 1. Prepare and start all channels tilting forward + for (uint8_t i = 0; i < relay_chn_count; i++) { + prepare_channel_for_tilt(i, RELAY_CHN_CMD_REVERSE); + } + relay_chn_tilt_forward(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // 2. Stop tilting on all channels + relay_chn_tilt_stop(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + + // 3. Verify all channels are free + for (uint8_t i = 0; i < relay_chn_count; i++) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FREE, relay_chn_get_state(i)); + } +} + +TEST_CASE("tilt_auto with ID_ALL tilts channels based on last run direction", "[relay_chn][tilt][id_all]") +{ + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // This test requires at least 2 channels to demonstrate different behaviors + TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(2, relay_chn_count, "Test requires at least 2 channels"); + + // 1. Prepare channel 0 with last run FORWARD and channel 1 with last run REVERSE + prepare_channel_for_tilt(0, RELAY_CHN_CMD_FORWARD); + prepare_channel_for_tilt(1, RELAY_CHN_CMD_REVERSE); + + // 2. Issue auto tilt command to all channels + relay_chn_tilt_auto(RELAY_CHN_ID_ALL); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); // Tilt from FREE state is dispatched immediately + + // 3. Verify channel 0 tilts forward (last run was forward) and channel 1 tilts reverse (last run was reverse) + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(0)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(1)); +} \ No newline at end of file diff --git a/test_apps/sdkconfig b/test_apps/sdkconfig index 3f36eb7..e62945e 100644 --- a/test_apps/sdkconfig +++ b/test_apps/sdkconfig @@ -2,25 +2,28 @@ # Automatically generated file. DO NOT EDIT. # Espressif IoT Development Framework (ESP-IDF) 5.4.2 Project Configuration # +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" +CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" +CONFIG_SOC_DPORT_WORKAROUND="Not determined" +CONFIG_SOC_CAPS_ECO_VER_MAX=301 CONFIG_SOC_ADC_SUPPORTED=y -CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y +CONFIG_SOC_DAC_SUPPORTED=y CONFIG_SOC_UART_SUPPORTED=y -CONFIG_SOC_GDMA_SUPPORTED=y -CONFIG_SOC_AHB_GDMA_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y CONFIG_SOC_GPTIMER_SUPPORTED=y -CONFIG_SOC_TWAI_SUPPORTED=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y CONFIG_SOC_BT_SUPPORTED=y -CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y -CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y -CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y -CONFIG_SOC_XT_WDT_SUPPORTED=y +CONFIG_SOC_PCNT_SUPPORTED=y CONFIG_SOC_PHY_SUPPORTED=y CONFIG_SOC_WIFI_SUPPORTED=y -CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y -CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y -CONFIG_SOC_EFUSE_HAS_EFUSE_RST_BUG=y +CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y +CONFIG_SOC_TWAI_SUPPORTED=y CONFIG_SOC_EFUSE_SUPPORTED=y +CONFIG_SOC_EMAC_SUPPORTED=y +CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y CONFIG_SOC_RTC_MEM_SUPPORTED=y CONFIG_SOC_I2S_SUPPORTED=y CONFIG_SOC_RMT_SUPPORTED=y @@ -28,19 +31,17 @@ CONFIG_SOC_SDM_SUPPORTED=y CONFIG_SOC_GPSPI_SUPPORTED=y CONFIG_SOC_LEDC_SUPPORTED=y CONFIG_SOC_I2C_SUPPORTED=y -CONFIG_SOC_SYSTIMER_SUPPORTED=y CONFIG_SOC_SUPPORT_COEXISTENCE=y CONFIG_SOC_AES_SUPPORTED=y CONFIG_SOC_MPI_SUPPORTED=y CONFIG_SOC_SHA_SUPPORTED=y -CONFIG_SOC_HMAC_SUPPORTED=y -CONFIG_SOC_DIG_SIGN_SUPPORTED=y CONFIG_SOC_FLASH_ENC_SUPPORTED=y CONFIG_SOC_SECURE_BOOT_SUPPORTED=y -CONFIG_SOC_MEMPROT_SUPPORTED=y +CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_ULP_FSM_SUPPORTED=y CONFIG_SOC_CLK_TREE_SUPPORTED=y -CONFIG_SOC_ASSIST_DEBUG_SUPPORTED=y +CONFIG_SOC_MPU_SUPPORTED=y CONFIG_SOC_WDT_SUPPORTED=y CONFIG_SOC_SPI_FLASH_SUPPORTED=y CONFIG_SOC_RNG_SUPPORTED=y @@ -48,250 +49,207 @@ CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y CONFIG_SOC_PM_SUPPORTED=y +CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 +CONFIG_SOC_XTAL_SUPPORT_26M=y CONFIG_SOC_XTAL_SUPPORT_40M=y -CONFIG_SOC_AES_SUPPORT_DMA=y -CONFIG_SOC_AES_GDMA=y -CONFIG_SOC_AES_SUPPORT_AES_128=y -CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y +CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_ARBITER_SUPPORTED=y -CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y -CONFIG_SOC_ADC_MONITOR_SUPPORTED=y CONFIG_SOC_ADC_DMA_SUPPORTED=y CONFIG_SOC_ADC_PERIPH_NUM=2 -CONFIG_SOC_ADC_MAX_CHANNEL_NUM=5 +CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 CONFIG_SOC_ADC_ATTEN_NUM=4 -CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=1 -CONFIG_SOC_ADC_PATT_LEN_MAX=8 -CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 +CONFIG_SOC_ADC_PATT_LEN_MAX=16 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 +CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2 CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 -CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 -CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 -CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_MONITOR_NUM=0 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20 +CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y -CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y CONFIG_SOC_ADC_SHARED_POWER=y -CONFIG_SOC_APB_BACKUP_DMA=y -CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y -CONFIG_SOC_CACHE_MEMORY_IBANK_SIZE=0x4000 -CONFIG_SOC_CPU_CORES_NUM=1 +CONFIG_SOC_IDCACHE_PER_CORE=y +CONFIG_SOC_CPU_CORES_NUM=2 CONFIG_SOC_CPU_INTR_NUM=32 -CONFIG_SOC_CPU_HAS_FLEXIBLE_INTC=y -CONFIG_SOC_CPU_HAS_CSR_PC=y -CONFIG_SOC_CPU_BREAKPOINTS_NUM=8 -CONFIG_SOC_CPU_WATCHPOINTS_NUM=8 -CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000 -CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=3072 -CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 -CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 -CONFIG_SOC_AHB_GDMA_VERSION=1 -CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 -CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=3 +CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y +CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 +CONFIG_SOC_DAC_CHAN_NUM=2 +CONFIG_SOC_DAC_RESOLUTION=8 +CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y CONFIG_SOC_GPIO_PORT=1 -CONFIG_SOC_GPIO_PIN_COUNT=22 -CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y -CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y -CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y -CONFIG_SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP=y -CONFIG_SOC_GPIO_IN_RANGE_MAX=21 -CONFIG_SOC_GPIO_OUT_RANGE_MAX=21 -CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0 -CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=6 -CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x00000000003FFFC0 -CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y +CONFIG_SOC_GPIO_PIN_COUNT=40 +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF +CONFIG_SOC_GPIO_IN_RANGE_MAX=39 +CONFIG_SOC_GPIO_OUT_RANGE_MAX=33 +CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA +CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y -CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y -CONFIG_SOC_I2C_NUM=1 -CONFIG_SOC_HP_I2C_NUM=1 +CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_HP_I2C_NUM=2 CONFIG_SOC_I2C_FIFO_LEN=32 -CONFIG_SOC_I2C_CMD_REG_NUM=8 +CONFIG_SOC_I2C_CMD_REG_NUM=16 CONFIG_SOC_I2C_SUPPORT_SLAVE=y -CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y -CONFIG_SOC_I2C_SUPPORT_XTAL=y -CONFIG_SOC_I2C_SUPPORT_RTC=y +CONFIG_SOC_I2C_SUPPORT_APB=y CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y -CONFIG_SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y -CONFIG_SOC_I2S_NUM=1 -CONFIG_SOC_I2S_HW_VERSION_2=y -CONFIG_SOC_I2S_SUPPORTS_XTAL=y +CONFIG_SOC_I2C_STOP_INDEPENDENT=y +CONFIG_SOC_I2S_NUM=2 +CONFIG_SOC_I2S_HW_VERSION_1=y +CONFIG_SOC_I2S_SUPPORTS_APLL=y CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y -CONFIG_SOC_I2S_SUPPORTS_PCM=y CONFIG_SOC_I2S_SUPPORTS_PDM=y CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y -CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 -CONFIG_SOC_I2S_SUPPORTS_TDM=y +CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y +CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y +CONFIG_SOC_I2S_SUPPORTS_ADC=y +CONFIG_SOC_I2S_SUPPORTS_DAC=y +CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y +CONFIG_SOC_I2S_MAX_DATA_WIDTH=24 +CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y +CONFIG_SOC_I2S_LCD_I80_VARIANT=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=2 +CONFIG_SOC_LCD_I80_BUS_WIDTH=24 +CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y -CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y +CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y CONFIG_SOC_LEDC_TIMER_NUM=4 -CONFIG_SOC_LEDC_CHANNEL_NUM=6 -CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14 -CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y -CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 -CONFIG_SOC_MMU_PERIPH_NUM=1 +CONFIG_SOC_LEDC_CHANNEL_NUM=8 +CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 +CONFIG_SOC_MCPWM_GROUPS=2 +CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 +CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 +CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 +CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y +CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 +CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 +CONFIG_SOC_MMU_PERIPH_NUM=2 +CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3 CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_PCNT_GROUPS=1 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 +CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 +CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 CONFIG_SOC_RMT_GROUPS=1 -CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=2 -CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=2 -CONFIG_SOC_RMT_CHANNELS_PER_GROUP=4 -CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 -CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y -CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y -CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y -CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y -CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y -CONFIG_SOC_RMT_SUPPORT_XTAL=y +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 +CONFIG_SOC_RMT_SUPPORT_REF_TICK=y CONFIG_SOC_RMT_SUPPORT_APB=y -CONFIG_SOC_RMT_SUPPORT_RC_FAST=y -CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128 -CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=108 -CONFIG_SOC_SLEEP_SYSTIMER_STALL_WORKAROUND=y -CONFIG_SOC_SLEEP_TGWDT_STOP_WORKAROUND=y -CONFIG_SOC_RTCIO_PIN_COUNT=0 -CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 -CONFIG_SOC_MPI_OPERATIONS_NUM=3 -CONFIG_SOC_RSA_MAX_BIT_LEN=3072 -CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 -CONFIG_SOC_SHA_SUPPORT_DMA=y -CONFIG_SOC_SHA_SUPPORT_RESUME=y -CONFIG_SOC_SHA_GDMA=y -CONFIG_SOC_SHA_SUPPORT_SHA1=y -CONFIG_SOC_SHA_SUPPORT_SHA224=y -CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y +CONFIG_SOC_RTCIO_PIN_COUNT=18 +CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y +CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y +CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y CONFIG_SOC_SDM_GROUPS=1 -CONFIG_SOC_SDM_CHANNELS_PER_GROUP=4 +CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 CONFIG_SOC_SDM_CLK_SUPPORT_APB=y -CONFIG_SOC_SPI_PERIPH_NUM=2 -CONFIG_SOC_SPI_MAX_CS_NUM=6 -CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 -CONFIG_SOC_SPI_SUPPORT_DDRCLK=y -CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y -CONFIG_SOC_SPI_SUPPORT_CD_SIG=y -CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y -CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y +CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y +CONFIG_SOC_SPI_AS_CS_SUPPORTED=y +CONFIG_SOC_SPI_PERIPH_NUM=3 +CONFIG_SOC_SPI_DMA_CHAN_NUM=2 +CONFIG_SOC_SPI_MAX_CS_NUM=3 CONFIG_SOC_SPI_SUPPORT_CLK_APB=y -CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y -CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y -CONFIG_SOC_SPI_SCT_SUPPORTED=y -CONFIG_SOC_SPI_SCT_REG_NUM=14 -CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y -CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA -CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y -CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y -CONFIG_SOC_SPI_MEM_SUPPORT_IDLE_INTR=y -CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_CHECK_SUS=y -CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y -CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y +CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y -CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 -CONFIG_SOC_SYSTIMER_ALARM_NUM=3 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 -CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y -CONFIG_SOC_SYSTIMER_INT_LEVEL=y -CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y CONFIG_SOC_TIMER_GROUPS=2 -CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=1 -CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 -CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y +CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y -CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=2 CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32 CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16 -CONFIG_SOC_MWDT_SUPPORT_XTAL=y +CONFIG_SOC_TOUCH_SENSOR_VERSION=1 +CONFIG_SOC_TOUCH_SENSOR_NUM=10 +CONFIG_SOC_TOUCH_SAMPLE_CFG_NUM=1 CONFIG_SOC_TWAI_CONTROLLER_NUM=1 -CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y CONFIG_SOC_TWAI_BRP_MIN=2 -CONFIG_SOC_TWAI_BRP_MAX=16384 -CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y -CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y -CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y -CONFIG_SOC_EFUSE_DIS_USB_JTAG=y -CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y -CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y -CONFIG_SOC_EFUSE_DIS_ICACHE=y -CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y -CONFIG_SOC_SECURE_BOOT_V2_RSA=y -CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 -CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y -CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y -CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y -CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE=16 -CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE=512 -CONFIG_SOC_UART_NUM=2 -CONFIG_SOC_UART_HP_NUM=2 +CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y +CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y +CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_HP_NUM=3 +CONFIG_SOC_UART_SUPPORT_APB_CLK=y +CONFIG_SOC_UART_SUPPORT_REF_TICK=y CONFIG_SOC_UART_FIFO_LEN=128 CONFIG_SOC_UART_BITRATE_MAX=5000000 -CONFIG_SOC_UART_SUPPORT_APB_CLK=y -CONFIG_SOC_UART_SUPPORT_RTC_CLK=y -CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y -CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y -CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y -CONFIG_SOC_COEX_HW_PTI=y +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y +CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y +CONFIG_SOC_SHA_ENDIANNESS_BE=y +CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_SHA_SUPPORT_SHA384=y +CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 +CONFIG_SOC_MPI_OPERATIONS_NUM=y +CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_AES_128=y +CONFIG_SOC_AES_SUPPORT_AES_192=y +CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_SECURE_BOOT_V1=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 -CONFIG_SOC_MAC_BB_PD_MEM_SIZE=192 -CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 -CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_CPU_PD=y -CONFIG_SOC_PM_SUPPORT_WIFI_PD=y -CONFIG_SOC_PM_SUPPORT_BT_PD=y +CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y -CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y -CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL=y -CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA=y +CONFIG_SOC_PM_SUPPORT_MODEM_PD=y +CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y CONFIG_SOC_PM_MODEM_PD_BY_SW=y +CONFIG_SOC_CLK_APLL_SUPPORTED=y CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL=y -CONFIG_SOC_WIFI_HW_TSF=y -CONFIG_SOC_WIFI_FTM_SUPPORT=y -CONFIG_SOC_WIFI_GCMP_SUPPORT=y +CONFIG_SOC_SDMMC_USE_IOMUX=y +CONFIG_SOC_SDMMC_NUM_SLOTS=2 CONFIG_SOC_WIFI_WAPI_SUPPORT=y CONFIG_SOC_WIFI_CSI_SUPPORT=y CONFIG_SOC_WIFI_MESH_SUPPORT=y CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y -CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y +CONFIG_SOC_WIFI_NAN_SUPPORT=y CONFIG_SOC_BLE_SUPPORTED=y CONFIG_SOC_BLE_MESH_SUPPORTED=y -CONFIG_SOC_BLE_50_SUPPORTED=y -CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y +CONFIG_SOC_BT_CLASSIC_SUPPORTED=y CONFIG_SOC_BLUFI_SUPPORTED=y +CONFIG_SOC_BT_H2C_ENC_KEY_CTRL_ENH_VSC_SUPPORTED=y +CONFIG_SOC_ULP_HAS_ADC=y CONFIG_SOC_PHY_COMBO_MODULE=y +CONFIG_SOC_EMAC_RMII_CLK_OUT_INTERNAL_LOOPBACK=y CONFIG_IDF_CMAKE=y CONFIG_IDF_TOOLCHAIN="gcc" CONFIG_IDF_TOOLCHAIN_GCC=y -CONFIG_IDF_TARGET_ARCH_RISCV=y -CONFIG_IDF_TARGET_ARCH="riscv" -CONFIG_IDF_TARGET="esp32c3" -CONFIG_IDF_INIT_VERSION="5.4.0" -CONFIG_IDF_TARGET_ESP32C3=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0005 +CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET_ARCH="xtensa" +CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_INIT_VERSION="5.4.2" +CONFIG_IDF_TARGET_ESP32=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 # # Build type @@ -303,6 +261,8 @@ CONFIG_APP_BUILD_BOOTLOADER=y CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # CONFIG_APP_REPRODUCIBLE_BUILD is not set # CONFIG_APP_NO_BLOBS is not set +# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # end of Build type # @@ -316,7 +276,7 @@ CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y CONFIG_BOOTLOADER_PROJECT_VER=1 # end of Bootloader manager -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 +CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set @@ -328,10 +288,10 @@ CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set # CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set # CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_INFO is not set -CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG=y +CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y +# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set # CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set -CONFIG_BOOTLOADER_LOG_LEVEL=4 +CONFIG_BOOTLOADER_LOG_LEVEL=3 # # Format @@ -348,6 +308,8 @@ CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y # end of Serial Flash Configurations +# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y # CONFIG_BOOTLOADER_FACTORY_RESET is not set # CONFIG_BOOTLOADER_APP_TEST is not set CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y @@ -365,12 +327,10 @@ CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 # # Security features # -CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y -CONFIG_SECURE_BOOT_V2_PREFERRED=y +CONFIG_SECURE_BOOT_V1_SUPPORTED=y # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set # CONFIG_SECURE_BOOT is not set # CONFIG_SECURE_FLASH_ENC_ENABLED is not set -CONFIG_SECURE_ROM_DL_MODE_ENABLED=y # end of Security features # @@ -387,34 +347,16 @@ CONFIG_ESP_ROM_HAS_CRC_LE=y CONFIG_ESP_ROM_HAS_CRC_BE=y CONFIG_ESP_ROM_HAS_MZ_CRC32=y CONFIG_ESP_ROM_HAS_JPEG_DECODE=y -CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y -CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=3 -CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y -CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y -CONFIG_ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV=y -CONFIG_ESP_ROM_GET_CLK_FREQ=y +CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y -CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y -CONFIG_ESP_ROM_HAS_SPI_FLASH=y -CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y CONFIG_ESP_ROM_HAS_NEWLIB=y CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y -CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y -CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y CONFIG_ESP_ROM_HAS_SW_FLOAT=y CONFIG_ESP_ROM_USB_OTG_NUM=-1 -CONFIG_ESP_ROM_HAS_VERSION=y +CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1 CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y - -# -# Boot ROM Behavior -# -CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y -# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set -# end of Boot ROM Behavior +CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y # # Serial flasher config @@ -426,11 +368,11 @@ CONFIG_ESPTOOLPY_FLASHMODE_DIO=y # CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y CONFIG_ESPTOOLPY_FLASHMODE="dio" -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" +CONFIG_ESPTOOLPY_FLASHFREQ="40m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set @@ -487,7 +429,6 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y # CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set # CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set @@ -512,22 +453,44 @@ CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y # TWAI Configuration # # CONFIG_TWAI_ISR_IN_IRAM is not set +CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC=y +CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST=y +CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID=y +CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT=y CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # end of TWAI Configuration # # Legacy ADC Driver Configuration # +CONFIG_ADC_DISABLE_DAC=y # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set # # Legacy ADC Calibration Configuration # +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y # CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set # end of Legacy ADC Calibration Configuration # end of Legacy ADC Driver Configuration +# +# Legacy DAC Driver Configurations +# +# CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_DAC_SKIP_LEGACY_CONFLICT_CHECK is not set +# end of Legacy DAC Driver Configurations + +# +# Legacy MCPWM Driver Configurations +# +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set +# end of Legacy MCPWM Driver Configurations + # # Legacy Timer Group Driver Configurations # @@ -555,19 +518,19 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy I2C Driver Configurations +# +# Legacy PCNT Driver Configurations +# +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set +# end of Legacy PCNT Driver Configurations + # # Legacy SDM Driver Configurations # # CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy SDM Driver Configurations - -# -# Legacy Temperature Sensor Driver Configurations -# -# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy Temperature Sensor Driver Configurations # end of Driver Configurations # @@ -575,7 +538,10 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # # CONFIG_EFUSE_CUSTOM_TABLE is not set # CONFIG_EFUSE_VIRTUAL is not set -CONFIG_EFUSE_MAX_BLK_LEN=256 +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set +CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set +CONFIG_EFUSE_MAX_BLK_LEN=192 # end of eFuse Bit Manager # @@ -584,9 +550,19 @@ CONFIG_EFUSE_MAX_BLK_LEN=256 CONFIG_ESP_ERR_TO_NAME_LOOKUP=y # end of Common ESP-related +# +# ESP-Driver:DAC Configurations +# +# CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set +# CONFIG_DAC_ISR_IRAM_SAFE is not set +# CONFIG_DAC_ENABLE_DEBUG_LOG is not set +CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y +# end of ESP-Driver:DAC Configurations + # # ESP-Driver:GPIO Configurations # +# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set # CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set # end of ESP-Driver:GPIO Configurations @@ -621,6 +597,22 @@ CONFIG_GPTIMER_OBJ_CACHE_SAFE=y # CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set # end of ESP-Driver:LEDC Configurations +# +# ESP-Driver:MCPWM Configurations +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:MCPWM Configurations + +# +# ESP-Driver:PCNT Configurations +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:PCNT Configurations + # # ESP-Driver:RMT Configurations # @@ -645,24 +637,12 @@ CONFIG_SPI_MASTER_ISR_IN_IRAM=y CONFIG_SPI_SLAVE_ISR_IN_IRAM=y # end of ESP-Driver:SPI Configurations -# -# ESP-Driver:Temperature Sensor Configurations -# -# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Temperature Sensor Configurations - # # ESP-Driver:UART Configurations # # CONFIG_UART_ISR_IN_IRAM is not set # end of ESP-Driver:UART Configurations -# -# ESP-Driver:USB Serial/JTAG Configuration -# -CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y -# end of ESP-Driver:USB Serial/JTAG Configuration - # # Event Loop Library # @@ -678,25 +658,26 @@ CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # # Chip revision # -# CONFIG_ESP32C3_REV_MIN_0 is not set -# CONFIG_ESP32C3_REV_MIN_1 is not set -# CONFIG_ESP32C3_REV_MIN_2 is not set -CONFIG_ESP32C3_REV_MIN_3=y -# CONFIG_ESP32C3_REV_MIN_4 is not set -# CONFIG_ESP32C3_REV_MIN_101 is not set -CONFIG_ESP32C3_REV_MIN_FULL=3 -CONFIG_ESP_REV_MIN_FULL=3 +CONFIG_ESP32_REV_MIN_0=y +# CONFIG_ESP32_REV_MIN_1 is not set +# CONFIG_ESP32_REV_MIN_1_1 is not set +# CONFIG_ESP32_REV_MIN_2 is not set +# CONFIG_ESP32_REV_MIN_3 is not set +# CONFIG_ESP32_REV_MIN_3_1 is not set +CONFIG_ESP32_REV_MIN=0 +CONFIG_ESP32_REV_MIN_FULL=0 +CONFIG_ESP_REV_MIN_FULL=0 # -# Maximum Supported ESP32-C3 Revision (Rev v1.99) +# Maximum Supported ESP32 Revision (Rev v3.99) # -CONFIG_ESP32C3_REV_MAX_FULL=199 -CONFIG_ESP_REV_MAX_FULL=199 +CONFIG_ESP32_REV_MAX_FULL=399 +CONFIG_ESP_REV_MAX_FULL=399 CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0 -CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=199 +CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99 # -# Maximum Supported ESP32-C3 eFuse Block Revision (eFuse Block Rev v1.99) +# Maximum Supported ESP32 eFuse Block Revision (eFuse Block Rev v0.99) # # end of Chip revision @@ -709,9 +690,10 @@ CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES=4 +# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 +# CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set # CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set # end of MAC Config @@ -721,8 +703,9 @@ CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES=4 # CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y # CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set -CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0 +CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y +# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set +CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 # CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set # CONFIG_ESP_SLEEP_DEBUG is not set CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y @@ -741,23 +724,16 @@ CONFIG_RTC_CLK_CAL_CYCLES=1024 # # Peripheral Control # -CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y +# CONFIG_PERIPH_CTRL_FUNC_IN_IRAM is not set # end of Peripheral Control -# -# GDMA Configurations -# -CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y -CONFIG_GDMA_ISR_HANDLER_IN_IRAM=y -CONFIG_GDMA_OBJ_DRAM_SAFE=y -# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set -# CONFIG_GDMA_ISR_IRAM_SAFE is not set -# end of GDMA Configurations - # # Main XTAL Config # +# CONFIG_XTAL_FREQ_26 is not set +# CONFIG_XTAL_FREQ_32 is not set CONFIG_XTAL_FREQ_40=y +# CONFIG_XTAL_FREQ_AUTO is not set CONFIG_XTAL_FREQ=40 # end of Main XTAL Config @@ -779,7 +755,6 @@ CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y # # CONFIG_PM_ENABLE is not set # CONFIG_PM_SLP_IRAM_OPT is not set -CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y # end of Power Management # @@ -798,75 +773,89 @@ CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y # # CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160=y +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240 is not set CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=160 + +# +# Memory +# +# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set + +# +# Non-backward compatible options +# +# CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM is not set +# end of Non-backward compatible options +# end of Memory + +# +# Trace memory +# +# CONFIG_ESP32_TRAX is not set +CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +# end of Trace memory + # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 -CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y -CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y -CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y -# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set # # Memory protection # -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y # end of Memory protection CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y +# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set # CONFIG_ESP_CONSOLE_UART_CUSTOM is not set # CONFIG_ESP_CONSOLE_NONE is not set -# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set -CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y CONFIG_ESP_CONSOLE_UART=y CONFIG_ESP_CONSOLE_UART_NUM=0 CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 +CONFIG_ESP_INT_WDT_CHECK_CPU1=y CONFIG_ESP_TASK_WDT_EN=y -CONFIG_ESP_TASK_WDT_INIT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +# CONFIG_ESP_TASK_WDT_INIT is not set # CONFIG_ESP_PANIC_HANDLER_IRAM is not set # CONFIG_ESP_DEBUG_STUBS_ENABLE is not set CONFIG_ESP_DEBUG_OCDAWARE=y +# CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y # # Brownout Detector # CONFIG_ESP_BROWNOUT_DET=y -CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set -CONFIG_ESP_BROWNOUT_DET_LVL=7 +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=0 # end of Brownout Detector +# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y -CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y -CONFIG_ESP_SYSTEM_HW_PC_RECORD=y # end of ESP System Settings # # IPC (Inter-Processor Call) # CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y # end of IPC (Inter-Processor Call) # @@ -882,7 +871,7 @@ CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y # CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -CONFIG_ESP_TIMER_IMPL_SYSTIMER=y +CONFIG_ESP_TIMER_IMPL_TG0_LAC=y # end of ESP Timer (High Resolution Timer) # @@ -893,9 +882,8 @@ CONFIG_ESP_TIMER_IMPL_SYSTIMER=y # Kernel # # CONFIG_FREERTOS_SMP is not set -CONFIG_FREERTOS_UNICORE=y +# CONFIG_FREERTOS_UNICORE is not set CONFIG_FREERTOS_HZ=100 -CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y @@ -908,6 +896,7 @@ CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 CONFIG_FREERTOS_USE_TIMERS=y CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" # CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set +# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 @@ -932,10 +921,11 @@ CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y CONFIG_FREERTOS_ISR_STACKSIZE=1536 CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y -CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y -# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set -CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y +# CONFIG_FREERTOS_FPU_IN_ISR is not set +CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y # CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set # end of Port @@ -951,7 +941,7 @@ CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y CONFIG_FREERTOS_DEBUG_OCDAWARE=y CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y -CONFIG_FREERTOS_NUMBER_OF_CORES=1 +CONFIG_FREERTOS_NUMBER_OF_CORES=2 # end of FreeRTOS # @@ -1059,15 +1049,11 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 # end of Certificate Bundle # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -CONFIG_MBEDTLS_CMAC_C=y +# CONFIG_MBEDTLS_CMAC_C is not set CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_AES_USE_INTERRUPT=y -CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=y CONFIG_MBEDTLS_HARDWARE_MPI=y -CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI=y -CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y -CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 +# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set CONFIG_MBEDTLS_HARDWARE_SHA=y CONFIG_MBEDTLS_ROM_MD5=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set @@ -1182,6 +1168,9 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y +# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set +# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" # end of PThreads @@ -1212,7 +1201,6 @@ CONFIG_SPI_FLASH_BROWNOUT_RESET=y # # Features here require specific hardware (READ DOCS FIRST!) # -# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 # CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set # CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set @@ -1225,10 +1213,10 @@ CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 # CONFIG_SPI_FLASH_VERIFY_WRITE is not set # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -# CONFIG_SPI_FLASH_ROM_IMPL is not set CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y # CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set # CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set +# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set # CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 @@ -1246,14 +1234,12 @@ CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y +# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set +# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set # end of Auto-detect flash chips CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y @@ -1274,7 +1260,7 @@ CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y # # Relay Channel Driver Configuration # -CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS=800 +CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS=200 CONFIG_RELAY_CHN_COUNT=2 CONFIG_RELAY_CHN_ENABLE_TILTING=y # end of Relay Channel Driver Configuration @@ -1285,13 +1271,16 @@ CONFIG_RELAY_CHN_ENABLE_TILTING=y # Deprecated options for backward compatibility # CONFIG_APP_BUILD_TYPE_ELF_RAM is not set # CONFIG_NO_BLOBS is not set +# CONFIG_ESP32_NO_BLOBS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_INFO is not set -CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG=y +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set -CONFIG_LOG_BOOTLOADER_LEVEL=4 +CONFIG_LOG_BOOTLOADER_LEVEL=3 # CONFIG_APP_ROLLBACK_ENABLE is not set # CONFIG_FLASH_ENCRYPTION_ENABLED is not set # CONFIG_FLASHMODE_QIO is not set @@ -1314,22 +1303,38 @@ CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set +CONFIG_ADC2_DISABLE_DAC=y +# CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 # CONFIG_ESP_SYSTEM_PD_FLASH is not set -CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP32C3_RTC_CLK_SRC_INT_RC=y -# CONFIG_ESP32C3_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32C3_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32C3_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_ESP32C3_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y -# CONFIG_ESP32C3_DEFAULT_CPU_FREQ_80 is not set -CONFIG_ESP32C3_DEFAULT_CPU_FREQ_160=y -CONFIG_ESP32C3_DEFAULT_CPU_FREQ_MHZ=160 -CONFIG_ESP32C3_MEMPROT_FEATURE=y -CONFIG_ESP32C3_MEMPROT_FEATURE_LOCK=y +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set +# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +# CONFIG_ESP32_XTAL_FREQ_26 is not set +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_MAIN_TASK_STACK_SIZE=3584 @@ -1342,29 +1347,32 @@ CONFIG_CONSOLE_UART_NUM=0 CONFIG_CONSOLE_UART_BAUDRATE=115200 CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_TASK_WDT=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_INT_WDT_CHECK_CPU1=y +# CONFIG_TASK_WDT is not set +# CONFIG_ESP_TASK_WDT is not set # CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP32C3_DEBUG_OCDAWARE=y +CONFIG_ESP32_DEBUG_OCDAWARE=y CONFIG_BROWNOUT_DET=y -CONFIG_ESP32C3_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_7=y -CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_3 is not set +CONFIG_ESP32_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_2 is not set -CONFIG_BROWNOUT_DET_LVL=7 -CONFIG_ESP32C3_BROWNOUT_DET_LVL=7 +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_ESP32_BROWNOUT_DET_LVL=0 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set CONFIG_IPC_TASK_STACK_SIZE=1024 CONFIG_TIMER_TASK_STACK_SIZE=3584 CONFIG_TIMER_TASK_PRIORITY=1 @@ -1372,13 +1380,18 @@ CONFIG_TIMER_TASK_STACK_DEPTH=2048 CONFIG_TIMER_QUEUE_LENGTH=10 # CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set # CONFIG_HAL_ASSERTION_SILIENT is not set -CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC_SYSTIMER=y -# CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32C3_TIME_SYSCALL_USE_SYSTIMER is not set -# CONFIG_ESP32C3_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_ESP32_PTHREAD_STACK_MIN=768 +CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y diff --git a/test_apps/sdkconfig.defaults b/test_apps/sdkconfig.defaults index 2b5191a..b7641e3 100644 --- a/test_apps/sdkconfig.defaults +++ b/test_apps/sdkconfig.defaults @@ -1,4 +1,8 @@ +# Disable task WDT for tests +CONFIG_ESP_TASK_WDT_INIT=n + # Relay Channel Driver Default Configuration for Testing +# Keep this as short as possible for tests CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS=200 CONFIG_RELAY_CHN_COUNT=2 CONFIG_RELAY_CHN_ENABLE_TILTING=y \ No newline at end of file diff --git a/test_apps/sdkconfig.old b/test_apps/sdkconfig.old index a698387..e62945e 100644 --- a/test_apps/sdkconfig.old +++ b/test_apps/sdkconfig.old @@ -1,26 +1,29 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Configuration +# Espressif IoT Development Framework (ESP-IDF) 5.4.2 Project Configuration # +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" +CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" +CONFIG_SOC_DPORT_WORKAROUND="Not determined" +CONFIG_SOC_CAPS_ECO_VER_MAX=301 CONFIG_SOC_ADC_SUPPORTED=y -CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y +CONFIG_SOC_DAC_SUPPORTED=y CONFIG_SOC_UART_SUPPORTED=y -CONFIG_SOC_GDMA_SUPPORTED=y -CONFIG_SOC_AHB_GDMA_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y CONFIG_SOC_GPTIMER_SUPPORTED=y -CONFIG_SOC_TWAI_SUPPORTED=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y CONFIG_SOC_BT_SUPPORTED=y -CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y -CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y -CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y -CONFIG_SOC_XT_WDT_SUPPORTED=y +CONFIG_SOC_PCNT_SUPPORTED=y CONFIG_SOC_PHY_SUPPORTED=y CONFIG_SOC_WIFI_SUPPORTED=y -CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y -CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y -CONFIG_SOC_EFUSE_HAS_EFUSE_RST_BUG=y +CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y +CONFIG_SOC_TWAI_SUPPORTED=y CONFIG_SOC_EFUSE_SUPPORTED=y +CONFIG_SOC_EMAC_SUPPORTED=y +CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y CONFIG_SOC_RTC_MEM_SUPPORTED=y CONFIG_SOC_I2S_SUPPORTED=y CONFIG_SOC_RMT_SUPPORTED=y @@ -28,19 +31,17 @@ CONFIG_SOC_SDM_SUPPORTED=y CONFIG_SOC_GPSPI_SUPPORTED=y CONFIG_SOC_LEDC_SUPPORTED=y CONFIG_SOC_I2C_SUPPORTED=y -CONFIG_SOC_SYSTIMER_SUPPORTED=y CONFIG_SOC_SUPPORT_COEXISTENCE=y CONFIG_SOC_AES_SUPPORTED=y CONFIG_SOC_MPI_SUPPORTED=y CONFIG_SOC_SHA_SUPPORTED=y -CONFIG_SOC_HMAC_SUPPORTED=y -CONFIG_SOC_DIG_SIGN_SUPPORTED=y CONFIG_SOC_FLASH_ENC_SUPPORTED=y CONFIG_SOC_SECURE_BOOT_SUPPORTED=y -CONFIG_SOC_MEMPROT_SUPPORTED=y +CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_ULP_FSM_SUPPORTED=y CONFIG_SOC_CLK_TREE_SUPPORTED=y -CONFIG_SOC_ASSIST_DEBUG_SUPPORTED=y +CONFIG_SOC_MPU_SUPPORTED=y CONFIG_SOC_WDT_SUPPORTED=y CONFIG_SOC_SPI_FLASH_SUPPORTED=y CONFIG_SOC_RNG_SUPPORTED=y @@ -48,248 +49,207 @@ CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y CONFIG_SOC_PM_SUPPORTED=y +CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 +CONFIG_SOC_XTAL_SUPPORT_26M=y CONFIG_SOC_XTAL_SUPPORT_40M=y -CONFIG_SOC_AES_SUPPORT_DMA=y -CONFIG_SOC_AES_GDMA=y -CONFIG_SOC_AES_SUPPORT_AES_128=y -CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y +CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_ARBITER_SUPPORTED=y -CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y -CONFIG_SOC_ADC_MONITOR_SUPPORTED=y CONFIG_SOC_ADC_DMA_SUPPORTED=y CONFIG_SOC_ADC_PERIPH_NUM=2 -CONFIG_SOC_ADC_MAX_CHANNEL_NUM=5 +CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 CONFIG_SOC_ADC_ATTEN_NUM=4 -CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=1 -CONFIG_SOC_ADC_PATT_LEN_MAX=8 -CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 +CONFIG_SOC_ADC_PATT_LEN_MAX=16 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 +CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2 CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 -CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 -CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 -CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_MONITOR_NUM=0 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20 +CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y -CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y CONFIG_SOC_ADC_SHARED_POWER=y -CONFIG_SOC_APB_BACKUP_DMA=y -CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y -CONFIG_SOC_CACHE_MEMORY_IBANK_SIZE=0x4000 -CONFIG_SOC_CPU_CORES_NUM=1 +CONFIG_SOC_IDCACHE_PER_CORE=y +CONFIG_SOC_CPU_CORES_NUM=2 CONFIG_SOC_CPU_INTR_NUM=32 -CONFIG_SOC_CPU_HAS_FLEXIBLE_INTC=y -CONFIG_SOC_CPU_HAS_CSR_PC=y -CONFIG_SOC_CPU_BREAKPOINTS_NUM=8 -CONFIG_SOC_CPU_WATCHPOINTS_NUM=8 -CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000 -CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=3072 -CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 -CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 -CONFIG_SOC_AHB_GDMA_VERSION=1 -CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 -CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=3 +CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y +CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 +CONFIG_SOC_DAC_CHAN_NUM=2 +CONFIG_SOC_DAC_RESOLUTION=8 +CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y CONFIG_SOC_GPIO_PORT=1 -CONFIG_SOC_GPIO_PIN_COUNT=22 -CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y -CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y -CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y -CONFIG_SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP=y -CONFIG_SOC_GPIO_IN_RANGE_MAX=21 -CONFIG_SOC_GPIO_OUT_RANGE_MAX=21 -CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0 -CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=6 -CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x00000000003FFFC0 -CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y +CONFIG_SOC_GPIO_PIN_COUNT=40 +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF +CONFIG_SOC_GPIO_IN_RANGE_MAX=39 +CONFIG_SOC_GPIO_OUT_RANGE_MAX=33 +CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA +CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y -CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y -CONFIG_SOC_I2C_NUM=1 -CONFIG_SOC_HP_I2C_NUM=1 +CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_HP_I2C_NUM=2 CONFIG_SOC_I2C_FIFO_LEN=32 -CONFIG_SOC_I2C_CMD_REG_NUM=8 +CONFIG_SOC_I2C_CMD_REG_NUM=16 CONFIG_SOC_I2C_SUPPORT_SLAVE=y -CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y -CONFIG_SOC_I2C_SUPPORT_XTAL=y -CONFIG_SOC_I2C_SUPPORT_RTC=y +CONFIG_SOC_I2C_SUPPORT_APB=y CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y -CONFIG_SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y -CONFIG_SOC_I2S_NUM=1 -CONFIG_SOC_I2S_HW_VERSION_2=y -CONFIG_SOC_I2S_SUPPORTS_XTAL=y +CONFIG_SOC_I2C_STOP_INDEPENDENT=y +CONFIG_SOC_I2S_NUM=2 +CONFIG_SOC_I2S_HW_VERSION_1=y +CONFIG_SOC_I2S_SUPPORTS_APLL=y CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y -CONFIG_SOC_I2S_SUPPORTS_PCM=y CONFIG_SOC_I2S_SUPPORTS_PDM=y CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y -CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 -CONFIG_SOC_I2S_SUPPORTS_TDM=y +CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y +CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y +CONFIG_SOC_I2S_SUPPORTS_ADC=y +CONFIG_SOC_I2S_SUPPORTS_DAC=y +CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y +CONFIG_SOC_I2S_MAX_DATA_WIDTH=24 +CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y +CONFIG_SOC_I2S_LCD_I80_VARIANT=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=2 +CONFIG_SOC_LCD_I80_BUS_WIDTH=24 +CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y -CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y +CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y CONFIG_SOC_LEDC_TIMER_NUM=4 -CONFIG_SOC_LEDC_CHANNEL_NUM=6 -CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14 -CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y -CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 -CONFIG_SOC_MMU_PERIPH_NUM=1 +CONFIG_SOC_LEDC_CHANNEL_NUM=8 +CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 +CONFIG_SOC_MCPWM_GROUPS=2 +CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 +CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 +CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 +CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y +CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 +CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 +CONFIG_SOC_MMU_PERIPH_NUM=2 +CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3 CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_PCNT_GROUPS=1 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 +CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 +CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 CONFIG_SOC_RMT_GROUPS=1 -CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=2 -CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=2 -CONFIG_SOC_RMT_CHANNELS_PER_GROUP=4 -CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 -CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y -CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y -CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y -CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y -CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y -CONFIG_SOC_RMT_SUPPORT_XTAL=y +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 +CONFIG_SOC_RMT_SUPPORT_REF_TICK=y CONFIG_SOC_RMT_SUPPORT_APB=y -CONFIG_SOC_RMT_SUPPORT_RC_FAST=y -CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128 -CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=108 -CONFIG_SOC_SLEEP_SYSTIMER_STALL_WORKAROUND=y -CONFIG_SOC_SLEEP_TGWDT_STOP_WORKAROUND=y -CONFIG_SOC_RTCIO_PIN_COUNT=0 -CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 -CONFIG_SOC_MPI_OPERATIONS_NUM=3 -CONFIG_SOC_RSA_MAX_BIT_LEN=3072 -CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 -CONFIG_SOC_SHA_SUPPORT_DMA=y -CONFIG_SOC_SHA_SUPPORT_RESUME=y -CONFIG_SOC_SHA_GDMA=y -CONFIG_SOC_SHA_SUPPORT_SHA1=y -CONFIG_SOC_SHA_SUPPORT_SHA224=y -CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y +CONFIG_SOC_RTCIO_PIN_COUNT=18 +CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y +CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y +CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y CONFIG_SOC_SDM_GROUPS=1 -CONFIG_SOC_SDM_CHANNELS_PER_GROUP=4 +CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 CONFIG_SOC_SDM_CLK_SUPPORT_APB=y -CONFIG_SOC_SPI_PERIPH_NUM=2 -CONFIG_SOC_SPI_MAX_CS_NUM=6 -CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 -CONFIG_SOC_SPI_SUPPORT_DDRCLK=y -CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y -CONFIG_SOC_SPI_SUPPORT_CD_SIG=y -CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y -CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y +CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y +CONFIG_SOC_SPI_AS_CS_SUPPORTED=y +CONFIG_SOC_SPI_PERIPH_NUM=3 +CONFIG_SOC_SPI_DMA_CHAN_NUM=2 +CONFIG_SOC_SPI_MAX_CS_NUM=3 CONFIG_SOC_SPI_SUPPORT_CLK_APB=y -CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y -CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y -CONFIG_SOC_SPI_SCT_SUPPORTED=y -CONFIG_SOC_SPI_SCT_REG_NUM=14 -CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y -CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA -CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y -CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y -CONFIG_SOC_SPI_MEM_SUPPORT_IDLE_INTR=y -CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_CHECK_SUS=y -CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y -CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y +CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y -CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 -CONFIG_SOC_SYSTIMER_ALARM_NUM=3 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 -CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y -CONFIG_SOC_SYSTIMER_INT_LEVEL=y -CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y CONFIG_SOC_TIMER_GROUPS=2 -CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=1 -CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 -CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y +CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y -CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=2 -CONFIG_SOC_MWDT_SUPPORT_XTAL=y +CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32 +CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16 +CONFIG_SOC_TOUCH_SENSOR_VERSION=1 +CONFIG_SOC_TOUCH_SENSOR_NUM=10 +CONFIG_SOC_TOUCH_SAMPLE_CFG_NUM=1 CONFIG_SOC_TWAI_CONTROLLER_NUM=1 -CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y CONFIG_SOC_TWAI_BRP_MIN=2 -CONFIG_SOC_TWAI_BRP_MAX=16384 -CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y -CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y -CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y -CONFIG_SOC_EFUSE_DIS_USB_JTAG=y -CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y -CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y -CONFIG_SOC_EFUSE_DIS_ICACHE=y -CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y -CONFIG_SOC_SECURE_BOOT_V2_RSA=y -CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 -CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y -CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y -CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y -CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE=16 -CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE=512 -CONFIG_SOC_UART_NUM=2 -CONFIG_SOC_UART_HP_NUM=2 +CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y +CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y +CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_HP_NUM=3 +CONFIG_SOC_UART_SUPPORT_APB_CLK=y +CONFIG_SOC_UART_SUPPORT_REF_TICK=y CONFIG_SOC_UART_FIFO_LEN=128 CONFIG_SOC_UART_BITRATE_MAX=5000000 -CONFIG_SOC_UART_SUPPORT_APB_CLK=y -CONFIG_SOC_UART_SUPPORT_RTC_CLK=y -CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y -CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y -CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y -CONFIG_SOC_COEX_HW_PTI=y +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y +CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y +CONFIG_SOC_SHA_ENDIANNESS_BE=y +CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_SHA_SUPPORT_SHA384=y +CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 +CONFIG_SOC_MPI_OPERATIONS_NUM=y +CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_AES_128=y +CONFIG_SOC_AES_SUPPORT_AES_192=y +CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_SECURE_BOOT_V1=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 -CONFIG_SOC_MAC_BB_PD_MEM_SIZE=192 -CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 -CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_CPU_PD=y -CONFIG_SOC_PM_SUPPORT_WIFI_PD=y -CONFIG_SOC_PM_SUPPORT_BT_PD=y +CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y -CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y -CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL=y -CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA=y +CONFIG_SOC_PM_SUPPORT_MODEM_PD=y +CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y CONFIG_SOC_PM_MODEM_PD_BY_SW=y +CONFIG_SOC_CLK_APLL_SUPPORTED=y CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL=y -CONFIG_SOC_WIFI_HW_TSF=y -CONFIG_SOC_WIFI_FTM_SUPPORT=y -CONFIG_SOC_WIFI_GCMP_SUPPORT=y +CONFIG_SOC_SDMMC_USE_IOMUX=y +CONFIG_SOC_SDMMC_NUM_SLOTS=2 CONFIG_SOC_WIFI_WAPI_SUPPORT=y CONFIG_SOC_WIFI_CSI_SUPPORT=y CONFIG_SOC_WIFI_MESH_SUPPORT=y CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y -CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y +CONFIG_SOC_WIFI_NAN_SUPPORT=y CONFIG_SOC_BLE_SUPPORTED=y CONFIG_SOC_BLE_MESH_SUPPORTED=y -CONFIG_SOC_BLE_50_SUPPORTED=y -CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y +CONFIG_SOC_BT_CLASSIC_SUPPORTED=y CONFIG_SOC_BLUFI_SUPPORTED=y +CONFIG_SOC_BT_H2C_ENC_KEY_CTRL_ENH_VSC_SUPPORTED=y +CONFIG_SOC_ULP_HAS_ADC=y CONFIG_SOC_PHY_COMBO_MODULE=y +CONFIG_SOC_EMAC_RMII_CLK_OUT_INTERNAL_LOOPBACK=y CONFIG_IDF_CMAKE=y CONFIG_IDF_TOOLCHAIN="gcc" CONFIG_IDF_TOOLCHAIN_GCC=y -CONFIG_IDF_TARGET_ARCH_RISCV=y -CONFIG_IDF_TARGET_ARCH="riscv" -CONFIG_IDF_TARGET="esp32c3" -CONFIG_IDF_INIT_VERSION="5.4.0" -CONFIG_IDF_TARGET_ESP32C3=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0005 +CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET_ARCH="xtensa" +CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_INIT_VERSION="5.4.2" +CONFIG_IDF_TARGET_ESP32=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 # # Build type @@ -301,6 +261,8 @@ CONFIG_APP_BUILD_BOOTLOADER=y CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # CONFIG_APP_REPRODUCIBLE_BUILD is not set # CONFIG_APP_NO_BLOBS is not set +# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # end of Build type # @@ -314,7 +276,7 @@ CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y CONFIG_BOOTLOADER_PROJECT_VER=1 # end of Bootloader manager -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 +CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set @@ -346,6 +308,8 @@ CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y # end of Serial Flash Configurations +# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y # CONFIG_BOOTLOADER_FACTORY_RESET is not set # CONFIG_BOOTLOADER_APP_TEST is not set CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y @@ -363,12 +327,10 @@ CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 # # Security features # -CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y -CONFIG_SECURE_BOOT_V2_PREFERRED=y +CONFIG_SECURE_BOOT_V1_SUPPORTED=y # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set # CONFIG_SECURE_BOOT is not set # CONFIG_SECURE_FLASH_ENC_ENABLED is not set -CONFIG_SECURE_ROM_DL_MODE_ENABLED=y # end of Security features # @@ -385,34 +347,16 @@ CONFIG_ESP_ROM_HAS_CRC_LE=y CONFIG_ESP_ROM_HAS_CRC_BE=y CONFIG_ESP_ROM_HAS_MZ_CRC32=y CONFIG_ESP_ROM_HAS_JPEG_DECODE=y -CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y -CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=3 -CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y -CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y -CONFIG_ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV=y -CONFIG_ESP_ROM_GET_CLK_FREQ=y +CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y -CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y -CONFIG_ESP_ROM_HAS_SPI_FLASH=y -CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y CONFIG_ESP_ROM_HAS_NEWLIB=y CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y -CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y -CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y CONFIG_ESP_ROM_HAS_SW_FLOAT=y CONFIG_ESP_ROM_USB_OTG_NUM=-1 -CONFIG_ESP_ROM_HAS_VERSION=y +CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1 CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y - -# -# Boot ROM Behavior -# -CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y -# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set -# end of Boot ROM Behavior +CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y # # Serial flasher config @@ -424,11 +368,11 @@ CONFIG_ESPTOOLPY_FLASHMODE_DIO=y # CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y CONFIG_ESPTOOLPY_FLASHMODE="dio" -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" +CONFIG_ESPTOOLPY_FLASHFREQ="40m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set @@ -485,7 +429,6 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y # CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set # CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set @@ -502,31 +445,6 @@ CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y # Component config # -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_JTAG is not set -CONFIG_APPTRACE_DEST_NONE=y -# CONFIG_APPTRACE_DEST_UART1 is not set -# CONFIG_APPTRACE_DEST_USB_CDC is not set -CONFIG_APPTRACE_DEST_UART_NONE=y -CONFIG_APPTRACE_UART_TASK_PRIO=1 -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# Bluetooth -# -# CONFIG_BT_ENABLED is not set -CONFIG_BT_ALARM_MAX_NUM=50 -# end of Bluetooth - -# -# Console Library -# -# CONFIG_CONSOLE_SORTED_HELP is not set -# end of Console Library - # # Driver Configurations # @@ -535,50 +453,84 @@ CONFIG_BT_ALARM_MAX_NUM=50 # TWAI Configuration # # CONFIG_TWAI_ISR_IN_IRAM is not set +CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC=y +CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST=y +CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID=y +CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT=y CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # end of TWAI Configuration # # Legacy ADC Driver Configuration # +CONFIG_ADC_DISABLE_DAC=y # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set # # Legacy ADC Calibration Configuration # +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y # CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set # end of Legacy ADC Calibration Configuration # end of Legacy ADC Driver Configuration +# +# Legacy DAC Driver Configurations +# +# CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_DAC_SKIP_LEGACY_CONFLICT_CHECK is not set +# end of Legacy DAC Driver Configurations + +# +# Legacy MCPWM Driver Configurations +# +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set +# end of Legacy MCPWM Driver Configurations + # # Legacy Timer Group Driver Configurations # # CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy Timer Group Driver Configurations # # Legacy RMT Driver Configurations # # CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy RMT Driver Configurations # # Legacy I2S Driver Configurations # # CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy I2S Driver Configurations +# +# Legacy I2C Driver Configurations +# +# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set +# end of Legacy I2C Driver Configurations + +# +# Legacy PCNT Driver Configurations +# +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set +# end of Legacy PCNT Driver Configurations + # # Legacy SDM Driver Configurations # # CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set # end of Legacy SDM Driver Configurations - -# -# Legacy Temperature Sensor Driver Configurations -# -# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy Temperature Sensor Driver Configurations # end of Driver Configurations # @@ -586,49 +538,31 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # # CONFIG_EFUSE_CUSTOM_TABLE is not set # CONFIG_EFUSE_VIRTUAL is not set -CONFIG_EFUSE_MAX_BLK_LEN=256 +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set +CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set +CONFIG_EFUSE_MAX_BLK_LEN=192 # end of eFuse Bit Manager -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y -# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set -# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# ADC and ADC Calibration -# -# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set -# CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3 is not set -# CONFIG_ADC_ONESHOT_FORCE_USE_ADC2_ON_C3 is not set -# CONFIG_ADC_ENABLE_DEBUG_LOG is not set -# end of ADC and ADC Calibration - -# -# Wireless Coexistence -# -CONFIG_ESP_COEX_ENABLED=y -# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_ESP_COEX_GPIO_DEBUG is not set -# end of Wireless Coexistence - # # Common ESP-related # CONFIG_ESP_ERR_TO_NAME_LOOKUP=y # end of Common ESP-related +# +# ESP-Driver:DAC Configurations +# +# CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set +# CONFIG_DAC_ISR_IRAM_SAFE is not set +# CONFIG_DAC_ENABLE_DEBUG_LOG is not set +CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y +# end of ESP-Driver:DAC Configurations + # # ESP-Driver:GPIO Configurations # +# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set # CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set # end of ESP-Driver:GPIO Configurations @@ -638,6 +572,7 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y # CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set # CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +CONFIG_GPTIMER_OBJ_CACHE_SAFE=y # CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set # end of ESP-Driver:GPTimer Configurations @@ -662,6 +597,22 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y # CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set # end of ESP-Driver:LEDC Configurations +# +# ESP-Driver:MCPWM Configurations +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:MCPWM Configurations + +# +# ESP-Driver:PCNT Configurations +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:PCNT Configurations + # # ESP-Driver:RMT Configurations # @@ -686,36 +637,12 @@ CONFIG_SPI_MASTER_ISR_IN_IRAM=y CONFIG_SPI_SLAVE_ISR_IN_IRAM=y # end of ESP-Driver:SPI Configurations -# -# ESP-Driver:Temperature Sensor Configurations -# -# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Temperature Sensor Configurations - # # ESP-Driver:UART Configurations # # CONFIG_UART_ISR_IN_IRAM is not set # end of ESP-Driver:UART Configurations -# -# ESP-Driver:USB Serial/JTAG Configuration -# -CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y -# end of ESP-Driver:USB Serial/JTAG Configuration - -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set -# CONFIG_ETH_USE_OPENETH is not set -# CONFIG_ETH_TRANSMIT_MUTEX is not set -# end of Ethernet - # # Event Loop Library # @@ -724,53 +651,6 @@ CONFIG_ESP_EVENT_POST_FROM_ISR=y CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # end of Event Loop Library -# -# GDB Stub -# -CONFIG_ESP_GDBSTUB_ENABLED=y -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set -CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y -CONFIG_ESP_GDBSTUB_MAX_TASKS=32 -# end of GDB Stub - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set -CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 -CONFIG_HTTPD_MAX_URI_LEN=512 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -# CONFIG_HTTPD_WS_SUPPORT is not set -# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set -CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000 -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set -# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set -CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set -CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS server - # # Hardware Settings # @@ -778,25 +658,26 @@ CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000 # # Chip revision # -# CONFIG_ESP32C3_REV_MIN_0 is not set -# CONFIG_ESP32C3_REV_MIN_1 is not set -# CONFIG_ESP32C3_REV_MIN_2 is not set -CONFIG_ESP32C3_REV_MIN_3=y -# CONFIG_ESP32C3_REV_MIN_4 is not set -# CONFIG_ESP32C3_REV_MIN_101 is not set -CONFIG_ESP32C3_REV_MIN_FULL=3 -CONFIG_ESP_REV_MIN_FULL=3 +CONFIG_ESP32_REV_MIN_0=y +# CONFIG_ESP32_REV_MIN_1 is not set +# CONFIG_ESP32_REV_MIN_1_1 is not set +# CONFIG_ESP32_REV_MIN_2 is not set +# CONFIG_ESP32_REV_MIN_3 is not set +# CONFIG_ESP32_REV_MIN_3_1 is not set +CONFIG_ESP32_REV_MIN=0 +CONFIG_ESP32_REV_MIN_FULL=0 +CONFIG_ESP_REV_MIN_FULL=0 # -# Maximum Supported ESP32-C3 Revision (Rev v1.99) +# Maximum Supported ESP32 Revision (Rev v3.99) # -CONFIG_ESP32C3_REV_MAX_FULL=199 -CONFIG_ESP_REV_MAX_FULL=199 +CONFIG_ESP32_REV_MAX_FULL=399 +CONFIG_ESP_REV_MAX_FULL=399 CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0 -CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=199 +CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99 # -# Maximum Supported ESP32-C3 eFuse Block Revision (eFuse Block Rev v1.99) +# Maximum Supported ESP32 eFuse Block Revision (eFuse Block Rev v0.99) # # end of Chip revision @@ -809,9 +690,10 @@ CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES=4 +# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 +# CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set # CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set # end of MAC Config @@ -821,8 +703,9 @@ CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES=4 # CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y # CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set -CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0 +CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y +# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set +CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 # CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set # CONFIG_ESP_SLEEP_DEBUG is not set CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y @@ -841,89 +724,39 @@ CONFIG_RTC_CLK_CAL_CYCLES=1024 # # Peripheral Control # -CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y +# CONFIG_PERIPH_CTRL_FUNC_IN_IRAM is not set # end of Peripheral Control -# -# GDMA Configurations -# -CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y -# CONFIG_GDMA_ISR_IRAM_SAFE is not set -# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set -# end of GDMA Configurations - # # Main XTAL Config # +# CONFIG_XTAL_FREQ_26 is not set +# CONFIG_XTAL_FREQ_32 is not set CONFIG_XTAL_FREQ_40=y +# CONFIG_XTAL_FREQ_AUTO is not set CONFIG_XTAL_FREQ=40 # end of Main XTAL Config CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y # end of Hardware Settings -# -# ESP-Driver:LCD Controller Configurations -# -# CONFIG_LCD_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:LCD Controller Configurations - # # ESP-MM: Memory Management Configurations # # end of ESP-MM: Memory Management Configurations -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y -CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y -# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set -# CONFIG_ESP_NETIF_L2_TAP is not set -# CONFIG_ESP_NETIF_BRIDGE_EN is not set -# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set -# end of ESP NETIF Adapter - # # Partition API Configuration # # end of Partition API Configuration -# -# PHY -# -CONFIG_ESP_PHY_ENABLED=y -CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP_PHY_MAX_TX_POWER=20 -# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set -CONFIG_ESP_PHY_ENABLE_USB=y -# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set -CONFIG_ESP_PHY_RF_CAL_PARTIAL=y -# CONFIG_ESP_PHY_RF_CAL_NONE is not set -# CONFIG_ESP_PHY_RF_CAL_FULL is not set -CONFIG_ESP_PHY_CALIBRATION_MODE=0 -# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set -# CONFIG_ESP_PHY_RECORD_USED_TIME is not set -# end of PHY - # # Power Management # # CONFIG_PM_ENABLE is not set # CONFIG_PM_SLP_IRAM_OPT is not set -CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y # end of Power Management -# -# ESP PSRAM -# - # # ESP Ringbuf # @@ -940,76 +773,89 @@ CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y # # CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160=y +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240 is not set CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=160 + +# +# Memory +# +# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set + +# +# Non-backward compatible options +# +# CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM is not set +# end of Non-backward compatible options +# end of Memory + +# +# Trace memory +# +# CONFIG_ESP32_TRAX is not set +CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +# end of Trace memory + # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 -CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y -CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y -CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y -# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set # # Memory protection # -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y # end of Memory protection CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y +# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set # CONFIG_ESP_CONSOLE_UART_CUSTOM is not set # CONFIG_ESP_CONSOLE_NONE is not set -# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set -CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y CONFIG_ESP_CONSOLE_UART=y CONFIG_ESP_CONSOLE_UART_NUM=0 CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 +CONFIG_ESP_INT_WDT_CHECK_CPU1=y CONFIG_ESP_TASK_WDT_EN=y -CONFIG_ESP_TASK_WDT_INIT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +# CONFIG_ESP_TASK_WDT_INIT is not set # CONFIG_ESP_PANIC_HANDLER_IRAM is not set # CONFIG_ESP_DEBUG_STUBS_ENABLE is not set CONFIG_ESP_DEBUG_OCDAWARE=y +# CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y # # Brownout Detector # CONFIG_ESP_BROWNOUT_DET=y -CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set -CONFIG_ESP_BROWNOUT_DET_LVL=7 +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=0 # end of Brownout Detector +# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y -CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y -CONFIG_ESP_SYSTEM_HW_PC_RECORD=y # end of ESP System Settings # # IPC (Inter-Processor Call) # CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y # end of IPC (Inter-Processor Call) # @@ -1025,125 +871,9 @@ CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y # CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -CONFIG_ESP_TIMER_IMPL_SYSTIMER=y +CONFIG_ESP_TIMER_IMPL_TG0_LAC=y # end of ESP Timer (High Resolution Timer) -# -# Wi-Fi -# -CONFIG_ESP_WIFI_ENABLED=y -CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32 -CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y -# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 -CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 -# CONFIG_ESP_WIFI_CSI_ENABLED is not set -CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP_WIFI_TX_BA_WIN=6 -CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP_WIFI_RX_BA_WIN=6 -CONFIG_ESP_WIFI_NVS_ENABLED=y -CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP_WIFI_IRAM_OPT=y -# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set -CONFIG_ESP_WIFI_RX_IRAM_OPT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP_WIFI_ENABLE_SAE_PK=y -CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y -# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 -CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 -CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 -# CONFIG_ESP_WIFI_FTM_ENABLE is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y -# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set -CONFIG_ESP_WIFI_GMAC_SUPPORT=y -CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y -# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set -CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 -CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y -CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y -# CONFIG_ESP_WIFI_WAPI_PSK is not set -# CONFIG_ESP_WIFI_SUITE_B_192 is not set -# CONFIG_ESP_WIFI_11KV_SUPPORT is not set -# CONFIG_ESP_WIFI_MBO_SUPPORT is not set -# CONFIG_ESP_WIFI_DPP_SUPPORT is not set -# CONFIG_ESP_WIFI_11R_SUPPORT is not set -# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set - -# -# WPS Configuration Options -# -# CONFIG_ESP_WIFI_WPS_STRICT is not set -# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set -# end of WPS Configuration Options - -# CONFIG_ESP_WIFI_DEBUG_PRINT is not set -# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set -CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y -# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set -# end of Wi-Fi - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -CONFIG_FATFS_VOLUME_COUNT=2 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -# CONFIG_FATFS_SECTOR_512 is not set -CONFIG_FATFS_SECTOR_4096=y -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -# CONFIG_FATFS_USE_FASTSEEK is not set -CONFIG_FATFS_USE_STRFUNC_NONE=y -# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set -# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set -CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 -# CONFIG_FATFS_IMMEDIATE_FSYNC is not set -# CONFIG_FATFS_USE_LABEL is not set -CONFIG_FATFS_LINK_LOCK=y -# end of FAT Filesystem support - # # FreeRTOS # @@ -1152,9 +882,8 @@ CONFIG_FATFS_LINK_LOCK=y # Kernel # # CONFIG_FREERTOS_SMP is not set -CONFIG_FREERTOS_UNICORE=y +# CONFIG_FREERTOS_UNICORE is not set CONFIG_FREERTOS_HZ=100 -CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y @@ -1167,6 +896,7 @@ CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 CONFIG_FREERTOS_USE_TIMERS=y CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" # CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set +# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 @@ -1191,10 +921,11 @@ CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y CONFIG_FREERTOS_ISR_STACKSIZE=1536 CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y -CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y -# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set -CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y +# CONFIG_FREERTOS_FPU_IN_ISR is not set +CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y # CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set # end of Port @@ -1210,7 +941,7 @@ CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y CONFIG_FREERTOS_DEBUG_OCDAWARE=y CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y -CONFIG_FREERTOS_NUMBER_OF_CORES=1 +CONFIG_FREERTOS_NUMBER_OF_CORES=2 # end of FreeRTOS # @@ -1223,7 +954,6 @@ CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y -# CONFIG_HAL_ECDSA_GEN_SIG_CM is not set # end of Hardware Abstraction Layer (HAL) and Low Level (LL) # @@ -1283,189 +1013,6 @@ CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # end of Format # end of Log -# -# LWIP -# -CONFIG_LWIP_ENABLE=y -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" -# CONFIG_LWIP_NETIF_API is not set -CONFIG_LWIP_TCPIP_TASK_PRIO=18 -# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set -# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -# CONFIG_LWIP_IRAM_OPTIMIZATION is not set -# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_ND6=y -# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set -CONFIG_LWIP_MAX_SOCKETS=10 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -# CONFIG_LWIP_SO_RCVBUF is not set -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP_DEFAULT_TTL=64 -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 -# CONFIG_LWIP_IP_FORWARD is not set -# CONFIG_LWIP_STATS is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_ESP_MLDV6_REPORT=y -CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y -# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set -# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set -# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set -CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set -CONFIG_LWIP_DHCP_OPTIONS_LEN=68 -CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 -CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 - -# -# DHCP server -# -CONFIG_LWIP_DHCPS=y -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 -CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y -CONFIG_LWIP_DHCPS_ADD_DNS=y -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV4=y -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 -# CONFIG_LWIP_IPV6_FORWARD is not set -# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=16 -CONFIG_LWIP_MAX_LISTENING_TCP=16 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=12 -CONFIG_LWIP_TCP_MSS=1440 -CONFIG_LWIP_TCP_TMR_INTERVAL=250 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760 -CONFIG_LWIP_TCP_WND_DEFAULT=5760 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 -CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 -# CONFIG_LWIP_TCP_SACK_OUT is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=16 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES=5 -CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3 -CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10 -# CONFIG_LWIP_PPP_SUPPORT is not set -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -CONFIG_LWIP_ICMP=y -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_SNTP_MAX_SERVERS=1 -# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -CONFIG_LWIP_SNTP_STARTUP_DELAY=y -CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 -# end of SNTP - -# -# DNS -# -CONFIG_LWIP_DNS_MAX_HOST_IP=1 -CONFIG_LWIP_DNS_MAX_SERVERS=3 -# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set -# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set -# end of DNS - -CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y -# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set -# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set -# CONFIG_LWIP_HOOK_IP6_INPUT_NONE is not set -CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT=y -# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - # # mbedTLS # @@ -1502,15 +1049,11 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 # end of Certificate Bundle # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -CONFIG_MBEDTLS_CMAC_C=y +# CONFIG_MBEDTLS_CMAC_C is not set CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_AES_USE_INTERRUPT=y -CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=y CONFIG_MBEDTLS_HARDWARE_MPI=y -CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI=y -CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y -CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 +# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set CONFIG_MBEDTLS_HARDWARE_SHA=y CONFIG_MBEDTLS_ROM_MD5=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set @@ -1519,6 +1062,7 @@ CONFIG_MBEDTLS_HAVE_TIME=y # CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y +CONFIG_MBEDTLS_SHA1_C=y CONFIG_MBEDTLS_SHA512_C=y # CONFIG_MBEDTLS_SHA3_C is not set CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y @@ -1599,25 +1143,9 @@ CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_THREADING_C is not set CONFIG_MBEDTLS_ERROR_STRINGS=y -CONFIG_MBEDTLS_FS_IO=y +# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set # end of mbedTLS -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -# CONFIG_MQTT_PROTOCOL_5 is not set -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - # # Newlib # @@ -1634,40 +1162,15 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y # CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set # end of Newlib -# -# NVS -# -# CONFIG_NVS_ENCRYPTION is not set -# CONFIG_NVS_ASSERT_ERROR_CHECK is not set -# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set -# end of NVS - -# -# OpenThread -# -# CONFIG_OPENTHREAD_ENABLED is not set - -# -# OpenThread Spinel -# -# CONFIG_OPENTHREAD_SPINEL_ONLY is not set -# end of OpenThread Spinel -# end of OpenThread - -# -# Protocomm -# -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y -# end of Protocomm - # # PThreads # CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y +# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set +# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" # end of PThreads @@ -1698,9 +1201,9 @@ CONFIG_SPI_FLASH_BROWNOUT_RESET=y # # Features here require specific hardware (READ DOCS FIRST!) # -# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 # CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set +# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set # end of Optional and Experimental Features (READ DOCS FIRST) # end of Main Flash configuration @@ -1710,10 +1213,10 @@ CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 # CONFIG_SPI_FLASH_VERIFY_WRITE is not set # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -# CONFIG_SPI_FLASH_ROM_IMPL is not set CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y # CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set # CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set +# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set # CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 @@ -1731,68 +1234,17 @@ CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y +# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set +# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set # end of Auto-detect flash chips CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y # end of SPI Flash driver -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# - -# -# Websocket -# -CONFIG_WS_TRANSPORT=y -CONFIG_WS_BUFFER_SIZE=1024 -# CONFIG_WS_DYNAMIC_BUFFER is not set -# end of Websocket -# end of TCP Transport - # # Unity unit testing library # @@ -1805,47 +1257,10 @@ CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y # CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set # end of Unity unit testing library -# -# Virtual file system -# -CONFIG_VFS_SUPPORT_IO=y -CONFIG_VFS_SUPPORT_DIR=y -CONFIG_VFS_SUPPORT_SELECT=y -CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y -# CONFIG_VFS_SELECT_IN_RAM is not set -CONFIG_VFS_SUPPORT_TERMIOS=y -CONFIG_VFS_MAX_COUNT=8 - -# -# Host File System I/O (Semihosting) -# -CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# end of Host File System I/O (Semihosting) - -CONFIG_VFS_INITIALIZE_DEV_NULL=y -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y -# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set -# end of Wi-Fi Provisioning Manager - # # Relay Channel Driver Configuration # -CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS=800 +CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS=200 CONFIG_RELAY_CHN_COUNT=2 CONFIG_RELAY_CHN_ENABLE_TILTING=y # end of Relay Channel Driver Configuration @@ -1856,6 +1271,9 @@ CONFIG_RELAY_CHN_ENABLE_TILTING=y # Deprecated options for backward compatibility # CONFIG_APP_BUILD_TYPE_ELF_RAM is not set # CONFIG_NO_BLOBS is not set +# CONFIG_ESP32_NO_BLOBS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set @@ -1885,36 +1303,38 @@ CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y -# CONFIG_EXTERNAL_COEX_ENABLE is not set -# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set +CONFIG_ADC2_DISABLE_DAC=y +# CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y -CONFIG_GDBSTUB_SUPPORT_TASKS=y -CONFIG_GDBSTUB_MAX_TASKS=32 -# CONFIG_OTA_ALLOW_HTTP is not set +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 # CONFIG_ESP_SYSTEM_PD_FLASH is not set -CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP32C3_RTC_CLK_SRC_INT_RC=y -# CONFIG_ESP32C3_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32C3_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32C3_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_ESP32C3_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# CONFIG_REDUCE_PHY_TX_POWER is not set -# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set -CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y -# CONFIG_ESP32C3_DEFAULT_CPU_FREQ_80 is not set -CONFIG_ESP32C3_DEFAULT_CPU_FREQ_160=y -CONFIG_ESP32C3_DEFAULT_CPU_FREQ_MHZ=160 -CONFIG_ESP32C3_MEMPROT_FEATURE=y -CONFIG_ESP32C3_MEMPROT_FEATURE_LOCK=y +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set +# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +# CONFIG_ESP32_XTAL_FREQ_26 is not set +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_MAIN_TASK_STACK_SIZE=3584 @@ -1927,107 +1347,54 @@ CONFIG_CONSOLE_UART_NUM=0 CONFIG_CONSOLE_UART_BAUDRATE=115200 CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_TASK_WDT=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_INT_WDT_CHECK_CPU1=y +# CONFIG_TASK_WDT is not set +# CONFIG_ESP_TASK_WDT is not set # CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP32C3_DEBUG_OCDAWARE=y +CONFIG_ESP32_DEBUG_OCDAWARE=y CONFIG_BROWNOUT_DET=y -CONFIG_ESP32C3_BROWNOUT_DET=y -CONFIG_ESP32C3_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_7=y -CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_3 is not set +CONFIG_ESP32_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_2 is not set -CONFIG_BROWNOUT_DET_LVL=7 -CONFIG_ESP32C3_BROWNOUT_DET_LVL=7 +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_ESP32_BROWNOUT_DET_LVL=0 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set CONFIG_IPC_TASK_STACK_SIZE=1024 CONFIG_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP32_WIFI_ENABLED=y -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=6 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y -CONFIG_WPA_MBEDTLS_CRYPTO=y -CONFIG_WPA_MBEDTLS_TLS_CLIENT=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_SUITE_B_192 is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# CONFIG_WPA_MBO_SUPPORT is not set -# CONFIG_WPA_DPP_SUPPORT is not set -# CONFIG_WPA_11R_SUPPORT is not set -# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set -# CONFIG_WPA_WPS_STRICT is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y CONFIG_TIMER_TASK_PRIORITY=1 CONFIG_TIMER_TASK_STACK_DEPTH=2048 CONFIG_TIMER_QUEUE_LENGTH=10 # CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set # CONFIG_HAL_ASSERTION_SILIENT is not set -# CONFIG_L2_TO_L3_COPY is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=32 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=12 -CONFIG_TCP_MSS=1440 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5760 -CONFIG_TCP_WND_DEFAULT=5760 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC_SYSTIMER=y -# CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32C3_TIME_SYSCALL_USE_SYSTIMER is not set -# CONFIG_ESP32C3_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_ESP32_PTHREAD_STACK_MIN=768 +CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_SUPPORT_TERMIOS=y -CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 # End of deprecated options -- 2.39.5 From f31eae649f30638bd2b958c4af21987f71fe91b0 Mon Sep 17 00:00:00 2001 From: ismail Date: Mon, 21 Jul 2025 15:38:20 +0300 Subject: [PATCH 14/18] Add a shell utility for running tests. --- scripts/run_tests.sh | 156 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100755 scripts/run_tests.sh diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh new file mode 100755 index 0000000..cc39ffb --- /dev/null +++ b/scripts/run_tests.sh @@ -0,0 +1,156 @@ +#!/usr/bin/env bash + +set -e + +# ==== 1. Check ESP-IDF environment ==== +if [[ -z "$IDF_PATH" ]]; then + echo "โŒ ESP-IDF environment not found. Please source the export.sh file first:" + echo "'. $HOME/esp/esp-idf/export.sh' or wherever the ESP-IDF is installed" + exit 1 +fi + +# ==== 2. Valid Modes and Defaults ==== +valid_test_tags=("core" "tilt" "listener" "all" "relay_chn") +arg_tag="all" # Default to 'all' if no tag specified +arg_clean=false +arg_log=false +arg_dry_run=false +arg_sdkconfig_file="" +flag_file=false + +print_help() { + echo "Usage: $0 -t [OPTIONS]" + echo "" + echo "This script builds and runs tests for the relay_chn component using QEMU." + echo "" + echo "Arguments:" + echo " -t, --tag [relay_chn|core|tilt|listener|all] Specify which test tag to run." + echo "" + echo " If no tag is specified, it defaults to 'all'." + echo "" + echo "Options:" + echo " -f, --file Specify a custom sdkconfig file to use for the build." + echo " Defaults to 'sdkconfig.defaults' if not provided." + echo " -c, --clean Perform a 'fullclean' before building the tests." + echo " -l, --log Log the test output to a timestamped file." + echo " -n, --dry-run Build the project without running qemu." + echo " -h, --help Show this help message and exit." +} + +help() { + print_help + exit 0 +} + +usage() { + print_help + exit 1 +} + +# ==== 3. Argument Parsing ==== +while [[ $# -gt 0 ]]; do + case $1 in + --tag|-t) + arg_tag="$2" + shift 2 + ;; + --file|-f) + arg_sdkconfig_file="$2" + flag_file=true + shift 2 + ;; + --clean|-c) + arg_clean=true + shift + ;; + --log|-l) + arg_log=true + shift + ;; + --dry-run|-n) + arg_dry_run=true + shift + ;; + --help|-h) + help + ;; + *) + usage + ;; + esac +done + +# ==== 4. Validity Check ==== +if [[ ! " ${valid_test_tags[*]} " =~ " $arg_tag " ]]; then + echo "โŒ Invalid mode: '$arg_tag'" + usage +fi + +# ==== 5. Resolve Paths and Switch to Working Directory ==== +script_dir=$(dirname "$(readlink -f "$0")") +project_root=$(dirname "$script_dir") + +echo "๐Ÿ” Searching for 'test_apps' directory in '$project_root'..." +test_apps_dir=$(find "$project_root" -type d -name "test_apps" | head -n 1) + +if [[ -z "$test_apps_dir" || ! -d "$test_apps_dir" ]]; then + echo "โŒ 'test_apps' directory not found within the project root: '$project_root'" + echo " Please ensure the script is in a 'scripts' directory and 'test_apps' is a sibling." + exit 1 +fi +echo "โœ… Found 'test_apps' at: $test_apps_dir" + +if $flag_file; then + if [[ -z "$arg_sdkconfig_file" || ! -f "$arg_sdkconfig_file" ]]; then + echo "โŒ Invalid or missing file: '$arg_sdkconfig_file'" + usage + fi + # Resolve to an absolute path to work correctly after changing directory + arg_sdkconfig_file=$(readlink -f "$arg_sdkconfig_file") +else + echo "โš ๏ธ No SDK configuration file provided. Using default sdkconfig." + arg_sdkconfig_file="$test_apps_dir/sdkconfig.defaults" +fi + +echo "๐Ÿงช Test mode: $arg_tag" +echo "๐Ÿงน Clean: $arg_clean | ๐Ÿ“„ Log: $arg_log" + +echo "๐Ÿ“‚ Changing to working directory: $test_apps_dir" +cd "$test_apps_dir" || exit 1 + +# ==== 6. Clean if requested ==== +if $arg_clean; then + echo "๐Ÿงน Doing Fullclean..." + idf.py fullclean + rm sdkconfig +fi + +# ==== 7. Building and Running Tests ==== +# In some locales, we can get errors like: "Error: unknown opcode or format name 'wsr.IBREAKA1'" +# The 'LC_ALL=C' env variable is set to ensure consistent locale settings. +LC_ALL=C \ +SDKCONFIG_DEFAULTS="$arg_sdkconfig_file" \ +RELAY_CHN_UNITY_TEST_GROUP_TAG="$arg_tag" \ +idf.py reconfigure build + +echo "๐Ÿš€ Running test with QEMU..." + +if $arg_log; then + TIMESTAMP=$(date +"%Y%m%d_%H%M%S") + LOGFILE="test_log_${arg_tag}_$TIMESTAMP.txt" + if $arg_dry_run; then + echo "๐Ÿ” Dry run mode: Logging to $LOGFILE but not executing." | tee "$LOGFILE" + echo "Command: idf.py qemu" | tee "$LOGFILE" + else + echo "๐Ÿ“œ Logging test output to: $LOGFILE" + idf.py qemu --qemu-extra-args "-no-reboot" | tee "$LOGFILE" + fi +else + if $arg_dry_run; then + echo "๐Ÿ” Dry run mode: Not executing idf.py qemu." + echo "Command: idf.py qemu" + else + echo "๐Ÿš€ Running idf.py qemu..." + idf.py qemu --qemu-extra-args "-no-reboot" + fi +fi -- 2.39.5 From 8527ebea83151d6fbc61f1dce3818f386b0903ad Mon Sep 17 00:00:00 2001 From: ismail Date: Tue, 22 Jul 2025 09:58:59 +0300 Subject: [PATCH 15/18] Fix imbalanced tilt counts. Fixed the tilt count logic that causes an imbalance in tilting within the same run frame but opposite direction. Fixes #1057. --- src/relay_chn.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/relay_chn.c b/src/relay_chn.c index 6fdc016..069fe96 100644 --- a/src/relay_chn.c +++ b/src/relay_chn.c @@ -1268,8 +1268,11 @@ static uint32_t relay_chn_tilt_count_update(relay_chn_t *relay_chn) return ++relay_chn->tilt_control.tilt_counter.tilt_forward_count; } else if (relay_chn->tilt_control.cmd == RELAY_CHN_TILT_CMD_REVERSE) { - if (relay_chn->tilt_control.tilt_counter.tilt_forward_count > 0) - return --relay_chn->tilt_control.tilt_counter.tilt_forward_count; + if (relay_chn->tilt_control.tilt_counter.tilt_forward_count > 0) { + --relay_chn->tilt_control.tilt_counter.tilt_forward_count; + // Still should do one more move, return non-zero value + return 1; + } else return 0; } @@ -1283,8 +1286,11 @@ static uint32_t relay_chn_tilt_count_update(relay_chn_t *relay_chn) return ++relay_chn->tilt_control.tilt_counter.tilt_reverse_count; } else if (relay_chn->tilt_control.cmd == RELAY_CHN_TILT_CMD_FORWARD) { - if (relay_chn->tilt_control.tilt_counter.tilt_reverse_count > 0) - return --relay_chn->tilt_control.tilt_counter.tilt_reverse_count; + if (relay_chn->tilt_control.tilt_counter.tilt_reverse_count > 0) { + --relay_chn->tilt_control.tilt_counter.tilt_reverse_count; + // Still should do one more move, return non-zero value + return 1; + } else return 0; } -- 2.39.5 From c7678d60849080f126e64cfaf0f9c72bbdb270d8 Mon Sep 17 00:00:00 2001 From: ismail Date: Tue, 22 Jul 2025 10:00:33 +0300 Subject: [PATCH 16/18] Add restart chip to make qemu exit in tests. --- test_apps/main/test_app_main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test_apps/main/test_app_main.c b/test_apps/main/test_app_main.c index c60c8d2..c72d68f 100644 --- a/test_apps/main/test_app_main.c +++ b/test_apps/main/test_app_main.c @@ -44,4 +44,6 @@ void app_main(void) UNITY_END(); ESP_LOGI(TEST_TAG, "All tests complete."); + + esp_restart(); // Restart to invoke qemu exit } -- 2.39.5 From d884f5f45c5d77ab7d313bb204b4010dbc8b9ca5 Mon Sep 17 00:00:00 2001 From: ismail Date: Tue, 22 Jul 2025 10:02:40 +0300 Subject: [PATCH 17/18] Add missing test cases for tilt API. Added missing test cases for the tilt API. Closes #1056. --- test_apps/main/test_relay_chn_tilt.c | 104 +++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/test_apps/main/test_relay_chn_tilt.c b/test_apps/main/test_relay_chn_tilt.c index 177d8a1..47b7f32 100644 --- a/test_apps/main/test_relay_chn_tilt.c +++ b/test_apps/main/test_relay_chn_tilt.c @@ -282,4 +282,108 @@ TEST_CASE("tilt_auto with ID_ALL tilts channels based on last run direction", "[ // 3. Verify channel 0 tilts forward (last run was forward) and channel 1 tilts reverse (last run was reverse) TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(0)); TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(1)); +} + +// Test relay_chn_tilt_auto() chooses correct tilt direction +TEST_CASE("relay_chn_tilt_auto chooses correct direction", "[relay_chn][tilt][auto]") { + uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + // Prepare FORWARD + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); + relay_chn_tilt_auto(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); + relay_chn_tilt_stop(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + + // Prepare REVERSE + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_REVERSE); + relay_chn_tilt_auto(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); +} + +// Test sensitivity set/get +TEST_CASE("relay_chn_tilt_sensitivity_set and get", "[relay_chn][tilt][sensitivity]") { + uint8_t ch = 0; + uint8_t val = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + relay_chn_tilt_sensitivity_set(ch, 0); + TEST_ESP_OK(relay_chn_tilt_sensitivity_get(ch, &val, 1)); + TEST_ASSERT_EQUAL_UINT8(0, val); + + relay_chn_tilt_sensitivity_set(ch, 50); + TEST_ESP_OK(relay_chn_tilt_sensitivity_get(ch, &val, 1)); + TEST_ASSERT_EQUAL_UINT8(50, val); + + relay_chn_tilt_sensitivity_set(ch, 100); + TEST_ESP_OK(relay_chn_tilt_sensitivity_get(ch, &val, 1)); + TEST_ASSERT_EQUAL_UINT8(100, val); + + // Set all channels + relay_chn_tilt_sensitivity_set(RELAY_CHN_ID_ALL, 42); + uint8_t vals[CONFIG_RELAY_CHN_COUNT] = {0}; + TEST_ESP_OK(relay_chn_tilt_sensitivity_get(RELAY_CHN_ID_ALL, vals, relay_chn_count)); + for (int i = 0; i < relay_chn_count; ++i) { + TEST_ASSERT_EQUAL_UINT8(42, vals[i]); + } +} + +// Test tilt counter logic: forward x3, reverse x3, extra reverse fails +TEST_CASE("tilt counter logic: forward and reverse consumption", "[relay_chn][tilt][counter]") { + uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); + + // Tilt forward 3 times + for (int i = 0; i < 3; ++i) { + relay_chn_tilt_forward(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); + relay_chn_tilt_stop(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + } + + // Now tilt reverse 3 times (should succeed) + for (int i = 0; i < 3; ++i) { + relay_chn_tilt_reverse(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + if (i < 3) { + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_REVERSE, relay_chn_get_state(ch)); + relay_chn_tilt_stop(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + } + } + + // Extra reverse tilt should fail (counter exhausted) + relay_chn_tilt_reverse(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + // Should not enter TILT_REVERSE, should remain FREE or STOPPED + relay_chn_state_t state = relay_chn_get_state(ch); + TEST_ASSERT(state != RELAY_CHN_STATE_TILT_REVERSE); +} + +// Test run command during TILT state +TEST_CASE("run command during TILT state transitions correctly", "[relay_chn][tilt][run-during-tilt]") { + uint8_t ch = 0; + TEST_ESP_OK(relay_chn_create(gpio_map, gpio_count)); + g_is_component_initialized = true; + + prepare_channel_for_tilt(ch, RELAY_CHN_CMD_FORWARD); + relay_chn_tilt_forward(ch); + vTaskDelay(pdMS_TO_TICKS(opposite_inertia_ms + test_delay_margin_ms)); + TEST_ASSERT_EQUAL(RELAY_CHN_STATE_TILT_FORWARD, relay_chn_get_state(ch)); + + // Issue run reverse while in TILT_FORWARD + relay_chn_run_reverse(ch); + vTaskDelay(pdMS_TO_TICKS(test_delay_margin_ms)); + // Should transition to REVERSE or REVERSE_PENDING depending on inertia logic + relay_chn_state_t state = relay_chn_get_state(ch); + TEST_ASSERT(state == RELAY_CHN_STATE_REVERSE || state == RELAY_CHN_STATE_REVERSE_PENDING); } \ No newline at end of file -- 2.39.5 From 2e81966afb778316a9277bb01a8c0a8eb87099d3 Mon Sep 17 00:00:00 2001 From: ismail Date: Wed, 23 Jul 2025 17:37:27 +0300 Subject: [PATCH 18/18] Bump version to 0.5.0 and update repo URLs. --- README.md | 2 +- idf_component.yml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2694e95..aba6d7b 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ dependencies: # Add as a custom component from git repository relay_chn: git: https://git.kozmotronik.com.tr/KozmotronikTech/relay_chn.git - version: '>=0.4.0' + version: '>=0.5.0' ``` ## Usage diff --git a/idf_component.yml b/idf_component.yml index 1b0dbad..bad0713 100644 --- a/idf_component.yml +++ b/idf_component.yml @@ -1,6 +1,6 @@ name: relay_chn -version: "0.4.0" +version: "0.5.0" description: "Custom component for relay channel control" license: "MIT" -url: "https://git.kozmotronik.com.tr/KozmotronikTech/relay_chn_component" -repository: "https://git.kozmotronik.com.tr/KozmotronikTech/relay_chn_component.git" \ No newline at end of file +url: "https://git.kozmotronik.com.tr/KozmotronikTech/relay_chn" +repository: "https://git.kozmotronik.com.tr/KozmotronikTech/relay_chn.git" \ No newline at end of file -- 2.39.5