From d2a13ec0daacf142557beb2e46e129f9fbe72154 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 21 Mar 2026 16:23:07 +0100 Subject: [PATCH] core3 adaptions for c3 and c6, compiles for all chips --- boards/seeed_xiao_esp32c6.json | 1 + interface/package.json | 2 +- interface/pnpm-lock.yaml | 10 +++++----- lib/uuid-syslog/src/syslog.cpp | 2 +- src/ESP32React/NTPSettingsService.cpp | 5 +++++ src/ESP32React/UploadFileService.cpp | 13 +++++++++---- src/core/default_settings.h | 2 ++ src/core/system.cpp | 4 ++++ src/devices/thermostat.cpp | 4 ++++ src/web/WebSettingsService.cpp | 2 ++ 10 files changed, 34 insertions(+), 11 deletions(-) diff --git a/boards/seeed_xiao_esp32c6.json b/boards/seeed_xiao_esp32c6.json index 224f0e215..a3de41d41 100644 --- a/boards/seeed_xiao_esp32c6.json +++ b/boards/seeed_xiao_esp32c6.json @@ -2,6 +2,7 @@ "build": { "core": "esp32", "extra_flags": [ + "-DNO_TLS_SUPPORT", "-DARDUINO_XIAO_ESP32C6", "-DARDUINO_USB_MODE=1", "-DARDUINO_USB_CDC_ON_BOOT=1" diff --git a/interface/package.json b/interface/package.json index b884a77da..7f821c954 100644 --- a/interface/package.json +++ b/interface/package.json @@ -50,7 +50,7 @@ "@babel/core": "^7.29.0", "@eslint/js": "^10.0.1", "@preact/compat": "^18.3.2", - "@preact/preset-vite": "^2.10.4", + "@preact/preset-vite": "^2.10.5", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/node": "^25.5.0", "@types/react": "^19.2.14", diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index 4adf78af6..e4cb5f4f5 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -82,8 +82,8 @@ importers: specifier: ^10.0.1 version: 10.0.1(eslint@10.1.0) '@preact/preset-vite': - specifier: ^2.10.4 - version: 2.10.4(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.59.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(terser@5.46.1)) + specifier: ^2.10.5 + version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.59.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(terser@5.46.1)) '@trivago/prettier-plugin-sort-imports': specifier: ^6.0.2 version: 6.0.2(prettier@3.8.1) @@ -657,8 +657,8 @@ packages: peerDependencies: preact: '*' - '@preact/preset-vite@2.10.4': - resolution: {integrity: sha512-L7RQRs2GiG0lLUz7JSg07vU6lhlzdIthH0eqYZmRR70tTB9ikKCq2LHr+PZzhzIOco3Dioi6P6e/fjAmDUMJbQ==} + '@preact/preset-vite@2.10.5': + resolution: {integrity: sha512-p0vJpxiVO7KWWazWny3LUZ+saXyZKWv6Ju0bYMWNJRp2YveufRPgSUB1C4MTqGJfz07EehMgfN+AJNwQy+w6Iw==} peerDependencies: '@babel/core': 7.x vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x || 8.x @@ -3879,7 +3879,7 @@ snapshots: dependencies: preact: 10.29.0 - '@preact/preset-vite@2.10.4(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.59.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(terser@5.46.1))': + '@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.59.0)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(terser@5.46.1))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) diff --git a/lib/uuid-syslog/src/syslog.cpp b/lib/uuid-syslog/src/syslog.cpp index 024fa6665..4e0eac774 100644 --- a/lib/uuid-syslog/src/syslog.cpp +++ b/lib/uuid-syslog/src/syslog.cpp @@ -20,7 +20,7 @@ #include "../../src/core/emsesp.h" #ifndef UUID_SYSLOG_HAVE_GETTIMEOFDAY -#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) +#if defined(ARDUINO_ARCH_ESP8266) // time() does not return UTC on the ESP8266: https://github.com/esp8266/Arduino/issues/4637 #define UUID_SYSLOG_HAVE_GETTIMEOFDAY 1 #endif diff --git a/src/ESP32React/NTPSettingsService.cpp b/src/ESP32React/NTPSettingsService.cpp index b12d69bbf..2cf67353f 100644 --- a/src/ESP32React/NTPSettingsService.cpp +++ b/src/ESP32React/NTPSettingsService.cpp @@ -52,7 +52,12 @@ void NTPSettingsService::configureTime(AsyncWebServerRequest * request, JsonVari tm.tm_isdst = -1; // not set by strptime, tells mktime to determine daylightsaving time_t time = mktime(&tm); struct timeval now = {.tv_sec = time, .tv_usec = {}}; +#if CONFIG_IDF_TARGET_ESP32C3 + // settimeofday and adjtime() does not work, unknown how to set time + emsesp::EMSESP::logger().warning("manual clock setting not possible"); +#else settimeofday(&now, nullptr); +#endif AsyncWebServerResponse * response = request->beginResponse(200); request->send(response); return; diff --git a/src/ESP32React/UploadFileService.cpp b/src/ESP32React/UploadFileService.cpp index 4d016dce4..53a897613 100644 --- a/src/ESP32React/UploadFileService.cpp +++ b/src/ESP32React/UploadFileService.cpp @@ -61,22 +61,27 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri if (_is_firmware) { // Check firmware header, 0xE9 magic offset 0 indicates esp bin, chip offset 12: esp32:0, S2:2, C3:5 #if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 - if (len > 12 && (data[0] != 0xE9 || data[12] != 0)) { + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32)) { handleError(request, 503); // service unavailable return; } #elif CONFIG_IDF_TARGET_ESP32S2 - if (len > 12 && (data[0] != 0xE9 || data[12] != 2)) { + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32S2)) { handleError(request, 503); // service unavailable return; } #elif CONFIG_IDF_TARGET_ESP32C3 - if (len > 12 && (data[0] != 0xE9 || data[12] != 5)) { + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32C3)) { handleError(request, 503); // service unavailable return; } #elif CONFIG_IDF_TARGET_ESP32S3 - if (len > 12 && (data[0] != 0xE9 || data[12] != 9)) { + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32S3)) { + handleError(request, 503); // service unavailable + return; + } +#elif CONFIG_IDF_TARGET_ESP32C6 + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32C6)) { handleError(request, 503); // service unavailable return; } diff --git a/src/core/default_settings.h b/src/core/default_settings.h index 958ccf4c5..3a49273fa 100644 --- a/src/core/default_settings.h +++ b/src/core/default_settings.h @@ -285,6 +285,8 @@ enum { #define EMSESP_PLATFORM "ESP32S3" #elif CONFIG_IDF_TARGET_ESP32 || EMSESP_STANDALONE #define EMSESP_PLATFORM "ESP32" +#elif CONFIG_IDF_TARGET_ESP32C6 +#define EMSESP_PLATFORM "ESP32C6" #else #error Target CONFIG_IDF_TARGET is not supported #endif diff --git a/src/core/system.cpp b/src/core/system.cpp index 5c953bc55..1f7411e7b 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -3208,6 +3208,10 @@ void System::set_valid_system_gpios() { } else { valid_system_gpios_ = string_range_to_vector("0-39", "6-11, 20, 24, 28-31"); } +#elif CONFIG_IDF_TARGET_ESP32C6 + // https://docs.espressif.com/projects/esp-idf/en/v5.5.3/esp32c6/api-reference/peripherals/gpio.html + // 24-30 used for flash, 12-13 USB, 16-17 uart0 + valid_system_gpios_ = string_range_to_vector("0-30", "12-13, 16-17, 24-30"); #elif defined(EMSESP_STANDALONE) valid_system_gpios_ = string_range_to_vector("0-39"); #endif diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 889276ad7..95170fbb7 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1759,8 +1759,12 @@ void Thermostat::process_RCTime(std::shared_ptr telegram) { ttime = mktime(tm_); // thermostat time } struct timeval newnow = {.tv_sec = ttime, .tv_usec = 0}; +#if CONFIG_IDF_TARGET_ESP32C3 + // unknown how to set time on C3 +#else settimeofday(&newnow, nullptr); LOG_INFO("ems-esp time set from thermostat"); +#endif } #endif } diff --git a/src/web/WebSettingsService.cpp b/src/web/WebSettingsService.cpp index f1fb188c2..106e7c052 100644 --- a/src/web/WebSettingsService.cpp +++ b/src/web/WebSettingsService.cpp @@ -506,6 +506,8 @@ void WebSettings::set_board_profile(WebSettings & settings) { settings.board_profile = "S2MINI"; #elif CONFIG_IDF_TARGET_ESP32S3 settings.board_profile = "S32S3"; // BBQKees Gateway S3 +#elif CONFIG_IDF_TARGET_ESP32C6 + settings.board_profile = "CUSTOM"; #endif // apply the new board profile setting System::load_board_profile(data, settings.board_profile.c_str());