Initial ESP32-S31 support (#25130)

* ESP32-S31 support (#588)

* Arduino IDF 6.1 based framework only for S31

* code review changes Thei for tasmota_types.h
This commit is contained in:
Jason2866 authored and GitHub committed 2026-10-10 17:50:13 +02:00
1 parent d9f4450293
commit c6b19bb70c
52 files changed
+1172 -346

No files matched your search

+59
View File
@@ -0,0 +1,59 @@
{
"build": {
"arduino": {
"memory_type": "qio_opi"
},
"core": "esp32",
"extra_flags": [
"-DARDUINO_TASMOTA",
"-DBOARD_HAS_PSRAM",
"-DARDUINO_USB_MODE=1",
"-DUSE_USB_CDC_CONSOLE",
"-DESP32_16M",
"-DESP32S31"
],
"f_cpu": "320000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"psram_type": "opi",
"mcu": "esp32s31",
"variant": "esp32s31",
"partitions": "partitions/esp32_partition_app3904k_fs11392k.csv"
},
"connectivity": [
"bluetooth",
"wifi"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s31.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "Espressif ESP32-S31 (16 MB Flash Quad, 16 MB PSRAM Octal)",
"upload": {
"arduino": {
"flash_extra_images": [
[
"0x10000",
"tasmota32s31-safeboot.bin"
]
]
},
"flash_size": "16MB",
"maximum_ram_size": 327680,
"maximum_size": 16777216,
"require_upload_port": true,
"speed": 2000000
},
"download": {
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s31/esp32-s31-function-coreboard-1/index.html",
"vendor": "Espressif"
}
+57
View File
@@ -0,0 +1,57 @@
{
"build": {
"arduino": {
"memory_type": "qio_opi"
},
"core": "esp32",
"extra_flags": [
"-DARDUINO_TASMOTA",
"-DBOARD_HAS_PSRAM",
"-DESP32_16M",
"-DESP32S31"
],
"f_cpu": "320000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"psram_type": "opi",
"mcu": "esp32s31",
"variant": "esp32s31",
"partitions": "partitions/esp32_partition_app3904k_fs11392k.csv"
},
"connectivity": [
"bluetooth",
"wifi"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s31.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "Espressif ESP32-S31 (16 MB Flash Quad, 16 MB PSRAM Octal)",
"upload": {
"arduino": {
"flash_extra_images": [
[
"0x10000",
"tasmota32s31ser-safeboot.bin"
]
]
},
"flash_size": "16MB",
"maximum_ram_size": 327680,
"maximum_size": 16777216,
"require_upload_port": true,
"speed": 2000000
},
"download": {
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s31/esp32-s31-function-coreboard-1/index.html",
"vendor": "Espressif"
}
+2 -2
View File
@@ -52,13 +52,13 @@
#define HSPI_HOST SPI3_HOST
#define VSPI_HOST SPI3_HOST
#elif CONFIG_IDF_TARGET_ESP32S3
#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S31
// SPI_HOST (SPI1_HOST) is not supported by the SPI Master and SPI Slave driver on ESP32-S2 and later
#define SPI_HOST SPI1_HOST
#define FSPI_HOST SPI2_HOST
#define HSPI_HOST SPI3_HOST
#define VSPI_HOST SPI3_HOST
// SPI_MOSI_DLEN_REG is not defined anymore in esp32s3
// SPI_MOSI_DLEN_REG is not defined anymore on S3/S31
#define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x)
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
+17 -7
View File
@@ -21,6 +21,9 @@
#include <Arduino.h>
#include <IPAddress.h>
#include <SBuffer.hpp>
#ifdef ESP32
#include "esp_memory_utils.h"
#endif // ESP32
/*********************************************************************************************\
* va_list extended support
@@ -255,7 +258,14 @@ char * copyStr(const char * str) {
}
const char ext_invalid_mem[] PROGMEM = "<--INVALID-->";
const uint32_t min_valid_ptr = 0x3F000000; // addresses below this line are invalid
static bool ext_ptr_is_readable(uint32_t ptr) {
#ifdef ESP32
return esp_ptr_byte_accessible((const void *)(uintptr_t)ptr);
#else // ESP32
return ptr >= 0x3F000000;
#endif // ESP32
}
int32_t ext_vsnprintf_P(char * out_buf, size_t buf_len, const char * fmt_P, va_list va) {
va_list va_cpy;
@@ -315,7 +325,7 @@ int32_t ext_vsnprintf_P(char * out_buf, size_t buf_len, const char * fmt_P, va_l
case 'H': // Hex, decimals indicates the length, default 2
{
if (decimals < 0) { decimals = 0; }
if (cur_val < min_valid_ptr) { new_val_str = ext_invalid_mem; }
if (!ext_ptr_is_readable(cur_val)) { new_val_str = ext_invalid_mem; }
else if (decimals > 0) {
char * hex_char = (char*) malloc(decimals*2 + 2);
if (hex_char == nullptr) { goto free_allocs; }
@@ -329,7 +339,7 @@ int32_t ext_vsnprintf_P(char * out_buf, size_t buf_len, const char * fmt_P, va_l
case 'B': // Pointer to SBuffer
{
if (cur_val < min_valid_ptr) { new_val_str = ext_invalid_mem; }
if (!ext_ptr_is_readable(cur_val)) { new_val_str = ext_invalid_mem; }
else {
const SBuffer & buf = *(const SBuffer*)cur_val;
size_t buf_len = (&buf != nullptr) ? buf.len() : 0;
@@ -358,7 +368,7 @@ int32_t ext_vsnprintf_P(char * out_buf, size_t buf_len, const char * fmt_P, va_l
case 'V': // 2-byte values, decimals indicates the length, default 2
{
if (decimals < 0) { decimals = 0; }
if (cur_val < min_valid_ptr) { new_val_str = ext_invalid_mem; }
if (!ext_ptr_is_readable(cur_val)) { new_val_str = ext_invalid_mem; }
else if (decimals > 0) {
uint32_t val_size = decimals*6 + 2;
char * val_char = (char*) malloc(val_size);
@@ -402,7 +412,7 @@ int32_t ext_vsnprintf_P(char * out_buf, size_t buf_len, const char * fmt_P, va_l
// Note: float MUST be passed by address, because C alsays promoted float to double when in vararg
case 'f': // input is `float`, printed to float with 2 decimals
{
if (cur_val < min_valid_ptr) { new_val_str = ext_invalid_mem; }
if (!ext_ptr_is_readable(cur_val)) { new_val_str = ext_invalid_mem; }
else {
bool truncate = false;
if (decimals < 0) {
@@ -438,7 +448,7 @@ int32_t ext_vsnprintf_P(char * out_buf, size_t buf_len, const char * fmt_P, va_l
// '%_X' outputs a 64 bits unsigned int to uppercase HEX with 16 digits
case 'X': // input is `uint64_t*`, printed as 16 hex digits (no prefix 0x)
{
if (cur_val < min_valid_ptr) { new_val_str = ext_invalid_mem; }
if (!ext_ptr_is_readable(cur_val)) { new_val_str = ext_invalid_mem; }
else {
if ((decimals < 0) || (decimals > 16)) { decimals = 16; }
U64toHex(*(uint64_t*)cur_val, hex, decimals);
@@ -452,7 +462,7 @@ int32_t ext_vsnprintf_P(char * out_buf, size_t buf_len, const char * fmt_P, va_l
// '%_U' outputs a 64 bits unsigned int to decimal
case 'U': // input is `uint64_t*`, printed as decimal
{
if (cur_val < min_valid_ptr) { new_val_str = ext_invalid_mem; }
if (!ext_ptr_is_readable(cur_val)) { new_val_str = ext_invalid_mem; }
else {
U64toStr(*(uint64_t*)cur_val, hex);
new_val_str = copyStr(hex);
@@ -212,7 +212,12 @@ bool WiFiHelper::setPhyMode(WiFiPhyMode_t mode) {
Thus you are more likely to experience disturbances.
The response speed and stability is better at HT20 for ESP units.
*/
// IDF < 6: WIFI_BW_HT20 / IDF >= 6: renamed to WIFI_BW20
#if ESP_IDF_VERSION_MAJOR < 6
esp_wifi_set_bandwidth(WIFI_IF_STA, WIFI_BW_HT20);
#else
esp_wifi_set_bandwidth(WIFI_IF_STA, WIFI_BW20);
#endif
/*
ESPEasy:
Set to use "Long GI" making it more resilliant to reflections
@@ -405,13 +410,13 @@ int WiFiHelper::hostByName(const char* aHostname, IPAddress& aResult)
String WiFiHelper::macAddress(void) {
uint8_t mac[6] = {0,0,0,0,0,0};
char macStr[18] = { 0 };
#ifdef CONFIG_SOC_HAS_WIFI
#if defined(SOC_WIFI_SUPPORTED) || defined(CONFIG_SOC_HAS_WIFI)
esp_read_mac(mac, ESP_MAC_WIFI_STA); // Local WiFi station MAC address
#elif CONFIG_ESP_WIFI_REMOTE_ENABLED
WiFi.macAddress(mac); // Remote WiFi station MAC address (devices without WiFi but hostedMCU)
#else // No CONFIG_SOC_HAS_WIFI
#else // defined(SOC_WIFI_SUPPORTED) || defined(CONFIG_SOC_HAS_WIFI)
esp_read_mac(mac, ESP_MAC_BASE); // Local hardware base MAC address
#endif // CONFIG_SOC_HAS_WIFI
#endif // defined(SOC_WIFI_SUPPORTED) || defined(CONFIG_SOC_HAS_WIFI)
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
return String(macStr);
}
+1 -1
View File
@@ -64,7 +64,7 @@ int GetBufferLength(){return bufferpos;};
void Init();
int Parser1();
void Parser2();
int SAMMain();
int SAMMain( void (*cb)(void *, unsigned char), void *cbdata );
void CopyStress();
void SetPhonemeLength();
void AdjustLengths();
+6 -10
View File
@@ -10,6 +10,7 @@
#include "l3loop.h"
#include "bitstream.h"
#include "l3bitstream.h"
#include "esp_cpu.h"
#include "esp_heap_caps.h"
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
@@ -226,8 +227,7 @@ Counters 2664123380 : 2664123448 : 2666717886 : 2668665908 : 2668859025
static unsigned char *shine_encode_buffer_internal(shine_global_config *config, int *written, int stride) {
counter[0] = portGET_RUN_TIME_COUNTER_VALUE(); // TASMOTA more portable solution
// counter[0] = xthal_get_ccount();
counter[0] = (uint32_t)esp_cpu_get_cycle_count();
if(config->mpeg.frac_slots_per_frame) {
config->mpeg.padding = (config->mpeg.slot_lag <= (config->mpeg.frac_slots_per_frame - 1.0));
config->mpeg.slot_lag += (config->mpeg.padding - config->mpeg.frac_slots_per_frame);
@@ -235,22 +235,18 @@ static unsigned char *shine_encode_buffer_internal(shine_global_config *config,
config->mpeg.bits_per_frame = 8*(config->mpeg.whole_slots_per_frame + config->mpeg.padding);
config->mean_bits = (config->mpeg.bits_per_frame - config->sideinfo_len)/config->mpeg.granules_per_frame;
counter[1] = portGET_RUN_TIME_COUNTER_VALUE(); // TASMOTA more portable solution
// counter[1] = xthal_get_ccount();
counter[1] = (uint32_t)esp_cpu_get_cycle_count();
/* apply mdct to the polyphase output */
// put on core 1
shine_mdct_sub(config, stride);
counter[2] = portGET_RUN_TIME_COUNTER_VALUE(); // TASMOTA more portable solution
// counter[2] = xthal_get_ccount();
counter[2] = (uint32_t)esp_cpu_get_cycle_count();
/* bit and noise allocation */
//put on core 0
shine_iteration_loop(config);
counter[3] = portGET_RUN_TIME_COUNTER_VALUE(); // TASMOTA more portable solution
// counter[3] = xthal_get_ccount();
counter[3] = (uint32_t)esp_cpu_get_cycle_count();
/* write the frame to the bitstream */
shine_format_bitstream(config);
counter[4] = portGET_RUN_TIME_COUNTER_VALUE(); // TASMOTA more portable solution
// counter[4] = xthal_get_ccount();
counter[4] = (uint32_t)esp_cpu_get_cycle_count();
/* Return data. */
*written = config->bs.data_position;
config->bs.data_position = 0;
@@ -32,6 +32,9 @@ License along with NeoPixel. If not, see
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C6)
#if !defined(ARDUINO_ARCH_ESP8266)
#include "soc/gpio_periph.h"
#if __has_include("soc/gpio_struct.h")
#include "soc/gpio_struct.h"
#endif
#endif
static inline uint32_t getCycleCount(void)
@@ -25,6 +25,12 @@
#if TASMOTALED_HARDWARE_RMT
#include <rom/gpio.h>
#include <esp_check.h>
#include "esp_idf_version.h"
#if ESP_IDF_VERSION_MAJOR >= 6
// IDF 6.x: gpio_matrix_out() renamed to gpio_matrix_output() in esp_private/gpio.h
#include <esp_private/gpio.h>
#define gpio_matrix_out(gpio, signal, out_inv, oen_inv) gpio_matrix_output((gpio_num_t)(gpio), signal, out_inv, oen_inv)
#endif
//**************************************************************************************************************
// enable AddLog support within a C++ library
@@ -24,6 +24,12 @@
#if TASMOTALED_HARDWARE_SPI
#include <rom/gpio.h>
#include "esp_idf_version.h"
#if ESP_IDF_VERSION_MAJOR >= 6
// IDF 6.x: gpio_matrix_out() renamed to gpio_matrix_output() in esp_private/gpio.h
#include <esp_private/gpio.h>
#define gpio_matrix_out(gpio, signal, out_inv, oen_inv) gpio_matrix_output((gpio_num_t)(gpio), signal, out_inv, oen_inv)
#endif
//**************************************************************************************************************
// enable AddLog support within a C++ library
@@ -226,6 +226,10 @@ bool directRead(IO_REG_TYPE mask)
#if ESP_IDF_VERSION_MAJOR >= 5
#include "soc/gpio_periph.h"
#endif // ESP_IDF_VERSION_MAJOR >= 5
#if __has_include("soc/gpio_struct.h")
// IDF 6.x: GPIO register struct no longer exported via gpio_periph.h
#include "soc/gpio_struct.h"
#endif
#define PIN_TO_BASEREG(pin) (0)
#define PIN_TO_BITMASK(pin) (pin)
#define IO_REG_TYPE uint32_t
@@ -237,6 +241,11 @@ IO_REG_TYPE directRead(IO_REG_TYPE pin)
{
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
return (GPIO.in.val >> pin) & 0x1;
#elif CONFIG_IDF_TARGET_ESP32S31
if ( pin < 32 )
return (GPIO.in.val >> pin) & 0x1;
else
return (GPIO.in1.val >> (pin - 32)) & 0x1;
#else // ESP32 with over 32 gpios
if ( pin < 32 )
return (GPIO.in >> pin) & 0x1;
@@ -252,6 +261,11 @@ void directWriteLow(IO_REG_TYPE pin)
{
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
GPIO.out_w1tc.val = ((uint32_t)1 << pin);
#elif CONFIG_IDF_TARGET_ESP32S31
if ( pin < 32 )
GPIO.out_w1tc.val = ((uint32_t)1 << pin);
else
GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32));
#else // ESP32 with over 32 gpios
if ( pin < 32 )
GPIO.out_w1tc = ((uint32_t)1 << pin);
@@ -265,6 +279,11 @@ void directWriteHigh(IO_REG_TYPE pin)
{
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
GPIO.out_w1ts.val = ((uint32_t)1 << pin);
#elif CONFIG_IDF_TARGET_ESP32S31
if ( pin < 32 )
GPIO.out_w1ts.val = ((uint32_t)1 << pin);
else
GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32));
#else // ESP32 with over 32 gpios
if ( pin < 32 )
GPIO.out_w1ts = ((uint32_t)1 << pin);
@@ -282,6 +301,11 @@ void directModeInput(IO_REG_TYPE pin)
// Input
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
GPIO.enable_w1tc.val = ((uint32_t)1 << (pin));
#elif CONFIG_IDF_TARGET_ESP32S31
if ( pin < 32 )
GPIO.enable_w1tc.val = ((uint32_t)1 << pin);
else
GPIO.enable1_w1tc.val = ((uint32_t)1 << (pin - 32));
#else // ESP32 with over 32 gpios
if ( pin < 32 )
GPIO.enable_w1tc = ((uint32_t)1 << pin);
@@ -300,6 +324,11 @@ void directModeOutput(IO_REG_TYPE pin)
// Output
#if SOC_GPIO_PIN_COUNT <= 32 || CONFIG_IDF_TARGET_ESP32P4
GPIO.enable_w1ts.val = ((uint32_t)1 << (pin));
#elif CONFIG_IDF_TARGET_ESP32S31
if ( pin < 32 )
GPIO.enable_w1ts.val = ((uint32_t)1 << pin);
else
GPIO.enable1_w1ts.val = ((uint32_t)1 << (pin - 32));
#else // ESP32 with over 32 gpios
if ( pin < 32 )
GPIO.enable_w1ts = ((uint32_t)1 << pin);
@@ -29,6 +29,10 @@
#define USE_ESP32_S3
#endif
#include "soc/gpio_periph.h"
#if __has_include("soc/gpio_struct.h")
// IDF 6.x: GPIO register struct no longer exported via gpio_periph.h
#include "soc/gpio_struct.h"
#endif
#include <rom/gpio.h>
// #include "driver/spi_master.h"
#endif
@@ -10,6 +10,10 @@
#include "esp32-hal-spi.h"
#include "driver/spi_master.h"
#include "soc/gpio_periph.h"
#if __has_include("soc/gpio_struct.h")
// IDF 6.x: GPIO register struct no longer exported via gpio_periph.h
#include "soc/gpio_struct.h"
#endif
#endif
#ifndef ESP32
@@ -4,7 +4,7 @@
#pragma once
#if CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
#include "esp_cache.h"
#define CACHE_WRITEBACK_ADDR(addr, size) esp_cache_msync((void*)addr, size, ESP_CACHE_MSYNC_FLAG_DIR_C2M)
#else
+15
View File
@@ -313,10 +313,18 @@ uDisplay::uDisplay(char *lp) : Renderer(800, 600) {
// Parse data pins directly into RGB config
// Note: byte order may be swapped later based on lvgl_param.swap_color
for (uint32_t cnt = 0; cnt < 8; cnt++) {
#if ESP_IDF_VERSION_MAJOR < 6
panel_config->rgb.data_gpio_nums[cnt + 8] = next_val(&lp1);
#else
panel_config->rgb.data_gpio_nums[cnt + 8] = (gpio_num_t)next_val(&lp1);
#endif
}
for (uint32_t cnt = 0; cnt < 8; cnt++) {
#if ESP_IDF_VERSION_MAJOR < 6
panel_config->rgb.data_gpio_nums[cnt] = next_val(&lp1);
#else
panel_config->rgb.data_gpio_nums[cnt] = (gpio_num_t)next_val(&lp1);
#endif
}
spi_speed = next_val(&lp1);
#endif //SOC_LCD_RGB_SUPPORTED
@@ -1326,13 +1334,20 @@ if (interface == _UDSP_SPI) {
panel_config->rgb.timings.h_res = gxs;
panel_config->rgb.timings.v_res = gys;
panel_config->rgb.data_width = 16; // RGB565 in parallel mode, thus 16bit in width
#if ESP_IDF_VERSION_MAJOR < 6
// sram_trans_align / psram_trans_align removed in IDF 6.x
panel_config->rgb.sram_trans_align = 8;
panel_config->rgb.psram_trans_align = 64;
#endif
// Handle byte swapping by swapping the low and high byte pin assignments
if (lvgl_param.swap_color) {
for (uint32_t cnt = 0; cnt < 8; cnt++) {
#if ESP_IDF_VERSION_MAJOR < 6
int8_t temp = panel_config->rgb.data_gpio_nums[cnt];
#else
gpio_num_t temp = panel_config->rgb.data_gpio_nums[cnt];
#endif
panel_config->rgb.data_gpio_nums[cnt] = panel_config->rgb.data_gpio_nums[cnt + 8];
panel_config->rgb.data_gpio_nums[cnt + 8] = temp;
}
@@ -8,6 +8,7 @@
#include "esp_lcd_panel_ops.h"
#include "esp_lcd_mipi_dsi.h"
#include "esp_ldo_regulator.h"
#include "esp_idf_version.h"
#include "driver/gpio.h"
#include <rom/cache.h>
#include "esp_rom_sys.h"
@@ -70,7 +71,12 @@ DSIPanel::DSIPanel(const DSIPanelConfig& config)
dpi_config.dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT;
dpi_config.dpi_clock_freq_mhz = cfg.pixel_clock_hz / 1000000;
dpi_config.virtual_channel = 0;
#if ESP_IDF_VERSION_MAJOR >= 6
dpi_config.in_color_format = LCD_COLOR_FMT_RGB565;
dpi_config.out_color_format = LCD_COLOR_FMT_RGB565;
#else
dpi_config.pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB565;
#endif
dpi_config.num_fbs = 1;
dpi_config.video_timing.h_size = cfg.width;
dpi_config.video_timing.v_size = cfg.height;
@@ -80,8 +86,10 @@ DSIPanel::DSIPanel(const DSIPanelConfig& config)
dpi_config.video_timing.vsync_back_porch = cfg.timing.v_back_porch;
dpi_config.video_timing.vsync_pulse_width = cfg.timing.v_sync_pulse;
dpi_config.video_timing.vsync_front_porch = cfg.timing.v_front_porch;
#if ESP_IDF_VERSION_MAJOR < 6
dpi_config.flags.use_dma2d = 1;
#endif
AddLog(3, "DSI: DPI config: clk=%dMHz res=%dx%d", dpi_config.dpi_clock_freq_mhz, cfg.width, cfg.height);
AddLog(3, "DSI: H timing: BP=%d PW=%d FP=%d", cfg.timing.h_back_porch, cfg.timing.h_sync_pulse, cfg.timing.h_front_porch);
AddLog(3, "DSI: V timing: BP=%d PW=%d FP=%d", cfg.timing.v_back_porch, cfg.timing.v_sync_pulse, cfg.timing.v_front_porch);
@@ -94,6 +102,12 @@ DSIPanel::DSIPanel(const DSIPanelConfig& config)
return;
}
AddLog(3, "DSI: DPI panel created");
#if ESP_IDF_VERSION_MAJOR >= 6
ret = esp_lcd_dpi_panel_enable_dma2d(panel_handle);
if (ret != ESP_OK) {
AddLog(3, "DSI: Failed to enable DMA2D: %d", ret);
}
#endif
// Step 6: Reset via GPIO (from config)
if (cfg.reset_pin >= 0) {
@@ -9,7 +9,24 @@
#define GPIO_SET_SLOW(A) digitalWrite(A, HIGH)
#define GPIO_CLR_SLOW(A) digitalWrite(A, LOW)
#else // ESP32
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_IDF_TARGET_ESP32S31
static inline void uDisplayGpioClear(uint32_t pin) {
if (pin < 32) {
GPIO.out_w1tc.val = (1U << pin);
} else {
GPIO.out1_w1tc.val = (1U << (pin - 32));
}
}
static inline void uDisplayGpioSet(uint32_t pin) {
if (pin < 32) {
GPIO.out_w1ts.val = (1U << pin);
} else {
GPIO.out1_w1ts.val = (1U << (pin - 32));
}
}
#define GPIO_CLR(A) uDisplayGpioClear(A)
#define GPIO_SET(A) uDisplayGpioSet(A)
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
#define GPIO_CLR(A) GPIO.out_w1tc.val = (1 << A)
#define GPIO_SET(A) GPIO.out_w1ts.val = (1 << A)
#else // plain ESP32 or S3
@@ -272,12 +289,16 @@ void SPIController::hw_write9(uint8_t val, uint8_t dc) {
else regvalue &= 0x7f;
if (val & 1) regvalue |= 0x8000;
REG_SET_BIT(SPI_USER_REG(3), SPI_USR_MOSI);
REG_WRITE(SPI_MOSI_DLEN_REG(3), 9 - 1);
uint32_t *dp = (uint32_t*)SPI_W0_REG(3);
uint8_t spi_index = 3;
#if CONFIG_IDF_TARGET_ESP32S31
if (spi_config.bus_nr == 1) spi_index = 2;
#endif
REG_SET_BIT(SPI_USER_REG(spi_index), SPI_USR_MOSI);
REG_WRITE(SPI_MOSI_DLEN_REG(spi_index), 9 - 1);
uint32_t *dp = (uint32_t*)SPI_W0_REG(spi_index);
*dp = regvalue;
REG_SET_BIT(SPI_CMD_REG(3), SPI_USR);
while (REG_GET_FIELD(SPI_CMD_REG(3), SPI_USR));
REG_SET_BIT(SPI_CMD_REG(spi_index), SPI_USR);
while (REG_GET_FIELD(SPI_CMD_REG(spi_index), SPI_USR));
}
}
#else
@@ -319,6 +340,9 @@ bool SPIController::initDMA(uint16_t width, uint16_t flushlines, uint8_t data) {
}
if (spi_config.bus_nr == 1){
AddLog(3,"DSP: dma spi 1");
#if CONFIG_IDF_TARGET_ESP32S31
spi_host = FSPI_HOST;
#endif
} else if (spi_config.bus_nr == 2){
AddLog(3,"DSP: dma spi 2");
spi_host = HSPI_HOST;
@@ -115,7 +115,13 @@ public:
uint8_t getMaxMessageLength () override { return ESPNOW_MAX_MESSAGE_LENGTH; }
void enableTransmit (bool enable) override;
bool setChannel (uint8_t channel, wifi_second_chan_t ch2 = WIFI_SECOND_CHAN_NONE);
bool setWiFiBandwidth (wifi_interface_t iface = WIFI_IF_AP, wifi_bandwidth_t bw = WIFI_BW_HT20);
bool setWiFiBandwidth (wifi_interface_t iface = WIFI_IF_AP, wifi_bandwidth_t bw =
#if ESP_IDF_VERSION_MAJOR < 6
WIFI_BW_HT20
#else
WIFI_BW20 // IDF 6.x: WIFI_BW_HT20 renamed to WIFI_BW20
#endif
);
bool readyToSendData ();
protected:
@@ -31,10 +31,16 @@
# error "No ESP capability header found"
#endif
#if SOC_MPI_SUPPORTED
#if SOC_MPI_SUPPORTED && __has_include("rom/bigint.h")
#include "rom/bigint.h"
#include "t_inner.h"
#ifdef CONFIG_IDF_TARGET_ESP32
// dport_access.h provides DPORT_STALL_OTHER_CPU_START/END for ESP32 dual-core safety.
// Must be included at file scope — picolibc's stdio.h (IDF 6.x) contains static inlines
// that are invalid inside a function body.
#include "dport_access.h"
#endif
#define WORDS 8 /* 8×32-bit limbs */
@@ -133,7 +139,6 @@ static inline void field_mul(uint32_t *dst, const uint32_t *a, const uint32_t *b
ets_bigint_getz(dst, WORDS);
ets_bigint_disable();
#else
#include "dport_access.h"
uint32_t ram_a[16] __attribute__((aligned(16)));
uint32_t ram_b[16] __attribute__((aligned(16)));
uint32_t ram_tmp[16] __attribute__((aligned(16)));
@@ -31,7 +31,7 @@
# error "No ESP capability header found"
#endif
#if SOC_MPI_SUPPORTED
#if SOC_MPI_SUPPORTED && __has_include("rom/bigint.h")
#include <stdint.h>
#include "rom/bigint.h"
@@ -50,8 +50,8 @@ enum LoggingLevels {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_D
// replicated from `tasmota.h`
#if CONFIG_IDF_TARGET_ESP32
const uint8_t MAX_PWMS = 16; // ESP32: 16 ledc PWM channels in total - TODO for now
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
const uint8_t MAX_PWMS = 8; // ESP32S2/S3: 8 ledc PWM channels in total
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S31
const uint8_t MAX_PWMS = 8; // ESP32S2/S3/S31: 8 ledc PWM channels in total
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6
const uint8_t MAX_PWMS = 6; // ESP32C2/C3/C6: 6 ledc PWM channels in total
#else
@@ -8,7 +8,14 @@
#include "be_constobj.h"
#include "be_mapping.h"
#if __has_include("rom/crc.h")
#include "rom/crc.h"
#else
#include "esp_rom_crc.h"
#define crc32_le esp_rom_crc32_le
#define crc16_le esp_rom_crc16_le
#define crc8_le esp_rom_crc8_le
#endif
static uint32_t c_crc32(uint32_t crc, const uint8_t* buf, size_t size) {
return crc32_le(crc, buf, size);
@@ -3,6 +3,9 @@
*
*/
/* ARM Helium/MVE SIMD implementation - only compiled on ARM targets */
#if defined(__arm__) || defined(__ARM_ARCH)
#ifndef __ASSEMBLY__
#define __ASSEMBLY__
#endif
@@ -711,3 +714,5 @@ export_set argb8888, argb8888, 32, 32, normal
#endif /*LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_HELIUM && defined(__ARM_FEATURE_MVE) && __ARM_FEATURE_MVE && LV_USE_NATIVE_HELIUM_ASM*/
#endif /* defined(__arm__) || defined(__ARM_ARCH) */
@@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
safeboot, app, factory, 0x10000, 0x100000,
app0, app, ota_0, 0x110000, 0x3D0000,
spiffs, data, spiffs, 0x4E0000,0xB20000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 safeboot app factory 0x10000 0x100000
5 app0 app ota_0 0x110000 0x3D0000
6 spiffs data spiffs 0x4E0000 0xB20000
@@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
safeboot, app, factory, 0x10000, 0xF0000,
app0, app, ota_0, 0x100000, 0x3D0000,
spiffs, data, spiffs, 0x4D0000,0xB30000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 safeboot app factory 0x10000 0xF0000
5 app0 app ota_0 0x100000 0x3D0000
6 spiffs data spiffs 0x4D0000 0xB30000
+94
View File
@@ -0,0 +1,94 @@
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#include <stdint.h>
#include "soc/soc_caps.h"
#define USB_VID 0x303a
#define USB_PID 0x1001
#define PIN_RGB_LED 60
// BUILTIN_LED can be used in new Arduino API digitalWrite() like in Blink.ino
static const uint8_t LED_BUILTIN = SOC_GPIO_PIN_COUNT + PIN_RGB_LED;
#define BUILTIN_LED LED_BUILTIN
#define LED_BUILTIN LED_BUILTIN
#define RGB_BUILTIN LED_BUILTIN
#define RGB_BRIGHTNESS 64
static const uint8_t TX = 58;
static const uint8_t RX = 59;
static const uint8_t SDA = 2;
static const uint8_t SCL = 3;
static const uint8_t SS = 37;
static const uint8_t MOSI = 38;
static const uint8_t MISO = 39;
static const uint8_t SCK = 40;
static const uint8_t A0 = 42;
static const uint8_t A1 = 43;
static const uint8_t A2 = 44;
static const uint8_t A3 = 45;
static const uint8_t A4 = 46;
static const uint8_t A5 = 47;
static const uint8_t A6 = 48;
static const uint8_t A7 = 49;
static const uint8_t A8 = 50;
static const uint8_t A9 = 51;
static const uint8_t A10 = 52;
static const uint8_t A11 = 53;
static const uint8_t A12 = 54;
static const uint8_t A13 = 55;
static const uint8_t A14 = 56;
static const uint8_t A15 = 57;
static const uint8_t T0 = 6;
static const uint8_t T1 = 7;
static const uint8_t T2 = 8;
static const uint8_t T3 = 9;
static const uint8_t T4 = 10;
static const uint8_t T5 = 11;
static const uint8_t T6 = 12;
static const uint8_t T7 = 13;
static const uint8_t T8 = 14;
static const uint8_t T9 = 15;
static const uint8_t T10 = 16;
static const uint8_t T11 = 17;
static const uint8_t T12 = 18;
static const uint8_t T13 = 19;
/* ESP32-S31 EV Function board specific definitions */
#define ETH_PHY_TYPE ETH_PHY_YT8531DC
#define ETH_PHY_ADDR -1
#define ETH_PHY_IRQ 4
#define ETH_PHY_MDC 5
#define ETH_PHY_MDIO 6
#define ETH_PHY_POWER 7
#define ETH_RMII_TX0 8
#define ETH_RMII_TX1 9
#define ETH_RMII_TX2 10
#define ETH_RMII_TX3 11
#define ETH_RMII_TX_CTL 12
#define ETH_RMII_TX_CLK 13
#define ETH_RMII_RX_CLK 14
#define ETH_RMII_RX_CTL 15
#define ETH_RMII_RX3 16
#define ETH_RMII_RX2 17
#define ETH_RMII_RX1 18
#define ETH_RMII_RX0 19
#define ETH_CLK_MODE EMAC_CLK_EXT_IN
#define BOARD_HAS_SDMMC
#define BOARD_SDMMC_SLOT 0
#define SCL1 50
#define SDA1 51
#define I2S_MCLK 52
#define I2S_SCLK 53
#define I2S_DOUT 54
#define I2S_LRCK 55
#define I2S_DIN 56
#define PA_CTRL 57
#endif /* Pins_Arduino_h */
+2 -2
View File
@@ -19,8 +19,8 @@ def bin_map_copy(source, target, env):
if env["PIOPLATFORM"] == "espressif32":
if("safeboot" in firmware_name):
SAFEBOOT_SIZE = firsttarget.stat().st_size
if SAFEBOOT_SIZE > 851967:
print(Fore.RED + "!!! Tasmota safeboot size is too big with {} bytes. Max size is 851967 bytes !!! ".format(
if SAFEBOOT_SIZE > 983039:
print(Fore.RED + "!!! Tasmota safeboot size is too big with {} bytes. Max size is 983039 bytes !!! ".format(
SAFEBOOT_SIZE
)
)
+33
View File
@@ -146,6 +146,28 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s31-safeboot]
platform = https://github.com/Jason2866/platform-espressif32.git#IDF61
extends = env:tasmota32_base
board = esp32s31-qio_opi
board_build.app_partition_name = safeboot
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s31-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s31ser-safeboot]
platform = https://github.com/Jason2866/platform-espressif32.git#IDF61
extends = env:tasmota32_base
board = esp32s31ser-qio_opi
board_build.app_partition_name = safeboot
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s31ser-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32c5-safeboot]
extends = env:tasmota32_base
board = esp32c5
@@ -399,6 +421,17 @@ lib_ignore = ${env:tasmota32_base.lib_ignore}
Micro-RTSP
epdiy
[env:tasmota32s31]
platform = https://github.com/Jason2866/platform-espressif32.git#IDF61
extends = env:tasmota32_base
board = esp32s31-qio_opi
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s31.bin"'
lib_ignore = ${env:tasmota32_base.lib_ignore}
Micro-RTSP
epdiy
[env:tasmota32-webcam]
extends = env:tasmota32_base
board = esp32-fix
+447 -263
View File
@@ -1,286 +1,470 @@
CONFIG_AUTOSTART_ARDUINO=y
# CONFIG_WS2812_LED_ENABLE is not set
CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y
#
# Build type
#
CONFIG_APP_REPRODUCIBLE_BUILD=y
CONFIG_COMPILER_HIDE_PATHS_MACROS=y
# end of Build type
#
# Bootloader config
#
#
# Log
#
CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
# end of Log
CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS=y
# end of Bootloader config
#
# Application manager
#
CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y
# CONFIG_APP_COMPILE_TIME_DATE is not set
CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
# end of Application manager
#
# Boot ROM Behavior
#
CONFIG_BOOT_ROM_LOG_ALWAYS_OFF=y
CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS=y
# end of Boot ROM Behavior
#
# Serial flasher config
#
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
# end of Serial flasher config
#
# Arduino Configuration
#
CONFIG_AUTOSTART_ARDUINO=y
#
# Debug Log Configuration
#
CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_NONE=y
CONFIG_I2S_SUPPRESS_DEPRECATE_WARN=y
CONFIG_I2S_ISR_IRAM_SAFE=y
CONFIG_RMT_SUPPRESS_DEPRECATE_WARN=y
CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN=y
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
# end of Debug Log Configuration
# end of Arduino Configuration
#
# Compiler options
#
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y
CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT=y
CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS=y
CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y
CONFIG_COMPILER_DISABLE_GCC12_WARNINGS=y
CONFIG_COMPILER_DISABLE_GCC13_WARNINGS=y
CONFIG_COMPILER_DISABLE_GCC14_WARNINGS=y
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y
CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT=y
CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
# CONFIG_ESP_ERR_TO_NAME_LOOKUP is not set
# CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR is not set
CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS=y
# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set
# CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set
# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set
CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH=y
CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM=y
CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
CONFIG_ESP_IPC_TASK_STACK_SIZE=1024
CONFIG_ESP_MAIN_TASK_STACK_SIZE=4096
CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2048
CONFIG_ESP_TASK_WDT_PANIC=y
# CONFIG_ESP_SYSTEM_HW_STACK_GUARD is not set
CONFIG_ESP_TIMER_TASK_STACK_SIZE=4096
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE=y
# CONFIG_ESP_WIFI_MBEDTLS_CRYPTO is not set
# CONFIG_ESP_WIFI_FTM_ENABLE is not set
# CONFIG_ESP_WIFI_GMAC_SUPPORT is not set
# CONFIG_ESP_WIFI_CSI_ENABLED is not set
# CONFIG_ESP_WIFI_ENABLE_WPA3_SAE is not set
# CONFIG_ESP_WIFI_ENABLE_SAE_PK is not set
# CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT is not set
# CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT is not set
# CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT is not set
# CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA is not set
CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=0
# CONFIG_ESP_WIFI_IRAM_OPT is not set
# CONFIG_ESP_WIFI_RX_IRAM_OPT is not set
CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=8
CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=8
CONFIG_ESP_WIFI_CACHE_TX_BUFFER_NUM=16
CONFIG_ESP_PHY_REDUCE_TX_POWER=y
CONFIG_ETH_TRANSMIT_MUTEX=y
CONFIG_ETH_SPI_ETHERNET_DM9051=y
CONFIG_ETH_SPI_ETHERNET_W5500=y
CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL=y
CONFIG_FATFS_CODEPAGE_850=y
CONFIG_FATFS_LFN_STACK=y
# CONFIG_FATFS_API_ENCODING_ANSI_OEM is not set
CONFIG_FATFS_API_ENCODING_UTF_8=y
# CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT is not set
CONFIG_FMB_TIMER_PORT_ENABLED=y
CONFIG_FREERTOS_HZ=1000
# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set
# CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION is not set
# CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT is not set
CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=2304
# CONFIG_FREERTOS_FPU_IN_ISR is not set
CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y
CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y
CONFIG_HAL_ASSERTION_DISABLE=y
CONFIG_HEAP_POISONING_LIGHT=y
CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024
CONFIG_HTTPD_WS_SUPPORT=y
CONFIG_LOG_DEFAULT_LEVEL_NONE=y
# CONFIG_LOG_COLORS is not set
CONFIG_LWIP_LOCAL_HOSTNAME="tasmota"
CONFIG_LWIP_MAX_SOCKETS=16
CONFIG_LWIP_SO_RCVBUF=y
CONFIG_LWIP_IP_FORWARD=y
CONFIG_LWIP_IPV4_NAPT=y
# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
CONFIG_LWIP_TCP_SYNMAXRTX=6
CONFIG_LWIP_TCP_MSS=1436
CONFIG_LWIP_TCP_RTO_TIME=3000
CONFIG_LWIP_TCP_MSL=6000
CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=2000
CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=2560
CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0=y
CONFIG_LWIP_IPV6_AUTOCONFIG=y
CONFIG_LWIP_IPV6_RDNSS_MAX_DNS_SERVERS=2
CONFIG_LWIP_MAX_SOCKETS=16
CONFIG_LWIP_DHCP_RESTORE_LAST_IP=n
CONFIG_LWIP_DHCP_OPTIONS_LEN=128
CONFIG_LWIP_SNTP_MAX_SERVERS=3
# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
CONFIG_LWIP_SNTP_UPDATE_DELAY=10800000
CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=48
CONFIG_LWIP_TCP_RECVMBOX_SIZE=16
CONFIG_LWIP_UDP_RECVMBOX_SIZE=64
CONFIG_NEWLIB_NANO_FORMAT=y
# CONFIG_DAC_DMA_AUTO_16BIT_ALIGN is not set
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y
CONFIG_MBEDTLS_TLS_DISABLED=y
# CONFIG_MBEDTLS_TLS_ENABLED is not set
# CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN is not set
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=10
# CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE is not set
# CONFIG_MBEDTLS_PKCS7_C is not set
# CONFIG_MBEDTLS_ERROR_STRINGS is not set
CONFIG_COMPILER_DISABLE_GCC15_WARNINGS=y
# end of Compiler options
#
# Symmetric Ciphers
# Component config
#
CONFIG_MBEDTLS_AES_C=y
# CONFIG_MBEDTLS_CAMELLIA_C is not set
# CONFIG_MBEDTLS_DES_C is not set
# CONFIG_MBEDTLS_BLOWFISH_C is not set
# CONFIG_MBEDTLS_XTEA_C is not set
# CONFIG_MBEDTLS_CCM_C is not set
# CONFIG_MBEDTLS_GCM_C is not set
# CONFIG_MBEDTLS_NIST_KW_C is not set
# end of Symmetric Ciphers
#
# TLS Key Exchange Methods
#
CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y
# CONFIG_MBEDTLS_PSK_MODES is not set
# CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE is not set
# CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA is not set
# CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA is not set
# CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA is not set
# CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA is not set
CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y
# CONFIG_MBEDTLS_SSL_RENEGOTIATION is not set
# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set
# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set
# CONFIG_MBEDTLS_SSL_ALPN is not set
# CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS is not set
CONFIG_MBEDTLS_CMAC_C=y
CONFIG_MBEDTLS_ROM_MD5=y
CONFIG_MBEDTLS_HARDWARE_ECC=y
CONFIG_MBEDTLS_HARDWARE_AES=y
CONFIG_MBEDTLS_HARDWARE_MPI=y
CONFIG_MBEDTLS_HARDWARE_SHA=y
# CONFIG_MBEDTLS_ECC_OTHER_CURVES_SOFT_FALLBACK is not set
# CONFIG_MBEDTLS_HAVE_TIME is not set
# CONFIG_MBEDTLS_ECDSA_DETERMINISTIC is not set
# CONFIG_MBEDTLS_SHA512_C is not set
# CONFIG_MBEDTLS_RIPEMD160_C is not set
#
# Certificates
#
# CONFIG_MBEDTLS_PEM_PARSE_C is not set
# CONFIG_MBEDTLS_PEM_WRITE_C is not set
# CONFIG_MBEDTLS_X509_CRL_PARSE_C is not set
# CONFIG_MBEDTLS_X509_CSR_PARSE_C is not set
# end of Certificates
CONFIG_MBEDTLS_ECP_C=y
CONFIG_MBEDTLS_ECDH_C=y
CONFIG_MBEDTLS_ECDSA_C=y
CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
# CONFIG_MBEDTLS_DHM_C is not set
# CONFIG_MBEDTLS_ECJPAKE_C is not set
# CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS is not set
# CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS is not set
# CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED is not set
# CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED is not set
# CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM is not set
# CONFIG_MBEDTLS_ECP_NIST_OPTIM is not set
# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set
# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set
CONFIG_OPENSSL_ASSERT_DO_NOTHING=y
CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=2048
CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED=y
# CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE is not set
CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y
CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=10
CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=2
CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=4096
# CONFIG_UNITY_ENABLE_FLOAT is not set
# CONFIG_UNITY_ENABLE_DOUBLE is not set
# CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER is not set
# CONFIG_USE_WAKENET is not set
# CONFIG_USE_MULTINET is not set
# CONFIG_MBEDTLS_FS_IO is not set
# CONFIG_VFS_SUPPORT_SELECT is not set
# CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT is not set
# CONFIG_VFS_SUPPORT_TERMIOS is not set
# CONFIG_SPI_MASTER_ISR_IN_IRAM is not set
# CONFIG_SPI_SLAVE_ISR_IN_IRAM is not set
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=4096
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=0
CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=1
CONFIG_DSP_MAX_FFT_SIZE_1024=y
CONFIG_LITTLEFS_MAX_PARTITIONS=2
CONFIG_LITTLEFS_MULTIVERSION=y
CONFIG_LITTLEFS_DISK_VERSION_2_0=y
#
# Disable Cameras not used
#
# CONFIG_OV7670_SUPPORT is not set
# CONFIG_OV7725_SUPPORT is not set
# CONFIG_NT99141_SUPPORT is not set
# CONFIG_GC2145_SUPPORT is not set
# CONFIG_GC032A_SUPPORT is not set
# CONFIG_GC0308_SUPPORT is not set
# CONFIG_BF3005_SUPPORT is not set
# CONFIG_BF20A6_SUPPORT is not set
# CONFIG_SC030IOT_SUPPORT is not set
#
# Bluetooth
#
CONFIG_BT_ENABLED=y
CONFIG_BT_STACK_NO_LOG=y
# CONFIG_BT_BLE_42_FEATURES_SUPPORTED is not set
# CONFIG_BLE_MESH is not set
CONFIG_BT_NIMBLE_ENABLED=y
CONFIG_BT_NIMBLE_LOG_LEVEL_NONE=y
CONFIG_BT_NIMBLE_MAX_CONNECTIONS=1
# CONFIG_BT_NIMBLE_NVS_PERSIST is not set
# CONFIG_BT_NIMBLE_CRYPTO_STACK_MBEDTLS is not set
# CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_2M_PHY is not set
# CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_CODED_PHY is not set
# CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT is not set
CONFIG_BT_CTRL_MODEM_SLEEP=y
CONFIG_BT_CTRL_MODEM_SLEEP_MODE_1=y
CONFIG_BT_CTRL_LPCLK_SEL_MAIN_XTAL=y
# CONFIG_BT_CTRL_LPCLK_SEL_RTC_SLOW is not set
CONFIG_BT_LOG_HCI_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_BTM_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_SDP_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_GAP_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_BNEP_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_PAN_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_A2D_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_AVDT_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_AVCT_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_AVRC_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_MCA_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_HID_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_APPL_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_GATT_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_SMP_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_BTIF_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_BTC_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_OSI_TRACE_LEVEL_NONE=y
CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_NONE=y
#
# NimBLE Options
#
#
# GAP
#
CONFIG_BT_NIMBLE_MAX_CONNECTIONS=2
# end of GAP
#
# BLE 5.x Features
#
CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT=n
# end of BLE 5.x Features
#
# Debugging/Testing
#
CONFIG_BT_NIMBLE_LOG_LEVEL_NONE=y
# end of Debugging/Testing
# end of NimBLE Options
# end of Bluetooth
#
# ESP-TLS
#
CONFIG_ESP_TLS_CUSTOM_STACK=y
# end of ESP-TLS
#
# Common ESP-related
#
CONFIG_ESP_ERR_TO_NAME_LOOKUP=n
# end of Common ESP-related
#
# ESP-Driver:I2S Configurations
#
CONFIG_I2S_ISR_IRAM_SAFE=y
# end of ESP-Driver:I2S Configurations
#
# ESP-Driver:SPI Configurations
#
CONFIG_SPI_MASTER_ISR_IN_IRAM=n
CONFIG_SPI_SLAVE_ISR_IN_IRAM=n
# end of ESP-Driver:SPI Configurations
#
# Ethernet
#
CONFIG_ETH_TRANSMIT_MUTEX=y
# end of Ethernet
#
# Event Loop Library
#
CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=n
# end of Event Loop Library
#
# ESP HTTP client
#
CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=n
# end of ESP HTTP client
#
# HTTP Server
#
CONFIG_HTTPD_WS_SUPPORT=y
# end of HTTP Server
#
# Hardware Settings
#
#
# Sleep Config
#
CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=n
# end of Sleep Config
#
# RTC Clock Config
#
CONFIG_RTC_CLK_CAL_CYCLES=576
# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 is not set
# end of RTC Clock Config
# end of Hardware Settings
#
# ESP-Driver:LCD Controller Configurations
#
CONFIG_LCD_RGB_ISR_IRAM_SAFE=y
# end of ESP-Driver:LCD Controller Configurations
#
# PHY
#
CONFIG_ESP_PHY_REDUCE_TX_POWER=y
# end of PHY
#
# ESP PSRAM
#
CONFIG_SPIRAM=y
#
# ESP System Settings
#
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
CONFIG_ESP_SYSTEM_MEMPROT=n
CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2048
CONFIG_ESP_MAIN_TASK_STACK_SIZE=4096
CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
CONFIG_ESP_TASK_WDT_PANIC=y
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=n
CONFIG_ESP_SYSTEM_HW_STACK_GUARD=n
# end of ESP System Settings
#
# ESP Timer (High Resolution Timer)
#
CONFIG_ESP_TIMER_TASK_STACK_SIZE=4096
# end of ESP Timer (High Resolution Timer)
#
# Wi-Fi
#
CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=8
CONFIG_ESP_WIFI_IRAM_OPT=n
CONFIG_ESP_WIFI_RX_IRAM_OPT=n
CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=n
CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=n
CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_SOFTAP=n
CONFIG_ESP_WIFI_GMAC_SUPPORT=n
CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=0
CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=n
# end of Wi-Fi
#
# Wi-Fi Remote
#
CONFIG_ESP_WIFI_REMOTE_ENABLED=n
# end of Wi-Fi Remote
#
# FAT Filesystem support
#
CONFIG_FATFS_LFN_STACK=y
CONFIG_FATFS_CODEPAGE_850=y
CONFIG_FATFS_API_ENCODING_UTF_8=y
# end of FAT Filesystem support
#
# FreeRTOS
#
#
# Kernel
#
CONFIG_FREERTOS_HZ=1000
CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=2304
CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=3120
# end of Kernel
#
# Port
#
CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y
# end of Port
# end of FreeRTOS
#
# Hardware Abstraction Layer (HAL) and Low Level (LL)
#
CONFIG_HAL_ASSERTION_DISABLE=y
# end of Hardware Abstraction Layer (HAL) and Low Level (LL)
#
# Heap memory debugging
#
CONFIG_HEAP_POISONING_LIGHT=y
# end of Heap memory debugging
#
# IEEE 802.15.4
#
CONFIG_IEEE802154_ENABLED=n
# end of IEEE 802.15.4
#
# Log
#
#
# Log Level
#
CONFIG_LOG_DEFAULT_LEVEL_NONE=y
# end of Log Level
# end of Log
#
# LWIP
#
CONFIG_LWIP_LOCAL_HOSTNAME="tasmota"
CONFIG_LWIP_MAX_SOCKETS=16
CONFIG_LWIP_IP_FORWARD=y
CONFIG_LWIP_IPV4_NAPT=y
CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=48
CONFIG_LWIP_DHCP_OPTIONS_LEN=128
CONFIG_LWIP_IPV6_AUTOCONFIG=y
CONFIG_LWIP_IPV6_RDNSS_MAX_DNS_SERVERS=2
#
# TCP
#
CONFIG_LWIP_TCP_SYNMAXRTX=6
CONFIG_LWIP_TCP_MSS=1436
CONFIG_LWIP_TCP_MSL=6000
CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=2000
CONFIG_LWIP_TCP_RECVMBOX_SIZE=16
CONFIG_LWIP_TCP_RTO_TIME=3000
# end of TCP
#
# UDP
#
CONFIG_LWIP_UDP_RECVMBOX_SIZE=64
# end of UDP
CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=2560
CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0=y
#
# SNTP
#
CONFIG_LWIP_SNTP_MAX_SERVERS=3
CONFIG_LWIP_SNTP_UPDATE_DELAY=10800000
# end of SNTP
# end of LWIP
#
# mbedTLS
#
#
# Core Configuration
#
CONFIG_MBEDTLS_FS_IO=n
CONFIG_MBEDTLS_THREADING_C=n
CONFIG_MBEDTLS_ERROR_STRINGS=n
CONFIG_MBEDTLS_VERSION_C=n
CONFIG_MBEDTLS_HAVE_TIME=n
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=n
CONFIG_MBEDTLS_SELF_TEST=n
# end of Core Configuration
#
# Certificates
#
CONFIG_MBEDTLS_X509_USE_C=n
CONFIG_MBEDTLS_X509_CRL_PARSE_C=n
CONFIG_MBEDTLS_X509_CSR_PARSE_C=n
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n
# end of Certificates
CONFIG_MBEDTLS_TLS_ENABLED=n
#
# Symmetric Ciphers
#
CONFIG_MBEDTLS_CCM_C=n
CONFIG_MBEDTLS_CIPHER_MODE_CFB=n
CONFIG_MBEDTLS_CIPHER_MODE_CTR=n
CONFIG_MBEDTLS_CIPHER_MODE_OFB=n
CONFIG_MBEDTLS_GCM_C=n
CONFIG_MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH=y
# end of Symmetric Ciphers
#
# Asymmetric Ciphers
#
#
# Supported Curves
#
CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=n
CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=n
CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=n
CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=n
CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=n
CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=n
CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=n
# end of Supported Curves
#
# Elliptic Curve Ciphers Configuration
#
CONFIG_MBEDTLS_ECP_NIST_OPTIM=n
CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=n
CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=n
CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=n
# end of Elliptic Curve Ciphers Configuration
# end of Asymmetric Ciphers
#
# Hash functions
#
CONFIG_MBEDTLS_SHA384_C=n
CONFIG_MBEDTLS_SHA512_C=n
# end of Hash functions
#
# Hardware Acceleration
#
CONFIG_MBEDTLS_ECC_OTHER_CURVES_SOFT_FALLBACK=n
CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=n
# end of Hardware Acceleration
#
# Encoding/Decoding
#
CONFIG_MBEDTLS_PKCS5_C=n
# end of Encoding/Decoding
# end of mbedTLS
#
# Protocomm
#
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=n
# end of Protocomm
#
# PThreads
#
CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=2048
# end of PThreads
#
# SPI Flash driver
#
CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED=y
CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=10
CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=2
CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=4096
CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=n
# end of SPI Flash driver
#
# Unity unit testing library
#
CONFIG_UNITY_ENABLE_FLOAT=n
CONFIG_UNITY_ENABLE_DOUBLE=n
CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=n
# end of Unity unit testing library
#
# Virtual file system
#
CONFIG_VFS_SUPPORT_SELECT=n
# end of Virtual file system
#
# DSP Library
#
CONFIG_DSP_MAX_FFT_SIZE_1024=y
# end of DSP Library
#
# Camera configuration
#
CONFIG_OV7670_SUPPORT=n
CONFIG_OV7725_SUPPORT=n
CONFIG_NT99141_SUPPORT=n
CONFIG_GC2145_SUPPORT=n
CONFIG_GC032A_SUPPORT=n
CONFIG_GC0308_SUPPORT=n
CONFIG_BF3005_SUPPORT=n
CONFIG_BF20A6_SUPPORT=n
CONFIG_SC030IOT_SUPPORT=n
# end of Camera configuration
#
# LittleFS
#
CONFIG_LITTLEFS_MAX_PARTITIONS=2
CONFIG_LITTLEFS_MULTIVERSION=y
CONFIG_LITTLEFS_DISK_VERSION_2_0=y
# end of LittleFS
# end of Component config
+1 -1
View File
@@ -10,7 +10,7 @@ dependencies:
rules:
- if: "target in [esp32, esp32s2, esp32s3, esp32p4]"
espressif/fb_gfx:
version: "master"
version: "release/v6.1"
path: components/fb_gfx
git: https://github.com/espressif/esp32-arduino-lib-builder.git
require: public
+30 -3
View File
@@ -61,8 +61,8 @@ const uint8_t MAX_PWMS_LEGACY = 5; // Max number of PWM channels in fir
#ifdef ESP32 // Max number of PWM channels (total including extended) - ESP32 only
#if CONFIG_IDF_TARGET_ESP32
const uint8_t MAX_PWMS = 16; // ESP32: 16 ledc PWM channels in total - TODO for now
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
const uint8_t MAX_PWMS = 8; // ESP32S2/S3: 8 ledc PWM channels in total
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S31
const uint8_t MAX_PWMS = 8; // ESP32S2/S3/S31: 8 ledc PWM channels in total
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6
const uint8_t MAX_PWMS = 6; // ESP32C2/C3/C6: 6 ledc PWM channels in total
#else
@@ -99,13 +99,38 @@ const uint8_t MAX_SPI = 2; // Max number of Hardware SPI contro
// I2S
#ifdef SOC_I2S_SUPPORTED
#ifndef SOC_I2S_NUM // IDF 6.x: SOC_I2S_NUM removed
#ifdef CONFIG_IDF_TARGET_ESP32P4
#define SOC_I2S_NUM 3
#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S31
#define SOC_I2S_NUM 2
#else
#define SOC_I2S_NUM 1
#endif
#endif
const uint8_t MAX_I2S = SOC_I2S_NUM;
#else // SOC_I2S_SUPPORTED
const uint8_t MAX_I2S = 0;
#endif // SOC_I2S_SUPPORTED
// RMT
#ifdef SOC_RMT_SUPPORTED
#ifdef SOC_RMT_SUPPORTED // IDF 6.x: SOC_RMT_SUPPORTED removed
#ifndef SOC_RMT_TX_CANDIDATES_PER_GROUP
#ifdef CONFIG_IDF_TARGET_ESP32
#define SOC_RMT_TX_CANDIDATES_PER_GROUP 8
#elif CONFIG_IDF_TARGET_ESP32S3
#define SOC_RMT_TX_CANDIDATES_PER_GROUP 4
#elif CONFIG_IDF_TARGET_ESP32P4
#define SOC_RMT_TX_CANDIDATES_PER_GROUP 4
#elif CONFIG_IDF_TARGET_ESP32S31
#define SOC_RMT_TX_CANDIDATES_PER_GROUP 8
#else
#define SOC_RMT_TX_CANDIDATES_PER_GROUP 2
#endif
#endif
#ifndef SOC_RMT_GROUPS // IDF 6.x: removed
#define SOC_RMT_GROUPS 1
#endif
const uint8_t MAX_RMT = (SOC_RMT_GROUPS) * (SOC_RMT_TX_CANDIDATES_PER_GROUP);
#else // SOC_RMT_SUPPORTED
const uint8_t MAX_RMT = 0;
@@ -347,6 +372,8 @@ const uint32_t LOOP_SLEEP_DELAY = 50; // Lowest number of milliseconds to
#define SOC_TOUCH_VERSION_1
#elif SOC_TOUCH_SENSOR_VERSION == 2 // ESP32S2, ESP32S3
#define SOC_TOUCH_VERSION_2
#elif SOC_TOUCH_SENSOR_VERSION == 3 // ESP32S31
#define SOC_TOUCH_VERSION_3
#endif // SOC_TOUCH_SENSOR_VERSION
#endif // ESP32
+11
View File
@@ -24,6 +24,17 @@
// Modul
#undef MODULE
#define MODULE WEMOS // [Module] Select default model
// ESP32-C2 has no RTC slow memory; RTC_NOINIT_ATTR is explicitly broken there.
// The IDF header itself defines RTC_NOINIT_ATTR as static_assert(0,...) on C2,
// so we must redefine it *after* that header has been pulled in via esp8266toEsp32.h.
#ifdef CONFIG_IDF_TARGET_ESP32C2
#ifdef RTC_NOINIT_ATTR
#undef RTC_NOINIT_ATTR
#endif
#define RTC_NOINIT_ATTR __NOINIT_ATTR
#endif // CONFIG_IDF_TARGET_ESP32C2
#endif // ESP32
#ifdef ESP8266
@@ -187,14 +187,14 @@
#undef USE_ESP32_WDT // disable watchdog on SAFEBOOT until more testing is done
#if CONFIG_FREERTOS_UNICORE || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_FREERTOS_UNICORE || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
#if CONFIG_ETH_ENABLED // Check for Ethernet support in Arduino libs
// #undef USE_MQTT_TLS
// #define USE_SERIAL_BRIDGE // Add support for software Serial Bridge console Tee (+4.5k code)
#define USE_SPI // Make SPI Ethernet adapters useable (+124 bytes)
#define USE_ETHERNET
#endif // CONFIG_ETH_ENABLED
#endif // CONFIG_FREERTOS_UNICORE || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4
#endif // CONFIG_FREERTOS_UNICORE || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
#endif // FIRMWARE_SAFEBOOT
+2
View File
@@ -166,6 +166,8 @@ const char WIFI_HOSTNAME[] = WIFI_DEFAULT_HOSTNAME; // Override by user_confi
#endif
#elif CONFIG_IDF_TARGET_ESP32S3
#define TASMOTA_ARCH "esp32s3"
#elif CONFIG_IDF_TARGET_ESP32S31
#define TASMOTA_ARCH "esp32s31"
#else
#define TASMOTA_ARCH "esp32"
#endif
+118 -3
View File
@@ -1537,6 +1537,26 @@ const char PINS_WEMOS[] PROGMEM = "IOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOIO-
// 0 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
const char PINS_WEMOS[] PROGMEM = "IOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOAOAOAOAOAOAOAOAOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOAOAOAOAOAOAO";
#elif CONFIG_IDF_TARGET_ESP32S31
/* ****************************************
* ESP32-S31
* GPIOs 0..61 (GPIO29 and GPIO41 are not bonded)
* ****************************************/
#define MAX_GPIO_PIN 62
#define MIN_FLASH_PINS 0
#define MAX_USER_PINS 62
#define WEMOS_MODULE 0
const char PINS_WEMOS[] PROGMEM =
"AOAOIOIOIOIO" // GPIO0..5: 32 kHz crystal analog functions on GPIO0..1
"AOAOAOAOAOAOAOAOAOAOAOAOAOAO" // GPIO6..19: touch-capable GPIOs
"IOIOIOIOIOIOFLFLFL" // GPIO20..28: GPIO26..28 are SPI flash pins
"--" // GPIO29 is not bonded
"FLFLFLAOAOIOIOAOAOAOAO" // GPIO30..40: GPIO30..32 are SPI flash pins
"--" // GPIO41 is not bonded
"AOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAO" // GPIO42..57: ADC-capable GPIOs
"IOIOIOIO"; // GPIO58..61
#else // not CONFIG_IDF_TARGET_ESP32C2/C3/C6 nor CONFIG_IDF_TARGET_ESP32S2 - ESP32
/* ****************************************
@@ -3349,10 +3369,105 @@ const mytmplt kModules[] PROGMEM = {
/*********************************************************************************************\
Known templates
\*********************************************************************************************/
#elif CONFIG_IDF_TARGET_ESP32S2
#elif CONFIG_IDF_TARGET_ESP32S31
/********************************************************************************************\
* ESP32-S2 Module templates
* ESP32-S31 Module templates
\********************************************************************************************/
#define USER_MODULE 255
#define WT32_ETH01 4 // Legacy Ethernet module identifier used by the driver
/*********************************************************************************************\
Known templates
\*********************************************************************************************/
enum SupportedModulesESP32S31 {
WEMOS,
MAXMODULE };
const uint8_t kModuleNiceList[] PROGMEM = {
WEMOS,
};
const char kModuleNames[] PROGMEM =
"ESP32S31|"
;
const mytmplt kModules[] PROGMEM = {
{
AGPIO(GPIO_USER), // 0
AGPIO(GPIO_USER), // 1
AGPIO(GPIO_USER), // 2
AGPIO(GPIO_USER), // 3
AGPIO(GPIO_USER), // 4
AGPIO(GPIO_USER), // 5
AGPIO(GPIO_USER), // 6
AGPIO(GPIO_USER), // 7
AGPIO(GPIO_USER), // 8
AGPIO(GPIO_USER), // 9
AGPIO(GPIO_USER), // 10
AGPIO(GPIO_USER), // 11
AGPIO(GPIO_USER), // 12
AGPIO(GPIO_USER), // 13
AGPIO(GPIO_USER), // 14
AGPIO(GPIO_USER), // 15
AGPIO(GPIO_USER), // 16
AGPIO(GPIO_USER), // 17
AGPIO(GPIO_USER), // 18
AGPIO(GPIO_USER), // 19
AGPIO(GPIO_USER), // 20
AGPIO(GPIO_USER), // 21
AGPIO(GPIO_USER), // 22
AGPIO(GPIO_USER), // 23
AGPIO(GPIO_USER), // 24
AGPIO(GPIO_USER), // 25
AGPIO(GPIO_NONE), // 26: SPI flash
AGPIO(GPIO_NONE), // 27: SPI flash
AGPIO(GPIO_NONE), // 28: SPI flash
AGPIO(GPIO_NONE), // 29: not bonded
AGPIO(GPIO_NONE), // 30: SPI flash
AGPIO(GPIO_NONE), // 31: SPI flash
AGPIO(GPIO_NONE), // 32: SPI flash
AGPIO(GPIO_USER), // 33
AGPIO(GPIO_USER), // 34
AGPIO(GPIO_USER), // 35
AGPIO(GPIO_USER), // 36
AGPIO(GPIO_USER), // 37
AGPIO(GPIO_USER), // 38
AGPIO(GPIO_USER), // 39
AGPIO(GPIO_USER), // 40
AGPIO(GPIO_NONE), // 41: not bonded
AGPIO(GPIO_USER), // 42
AGPIO(GPIO_USER), // 43
AGPIO(GPIO_USER), // 44
AGPIO(GPIO_USER), // 45
AGPIO(GPIO_USER), // 46
AGPIO(GPIO_USER), // 47
AGPIO(GPIO_USER), // 48
AGPIO(GPIO_USER), // 49
AGPIO(GPIO_USER), // 50
AGPIO(GPIO_USER), // 51
AGPIO(GPIO_USER), // 52
AGPIO(GPIO_USER), // 53
AGPIO(GPIO_USER), // 54
AGPIO(GPIO_USER), // 55
AGPIO(GPIO_USER), // 56
AGPIO(GPIO_USER), // 57
AGPIO(GPIO_USER), // 58
AGPIO(GPIO_USER), // 59
AGPIO(GPIO_USER), // 60
AGPIO(GPIO_USER), // 61
0 // Flag
},
};
/*********************************************************************************************\
Known templates
\*********************************************************************************************/
#elif CONFIG_IDF_TARGET_ESP32S2
/********************************************************************************************\
* ESP32-S2 Module templates
\********************************************************************************************/
#define USER_MODULE 255
+25 -7
View File
@@ -538,10 +538,10 @@ typedef struct {
uint8_t tuyamcu_topic; // 33F Manage tuyaSend topic. ex_energy_power_delta on 6.6.0.20, replaced on 8.5.0.1
uint16_t domoticz_update_timer; // 340
uint16_t pwm_range; // 342
#ifndef CONFIG_IDF_TARGET_ESP32P4
#if !CONFIG_IDF_TARGET_ESP32P4 && !CONFIG_IDF_TARGET_ESP32S31
uint32_t domoticz_relay_idx[MAX_DOMOTICZ_IDX]; // 344
uint32_t domoticz_key_idx[MAX_DOMOTICZ_IDX]; // 354
#endif // CONFIG_IDF_TARGET_ESP32P4
#endif // !CONFIG_IDF_TARGET_ESP32P4 && !CONFIG_IDF_TARGET_ESP32S31
uint32_t energy_power_calibration; // 364 (P4 344)
uint32_t energy_voltage_calibration; // 368 (P4 348)
uint32_t energy_current_calibration; // 36C (P4 34C)
@@ -598,7 +598,21 @@ typedef struct {
// 496
#endif // ESP8266
#ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_IDF_TARGET_ESP32S31
// S31 needs the P4-sized GPIO mapping plus 14 additional bytes for its GPIOs.
myio my_gp; // 38C 2x62 bytes (ESP32-S31)
uint8_t eth_type; // 408
uint8_t eth_clk_mode; // 409
mytmplt user_template; // 40A 2x63 bytes (ESP32-S31)
WebCamCfg webcam_config; // 488
int8_t eth_address; // 48C
uint8_t module; // 48D
uint8_t ws_width[3]; // 48E
char serial_delimiter; // 491
uint8_t seriallog_level; // 492
uint8_t sleep; // 493
uint16_t ldo_mv[1]; // 494 ESP32-S31 LDO3 voltage
#elif CONFIG_IDF_TARGET_ESP32P4
// --------------------------------------------------------------
// Mapping 0x38C to 0x496 for ESP32P4 (Domoticz in filesystem)
// --------------------------------------------------------------
@@ -615,7 +629,8 @@ typedef struct {
uint8_t sleep; // 477
uint8_t ws_color[4][3]; // 478 (+xC)
uint8_t free_esp32_484[18]; // 484
uint16_t ldo_mv[2]; // 484 ESP32-P4 LDO3 and LDO4 voltage
uint8_t free_esp32_488[14]; // 488
// 496
#elif CONFIG_IDF_TARGET_ESP32S3
// --------------------------------------------------------------
@@ -831,9 +846,12 @@ typedef struct {
uint8_t web_color2[2][3]; // EA0 Needs to be on integer / 3 distance from web_color
uint16_t zcdimmerset[5]; // EA6
uint16_t ldo_mv[2]; // EB0 ESP32-P4 LDO3 and LDO4 voltage
uint8_t free_eb4[16]; // EB4 16 bytes
#if CONFIG_IDF_TARGET_ESP32S31
uint8_t ws_color[4][3]; // EB0
uint8_t free_esp32s31_ebc[8]; // EBC
#else
uint8_t free_eb0[20]; // EB0 20 bytes
#endif
uint16_t light_pixels_height_1 : 15;// EC4 Pixels height minus 1, default 0 (0 means 1 line)
uint16_t light_pixels_alternate : 1;// EC4 Indicates alternate lines in Pixels Matrix
+5 -4
View File
@@ -97,6 +97,7 @@
#ifdef ESP32
#include "include/tasconsole.h"
#if SOC_USB_SERIAL_JTAG_SUPPORTED
#include "soc/io_mux_reg.h" // USB_INT_PHY0_Dx_GPIO_NUM
#include "hal/usb_serial_jtag_ll.h"
#include "esp_private/rtc_clk.h"
#endif // SOC_USB_SERIAL_JTAG_SUPPORTED
@@ -222,7 +223,7 @@ WiFiUDP PortUdp; // UDP Syslog and Alexa
CONFIG_IDF_TARGET_ESP32S2 || // support USB via USBCDC
CONFIG_IDF_TARGET_ESP32S3 // support USB via HWCDC using JTAG interface or USBCDC
*/
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
//#if CONFIG_TINYUSB_CDC_ENABLED // This define is not recognized here so use USE_USB_CDC_CONSOLE
#ifdef USE_USB_CDC_CONSOLE
@@ -251,11 +252,11 @@ TASCONSOLE TasConsole{Serial};
bool tasconsole_serial = true;
//#warning **** TasConsole uses Serial ****
#endif // USE_USB_CDC_CONSOLE
#else // No ESP32C3, S2 or S3
#else // No USB CDC-capable target
TASCONSOLE TasConsole{Serial};
bool tasconsole_serial = true;
//#warning **** TasConsole uses Serial ****
#endif // ESP32C3, S2 or S3
#endif // USB CDC-capable targets
#else // No ESP32
HardwareSerial TasConsole = Serial; // Only serial interface
@@ -505,7 +506,7 @@ void setup(void) {
}
#ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
#ifdef USE_USB_CDC_CONSOLE
bool is_connected_to_USB = false;
+6
View File
@@ -553,6 +553,8 @@ bool SettingsConfigRestore(void) {
valid_settings = (7 == settings_buffer[0xF36]); // Settings->config_version ESP32P4
#elif CONFIG_IDF_TARGET_ESP32C5
valid_settings = (8 == settings_buffer[0xF36]); // Settings->config_version ESP32C5
#elif CONFIG_IDF_TARGET_ESP32S31
valid_settings = (9 == settings_buffer[0xF36]); // Settings->config_version ESP32S31
#else
valid_settings = (1 == settings_buffer[0xF36]); // Settings->config_version ESP32 all other
#endif // CONFIG_IDF_TARGET_ESP32S3
@@ -997,6 +999,8 @@ void SettingsDefaultSet2(void) {
Settings->config_version = 7; // ESP32P4
#elif CONFIG_IDF_TARGET_ESP32C5
Settings->config_version = 8; // ESP32C5
#elif CONFIG_IDF_TARGET_ESP32S31
Settings->config_version = 9; // ESP32S31
#else
Settings->config_version = 1; // ESP32
#endif // CONFIG_IDF_TARGET_ESP32S3
@@ -1616,6 +1620,8 @@ void SettingsDelta(void) {
Settings->config_version = 7; // ESP32P4
#elif CONFIG_IDF_TARGET_ESP32C5
Settings->config_version = 8; // ESP32C5
#elif CONFIG_IDF_TARGET_ESP32S31
Settings->config_version = 9; // ESP32S31
#else
Settings->config_version = 1; // ESP32
#endif // CONFIG_IDF_TARGET_ESP32S3
+16 -2
View File
@@ -21,6 +21,10 @@ extern "C" {
extern struct rst_info resetInfo;
}
#ifdef ESP32 // ESP32 specific gpio driver defines
#include "driver/gpio.h"
#endif // ESP32
/*********************************************************************************************\
* ESP32 Watchdog
\*********************************************************************************************/
@@ -1723,7 +1727,7 @@ void TemplateGpios(myio *gp)
j++;
#endif // ESP8266
#ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
dest[i] = src[i];
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
if (22 == i) { j = 33; } // skip 22-32
@@ -1803,6 +1807,9 @@ bool FlashPin(uint32_t pin) {
return (pin > 21) && (pin < 33); // ESP32S2 skip 22-32
#elif CONFIG_IDF_TARGET_ESP32P4
return false; // ESP32P4 has no flash pins, but GPIOs 34-38 are strapping pins
#elif CONFIG_IDF_TARGET_ESP32S31
return ((pin >= 26) && (pin <= 28)) ||
((pin >= 30) && (pin <= 32)); // SPI flash pins; GPIO29 is unbonded
#else
return (pin >= 28) && (pin <= 31); // ESP32 skip 28-31
#endif // ESP32C2/C3/C5/C6 and S2/S3
@@ -1826,6 +1833,8 @@ bool RedPin(uint32_t pin) { // Pin may be dangerous to change, displa
return false; // No red pin on ESP32S3
#elif CONFIG_IDF_TARGET_ESP32P4
return (34 >= pin) && (38 <= pin); // strapping pins on ESP32P4
#elif CONFIG_IDF_TARGET_ESP32S31
return false;
#elif CONFIG_IDF_TARGET_ESP32S3
return (33 <= pin) && (37 >= pin); // ESP32S3: GPIOs 33..37 are usually used for PSRAM
#else // ESP32 red pins are 6-11 for original ESP32, other models like PICO are not impacted if flash pins are condfigured
@@ -1836,6 +1845,11 @@ bool RedPin(uint32_t pin) { // Pin may be dangerous to change, displa
}
uint32_t ValidPin(uint32_t pin, uint32_t gpio, uint8_t isTuya = false) {
#if CONFIG_IDF_TARGET_ESP32S31
if (!GPIO_IS_VALID_GPIO(pin)) {
return GPIO_NONE;
}
#endif
if (FlashPin(pin)) {
return GPIO_NONE; // Disable flash pins GPIO6, GPIO7, GPIO8 and GPIO11
}
@@ -2242,7 +2256,7 @@ void SetSerial(uint32_t baudrate, uint32_t serial_config) {
void ClaimSerial(void) {
#ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S31
#ifdef USE_USB_CDC_CONSOLE
if (!tasconsole_serial) {
return; // USB console does not use serial
+4 -4
View File
@@ -992,9 +992,9 @@ void CmndStatus(void)
#endif
",\"" D_JSON_COREVERSION "\":\"" ARDUINO_CORE_RELEASE "\",\"" D_JSON_SDKVERSION "\":\"%s\","
"\"CpuFrequency\":%d,\"Hardware\":\"%s\""
#ifdef CONFIG_ESP_WIFI_REMOTE_ENABLED
#if defined(CONFIG_ESP_WIFI_REMOTE_ENABLED) && !defined(SOC_WIFI_SUPPORTED)
",\"HostedMCU\":{\"Hardware\":\"%s\",\"Version\":\"%s\"}"
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED && !SOC_WIFI_SUPPORTED
"%s}}"),
TasmotaGlobal.version, TasmotaGlobal.image_name, GetCodeCores().c_str(), GetBuildDateAndTime().c_str()
#ifdef ESP8266
@@ -1002,9 +1002,9 @@ void CmndStatus(void)
#endif
, ESP.getSdkVersion(),
ESP.getCpuFreqMHz(), GetDeviceHardwareRevision().c_str(),
#ifdef CONFIG_ESP_WIFI_REMOTE_ENABLED
#if defined(CONFIG_ESP_WIFI_REMOTE_ENABLED) && !defined(SOC_WIFI_SUPPORTED)
GetHostedMCU().c_str(), GetHostedFwVersion(1).c_str(),
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED && !SOC_WIFI_SUPPORTED
GetStatistics().c_str());
CmndStatusResponse(2);
}
@@ -285,7 +285,7 @@ void CrashDump(void)
}
ResponseJsonEnd();
}
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
extern "C" {
// esp-idf 3.x
@@ -315,6 +315,8 @@ const char *esp32c3_crash_reason[] = {
#define NUM_C3_REASONS (sizeof(esp32c3_crash_reason) / sizeof(char *))
#include <riscv/rvruntime-frames.h>
#include "soc/soc.h"
extern "C" IRAM_ATTR void custom_crash_recorder(void *exc_frame, bool pseudo_excause) {
RvExcFrame *regs = (RvExcFrame *)exc_frame;
@@ -332,10 +334,23 @@ extern "C" IRAM_ATTR void custom_crash_recorder(void *exc_frame, bool pseudo_exc
uint32_t idx = 0; // slot in stack trace
crash_recorder.stack[idx++] = regs->ra; // push return address as first value
// // code copied from panic_print_basic_backtrace()
uint32_t * sp = (uint32_t*) regs->sp;
uint32_t stack_start = regs->sp;
uint32_t stack_limit;
if ((stack_start & 0xF) != 0) { return; }
if ((stack_start >= SOC_DRAM_LOW) && (stack_start < SOC_DRAM_HIGH)) {
stack_limit = SOC_DRAM_HIGH;
}
#if CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
else if ((stack_start >= SOC_EXTRAM_LOW) && (stack_start < SOC_EXTRAM_HIGH)) {
stack_limit = SOC_EXTRAM_HIGH;
}
#endif
else {
return;
}
uint32_t * sp = (uint32_t*) stack_start;
uint32_t i = 0;
for (uint32_t i = 0; ((uint32_t) sp) < 0x3FCDFFF0 && i < 320 && idx < crash_dump_max_len; i++, sp++) {
for (uint32_t i = 0; ((uint32_t) sp) < stack_limit && i < 320 && idx < crash_dump_max_len; i++, sp++) {
uint32_t value = *sp;
if ((value >= 0x40000000) && (value < 0x42800000)) { // keep only addresses in code area
crash_recorder.stack[idx++] = value;
@@ -73,6 +73,10 @@ extern "C" {
#include "esp32p4/rom/rtc.h"
#include "esp32p4/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x2000 // Esp32p4 is located at 0x2000
#elif CONFIG_IDF_TARGET_ESP32S31
#include "esp32s31/rom/rtc.h"
#include "esp32s31/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x2000 // Esp32s31 is located at 0x2000
#else
#error Target CONFIG_IDF_TARGET is not supported
#endif
@@ -944,6 +948,9 @@ typedef struct {
case 18: { // ESP32-P4
return F("ESP32-P4");
}
case 32: { // ESP32-S31
return F("ESP32-S31");
}
}
return F("ESP32");
}
+17 -5
View File
@@ -459,9 +459,9 @@ void WifiBegin(uint8_t flag, uint8_t channel) {
}
#ifndef FIRMWARE_SAFEBOOT
#ifdef CONFIG_ESP_WIFI_REMOTE_ENABLED
#if defined(CONFIG_ESP_WIFI_REMOTE_ENABLED) && !defined(SOC_WIFI_SUPPORTED)
HostedMCUStatus();
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED && !SOC_WIFI_SUPPORTED
#endif // FIRMWARE_SAFEBOOT
}
@@ -1557,7 +1557,8 @@ void WifiConnect(void)
if (!wifi_event_registered) {
WiFi.onEvent(WifiEvents); // register event listener only once
wifi_event_registered = true;
#ifdef CONFIG_ESP_WIFI_REMOTE_ENABLED
#if defined(CONFIG_ESP_WIFI_REMOTE_ENABLED) && !defined(SOC_WIFI_SUPPORTED)
#if __has_include("esp_hosted.h")
// Hosted MCU SDIO pins must be set before WiFi is initialized
char sdio_source[10] = "default";
uint32_t sdio_pins[7] = { // From sdkconfig, used by framework if not set by template
@@ -1586,9 +1587,10 @@ void WifiConnect(void)
}
AddLog(LOG_LEVEL_DEBUG, PSTR("HST: Hosted MCU using %s GPIO%02d(CLK), GPIO%02d(CMD), GPIO%02d(D0), GPIO%02d(D1), GPIO%02d(D2), GPIO%02d(D3) and GPIO%02d(RST)"),
sdio_source, sdio_pins[0], sdio_pins[1], sdio_pins[2], sdio_pins[3], sdio_pins[4], sdio_pins[5], sdio_pins[6]);
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED
#endif // __has_include("esp_hosted.h")
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED && !SOC_WIFI_SUPPORTED
}
#endif // ESP32
#endif // ESP32
WifiSetState(0);
// WifiSetOutputPower();
@@ -2160,7 +2162,13 @@ uint64_t WifiGetNtp(void) {
// Respond to some Arduino/esp-idf events for better IPv6 support
// --------------------------------------------------------------------------------
#ifdef ESP32
// IDF < 6: esp_interface_t / IDF >= 6: wifi_interface_t (esp_interface_t removed)
#include "esp_idf_version.h"
#if ESP_IDF_VERSION_MAJOR < 6
extern esp_netif_t* get_esp_interface_netif(esp_interface_t interface);
#else
extern esp_netif_t* get_esp_interface_netif(wifi_interface_t interface);
#endif
// typedef void (*WiFiEventSysCb)(arduino_event_t *event);
@@ -2207,7 +2215,11 @@ void WifiEvents(arduino_event_t *event) {
// workaround for the race condition in LWIP, see https://github.com/espressif/arduino-esp32/pull/9016#discussion_r1451774885
{
uint32_t i = 5; // try 5 times only
#if ESP_IDF_VERSION_MAJOR < 6
while (esp_netif_create_ip6_linklocal(get_esp_interface_netif(ESP_IF_WIFI_STA)) != ESP_OK) {
#else
while (esp_netif_create_ip6_linklocal(get_esp_interface_netif(WIFI_IF_STA)) != ESP_OK) {
#endif
delay(1);
if (i-- == 0) {
break;
@@ -150,7 +150,7 @@ const char HTTP_SCRIPT_TEMPLATE2[] PROGMEM =
"}";
#endif // ESP8266
#ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
const char HTTP_SCRIPT_TEMPLATE2[] PROGMEM =
"for(i=0;i<" STR(MAX_USER_PINS) ";i++){"
"sk(g[i],i);" // Set GPIO
@@ -2363,7 +2363,7 @@ void TemplateSaveSettings(void) {
j++;
#endif // ESP8266
#ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
snprintf_P(command, sizeof(command), PSTR("%s%s%d"), command, (i>0)?",":"", WebGetGpioArg(i));
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
if (22 == i) { j = 33; } // skip 22-32
@@ -3122,12 +3122,12 @@ void HandleInformation(void) {
SettingsTextEscaped(SET_FRIENDLYNAME1 +i).c_str());
}
WSContentSeparatorIFat();
#ifdef CONFIG_ESP_WIFI_REMOTE_ENABLED
#if defined(CONFIG_ESP_WIFI_REMOTE_ENABLED) && !defined(SOC_WIFI_SUPPORTED)
WSContentSend_P(PSTR("}1" D_HOSTED_MCU "}2%s (%s)"),
GetHostedMCU().c_str(),
GetHostedFwVersion(1).c_str());
WSContentSeparatorIFat();
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED && !SOC_WIFI_SUPPORTED
bool show_hr = false;
if ((WiFi.getMode() >= WIFI_AP) && (static_cast<uint32_t>(WiFi.softAPIP()) != 0)) {
WSContentSend_P(PSTR("}1" D_MAC_ADDRESS "}2%s"), WiFi.softAPmacAddress().c_str());
@@ -213,7 +213,7 @@ void DomoticzSettingsLoad(bool erase) {
Domoticz->Settings.sensor_idx[i] = 0;
}
#ifndef CONFIG_IDF_TARGET_ESP32P4
#if !CONFIG_IDF_TARGET_ESP32P4 && !CONFIG_IDF_TARGET_ESP32S31
// Init any other parameter in struct DzSettings
Domoticz->Settings.update_timer = Settings->domoticz_update_timer;
for (uint32_t i = 0; i < MAX_DOMOTICZ_IDX; i++) {
@@ -233,7 +233,7 @@ void DomoticzSettingsLoad(bool erase) {
}
}
// *** End Init default values ***
#endif // CONFIG_IDF_TARGET_ESP32P4
#endif // !CONFIG_IDF_TARGET_ESP32P4 && !CONFIG_IDF_TARGET_ESP32S31
// Try to load key
if (erase) {
@@ -3445,6 +3445,8 @@ chknext:
lp = GetNumericArgument(lp, OPER_EQU, &pin, gv);
#ifdef CONFIG_IDF_TARGET_ESP32S3
if (pin < 1 || pin > 20) pin = 1;
#elif defined(CONFIG_IDF_TARGET_ESP32S31)
if (pin < 42 || pin > 57) pin = 42;
#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6)
if (pin < 0 || pin > 5) pin = 0;
#else
@@ -184,7 +184,12 @@ int GetPinMode(uint32_t pin) {
#ifdef ESP32
#ifdef SOC_ADC_SUPPORTED
// IDF 5.x and earlier: soc/adc_periph.h; IDF 6.x+: moved to hal/adc_periph.h
#if __has_include("soc/adc_periph.h")
#include "soc/adc_periph.h"
#else
#include "hal/adc_periph.h"
#endif
int8_t GVDigitalPinToAnalogChannel(uint8_t pin) {
uint8_t channel = 0;
@@ -139,7 +139,13 @@ const uint8_t eth_type_xtable[] = {
char eth_hostname[sizeof(TasmotaGlobal.hostname)];
uint8_t eth_config_change;
// IDF < 6: esp_interface_t / IDF >= 6: wifi_interface_t (esp_interface_t removed)
#include "esp_idf_version.h"
#if ESP_IDF_VERSION_MAJOR < 6
extern esp_netif_t* get_esp_interface_netif(esp_interface_t interface);
#else
extern esp_netif_t* get_esp_interface_netif(wifi_interface_t interface);
#endif
void EthernetEvent(arduino_event_t *event);
void EthernetEvent(arduino_event_t *event) {
@@ -8,6 +8,7 @@
#ifdef ESP32
#ifdef CONFIG_ESP_WIFI_REMOTE_ENABLED
#if __has_include("esp_hosted.h")
#ifndef FIRMWARE_SAFEBOOT
/*********************************************************************************************\
* Support for Hosted MCU to be used on ESP32-H2 and ESP32-P4
@@ -399,5 +400,11 @@ bool Xdrv84(uint32_t function) {
}
#endif // FIRMWARE_SAFEBOOT
#else // !__has_include("esp_hosted.h") - stub implementations for platforms without Hosted MCU support
// Stub functions so callers compile on platforms where esp_hosted.h is unavailable (e.g. ESP32-C3 with IDF 6.x)
String GetHostedFwVersion(uint32_t device) { return String(""); }
String GetHostedMCU(void) { return String(""); }
void HostedMCUStatus(void) {}
#endif // __has_include("esp_hosted.h")
#endif // CONFIG_ESP_WIFI_REMOTE_ENABLED
#endif // ESP32
@@ -7,7 +7,7 @@
*/
#ifdef ESP32
#if !CONFIG_IDF_TARGET_ESP32C5 // todo: remove when ESP32C5 TWAI support is added
#if !CONFIG_IDF_TARGET_ESP32C5 && !CONFIG_IDF_TARGET_ESP32S31 // Legacy TWAI driver is not available on these targets
#ifdef USE_ESP32_TWAI
#if SOC_TWAI_SUPPORTED
/*********************************************************************************************\
@@ -52,7 +52,7 @@
// for testing of BLE_ESP32, we remove xsns_52_ibeacon.ino completely, and instead add this modified xsns_52_ibeacon_BLE_ESP32.ino
// in the future this may be more fine-grained, e.g. to allow hm17 for this, and BLE-ESP32 for other
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 ||CONFIG_IDF_TARGET_ESP32S3
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S31
#ifdef USE_BLE_ESP32
#define XSNS_52 52
@@ -31,7 +31,7 @@
#ifdef USE_BLE_ESP32
#ifdef ESP32 // ESP32 family only. Use define USE_HM10 for ESP8266 support
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S31
#ifdef USE_MI_ESP32