diff --git a/.github/ci/idf-setup.sh b/.github/ci/idf-setup.sh
index afdf7119..3cc0586f 100644
--- a/.github/ci/idf-setup.sh
+++ b/.github/ci/idf-setup.sh
@@ -1,7 +1,7 @@
#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
-git clone -b v5.1.2 --recursive --shallow-submodules https://github.com/espressif/esp-idf.git
+git clone -b v5.1.5 --recursive --shallow-submodules https://github.com/espressif/esp-idf.git
cd ./esp-idf
./install.sh
source ./export.sh
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d49ef25d..9f86f2ba 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -65,7 +65,7 @@ OPTION(TFT_UI_SERVICE "TFT UI service" ON)
OPTION(SD_CARD_SERVICE "SD card service" ON)
OPTION(NOTIFICATIONS_SERVICE "Notifications service" ON)
OPTION(UPDATE_SERVICE "Update service" ON)
-OPTION(USB_SERIAL_SERVICE "Use USB Serial if Available" OFF)
+OPTION(USB_SERIAL_SERVICE "Use USB Serial if Available" ON)
OPTION(USE_FAT_INSTEAD_OF_LITTLEFS "Use FAT instead of LittleFS" OFF)
# ===========================================
diff --git a/README.md b/README.md
index 7aa156af..3cf2f270 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
[
](https://liberapay.com/ESP3D)
-[![Development Version](https://img.shields.io/badge/Dev-v1.0-yellow?style=plastic) ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/luc-github/ESP3D-TFT/main?style=plastic)](https://github.com/luc-github/ESP3D-TFT/tree/main) [![github-ci](https://github.com/luc-github/ESP3D-TFT/workflows/build-ci/badge.svg)](https://github.com/luc-github/ESP3D-TFT/actions/workflows/build-ci.yml) [![Development Version](https://img.shields.io/badge/Dev-v3.0-yellow?style=plastic&label=WebUI&logo=Preact)](https://github.com/luc-github/ESP3D-WEBUI/tree/3.0) [![IDF 5.1.2](https://img.shields.io/badge/IDF-v5.1.2-blue?style=plastic&label=IDF&logo=espressif)](https://github.com/espressif/esp-idf)
+[![Development Version](https://img.shields.io/badge/Dev-v1.0-yellow?style=plastic) ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/luc-github/ESP3D-TFT/main?style=plastic)](https://github.com/luc-github/ESP3D-TFT/tree/main) [![github-ci](https://github.com/luc-github/ESP3D-TFT/workflows/build-ci/badge.svg)](https://github.com/luc-github/ESP3D-TFT/actions/workflows/build-ci.yml) [![Development Version](https://img.shields.io/badge/Dev-v3.0-yellow?style=plastic&label=WebUI&logo=Preact)](https://github.com/luc-github/ESP3D-WEBUI/tree/3.0) [![IDF 5.1.5](https://img.shields.io/badge/IDF-v5.1.5-blue?style=plastic&label=IDF&logo=espressif)](https://github.com/espressif/esp-idf)
![ESP3D-TFT](https://img.shields.io/badge/dynamic/json?label=ESP3D-TFT&query=$.version&url=https://raw.githubusercontent.com/luc-github/ESP3D-TFT/refs/heads/main/info.json)
> [!WARNING]
@@ -31,7 +31,7 @@ lvgl library 8.3.8
## Framework
-Espressif IDF 5.1.2
+Espressif IDF 5.1.5
## Reference boards
diff --git a/components/SSDP_IDF b/components/SSDP_IDF
index 35c13efa..b33c81bd 160000
--- a/components/SSDP_IDF
+++ b/components/SSDP_IDF
@@ -1 +1 @@
-Subproject commit 35c13efa555dbdd8f3283c10960586fa887141cc
+Subproject commit b33c81bd82ace874a0154f092326a128dddd268b
diff --git a/components/esp_littlefs b/components/esp_littlefs
index 8fb0290e..28639dd4 160000
--- a/components/esp_littlefs
+++ b/components/esp_littlefs
@@ -1 +1 @@
-Subproject commit 8fb0290e329ce84064e793755a88f48fd3ee4857
+Subproject commit 28639dd469af0b33df55d481da8383347e88067e
diff --git a/hardware/ESP32S3_HMI43V3/sdkconfig b/hardware/ESP32S3_HMI43V3/sdkconfig
index 6b9a2ed8..826be04f 100644
--- a/hardware/ESP32S3_HMI43V3/sdkconfig
+++ b/hardware/ESP32S3_HMI43V3/sdkconfig
@@ -1,6 +1,6 @@
#
# Automatically generated file. DO NOT EDIT.
-# Espressif IoT Development Framework (ESP-IDF) 5.1.2 Project Configuration
+# Espressif IoT Development Framework (ESP-IDF) 5.1.5 Project Configuration
#
CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000
CONFIG_SOC_MPU_REGIONS_MAX_NUM=8
@@ -83,7 +83,7 @@ CONFIG_SOC_CPU_INTR_NUM=32
CONFIG_SOC_CPU_HAS_FPU=y
CONFIG_SOC_CPU_BREAKPOINTS_NUM=2
CONFIG_SOC_CPU_WATCHPOINTS_NUM=2
-CONFIG_SOC_CPU_WATCHPOINT_SIZE=64
+CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64
CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096
CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16
CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100
@@ -227,7 +227,7 @@ CONFIG_SOC_UART_SUPPORT_APB_CLK=y
CONFIG_SOC_UART_SUPPORT_RTC_CLK=y
CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
CONFIG_SOC_UART_REQUIRE_CORE_RESET=y
-CONFIG_SOC_USB_PERIPH_NUM=y
+CONFIG_SOC_USB_OTG_PERIPH_NUM=1
CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968
CONFIG_SOC_SHA_SUPPORT_DMA=y
CONFIG_SOC_SHA_SUPPORT_RESUME=y
@@ -309,6 +309,7 @@ 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_BLE_SUPPORTED=y
CONFIG_SOC_BLE_MESH_SUPPORTED=y
CONFIG_SOC_BLE_50_SUPPORTED=y
@@ -350,6 +351,14 @@ CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
CONFIG_BOOTLOADER_LOG_LEVEL=0
+
+#
+# Serial Flash Configurations
+#
+# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set
+CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
+# end of Serial Flash Configurations
+
CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y
# CONFIG_BOOTLOADER_FACTORY_RESET is not set
# CONFIG_BOOTLOADER_APP_TEST is not set
@@ -363,7 +372,6 @@ CONFIG_BOOTLOADER_WDT_TIME_MS=9000
# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set
-CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
# end of Bootloader config
#
@@ -393,8 +401,10 @@ 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_HAS_RETARGETABLE_LOCKING=y
+CONFIG_ESP_ROM_USB_OTG_NUM=3
CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=4
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_HAL_WDT=y
CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y
@@ -514,6 +524,7 @@ CONFIG_APPTRACE_LOCK_ENABLE=y
# Bluetooth
#
# CONFIG_BT_ENABLED is not set
+CONFIG_BT_ALARM_MAX_NUM=50
# end of Bluetooth
#
@@ -598,6 +609,7 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
# RMT Configuration
#
# CONFIG_RMT_ISR_IRAM_SAFE is not set
+# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set
# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_RMT_ENABLE_DEBUG_LOG is not set
# end of RMT Configuration
@@ -749,6 +761,7 @@ CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y
# CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set
CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y
CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set
# end of MAC Config
#
@@ -759,8 +772,10 @@ CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND=y
CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y
CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y
CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y
-CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000
+CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000
+# CONFIG_ESP_SLEEP_DEBUG is not set
CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y
+# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set
# end of Sleep Config
#
@@ -843,6 +858,7 @@ 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
# end of PHY
#
@@ -885,6 +901,7 @@ CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=2048
CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y
+# CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY is not set
# end of SPI RAM config
# end of ESP PSRAM
@@ -1005,6 +1022,7 @@ CONFIG_ESP_BROWNOUT_DET_LVL=7
# end of Brownout Detector
CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y
+CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y
# end of ESP System Settings
#
@@ -1065,6 +1083,9 @@ 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
@@ -1092,6 +1113,7 @@ CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y
# 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
#
@@ -1208,6 +1230,7 @@ CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2
CONFIG_HAL_WDT_USE_ROM_IMPL=y
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)
#
@@ -1224,9 +1247,6 @@ CONFIG_HEAP_TRACING_OFF=y
# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set
# end of Heap memory debugging
-CONFIG_IEEE802154_CCA_THRESHOLD=-60
-CONFIG_IEEE802154_PENDING_TABLE_SIZE=20
-
#
# Log output
#
@@ -1263,6 +1283,7 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# 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=16
# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
# CONFIG_LWIP_SO_LINGER is not set
@@ -1270,6 +1291,7 @@ 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
@@ -1324,6 +1346,8 @@ CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
CONFIG_LWIP_TCP_WND_DEFAULT=5744
CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6
+CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=0
# CONFIG_LWIP_TCP_SACK_OUT is not set
CONFIG_LWIP_TCP_OVERSIZE_MSS=y
# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
@@ -1352,6 +1376,9 @@ CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set
# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set
CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+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_IPV6_MEMP_NUM_ND6_QUEUE=3
CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
@@ -1379,6 +1406,13 @@ CONFIG_LWIP_SNTP_MAX_SERVERS=3
CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000
# end of SNTP
+#
+# DNS
+#
+CONFIG_LWIP_DNS_MAX_SERVERS=3
+# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
+# end of DNS
+
CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
CONFIG_LWIP_ESP_LWIP_ASSERT=y
@@ -1447,7 +1481,9 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200
CONFIG_MBEDTLS_CMAC_C=y
CONFIG_MBEDTLS_HARDWARE_AES=y
CONFIG_MBEDTLS_AES_USE_INTERRUPT=y
+# CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER is not set
CONFIG_MBEDTLS_HARDWARE_MPI=y
+# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set
CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y
CONFIG_MBEDTLS_HARDWARE_SHA=y
CONFIG_MBEDTLS_ROM_MD5=y
@@ -1533,7 +1569,7 @@ CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y
# CONFIG_MBEDTLS_CHACHA20_C is not set
# CONFIG_MBEDTLS_HKDF_C is not set
# CONFIG_MBEDTLS_THREADING_C is not set
-# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set
+CONFIG_MBEDTLS_ERROR_STRINGS=y
# end of mbedTLS
#
@@ -1591,6 +1627,13 @@ CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53"
# end of Thread Operational Dataset
CONFIG_OPENTHREAD_XTAL_ACCURACY=130
+# CONFIG_OPENTHREAD_SPINEL_ONLY is not set
+CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE=y
+
+#
+# Thread Address Query Config
+#
+# end of Thread Address Query Config
# end of OpenThread
#
@@ -1622,6 +1665,33 @@ CONFIG_MMU_PAGE_MODE="64KB"
CONFIG_MMU_PAGE_SIZE=0x10000
# end of MMU Config
+#
+# Main Flash configuration
+#
+
+#
+# SPI Flash behavior when brownout
+#
+CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y
+CONFIG_SPI_FLASH_BROWNOUT_RESET=y
+# end of SPI Flash behavior when brownout
+
+#
+# Optional and Experimental Features (READ DOCS FIRST)
+#
+
+#
+# Features here require specific hardware (READ DOCS FIRST!)
+#
+# CONFIG_SPI_FLASH_HPM_ENA is not set
+CONFIG_SPI_FLASH_HPM_AUTO=y
+# CONFIG_SPI_FLASH_HPM_DIS is not set
+CONFIG_SPI_FLASH_HPM_ON=y
+CONFIG_SPI_FLASH_HPM_DC_AUTO=y
+# CONFIG_SPI_FLASH_HPM_DC_DISABLE is not set
+# end of Optional and Experimental Features (READ DOCS FIRST)
+# end of Main Flash configuration
+
#
# SPI Flash driver
#
@@ -1641,13 +1711,6 @@ CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set
# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set
-#
-# SPI Flash behavior when brownout
-#
-CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y
-CONFIG_SPI_FLASH_BROWNOUT_RESET=y
-# end of SPI Flash behavior when brownout
-
#
# Auto-detect flash chips
#
@@ -1740,7 +1803,6 @@ CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y
#
# USB-OTG
#
-CONFIG_USB_OTG_SUPPORTED=y
CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=256
CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y
# CONFIG_USB_HOST_HW_BUFFER_BIAS_IN is not set
@@ -1754,6 +1816,9 @@ CONFIG_USB_HOST_RESET_HOLD_MS=30
CONFIG_USB_HOST_RESET_RECOVERY_MS=30
CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=10
# end of Root Hub configuration
+
+CONFIG_USB_OTG_SUPPORTED=y
+# CONFIG_USB_HOST_ENABLE_ENUM_FILTER_CALLBACK is not set
# end of USB-OTG
#
@@ -1763,6 +1828,7 @@ 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=y
CONFIG_VFS_SUPPORT_TERMIOS=y
CONFIG_VFS_MAX_COUNT=8
@@ -1794,6 +1860,7 @@ CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y
#
# LittleFS
#
+# CONFIG_LITTLEFS_SDMMC_SUPPORT is not set
CONFIG_LITTLEFS_MAX_PARTITIONS=2
CONFIG_LITTLEFS_PAGE_SIZE=256
CONFIG_LITTLEFS_OBJ_NAME_LEN=255
@@ -1810,6 +1877,11 @@ CONFIG_LITTLEFS_MTIME_USE_SECONDS=y
# CONFIG_LITTLEFS_SPIFFS_COMPAT is not set
# CONFIG_LITTLEFS_FLUSH_FILE_EVERY_WRITE is not set
# CONFIG_LITTLEFS_FCNTL_GET_PATH is not set
+# CONFIG_LITTLEFS_MULTIVERSION is not set
+# CONFIG_LITTLEFS_MALLOC_STRATEGY_DISABLE is not set
+CONFIG_LITTLEFS_MALLOC_STRATEGY_DEFAULT=y
+# CONFIG_LITTLEFS_MALLOC_STRATEGY_INTERNAL is not set
+CONFIG_LITTLEFS_ASSERTS=y
# end of LittleFS
#
@@ -1854,6 +1926,7 @@ CONFIG_BF20A6_SUPPORT=y
# CONFIG_SC101IOT_SUPPORT is not set
CONFIG_SC030IOT_SUPPORT=y
# CONFIG_SC031GS_SUPPORT is not set
+CONFIG_MEGA_CCM_SUPPORT=y
# CONFIG_SCCB_HARDWARE_I2C_PORT0 is not set
CONFIG_SCCB_HARDWARE_I2C_PORT1=y
CONFIG_SCCB_CLK_FREQ=100000
@@ -1864,6 +1937,8 @@ CONFIG_CAMERA_CORE0=y
# CONFIG_CAMERA_CORE1 is not set
# CONFIG_CAMERA_NO_AFFINITY is not set
CONFIG_CAMERA_DMA_BUFFER_SIZE_MAX=32768
+CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_AUTO=y
+# CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_CUSTOM is not set
# CONFIG_CAMERA_CONVERTER_ENABLED is not set
# CONFIG_LCD_CAM_ISR_IRAM_SAFE is not set
# end of Camera configuration
@@ -1914,6 +1989,7 @@ CONFIG_POST_EVENTS_FROM_ISR=y
CONFIG_POST_EVENTS_FROM_IRAM_ISR=y
# CONFIG_OTA_ALLOW_HTTP is not set
CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000
+CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000
CONFIG_ESP32S3_RTC_CLK_SRC_INT_RC=y
# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_CRYS is not set
# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_OSC is not set
diff --git a/hardware/drivers_usb_otg/usb_serial/usb_serial.cpp b/hardware/drivers_usb_otg/usb_serial/usb_serial.cpp
index 02839e7d..14104f68 100644
--- a/hardware/drivers_usb_otg/usb_serial/usb_serial.cpp
+++ b/hardware/drivers_usb_otg/usb_serial/usb_serial.cpp
@@ -103,6 +103,7 @@ esp_err_t usb_serial_init() {
const usb_host_config_t host_config = {
.skip_phy_setup = true,
.intr_flags = ESP_INTR_FLAG_LEVEL1,
+ .enum_filter_cb = NULL,
};
// Install USB Host driver. Should only be called once in entire application
esp3d_log("Installing USB Host");
diff --git a/info.json b/info.json
index 1c672223..eb6f8179 100644
--- a/info.json
+++ b/info.json
@@ -1,3 +1,3 @@
{
- "version": "3.0.0.a25"
+ "version": "3.0.0.a26"
}
diff --git a/main/core/commands/esp410.cpp b/main/core/commands/esp410.cpp
index 058e978a..2958116e 100644
--- a/main/core/commands/esp410.cpp
+++ b/main/core/commands/esp410.cpp
@@ -79,10 +79,10 @@ void ESP3DCommands::ESP410(int cmd_params_pos, ESP3DMessage *msg) {
wifi_ap_record_t ap_info[MAX_SCAN_LIST_SIZE];
uint16_t ap_count = 0;
memset(ap_info, 0, sizeof(ap_info));
- uint16_t real_count = 0;
- ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
+ uint16_t real_count = 0;
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));
- esp3d_log("Total : %d", ap_count);
+ ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
+ esp3d_log("Total : %d / %d (max : %d)", ap_count, number, MAX_SCAN_LIST_SIZE);
for (int i = 0; (i < MAX_SCAN_LIST_SIZE) && (i < ap_count); i++) {
esp3d_log("%s %d %d", ap_info[i].ssid, ap_info[i].rssi,
diff --git a/main/core/commands/esp444.cpp b/main/core/commands/esp444.cpp
index 821cc868..46372787 100644
--- a/main/core/commands/esp444.cpp
+++ b/main/core/commands/esp444.cpp
@@ -19,6 +19,7 @@
#include "authentication/esp3d_authentication.h"
#include "esp3d_client.h"
+#include "esp3d_hal.h"
#include "esp3d_commands.h"
#include "esp3d_settings.h"
#include "esp3d_string.h"
@@ -82,10 +83,10 @@ void ESP3DCommands::ESP444(int cmd_params_pos, ESP3DMessage* msg) {
}
if (isRestart) {
flush();
- vTaskDelay(pdMS_TO_TICKS(1000));
+ esp3d_hal::wait(1000);
esp_restart();
while (1) {
- vTaskDelay(pdMS_TO_TICKS(10));
+ esp3d_hal::wait(10);
}
}
}
\ No newline at end of file
diff --git a/main/core/includes/esp3d_version.h b/main/core/includes/esp3d_version.h
index 76e45e7d..b667fbf8 100644
--- a/main/core/includes/esp3d_version.h
+++ b/main/core/includes/esp3d_version.h
@@ -23,7 +23,7 @@
#ifdef __cplusplus
extern "C" {
#endif
-#define ESP3D_TFT_VERSION "1.0.0.a25"
+#define ESP3D_TFT_VERSION "1.0.0.a26"
#define ESP3D_TFT_FW_URL "https://github.com/luc-github/ESP3D-TFT"
#ifdef __cplusplus
diff --git a/main/display/3dprinter/marlin/screens/settings_screen.cpp b/main/display/3dprinter/marlin/screens/settings_screen.cpp
index 9ca84cf6..351d2d7b 100644
--- a/main/display/3dprinter/marlin/screens/settings_screen.cpp
+++ b/main/display/3dprinter/marlin/screens/settings_screen.cpp
@@ -32,6 +32,7 @@
#include "esp3d_client_types.h"
#include "esp3d_json_settings.h"
#include "esp3d_log.h"
+#include "esp3d_hal.h"
#include "esp3d_lvgl.h"
#include "esp3d_settings.h"
#include "esp3d_string.h"
@@ -158,7 +159,7 @@ void refresh_settings_list_cb(lv_timer_t *timer) {
*/
static void bgLoadJSONSettingsTask(void *pvParameter) {
(void)pvParameter;
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
std::string value =
esp3dTftJsonSettings.readString("settings", "filesfilter");
if (extensions_label) {
@@ -192,7 +193,7 @@ static void bgLoadJSONSettingsTask(void *pvParameter) {
* @param pvParameter A pointer to the `ESP3DSettingsData` object.
*/
static void bgSaveJSONSettingsTask(void *pvParameter) {
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
ESP3DSettingsData *data = (ESP3DSettingsData *)pvParameter;
esp3d_log("Got value %s in task", data->value.c_str());
// do the change
diff --git a/main/display/3dprinter/repetier/screens/settings_screen.cpp b/main/display/3dprinter/repetier/screens/settings_screen.cpp
index 9ca84cf6..48dca85a 100644
--- a/main/display/3dprinter/repetier/screens/settings_screen.cpp
+++ b/main/display/3dprinter/repetier/screens/settings_screen.cpp
@@ -158,7 +158,7 @@ void refresh_settings_list_cb(lv_timer_t *timer) {
*/
static void bgLoadJSONSettingsTask(void *pvParameter) {
(void)pvParameter;
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
std::string value =
esp3dTftJsonSettings.readString("settings", "filesfilter");
if (extensions_label) {
@@ -192,7 +192,7 @@ static void bgLoadJSONSettingsTask(void *pvParameter) {
* @param pvParameter A pointer to the `ESP3DSettingsData` object.
*/
static void bgSaveJSONSettingsTask(void *pvParameter) {
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
ESP3DSettingsData *data = (ESP3DSettingsData *)pvParameter;
esp3d_log("Got value %s in task", data->value.c_str());
// do the change
diff --git a/main/display/3dprinter/smoothieware/screens/settings_screen.cpp b/main/display/3dprinter/smoothieware/screens/settings_screen.cpp
index 9ca84cf6..48dca85a 100644
--- a/main/display/3dprinter/smoothieware/screens/settings_screen.cpp
+++ b/main/display/3dprinter/smoothieware/screens/settings_screen.cpp
@@ -158,7 +158,7 @@ void refresh_settings_list_cb(lv_timer_t *timer) {
*/
static void bgLoadJSONSettingsTask(void *pvParameter) {
(void)pvParameter;
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
std::string value =
esp3dTftJsonSettings.readString("settings", "filesfilter");
if (extensions_label) {
@@ -192,7 +192,7 @@ static void bgLoadJSONSettingsTask(void *pvParameter) {
* @param pvParameter A pointer to the `ESP3DSettingsData` object.
*/
static void bgSaveJSONSettingsTask(void *pvParameter) {
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
ESP3DSettingsData *data = (ESP3DSettingsData *)pvParameter;
esp3d_log("Got value %s in task", data->value.c_str());
// do the change
diff --git a/main/display/cnc/grbl/screens/settings_screen.cpp b/main/display/cnc/grbl/screens/settings_screen.cpp
index fedcccae..55e00331 100644
--- a/main/display/cnc/grbl/screens/settings_screen.cpp
+++ b/main/display/cnc/grbl/screens/settings_screen.cpp
@@ -112,7 +112,7 @@ void refresh_settings_list_cb(lv_timer_t *timer) {
// bgLoadJSONSettingsTask
static void bgLoadJSONSettingsTask(void *pvParameter) {
(void)pvParameter;
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
std::string value =
esp3dTftJsonSettings.readString("settings", "filesfilter");
if (extensions_label) {
@@ -128,7 +128,7 @@ static void bgLoadJSONSettingsTask(void *pvParameter) {
// bgSaveJSONSettingsTask
static void bgSaveJSONSettingsTask(void *pvParameter) {
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
ESP3DSettingsData *data = (ESP3DSettingsData *)pvParameter;
esp3d_log("Got value %s in task", data->value.c_str());
// do the change
diff --git a/main/display/esp3d_tft_ui.cpp b/main/display/esp3d_tft_ui.cpp
index 163c1a4d..355daec4 100644
--- a/main/display/esp3d_tft_ui.cpp
+++ b/main/display/esp3d_tft_ui.cpp
@@ -82,7 +82,7 @@ static void guiTask(void *pvParameter) {
while (1) {
/* Delay 1 tick (assumes FreeRTOS tick is 10ms */
- vTaskDelay(pdMS_TO_TICKS(10));
+ esp3d_hal::wait(10);
/* Try to take the semaphore, call lvgl related function on success */
if (pdTRUE == xSemaphoreTake(xGuiSemaphore, portMAX_DELAY)) {
diff --git a/main/display/screens/files_screen.cpp b/main/display/screens/files_screen.cpp
index c0362891..7de00e96 100644
--- a/main/display/screens/files_screen.cpp
+++ b/main/display/screens/files_screen.cpp
@@ -87,7 +87,7 @@ void refresh_files_list_cb(lv_timer_t *timer) {
*/
static void bgFilesTask(void *pvParameter) {
(void)pvParameter;
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
fill_files_list();
if (!start_files_list_timer) {
start_files_list_timer = lv_timer_create(refresh_files_list_cb, 100, NULL);
@@ -207,7 +207,7 @@ void fill_files_list() {
files_list.push_back(file);
}
esp3d_log("Found %s, %s", file.name.c_str(), file.size.c_str());
- esp3d_hal::wait(2);
+ esp3d_hal::wait(1);
}
esp3d_log("Files list size %d", files_list.size());
closedir(dir);
diff --git a/main/display/screens/sta_screen.cpp b/main/display/screens/sta_screen.cpp
index 255bd36d..5afbe72a 100644
--- a/main/display/screens/sta_screen.cpp
+++ b/main/display/screens/sta_screen.cpp
@@ -33,6 +33,7 @@
#include "components/symbol_button_component.h"
#include "components/wifi_status_component.h"
#include "esp3d_log.h"
+#include "esp3d_hal.h"
#include "esp3d_lvgl.h"
#include "esp3d_settings.h"
#include "esp3d_string.h"
@@ -134,7 +135,7 @@ void refresh_ssid_scanned_list_cb(lv_timer_t *timer) {
static void bgScanTask(void *pvParameter) {
esp3d_log("Scan task");
(void)pvParameter;
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
fill_ssid_scanned_list();
if (!start_scan_timer) {
start_scan_timer = lv_timer_create(refresh_ssid_scanned_list_cb, 100, NULL);
@@ -181,8 +182,8 @@ void fill_ssid_scanned_list() {
wifi_ap_record_t ap_info[MAX_SCAN_LIST_SIZE];
uint16_t ap_count = 0;
memset(ap_info, 0, sizeof(ap_info));
- ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));
+ ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
esp3d_log("Got %d ssid in scan", ap_count);
for (int i = 0; (i < MAX_SCAN_LIST_SIZE) && (i < ap_count); i++) {
esp3d_log("%s %d %d", ap_info[i].ssid, ap_info[i].rssi,
diff --git a/main/modules/gcode_host/esp3d_gcode_host_service.cpp b/main/modules/gcode_host/esp3d_gcode_host_service.cpp
index c647f539..b479c8dc 100644
--- a/main/modules/gcode_host/esp3d_gcode_host_service.cpp
+++ b/main/modules/gcode_host/esp3d_gcode_host_service.cpp
@@ -81,10 +81,11 @@ ESP3DGCodeHostService gcodeHostService;
static void esp3d_gcode_host_task(void* pvParameter) {
(void)pvParameter;
gcodeHostService.updateScripts();
+ esp3d_hal::wait(100);
while (1) {
/* Delay */
- vTaskDelay(pdMS_TO_TICKS(10));
- gcodeHostService.handle();
+ gcodeHostService.handle();
+ esp3d_hal::wait(10);
}
vTaskDelete(NULL);
}
@@ -1762,7 +1763,7 @@ void ESP3DGCodeHostService::end() {
clearRxQueue();
esp3d_log("Clearing queue Tx messages");
clearTxQueue();
- vTaskDelay(pdMS_TO_TICKS(1000));
+ esp3d_hal::wait(1000);
while (!_scripts.empty()) {
_popFrontGCodeStream(false);
}
diff --git a/main/modules/gcode_host/esp3d_tft_stream.cpp b/main/modules/gcode_host/esp3d_tft_stream.cpp
index fbfeadc1..a240c508 100644
--- a/main/modules/gcode_host/esp3d_tft_stream.cpp
+++ b/main/modules/gcode_host/esp3d_tft_stream.cpp
@@ -24,6 +24,7 @@
#include "esp3d_commands.h"
#include "esp3d_log.h"
+#include "esp3d_hal.h"
#include "esp_freertos_hooks.h"
#include "freertos/FreeRTOS.h"
#include "freertos/semphr.h"
@@ -58,15 +59,15 @@ static void streamTask(void *pvParameter) {
if (!gcodeHostService.begin()) {
esp3d_log_e("Failed to begin gcode host service");
}
-
+ esp3d_hal::wait(100);
while (1) {
/* Delay */
- vTaskDelay(pdMS_TO_TICKS(10));
if (pdTRUE == xSemaphoreTake(xStreamSemaphore, portMAX_DELAY)) {
esp3dTftstream.handle();
xSemaphoreGive(xStreamSemaphore);
}
+ esp3d_hal::wait(10);
}
/* A task should NEVER return */
@@ -96,7 +97,7 @@ bool ESP3DTftStream::begin() {
esp3d_log("Created Stream Task");
// to let buffer time to empty
#if ESP3D_TFT_LOG
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
#endif // ESP3D_TFT_LOG
getTargetFirmware(true);
diff --git a/main/modules/http/handlers/update/esp3d_updatefw.cpp b/main/modules/http/handlers/update/esp3d_updatefw.cpp
index f9abf7db..5985cf16 100644
--- a/main/modules/http/handlers/update/esp3d_updatefw.cpp
+++ b/main/modules/http/handlers/update/esp3d_updatefw.cpp
@@ -17,6 +17,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "esp3d_log.h"
+#include "esp3d_hal.h"
#include "esp3d_string.h"
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
@@ -29,7 +30,7 @@ esp_err_t ESP3DHttpService::updatefw_handler(httpd_req_t *req) {
// Send httpd header
httpd_resp_set_http_hdr(req);
httpd_resp_sendstr(req, "Update firmware done restarting");
- vTaskDelay(pdMS_TO_TICKS(1000));
+ esp3d_hal::wait(1000);
esp_restart();
return ESP_OK;
}
diff --git a/main/modules/network/esp3d_network.cpp b/main/modules/network/esp3d_network.cpp
index 9d81f103..01bad5d8 100644
--- a/main/modules/network/esp3d_network.cpp
+++ b/main/modules/network/esp3d_network.cpp
@@ -616,7 +616,7 @@ bool ESP3DNetwork::startApMode(bool configMode, bool limited) {
}
#if ESP3D_TFT_LOG
// to avoid esp3d_log merge with dispatch message on serial output
- vTaskDelay(pdMS_TO_TICKS(500));
+ esp3d_hal::wait(500);
#endif // ESP3D_TFT_LOG
esp3dCommands.dispatch(stmp.c_str(), ESP3DClientType::all_clients, requestId,
ESP3DMessageType::unique, ESP3DClientType::system,
diff --git a/main/modules/network/esp3d_tft_network.cpp b/main/modules/network/esp3d_tft_network.cpp
index 6eb02a9e..505c0d1f 100644
--- a/main/modules/network/esp3d_tft_network.cpp
+++ b/main/modules/network/esp3d_tft_network.cpp
@@ -21,6 +21,7 @@
#include "esp3d_tft_network.h"
#include "esp3d_log.h"
+#include "esp3d_hal.h"
#include "esp_event.h"
#include "esp_freertos_hooks.h"
#include "esp_system.h"
@@ -55,12 +56,13 @@ static void networkTask(void *pvParameter) {
ESP_ERROR_CHECK(esp_netif_init()); // desinit is not yet support so do it
// once
ESP_ERROR_CHECK(esp_event_loop_create_default());
- vTaskDelay(pdMS_TO_TICKS(100));
+ esp3d_hal::wait(100);
#endif // #ESP3D_WIFI_FEATURE
esp3dNetwork.begin();
+ esp3d_hal::wait(100);
while (1) {
/* Delay */
- vTaskDelay(pdMS_TO_TICKS(10));
+ esp3d_hal::wait(10);
if (pdTRUE == xSemaphoreTake(xNetworkSemaphore, portMAX_DELAY)) {
esp3dTftnetwork.handle();
diff --git a/main/modules/rendering/esp3d_rendering_client.cpp b/main/modules/rendering/esp3d_rendering_client.cpp
index 1b13f3a0..9ef015a6 100644
--- a/main/modules/rendering/esp3d_rendering_client.cpp
+++ b/main/modules/rendering/esp3d_rendering_client.cpp
@@ -43,7 +43,7 @@ static void esp3d_rendering_rx_task(void *pvParameter) {
while (1) {
/* Delay */
- vTaskDelay(pdMS_TO_TICKS(10));
+ esp3d_hal::wait(10);
renderingClient.handle();
}
/* A task should NEVER return */
@@ -183,7 +183,7 @@ void ESP3DRenderingClient::end() {
_started = false;
esp3d_log("Clearing queue Rx messages");
clearRxQueue();
- vTaskDelay(pdMS_TO_TICKS(1000));
+ esp3d_hal::wait(1000);
if (pthread_mutex_destroy(&_rx_mutex) != 0) {
esp3d_log_w("Mutex destruction for rx failed");
}
diff --git a/main/modules/serial/esp3d_serial_client.cpp b/main/modules/serial/esp3d_serial_client.cpp
index fad09459..6a45ec01 100644
--- a/main/modules/serial/esp3d_serial_client.cpp
+++ b/main/modules/serial/esp3d_serial_client.cpp
@@ -77,7 +77,7 @@ static void esp3d_serial_rx_task(void *pvParameter) {
(void)pvParameter;
while (1) {
/* Delay */
- vTaskDelay(pdMS_TO_TICKS(10));
+ esp3d_hal::wait(1);
if (!serialClient.started()) {
break;
}
@@ -255,7 +255,7 @@ void ESP3DSerialClient::end() {
clearRxQueue();
esp3d_log("Clearing queue Tx messages");
clearTxQueue();
- vTaskDelay(pdMS_TO_TICKS(1000));
+ esp3d_hal::wait(1000);
if (pthread_mutex_destroy(&_tx_mutex) != 0) {
esp3d_log_w("Mutex destruction for tx failed");
}
diff --git a/main/modules/socket_server/esp3d_socket_server.cpp b/main/modules/socket_server/esp3d_socket_server.cpp
index 734dec3f..e272e22c 100644
--- a/main/modules/socket_server/esp3d_socket_server.cpp
+++ b/main/modules/socket_server/esp3d_socket_server.cpp
@@ -230,7 +230,7 @@ static void esp3d_socket_rx_task(void *pvParameter) {
esp3dSocketServer.getClient();
esp3dSocketServer.readSockets();
esp3dSocketServer.handle();
- vTaskDelay(pdMS_TO_TICKS(10));
+ esp3d_hal::wait(10);
}
} else {
@@ -528,7 +528,7 @@ void ESP3DSocketServer::end() {
if (_started) {
esp3d_log("End socket server");
_isRunning = false;
- vTaskDelay(pdMS_TO_TICKS(500));
+ esp3d_hal::wait(500);
flush();
closeAllClients();
_started = false;
@@ -536,7 +536,7 @@ void ESP3DSocketServer::end() {
clearRxQueue();
esp3d_log("Clearing queue Tx messages");
clearTxQueue();
- vTaskDelay(pdMS_TO_TICKS(500));
+ esp3d_hal::wait(500);
if (pthread_mutex_destroy(&_tx_mutex) != 0) {
esp3d_log_w("Mutex destruction for tx failed");
}
diff --git a/main/modules/update/esp3d_update_service.cpp b/main/modules/update/esp3d_update_service.cpp
index bf8bd1a5..3a1f34f0 100644
--- a/main/modules/update/esp3d_update_service.cpp
+++ b/main/modules/update/esp3d_update_service.cpp
@@ -23,6 +23,7 @@
#include "esp3d_client.h"
#include "esp3d_log.h"
+#include "esp3d_hal.h"
#include "esp3d_string.h"
#include "esp_ota_ops.h"
#include "esp_system.h"
@@ -379,10 +380,10 @@ bool ESP3DUpdateService::begin() {
#endif // ESP3D_SD_CARD_FEATURE
if (restart) {
esp3d_log("Restarting firmware");
- vTaskDelay(pdMS_TO_TICKS(1000));
+ esp3d_hal::wait(1000);
esp_restart();
while (1) {
- vTaskDelay(pdMS_TO_TICKS(10));
+ esp3d_hal::wait(10);
}
}
return true;
diff --git a/main/modules/usb_serial/esp3d_usb_serial_client.cpp b/main/modules/usb_serial/esp3d_usb_serial_client.cpp
index 0dbdc3cd..b33f9b46 100644
--- a/main/modules/usb_serial/esp3d_usb_serial_client.cpp
+++ b/main/modules/usb_serial/esp3d_usb_serial_client.cpp
@@ -80,11 +80,13 @@ void handle_event(const cdc_acm_host_dev_event_data_t *event, void *user_ctx) {
switch (event->type) {
case CDC_ACM_HOST_ERROR:
esp3d_log_e("CDC-ACM error has occurred, err_no = %d", event->data.error);
+#if ESP3D_HTTP_FEATURE
+ esp3dWsWebUiService.pushNotification("USB Error occured");
+#endif // ESP3D_HTTP_FEATURE
break;
case CDC_ACM_HOST_DEVICE_DISCONNECTED:
esp3d_log("Device suddenly disconnected");
usbSerialClient.setConnected(false);
- // xSemaphoreGive(device_disconnected_sem);
break;
case CDC_ACM_HOST_SERIAL_STATE:
esp3d_log("Serial state notif 0x%04X", event->data.serial_state.val);
@@ -96,7 +98,7 @@ void handle_event(const cdc_acm_host_dev_event_data_t *event, void *user_ctx) {
}
void ESP3DUsbSerialClient::connectDevice() {
- if (_stopConnect) {
+ if (_stopConnect || !_started || _connected || _vcp_ptr) {
return;
}
const cdc_acm_host_device_config_t dev_config = {
@@ -117,24 +119,24 @@ void ESP3DUsbSerialClient::connectDevice() {
// You don't need to know the device's VID and PID. Just plug in any device
// and the VCP service will pick correct (already registered) driver for the
// device
- // esp3d_log("Opening any VCP device...");
+ esp3d_log("Waiting for USB device");
// TODO try to identify device
- _vcp = std::unique_ptr(esp_usb::VCP::open(&dev_config));
+ _vcp_ptr = std::unique_ptr(esp_usb::VCP::open(&dev_config));
- if (_vcp == nullptr) {
+ if (_vcp_ptr == nullptr) {
// esp3d_log_w("Failed to open VCP device, retrying...");
return;
}
- vTaskDelay(10);
+ esp3d_hal::wait(10);
- esp3d_log("USB detected");
+ esp3d_log("USB device found");
- if (_vcp->line_coding_set(&line_coding) == ESP_OK) {
+ if (_vcp_ptr->line_coding_set(&line_coding) == ESP_OK) {
esp3d_log("USB Connected");
usbSerialClient.setConnected(true);
- vTaskDelay(10);
- _vcp = nullptr;
+ esp3d_hal::wait(10);
+ _vcp_ptr = nullptr;
} else {
esp3d_log("USB device not identified");
}
@@ -143,13 +145,16 @@ void ESP3DUsbSerialClient::connectDevice() {
// this task only handle connection
static void esp3d_usb_serial_connection_task(void *pvParameter) {
(void)pvParameter;
+ esp3d_hal::wait(100);
while (1) {
/* Delay */
- vTaskDelay(pdMS_TO_TICKS(10));
- if (!usbSerialClient.started()) {
- break;
+ esp3d_hal::wait(10);
+ if (usbSerialClient.started()) {
+ usbSerialClient.connectDevice();
+ } else {
+ esp3d_log("USB serial client not started");
}
- usbSerialClient.connectDevice();
+
}
/* A task should NEVER return */
vTaskDelete(NULL);
@@ -158,16 +163,22 @@ static void esp3d_usb_serial_connection_task(void *pvParameter) {
void ESP3DUsbSerialClient::setConnected(bool connected) {
_connected = connected;
- if (connected) {
+ if (_connected) {
+ esp3d_log("USB device connected");
#if ESP3D_HTTP_FEATURE
esp3dWsWebUiService.pushNotification("Connected");
#endif // ESP3D_HTTP_FEATURE
- xSemaphoreTake(_device_disconnected_sem, portMAX_DELAY);
+ if (xSemaphoreTake(_device_disconnected_sem, portMAX_DELAY) != pdTRUE) {
+ esp3d_log_e("Failed to take semaphore");
+ _connected=false;
+ }
} else {
+ esp3d_log("USB device disconnected");
#if ESP3D_HTTP_FEATURE
esp3dWsWebUiService.pushNotification("Disconnected");
#endif // ESP3D_HTTP_FEATURE
xSemaphoreGive(_device_disconnected_sem);
+ _vcp_ptr = nullptr;
}
}
@@ -178,7 +189,7 @@ ESP3DUsbSerialClient::ESP3DUsbSerialClient() {
_rx_buffer = NULL;
_rx_pos = 0;
_xHandle = NULL;
- _vcp = NULL;
+ _vcp_ptr = NULL;
_stopConnect = false;
}
ESP3DUsbSerialClient::~ESP3DUsbSerialClient() { end(); }
@@ -296,8 +307,8 @@ void ESP3DUsbSerialClient::handle() {
if (_connected) {
esp3d_log("Send message");
// TODO: check if msg->size < ESP3D_USB_SERIAL_TX_BUFFER_SIZE
- if (_vcp && _vcp->tx_blocking(msg->data, msg->size) == ESP_OK) {
- if (!(_vcp && _vcp->set_control_line_state(true, true) == ESP_OK)) {
+ if (_vcp_ptr && _vcp_ptr->tx_blocking(msg->data, msg->size) == ESP_OK) {
+ if (!(_vcp_ptr && _vcp_ptr->set_control_line_state(true, true) == ESP_OK)) {
esp3d_log("Failed set line");
}
} else {
@@ -321,7 +332,7 @@ void ESP3DUsbSerialClient::end() {
clearRxQueue();
esp3d_log("Clearing queue Tx messages");
clearTxQueue();
- vTaskDelay(pdMS_TO_TICKS(1000));
+ esp3d_hal::wait(1000);
if (pthread_mutex_destroy(&_tx_mutex) != 0) {
esp3d_log_w("Mutex destruction for tx failed");
}
diff --git a/main/modules/usb_serial/esp3d_usb_serial_client.h b/main/modules/usb_serial/esp3d_usb_serial_client.h
index 1c9b632d..8c31f84e 100644
--- a/main/modules/usb_serial/esp3d_usb_serial_client.h
+++ b/main/modules/usb_serial/esp3d_usb_serial_client.h
@@ -65,7 +65,7 @@ class ESP3DUsbSerialClient : public ESP3DClient {
pthread_mutex_t _tx_mutex;
pthread_mutex_t _rx_mutex;
SemaphoreHandle_t _device_disconnected_sem;
- std::unique_ptr _vcp;
+ std::unique_ptr _vcp_ptr;
};
extern ESP3DUsbSerialClient usbSerialClient;
diff --git a/main/modules/websocket/esp3d_webui_service.cpp b/main/modules/websocket/esp3d_webui_service.cpp
index b8b86c53..a2888c75 100644
--- a/main/modules/websocket/esp3d_webui_service.cpp
+++ b/main/modules/websocket/esp3d_webui_service.cpp
@@ -50,7 +50,7 @@ esp_err_t ESP3DWebUiService::onOpen(httpd_req_t *req) {
pushMsgTxt(currentSocketId, tmpstr.c_str());
esp3d_hal::wait(500);
closeClient(currentSocketId);
- esp3d_hal::wait(100);
+ esp3d_hal::wait(10);
}
}
} else {
diff --git a/main/target/3dprinter/marlin/esp3d_gcode_parser_service.cpp b/main/target/3dprinter/marlin/esp3d_gcode_parser_service.cpp
index 140c1abd..009c675e 100644
--- a/main/target/3dprinter/marlin/esp3d_gcode_parser_service.cpp
+++ b/main/target/3dprinter/marlin/esp3d_gcode_parser_service.cpp
@@ -408,8 +408,9 @@ ESP3DDataType ESP3DGCodeParserService::getType(const char* data) {
}
// is it ack ?
- if ((ptr[0] == 'o' && ptr[1] == 'k') &&
- (ptr[2] == '\n' || ptr[2] == '\r' || ptr[2] == ' ' || ptr[2] == 0x0)) {
+ if (((ptr[0] == 'o' && ptr[1] == 'k') &&
+ (ptr[2] == '\n' || ptr[2] == '\r' || ptr[2] == ' ' || ptr[2] == 0x0)) || strstr(ptr, "ok") != nullptr) {
+ esp3d_log("Ack found in %s", ptr);
return ESP3DDataType::ack;
}
diff --git a/main/target/3dprinter/repetier/esp3d_gcode_parser_service.cpp b/main/target/3dprinter/repetier/esp3d_gcode_parser_service.cpp
index 140c1abd..be0fc7ed 100644
--- a/main/target/3dprinter/repetier/esp3d_gcode_parser_service.cpp
+++ b/main/target/3dprinter/repetier/esp3d_gcode_parser_service.cpp
@@ -408,8 +408,9 @@ ESP3DDataType ESP3DGCodeParserService::getType(const char* data) {
}
// is it ack ?
- if ((ptr[0] == 'o' && ptr[1] == 'k') &&
- (ptr[2] == '\n' || ptr[2] == '\r' || ptr[2] == ' ' || ptr[2] == 0x0)) {
+ if (((ptr[0] == 'o' && ptr[1] == 'k') &&
+ (ptr[2] == '\n' || ptr[2] == '\r' || ptr[2] == ' ' || ptr[2] == 0x0))|| strstr(ptr, "ok")!= nullptr) {
+ esp3d_log("Ack found in %s", ptr);
return ESP3DDataType::ack;
}