From fcd64f70e926d3804ce86cc9ec1843c835b2ef80 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Tue, 20 Aug 2024 18:14:10 +0200 Subject: [PATCH 01/28] feat(esp32p4): Initial changes required for ESP32-P4 * esp32-p4: Initial changes to build with Arduino Signed-off-by: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> --- README.md | 1 + cores/esp32/Esp.cpp | 6 + cores/esp32/HardwareSerial.h | 12 ++ cores/esp32/esp32-hal-adc.c | 10 +- cores/esp32/esp32-hal-cpu.c | 14 +- cores/esp32/esp32-hal-i2c-slave.c | 25 ++- cores/esp32/esp32-hal-ledc.c | 10 + cores/esp32/esp32-hal-matrix.c | 2 + cores/esp32/esp32-hal-misc.c | 4 +- cores/esp32/esp32-hal-psram.c | 2 + cores/esp32/esp32-hal-spi.c | 179 ++++++++++-------- cores/esp32/esp32-hal-spi.h | 2 +- cores/esp32/esp32-hal-touch.c | 3 + cores/esp32/esp32-hal-touch.h | 2 + cores/esp32/esp32-hal-uart.c | 11 +- idf_component.yml | 1 + .../examples/RMT/RMTLoopback/RMTLoopback.ino | 2 +- .../ResetReason/ResetReason/ResetReason.ino | 2 + libraries/Ethernet/src/ETH.cpp | 6 +- libraries/SD_MMC/src/SD_MMC.cpp | 14 +- libraries/SPI/src/SPI.cpp | 2 +- tools/platformio-build.py | 2 +- 22 files changed, 208 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index ee1880b8d05..4cddeb13297 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ Here are the ESP32 series supported by the Arduino-ESP32 project: | ESP32-S3 | Yes | Yes | [ESP32-S3](https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf) | | ESP32-C6 | Yes | Yes | [ESP32-C6](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf) | | ESP32-H2 | Yes | Yes | [ESP32-H2](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf) | +| ESP32-P4 | No | Yes | ESP32-P4 | > [!NOTE] > ESP32-C2 is also supported by Arduino-ESP32 but requires rebuilding the static libraries. This is not trivial and requires a good understanding of the ESP-IDF diff --git a/cores/esp32/Esp.cpp b/cores/esp32/Esp.cpp index 483e888f64f..75414f58999 100644 --- a/cores/esp32/Esp.cpp +++ b/cores/esp32/Esp.cpp @@ -60,6 +60,9 @@ extern "C" { #elif CONFIG_IDF_TARGET_ESP32H2 #include "esp32h2/rom/spi_flash.h" #define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32h2 is located at 0x0000 +#elif CONFIG_IDF_TARGET_ESP32P4 +#include "esp32p4/rom/spi_flash.h" +#define ESP_FLASH_IMAGE_BASE 0x2000 // Esp32p4 is located at 0x2000 #else #error Target CONFIG_IDF_TARGET is not supported #endif @@ -335,6 +338,8 @@ uint32_t EspClass::getFlashChipSpeed(void) { return magicFlashChipSpeed(fhdr.spi_speed); } +// FIXME for P4 +#if !defined(CONFIG_IDF_TARGET_ESP32P4) FlashMode_t EspClass::getFlashChipMode(void) { #if CONFIG_IDF_TARGET_ESP32S2 uint32_t spi_ctrl = REG_READ(PERIPHS_SPI_FLASH_CTRL); @@ -361,6 +366,7 @@ FlashMode_t EspClass::getFlashChipMode(void) { } return (FM_DOUT); } +#endif // if !defined(CONFIG_IDF_TARGET_ESP32P4) uint32_t EspClass::magicFlashChipSize(uint8_t byte) { /* diff --git a/cores/esp32/HardwareSerial.h b/cores/esp32/HardwareSerial.h index 23a8823dff7..fc5dd92440d 100644 --- a/cores/esp32/HardwareSerial.h +++ b/cores/esp32/HardwareSerial.h @@ -125,6 +125,8 @@ typedef enum { #define SOC_RX0 (gpio_num_t)17 #elif CONFIG_IDF_TARGET_ESP32H2 #define SOC_RX0 (gpio_num_t)23 +#elif CONFIG_IDF_TARGET_ESP32P4 +#define SOC_RX0 (gpio_num_t)38 #endif #endif @@ -141,6 +143,8 @@ typedef enum { #define SOC_TX0 (gpio_num_t)16 #elif CONFIG_IDF_TARGET_ESP32H2 #define SOC_TX0 (gpio_num_t)24 +#elif CONFIG_IDF_TARGET_ESP32P4 +#define SOC_TX0 (gpio_num_t)37 #endif #endif @@ -162,6 +166,8 @@ typedef enum { #define RX1 (gpio_num_t)4 #elif CONFIG_IDF_TARGET_ESP32H2 #define RX1 (gpio_num_t)0 +#elif CONFIG_IDF_TARGET_ESP32P4 +#define RX1 (gpio_num_t)11 #endif #endif @@ -180,6 +186,8 @@ typedef enum { #define TX1 (gpio_num_t)5 #elif CONFIG_IDF_TARGET_ESP32H2 #define TX1 (gpio_num_t)1 +#elif CONFIG_IDF_TARGET_ESP32P4 +#define TX1 (gpio_num_t)10 #endif #endif #endif /* SOC_UART_HP_NUM > 1 */ @@ -192,6 +200,8 @@ typedef enum { #define RX2 (gpio_num_t)4 #elif CONFIG_IDF_TARGET_ESP32S3 #define RX2 (gpio_num_t)19 +#elif CONFIG_IDF_TARGET_ESP32P4 +#define RX2 (gpio_num_t)15 #endif #endif @@ -200,6 +210,8 @@ typedef enum { #define TX2 (gpio_num_t)25 #elif CONFIG_IDF_TARGET_ESP32S3 #define TX2 (gpio_num_t)20 +#elif CONFIG_IDF_TARGET_ESP32P4 +#define TX2 (gpio_num_t)14 #endif #endif #endif /* SOC_UART_HP_NUM > 2 */ diff --git a/cores/esp32/esp32-hal-adc.c b/cores/esp32/esp32-hal-adc.c index ee9cd02a623..c7cc1f5d556 100644 --- a/cores/esp32/esp32-hal-adc.c +++ b/cores/esp32/esp32-hal-adc.c @@ -75,7 +75,7 @@ static bool adcDetachBus(void *pin) { if (err != ESP_OK) { return false; } -#elif !defined(CONFIG_IDF_TARGET_ESP32H2) +#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) err = adc_cali_delete_scheme_line_fitting(adc_handle[adc_unit].adc_cali_handle); if (err != ESP_OK) { return false; @@ -127,7 +127,7 @@ esp_err_t __analogChannelConfig(adc_bitwidth_t width, adc_attenuation_t atten, i log_e("adc_cali_create_scheme_curve_fitting failed with error: %d", err); return err; } -#elif !defined(CONFIG_IDF_TARGET_ESP32H2) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED +#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED log_d("Deleting ADC_UNIT_%d line cali handle", adc_unit); err = adc_cali_delete_scheme_line_fitting(adc_handle[adc_unit].adc_cali_handle); if (err != ESP_OK) { @@ -310,7 +310,7 @@ uint32_t __analogReadMilliVolts(uint8_t pin) { .bitwidth = __analogWidth, }; err = adc_cali_create_scheme_curve_fitting(&cali_config, &adc_handle[adc_unit].adc_cali_handle); -#elif !defined(CONFIG_IDF_TARGET_ESP32H2) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED +#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED adc_cali_line_fitting_config_t cali_config = { .unit_id = adc_unit, .bitwidth = __analogWidth, @@ -379,7 +379,7 @@ static bool adcContinuousDetachBus(void *adc_unit_number) { if (err != ESP_OK) { return false; } -#elif !defined(CONFIG_IDF_TARGET_ESP32H2) +#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) err = adc_cali_delete_scheme_line_fitting(adc_handle[adc_unit].adc_cali_handle); if (err != ESP_OK) { return false; @@ -552,7 +552,7 @@ bool analogContinuous(const uint8_t pins[], size_t pins_count, uint32_t conversi .bitwidth = __adcContinuousWidth, }; err = adc_cali_create_scheme_curve_fitting(&cali_config, &adc_handle[adc_unit].adc_cali_handle); -#elif !defined(CONFIG_IDF_TARGET_ESP32H2) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED +#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED adc_cali_line_fitting_config_t cali_config = { .unit_id = adc_unit, .bitwidth = __adcContinuousWidth, diff --git a/cores/esp32/esp32-hal-cpu.c b/cores/esp32/esp32-hal-cpu.c index 2420dfbeeb0..fd799721c9b 100644 --- a/cores/esp32/esp32-hal-cpu.c +++ b/cores/esp32/esp32-hal-cpu.c @@ -19,7 +19,7 @@ #include "esp_attr.h" #include "esp_log.h" #include "soc/rtc.h" -#if !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) +#if !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4) #include "soc/rtc_cntl_reg.h" #include "soc/syscon_reg.h" #endif @@ -46,6 +46,8 @@ #include "esp32c6/rom/rtc.h" #elif CONFIG_IDF_TARGET_ESP32H2 #include "esp32h2/rom/rtc.h" +#elif CONFIG_IDF_TARGET_ESP32P4 +#include "esp32p4/rom/rtc.h" #else #error Target CONFIG_IDF_TARGET is not supported #endif @@ -161,7 +163,7 @@ bool removeApbChangeCallback(void *arg, apb_change_cb_t cb) { } static uint32_t calculateApb(rtc_cpu_freq_config_t *conf) { -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 return APB_CLK_FREQ; #else if (conf->freq_mhz >= 80) { @@ -177,7 +179,7 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz) { rtc_cpu_freq_config_t conf, cconf; uint32_t capb, apb; //Get XTAL Frequency and calculate min CPU MHz -#ifndef CONFIG_IDF_TARGET_ESP32H2 +#if (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) rtc_xtal_freq_t xtal = rtc_clk_xtal_freq_get(); #endif #if CONFIG_IDF_TARGET_ESP32 @@ -193,7 +195,7 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz) { } } #endif -#ifndef CONFIG_IDF_TARGET_ESP32H2 +#if (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) if (cpu_freq_mhz > xtal && cpu_freq_mhz != 240 && cpu_freq_mhz != 160 && cpu_freq_mhz != 120 && cpu_freq_mhz != 80) { if (xtal >= RTC_XTAL_FREQ_40M) { log_e("Bad frequency: %u MHz! Options are: 240, 160, 120, 80, %u, %u and %u MHz", cpu_freq_mhz, xtal, xtal / 2, xtal / 4); @@ -235,7 +237,7 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz) { } //Make the frequency change rtc_clk_cpu_freq_set_config_fast(&conf); -#if !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) +#if !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4) if (capb != apb) { //Update REF_TICK (uncomment if REF_TICK is different than 1MHz) //if(conf.freq_mhz < 80){ @@ -248,7 +250,7 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz) { } #endif //Update FreeRTOS Tick Divisor -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 #elif CONFIG_IDF_TARGET_ESP32S3 diff --git a/cores/esp32/esp32-hal-i2c-slave.c b/cores/esp32/esp32-hal-i2c-slave.c index 5504fd62adf..1b439056bbd 100644 --- a/cores/esp32/esp32-hal-i2c-slave.c +++ b/cores/esp32/esp32-hal-i2c-slave.c @@ -41,6 +41,7 @@ #include "esp_intr_alloc.h" #include "soc/i2c_reg.h" #include "soc/i2c_struct.h" +#include "soc/periph_defs.h" #include "hal/i2c_ll.h" #include "hal/clk_gate_ll.h" #include "esp32-hal-log.h" @@ -49,6 +50,7 @@ #define I2C_SLAVE_USE_RX_QUEUE 0 // 1: Queue, 0: RingBuffer +#if !defined(CONFIG_IDF_TARGET_ESP32P4) #if SOC_HP_I2C_NUM > 1 #define I2C_SCL_IDX(p) ((p == 0) ? I2CEXT0_SCL_OUT_IDX : ((p == 1) ? I2CEXT1_SCL_OUT_IDX : 0)) #define I2C_SDA_IDX(p) ((p == 0) ? I2CEXT0_SDA_OUT_IDX : ((p == 1) ? I2CEXT1_SDA_OUT_IDX : 0)) @@ -56,6 +58,12 @@ #define I2C_SCL_IDX(p) I2CEXT0_SCL_OUT_IDX #define I2C_SDA_IDX(p) I2CEXT0_SDA_OUT_IDX #endif +#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) + +#ifdef CONFIG_IDF_TARGET_ESP32P4 +#define I2C_SCL_IDX(p) ((p == 0) ? I2C0_SCL_PAD_OUT_IDX : ((p == 1) ? I2C1_SCL_PAD_OUT_IDX : 0)) +#define I2C_SDA_IDX(p) ((p == 0) ? I2C0_SDA_PAD_OUT_IDX : ((p == 1) ? I2C1_SDA_PAD_OUT_IDX : 0)) +#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 #if CONFIG_IDF_TARGET_ESP32 #define I2C_TXFIFO_WM_INT_ENA I2C_TXFIFO_EMPTY_INT_ENA @@ -173,7 +181,7 @@ static inline void i2c_ll_stretch_clr(i2c_dev_t *hw) { } static inline bool i2c_ll_slave_addressed(i2c_dev_t *hw) { -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 return hw->sr.slave_addressed; #else return hw->status_reg.slave_addressed; @@ -182,7 +190,7 @@ static inline bool i2c_ll_slave_addressed(i2c_dev_t *hw) { static inline bool i2c_ll_slave_rw(i2c_dev_t *hw) //not exposed by hal_ll { -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 return hw->sr.slave_rw; #else return hw->status_reg.slave_rw; @@ -306,7 +314,7 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t frequency = 100000L; } frequency = (frequency * 5) / 4; - +#if !defined(CONFIG_IDF_TARGET_ESP32P4) if (i2c->num == 0) { periph_ll_enable_clk_clear_rst(PERIPH_I2C0_MODULE); #if SOC_HP_I2C_NUM > 1 @@ -314,6 +322,7 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t periph_ll_enable_clk_clear_rst(PERIPH_I2C1_MODULE); #endif } +#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) i2c_ll_slave_init(i2c->dev); i2c_ll_slave_set_fifo_mode(i2c->dev, true); @@ -341,12 +350,22 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t if (!i2c->intr_handle) { uint32_t flags = ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED; +#if !defined(CONFIG_IDF_TARGET_ESP32P4) if (i2c->num == 0) { ret = esp_intr_alloc(ETS_I2C_EXT0_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); #if SOC_HP_I2C_NUM > 1 } else { ret = esp_intr_alloc(ETS_I2C_EXT1_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); #endif +#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) +#ifdef CONFIG_IDF_TARGET_ESP32P4 + if (i2c->num == 0) { + ret = esp_intr_alloc(ETS_I2C0_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); +#if SOC_I2C_NUM > 1 + } else { + ret = esp_intr_alloc(ETS_I2C1_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); +#endif +#endif // #ifdef CONFIG_IDF_TARGET_ESP32P4 } if (ret != ESP_OK) { diff --git a/cores/esp32/esp32-hal-ledc.c b/cores/esp32/esp32-hal-ledc.c index 7d748f98a56..e92c9993845 100644 --- a/cores/esp32/esp32-hal-ledc.c +++ b/cores/esp32/esp32-hal-ledc.c @@ -323,11 +323,21 @@ bool ledcOutputInvert(uint8_t pin, bool out_invert) { ledc_channel_handle_t *bus = (ledc_channel_handle_t *)perimanGetPinBus(pin, ESP32_BUS_TYPE_LEDC); if (bus != NULL) { gpio_set_level(pin, out_invert); +#if !defined(CONFIG_IDF_TARGET_ESP32P4) #ifdef SOC_LEDC_SUPPORT_HS_MODE esp_rom_gpio_connect_out_signal(pin, ((bus->channel / 8 == 0) ? LEDC_HS_SIG_OUT0_IDX : LEDC_LS_SIG_OUT0_IDX) + ((bus->channel) % 8), out_invert, 0); #else esp_rom_gpio_connect_out_signal(pin, LEDC_LS_SIG_OUT0_IDX + ((bus->channel) % 8), out_invert, 0); #endif +#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) + +#ifdef CONFIG_IDF_TARGET_ESP32P4 +#ifdef SOC_LEDC_SUPPORT_HS_MODE + esp_rom_gpio_connect_out_signal(pin, ((bus->channel / 8 == 0) ? LEDC_HS_SIG_OUT0_IDX : LEDC_LS_SIG_OUT_PAD_OUT0_IDX) + ((bus->channel) % 8), out_invert, 0); +#else + esp_rom_gpio_connect_out_signal(pin, LEDC_LS_SIG_OUT_PAD_OUT0_IDX + ((bus->channel) % 8), out_invert, 0); +#endif +#endif // #ifdef CONFIG_IDF_TARGET_ESP32P4 return true; } return false; diff --git a/cores/esp32/esp32-hal-matrix.c b/cores/esp32/esp32-hal-matrix.c index fba044d0c85..7cddb4e04db 100644 --- a/cores/esp32/esp32-hal-matrix.c +++ b/cores/esp32/esp32-hal-matrix.c @@ -32,6 +32,8 @@ #include "esp32c6/rom/gpio.h" #elif CONFIG_IDF_TARGET_ESP32H2 #include "esp32h2/rom/gpio.h" +#elif CONFIG_IDF_TARGET_ESP32P4 +#include "esp32p4/rom/gpio.h" #else #error Target CONFIG_IDF_TARGET is not supported #endif diff --git a/cores/esp32/esp32-hal-misc.c b/cores/esp32/esp32-hal-misc.c index 7dfca6134b2..ab46eba3d09 100644 --- a/cores/esp32/esp32-hal-misc.c +++ b/cores/esp32/esp32-hal-misc.c @@ -29,7 +29,7 @@ #endif //CONFIG_BT_ENABLED #include #include "soc/rtc.h" -#if !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) +#if !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4) #include "soc/rtc_cntl_reg.h" #include "soc/syscon_reg.h" #endif @@ -53,6 +53,8 @@ #include "esp32c6/rom/rtc.h" #elif CONFIG_IDF_TARGET_ESP32H2 #include "esp32h2/rom/rtc.h" +#elif CONFIG_IDF_TARGET_ESP32P4 +#include "esp32p4/rom/rtc.h" #else #error Target CONFIG_IDF_TARGET is not supported diff --git a/cores/esp32/esp32-hal-psram.c b/cores/esp32/esp32-hal-psram.c index 5a741908f07..f28095a6fd8 100644 --- a/cores/esp32/esp32-hal-psram.c +++ b/cores/esp32/esp32-hal-psram.c @@ -27,6 +27,8 @@ #include "esp32s2/rom/cache.h" #elif CONFIG_IDF_TARGET_ESP32S3 #include "esp32s3/rom/cache.h" +#elif CONFIG_IDF_TARGET_ESP32P4 +#include "esp32p4/rom/cache.h" #else #error Target CONFIG_IDF_TARGET is not supported #endif diff --git a/cores/esp32/esp32-hal-spi.c b/cores/esp32/esp32-hal-spi.c index 857c3d4bb2e..f03656b47ff 100644 --- a/cores/esp32/esp32-hal-spi.c +++ b/cores/esp32/esp32-hal-spi.c @@ -22,6 +22,7 @@ #include "esp_attr.h" #include "soc/spi_reg.h" #include "soc/spi_struct.h" +#include "soc/periph_defs.h" #include "soc/io_mux_reg.h" #include "soc/gpio_sig_map.h" #include "soc/rtc.h" @@ -55,6 +56,9 @@ #elif CONFIG_IDF_TARGET_ESP32H2 #include "esp32h2/rom/ets_sys.h" #include "esp32h2/rom/gpio.h" +#elif CONFIG_IDF_TARGET_ESP32P4 +#include "esp32p4/rom/ets_sys.h" +#include "esp32p4/rom/gpio.h" #else #error Target CONFIG_IDF_TARGET is not supported #endif @@ -96,6 +100,18 @@ struct spi_struct_t { #define SPI_FSPI_SS_IDX(n) ((n == 0) ? FSPICS0_OUT_IDX : ((n == 1) ? FSPICS1_OUT_IDX : 0)) #define SPI_SS_IDX(p, n) ((p == 0) ? SPI_FSPI_SS_IDX(n) : ((p == 1) ? SPI_HSPI_SS_IDX(n) : 0)) +#elif CONFIG_IDF_TARGET_ESP32P4 +// ESP32P4 +#define SPI_COUNT (2) + +#define SPI_CLK_IDX(p) ((p == 0) ? SPI2_CK_PAD_OUT_IDX : ((p == 1) ? SPI3_CK_PAD_OUT_IDX : 0)) +#define SPI_MISO_IDX(p) ((p == 0) ? SPI2_Q_PAD_OUT_IDX : ((p == 1) ? SPI3_QO_PAD_OUT_IDX : 0)) +#define SPI_MOSI_IDX(p) ((p == 0) ? SPI2_D_PAD_IN_IDX : ((p == 1) ? SPI3_D_PAD_IN_IDX : 0)) + +#define SPI_HSPI_SS_IDX(n) ((n == 0) ? SPI3_CS1_PAD_OUT_IDX : ((n == 1) ? SPI3_CS1_PAD_OUT_IDX : 0)) +#define SPI_FSPI_SS_IDX(n) ((n == 0) ? SPI2_CS1_PAD_OUT_IDX : ((n == 1) ? SPI2_CS1_PAD_OUT_IDX : 0)) +#define SPI_SS_IDX(p, n) ((p == 0) ? SPI_FSPI_SS_IDX(n) : ((p == 1) ? SPI_HSPI_SS_IDX(n) : 0)) + #elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 // ESP32C3 #define SPI_COUNT (1) @@ -125,14 +141,15 @@ struct spi_struct_t { #if CONFIG_DISABLE_HAL_LOCKS #define SPI_MUTEX_LOCK() #define SPI_MUTEX_UNLOCK() - ++ static spi_t _spi_bus_array[] = { #if CONFIG_IDF_TARGET_ESP32S2 {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), 0, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 1, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 2, -1, -1, -1, -1} -#elif CONFIG_IDF_TARGET_ESP32S3 - {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 1, -1, -1, -1, -1} +#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 + {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0, -1, -1, -1, -1}, + {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 1, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C2 {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C3 @@ -157,8 +174,9 @@ static spi_t _spi_bus_array[] = { {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), NULL, 0, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 1, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 2, -1, -1, -1, -1} -#elif CONFIG_IDF_TARGET_ESP32S3 - {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 1, -1, -1, -1, -1} +#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 + {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1}, + {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 1, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C2 {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C3 @@ -370,7 +388,7 @@ void spiEnableSSPins(spi_t *spi, uint8_t ss_mask) { } SPI_MUTEX_LOCK(); #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.val &= ~(ss_mask & SPI_SS_MASK_ALL); #else spi->dev->pin.val &= ~(ss_mask & SPI_SS_MASK_ALL); @@ -384,7 +402,7 @@ void spiDisableSSPins(spi_t *spi, uint8_t ss_mask) { } SPI_MUTEX_LOCK(); #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.val |= (ss_mask & SPI_SS_MASK_ALL); #else spi->dev->pin.val |= (ss_mask & SPI_SS_MASK_ALL); @@ -418,7 +436,7 @@ void spiSSSet(spi_t *spi) { } SPI_MUTEX_LOCK(); #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.cs_keep_active = 1; #else spi->dev->pin.cs_keep_active = 1; @@ -432,7 +450,7 @@ void spiSSClear(spi_t *spi) { } SPI_MUTEX_LOCK(); #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.cs_keep_active = 0; #else spi->dev->pin.cs_keep_active = 0; @@ -461,7 +479,7 @@ uint8_t spiGetDataMode(spi_t *spi) { return 0; } #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 bool idleEdge = spi->dev->misc.ck_idle_edge; #else bool idleEdge = spi->dev->pin.ck_idle_edge; @@ -487,7 +505,7 @@ void spiSetDataMode(spi_t *spi, uint8_t dataMode) { switch (dataMode) { case SPI_MODE1: #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.ck_idle_edge = 0; #else spi->dev->pin.ck_idle_edge = 0; @@ -496,7 +514,7 @@ void spiSetDataMode(spi_t *spi, uint8_t dataMode) { break; case SPI_MODE2: #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.ck_idle_edge = 1; #else spi->dev->pin.ck_idle_edge = 1; @@ -505,7 +523,7 @@ void spiSetDataMode(spi_t *spi, uint8_t dataMode) { break; case SPI_MODE3: #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.ck_idle_edge = 1; #else spi->dev->pin.ck_idle_edge = 1; @@ -515,7 +533,7 @@ void spiSetDataMode(spi_t *spi, uint8_t dataMode) { case SPI_MODE0: default: #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.ck_idle_edge = 0; #else spi->dev->pin.ck_idle_edge = 0; @@ -565,7 +583,7 @@ static void spiInitBus(spi_t *spi) { #endif spi->dev->slave.val = 0; #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.val = 0; #else spi->dev->pin.val = 0; @@ -655,11 +673,11 @@ spi_t *spiStartBus(uint8_t spi_num, uint32_t clockDiv, uint8_t dataMode, uint8_t SPI_MUTEX_LOCK(); spiInitBus(spi); -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->clk_gate.clk_en = 1; spi->dev->clk_gate.mst_clk_sel = 1; spi->dev->clk_gate.mst_clk_active = 1; -#if !CONFIG_IDF_TARGET_ESP32C6 && !CONFIG_IDF_TARGET_ESP32H2 +#if !CONFIG_IDF_TARGET_ESP32C6 && !CONFIG_IDF_TARGET_ESP32H2 && !CONFIG_IDF_TARGET_ESP32P4 spi->dev->dma_conf.tx_seg_trans_clr_en = 1; spi->dev->dma_conf.rx_seg_trans_clr_en = 1; spi->dev->dma_conf.dma_seg_trans_en = 0; @@ -670,7 +688,7 @@ spi_t *spiStartBus(uint8_t spi_num, uint32_t clockDiv, uint8_t dataMode, uint8_t spi->dev->user.doutdin = 1; int i; for (i = 0; i < 16; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = 0x00000000; #else spi->dev->data_buf[i] = 0x00000000; @@ -697,7 +715,7 @@ void spiWaitReady(spi_t *spi) { #if CONFIG_IDF_TARGET_ESP32S2 #define usr_mosi_dbitlen usr_mosi_bit_len #define usr_miso_dbitlen usr_miso_bit_len -#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 #define usr_mosi_dbitlen ms_data_bitlen #define usr_miso_dbitlen ms_data_bitlen #define mosi_dlen ms_dlen @@ -718,13 +736,13 @@ void spiWrite(spi_t *spi, const uint32_t *data, uint8_t len) { spi->dev->miso_dlen.usr_miso_dbitlen = 0; #endif for (i = 0; i < len; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = data[i]; #else spi->dev->data_buf[i] = data[i]; #endif } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -745,20 +763,20 @@ void spiTransfer(spi_t *spi, uint32_t *data, uint8_t len) { spi->dev->mosi_dlen.usr_mosi_dbitlen = (len * 32) - 1; spi->dev->miso_dlen.usr_miso_dbitlen = (len * 32) - 1; for (i = 0; i < len; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = data[i]; #else spi->dev->data_buf[i] = data[i]; #endif } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif spi->dev->cmd.usr = 1; while (spi->dev->cmd.usr); for (i = 0; i < len; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 data[i] = spi->dev->data_buf[i].val; #else data[i] = spi->dev->data_buf[i]; @@ -776,13 +794,13 @@ void spiWriteByte(spi_t *spi, uint8_t data) { #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32 spi->dev->miso_dlen.usr_miso_dbitlen = 0; #endif -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -798,18 +816,18 @@ uint8_t spiTransferByte(spi_t *spi, uint8_t data) { SPI_MUTEX_LOCK(); spi->dev->mosi_dlen.usr_mosi_dbitlen = 7; spi->dev->miso_dlen.usr_miso_dbitlen = 7; -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif spi->dev->cmd.usr = 1; while (spi->dev->cmd.usr); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 data = spi->dev->data_buf[0].val & 0xFF; #else data = spi->dev->data_buf[0] & 0xFF; @@ -839,12 +857,12 @@ void spiWriteWord(spi_t *spi, uint16_t data) { #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32 spi->dev->miso_dlen.usr_miso_dbitlen = 0; #endif -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -863,18 +881,18 @@ uint16_t spiTransferWord(spi_t *spi, uint16_t data) { SPI_MUTEX_LOCK(); spi->dev->mosi_dlen.usr_mosi_dbitlen = 15; spi->dev->miso_dlen.usr_miso_dbitlen = 15; -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif spi->dev->cmd.usr = 1; while (spi->dev->cmd.usr); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 data = spi->dev->data_buf[0].val; #else data = spi->dev->data_buf[0]; @@ -898,12 +916,12 @@ void spiWriteLong(spi_t *spi, uint32_t data) { #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32 spi->dev->miso_dlen.usr_miso_dbitlen = 0; #endif -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -922,18 +940,18 @@ uint32_t spiTransferLong(spi_t *spi, uint32_t data) { SPI_MUTEX_LOCK(); spi->dev->mosi_dlen.usr_mosi_dbitlen = 31; spi->dev->miso_dlen.usr_miso_dbitlen = 31; -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif spi->dev->cmd.usr = 1; while (spi->dev->cmd.usr); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 data = spi->dev->data_buf[0].val; #else data = spi->dev->data_buf[0]; @@ -972,14 +990,14 @@ static void __spiTransferBytes(spi_t *spi, const uint8_t *data, uint8_t *out, ui spi->dev->miso_dlen.usr_miso_dbitlen = ((bytes * 8) - 1); for (i = 0; i < words; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = wordsBuf[i]; //copy buffer to spi fifo #else spi->dev->data_buf[i] = wordsBuf[i]; //copy buffer to spi fifo #endif } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -989,7 +1007,7 @@ static void __spiTransferBytes(spi_t *spi, const uint8_t *data, uint8_t *out, ui if (out) { for (i = 0; i < words; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 wordsBuf[i] = spi->dev->data_buf[i].val; //copy spi fifo to buffer #else wordsBuf[i] = spi->dev->data_buf[i]; //copy spi fifo to buffer @@ -1062,7 +1080,7 @@ void spiTransaction(spi_t *spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bit switch (dataMode) { case SPI_MODE1: #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.ck_idle_edge = 0; #else spi->dev->pin.ck_idle_edge = 0; @@ -1071,7 +1089,7 @@ void spiTransaction(spi_t *spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bit break; case SPI_MODE2: #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.ck_idle_edge = 1; #else spi->dev->pin.ck_idle_edge = 1; @@ -1080,7 +1098,7 @@ void spiTransaction(spi_t *spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bit break; case SPI_MODE3: #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.ck_idle_edge = 1; #else spi->dev->pin.ck_idle_edge = 1; @@ -1090,7 +1108,7 @@ void spiTransaction(spi_t *spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bit case SPI_MODE0: default: #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 + || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->misc.ck_idle_edge = 0; #else spi->dev->pin.ck_idle_edge = 0; @@ -1105,7 +1123,7 @@ void spiTransaction(spi_t *spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bit spi->dev->ctrl.wr_bit_order = 1; spi->dev->ctrl.rd_bit_order = 1; } -#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 // Sync new config with hardware, fixes https://github.com/espressif/arduino-esp32/issues/9221 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); @@ -1134,12 +1152,12 @@ void ARDUINO_ISR_ATTR spiWriteByteNL(spi_t *spi, uint8_t data) { #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32 spi->dev->miso_dlen.usr_miso_dbitlen = 0; #endif -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1153,18 +1171,18 @@ uint8_t spiTransferByteNL(spi_t *spi, uint8_t data) { } spi->dev->mosi_dlen.usr_mosi_dbitlen = 7; spi->dev->miso_dlen.usr_miso_dbitlen = 7; -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif spi->dev->cmd.usr = 1; while (spi->dev->cmd.usr); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 data = spi->dev->data_buf[0].val & 0xFF; #else data = spi->dev->data_buf[0] & 0xFF; @@ -1183,12 +1201,12 @@ void ARDUINO_ISR_ATTR spiWriteShortNL(spi_t *spi, uint16_t data) { #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32 spi->dev->miso_dlen.usr_miso_dbitlen = 0; #endif -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1205,18 +1223,18 @@ uint16_t spiTransferShortNL(spi_t *spi, uint16_t data) { } spi->dev->mosi_dlen.usr_mosi_dbitlen = 15; spi->dev->miso_dlen.usr_miso_dbitlen = 15; -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif spi->dev->cmd.usr = 1; while (spi->dev->cmd.usr); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 data = spi->dev->data_buf[0].val & 0xFFFF; #else data = spi->dev->data_buf[0] & 0xFFFF; @@ -1238,12 +1256,12 @@ void ARDUINO_ISR_ATTR spiWriteLongNL(spi_t *spi, uint32_t data) { #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32 spi->dev->miso_dlen.usr_miso_dbitlen = 0; #endif -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1260,18 +1278,18 @@ uint32_t spiTransferLongNL(spi_t *spi, uint32_t data) { } spi->dev->mosi_dlen.usr_mosi_dbitlen = 31; spi->dev->miso_dlen.usr_miso_dbitlen = 31; -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif spi->dev->cmd.usr = 1; while (spi->dev->cmd.usr); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 data = spi->dev->data_buf[0].val; #else data = spi->dev->data_buf[0]; @@ -1302,13 +1320,13 @@ void spiWriteNL(spi_t *spi, const void *data_in, uint32_t len) { spi->dev->miso_dlen.usr_miso_dbitlen = 0; #endif for (size_t i = 0; i < c_longs; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = data[i]; #else spi->dev->data_buf[i] = data[i]; #endif } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1341,7 +1359,7 @@ void spiTransferBytesNL(spi_t *spi, const void *data_in, uint8_t *data_out, uint spi->dev->miso_dlen.usr_miso_dbitlen = (c_len * 8) - 1; if (data) { for (size_t i = 0; i < c_longs; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = data[i]; #else spi->dev->data_buf[i] = data[i]; @@ -1349,14 +1367,14 @@ void spiTransferBytesNL(spi_t *spi, const void *data_in, uint8_t *data_out, uint } } else { for (size_t i = 0; i < c_longs; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = 0xFFFFFFFF; #else spi->dev->data_buf[i] = 0xFFFFFFFF; #endif } } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1365,13 +1383,13 @@ void spiTransferBytesNL(spi_t *spi, const void *data_in, uint8_t *data_out, uint if (result) { if (c_len & 3) { for (size_t i = 0; i < (c_longs - 1); i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 result[i] = spi->dev->data_buf[i].val; #else result[i] = spi->dev->data_buf[i]; #endif } -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 uint32_t last_data = spi->dev->data_buf[c_longs - 1].val; #else uint32_t last_data = spi->dev->data_buf[c_longs - 1]; @@ -1383,7 +1401,7 @@ void spiTransferBytesNL(spi_t *spi, const void *data_in, uint8_t *data_out, uint } } else { for (size_t i = 0; i < c_longs; i++) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 result[i] = spi->dev->data_buf[i].val; #else result[i] = spi->dev->data_buf[i]; @@ -1425,18 +1443,18 @@ void spiTransferBitsNL(spi_t *spi, uint32_t data, uint32_t *out, uint8_t bits) { spi->dev->mosi_dlen.usr_mosi_dbitlen = (bits - 1); spi->dev->miso_dlen.usr_miso_dbitlen = (bits - 1); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[0].val = data; #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif spi->dev->cmd.usr = 1; while (spi->dev->cmd.usr); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 data = spi->dev->data_buf[0].val; #else data = spi->dev->data_buf[0]; @@ -1477,34 +1495,34 @@ void ARDUINO_ISR_ATTR spiWritePixelsNL(spi_t *spi, const void *data_in, uint32_t if (msb) { if (l_bytes && i == (c_longs - 1)) { if (l_bytes == 2) { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 MSB_16_SET(spi->dev->data_buf[i].val, data[i]); #else MSB_16_SET(spi->dev->data_buf[i], data[i]); #endif } else { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = data[i] & 0xFF; #else spi->dev->data_buf[i] = data[i] & 0xFF; #endif } } else { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 MSB_PIX_SET(spi->dev->data_buf[i].val, data[i]); #else MSB_PIX_SET(spi->dev->data_buf[i], data[i]); #endif } } else { -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->data_buf[i].val = data[i]; #else spi->dev->data_buf[i] = data[i]; #endif } } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1528,7 +1546,7 @@ typedef union { uint32_t clkcnt_l : 6; /*it must be equal to spi_clkcnt_N.*/ uint32_t clkcnt_h : 6; /*it must be floor((spi_clkcnt_N+1)/2-1).*/ uint32_t clkcnt_n : 6; /*it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1)*/ -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 uint32_t clkdiv_pre : 4; /*it is pre-divider of spi_clk.*/ uint32_t reserved : 9; /*reserved*/ #else @@ -1573,7 +1591,7 @@ uint32_t spiFrequencyToClockDiv(uint32_t freq) { while (calPreVari++ <= 1) { calPre = (((apb_freq / (reg.clkcnt_n + 1)) / freq) - 1) + calPreVari; -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 if (calPre > 0xF) { reg.clkdiv_pre = 0xF; #else @@ -1606,3 +1624,4 @@ uint32_t spiFrequencyToClockDiv(uint32_t freq) { } #endif /* SOC_GPSPI_SUPPORTED */ + diff --git a/cores/esp32/esp32-hal-spi.h b/cores/esp32/esp32-hal-spi.h index a238cada87d..4900cc89c2f 100644 --- a/cores/esp32/esp32-hal-spi.h +++ b/cores/esp32/esp32-hal-spi.h @@ -28,7 +28,7 @@ extern "C" { #define SPI_HAS_TRANSACTION -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32S3 +#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 #define FSPI 0 #define HSPI 1 #elif CONFIG_IDF_TARGET_ESP32S2 diff --git a/cores/esp32/esp32-hal-touch.c b/cores/esp32/esp32-hal-touch.c index 764b7dbb73f..3c7808cc175 100644 --- a/cores/esp32/esp32-hal-touch.c +++ b/cores/esp32/esp32-hal-touch.c @@ -14,6 +14,8 @@ #include "soc/soc_caps.h" #if SOC_TOUCH_SENSOR_SUPPORTED +#if SOC_TOUCH_SENSOR_VERSION == 3 // ESP32P4 +#else #include "driver/touch_sensor.h" #include "esp32-hal-touch.h" #include "esp32-hal-periman.h" @@ -324,4 +326,5 @@ extern void touchAttachInterruptArg(uint8_t, voidArgFuncPtr, void *, touch_value extern void touchDetachInterrupt(uint8_t) __attribute__((weak, alias("__touchDettachInterrupt"))); extern void touchSetCycles(uint16_t, uint16_t) __attribute__((weak, alias("__touchSetCycles"))); +#endif /* SOC_TOUCH_SENSOR_VERSION == 3 */ #endif /* SOC_TOUCH_SENSOR_SUPPORTED */ diff --git a/cores/esp32/esp32-hal-touch.h b/cores/esp32/esp32-hal-touch.h index 115d6cdc9cf..cc140d81bb0 100644 --- a/cores/esp32/esp32-hal-touch.h +++ b/cores/esp32/esp32-hal-touch.h @@ -37,6 +37,8 @@ extern "C" { typedef uint16_t touch_value_t; #elif SOC_TOUCH_SENSOR_VERSION == 2 // ESP32S2 ESP32S3 typedef uint32_t touch_value_t; +#elif SOC_TOUCH_SENSOR_VERSION == 3 // ESP32P4 +typedef uint32_t touch_value_t; #endif /* diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c index 2af23e075cc..37af58a400d 100644 --- a/cores/esp32/esp32-hal-uart.c +++ b/cores/esp32/esp32-hal-uart.c @@ -625,7 +625,7 @@ void uartSetRxInvert(uart_t *uart, bool invert) { if (uart == NULL) { return; } -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 // POTENTIAL ISSUE :: original code only set/reset rxd_inv bit // IDF or LL set/reset the whole inv_mask! // if (invert) @@ -898,7 +898,7 @@ int log_printfv(const char *format, va_list arg) { #endif */ #if (ARDUINO_USB_CDC_ON_BOOT == 1 && ARDUINO_USB_MODE == 0) || CONFIG_IDF_TARGET_ESP32C3 \ - || ((CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32C6) && ARDUINO_USB_CDC_ON_BOOT == 1) + || ((CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4) && ARDUINO_USB_CDC_ON_BOOT == 1) vsnprintf(temp, len + 1, format, arg); ets_printf("%s", temp); #else @@ -1105,6 +1105,7 @@ unsigned long uartDetectBaudrate(uart_t *uart) { */ // gets the right TX or RX SIGNAL, based on the UART number from gpio_sig_map.h +#if !defined(CONFIG_IDF_TARGET_ESP32P4) #if SOC_UART_HP_NUM > 2 #define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0TXD_OUT_IDX : (uartNumber == UART_NUM_1 ? U1TXD_OUT_IDX : U2TXD_OUT_IDX)) #define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0RXD_IN_IDX : (uartNumber == UART_NUM_1 ? U1RXD_IN_IDX : U2RXD_IN_IDX)) @@ -1112,6 +1113,12 @@ unsigned long uartDetectBaudrate(uart_t *uart) { #define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0TXD_OUT_IDX : U1TXD_OUT_IDX) #define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0RXD_IN_IDX : U1RXD_IN_IDX) #endif +#endif // if !defined(CONFIG_IDF_TARGET_ESP32P4) +// todo ESP32-P4 has 4 UART not 3 See IDF soc/esp32p4/uart_periph.c +#ifdef CONFIG_IDF_TARGET_ESP32P4 +#define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? UART0_TXD_PAD_OUT_IDX : (uartNumber == UART_NUM_1 ? UART1_TXD_PAD_OUT_IDX : UART2_TXD_PAD_OUT_IDX)) +#define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? UART0_RXD_PAD_IN_IDX : (uartNumber == UART_NUM_1 ? UART1_RXD_PAD_IN_IDX : UART2_RXD_PAD_IN_IDX)) +#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 /* This function internally binds defined UARTs TX signal with defined RX pin of any UART (same or different). This creates a loop that lets us receive anything we send on the UART without external wires. diff --git a/idf_component.yml b/idf_component.yml index 4b3e582d256..3b83650bf5b 100644 --- a/idf_component.yml +++ b/idf_component.yml @@ -21,6 +21,7 @@ files: - "variants/esp32c3/**/*" - "variants/esp32c6/**/*" - "variants/esp32h2/**/*" + - "variants/esp32p4/**/*" exclude: - "docs/" - "docs/**/*" diff --git a/libraries/ESP32/examples/RMT/RMTLoopback/RMTLoopback.ino b/libraries/ESP32/examples/RMT/RMTLoopback/RMTLoopback.ino index eada1c7ea6b..17e7af290bf 100644 --- a/libraries/ESP32/examples/RMT/RMTLoopback/RMTLoopback.ino +++ b/libraries/ESP32/examples/RMT/RMTLoopback/RMTLoopback.ino @@ -21,7 +21,7 @@ * */ -#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 // ESP32 C3 has only 2 channels for RX and 2 for TX, thus MAX RMT_MEM is 128 #define RMT_TX_PIN 4 #define RMT_RX_PIN 5 diff --git a/libraries/ESP32/examples/ResetReason/ResetReason/ResetReason.ino b/libraries/ESP32/examples/ResetReason/ResetReason/ResetReason.ino index 3c9dbb9b12f..0104c6422f2 100644 --- a/libraries/ESP32/examples/ResetReason/ResetReason/ResetReason.ino +++ b/libraries/ESP32/examples/ResetReason/ResetReason/ResetReason.ino @@ -26,6 +26,8 @@ #include "esp32c6/rom/rtc.h" #elif CONFIG_IDF_TARGET_ESP32H2 #include "esp32h2/rom/rtc.h" +#elif CONFIG_IDF_TARGET_ESP32P4 +#include "esp32p4/rom/rtc.h" #else #error Target CONFIG_IDF_TARGET is not supported #endif diff --git a/libraries/Ethernet/src/ETH.cpp b/libraries/Ethernet/src/ETH.cpp index bc5a94484da..13f9c11f7fe 100644 --- a/libraries/Ethernet/src/ETH.cpp +++ b/libraries/Ethernet/src/ETH.cpp @@ -30,7 +30,9 @@ #include "driver/gpio.h" #include "driver/spi_master.h" #if CONFIG_ETH_USE_ESP32_EMAC +#if defined __has_include && __has_include("soc/emac_ext_struct.h") #include "soc/emac_ext_struct.h" +#endif /* __has_include("soc/emac_ext_struct.h" */ #include "soc/rtc.h" #endif /* CONFIG_ETH_USE_ESP32_EMAC */ #include "esp32-hal-periman.h" @@ -146,7 +148,7 @@ void ETHClass::setTaskStackSize(size_t size) { _task_stack_size = size; } -#if CONFIG_ETH_USE_ESP32_EMAC +#if (CONFIG_ETH_USE_ESP32_EMAC && !defined(CONFIG_IDF_TARGET_ESP32P4)) bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, int power, eth_clock_mode_t clock_mode) { esp_err_t ret = ESP_OK; if (_eth_index > 2) { @@ -898,7 +900,7 @@ void ETHClass::end(void) { #if ETH_SPI_SUPPORTS_CUSTOM _spi = NULL; #endif -#if CONFIG_ETH_USE_ESP32_EMAC +#if (CONFIG_ETH_USE_ESP32_EMAC && !defined(CONFIG_IDF_TARGET_ESP32P4)) perimanSetBusDeinit(ESP32_BUS_TYPE_ETHERNET_RMII, empty_ethDetachBus); perimanSetBusDeinit(ESP32_BUS_TYPE_ETHERNET_CLK, empty_ethDetachBus); perimanSetBusDeinit(ESP32_BUS_TYPE_ETHERNET_MCD, empty_ethDetachBus); diff --git a/libraries/SD_MMC/src/SD_MMC.cpp b/libraries/SD_MMC/src/SD_MMC.cpp index 6bbcf44d010..80cb150baa2 100644 --- a/libraries/SD_MMC/src/SD_MMC.cpp +++ b/libraries/SD_MMC/src/SD_MMC.cpp @@ -35,6 +35,7 @@ using namespace fs; SDMMCFS::SDMMCFS(FSImplPtr impl) : FS(impl), _card(nullptr) { +#if !defined(CONFIG_IDF_TARGET_ESP32P4) #if defined(SOC_SDMMC_USE_GPIO_MATRIX) && defined(BOARD_HAS_SDMMC) _pin_clk = SDMMC_CLK; _pin_cmd = SDMMC_CMD; @@ -44,8 +45,9 @@ SDMMCFS::SDMMCFS(FSImplPtr impl) : FS(impl), _card(nullptr) { _pin_d2 = SDMMC_D2; _pin_d3 = SDMMC_D3; #endif // BOARD_HAS_1BIT_SDMMC +#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) -#elif SOC_SDMMC_USE_IOMUX +#elif SOC_SDMMC_USE_IOMUX && defined(BOARD_HAS_SDMMC) && defined(CONFIG_IDF_TARGET_ESP32) _pin_clk = SDMMC_SLOT1_IOMUX_PIN_NUM_CLK; _pin_cmd = SDMMC_SLOT1_IOMUX_PIN_NUM_CMD; _pin_d0 = SDMMC_SLOT1_IOMUX_PIN_NUM_D0; @@ -54,6 +56,16 @@ SDMMCFS::SDMMCFS(FSImplPtr impl) : FS(impl), _card(nullptr) { _pin_d2 = SDMMC_SLOT1_IOMUX_PIN_NUM_D2; _pin_d3 = SDMMC_SLOT1_IOMUX_PIN_NUM_D3; #endif // BOARD_HAS_1BIT_SDMMC + +#elif SOC_SDMMC_USE_IOMUX && defined(BOARD_HAS_SDMMC) && defined(CONFIG_IDF_TARGET_ESP32P4) + _pin_clk = SDMMC_SLOT0_IOMUX_PIN_NUM_CLK; + _pin_cmd = SDMMC_SLOT0_IOMUX_PIN_NUM_CMD; + _pin_d0 = SDMMC_SLOT0_IOMUX_PIN_NUM_D0; +#ifndef BOARD_HAS_1BIT_SDMMC + _pin_d1 = SDMMC_SLOT0_IOMUX_PIN_NUM_D1; + _pin_d2 = SDMMC_SLOT0_IOMUX_PIN_NUM_D2; + _pin_d3 = SDMMC_SLOT0_IOMUX_PIN_NUM_D3; +#endif // BOARD_HAS_1BIT_SDMMC #endif } diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 93c686a0d13..35e52f43e4d 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -83,7 +83,7 @@ void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss) { _miso = (_spi_num == FSPI) ? MISO : -1; _mosi = (_spi_num == FSPI) ? MOSI : -1; _ss = (_spi_num == FSPI) ? SS : -1; -#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 _sck = SCK; _miso = MISO; _mosi = MOSI; diff --git a/tools/platformio-build.py b/tools/platformio-build.py index 1ece3afddff..485879944eb 100644 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -213,7 +213,7 @@ def add_tinyuf2_extra_image(): LIBSOURCE_DIRS=[join(FRAMEWORK_DIR, "libraries")], FLASH_EXTRA_IMAGES=[ ( - "0x1000" if build_mcu in ("esp32", "esp32s2") else "0x0000", + "0x1000" if build_mcu in ["esp32", "esp32s2"] else ("0x2000" if build_mcu in ["esp32p4"] else "0x0000"), get_bootloader_image(variants_dir), ), ("0x8000", join(env.subst("$BUILD_DIR"), "partitions.bin")), From a1c1ccb1bf0bd7c9fe6617e69ed7b0c17ce58046 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 13:39:22 -0300 Subject: [PATCH 02/28] fix(esp32p4): Fix lib builder errors --- cores/esp32/esp32-hal-i2c-slave.c | 21 +++++++++++++++++++-- cores/esp32/esp32-hal-i2c.c | 17 ++++++++++++++++- libraries/PPP/src/PPP.cpp | 6 +++++- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/cores/esp32/esp32-hal-i2c-slave.c b/cores/esp32/esp32-hal-i2c-slave.c index 1b439056bbd..95ca305d441 100644 --- a/cores/esp32/esp32-hal-i2c-slave.c +++ b/cores/esp32/esp32-hal-i2c-slave.c @@ -47,6 +47,19 @@ #include "esp32-hal-log.h" #include "esp32-hal-i2c-slave.h" #include "esp32-hal-periman.h" +#include "esp_private/periph_ctrl.h" + +#if SOC_PERIPH_CLK_CTRL_SHARED +#define I2C_CLOCK_SRC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +#define I2C_CLOCK_SRC_ATOMIC() +#endif + +#if !SOC_RCC_IS_INDEPENDENT +#define I2C_RCC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +#define I2C_RCC_ATOMIC() +#endif #define I2C_SLAVE_USE_RX_QUEUE 0 // 1: Queue, 0: RingBuffer @@ -535,10 +548,14 @@ static bool i2c_slave_set_frequency(i2c_slave_struct_t *i2c, uint32_t clk_speed) i2c_hal_clk_config_t clk_cal; #if SOC_I2C_SUPPORT_APB i2c_ll_master_cal_bus_clk(APB_CLK_FREQ, clk_speed, &clk_cal); - i2c_ll_set_source_clk(i2c->dev, SOC_MOD_CLK_APB); /*!< I2C source clock from APB, 80M*/ + I2C_CLOCK_SRC_ATOMIC() { + i2c_ll_set_source_clk(i2c->dev, SOC_MOD_CLK_APB); /*!< I2C source clock from APB, 80M*/ + } #elif SOC_I2C_SUPPORT_XTAL i2c_ll_master_cal_bus_clk(XTAL_CLK_FREQ, clk_speed, &clk_cal); - i2c_ll_set_source_clk(i2c->dev, SOC_MOD_CLK_XTAL); /*!< I2C source clock from XTAL, 40M */ + I2C_CLOCK_SRC_ATOMIC() { + i2c_ll_set_source_clk(i2c->dev, SOC_MOD_CLK_XTAL); /*!< I2C source clock from XTAL, 40M */ + } #endif i2c_ll_set_txfifo_empty_thr(i2c->dev, a); i2c_ll_set_rxfifo_full_thr(i2c->dev, SOC_I2C_FIFO_LEN - a); diff --git a/cores/esp32/esp32-hal-i2c.c b/cores/esp32/esp32-hal-i2c.c index 419ce66bb9b..359b2161201 100644 --- a/cores/esp32/esp32-hal-i2c.c +++ b/cores/esp32/esp32-hal-i2c.c @@ -29,6 +29,19 @@ #include "hal/i2c_ll.h" #include "driver/i2c.h" #include "esp32-hal-periman.h" +#include "esp_private/periph_ctrl.h" + +#if SOC_PERIPH_CLK_CTRL_SHARED +#define I2C_CLOCK_SRC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +#define I2C_CLOCK_SRC_ATOMIC() +#endif + +#if !SOC_RCC_IS_INDEPENDENT +#define I2C_RCC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +#define I2C_RCC_ATOMIC() +#endif #if SOC_I2C_SUPPORT_APB || SOC_I2C_SUPPORT_XTAL #include "esp_private/esp_clk.h" @@ -388,7 +401,9 @@ esp_err_t i2cSetClock(uint8_t i2c_num, uint32_t frequency) { periph_rtc_dig_clk8m_enable(); } #endif - i2c_hal_set_bus_timing(&(hal), frequency, i2c_clk_alloc[src_clk].clk, i2c_clk_alloc[src_clk].clk_freq); + I2C_CLOCK_SRC_ATOMIC() { + i2c_hal_set_bus_timing(&(hal), frequency, i2c_clk_alloc[src_clk].clk, i2c_clk_alloc[src_clk].clk_freq); + } bus[i2c_num].frequency = frequency; //Clock Stretching Timeout: 20b:esp32, 5b:esp32-c3, 24b:esp32-s2 i2c_set_timeout((i2c_port_t)i2c_num, I2C_LL_MAX_TIMEOUT); diff --git a/libraries/PPP/src/PPP.cpp b/libraries/PPP/src/PPP.cpp index 28d6ddd8396..e77a78b77b7 100644 --- a/libraries/PPP/src/PPP.cpp +++ b/libraries/PPP/src/PPP.cpp @@ -7,6 +7,7 @@ #include #include "driver/uart.h" #include "hal/uart_ll.h" +#include "esp_private/uart_share_hw_ctrl.h" #define PPP_CMD_MODE_CHECK(x) \ if (_dce == NULL) { \ @@ -653,7 +654,10 @@ bool PPPClass::setBaudrate(int baudrate) { log_e("uart_get_sclk_freq failed with %d %s", err, esp_err_to_name(err)); return false; } - uart_ll_set_baudrate(UART_LL_GET_HW(_uart_num), (uint32_t)baudrate, sclk_freq); + + HP_UART_SRC_CLK_ATOMIC() { + uart_ll_set_baudrate(UART_LL_GET_HW(_uart_num), (uint32_t)baudrate, sclk_freq); + } return true; } From ea83f5ade2a3406d65b3fdf63e70447afd65a093 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 15:10:54 -0300 Subject: [PATCH 03/28] change(esp32p4): Unhide board --- boards.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/boards.txt b/boards.txt index ad47e0df455..5e4454881b2 100644 --- a/boards.txt +++ b/boards.txt @@ -163,7 +163,6 @@ esp32c2.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32p4.name=ESP32P4 Dev Module -esp32p4.hide=true esp32p4.bootloader.tool=esptool_py esp32p4.bootloader.tool.default=esptool_py From bcc55ea0b86b9556d1a5388e0828f6e454e16be2 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:30:39 -0300 Subject: [PATCH 04/28] ci(esp32p4): Add ESP32-P4 to workflow --- .github/workflows/push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index d5c12c6d3e9..8d25b1a234d 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -233,7 +233,7 @@ jobs: # https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html # for details. idf_ver: ["release-v5.3"] - idf_target: ["esp32", "esp32s2", "esp32s3", "esp32c2", "esp32c3", "esp32c6", "esp32h2"] + idf_target: ["esp32", "esp32s2", "esp32s3", "esp32c2", "esp32c3", "esp32c6", "esp32h2", "esp32p4"] container: espressif/idf:${{ matrix.idf_ver }} steps: - name: Check out arduino-esp32 as a component From 394dd1bf97347fbc42d6867816d5b43ac39dfee8 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:48:58 -0300 Subject: [PATCH 05/28] change(esptool): Update esptool to 4.8.0 --- package/package_esp32_index.template.json | 42 +++++++++++------------ tools/get.py | 9 +++++ 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/package/package_esp32_index.template.json b/package/package_esp32_index.template.json index 701e77b3b21..d6503c3d2a2 100644 --- a/package/package_esp32_index.template.json +++ b/package/package_esp32_index.template.json @@ -460,14 +460,14 @@ }, { "name": "esptool_py", - "version": "4.6", + "version": "4.8.0", "systems": [ { "host": "x86_64-pc-linux-gnu", - "url": "https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-src.tar.gz", - "archiveFileName": "esptool-v4.6-src.tar.gz", - "checksum": "SHA-256:22f9bad0cd1cea14e554ac1f4a6d8f67415ff7029a66ce9130756276e7264e5a", - "size": "99141" + "url": "https://github.com/espressif/esptool/releases/download/v4.8.0/esptool-v4.8.0-linux-amd64.zip", + "archiveFileName": "esptool-v4.8.0-linux-amd64.zip", + "checksum": "SHA-256:e637adc204b74b980013e89dafce6e056401ec26c94e205b0158075a836c56c6", + "size": "64617780" }, { "host": "i686-pc-linux-gnu", @@ -478,31 +478,31 @@ }, { "host": "aarch64-linux-gnu", - "url": "https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-src.tar.gz", - "archiveFileName": "esptool-v4.6-src.tar.gz", - "checksum": "SHA-256:22f9bad0cd1cea14e554ac1f4a6d8f67415ff7029a66ce9130756276e7264e5a", - "size": "99141" + "url": "https://github.com/espressif/esptool/releases/download/v4.8.0/esptool-v4.8.0-linux-arm64.zip", + "archiveFileName": "esptool-v4.8.0-linux-arm64.zip", + "checksum": "SHA-256:c3a7749bed8d1929b0ad35743cc5557d60ecb81a10ffac28cb55ed1545e0223a", + "size": "54432155" }, { "host": "arm-linux-gnueabihf", - "url": "https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-src.tar.gz", - "archiveFileName": "esptool-v4.6-src.tar.gz", - "checksum": "SHA-256:22f9bad0cd1cea14e554ac1f4a6d8f67415ff7029a66ce9130756276e7264e5a", - "size": "99141" + "url": "https://github.com/espressif/esptool/releases/download/v4.8.0/esptool-v4.8.0-linux-arm32.zip", + "archiveFileName": "esptool-v4.8.0-linux-arm32.zip", + "checksum": "SHA-256:b781a86b53a17d24e02996c0a7958f9b76f6873fc1cc07c64ab6326e19395570", + "size": "45858426" }, { "host": "x86_64-apple-darwin", - "url": "https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-macos.tar.gz", - "archiveFileName": "esptool-v4.6-macos.tar.gz", - "checksum": "SHA-256:885ec69fcffdcb9e7c6eacd2589f13a45ce6bcb6742bea368ec3a73bcca6dd59", - "size": "5851297" + "url": "https://github.com/espressif/esptool/releases/download/v4.8.0/esptool-v4.8.0-macos.zip", + "archiveFileName": "esptool-v4.8.0-macos.zip", + "checksum": "SHA-256:73bba755d2da15ef18b8b8d8fe37c459d296648efb02d5449a3fc0035930306a", + "size": "29821710" }, { "host": "x86_64-mingw32", - "url": "https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-win64.zip", - "archiveFileName": "esptool-v4.6-win64.zip", - "checksum": "SHA-256:c7c68cd1aa520cbfce488ff6a77818ece272272eb012831b9d9ab1280a7c393f", - "size": "6638480" + "url": "https://github.com/espressif/esptool/releases/download/v4.8.0/esptool-v4.8.0-win64.zip", + "archiveFileName": "esptool-v4.8.0-win64.zip", + "checksum": "SHA-256:5575beabfe8c1c1ea7c1a0f1bd42ee97ac3f4c4dae5fc74cda58be0e23016da3", + "size": "33608471" }, { "host": "i686-mingw32", diff --git a/tools/get.py b/tools/get.py index 45f97d62f54..b8fc539ed46 100755 --- a/tools/get.py +++ b/tools/get.py @@ -24,6 +24,7 @@ import re import time import argparse +import stat # Initialize start_time globally start_time = -1 @@ -177,6 +178,7 @@ def is_latest_version(destination, dirname, rename_to, cfile, checksum): def unpack(filename, destination, force_extract, checksum): # noqa: C901 + sys_name = platform.system() dirname = "" cfile = None # Compressed file file_is_corrupted = False @@ -223,6 +225,8 @@ def unpack(filename, destination, force_extract, checksum): # noqa: C901 rename_to = re.match(r"^([a-z][^\-]*\-*)+", dirname).group(0).strip("-") if rename_to == dirname and dirname.startswith("esp32-arduino-libs-"): rename_to = "esp32-arduino-libs" + elif rename_to == dirname and dirname.startswith("esptool-"): + rename_to = "esptool" if not force_extract: if is_latest_version(destination, dirname, rename_to, cfile, checksum): @@ -256,6 +260,11 @@ def unpack(filename, destination, force_extract, checksum): # noqa: C901 print("Renaming {0} to {1} ...".format(dirname, rename_to)) shutil.move(dirname, rename_to) + # Add execute permission to esptool on non-Windows platforms + if rename_to.startswith("esptool") and "CYGWIN_NT" not in sys_name: + st = os.stat(os.path.join(destination, rename_to, "esptool")) + os.chmod(os.path.join(destination, rename_to, "esptool"), st.st_mode | 0o111) + with open(os.path.join(destination, rename_to, ".package_checksum"), "w") as f: f.write(checksum) From 03d6e3218a07803b6baf823190ba391a6dd15dd3 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:49:17 -0300 Subject: [PATCH 06/28] fix(build): Fix redefinition errors --- platform.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform.txt b/platform.txt index ebc8d23a5c7..2fca8459874 100644 --- a/platform.txt +++ b/platform.txt @@ -10,7 +10,7 @@ tools.riscv32-esp-elf-gdb.path={runtime.platform.path}/tools/riscv32-esp-elf-gdb tools.esptool_py.path={runtime.platform.path}/tools/esptool tools.esptool_py.cmd=esptool -tools.esptool_py.cmd.linux=esptool.py +tools.esptool_py.cmd.linux=esptool tools.esptool_py.cmd.windows=esptool.exe tools.esptool_py.network_cmd=python3 "{runtime.platform.path}/tools/espota.py" -r @@ -101,7 +101,7 @@ build.code_debug=0 build.defines= build.loop_core= build.event_core= -build.extra_flags=-DARDUINO_HOST_OS="{runtime.os}" -DARDUINO_FQBN="{build.fqbn}" -DESP32 -DCORE_DEBUG_LEVEL={build.code_debug} {build.loop_core} {build.event_core} {build.defines} {build.extra_flags.{build.mcu}} {build.zigbee_mode} +build.extra_flags=-DARDUINO_HOST_OS="{runtime.os}" -DARDUINO_FQBN="{build.fqbn}" -DESP32=ESP32 -DCORE_DEBUG_LEVEL={build.code_debug} {build.loop_core} {build.event_core} {build.defines} {build.extra_flags.{build.mcu}} {build.zigbee_mode} build.extra_libs= build.memory_type={build.boot}_qspi From 5c22a282fd97f9b7917fa5317bd75b658ffa0ec8 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:00:45 -0300 Subject: [PATCH 07/28] fix(build): Remove old commands --- platform.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/platform.txt b/platform.txt index 2fca8459874..3945e492c62 100644 --- a/platform.txt +++ b/platform.txt @@ -121,7 +121,6 @@ recipe.hooks.prebuild.3.pattern.windows=cmd /c if not exist "{build.path}\partit # Check if custom bootloader exist: source > variant > build.boot recipe.hooks.prebuild.4.pattern_args=--chip {build.mcu} elf2image --flash_mode {build.flash_mode} --flash_freq {build.img_freq} --flash_size {build.flash_size} -o recipe.hooks.prebuild.4.pattern=/usr/bin/env bash -c "[ -f "{build.source.path}"/bootloader.bin ] && cp -f "{build.source.path}"/bootloader.bin "{build.path}"/{build.project_name}.bootloader.bin || ( [ -f "{build.variant.path}"/{build.custom_bootloader}.bin ] && cp "{build.variant.path}"/{build.custom_bootloader}.bin "{build.path}"/{build.project_name}.bootloader.bin || "{tools.esptool_py.path}"/{tools.esptool_py.cmd} {recipe.hooks.prebuild.4.pattern_args} "{build.path}"/{build.project_name}.bootloader.bin "{compiler.sdk.path}"/bin/bootloader_{build.boot}_{build.boot_freq}.elf )" -recipe.hooks.prebuild.4.pattern.linux=/usr/bin/env bash -c "[ -f "{build.source.path}"/bootloader.bin ] && cp -f "{build.source.path}"/bootloader.bin "{build.path}"/{build.project_name}.bootloader.bin || ( [ -f "{build.variant.path}"/{build.custom_bootloader}.bin ] && cp "{build.variant.path}"/{build.custom_bootloader}.bin "{build.path}"/{build.project_name}.bootloader.bin || python3 "{tools.esptool_py.path}"/{tools.esptool_py.cmd} {recipe.hooks.prebuild.4.pattern_args} "{build.path}"/{build.project_name}.bootloader.bin "{compiler.sdk.path}"/bin/bootloader_{build.boot}_{build.boot_freq}.elf )" recipe.hooks.prebuild.4.pattern.windows=cmd /c IF EXIST "{build.source.path}\bootloader.bin" ( COPY /y "{build.source.path}\bootloader.bin" "{build.path}\{build.project_name}.bootloader.bin" ) ELSE ( IF EXIST "{build.variant.path}\{build.custom_bootloader}.bin" ( COPY "{build.variant.path}\{build.custom_bootloader}.bin" "{build.path}\{build.project_name}.bootloader.bin" ) ELSE ( "{tools.esptool_py.path}\{tools.esptool_py.cmd}" {recipe.hooks.prebuild.4.pattern_args} "{build.path}\{build.project_name}.bootloader.bin" "{compiler.sdk.path}\bin\bootloader_{build.boot}_{build.boot_freq}.elf" ) ) # Check if custom build options exist in the sketch folder @@ -162,7 +161,6 @@ recipe.objcopy.partitions.bin.pattern={tools.gen_esp32part.cmd} -q "{build.path} ## Create bin recipe.objcopy.bin.pattern_args=--chip {build.mcu} elf2image --flash_mode "{build.flash_mode}" --flash_freq "{build.img_freq}" --flash_size "{build.flash_size}" --elf-sha256-offset 0xb0 -o "{build.path}/{build.project_name}.bin" "{build.path}/{build.project_name}.elf" recipe.objcopy.bin.pattern="{tools.esptool_py.path}/{tools.esptool_py.cmd}" {recipe.objcopy.bin.pattern_args} -recipe.objcopy.bin.pattern.linux=python3 "{tools.esptool_py.path}/{tools.esptool_py.cmd}" {recipe.objcopy.bin.pattern_args} ## Create Insights Firmware Package recipe.hooks.objcopy.postobjcopy.1.pattern_args={build.path} {build.project_name} "{build.source.path}" @@ -176,7 +174,6 @@ recipe.hooks.objcopy.postobjcopy.2.pattern.windows=cmd /c if exist "{build.path} # Create merged binary recipe.hooks.objcopy.postobjcopy.3.pattern_args=--chip {build.mcu} merge_bin -o "{build.path}/{build.project_name}.merged.bin" --fill-flash-size {build.flash_size} --flash_mode keep --flash_freq keep --flash_size keep {build.bootloader_addr} "{build.path}/{build.project_name}.bootloader.bin" 0x8000 "{build.path}/{build.project_name}.partitions.bin" 0xe000 "{runtime.platform.path}/tools/partitions/boot_app0.bin" 0x10000 "{build.path}/{build.project_name}.bin" recipe.hooks.objcopy.postobjcopy.3.pattern="{tools.esptool_py.path}/{tools.esptool_py.cmd}" {recipe.hooks.objcopy.postobjcopy.3.pattern_args} -recipe.hooks.objcopy.postobjcopy.3.pattern.linux=python3 "{tools.esptool_py.path}/{tools.esptool_py.cmd}" {recipe.hooks.objcopy.postobjcopy.3.pattern_args} ## Save bin recipe.output.tmp_file={build.project_name}.bin @@ -286,7 +283,6 @@ tools.esptool_py.upload.params.verbose= tools.esptool_py.upload.params.quiet= tools.esptool_py.upload.pattern_args=--chip {build.mcu} --port "{serial.port}" --baud {upload.speed} {upload.flags} --before default_reset --after hard_reset write_flash {upload.erase_cmd} -z --flash_mode keep --flash_freq keep --flash_size keep {build.bootloader_addr} "{build.path}/{build.project_name}.bootloader.bin" 0x8000 "{build.path}/{build.project_name}.partitions.bin" 0xe000 "{runtime.platform.path}/tools/partitions/boot_app0.bin" 0x10000 "{build.path}/{build.project_name}.bin" {upload.extra_flags} tools.esptool_py.upload.pattern="{path}/{cmd}" {upload.pattern_args} -tools.esptool_py.upload.pattern.linux=python3 "{path}/{cmd}" {upload.pattern_args} ## Program Application ## ------------------- @@ -294,7 +290,6 @@ tools.esptool_py.program.params.verbose= tools.esptool_py.program.params.quiet= tools.esptool_py.program.pattern_args=--chip {build.mcu} --port "{serial.port}" --baud {upload.speed} {upload.flags} --before default_reset --after hard_reset write_flash -z --flash_mode keep --flash_freq keep --flash_size keep 0x10000 "{build.path}/{build.project_name}.bin" tools.esptool_py.program.pattern="{path}/{cmd}" {program.pattern_args} -tools.esptool_py.program.pattern.linux=python3 "{path}/{cmd}" {program.pattern_args} ## Erase Chip (before burning the bootloader) ## ------------------------------------------ @@ -303,7 +298,6 @@ tools.esptool_py.erase.params.verbose= tools.esptool_py.erase.params.quiet= tools.esptool_py.erase.pattern_args=--chip {build.mcu} --port "{serial.port}" --baud {upload.speed} {upload.flags} --before default_reset --after hard_reset erase_flash tools.esptool_py.erase.pattern="{path}/{cmd}" {erase.pattern_args} -tools.esptool_py.erase.pattern.linux=python3 "{path}/{cmd}" {erase.pattern_args} ## Burn Bootloader ## --------------- From 0a37668af2137dcc3dd9730ed3dde8f2d3bae6b8 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:07:16 -0300 Subject: [PATCH 08/28] change(esptool): Remove unsupported 32-bit tools --- package/package_esp32_index.template.json | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/package/package_esp32_index.template.json b/package/package_esp32_index.template.json index d6503c3d2a2..21b3635bfcc 100644 --- a/package/package_esp32_index.template.json +++ b/package/package_esp32_index.template.json @@ -469,13 +469,6 @@ "checksum": "SHA-256:e637adc204b74b980013e89dafce6e056401ec26c94e205b0158075a836c56c6", "size": "64617780" }, - { - "host": "i686-pc-linux-gnu", - "url": "https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-src.tar.gz", - "archiveFileName": "esptool-v4.6-src.tar.gz", - "checksum": "SHA-256:22f9bad0cd1cea14e554ac1f4a6d8f67415ff7029a66ce9130756276e7264e5a", - "size": "99141" - }, { "host": "aarch64-linux-gnu", "url": "https://github.com/espressif/esptool/releases/download/v4.8.0/esptool-v4.8.0-linux-arm64.zip", @@ -503,13 +496,6 @@ "archiveFileName": "esptool-v4.8.0-win64.zip", "checksum": "SHA-256:5575beabfe8c1c1ea7c1a0f1bd42ee97ac3f4c4dae5fc74cda58be0e23016da3", "size": "33608471" - }, - { - "host": "i686-mingw32", - "url": "https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-win64.zip", - "archiveFileName": "esptool-v4.6-win64.zip", - "checksum": "SHA-256:c7c68cd1aa520cbfce488ff6a77818ece272272eb012831b9d9ab1280a7c393f", - "size": "6638480" } ] }, From 979b16b3b19d02917ddccf0139c6913cca618714 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:15:49 -0300 Subject: [PATCH 09/28] fix(get.py): Force exe generation --- tools/get.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/get.py b/tools/get.py index b8fc539ed46..8d2ad7cffa3 100755 --- a/tools/get.py +++ b/tools/get.py @@ -148,6 +148,9 @@ def verify_files(filename, destination, rename_to): return True + + + def is_latest_version(destination, dirname, rename_to, cfile, checksum): current_version = None expected_version = None From 26218d4225fa46ba5c87f66be952545539f5fbe1 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:19:50 -0300 Subject: [PATCH 10/28] Revert "fix(get.py): Force exe generation" This reverts commit 979b16b3b19d02917ddccf0139c6913cca618714. --- tools/get.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/get.py b/tools/get.py index 8d2ad7cffa3..b8fc539ed46 100755 --- a/tools/get.py +++ b/tools/get.py @@ -148,9 +148,6 @@ def verify_files(filename, destination, rename_to): return True - - - def is_latest_version(destination, dirname, rename_to, cfile, checksum): current_version = None expected_version = None From b23a2fb24a28b513d106bb3d72f7c4527ddb189d Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:27:54 -0300 Subject: [PATCH 11/28] fix(get.py): Fix system check --- tools/get.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/get.py b/tools/get.py index b8fc539ed46..3d71dbffd2e 100755 --- a/tools/get.py +++ b/tools/get.py @@ -261,7 +261,7 @@ def unpack(filename, destination, force_extract, checksum): # noqa: C901 shutil.move(dirname, rename_to) # Add execute permission to esptool on non-Windows platforms - if rename_to.startswith("esptool") and "CYGWIN_NT" not in sys_name: + if rename_to.startswith("esptool") and "CYGWIN_NT" not in sys_name and "Windows" not in sys_name: st = os.stat(os.path.join(destination, rename_to, "esptool")) os.chmod(os.path.join(destination, rename_to, "esptool"), st.st_mode | 0o111) From 488740b45a3030ffd85ed3de431dd7f849bad819 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 21:29:32 +0000 Subject: [PATCH 12/28] change(tools): Push generated binaries to PR --- tools/get.exe | Bin 6930008 -> 6943200 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/get.exe b/tools/get.exe index 161cb193cae89e3dbc84006a7c7332e2683eb329..6447c63e9c8d4e0c292955d3a8634ef187197175 100644 GIT binary patch delta 154912 zcmWjJQ*@rq8i3)(MjP8sW81dPKenAWwrw=F8#HKR+i8-<))#w!``}u0GHcBoK69^G zeJh9hw^sqx2oC|(k$Ikq1fdAI+LNjWp#)hp8d?nzSq<@jknPnFP>7}f-xAqg1_cJ) z-d+YH8w}VJuJ{yeOiwdqPQ=n0x!)e!&S7hF>u1_?;- zc{wo38<0|Pu+QTeONHuDAZwvOV=4g3@hM*tV6fW#Iw z%#oie=klldJ!U2fbeA}VnBrzn9&O$t_81gdGonp~apc03!-G7a*P*c0;J3zAI#04f z%wI#q`)E8M0iyy26dmw9^HF^N2hjQLCjQZLpws-+7MJB;vm1Ppn7g?VKn4iCfEmGl4uC zC6c|AmfiE5@g9Fdzqcno!6QE9sKi^0HeV=?M0S+6rx@=aPqcvx(@mUZ-l!f&d`J0i zXY}fXLtBL;>UnN9b2&zM#CLNnNRcf-E5)f>AYPRHF= zvZJ8R{w?IGXet>f@?-n)l0zMJWTm(3K+F3yH(v<))-ikwg%@rx2ol&CF;&? ziF$lv6AW!+PZkCBi<);i_v^$S5Y-o}>#a(ThB+Gy>PmLH?Q2)3TrE1g{{e*Yw<&vE z$_2EVXZ^b0y{F|`v>x*MQ#L9$ZkKY@N4Lm0S*s$R%LkLnp0#>*H3>X`fAjIKn}KRv z88`%6u6t6}c|4wPJ8S$`dshj>Z6|hPIqm|w9*#WTihFHy?x$F7(ol0P5!*iVV%Xo5 z5z;uZUMr@5#9#V;%RcR`7zG$@uX2zQw5_)g>)6{s}>wJ zi(^dO=f6m93(z-WNMFtBVAWY!L-ipCa_B$O5qFi;GdN5wK+-02UR=QSR{Fl+q%l|C z=FEnDbWz1|qD-bcodqwmLgu4>yzJDB4~$o&O^hQU%Bi0rQWxf+Z~{Jc&6?ZuDjU{3 zdJ_b;(mqfE*|keaO1jtd+Y9}ZZF(im=UM?Y8b_Tf4^*-KX~ZwdPyCxhpy){D&bst| zyxB~<%QdlPRs~j@h?Ak_Uph5LNK;Wf9LMNlC8xY>9QumE7-;OV)76zsJoVf*Vc0|g zJ>9#bU)R+_`QX(BiUDitjg*tH>`Q1RstGj>`KhYC(@OfQfsOKo@{1Yjig&^~QsrD? z+SX+4^cOtwo7RI`e>u%{+M7q{)0E2-`Qhfvf`_y+jS)&cuNTg6F2kTx&3l*w$+G&M zpmuATh2mvral5kaa}nCVEbr%kO22`_n&~=ZNH6_Dej9Yfr1$jMv2L`dTN)zT|vRd&0 z|NAw5D{m4Z{(y4{Km3z{aE#jvSwRlT`(ZippkxBqvh#4heJ3@fg?e?HMVO2>wYqkJ zkxjnM-l*PvO+Y&@mIEoYB2W83HK%rtT{oq@_rGQ!kx~WHL&AoD2h+k3;m)NjA2E)! zP2DE9psUp5&O`Epb~dcbeso0u%41!L(H6Rovo7Bo5^hEl~W(HZ! zj()KMD=XKQ?aDF==CtCMp#NQljqTXQ{8^HVW$1ZrDWKj-VeJI>$~=hQre{oxiTJa@ zJTYLeNYFz2r1kCf+-llmiAm!iO;DYI+fcyp50lbHAhx8N;>cHTrQoMZew%Pu2Ud;6 z@74q>81Wf6IhyU~KJ8*ekr?HUa^Kk2A6Phz?K)$v7e`z*syXyLm?x!}84q8 z9hWpG=U(my%k#~nk(%m)_q{e*wmSjhnb2PuUa$o%spH&YI{jrYtW6Ry-b#^{*t;?5 z21E$7kN<5gJ!MrcpA)BYogKZV)|FeVrP}y}90I;6DUr0rmp*6*E^@?Vb>)!(bB@X7 zuHtR@wp%xK44Zh_wFC*Z)7lIcZ2Fs;eF_-dK1;eDiS*3&hNeJ6IlV|VR9l_2*&G+- zF(U*rEzY|OnivGa$}(q^T(x=8Rv0zEWR5)@j3Ko~_=li+?`~Q6rEZfm-dHcXnfKR8 z0RRq4?UVH}Uu;`gY&%;CJ0RC(J3uhND#P{oHFC4J@A2!4(QYpplSo@+SC78FZ=sSe z+){5TAaL~pPoZPfH(FcOQ1!u0TE2!*mWmT_MlUGJiwu33v;MPNbn##{sa}l1a$VQS z+NPuB`)sJa6{U=L&;GK~Hy>rnTdi zwFyl2Z=HqU#l*T1sHgL(?5N7qreG_ zaG>FVcIn>C%BEHe-dv`IMU(G9Q;$BnhnlO`Qi&JsBm0_Fbv+W1)vFHy#aHqovf`Fn z##|ABiy6lp#g_9fj$8@DYyWzMgqFte3@CZG7DV>!VLh4Ee)p#JZW%OeGHA$b(+2}x z$}*d%jkbuhFuIIhndh=5d|SqmPC#9R$M!5DdqPAY*Q>&;uuY=`)%T7~A zs3@6bZ&6=_@(aT}^;au52S&~!s|6LCHrF8pMJudZ7u}qJ$w}KGn|X4Y*8`@Xaga~t zdPm`rcw^`l`<(qdxaQ)2nv3BWla740Zj2)Fasr}pVx>=fC1?waeDd}RngD)9jw7OR zwr_imV)sxl+#@f?TBV)vq+QG`jx0rt_ ze^n(EEsF8QwY#8jZ1Sd?3plCjjsIr$B#rCv|bi z9=e&~W3<+-WkW`!vC*aDV&TG|?n267RK}@5&Wh7{1GoFDb|z zk4bQa@|BQ0pzoCqpH?i!d~wC}X9aVz$rPjjjIuL=$ztnIysWS<;V>=c2>)b#Z7WWB z?@}#>>{}P^nO&G!=s^6NM!k5CDX*hF0#iMAB^Q9SC8l!UZ$O2FctupFFO+o&=MHVJ1I z0bDIs!qVloX?TU6^);rSrV)6!1B=ZOTHQH5+G8~BZU*M@l-co?60g#I5-=>z+unSkB_VV!wMC=+&pXQL6WPR{Z9KX;lo zT{xC7QNfUx{Cq?2BhvVGKO1Fcln#>>eI2WQDC?V(FA=K&wn%V)aVpPcF;m@O500|t zH(bXN4x08EMW4Ty`&%u@QoC>7?!M27zBgpuI!^LRvIB9Jn@uI$lN_Nv1mX={{vziH zaR(g2o0$STcMp!W=xKbz6F=Oy59djLwHmJ;VG3EaR5&uX-U?YC{qZ!OUExKSr0~7F z9nL;(j?TWk;!TA@09cTPc?jrn-Y*{3;H&=1vA{mdY5#LO4T3=K4qy+VOCgkpB>{cI zLQA@UivW_Em%_}}2Q@Opsg^Dy@F25=sWqPu1f@fJNXEw?A7q2tjxW|i3H zFsoc`3V0N6B{}cHA9j4`c-2XSECoF9s7GYqG7I_K&)eHP#7w60%jbT_u~uHn-8}J} zi@o?skHy1%Tc>xS^{23ryH@d=)-5}B#1-#U53HFfJ_i@=mJwB zZp1DdDR{HZX>swU18e(2#G`U1s0#Q!OMt-zL&`3CeNibu$0-wIVCT}jih$Al7Ksxh zd*OS=qWuy=l7FQAmbSUmM%3pmONnlT*B*Y{5nMsbT#J-QlAZ;`#i%y7sVho8xdU|| ztQ^9VBxVNJG-*<$>sw!PiC6sFnM+}xR8wm8ytF2>^VohF9AI00z`YD&OGUwpMV#)T_(%M{$kQhN z7{xs2+nmx$&}L{${ELP*0{X9{Epac8NX_smJrh^bMZ76PSqk>4|=4o$SRK}*7MmJjG4!v|0RmU7ugz;Mg%?s8(jHo10gOp^9 z_1}}@yeL@BS4|#e7{6lQ3UspUG2-dIxzbCPg75|H-n!*e&jw4@BRe_sQHYn!h|7X{ zhDp_tkgqFYi8+6l_)eBcO#&qiL9siq5Klqse-xel_j8S4{j(rRh;8(PVTAUQ%$egE z8v43a-QL%!w@xXvkD$8K6MW=*6<_bDS#eQ_sL+G^BIV*^Q9o!X1UGw z*SvrXh{>$NAe6>f4}(lHD}TYjxc)5 zv7%(rZgDT@ul!30f9@mZFJ1#~1I2J2w>7UG)gLkbOEwBYHXoj*i6cT4@;Mo&DG=7~ zdO1H(o)&x@e8$^ut~f`E?@GP*O3|J^rg3TH{;~Bj_`I6grd`cs4(FLEN>m*__PVc# zZmSP(76HGIM2?WyjdW)pLhI(q2XJpq)d>j#U)T zN0*KlGq$M+ETP}gPL*h^Hv8AVVrp+lb6YGL#XczwPpMn;My}dDX8Plag`820hD`F2 zk}HjEf&+#N*L~JPt4eK?eiqZ2Va_{KCZka4zw9}QJ7EO?f|}=ijTn#QFi0cAB5w{# zWxPlZ7m60rnye;y!pRym^Yhefy;;Mx>80Xkh~BVzJ`>|j6HZ=`(m3Hn{`QL>}T`@&nv-1Zqjk~vRn-d${WjC093kUd=*7Y0EVvG|Y!m>i%bGMyQ zn%P<>4JkQ#xAixvIP_LXo&R#tTVuzxqO3T!*N=CiQ$S8ve|xV@_aP>XJMXzuT>o;# zR^WAont3o@6@n~CZ;uu8qGHPmu9-8-HGIT1R; zZzIKZM_nl2dbRZ8PeB+{&?BYoF202HTGg7yqcu0Xz0u*l;p*Mag?xsZkQ4un(dve+ zi#IwCD9v3{Ec}Ms6LC*M(O81;P85@Zn+K)mRuECCQV>k4vh}D`jdH)ObwaLm$4mfn zNgg5CKA+D-Lr!sLMYm>gtD(gIuWN9Y&7VGyAYp62dKK20v)?^m(f#Ur;~}e_LQ0f- z*d3r8W|fjt__Bl*%)!NcaFXpR-Q1UeAxL@tG1g zhhFI40-4ymrI)W)+5Q$L%#9=Vjmsz>)ONbtEv!L}g*5LN{zi8Hrp=*2&%t~>YDzs` z*zu;2<(oq*9?Om?@$-TtY4PrIOok8bSs6Kl)xMTr2lGI=^0crdH{9C!nOS3>Dq?;c zU?1t{cOY?3Ts^8Th^28E?1e5bVPn~kK28k-(Qm>$W(k@1>fzYmP{%uSpnAAxH(?rf z;I7PC*qe;bZBEwoxEMqDNd-!X-Eg^_k!8#cTI+n8ms8-%IDup0KP#wihR=8u<*HV- z`ek`4U?d#v{Y#7x<~OCgcMKS%)+z!Z(9)K^Q+m9MSW-@4&Gjw$=vZkip~k+0U@Akp zP)>q1b5v|WT5YyfsV=%cOqhqWZEf_$9J9`atGC&9QW^uIa}SMj|Az2AI?9)#c|l(I z>XGX1KyOO8wd|;%&C%xg`EU_)Xz88(XyV>?paiMIZmG-s)?r|W&M8ITZF>=jR=05> ziL3}CT2)7-x=lSddC6v2l=^w<*YNZ{GX%$__%vF`r$Dg8AP38hIw?=;*_x&-)Q)!7nyhK4n}HOxHtPSDxgksyW@U-?FYU6 zIzHb-k1jx-TRWA|>-;P2?;i!A+BFIH(=3Z=Cy${_E$e&wp}rAPo_Y#?&6Qf!Ul2CI zxAcIreLkqRI5gvu|Ab?;2EJdT{G-Ks_xSNa(e2HP0E~HpM8&Mr55!s+4W$Ex{#g2t zjcm5GjSl2S@Eb?nm_ySo2!N|tT~dXk6eZ(0Xu|+zR_j3kFZ?&Q`4>H){-({0%Pb1i zmV@y?^~fL8L+NsEmbu^F6?Nh3O9X@KA4w_#}MIAe_kyM5MydR zc75PAva^=5gH^%$p^X4QO;=y~N`M##@vyB58p(A4(2#{%=F#hN+%jC~ zBzKY7EAZ?cgzt>Gzqlb>TYAX3(T>&p`VuY{wvRmYf*v1WC zm3ktXZu<7w=Y(I9QgU}gh$vvF^~<*=d(QvF^Gp2qi&sW>3Ms%@PTvU zImQ^dEd&b&2L=y@0EP&L1cnTT0)`5P28Isy73>=rM*Fr9W;Y0UG*oo@VfXX#EhbXc`G7HH0p@79}cFXPpg}VX{%x} zsSMD`Nhp03~eX?P{-NVJwv%)Rpb_gP3Am3?8LM} z?!1=&hIHOcy_eCMcu$17A4`{_W_Jta#6Yo)qKQ+!w^Ah7WJ zIxUaZs5I~_fOYKEtB(*lPzj|xldNCV9E_@`GUnE-FDsEVC%wDS)scJazx6pw1Gangq1^`_itabLl{0RXmO0LB;jeb zvmHe}$XWK3mGQqY0?}>Jq?t@e&;qSi{{I>#dDoWVIOCKyMrL< z6g{GWJ!LB|e~p^9@XqUM=U|fWk5pn-^r)AG|-&USUY0n-=u?7+$CgI0P=sp!<==La$28xbeo@b6Y40HqEAUMW~EBU^z zoXLxhs$<${h?dK5|56rmQx2^%LN*ub!|ZnQ==$6L-H(xXMc*eD#ggqy!vdB+*;{^C z%uh@vyt6{q8{S{*K90VyKI8lV!(pQ%;sk)%KNyPlBTbGMK)&|JpFrU8Q{hV<@(sTA zUT{kC&21R)3{^yJ@z?AhhpW_}lIf>T{oLeW)U5}sZAVJo};Pm2}O#z4W&2#oC z354yQ^7lVdpW&|>nTU68IyTexgpD1QkL*9m1f9@l&NIfLf{uua)kBVTTzbCZlt|V$ zlW{}cUxgT>PW8cR^Y{Ekk$SrmO4%5)d1DF(NJ1(taC z670KvSwFAX6+S53v!N=V#x(f@DJ6Dq`U+Ef^pndmKl+dF1!AT_KF^Z^i}(cH{B#+z z%&9h}jg?KFB7Vx-DR#e@ZQ;x>Pqex(g3sMn{>z@P4C97nKH0=FmJ!aOxu*BP4!(8d zQ=lbyHr<1eU?N2HRf{Ssror_F&fBndnqH?wALw?R#MC*QFte`*9ZK<7slNWqPN|ms zGmgl^0~IP*WdEC?SG%j0-kpFRy5ZumgH=fhW*BAbeeNp^;8XeP4@_-)|k$uL{l z@W&6jcDF$Der?3@NZypZt3TxY)LAto^SyIWJEDSl_rykF>eYjbe6VvC@KTE|_bKCP z5K}9nuSuU<6uP%!;6pq4uId_4A@UYYMsj7c^+!xBRB@>MY_)aoBQ3T_P_6Nt)Lc3V z{hGSbptP>SN3VUqEj8obMwlo7?ib|Vq=yR5BW^rZtg^;v(`1ocWGeOS z_S{nwRys`IiLZ~~-9)wwuvi{td9q``RWi>Cx|c9kmI|CFU#mUD*2#!QGmo*{6#F>a zq}EMOSA0)&!ZzGSS*AdTynv6HDR+?}UK9Sfc5F&0+iuT))1Q8-``lNadC)JCBA0eW zE=Mh~MHKz|?T^bhF*6p@s03=8thZ`OvXF@;o99@1!T*_nL0q+B{De zIGW9?@7(UiIfVEvyAt~C{8zg#i=3s?W&OKXg<0Z>o_Qf(+*!m);IoL?psigoDb4oT zJqSoV!p>)=2G3^}0pQ(XaDuk0Xtw6RN<=8L>64V_9W*Ju*lp$atD}!4ob+Ea*%U9% z^mvk#MhT7yJJ@j}xbIE@1C*qwn9n#?P0Vg);|JJ`ns=&@PfN{biPc{U@tW|S=n+_e zWM~r=^Uo^q8q`-imb;VQc*1?_@k%Vi*KYxl7GKqSKb{6CrAJJAN)q$yxL51kz2XL6 z_O*F?pg)~}`hF<<3(6LL4g`{rpGIM>w`;nffFz{Z=!L5B9Bv}_yM9UiZeFp{d2X2n zdADoH@IFqc(kuJ+_VHANxGLKl8X_q z3>bn@b$P&=#hIwVxW0&zAYQ_^fnY+Da9>ofVE|9Wn&k!8BsOziEAf@IGyH-Y@O9Z;b6Ly5Pn3j>#}Z`dPZv zO%bVW2&w6!LR`L)xx7f5a!x0@EHes8NV6RGrQAgYQu^bPlNToNvb|5*N=Tbb0tUWA z;N;)VUnMAqd?IS)vP;`~Id`qnJdpsh0=W=P2>C*&`qJ(am0Jok@cs8J?ZwQyg+C(A zA!vjy?ZaJ?@Zuas*cP8ZcbPdTTyMkb!{T^1F$n7p?M5%O2$6u#_Ka6tmaq#a`G)gw zbUHAwQyTwSjY+zl5u1SpPnWOSNSTXgF#y=U?(BnOrpxGkL%7zzs5*eP^&Xak7>n__UMyYLNJlt@WbsaB4N}0RhZU49N5npu`?$ukWjJ5>ryT9le&ih zMo4bWsLEoc)JHCqY4TMeYdp-prxzx^4Aa|5@JrsQ+}>s;oco;4%_*@htJM;G0Dz+l z-SO89yRRy6wML2pN$Rmy$snPlb011po~OtTCYmGp?qVt>#v)o*|6t18kur8Y8}fW* zokA49@({sMP5aZec`ZV|v~&UQpV;-mtYWv164$}u;T5Q0xm-u#dx8DW76UQd>BUEE ziJqWnLLHL`e%Z{?hyELf6KH3cGvI+SjLgVJNx*h(qt(RGZzbz;p3BVdLgZ3gDbk97 z1M5EN2_qK)^h(7`z~j9@WFlB%%1q9E^*2>EMjL`musD1aJFY+L-~{6@AJtF1PPuqd z3~j-$Ar}EZW}0L9DjZ=dlV;HE3FA(64|6U>qJs}vqG<8V8LPU2Z!qLfAOOYwmN2r( zC4EE6do}x*I4k8Jh)Eo)ehcLY5DuRpTB>&r&pkvts>l5l49@_^;9&G<^!xv~jY$U$ z>Sa!BuA27KKxUf|)#`p36n52lQ*Nf)e!Ny~Ng9p^fr?s;Rq78a`(4tjMviYDHcD$s zub1b(ymY0Psv-b37p)IS1yDOuJC%Xe4q+I}GAXe;?W|mM7dkj)H{Pq^`|7eMP_M=L zOv&^!jG-T1g;SzWNG z!Bqr)b{Eeo{IXMsY7vRMgueEld`sMPqS&goN4JtOu|wiOL!=W_-4iu`wBV5*5^A6_ zOpT;-17QtS@}A@!afYgP!FlamowRJC9!ZTy$1SJMVrwIbU6AKoRS51WUp(I1bx6NP zD2==0#P`|?{Uu|+N5Dm@UPV7~XkMH8esMi07>YkVO0fJ~COKpjA(+@wI!l%Wbosh@ zsN1-xBVdXlpQzPbV4zu4Uu;&?;Cc63-I{N9R%QBrx*~{H3XPI5=9)6cIf=V>ZrDdfFHLUl$v;9neR_;>>q7Hxpi>IdNvo zX$4x>HJ50i_BTz-fN8j1zQAnj-oux7`sk3v7l4eV_w&#HOO1C3@?Ad5>0lr{<)7x) z#eH_QeS7kp&}^`9P_pHv06g4?j76mKO1EHwvuU>~v@tn1IlZ=$MGpBp2<;vH%9^Pg z7^<$0k@MiT0lL+~#y~IYD%Eugz0!!YW}$RTwREzu`vL`gfWoEPWd02Xp2+Kz!TfBCQq(<1 z9MAYT-lB?(eFqof&pa9vD@U6v&PM6XbZIG2!al%H=ME;sl z4D$jQZ7vk4SK8F9@<)8|Tk}L0jKIvI2X=bcApPKe+|*VV>7T@`OOF(**;N?h#-}2Zj#FaT}c&#s(9A|b;9FklC zw2?Qg4AHvsnN=)&4xZ6>&4YBgFVlFevj1buI zF=tsW{a;b|)*QouA!xmu>A$Zgdln2lM)7J)h%iSlzvbnfEOF6Qk0!!Fg#eOK#L| zSyU3lmyx4)C2txH++up-)Qsh{zvGZM;+#Vy{%Q`nb+DXzb4pBx8h%RLyFcjbWBM$x z{tVyiojVaGyv?5_MooqepTi6;1}GEMaHYtg!%b*mP0^7Ta3v|=K?4OnPsfED=JUig z&ig8!!cX4=j)N|{Ip29MB#xyIY$}?Be~NEpgLbZNUHCVASmlVSq(N?XrW@i!lOBDe z(=P1C);vO`bwYfg!5IO{xi|Rhn-L*@v=zUOcd6jL#O^eEx(RTw&Kyj!L4ar5- zKsOs7Hd-|O9qthi+Yb^Pm%9@GpwG^KqBnCV*i{@Yv;>tEQj&FN2x)O+)7$y4K)PI=scu~M9P=Aw8(G2 zPx-Gg7rV^~ca>_d{<9!_0`U3!7=1I1<9yG7`&01|v@wm^so1g$3SRI!#QbSG6@j{keH~#u-%L{=ayJC^unRAm2Bi!E~V2P9gLRtxK^{)0Yo zkWu;)GgOVF59unYMR&%UCf@@)PO|b}@krLTaPkQwLhleJF9IW0(?FFb`p5bA23G*P zFi0(8N7JWFU$!{Q-PaJ|zk+E_Sl0Goc<-6x>!E@kDnx(A_Pe|vIfpRZkMvPR-=}Gc zL<-CHFzZ0j@xI@4$pBZ?7Afbf{HD^ohEU}P%*Qxs1$E^yx>+k0xEn@-JWd})2h^~= z#p2$T)4bV1ZNiG#-`_iMCGOF)Wre(^v9^=6joRv)>$xIO<*qXIWGcL3=ChT$w7qQY~TCW-IpUn)RJ&$ev2Ig! zyR%c_>G@$JJC-NsmnMa&RDEP^w?SI@Yii zA|Ab9R5?$;S`Lz{(f+sXCvt(F!Vd-x$Pyi&=A%ewbvy*wc9?OjmH*3#IZgt9RuEdmIC`wv4`ret%1iFF+>RIa+wfj#c^7tt2nQUVVB>iOETi zmtL&4R-Fk{rf1?DslWZ#?t#m;2T2U5X}ZPl?4Zts-9ZG|t}~ zm7Z_khc8UfHQr}?=c&K#FhIW#&yyEf0VzJ7ySBY^Se-`y?Ul)Y3rKFF-V(j|!*wLs zRVp{+8{lQTGoqj1-&TgnwG@9Ia+;89}=x z&i_%R`lF;io)DTge231MJUA-4s)&f6wI#-&8`fe^BG&K%B-N;d_i@nHS~2a3YHM;L zX1yclJ^5GLGk7q5M~yt4&(0L7dt;liTSUPEZ2d>K=j)C}^rvo` zk-&txBIOdJI1;!kc%%WLb;Lq?kkX2mO0)>v&}M@dkMJ-YMtL!s%?zq93ZRjknuzWO z8SvI8EEWIi*LXg|f?r5T*l`+&RptxymGbhTxKW9fIz>ETy4>?{^g31Mta zln_vkoa}kXyDHdE(<3Y8+)h)@FiXBzQeVQLWIv^G|F z`W2w>&{d%qhr;1!AK-byE#R9lQ4!(OSys^3vM*-KW+ptPe=0e3$)lKRaQfU)!8)By zec7(?h1OF`UgDKaOKs?*8dd}l9?$K_4CMmWf)X%TGRS1Gl$KLz$m;RP9Jd*@lJ|Kw zck~fy8xv3^-12Lhsb|Dd72D~#MX&OO>d9^`Sq6ctQ8^Sgq&NoWj#NsbuHGsk`ER|- zg3eo*wVW`G-^j1^Fj)1Zrv42!NQ;Q&{VoWPn(+UFW$pV(?zHWB>@y3bKXT}ce(7O_ z@jh4OiE^%SVyVd3B7m#eyvOr!Ma+q@`nTk&9`gp-pUKGmv*kw#Xstziu+K3zF_`|k zXvoDS?0v#zk9q7~IJf$>MDzJkO{TbMFT}x~jw4W@eakI6y_fhz|4N?fULQzVfn_sA091n6hubk-B!6{g$4f^%8p|T5Ial(UluK`by(8JO?npG zIRDF6OF%QoGX0o#qT2LXo3=w*itIB$K+$pRry?~i-LlF4z~3v541ZlG(+@4Khe<=FL)2xz>H ze@g};d8HXZM?c$51O0v5Dvf=e*`|Ow`#`U@&Y&zlIURE3SNvkuv{D!A?NJj@7K(%{ zq8Qz7>T%i4K-jxg~>oa9!Ezy(wBGgA$8SjqV&VdsYKm(eJvX@MLe-GTY@qNCl-qV}Pa!(^L6Gg6+Ot`||Mk_cXkY9Fv;6t*WS5HLVowp@%Xy=~3T_%$GXWV+_D14Jz-BRcG zk~v+QK+_7!u!mz}n*MgU%%A^w46<(<2TF$yQ>T}30#(OtCFbO9Oh6d0g@49wID>2& z0Mgj%z%7*4k>s71L$`B(VH+l@#i16Hb6~3u^=-cX!>Y~aCnr*Uf6nMcS54@{pbhcf z5erJeDW=!P zW01W>6&bn8ls2zNwF|S_YGa>>Wu7@#fUgF_6_B^Gys*t_0YSFI~Bd{Ot%aDJhod+hH8N18M~+EUASYh2+=Aw~5SC7ZsB1K*b~~R144Y zJAMlKDPs4x)-%r_3HJuFVYY*L!OOQj0M-UdCjf$9Yqmumq17BYCP~){<33yZ+9n zvIT@6iUx%2F0mCP+e7;iG37KY<}lWZ%FgY}5;=CM(ia0VSC+rFN)VPWf$V$Sa^L*D z-i-dLUOb~-o#0KcuTbfjhSu)CA!&ng5M9Q)VHFpzU7+e-$R^I@>DEp@=HnC=_RVrz zpeJ>s1$6bjPHcTK9lL!CRrnwT=@>AjpmIt9&j;RM);_vMikb1a~hQQc%@@@G%3;VFDwv<)l@e)4Kuf#?b93+w5= zYRVitV=(b@4SyRSkiKa6tMyKvYC9g;}eDv~s*<&}^r|aG7V@E;QQJ`%Ave-CQj9%PvSvpkea+ z#$pXgmS8ZhdNgSdkG9u)$U8gs3jmR3R~jBEE`|k$4Tb}T3x)@V4@Lk+2u1`(3`PP* z3PuJ-4n_e+2}T7*4Mqb-3q}V<55@q-2=*O}35*$x1&kGp4U8R(1B?@l3yd3#2aFet z4~!p7089`}2uv7E1WXi63``tM0!$K23QQVI222)A4on_Q0Zb802}~JG1xyu84NM(O z156W4t6f}7dx{t88|G{zhQD?@hQAIv3pBRxFl;7Gt&SSRS-Wqo&YddKdcYDV89Q&> zL^MsN&xcMwgkZbCr%o3H018v^<9s>wR?pL(!(6U%9iK3uDYSnW%S}};FjhfO)-*Cw zQH?MR{cx;a;woA4^sTvQ)!Lw|`-xEZ6GP9TBIl>P!iGiN&s#kQoYwW>wsj_lHWa5e zi=5C#2JFlX4bA;Y`pWUDQ3l4^ANFn_dZclN$x=y(JmFA`f83#{04}?Sk&ULTl8dOM zvjOA^w4HGL=~X?-A7h%163c401UYv~Sx+&lW(F3A2%7~({nb_<1^wTx&x-n^t)`tF zin%MT2n$-~>*VEAR_oX~Klv68*&O5*^m}Y-xEx{?^&PGs7ri&g7qB@UZ~_#2-@+@> zYqddPDc|Lm>DOxafk3K68J{ZE@mOuzPQxBQjj>R;5Rr{t?8;if}(hbTa+DzMRUu(1j z6?2c_Hrg3B*GcbxzbFy{Fe4*6-136%pIl{Ve~acDy0uUL02^GD?#hM(+r~9p!nc)+ z17}aqeCgZ4OI~ih%9TfvKbxyx2)lb!d$v9KEBq1)HQ)YZyVLvBPf(q-e2)*Y?>{=rP6Gz;rz1B4 z?mhlq!gUC4Jo&%?4KJ_1@0Fdq@%zvUdP66EC2kZC-^^ajIQLb5@OFp_lEhTKCEB-+ z@3`2hUI;eJPUVKy)E_-?HiP`v>(>MRORxS+E~DS303I85pPO>hN3MJwx4AeS;eOtF z3$G4d?0#%C#@zyPCvMB#TDLd<>NYwA+d+>6K1S8geowZX!U=zCUQVtxtA)3WUpQ*$ zkKTtJ-rg|J-fJgxpMMSC*FHMGVK0{vexeH-Pt7QUZlT_~)9-l``oix;6WYgnQtp`& z`ZC+XfxTRvmFBJCt2$rTUl~S2T_Jnipj*Dcz`Q~yGw@ebEv=frQ*YhDoWnO-J?(D( zP-iH$UbnA`Z}um03GFYho`HvfdbamhY|Cdl+HPG|PtU%AhYySaaZC7-oV8w!Tazaw zmIrt7Q?<&@UHs3_U$yM=eBLs*Ms4pamV|3~fF91i`U9)W_F*gDE&7V&^a)*Gm>Nzd zgPF4B4mUxcfSzsZ_`dW8&h6Ugp<9P4&OVYm>X{n z*H?3a0@lk&+;(ouDe<$l9H5)YOyJ6V`EAz+XU_+HFVN<{_?x#l7k=|@A+u$HT@U;{ zz-NB+gutg@xc1G*XxQ6m&|AR#Z({u4-mG+zL_dm5j6EOhy^r`Cf#{o#5$`;+zgMhA zk*ozkyg?uC%q#ArIYmP*Zld~Rj#qaeLEQtWJ6iWP>s={s#We0nG45SFZbdro$ed!P z0e5Bux8WA|6>ke}EAfUe_U0}2#y|E30N=bTTK7Qze_VZ4SRP%hE);in_u}sE6o=vt z#T|;<;85J%-6>Ms-Cc`oad-O;|33TTJm+HODr=JUWHOVLyh+|C?mxNMG~OKC6E+Ox zp3aWk+wNam?q6FqF6I8&tai2kvv#61-mUc!^iO@S`UKUzHbFtw1EWJ6>84lR+8Ow* zjx+{tGjCW;=jq7nP@+_>$oH1zYS|jQS1s;ueHK9Q%;G}hP+#f!({QuzSp7MSL^a#} z3gF^Q3*)}oDGx!xqi;1>dt$jqbjUy{A9YH@0qsDmZ=!7yA`4VvAH%GvTM+5Y_uT9D zK40%xuKifgscaDty5rQJJ}6fdc1|7x%}iDp#$1sLcyN*!q+FBLY9Hq-EIW0ViwgcW zK$^=h)o_0H!EG~8_y~%v=;iwzj{>2f2W;N2J4`!z#+FICZ{ybt<8!7X3)fKZ~h+?HT!ej_WmI}1B?E;)B8Xx_N{jCf?c-r~h{Ck~qxbCRfm zi1x(?0}k64()A_>H66YuDsK=Otd!LdbIW*Y|9RRdT|o49Z*Rlz@F;DoE?bFR2FjdX zEkm4jNVb*+t}C)h^b4_vrB4^0e4WSX{Av$h!x$?*NQ5d*-mj_e->%u{->ns=kDDrV zd^>b_V`FQSpM6{yf#J;iVfqDk61!~|pYS)!1GXt8-u~Fy9j{uIcispMU2Qc zq|O^Pv8bjP|ugt>8lHHHBV9v#9ftRt2Z8^Q7yK zLptX74ZO#S%vA$d&$Ut}w~{fh+BV;FbcytH{jHM-zWrX3cb~G&s!x& zCuKG0RqVD3%{Pb_$-EahHs*^Y)E#5n1TR&P)*7Tn6=WB{&Qv(p3YoUN)g~Xx^8fxU zL|;r2w64EY5$}+$4ij`QGq3RTRCn!-9HTln1Q2WxPBoS$t4_5uwVUfUhhI=nDXL-{ zYRorAya-Mqs+4|jPI>`Qr?N{(RVei}KRSb4F-{Y!tjW821|1GgY&)~>4K$`=Y7btU zIj`8=hc%eYPX(*=qO0}Rmol|mc{{|Zr6Ym~52$ z3@F~eCT3d~T&l|XmFl?gFD9&%Ypf~$adEFWXq8ha)vtJUr^{`ZJ6C$mY}L&0MCbhJ zz^2ST-LWa+T=gpvha%z87YDOBk;)wis_nZP0%Sj$ zX7C5LP_fA`vZKd0T2K2A@#p71q8k*Tzx36VsCp(X`+y={PA5_?485lUD%zc z3dFsf&1*k3yQcxE3?PwgaD)SHN+VpY21?qNXDkH_^2&;|y;%0)Hh;`>SU3wc7x%$d z2oKTS1aF`vvlRCcXvqWQDe~Z*TrDv|-^Qao)B~m#I*de6#s&U)9HH2#B8csP`4Z?c z12FU;fPvhjmcc5Ac+qCVyj1((q+6enp^W7f>mX?&Czri_`v_2_TV>mnPXTRX!OsC& z1Vx4k(21i(ao<8%+jT(`IQY|`Xot9=1$kKf-l?Pt1i@mMXu1yv-^qPPU!pmf_PI5C z)3(H8QS+}+@{yANB?Kd@9 z&ef0D1>y(dCgQYPi8e+EE^#5GIu*bN`lw&HA8jj4Lt0GFz8cO-`T(RaR*HQ2o&8EZ zHpWm}c#G0S5mfGx`SPs`2*0&hdzl6vP;l>+yej{pu3Zh-(}Kh{VKAUU|0+Q$hDgsi zT`%r$+S%J54z>NDwduc**INc*!2Q3?U?@K*iaLMv?e{<+Z5 zkVqEy&OyH$lx;|)i2KBxEdCf;2;hg!2=1=rVt`O;Dw@L)wJUKXUD4O-u!bL~6_=dE z<&q|~N(fcl2;Cq|2KW<(@P%9~(j-<@W~DA5*39b|X9`GqHK1Q8FbA*wetX$(>PZxMBfof9mK6gF74-E#3N*ZrUOEOgvSA}Jzyp2$pg1cNl8@90jTm1;isqaI5uz!f?;i_= zlXZ#3S-g-+4{E|Wcc3`S3rNOc_{NnEvP1H&!tgRFqV5B$LL=X<8AKJq_ZvCuM%!k- zg9$QH!||;?ZvNaw6wSe)I*q#bp)715so2fp0k}1UY^Vm7+Z;N;96G)-%@F)E^5e>K z$kyJyT9O0v)%JO>(GXHxCcyJ=KCw_4;M}r+5{#%02C82zfk8X$D9jUetHr7|3%+@cKV%GW zg--Kz3d_#P#jQIneE)#$ckNbAv? zz!kB|V=d7$b0X-SMe$|b7z^eaZw*k)Bc2h2jrq-BdF!#*wd{eH{f7=MF8zK)tL*V% zG{MhXgy&<~a>q`V%uJM=tZ7aAiDcQ3@rGyF&xR6CZ7j*UUnj7Ft}_R}L>%R)xWWtP|M9@xFSd5CKrYtAi)15lm64pTKeLq@H$@661qt%_zyr@HZ2vsGS z$BeBl*=H@;1}Q*=I1>#2Xm1g1_8RZ7O)?6+2b5TCDZb zr#Hr=-`5u=LwxuZ-pk)yjNQ1Fr)K6|$Wn8sQ{jsrx=?k}a@#z8&A9-6FV}n){%i*n z6_A&`wO=9@KZmW7J7uhPa|=6Q>g8CXU3>5AiHa;tG`dO~mvu%STk zfkv@{Y<=|zJIj(#@TVhFtLiX33JK|;GWDDa%rgD)umBtt~>ipICU(@SohP1Ro zYrBEHu#aj=x2+=Vn%vLS_|Y1+?BYOy?WKi^;g1{bmgF#~uTIsgj&?;1;jIe84`2SY zkwYxjc(2jL8!Eb%Xp@JNHS3v(t_Z{;;zL(jcGyXBkVrFpm#~kplHa3cGF+8Qz>Z%O zPpGy1B1(+vtdy>?neha@wM~$x+|^bwUNz18Rqvbjcmm1xxeYCZ-)#zw-KiZgex<>% zXZ}?|JmcPM+>(KDRej9`F{!eSl7O?HL$AH-OiOC{6MULXeiZmOPK;Q@*`�aovuQ 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 x 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%0DUk!dU1mshN#OU;pu%nPLK8I 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 B11JCh From 72643fa87ff0bc769140471f1466a1622e7cc799 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 19 Sep 2024 20:02:13 -0300 Subject: [PATCH 13/28] ci(esp32p4): Add missing ESP32-P4 entries --- .github/scripts/on-push.sh | 1 + .github/scripts/sketch_utils.sh | 4 ++++ .github/workflows/lib.yml | 3 +++ .github/workflows/tests.yml | 4 ++-- .github/workflows/tests_wokwi.yml | 2 +- 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/scripts/on-push.sh b/.github/scripts/on-push.sh index 08ff505f1c0..73d9eeee398 100755 --- a/.github/scripts/on-push.sh +++ b/.github/scripts/on-push.sh @@ -91,6 +91,7 @@ if [ "$BUILD_PIO" -eq 0 ]; then fi #build sketches for different targets + build "esp32p4" "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32" build "esp32s3" "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32" build "esp32s2" "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32" build "esp32c3" "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32" diff --git a/.github/scripts/sketch_utils.sh b/.github/scripts/sketch_utils.sh index 813f61210cd..5af47dcb138 100755 --- a/.github/scripts/sketch_utils.sh +++ b/.github/scripts/sketch_utils.sh @@ -89,6 +89,7 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex esp32c3_opts="PartitionScheme=huge_app,FlashMode=dio" esp32c6_opts="PartitionScheme=huge_app,FlashMode=dio" esp32h2_opts="PartitionScheme=huge_app,FlashMode=dio" + esp32p4_opts="PartitionScheme=huge_app,FlashMode=dio" # Select the common part of the FQBN based on the target. The rest will be # appended depending on the passed options. @@ -112,6 +113,9 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex "esp32h2") fqbn="espressif:esp32:esp32h2:${options:-$esp32h2_opts}" ;; + "esp32p4") + fqbn="espressif:esp32:esp32p4:${options:-$esp32p4_opts}" + ;; esac # Make it look like a JSON array. diff --git a/.github/workflows/lib.yml b/.github/workflows/lib.yml index 894df61f4fd..7a7b863095d 100644 --- a/.github/workflows/lib.yml +++ b/.github/workflows/lib.yml @@ -42,6 +42,7 @@ jobs: - esp32s3 - esp32c6 - esp32h2 + - esp32p4 include: - target: esp32 @@ -56,6 +57,8 @@ jobs: fqbn: espressif:esp32:esp32c6 - target: esp32h2 fqbn: espressif:esp32:esp32h2 + - target: esp32p4 + fqbn: espressif:esp32:esp32p4 steps: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 26de19d8f10..1ae748923b5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -88,7 +88,7 @@ jobs: strategy: matrix: type: ${{ fromJson(needs.gen-matrix.outputs.build-types) }} - chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2'] + chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4'] with: type: ${{ matrix.type }} chip: ${{ matrix.chip }} @@ -105,7 +105,7 @@ jobs: fail-fast: false matrix: type: ${{ fromJson(needs.gen-matrix.outputs.hw-types) }} - chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2'] + chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4'] with: type: ${{ matrix.type }} chip: ${{ matrix.chip }} diff --git a/.github/workflows/tests_wokwi.yml b/.github/workflows/tests_wokwi.yml index f016cad25e0..14f85ee606e 100644 --- a/.github/workflows/tests_wokwi.yml +++ b/.github/workflows/tests_wokwi.yml @@ -165,7 +165,7 @@ jobs: fail-fast: false matrix: type: ['validation'] - chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2'] + chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4'] steps: - name: Report pending uses: actions/github-script@v7 From e6cf7dc58377f58d0e15d072b700739a95cca592 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 20 Sep 2024 09:20:45 -0300 Subject: [PATCH 14/28] fix(esp32p4): Add chip info --- cores/esp32/chip-debug-report.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cores/esp32/chip-debug-report.cpp b/cores/esp32/chip-debug-report.cpp index 239ae3e97c9..daafef3cab9 100644 --- a/cores/esp32/chip-debug-report.cpp +++ b/cores/esp32/chip-debug-report.cpp @@ -64,6 +64,9 @@ static void printPkgVersion(void) { #elif CONFIG_IDF_TARGET_ESP32H2 uint32_t pkg_ver = REG_GET_FIELD(EFUSE_RD_MAC_SYS_4_REG, EFUSE_PKG_VERSION); chip_report_printf("%lu", pkg_ver); +#elif CONFIG_IDF_TARGET_ESP32P4 + uint32_t pkg_ver = REG_GET_FIELD(EFUSE_RD_MAC_SYS_2_REG, EFUSE_PKG_VERSION); + chip_report_printf("%lu", pkg_ver); #else chip_report_printf("Unknown"); #endif @@ -84,6 +87,7 @@ static void printChipInfo(void) { case CHIP_ESP32C3: chip_report_printf("ESP32-C3\n"); break; case CHIP_ESP32C6: chip_report_printf("ESP32-C6\n"); break; case CHIP_ESP32H2: chip_report_printf("ESP32-H2\n"); break; + case CHIP_ESP32P4: chip_report_printf("ESP32-P4\n"); break; default: chip_report_printf("Unknown %d\n", info.model); break; } printPkgVersion(); @@ -105,6 +109,8 @@ static void printChipInfo(void) { static void printFlashInfo(void) { #if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 #define ESP_FLASH_IMAGE_BASE 0x1000 +#elif CONFIG_IDF_TARGET_ESP32P4 +#define ESP_FLASH_IMAGE_BASE 0x2000 #else #define ESP_FLASH_IMAGE_BASE 0x0000 #endif From 62fef78c54481ef571272882111d4a1e815a79be Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:32:43 -0300 Subject: [PATCH 15/28] fix(esp32p4): Fix build commands --- boards.txt | 2 +- platform.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/boards.txt b/boards.txt index 5e4454881b2..1f287a0c9f6 100644 --- a/boards.txt +++ b/boards.txt @@ -187,7 +187,7 @@ esp32p4.build.mcu=esp32p4 esp32p4.build.core=esp32 esp32p4.build.variant=esp32p4 esp32p4.build.board=ESP32P4_DEV -esp32p4.build.bootloader_addr=0x0 +esp32p4.build.bootloader_addr=0x2000 esp32p4.build.cdc_on_boot=0 esp32p4.build.f_cpu=400000000L diff --git a/platform.txt b/platform.txt index 3945e492c62..b9c31d4337f 100644 --- a/platform.txt +++ b/platform.txt @@ -84,6 +84,7 @@ build.extra_flags.esp32c2=-DARDUINO_USB_CDC_ON_BOOT=0 build.extra_flags.esp32c3=-DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} build.extra_flags.esp32c6=-DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} build.extra_flags.esp32h2=-DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} +build.extra_flags.esp32p4=-DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} # This can be overriden in boards.txt build.zigbee_mode= From 149edfa0735f91ac1d3ae9a93de0030e8689c4a0 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:38:49 -0300 Subject: [PATCH 16/28] docs(esp32p4): Add missing references to P4 --- README.md | 2 +- docs/en/lib_builder.rst | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4cddeb13297..f892ba1f378 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Here are the ESP32 series supported by the Arduino-ESP32 project: | ESP32-S3 | Yes | Yes | [ESP32-S3](https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf) | | ESP32-C6 | Yes | Yes | [ESP32-C6](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf) | | ESP32-H2 | Yes | Yes | [ESP32-H2](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf) | -| ESP32-P4 | No | Yes | ESP32-P4 | +| ESP32-P4 | No | Yes | [ESP32-P4](https://www.espressif.com/sites/default/files/documentation/esp32-p4_datasheet_en.pdf) | > [!NOTE] > ESP32-C2 is also supported by Arduino-ESP32 but requires rebuilding the static libraries. This is not trivial and requires a good understanding of the ESP-IDF diff --git a/docs/en/lib_builder.rst b/docs/en/lib_builder.rst index 3d28761ab2d..fc488566878 100644 --- a/docs/en/lib_builder.rst +++ b/docs/en/lib_builder.rst @@ -157,6 +157,7 @@ This build command will build for the ESP32-S3 target. You can specify other tar * esp32c3 * esp32c6 * esp32h2 +* esp32p4 Set Build Type ^^^^^^^^^^^^^^ From e3723203f41c80c9e3e5c901ec129662d3f28fd0 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Sat, 21 Sep 2024 09:56:18 -0300 Subject: [PATCH 17/28] fix(esp32p4): Fix clock sources definitions --- cores/esp32/esp32-hal-cpu.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/cores/esp32/esp32-hal-cpu.c b/cores/esp32/esp32-hal-cpu.c index fd799721c9b..ae05b1aef8a 100644 --- a/cores/esp32/esp32-hal-cpu.c +++ b/cores/esp32/esp32-hal-cpu.c @@ -163,13 +163,13 @@ bool removeApbChangeCallback(void *arg, apb_change_cb_t cb) { } static uint32_t calculateApb(rtc_cpu_freq_config_t *conf) { -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - return APB_CLK_FREQ; -#else +#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 if (conf->freq_mhz >= 80) { return 80 * MHZ; } return (conf->source_freq_mhz * MHZ) / conf->div; +#else + return APB_CLK_FREQ; #endif } @@ -250,11 +250,8 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz) { } #endif //Update FreeRTOS Tick Divisor -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 -#elif CONFIG_IDF_TARGET_ESP32S3 - -#else +#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 uint32_t fcpu = (conf.freq_mhz >= 80) ? (conf.freq_mhz * MHZ) : (apb); _xt_tick_divisor = fcpu / XT_TICK_PER_SEC; #endif @@ -265,13 +262,19 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz) { #ifdef SOC_CLK_APLL_SUPPORTED log_d( "%s: %u / %u = %u Mhz, APB: %u Hz", - (conf.source == RTC_CPU_FREQ_SRC_PLL) ? "PLL" - : ((conf.source == RTC_CPU_FREQ_SRC_APLL) ? "APLL" : ((conf.source == RTC_CPU_FREQ_SRC_XTAL) ? "XTAL" : "8M")), + (conf.source == SOC_CPU_CLK_SRC_PLL) ? "PLL" + : ((conf.source == SOC_CPU_CLK_SRC_APLL) ? "APLL" + : ((conf.source == SOC_CPU_CLK_SRC_XTAL) ? "XTAL" +#ifdef CONFIG_IDF_TARGET_ESP32P4 + : "17.5M"), +#else + : "8M")), +#endif conf.source_freq_mhz, conf.div, conf.freq_mhz, apb ); #else log_d( - "%s: %u / %u = %u Mhz, APB: %u Hz", (conf.source == RTC_CPU_FREQ_SRC_PLL) ? "PLL" : ((conf.source == RTC_CPU_FREQ_SRC_XTAL) ? "XTAL" : "17.5M"), + "%s: %u / %u = %u Mhz, APB: %u Hz", (conf.source == SOC_CPU_CLK_SRC_PLL) ? "PLL" : ((conf.source == SOC_CPU_CLK_SRC_XTAL) ? "XTAL" : "17.5M"), conf.source_freq_mhz, conf.div, conf.freq_mhz, apb ); #endif From a8e1fdfd7014346f4d05c230219795b77e0255cf Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Sat, 21 Sep 2024 09:56:57 -0300 Subject: [PATCH 18/28] fix(esp32p4): Set CPU frequency to 360 MHz so it is stable in all chips --- boards.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards.txt b/boards.txt index 1f287a0c9f6..2f1c0139834 100644 --- a/boards.txt +++ b/boards.txt @@ -190,7 +190,7 @@ esp32p4.build.board=ESP32P4_DEV esp32p4.build.bootloader_addr=0x2000 esp32p4.build.cdc_on_boot=0 -esp32p4.build.f_cpu=400000000L +esp32p4.build.f_cpu=360000000L esp32p4.build.flash_size=4MB esp32p4.build.flash_freq=80m esp32p4.build.img_freq=80m From fb3443d3286c3b6cbe0dfea1b559b126db434d5e Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Sat, 21 Sep 2024 14:52:56 -0300 Subject: [PATCH 19/28] refactor(esp32p4): Change preprocessor conditionals for maintainability Co-authored-by: me-no-dev <hristo@espressif.com> --- cores/esp32/esp32-hal-cpu.c | 2 +- cores/esp32/esp32-hal-i2c-slave.c | 22 ++-- cores/esp32/esp32-hal-ledc.c | 15 +-- cores/esp32/esp32-hal-spi.c | 170 +++++++++++++++--------------- cores/esp32/esp32-hal-spi.h | 8 +- cores/esp32/esp32-hal-touch.c | 2 + cores/esp32/esp32-hal-uart.c | 19 ++-- 7 files changed, 119 insertions(+), 119 deletions(-) diff --git a/cores/esp32/esp32-hal-cpu.c b/cores/esp32/esp32-hal-cpu.c index ae05b1aef8a..9f87cf73ae7 100644 --- a/cores/esp32/esp32-hal-cpu.c +++ b/cores/esp32/esp32-hal-cpu.c @@ -237,7 +237,7 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz) { } //Make the frequency change rtc_clk_cpu_freq_set_config_fast(&conf); -#if !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4) +#if defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) if (capb != apb) { //Update REF_TICK (uncomment if REF_TICK is different than 1MHz) //if(conf.freq_mhz < 80){ diff --git a/cores/esp32/esp32-hal-i2c-slave.c b/cores/esp32/esp32-hal-i2c-slave.c index 95ca305d441..2f4531b2512 100644 --- a/cores/esp32/esp32-hal-i2c-slave.c +++ b/cores/esp32/esp32-hal-i2c-slave.c @@ -63,7 +63,10 @@ #define I2C_SLAVE_USE_RX_QUEUE 0 // 1: Queue, 0: RingBuffer -#if !defined(CONFIG_IDF_TARGET_ESP32P4) +#ifdef CONFIG_IDF_TARGET_ESP32P4 +#define I2C_SCL_IDX(p) ((p == 0) ? I2C0_SCL_PAD_OUT_IDX : ((p == 1) ? I2C1_SCL_PAD_OUT_IDX : 0)) +#define I2C_SDA_IDX(p) ((p == 0) ? I2C0_SDA_PAD_OUT_IDX : ((p == 1) ? I2C1_SDA_PAD_OUT_IDX : 0)) +#else #if SOC_HP_I2C_NUM > 1 #define I2C_SCL_IDX(p) ((p == 0) ? I2CEXT0_SCL_OUT_IDX : ((p == 1) ? I2CEXT1_SCL_OUT_IDX : 0)) #define I2C_SDA_IDX(p) ((p == 0) ? I2CEXT0_SDA_OUT_IDX : ((p == 1) ? I2CEXT1_SDA_OUT_IDX : 0)) @@ -71,11 +74,6 @@ #define I2C_SCL_IDX(p) I2CEXT0_SCL_OUT_IDX #define I2C_SDA_IDX(p) I2CEXT0_SDA_OUT_IDX #endif -#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) - -#ifdef CONFIG_IDF_TARGET_ESP32P4 -#define I2C_SCL_IDX(p) ((p == 0) ? I2C0_SCL_PAD_OUT_IDX : ((p == 1) ? I2C1_SCL_PAD_OUT_IDX : 0)) -#define I2C_SDA_IDX(p) ((p == 0) ? I2C0_SDA_PAD_OUT_IDX : ((p == 1) ? I2C1_SDA_PAD_OUT_IDX : 0)) #endif // ifdef CONFIG_IDF_TARGET_ESP32P4 #if CONFIG_IDF_TARGET_ESP32 @@ -194,19 +192,19 @@ static inline void i2c_ll_stretch_clr(i2c_dev_t *hw) { } static inline bool i2c_ll_slave_addressed(i2c_dev_t *hw) { -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - return hw->sr.slave_addressed; -#else +#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 return hw->status_reg.slave_addressed; +#else + return hw->sr.slave_addressed; #endif } static inline bool i2c_ll_slave_rw(i2c_dev_t *hw) //not exposed by hal_ll { -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - return hw->sr.slave_rw; -#else +#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 return hw->status_reg.slave_rw; +#else + return hw->sr.slave_rw; #endif } diff --git a/cores/esp32/esp32-hal-ledc.c b/cores/esp32/esp32-hal-ledc.c index e92c9993845..4ec35e2f8a5 100644 --- a/cores/esp32/esp32-hal-ledc.c +++ b/cores/esp32/esp32-hal-ledc.c @@ -323,21 +323,16 @@ bool ledcOutputInvert(uint8_t pin, bool out_invert) { ledc_channel_handle_t *bus = (ledc_channel_handle_t *)perimanGetPinBus(pin, ESP32_BUS_TYPE_LEDC); if (bus != NULL) { gpio_set_level(pin, out_invert); -#if !defined(CONFIG_IDF_TARGET_ESP32P4) -#ifdef SOC_LEDC_SUPPORT_HS_MODE - esp_rom_gpio_connect_out_signal(pin, ((bus->channel / 8 == 0) ? LEDC_HS_SIG_OUT0_IDX : LEDC_LS_SIG_OUT0_IDX) + ((bus->channel) % 8), out_invert, 0); -#else - esp_rom_gpio_connect_out_signal(pin, LEDC_LS_SIG_OUT0_IDX + ((bus->channel) % 8), out_invert, 0); -#endif -#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) #ifdef CONFIG_IDF_TARGET_ESP32P4 + esp_rom_gpio_connect_out_signal(pin, LEDC_LS_SIG_OUT_PAD_OUT0_IDX + ((bus->channel) % 8), out_invert, 0); +#else #ifdef SOC_LEDC_SUPPORT_HS_MODE - esp_rom_gpio_connect_out_signal(pin, ((bus->channel / 8 == 0) ? LEDC_HS_SIG_OUT0_IDX : LEDC_LS_SIG_OUT_PAD_OUT0_IDX) + ((bus->channel) % 8), out_invert, 0); + esp_rom_gpio_connect_out_signal(pin, ((bus->channel / 8 == 0) ? LEDC_HS_SIG_OUT0_IDX : LEDC_LS_SIG_OUT0_IDX) + ((bus->channel) % 8), out_invert, 0); #else - esp_rom_gpio_connect_out_signal(pin, LEDC_LS_SIG_OUT_PAD_OUT0_IDX + ((bus->channel) % 8), out_invert, 0); + esp_rom_gpio_connect_out_signal(pin, LEDC_LS_SIG_OUT0_IDX + ((bus->channel) % 8), out_invert, 0); #endif -#endif // #ifdef CONFIG_IDF_TARGET_ESP32P4 +#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 return true; } return false; diff --git a/cores/esp32/esp32-hal-spi.c b/cores/esp32/esp32-hal-spi.c index f03656b47ff..aa4ef3b3c25 100644 --- a/cores/esp32/esp32-hal-spi.c +++ b/cores/esp32/esp32-hal-spi.c @@ -28,6 +28,7 @@ #include "soc/rtc.h" #include "hal/clk_gate_ll.h" #include "esp32-hal-periman.h" +#include "esp_private/periph_ctrl.h" #include "esp_system.h" #include "esp_intr_alloc.h" @@ -102,14 +103,25 @@ struct spi_struct_t { #elif CONFIG_IDF_TARGET_ESP32P4 // ESP32P4 -#define SPI_COUNT (2) +#define SPI_COUNT (2) // SPI2 and SPI3. SPI0 and SPI1 are reserved for flash and PSRAM #define SPI_CLK_IDX(p) ((p == 0) ? SPI2_CK_PAD_OUT_IDX : ((p == 1) ? SPI3_CK_PAD_OUT_IDX : 0)) #define SPI_MISO_IDX(p) ((p == 0) ? SPI2_Q_PAD_OUT_IDX : ((p == 1) ? SPI3_QO_PAD_OUT_IDX : 0)) #define SPI_MOSI_IDX(p) ((p == 0) ? SPI2_D_PAD_IN_IDX : ((p == 1) ? SPI3_D_PAD_IN_IDX : 0)) -#define SPI_HSPI_SS_IDX(n) ((n == 0) ? SPI3_CS1_PAD_OUT_IDX : ((n == 1) ? SPI3_CS1_PAD_OUT_IDX : 0)) -#define SPI_FSPI_SS_IDX(n) ((n == 0) ? SPI2_CS1_PAD_OUT_IDX : ((n == 1) ? SPI2_CS1_PAD_OUT_IDX : 0)) +#define SPI_HSPI_SS_IDX(n) ((n == 0) ? SPI3_CS_PAD_OUT_IDX : \ + ((n == 1) ? SPI3_CS1_PAD_OUT_IDX : \ + ((n == 2) ? SPI3_CS2_PAD_OUT_IDX : \ + 0))) + +#define SPI_FSPI_SS_IDX(n) ((n == 0) ? SPI2_CS_PAD_OUT_IDX : \ + ((n == 1) ? SPI2_CS1_PAD_OUT_IDX : \ + ((n == 2) ? SPI2_CS2_PAD_OUT_IDX : \ + ((n == 3) ? SPI2_CS3_PAD_OUT_IDX : \ + ((n == 4) ? SPI2_CS4_PAD_OUT_IDX : \ + ((n == 5) ? SPI2_CS5_PAD_OUT_IDX : \ + 0)))))) + #define SPI_SS_IDX(p, n) ((p == 0) ? SPI_FSPI_SS_IDX(n) : ((p == 1) ? SPI_HSPI_SS_IDX(n) : 0)) #elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 @@ -175,7 +187,7 @@ static spi_t _spi_bus_array[] = { {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 1, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 2, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 - {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1}, + {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 1, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C2 {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1} @@ -387,11 +399,10 @@ void spiEnableSSPins(spi_t *spi, uint8_t ss_mask) { return; } SPI_MUTEX_LOCK(); -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.val &= ~(ss_mask & SPI_SS_MASK_ALL); -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.val &= ~(ss_mask & SPI_SS_MASK_ALL); +#else + spi->dev->misc.val &= ~(ss_mask & SPI_SS_MASK_ALL); #endif SPI_MUTEX_UNLOCK(); } @@ -401,11 +412,10 @@ void spiDisableSSPins(spi_t *spi, uint8_t ss_mask) { return; } SPI_MUTEX_LOCK(); -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.val |= (ss_mask & SPI_SS_MASK_ALL); -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.val |= (ss_mask & SPI_SS_MASK_ALL); +#else + spi->dev->misc.val |= (ss_mask & SPI_SS_MASK_ALL); #endif SPI_MUTEX_UNLOCK(); } @@ -435,11 +445,10 @@ void spiSSSet(spi_t *spi) { return; } SPI_MUTEX_LOCK(); -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.cs_keep_active = 1; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.cs_keep_active = 1; +#else + spi->dev->misc.cs_keep_active = 1; #endif SPI_MUTEX_UNLOCK(); } @@ -449,11 +458,10 @@ void spiSSClear(spi_t *spi) { return; } SPI_MUTEX_LOCK(); -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.cs_keep_active = 0; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.cs_keep_active = 0; +#else + spi->dev->misc.cs_keep_active = 0; #endif SPI_MUTEX_UNLOCK(); } @@ -478,11 +486,10 @@ uint8_t spiGetDataMode(spi_t *spi) { if (!spi) { return 0; } -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - bool idleEdge = spi->dev->misc.ck_idle_edge; -#else +#if CONFIG_IDF_TARGET_ESP32 bool idleEdge = spi->dev->pin.ck_idle_edge; +#else + bool idleEdge = spi->dev->misc.ck_idle_edge; #endif bool outEdge = spi->dev->user.ck_out_edge; if (idleEdge) { @@ -504,39 +511,35 @@ void spiSetDataMode(spi_t *spi, uint8_t dataMode) { SPI_MUTEX_LOCK(); switch (dataMode) { case SPI_MODE1: -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.ck_idle_edge = 0; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.ck_idle_edge = 0; +#else + spi->dev->misc.ck_idle_edge = 0; #endif spi->dev->user.ck_out_edge = 1; break; case SPI_MODE2: -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.ck_idle_edge = 1; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.ck_idle_edge = 1; +#else + spi->dev->misc.ck_idle_edge = 1; #endif spi->dev->user.ck_out_edge = 1; break; case SPI_MODE3: -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.ck_idle_edge = 1; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.ck_idle_edge = 1; +#else + spi->dev->misc.ck_idle_edge = 1; #endif spi->dev->user.ck_out_edge = 0; break; case SPI_MODE0: default: -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.ck_idle_edge = 0; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.ck_idle_edge = 0; +#else + spi->dev->misc.ck_idle_edge = 0; #endif spi->dev->user.ck_out_edge = 0; break; @@ -582,11 +585,10 @@ static void spiInitBus(spi_t *spi) { spi->dev->slave.trans_done = 0; #endif spi->dev->slave.val = 0; -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.val = 0; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.val = 0; +#else + spi->dev->misc.val = 0; #endif spi->dev->user.val = 0; spi->dev->user1.val = 0; @@ -666,18 +668,18 @@ spi_t *spiStartBus(uint8_t spi_num, uint32_t clockDiv, uint8_t dataMode, uint8_t DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI01_CLK_EN); DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI01_RST); } -#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 +#elif defined(__PERIPH_CTRL_ALLOW_LEGACY_API) periph_ll_reset(PERIPH_SPI2_MODULE); periph_ll_enable_clk_clear_rst(PERIPH_SPI2_MODULE); #endif SPI_MUTEX_LOCK(); spiInitBus(spi); -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->clk_gate.clk_en = 1; spi->dev->clk_gate.mst_clk_sel = 1; spi->dev->clk_gate.mst_clk_active = 1; -#if !CONFIG_IDF_TARGET_ESP32C6 && !CONFIG_IDF_TARGET_ESP32H2 && !CONFIG_IDF_TARGET_ESP32P4 +#if defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C3) spi->dev->dma_conf.tx_seg_trans_clr_en = 1; spi->dev->dma_conf.rx_seg_trans_clr_en = 1; spi->dev->dma_conf.dma_seg_trans_en = 0; @@ -715,7 +717,7 @@ void spiWaitReady(spi_t *spi) { #if CONFIG_IDF_TARGET_ESP32S2 #define usr_mosi_dbitlen usr_mosi_bit_len #define usr_miso_dbitlen usr_miso_bit_len -#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#elif !defined(CONFIG_IDF_TARGET_ESP32) #define usr_mosi_dbitlen ms_data_bitlen #define usr_miso_dbitlen ms_data_bitlen #define mosi_dlen ms_dlen @@ -742,7 +744,7 @@ void spiWrite(spi_t *spi, const uint32_t *data, uint8_t len) { spi->dev->data_buf[i] = data[i]; #endif } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -769,7 +771,7 @@ void spiTransfer(spi_t *spi, uint32_t *data, uint8_t len) { spi->dev->data_buf[i] = data[i]; #endif } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -800,7 +802,7 @@ void spiWriteByte(spi_t *spi, uint8_t data) { spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -821,7 +823,7 @@ uint8_t spiTransferByte(spi_t *spi, uint8_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -862,7 +864,7 @@ void spiWriteWord(spi_t *spi, uint16_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -886,7 +888,7 @@ uint16_t spiTransferWord(spi_t *spi, uint16_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -921,7 +923,7 @@ void spiWriteLong(spi_t *spi, uint32_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -945,7 +947,7 @@ uint32_t spiTransferLong(spi_t *spi, uint32_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -997,7 +999,7 @@ static void __spiTransferBytes(spi_t *spi, const uint8_t *data, uint8_t *out, ui #endif } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1079,39 +1081,35 @@ void spiTransaction(spi_t *spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bit spi->dev->clock.val = clockDiv; switch (dataMode) { case SPI_MODE1: -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.ck_idle_edge = 0; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.ck_idle_edge = 0; +#else + spi->dev->misc.ck_idle_edge = 0; #endif spi->dev->user.ck_out_edge = 1; break; case SPI_MODE2: -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.ck_idle_edge = 1; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.ck_idle_edge = 1; +#else + spi->dev->misc.ck_idle_edge = 1; #endif spi->dev->user.ck_out_edge = 1; break; case SPI_MODE3: -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.ck_idle_edge = 1; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.ck_idle_edge = 1; +#else + spi->dev->misc.ck_idle_edge = 1; #endif spi->dev->user.ck_out_edge = 0; break; case SPI_MODE0: default: -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 \ - || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 - spi->dev->misc.ck_idle_edge = 0; -#else +#if CONFIG_IDF_TARGET_ESP32 spi->dev->pin.ck_idle_edge = 0; +#else + spi->dev->misc.ck_idle_edge = 0; #endif spi->dev->user.ck_out_edge = 0; break; @@ -1123,7 +1121,7 @@ void spiTransaction(spi_t *spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bit spi->dev->ctrl.wr_bit_order = 1; spi->dev->ctrl.rd_bit_order = 1; } -#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) // Sync new config with hardware, fixes https://github.com/espressif/arduino-esp32/issues/9221 spi->dev->cmd.update = 1; while (spi->dev->cmd.update); @@ -1157,7 +1155,7 @@ void ARDUINO_ISR_ATTR spiWriteByteNL(spi_t *spi, uint8_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1176,7 +1174,7 @@ uint8_t spiTransferByteNL(spi_t *spi, uint8_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1206,7 +1204,7 @@ void ARDUINO_ISR_ATTR spiWriteShortNL(spi_t *spi, uint16_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1228,7 +1226,7 @@ uint16_t spiTransferShortNL(spi_t *spi, uint16_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1261,7 +1259,7 @@ void ARDUINO_ISR_ATTR spiWriteLongNL(spi_t *spi, uint32_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1283,7 +1281,7 @@ uint32_t spiTransferLongNL(spi_t *spi, uint32_t data) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1326,7 +1324,7 @@ void spiWriteNL(spi_t *spi, const void *data_in, uint32_t len) { spi->dev->data_buf[i] = data[i]; #endif } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1374,7 +1372,7 @@ void spiTransferBytesNL(spi_t *spi, const void *data_in, uint8_t *data_out, uint #endif } } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1448,7 +1446,7 @@ void spiTransferBitsNL(spi_t *spi, uint32_t data, uint32_t *out, uint8_t bits) { #else spi->dev->data_buf[0] = data; #endif -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1522,7 +1520,7 @@ void ARDUINO_ISR_ATTR spiWritePixelsNL(spi_t *spi, const void *data_in, uint32_t #endif } } -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) spi->dev->cmd.update = 1; while (spi->dev->cmd.update); #endif @@ -1546,7 +1544,7 @@ typedef union { uint32_t clkcnt_l : 6; /*it must be equal to spi_clkcnt_N.*/ uint32_t clkcnt_h : 6; /*it must be floor((spi_clkcnt_N+1)/2-1).*/ uint32_t clkcnt_n : 6; /*it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1)*/ -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) uint32_t clkdiv_pre : 4; /*it is pre-divider of spi_clk.*/ uint32_t reserved : 9; /*reserved*/ #else @@ -1591,7 +1589,7 @@ uint32_t spiFrequencyToClockDiv(uint32_t freq) { while (calPreVari++ <= 1) { calPre = (((apb_freq / (reg.clkcnt_n + 1)) / freq) - 1) + calPreVari; -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) if (calPre > 0xF) { reg.clkdiv_pre = 0xF; #else diff --git a/cores/esp32/esp32-hal-spi.h b/cores/esp32/esp32-hal-spi.h index 4900cc89c2f..b77abff7854 100644 --- a/cores/esp32/esp32-hal-spi.h +++ b/cores/esp32/esp32-hal-spi.h @@ -28,10 +28,7 @@ extern "C" { #define SPI_HAS_TRANSACTION -#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 -#define FSPI 0 -#define HSPI 1 -#elif CONFIG_IDF_TARGET_ESP32S2 +#ifdef CONFIG_IDF_TARGET_ESP32S2 #define FSPI 1 //SPI 1 bus. ESP32S2: for external memory only (can use the same data lines but different SS) #define HSPI 2 //SPI 2 bus. ESP32S2: external memory or device - it can be matrixed to any pins #define SPI2 2 // Another name for ESP32S2 SPI 2 @@ -40,6 +37,9 @@ extern "C" { #define FSPI 1 //SPI 1 bus attached to the flash (can use the same data lines but different SS) #define HSPI 2 //SPI 2 bus normally mapped to pins 12 - 15, but can be matrixed to any pins #define VSPI 3 //SPI 3 bus normally attached to pins 5, 18, 19 and 23, but can be matrixed to any pins +#else +#define FSPI 0 +#define HSPI 1 #endif // This defines are not representing the real Divider of the ESP32 diff --git a/cores/esp32/esp32-hal-touch.c b/cores/esp32/esp32-hal-touch.c index 3c7808cc175..40a917b544d 100644 --- a/cores/esp32/esp32-hal-touch.c +++ b/cores/esp32/esp32-hal-touch.c @@ -15,6 +15,8 @@ #if SOC_TOUCH_SENSOR_SUPPORTED #if SOC_TOUCH_SENSOR_VERSION == 3 // ESP32P4 +// ToDo: Implement touch sensor for ESP32P4 +#warning "Touch sensor not implemented for ESP32P4 yet" #else #include "driver/touch_sensor.h" #include "esp32-hal-touch.h" diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c index 37af58a400d..37e1b238d73 100644 --- a/cores/esp32/esp32-hal-uart.c +++ b/cores/esp32/esp32-hal-uart.c @@ -1105,7 +1105,18 @@ unsigned long uartDetectBaudrate(uart_t *uart) { */ // gets the right TX or RX SIGNAL, based on the UART number from gpio_sig_map.h -#if !defined(CONFIG_IDF_TARGET_ESP32P4) +#ifdef CONFIG_IDF_TARGET_ESP32P4 +#define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? UART0_TXD_PAD_OUT_IDX \ + : (uartNumber == UART_NUM_1 ? UART1_TXD_PAD_OUT_IDX \ + : (uartNumber == UART_NUM_2 ? UART2_TXD_PAD_OUT_IDX \ + : (uartNumber == UART_NUM_3 ? UART3_TXD_PAD_OUT_IDX \ + : UART4_TXD_PAD_OUT_IDX)))) +#define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? UART0_RXD_PAD_IN_IDX \ + : (uartNumber == UART_NUM_1 ? UART1_RXD_PAD_IN_IDX \ + : (uartNumber == UART_NUM_2 ? UART2_RXD_PAD_IN_IDX \ + : (uartNumber == UART_NUM_3 ? UART3_RXD_PAD_IN_IDX \ + : UART4_RXD_PAD_IN_IDX)))) +#else #if SOC_UART_HP_NUM > 2 #define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0TXD_OUT_IDX : (uartNumber == UART_NUM_1 ? U1TXD_OUT_IDX : U2TXD_OUT_IDX)) #define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0RXD_IN_IDX : (uartNumber == UART_NUM_1 ? U1RXD_IN_IDX : U2RXD_IN_IDX)) @@ -1113,12 +1124,8 @@ unsigned long uartDetectBaudrate(uart_t *uart) { #define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0TXD_OUT_IDX : U1TXD_OUT_IDX) #define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0RXD_IN_IDX : U1RXD_IN_IDX) #endif -#endif // if !defined(CONFIG_IDF_TARGET_ESP32P4) -// todo ESP32-P4 has 4 UART not 3 See IDF soc/esp32p4/uart_periph.c -#ifdef CONFIG_IDF_TARGET_ESP32P4 -#define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? UART0_TXD_PAD_OUT_IDX : (uartNumber == UART_NUM_1 ? UART1_TXD_PAD_OUT_IDX : UART2_TXD_PAD_OUT_IDX)) -#define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? UART0_RXD_PAD_IN_IDX : (uartNumber == UART_NUM_1 ? UART1_RXD_PAD_IN_IDX : UART2_RXD_PAD_IN_IDX)) #endif // ifdef CONFIG_IDF_TARGET_ESP32P4 + /* This function internally binds defined UARTs TX signal with defined RX pin of any UART (same or different). This creates a loop that lets us receive anything we send on the UART without external wires. From f72fc690b49ae18a353badbf49ae03453dc09d18 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Sun, 22 Sep 2024 19:38:58 -0300 Subject: [PATCH 20/28] fix(esp32p4): Add missing menu options --- boards.txt | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/boards.txt b/boards.txt index 2f1c0139834..f95cf4c21d3 100644 --- a/boards.txt +++ b/boards.txt @@ -202,6 +202,25 @@ esp32p4.build.defines= ## IDE 2.0 Seems to not update the value esp32p4.menu.JTAGAdapter.default=Disabled esp32p4.menu.JTAGAdapter.default.build.copy_jtag_files=0 +esp32p4.menu.JTAGAdapter.builtin=Integrated USB JTAG +esp32p4.menu.JTAGAdapter.builtin.build.openocdscript=esp32p4-builtin.cfg +esp32p4.menu.JTAGAdapter.builtin.build.copy_jtag_files=1 +esp32p4.menu.JTAGAdapter.external=FTDI Adapter +esp32p4.menu.JTAGAdapter.external.build.openocdscript=esp32p4-ftdi.cfg +esp32p4.menu.JTAGAdapter.external.build.copy_jtag_files=1 +esp32p4.menu.JTAGAdapter.bridge=ESP USB Bridge +esp32p4.menu.JTAGAdapter.bridge.build.openocdscript=esp32p4-bridge.cfg +esp32p4.menu.JTAGAdapter.bridge.build.copy_jtag_files=1 + +esp32p4.menu.CDCOnBoot.default=Disabled +esp32p4.menu.CDCOnBoot.default.build.cdc_on_boot=0 +esp32p4.menu.CDCOnBoot.cdc=Enabled +esp32p4.menu.CDCOnBoot.cdc.build.cdc_on_boot=1 + +esp32p4.menu.PSRAM.disabled=Disabled +esp32p4.menu.PSRAM.disabled.build.defines= +esp32p4.menu.PSRAM.enabled=Enabled +esp32p4.menu.PSRAM.enabled.build.defines=-DBOARD_HAS_PSRAM esp32p4.menu.CDCOnBoot.default=Disabled esp32p4.menu.CDCOnBoot.default.build.cdc_on_boot=0 @@ -210,20 +229,87 @@ esp32p4.menu.CDCOnBoot.cdc.build.cdc_on_boot=1 esp32p4.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS) esp32p4.menu.PartitionScheme.default.build.partitions=default +esp32p4.menu.PartitionScheme.defaultffat=Default 4MB with ffat (1.2MB APP/1.5MB FATFS) +esp32p4.menu.PartitionScheme.defaultffat.build.partitions=default_ffat +esp32p4.menu.PartitionScheme.default_8MB=8M with spiffs (3MB APP/1.5MB SPIFFS) +esp32p4.menu.PartitionScheme.default_8MB.build.partitions=default_8MB +esp32p4.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 +esp32p4.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) +esp32p4.menu.PartitionScheme.minimal.build.partitions=minimal esp32p4.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) esp32p4.menu.PartitionScheme.no_fs.build.partitions=no_fs esp32p4.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 +esp32p4.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) +esp32p4.menu.PartitionScheme.no_ota.build.partitions=no_ota +esp32p4.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 +esp32p4.menu.PartitionScheme.noota_3g=No OTA (1MB APP/3MB SPIFFS) +esp32p4.menu.PartitionScheme.noota_3g.build.partitions=noota_3g +esp32p4.menu.PartitionScheme.noota_3g.upload.maximum_size=1048576 +esp32p4.menu.PartitionScheme.noota_ffat=No OTA (2MB APP/2MB FATFS) +esp32p4.menu.PartitionScheme.noota_ffat.build.partitions=noota_ffat +esp32p4.menu.PartitionScheme.noota_ffat.upload.maximum_size=2097152 +esp32p4.menu.PartitionScheme.noota_3gffat=No OTA (1MB APP/3MB FATFS) +esp32p4.menu.PartitionScheme.noota_3gffat.build.partitions=noota_3gffat +esp32p4.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576 esp32p4.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS) esp32p4.menu.PartitionScheme.huge_app.build.partitions=huge_app esp32p4.menu.PartitionScheme.huge_app.upload.maximum_size=3145728 +esp32p4.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) +esp32p4.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs +esp32p4.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080 +esp32p4.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FATFS) +esp32p4.menu.PartitionScheme.fatflash.build.partitions=ffat +esp32p4.menu.PartitionScheme.fatflash.upload.maximum_size=2097152 +esp32p4.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9.9MB FATFS) +esp32p4.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB +esp32p4.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728 esp32p4.menu.PartitionScheme.custom=Custom esp32p4.menu.PartitionScheme.custom.build.partitions= esp32p4.menu.PartitionScheme.custom.upload.maximum_size=16777216 +## From https://docs.espressif.com/projects/esp-idf/en/latest/esp32p4/api-reference/kconfig.html#config-esp-default-cpu-freq-mhz +esp32p4.menu.CPUFreq.360=360MHz +esp32p4.menu.CPUFreq.360.build.f_cpu=360000000L +esp32p4.menu.CPUFreq.40=40MHz +esp32p4.menu.CPUFreq.40.build.f_cpu=40000000L + +esp32p4.menu.FlashMode.qio=QIO +esp32p4.menu.FlashMode.qio.build.flash_mode=dio +esp32p4.menu.FlashMode.qio.build.boot=qio +esp32p4.menu.FlashMode.dio=DIO +esp32p4.menu.FlashMode.dio.build.flash_mode=dio +esp32p4.menu.FlashMode.dio.build.boot=dio + +esp32p4.menu.FlashFreq.80=80MHz +esp32p4.menu.FlashFreq.80.build.flash_freq=80m +esp32p4.menu.FlashFreq.40=40MHz +esp32p4.menu.FlashFreq.40.build.flash_freq=40m + +esp32p4.menu.FlashSize.4M=4MB (32Mb) +esp32p4.menu.FlashSize.4M.build.flash_size=4MB +esp32p4.menu.FlashSize.8M=8MB (64Mb) +esp32p4.menu.FlashSize.8M.build.flash_size=8MB +esp32p4.menu.FlashSize.8M.build.partitions=default_8MB +esp32p4.menu.FlashSize.2M=2MB (16Mb) +esp32p4.menu.FlashSize.2M.build.flash_size=2MB +esp32p4.menu.FlashSize.2M.build.partitions=minimal +esp32p4.menu.FlashSize.16M=16MB (128Mb) +esp32p4.menu.FlashSize.16M.build.flash_size=16MB + esp32p4.menu.UploadSpeed.921600=921600 esp32p4.menu.UploadSpeed.921600.upload.speed=921600 esp32p4.menu.UploadSpeed.115200=115200 esp32p4.menu.UploadSpeed.115200.upload.speed=115200 +esp32p4.menu.UploadSpeed.256000.windows=256000 +esp32p4.menu.UploadSpeed.256000.upload.speed=256000 +esp32p4.menu.UploadSpeed.230400.windows.upload.speed=256000 +esp32p4.menu.UploadSpeed.230400=230400 +esp32p4.menu.UploadSpeed.230400.upload.speed=230400 +esp32p4.menu.UploadSpeed.460800.linux=460800 +esp32p4.menu.UploadSpeed.460800.macosx=460800 +esp32p4.menu.UploadSpeed.460800.upload.speed=460800 +esp32p4.menu.UploadSpeed.512000.windows=512000 +esp32p4.menu.UploadSpeed.512000.upload.speed=512000 esp32p4.menu.DebugLevel.none=None esp32p4.menu.DebugLevel.none.build.code_debug=0 From f1b126c99ae305611b5bc1c2f63725a2ca541b99 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:21:31 -0300 Subject: [PATCH 21/28] fix(esp32p4): Mark as not in development json in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f892ba1f378..d3dca34aafe 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Here are the ESP32 series supported by the Arduino-ESP32 project: | ESP32-S3 | Yes | Yes | [ESP32-S3](https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf) | | ESP32-C6 | Yes | Yes | [ESP32-C6](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf) | | ESP32-H2 | Yes | Yes | [ESP32-H2](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf) | -| ESP32-P4 | No | Yes | [ESP32-P4](https://www.espressif.com/sites/default/files/documentation/esp32-p4_datasheet_en.pdf) | +| ESP32-P4 | No | No | [ESP32-P4](https://www.espressif.com/sites/default/files/documentation/esp32-p4_datasheet_en.pdf) | > [!NOTE] > ESP32-C2 is also supported by Arduino-ESP32 but requires rebuilding the static libraries. This is not trivial and requires a good understanding of the ESP-IDF From b4f535adeb30a75f4f6ffda30099307fa124f170 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:22:47 -0300 Subject: [PATCH 22/28] fix(esp32p4): Add P4 to ci.json files --- libraries/ArduinoOTA/examples/BasicOTA/ci.json | 3 ++- libraries/AsyncUDP/examples/AsyncUDPClient/ci.json | 3 ++- libraries/AsyncUDP/examples/AsyncUDPMulticastServer/ci.json | 3 ++- libraries/AsyncUDP/examples/AsyncUDPServer/ci.json | 3 ++- libraries/BLE/examples/BLE5_extended_scan/ci.json | 3 ++- libraries/BLE/examples/BLE5_multi_advertising/ci.json | 3 ++- libraries/BLE/examples/BLE5_periodic_advertising/ci.json | 3 ++- libraries/BLE/examples/BLE5_periodic_sync/ci.json | 3 ++- libraries/BLE/examples/Beacon_Scanner/ci.json | 3 ++- libraries/BLE/examples/Client/ci.json | 3 ++- libraries/BLE/examples/EddystoneTLM_Beacon/ci.json | 1 + libraries/BLE/examples/EddystoneURL_Beacon/ci.json | 1 + libraries/BLE/examples/Notify/ci.json | 3 ++- libraries/BLE/examples/Scan/ci.json | 3 ++- libraries/BLE/examples/Server/ci.json | 3 ++- libraries/BLE/examples/Server_multiconnect/ci.json | 3 ++- libraries/BLE/examples/UART/ci.json | 3 ++- libraries/BLE/examples/Write/ci.json | 3 ++- libraries/BLE/examples/iBeacon/ci.json | 3 ++- libraries/BluetoothSerial/examples/DiscoverConnect/ci.json | 1 + libraries/BluetoothSerial/examples/GetLocalMAC/ci.json | 1 + libraries/BluetoothSerial/examples/SerialToSerialBT/ci.json | 1 + libraries/BluetoothSerial/examples/SerialToSerialBTM/ci.json | 1 + .../BluetoothSerial/examples/SerialToSerialBT_Legacy/ci.json | 1 + .../BluetoothSerial/examples/SerialToSerialBT_SSP/ci.json | 1 + .../examples/bt_classic_device_discovery/ci.json | 1 + .../BluetoothSerial/examples/bt_remove_paired_devices/ci.json | 1 + libraries/DNSServer/examples/CaptivePortal/ci.json | 3 ++- libraries/ESP32/examples/Camera/CameraWebServer/ci.json | 3 ++- libraries/ESP32/examples/DeepSleep/ExternalWakeUp/ci.json | 3 ++- .../ESP32/examples/DeepSleep/SmoothBlink_ULP_Code/ci.json | 1 + libraries/ESP32/examples/Time/SimpleTime/ci.json | 3 ++- libraries/ESP32/examples/Zigbee/Zigbee_Light_Bulb/ci.json | 1 + libraries/ESP32/examples/Zigbee/Zigbee_Light_Switch/ci.json | 1 + .../ESP32/examples/Zigbee/Zigbee_Temperature_Sensor/ci.json | 1 + libraries/ESP32/examples/Zigbee/Zigbee_Thermostat/ci.json | 1 + libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Master/ci.json | 3 ++- libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Slave/ci.json | 3 ++- libraries/ESP_NOW/examples/ESP_NOW_Network/ci.json | 3 ++- libraries/ESP_NOW/examples/ESP_NOW_Serial/ci.json | 3 ++- libraries/ESP_SR/examples/Basic/ci.json | 1 + libraries/ESPmDNS/examples/mDNS-SD_Extended/ci.json | 3 ++- libraries/ESPmDNS/examples/mDNS_Web_Server/ci.json | 3 ++- libraries/Ethernet/examples/ETH_WIFI_BRIDGE/ci.json | 3 ++- libraries/FFat/examples/FFat_time/ci.json | 3 ++- libraries/HTTPClient/examples/Authorization/ci.json | 3 ++- libraries/HTTPClient/examples/BasicHttpClient/ci.json | 3 ++- libraries/HTTPClient/examples/BasicHttpsClient/ci.json | 3 ++- libraries/HTTPClient/examples/HTTPClientEnterprise/ci.json | 3 ++- libraries/HTTPClient/examples/ReuseConnection/ci.json | 3 ++- libraries/HTTPClient/examples/StreamHttpClient/ci.json | 3 ++- libraries/HTTPUpdate/examples/httpUpdate/ci.json | 3 ++- libraries/HTTPUpdate/examples/httpUpdateSPIFFS/ci.json | 3 ++- libraries/HTTPUpdate/examples/httpUpdateSecure/ci.json | 3 ++- libraries/HTTPUpdateServer/examples/WebUpdater/ci.json | 3 ++- libraries/Insights/examples/DiagnosticsSmokeTest/ci.json | 3 ++- libraries/Insights/examples/MinimalDiagnostics/ci.json | 3 ++- libraries/LittleFS/examples/LITTLEFS_time/ci.json | 3 ++- libraries/NetBIOS/examples/ESP_NBNST/ci.json | 3 ++- .../NetworkClientSecure/examples/WiFiClientInsecure/ci.json | 3 ++- libraries/NetworkClientSecure/examples/WiFiClientPSK/ci.json | 3 ++- .../NetworkClientSecure/examples/WiFiClientSecure/ci.json | 3 ++- .../examples/WiFiClientSecureEnterprise/ci.json | 3 ++- .../examples/WiFiClientSecureProtocolUpgrade/ci.json | 3 ++- .../examples/WiFiClientShowPeerCredentials/ci.json | 3 ++- .../examples/WiFiClientTrustOnFirstUse/ci.json | 3 ++- libraries/OpenThread/examples/COAP/coap_lamp/ci.json | 3 ++- libraries/OpenThread/examples/COAP/coap_switch/ci.json | 3 ++- libraries/OpenThread/examples/SimpleCLI/ci.json | 3 ++- libraries/OpenThread/examples/SimpleNode/ci.json | 3 ++- .../examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json | 3 ++- .../OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json | 3 ++- .../OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json | 3 ++- libraries/OpenThread/examples/ThreadScan/ci.json | 3 ++- libraries/OpenThread/examples/onReceive/ci.json | 3 ++- libraries/PPP/examples/PPP_WIFI_BRIDGE/ci.json | 3 ++- libraries/RainMaker/examples/RMakerCustom/ci.json | 3 ++- libraries/RainMaker/examples/RMakerCustomAirCooler/ci.json | 3 ++- libraries/RainMaker/examples/RMakerSonoffDualR3/ci.json | 3 ++- libraries/RainMaker/examples/RMakerSwitch/ci.json | 3 ++- libraries/SD/examples/SD_time/ci.json | 3 ++- libraries/SD_MMC/examples/SD2USBMSC/ci.json | 3 ++- libraries/SD_MMC/examples/SDMMC_Test/ci.json | 3 ++- libraries/SD_MMC/examples/SDMMC_time/ci.json | 3 ++- libraries/SPIFFS/examples/SPIFFS_time/ci.json | 3 ++- libraries/SimpleBLE/examples/SimpleBleDevice/ci.json | 3 ++- libraries/Update/examples/AWS_S3_OTA_Update/ci.json | 3 ++- libraries/Update/examples/HTTPS_OTA_Update/ci.json | 3 ++- libraries/Update/examples/HTTP_Client_AES_OTA_Update/ci.json | 3 ++- libraries/Update/examples/HTTP_Server_AES_OTA_Update/ci.json | 3 ++- libraries/Update/examples/OTAWebUpdater/ci.json | 3 ++- libraries/WebServer/examples/AdvancedWebServer/ci.json | 3 ++- libraries/WebServer/examples/FSBrowser/ci.json | 3 ++- libraries/WebServer/examples/Filters/ci.json | 3 ++- libraries/WebServer/examples/HelloServer/ci.json | 3 ++- libraries/WebServer/examples/HttpAdvancedAuth/ci.json | 3 ++- libraries/WebServer/examples/HttpAuthCallback/ci.json | 3 ++- libraries/WebServer/examples/HttpAuthCallbackInline/ci.json | 3 ++- libraries/WebServer/examples/HttpBasicAuth/ci.json | 3 ++- libraries/WebServer/examples/HttpBasicAuthSHA1/ci.json | 3 ++- .../WebServer/examples/HttpBasicAuthSHA1orBearerToken/ci.json | 3 ++- libraries/WebServer/examples/MultiHomedServers/ci.json | 3 ++- libraries/WebServer/examples/PathArgServer/ci.json | 3 ++- libraries/WebServer/examples/SDWebServer/ci.json | 3 ++- libraries/WebServer/examples/SimpleAuthentification/ci.json | 3 ++- libraries/WebServer/examples/UploadHugeFile/ci.json | 3 ++- libraries/WebServer/examples/WebServer/ci.json | 3 ++- libraries/WebServer/examples/WebUpdate/ci.json | 3 ++- libraries/WiFi/examples/FTM/FTM_Initiator/ci.json | 3 ++- libraries/WiFi/examples/FTM/FTM_Responder/ci.json | 3 ++- libraries/WiFi/examples/SimpleWiFiServer/ci.json | 3 ++- libraries/WiFi/examples/WPS/ci.json | 3 ++- libraries/WiFi/examples/WiFiAccessPoint/ci.json | 3 ++- libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json | 3 ++- libraries/WiFi/examples/WiFiClient/ci.json | 3 ++- libraries/WiFi/examples/WiFiClientBasic/ci.json | 3 ++- libraries/WiFi/examples/WiFiClientConnect/ci.json | 3 ++- libraries/WiFi/examples/WiFiClientEnterprise/ci.json | 3 ++- libraries/WiFi/examples/WiFiClientEvents/ci.json | 3 ++- libraries/WiFi/examples/WiFiClientStaticIP/ci.json | 3 ++- libraries/WiFi/examples/WiFiExtender/ci.json | 3 ++- libraries/WiFi/examples/WiFiIPv6/ci.json | 3 ++- libraries/WiFi/examples/WiFiMulti/ci.json | 3 ++- libraries/WiFi/examples/WiFiMultiAdvanced/ci.json | 3 ++- libraries/WiFi/examples/WiFiScan/ci.json | 3 ++- libraries/WiFi/examples/WiFiScanAsync/ci.json | 3 ++- libraries/WiFi/examples/WiFiScanDualAntenna/ci.json | 3 ++- libraries/WiFi/examples/WiFiScanTime/ci.json | 3 ++- libraries/WiFi/examples/WiFiSmartConfig/ci.json | 3 ++- libraries/WiFi/examples/WiFiTelnetToSerial/ci.json | 3 ++- libraries/WiFi/examples/WiFiUDPClient/ci.json | 3 ++- libraries/WiFiProv/examples/WiFiProv/ci.json | 3 ++- 132 files changed, 248 insertions(+), 116 deletions(-) diff --git a/libraries/ArduinoOTA/examples/BasicOTA/ci.json b/libraries/ArduinoOTA/examples/BasicOTA/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/ArduinoOTA/examples/BasicOTA/ci.json +++ b/libraries/ArduinoOTA/examples/BasicOTA/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/AsyncUDP/examples/AsyncUDPClient/ci.json b/libraries/AsyncUDP/examples/AsyncUDPClient/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/AsyncUDP/examples/AsyncUDPClient/ci.json +++ b/libraries/AsyncUDP/examples/AsyncUDPClient/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/AsyncUDP/examples/AsyncUDPMulticastServer/ci.json b/libraries/AsyncUDP/examples/AsyncUDPMulticastServer/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/AsyncUDP/examples/AsyncUDPMulticastServer/ci.json +++ b/libraries/AsyncUDP/examples/AsyncUDPMulticastServer/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/AsyncUDP/examples/AsyncUDPServer/ci.json b/libraries/AsyncUDP/examples/AsyncUDPServer/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/AsyncUDP/examples/AsyncUDPServer/ci.json +++ b/libraries/AsyncUDP/examples/AsyncUDPServer/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/BLE5_extended_scan/ci.json b/libraries/BLE/examples/BLE5_extended_scan/ci.json index edef5051e09..67455e96584 100644 --- a/libraries/BLE/examples/BLE5_extended_scan/ci.json +++ b/libraries/BLE/examples/BLE5_extended_scan/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/BLE5_multi_advertising/ci.json b/libraries/BLE/examples/BLE5_multi_advertising/ci.json index edef5051e09..67455e96584 100644 --- a/libraries/BLE/examples/BLE5_multi_advertising/ci.json +++ b/libraries/BLE/examples/BLE5_multi_advertising/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/BLE5_periodic_advertising/ci.json b/libraries/BLE/examples/BLE5_periodic_advertising/ci.json index edef5051e09..67455e96584 100644 --- a/libraries/BLE/examples/BLE5_periodic_advertising/ci.json +++ b/libraries/BLE/examples/BLE5_periodic_advertising/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/BLE5_periodic_sync/ci.json b/libraries/BLE/examples/BLE5_periodic_sync/ci.json index edef5051e09..67455e96584 100644 --- a/libraries/BLE/examples/BLE5_periodic_sync/ci.json +++ b/libraries/BLE/examples/BLE5_periodic_sync/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/Beacon_Scanner/ci.json b/libraries/BLE/examples/Beacon_Scanner/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/Beacon_Scanner/ci.json +++ b/libraries/BLE/examples/Beacon_Scanner/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/Client/ci.json b/libraries/BLE/examples/Client/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/Client/ci.json +++ b/libraries/BLE/examples/Client/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/EddystoneTLM_Beacon/ci.json b/libraries/BLE/examples/EddystoneTLM_Beacon/ci.json index 521ae8f5ff1..156dda6560c 100644 --- a/libraries/BLE/examples/EddystoneTLM_Beacon/ci.json +++ b/libraries/BLE/examples/EddystoneTLM_Beacon/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32h2": false, + "esp32p4": false, "esp32s2": false } } diff --git a/libraries/BLE/examples/EddystoneURL_Beacon/ci.json b/libraries/BLE/examples/EddystoneURL_Beacon/ci.json index 521ae8f5ff1..156dda6560c 100644 --- a/libraries/BLE/examples/EddystoneURL_Beacon/ci.json +++ b/libraries/BLE/examples/EddystoneURL_Beacon/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32h2": false, + "esp32p4": false, "esp32s2": false } } diff --git a/libraries/BLE/examples/Notify/ci.json b/libraries/BLE/examples/Notify/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/Notify/ci.json +++ b/libraries/BLE/examples/Notify/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/Scan/ci.json b/libraries/BLE/examples/Scan/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/Scan/ci.json +++ b/libraries/BLE/examples/Scan/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/Server/ci.json b/libraries/BLE/examples/Server/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/Server/ci.json +++ b/libraries/BLE/examples/Server/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/Server_multiconnect/ci.json b/libraries/BLE/examples/Server_multiconnect/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/Server_multiconnect/ci.json +++ b/libraries/BLE/examples/Server_multiconnect/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/UART/ci.json b/libraries/BLE/examples/UART/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/UART/ci.json +++ b/libraries/BLE/examples/UART/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/Write/ci.json b/libraries/BLE/examples/Write/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/Write/ci.json +++ b/libraries/BLE/examples/Write/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BLE/examples/iBeacon/ci.json b/libraries/BLE/examples/iBeacon/ci.json index 1443137ab0d..cde395625ee 100644 --- a/libraries/BLE/examples/iBeacon/ci.json +++ b/libraries/BLE/examples/iBeacon/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/BluetoothSerial/examples/DiscoverConnect/ci.json b/libraries/BluetoothSerial/examples/DiscoverConnect/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/BluetoothSerial/examples/DiscoverConnect/ci.json +++ b/libraries/BluetoothSerial/examples/DiscoverConnect/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/BluetoothSerial/examples/GetLocalMAC/ci.json b/libraries/BluetoothSerial/examples/GetLocalMAC/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/BluetoothSerial/examples/GetLocalMAC/ci.json +++ b/libraries/BluetoothSerial/examples/GetLocalMAC/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/BluetoothSerial/examples/SerialToSerialBT/ci.json b/libraries/BluetoothSerial/examples/SerialToSerialBT/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/BluetoothSerial/examples/SerialToSerialBT/ci.json +++ b/libraries/BluetoothSerial/examples/SerialToSerialBT/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/BluetoothSerial/examples/SerialToSerialBTM/ci.json b/libraries/BluetoothSerial/examples/SerialToSerialBTM/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/BluetoothSerial/examples/SerialToSerialBTM/ci.json +++ b/libraries/BluetoothSerial/examples/SerialToSerialBTM/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/BluetoothSerial/examples/SerialToSerialBT_Legacy/ci.json b/libraries/BluetoothSerial/examples/SerialToSerialBT_Legacy/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/BluetoothSerial/examples/SerialToSerialBT_Legacy/ci.json +++ b/libraries/BluetoothSerial/examples/SerialToSerialBT_Legacy/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/BluetoothSerial/examples/SerialToSerialBT_SSP/ci.json b/libraries/BluetoothSerial/examples/SerialToSerialBT_SSP/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/BluetoothSerial/examples/SerialToSerialBT_SSP/ci.json +++ b/libraries/BluetoothSerial/examples/SerialToSerialBT_SSP/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/BluetoothSerial/examples/bt_classic_device_discovery/ci.json b/libraries/BluetoothSerial/examples/bt_classic_device_discovery/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/BluetoothSerial/examples/bt_classic_device_discovery/ci.json +++ b/libraries/BluetoothSerial/examples/bt_classic_device_discovery/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/BluetoothSerial/examples/bt_remove_paired_devices/ci.json b/libraries/BluetoothSerial/examples/bt_remove_paired_devices/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/BluetoothSerial/examples/bt_remove_paired_devices/ci.json +++ b/libraries/BluetoothSerial/examples/bt_remove_paired_devices/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/DNSServer/examples/CaptivePortal/ci.json b/libraries/DNSServer/examples/CaptivePortal/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/DNSServer/examples/CaptivePortal/ci.json +++ b/libraries/DNSServer/examples/CaptivePortal/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESP32/examples/Camera/CameraWebServer/ci.json b/libraries/ESP32/examples/Camera/CameraWebServer/ci.json index 25c42144223..cd679adefad 100644 --- a/libraries/ESP32/examples/Camera/CameraWebServer/ci.json +++ b/libraries/ESP32/examples/Camera/CameraWebServer/ci.json @@ -2,6 +2,7 @@ "targets": { "esp32c3": false, "esp32c6": false, - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESP32/examples/DeepSleep/ExternalWakeUp/ci.json b/libraries/ESP32/examples/DeepSleep/ExternalWakeUp/ci.json index 25c42144223..cd679adefad 100644 --- a/libraries/ESP32/examples/DeepSleep/ExternalWakeUp/ci.json +++ b/libraries/ESP32/examples/DeepSleep/ExternalWakeUp/ci.json @@ -2,6 +2,7 @@ "targets": { "esp32c3": false, "esp32c6": false, - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESP32/examples/DeepSleep/SmoothBlink_ULP_Code/ci.json b/libraries/ESP32/examples/DeepSleep/SmoothBlink_ULP_Code/ci.json index 1af543242e3..6afa60f44c4 100644 --- a/libraries/ESP32/examples/DeepSleep/SmoothBlink_ULP_Code/ci.json +++ b/libraries/ESP32/examples/DeepSleep/SmoothBlink_ULP_Code/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/ESP32/examples/Time/SimpleTime/ci.json b/libraries/ESP32/examples/Time/SimpleTime/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/ESP32/examples/Time/SimpleTime/ci.json +++ b/libraries/ESP32/examples/Time/SimpleTime/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESP32/examples/Zigbee/Zigbee_Light_Bulb/ci.json b/libraries/ESP32/examples/Zigbee/Zigbee_Light_Bulb/ci.json index 7cfaa76784d..7b73237d754 100644 --- a/libraries/ESP32/examples/Zigbee/Zigbee_Light_Bulb/ci.json +++ b/libraries/ESP32/examples/Zigbee/Zigbee_Light_Bulb/ci.json @@ -4,6 +4,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/ESP32/examples/Zigbee/Zigbee_Light_Switch/ci.json b/libraries/ESP32/examples/Zigbee/Zigbee_Light_Switch/ci.json index 7cfaa76784d..7b73237d754 100644 --- a/libraries/ESP32/examples/Zigbee/Zigbee_Light_Switch/ci.json +++ b/libraries/ESP32/examples/Zigbee/Zigbee_Light_Switch/ci.json @@ -4,6 +4,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/ESP32/examples/Zigbee/Zigbee_Temperature_Sensor/ci.json b/libraries/ESP32/examples/Zigbee/Zigbee_Temperature_Sensor/ci.json index 7cfaa76784d..7b73237d754 100644 --- a/libraries/ESP32/examples/Zigbee/Zigbee_Temperature_Sensor/ci.json +++ b/libraries/ESP32/examples/Zigbee/Zigbee_Temperature_Sensor/ci.json @@ -4,6 +4,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/ESP32/examples/Zigbee/Zigbee_Thermostat/ci.json b/libraries/ESP32/examples/Zigbee/Zigbee_Thermostat/ci.json index 7cfaa76784d..7b73237d754 100644 --- a/libraries/ESP32/examples/Zigbee/Zigbee_Thermostat/ci.json +++ b/libraries/ESP32/examples/Zigbee/Zigbee_Thermostat/ci.json @@ -4,6 +4,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false, "esp32s3": false } diff --git a/libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Master/ci.json b/libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Master/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Master/ci.json +++ b/libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Master/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Slave/ci.json b/libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Slave/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Slave/ci.json +++ b/libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Slave/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESP_NOW/examples/ESP_NOW_Network/ci.json b/libraries/ESP_NOW/examples/ESP_NOW_Network/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/ESP_NOW/examples/ESP_NOW_Network/ci.json +++ b/libraries/ESP_NOW/examples/ESP_NOW_Network/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESP_NOW/examples/ESP_NOW_Serial/ci.json b/libraries/ESP_NOW/examples/ESP_NOW_Serial/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/ESP_NOW/examples/ESP_NOW_Serial/ci.json +++ b/libraries/ESP_NOW/examples/ESP_NOW_Serial/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESP_SR/examples/Basic/ci.json b/libraries/ESP_SR/examples/Basic/ci.json index dca52699ab3..98703e79183 100644 --- a/libraries/ESP_SR/examples/Basic/ci.json +++ b/libraries/ESP_SR/examples/Basic/ci.json @@ -9,6 +9,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, + "esp32p4": false, "esp32s2": false } } diff --git a/libraries/ESPmDNS/examples/mDNS-SD_Extended/ci.json b/libraries/ESPmDNS/examples/mDNS-SD_Extended/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/ESPmDNS/examples/mDNS-SD_Extended/ci.json +++ b/libraries/ESPmDNS/examples/mDNS-SD_Extended/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/ESPmDNS/examples/mDNS_Web_Server/ci.json b/libraries/ESPmDNS/examples/mDNS_Web_Server/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/ESPmDNS/examples/mDNS_Web_Server/ci.json +++ b/libraries/ESPmDNS/examples/mDNS_Web_Server/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/Ethernet/examples/ETH_WIFI_BRIDGE/ci.json b/libraries/Ethernet/examples/ETH_WIFI_BRIDGE/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/Ethernet/examples/ETH_WIFI_BRIDGE/ci.json +++ b/libraries/Ethernet/examples/ETH_WIFI_BRIDGE/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/FFat/examples/FFat_time/ci.json b/libraries/FFat/examples/FFat_time/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/FFat/examples/FFat_time/ci.json +++ b/libraries/FFat/examples/FFat_time/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPClient/examples/Authorization/ci.json b/libraries/HTTPClient/examples/Authorization/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPClient/examples/Authorization/ci.json +++ b/libraries/HTTPClient/examples/Authorization/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPClient/examples/BasicHttpClient/ci.json b/libraries/HTTPClient/examples/BasicHttpClient/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPClient/examples/BasicHttpClient/ci.json +++ b/libraries/HTTPClient/examples/BasicHttpClient/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPClient/examples/BasicHttpsClient/ci.json b/libraries/HTTPClient/examples/BasicHttpsClient/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPClient/examples/BasicHttpsClient/ci.json +++ b/libraries/HTTPClient/examples/BasicHttpsClient/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPClient/examples/HTTPClientEnterprise/ci.json b/libraries/HTTPClient/examples/HTTPClientEnterprise/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPClient/examples/HTTPClientEnterprise/ci.json +++ b/libraries/HTTPClient/examples/HTTPClientEnterprise/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPClient/examples/ReuseConnection/ci.json b/libraries/HTTPClient/examples/ReuseConnection/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPClient/examples/ReuseConnection/ci.json +++ b/libraries/HTTPClient/examples/ReuseConnection/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPClient/examples/StreamHttpClient/ci.json b/libraries/HTTPClient/examples/StreamHttpClient/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPClient/examples/StreamHttpClient/ci.json +++ b/libraries/HTTPClient/examples/StreamHttpClient/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPUpdate/examples/httpUpdate/ci.json b/libraries/HTTPUpdate/examples/httpUpdate/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPUpdate/examples/httpUpdate/ci.json +++ b/libraries/HTTPUpdate/examples/httpUpdate/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPUpdate/examples/httpUpdateSPIFFS/ci.json b/libraries/HTTPUpdate/examples/httpUpdateSPIFFS/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPUpdate/examples/httpUpdateSPIFFS/ci.json +++ b/libraries/HTTPUpdate/examples/httpUpdateSPIFFS/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPUpdate/examples/httpUpdateSecure/ci.json b/libraries/HTTPUpdate/examples/httpUpdateSecure/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPUpdate/examples/httpUpdateSecure/ci.json +++ b/libraries/HTTPUpdate/examples/httpUpdateSecure/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/HTTPUpdateServer/examples/WebUpdater/ci.json b/libraries/HTTPUpdateServer/examples/WebUpdater/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/HTTPUpdateServer/examples/WebUpdater/ci.json +++ b/libraries/HTTPUpdateServer/examples/WebUpdater/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/Insights/examples/DiagnosticsSmokeTest/ci.json b/libraries/Insights/examples/DiagnosticsSmokeTest/ci.json index 90f5ecfe4d2..0d8130e329a 100644 --- a/libraries/Insights/examples/DiagnosticsSmokeTest/ci.json +++ b/libraries/Insights/examples/DiagnosticsSmokeTest/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32c6": false, - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/Insights/examples/MinimalDiagnostics/ci.json b/libraries/Insights/examples/MinimalDiagnostics/ci.json index 90f5ecfe4d2..0d8130e329a 100644 --- a/libraries/Insights/examples/MinimalDiagnostics/ci.json +++ b/libraries/Insights/examples/MinimalDiagnostics/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32c6": false, - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/LittleFS/examples/LITTLEFS_time/ci.json b/libraries/LittleFS/examples/LITTLEFS_time/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/LittleFS/examples/LITTLEFS_time/ci.json +++ b/libraries/LittleFS/examples/LITTLEFS_time/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/NetBIOS/examples/ESP_NBNST/ci.json b/libraries/NetBIOS/examples/ESP_NBNST/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/NetBIOS/examples/ESP_NBNST/ci.json +++ b/libraries/NetBIOS/examples/ESP_NBNST/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/NetworkClientSecure/examples/WiFiClientInsecure/ci.json b/libraries/NetworkClientSecure/examples/WiFiClientInsecure/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/NetworkClientSecure/examples/WiFiClientInsecure/ci.json +++ b/libraries/NetworkClientSecure/examples/WiFiClientInsecure/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/NetworkClientSecure/examples/WiFiClientPSK/ci.json b/libraries/NetworkClientSecure/examples/WiFiClientPSK/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/NetworkClientSecure/examples/WiFiClientPSK/ci.json +++ b/libraries/NetworkClientSecure/examples/WiFiClientPSK/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/NetworkClientSecure/examples/WiFiClientSecure/ci.json b/libraries/NetworkClientSecure/examples/WiFiClientSecure/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/NetworkClientSecure/examples/WiFiClientSecure/ci.json +++ b/libraries/NetworkClientSecure/examples/WiFiClientSecure/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/NetworkClientSecure/examples/WiFiClientSecureEnterprise/ci.json b/libraries/NetworkClientSecure/examples/WiFiClientSecureEnterprise/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/NetworkClientSecure/examples/WiFiClientSecureEnterprise/ci.json +++ b/libraries/NetworkClientSecure/examples/WiFiClientSecureEnterprise/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/NetworkClientSecure/examples/WiFiClientSecureProtocolUpgrade/ci.json b/libraries/NetworkClientSecure/examples/WiFiClientSecureProtocolUpgrade/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/NetworkClientSecure/examples/WiFiClientSecureProtocolUpgrade/ci.json +++ b/libraries/NetworkClientSecure/examples/WiFiClientSecureProtocolUpgrade/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/NetworkClientSecure/examples/WiFiClientShowPeerCredentials/ci.json b/libraries/NetworkClientSecure/examples/WiFiClientShowPeerCredentials/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/NetworkClientSecure/examples/WiFiClientShowPeerCredentials/ci.json +++ b/libraries/NetworkClientSecure/examples/WiFiClientShowPeerCredentials/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/NetworkClientSecure/examples/WiFiClientTrustOnFirstUse/ci.json b/libraries/NetworkClientSecure/examples/WiFiClientTrustOnFirstUse/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/NetworkClientSecure/examples/WiFiClientTrustOnFirstUse/ci.json +++ b/libraries/NetworkClientSecure/examples/WiFiClientTrustOnFirstUse/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/COAP/coap_lamp/ci.json b/libraries/OpenThread/examples/COAP/coap_lamp/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/COAP/coap_lamp/ci.json +++ b/libraries/OpenThread/examples/COAP/coap_lamp/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/COAP/coap_switch/ci.json b/libraries/OpenThread/examples/COAP/coap_switch/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/COAP/coap_switch/ci.json +++ b/libraries/OpenThread/examples/COAP/coap_switch/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/SimpleCLI/ci.json b/libraries/OpenThread/examples/SimpleCLI/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/SimpleCLI/ci.json +++ b/libraries/OpenThread/examples/SimpleCLI/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/SimpleNode/ci.json b/libraries/OpenThread/examples/SimpleNode/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/SimpleNode/ci.json +++ b/libraries/OpenThread/examples/SimpleNode/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json b/libraries/OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json +++ b/libraries/OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json b/libraries/OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json +++ b/libraries/OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json b/libraries/OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json +++ b/libraries/OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/ThreadScan/ci.json b/libraries/OpenThread/examples/ThreadScan/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/ThreadScan/ci.json +++ b/libraries/OpenThread/examples/ThreadScan/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/OpenThread/examples/onReceive/ci.json b/libraries/OpenThread/examples/onReceive/ci.json index c60d9179992..ec2b3177531 100644 --- a/libraries/OpenThread/examples/onReceive/ci.json +++ b/libraries/OpenThread/examples/onReceive/ci.json @@ -4,6 +4,7 @@ "esp32c2": false, "esp32c3": false, "esp32s2": false, - "esp32s3": false + "esp32s3": false, + "esp32p4": false } } diff --git a/libraries/PPP/examples/PPP_WIFI_BRIDGE/ci.json b/libraries/PPP/examples/PPP_WIFI_BRIDGE/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/PPP/examples/PPP_WIFI_BRIDGE/ci.json +++ b/libraries/PPP/examples/PPP_WIFI_BRIDGE/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/RainMaker/examples/RMakerCustom/ci.json b/libraries/RainMaker/examples/RMakerCustom/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/RainMaker/examples/RMakerCustom/ci.json +++ b/libraries/RainMaker/examples/RMakerCustom/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/RainMaker/examples/RMakerCustomAirCooler/ci.json b/libraries/RainMaker/examples/RMakerCustomAirCooler/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/RainMaker/examples/RMakerCustomAirCooler/ci.json +++ b/libraries/RainMaker/examples/RMakerCustomAirCooler/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/RainMaker/examples/RMakerSonoffDualR3/ci.json b/libraries/RainMaker/examples/RMakerSonoffDualR3/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/RainMaker/examples/RMakerSonoffDualR3/ci.json +++ b/libraries/RainMaker/examples/RMakerSonoffDualR3/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/RainMaker/examples/RMakerSwitch/ci.json b/libraries/RainMaker/examples/RMakerSwitch/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/RainMaker/examples/RMakerSwitch/ci.json +++ b/libraries/RainMaker/examples/RMakerSwitch/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/SD/examples/SD_time/ci.json b/libraries/SD/examples/SD_time/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/SD/examples/SD_time/ci.json +++ b/libraries/SD/examples/SD_time/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/SD_MMC/examples/SD2USBMSC/ci.json b/libraries/SD_MMC/examples/SD2USBMSC/ci.json index 97ae5ee5616..e2a8e674362 100644 --- a/libraries/SD_MMC/examples/SD2USBMSC/ci.json +++ b/libraries/SD_MMC/examples/SD2USBMSC/ci.json @@ -4,6 +4,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/SD_MMC/examples/SDMMC_Test/ci.json b/libraries/SD_MMC/examples/SDMMC_Test/ci.json index 35b6e255471..da76969c857 100644 --- a/libraries/SD_MMC/examples/SDMMC_Test/ci.json +++ b/libraries/SD_MMC/examples/SDMMC_Test/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/SD_MMC/examples/SDMMC_time/ci.json b/libraries/SD_MMC/examples/SDMMC_time/ci.json index 35b6e255471..da76969c857 100644 --- a/libraries/SD_MMC/examples/SDMMC_time/ci.json +++ b/libraries/SD_MMC/examples/SDMMC_time/ci.json @@ -3,6 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/SPIFFS/examples/SPIFFS_time/ci.json b/libraries/SPIFFS/examples/SPIFFS_time/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/SPIFFS/examples/SPIFFS_time/ci.json +++ b/libraries/SPIFFS/examples/SPIFFS_time/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/SimpleBLE/examples/SimpleBleDevice/ci.json b/libraries/SimpleBLE/examples/SimpleBleDevice/ci.json index a571a89a877..e438a35ce16 100644 --- a/libraries/SimpleBLE/examples/SimpleBleDevice/ci.json +++ b/libraries/SimpleBLE/examples/SimpleBleDevice/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32c3": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/Update/examples/AWS_S3_OTA_Update/ci.json b/libraries/Update/examples/AWS_S3_OTA_Update/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/Update/examples/AWS_S3_OTA_Update/ci.json +++ b/libraries/Update/examples/AWS_S3_OTA_Update/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/Update/examples/HTTPS_OTA_Update/ci.json b/libraries/Update/examples/HTTPS_OTA_Update/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/Update/examples/HTTPS_OTA_Update/ci.json +++ b/libraries/Update/examples/HTTPS_OTA_Update/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/Update/examples/HTTP_Client_AES_OTA_Update/ci.json b/libraries/Update/examples/HTTP_Client_AES_OTA_Update/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/Update/examples/HTTP_Client_AES_OTA_Update/ci.json +++ b/libraries/Update/examples/HTTP_Client_AES_OTA_Update/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/Update/examples/HTTP_Server_AES_OTA_Update/ci.json b/libraries/Update/examples/HTTP_Server_AES_OTA_Update/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/Update/examples/HTTP_Server_AES_OTA_Update/ci.json +++ b/libraries/Update/examples/HTTP_Server_AES_OTA_Update/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/Update/examples/OTAWebUpdater/ci.json b/libraries/Update/examples/OTAWebUpdater/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/Update/examples/OTAWebUpdater/ci.json +++ b/libraries/Update/examples/OTAWebUpdater/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/AdvancedWebServer/ci.json b/libraries/WebServer/examples/AdvancedWebServer/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/AdvancedWebServer/ci.json +++ b/libraries/WebServer/examples/AdvancedWebServer/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/FSBrowser/ci.json b/libraries/WebServer/examples/FSBrowser/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/FSBrowser/ci.json +++ b/libraries/WebServer/examples/FSBrowser/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/Filters/ci.json b/libraries/WebServer/examples/Filters/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/Filters/ci.json +++ b/libraries/WebServer/examples/Filters/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/HelloServer/ci.json b/libraries/WebServer/examples/HelloServer/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/HelloServer/ci.json +++ b/libraries/WebServer/examples/HelloServer/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/HttpAdvancedAuth/ci.json b/libraries/WebServer/examples/HttpAdvancedAuth/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/HttpAdvancedAuth/ci.json +++ b/libraries/WebServer/examples/HttpAdvancedAuth/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/HttpAuthCallback/ci.json b/libraries/WebServer/examples/HttpAuthCallback/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/HttpAuthCallback/ci.json +++ b/libraries/WebServer/examples/HttpAuthCallback/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/HttpAuthCallbackInline/ci.json b/libraries/WebServer/examples/HttpAuthCallbackInline/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/HttpAuthCallbackInline/ci.json +++ b/libraries/WebServer/examples/HttpAuthCallbackInline/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/HttpBasicAuth/ci.json b/libraries/WebServer/examples/HttpBasicAuth/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/HttpBasicAuth/ci.json +++ b/libraries/WebServer/examples/HttpBasicAuth/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/HttpBasicAuthSHA1/ci.json b/libraries/WebServer/examples/HttpBasicAuthSHA1/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/HttpBasicAuthSHA1/ci.json +++ b/libraries/WebServer/examples/HttpBasicAuthSHA1/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/HttpBasicAuthSHA1orBearerToken/ci.json b/libraries/WebServer/examples/HttpBasicAuthSHA1orBearerToken/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/HttpBasicAuthSHA1orBearerToken/ci.json +++ b/libraries/WebServer/examples/HttpBasicAuthSHA1orBearerToken/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/MultiHomedServers/ci.json b/libraries/WebServer/examples/MultiHomedServers/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/MultiHomedServers/ci.json +++ b/libraries/WebServer/examples/MultiHomedServers/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/PathArgServer/ci.json b/libraries/WebServer/examples/PathArgServer/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/PathArgServer/ci.json +++ b/libraries/WebServer/examples/PathArgServer/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/SDWebServer/ci.json b/libraries/WebServer/examples/SDWebServer/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/SDWebServer/ci.json +++ b/libraries/WebServer/examples/SDWebServer/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/SimpleAuthentification/ci.json b/libraries/WebServer/examples/SimpleAuthentification/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/SimpleAuthentification/ci.json +++ b/libraries/WebServer/examples/SimpleAuthentification/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/UploadHugeFile/ci.json b/libraries/WebServer/examples/UploadHugeFile/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/UploadHugeFile/ci.json +++ b/libraries/WebServer/examples/UploadHugeFile/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/WebServer/ci.json b/libraries/WebServer/examples/WebServer/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/WebServer/ci.json +++ b/libraries/WebServer/examples/WebServer/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WebServer/examples/WebUpdate/ci.json b/libraries/WebServer/examples/WebUpdate/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WebServer/examples/WebUpdate/ci.json +++ b/libraries/WebServer/examples/WebUpdate/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/FTM/FTM_Initiator/ci.json b/libraries/WiFi/examples/FTM/FTM_Initiator/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/FTM/FTM_Initiator/ci.json +++ b/libraries/WiFi/examples/FTM/FTM_Initiator/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/FTM/FTM_Responder/ci.json b/libraries/WiFi/examples/FTM/FTM_Responder/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/FTM/FTM_Responder/ci.json +++ b/libraries/WiFi/examples/FTM/FTM_Responder/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/SimpleWiFiServer/ci.json b/libraries/WiFi/examples/SimpleWiFiServer/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/SimpleWiFiServer/ci.json +++ b/libraries/WiFi/examples/SimpleWiFiServer/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WPS/ci.json b/libraries/WiFi/examples/WPS/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WPS/ci.json +++ b/libraries/WiFi/examples/WPS/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiAccessPoint/ci.json b/libraries/WiFi/examples/WiFiAccessPoint/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiAccessPoint/ci.json +++ b/libraries/WiFi/examples/WiFiAccessPoint/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json b/libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json index 521ae8f5ff1..e938586f086 100644 --- a/libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json +++ b/libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json @@ -1,6 +1,7 @@ { "targets": { "esp32h2": false, - "esp32s2": false + "esp32s2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiClient/ci.json b/libraries/WiFi/examples/WiFiClient/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiClient/ci.json +++ b/libraries/WiFi/examples/WiFiClient/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiClientBasic/ci.json b/libraries/WiFi/examples/WiFiClientBasic/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiClientBasic/ci.json +++ b/libraries/WiFi/examples/WiFiClientBasic/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiClientConnect/ci.json b/libraries/WiFi/examples/WiFiClientConnect/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiClientConnect/ci.json +++ b/libraries/WiFi/examples/WiFiClientConnect/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiClientEnterprise/ci.json b/libraries/WiFi/examples/WiFiClientEnterprise/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiClientEnterprise/ci.json +++ b/libraries/WiFi/examples/WiFiClientEnterprise/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiClientEvents/ci.json b/libraries/WiFi/examples/WiFiClientEvents/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiClientEvents/ci.json +++ b/libraries/WiFi/examples/WiFiClientEvents/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiClientStaticIP/ci.json b/libraries/WiFi/examples/WiFiClientStaticIP/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiClientStaticIP/ci.json +++ b/libraries/WiFi/examples/WiFiClientStaticIP/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiExtender/ci.json b/libraries/WiFi/examples/WiFiExtender/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiExtender/ci.json +++ b/libraries/WiFi/examples/WiFiExtender/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiIPv6/ci.json b/libraries/WiFi/examples/WiFiIPv6/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiIPv6/ci.json +++ b/libraries/WiFi/examples/WiFiIPv6/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiMulti/ci.json b/libraries/WiFi/examples/WiFiMulti/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiMulti/ci.json +++ b/libraries/WiFi/examples/WiFiMulti/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiMultiAdvanced/ci.json b/libraries/WiFi/examples/WiFiMultiAdvanced/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiMultiAdvanced/ci.json +++ b/libraries/WiFi/examples/WiFiMultiAdvanced/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiScan/ci.json b/libraries/WiFi/examples/WiFiScan/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiScan/ci.json +++ b/libraries/WiFi/examples/WiFiScan/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiScanAsync/ci.json b/libraries/WiFi/examples/WiFiScanAsync/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiScanAsync/ci.json +++ b/libraries/WiFi/examples/WiFiScanAsync/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiScanDualAntenna/ci.json b/libraries/WiFi/examples/WiFiScanDualAntenna/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiScanDualAntenna/ci.json +++ b/libraries/WiFi/examples/WiFiScanDualAntenna/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiScanTime/ci.json b/libraries/WiFi/examples/WiFiScanTime/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiScanTime/ci.json +++ b/libraries/WiFi/examples/WiFiScanTime/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiSmartConfig/ci.json b/libraries/WiFi/examples/WiFiSmartConfig/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiSmartConfig/ci.json +++ b/libraries/WiFi/examples/WiFiSmartConfig/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiTelnetToSerial/ci.json b/libraries/WiFi/examples/WiFiTelnetToSerial/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiTelnetToSerial/ci.json +++ b/libraries/WiFi/examples/WiFiTelnetToSerial/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFi/examples/WiFiUDPClient/ci.json b/libraries/WiFi/examples/WiFiUDPClient/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFi/examples/WiFiUDPClient/ci.json +++ b/libraries/WiFi/examples/WiFiUDPClient/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } diff --git a/libraries/WiFiProv/examples/WiFiProv/ci.json b/libraries/WiFiProv/examples/WiFiProv/ci.json index d8b3664bc65..ed63a39b4c0 100644 --- a/libraries/WiFiProv/examples/WiFiProv/ci.json +++ b/libraries/WiFiProv/examples/WiFiProv/ci.json @@ -1,5 +1,6 @@ { "targets": { - "esp32h2": false + "esp32h2": false, + "esp32p4": false } } From 24efbddc24763045796d65df99819f0092cc017a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 15:37:12 +0000 Subject: [PATCH 23/28] ci(pre-commit): Apply automatic fixes --- cores/esp32/Esp.cpp | 2 +- cores/esp32/esp32-hal-cpu.c | 2 +- cores/esp32/esp32-hal-i2c-slave.c | 770 +++++++++--------- cores/esp32/esp32-hal-ledc.c | 2 +- cores/esp32/esp32-hal-spi.c | 31 +- cores/esp32/esp32-hal-touch.c | 16 +- cores/esp32/esp32-hal-uart.c | 24 +- .../BLE/examples/BLE5_extended_scan/ci.json | 4 +- .../examples/BLE5_multi_advertising/ci.json | 5 +- .../BLE5_periodic_advertising/ci.json | 5 +- .../BLE/examples/BLE5_periodic_sync/ci.json | 7 +- libraries/BLE/examples/Beacon_Scanner/ci.json | 7 +- libraries/BLE/examples/Client/ci.json | 5 +- libraries/BLE/examples/Notify/ci.json | 5 +- 14 files changed, 444 insertions(+), 441 deletions(-) diff --git a/cores/esp32/Esp.cpp b/cores/esp32/Esp.cpp index 75414f58999..6a6ed11e463 100644 --- a/cores/esp32/Esp.cpp +++ b/cores/esp32/Esp.cpp @@ -366,7 +366,7 @@ FlashMode_t EspClass::getFlashChipMode(void) { } return (FM_DOUT); } -#endif // if !defined(CONFIG_IDF_TARGET_ESP32P4) +#endif // if !defined(CONFIG_IDF_TARGET_ESP32P4) uint32_t EspClass::magicFlashChipSize(uint8_t byte) { /* diff --git a/cores/esp32/esp32-hal-cpu.c b/cores/esp32/esp32-hal-cpu.c index 9f87cf73ae7..f0a30b50afc 100644 --- a/cores/esp32/esp32-hal-cpu.c +++ b/cores/esp32/esp32-hal-cpu.c @@ -268,7 +268,7 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz) { #ifdef CONFIG_IDF_TARGET_ESP32P4 : "17.5M"), #else - : "8M")), + : "8M")), #endif conf.source_freq_mhz, conf.div, conf.freq_mhz, apb ); diff --git a/cores/esp32/esp32-hal-i2c-slave.c b/cores/esp32/esp32-hal-i2c-slave.c index 2f4531b2512..14da815455b 100644 --- a/cores/esp32/esp32-hal-i2c-slave.c +++ b/cores/esp32/esp32-hal-i2c-slave.c @@ -74,7 +74,7 @@ #define I2C_SCL_IDX(p) I2CEXT0_SCL_OUT_IDX #define I2C_SDA_IDX(p) I2CEXT0_SDA_OUT_IDX #endif -#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 +#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 #if CONFIG_IDF_TARGET_ESP32 #define I2C_TXFIFO_WM_INT_ENA I2C_TXFIFO_EMPTY_INT_ENA @@ -368,148 +368,148 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t } else { ret = esp_intr_alloc(ETS_I2C_EXT1_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); #endif -#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) +#endif // !defined(CONFIG_IDF_TARGET_ESP32P4) #ifdef CONFIG_IDF_TARGET_ESP32P4 - if (i2c->num == 0) { - ret = esp_intr_alloc(ETS_I2C0_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); + if (i2c->num == 0) { + ret = esp_intr_alloc(ETS_I2C0_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); #if SOC_I2C_NUM > 1 - } else { - ret = esp_intr_alloc(ETS_I2C1_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); + } else { + ret = esp_intr_alloc(ETS_I2C1_INTR_SOURCE, flags, &i2c_slave_isr_handler, i2c, &i2c->intr_handle); #endif -#endif // #ifdef CONFIG_IDF_TARGET_ESP32P4 - } +#endif // #ifdef CONFIG_IDF_TARGET_ESP32P4 + } - if (ret != ESP_OK) { - log_e("install interrupt handler Failed=%d", ret); - goto fail; + if (ret != ESP_OK) { + log_e("install interrupt handler Failed=%d", ret); + goto fail; + } } - } - i2c_ll_txfifo_rst(i2c->dev); - i2c_ll_rxfifo_rst(i2c->dev); - i2c_ll_slave_enable_rx_it(i2c->dev); - i2c_ll_set_stretch(i2c->dev, 0x3FF); - i2c_ll_update(i2c->dev); - if (!perimanSetPinBus(sda, ESP32_BUS_TYPE_I2C_SLAVE_SDA, (void *)(i2c->num + 1), i2c->num, -1) - || !perimanSetPinBus(scl, ESP32_BUS_TYPE_I2C_SLAVE_SCL, (void *)(i2c->num + 1), i2c->num, -1)) { - i2cSlaveDetachBus((void *)(i2c->num + 1)); - ret = ESP_FAIL; - } - I2C_SLAVE_MUTEX_UNLOCK(); - return ret; + i2c_ll_txfifo_rst(i2c->dev); + i2c_ll_rxfifo_rst(i2c->dev); + i2c_ll_slave_enable_rx_it(i2c->dev); + i2c_ll_set_stretch(i2c->dev, 0x3FF); + i2c_ll_update(i2c->dev); + if (!perimanSetPinBus(sda, ESP32_BUS_TYPE_I2C_SLAVE_SDA, (void *)(i2c->num + 1), i2c->num, -1) + || !perimanSetPinBus(scl, ESP32_BUS_TYPE_I2C_SLAVE_SCL, (void *)(i2c->num + 1), i2c->num, -1)) { + i2cSlaveDetachBus((void *)(i2c->num + 1)); + ret = ESP_FAIL; + } + I2C_SLAVE_MUTEX_UNLOCK(); + return ret; fail: - i2c_slave_free_resources(i2c); - I2C_SLAVE_MUTEX_UNLOCK(); - return ret; -} - -esp_err_t i2cSlaveDeinit(uint8_t num) { - if (num >= SOC_HP_I2C_NUM) { - log_e("Invalid port num: %u", num); - return ESP_ERR_INVALID_ARG; + i2c_slave_free_resources(i2c); + I2C_SLAVE_MUTEX_UNLOCK(); + return ret; } - i2c_slave_struct_t *i2c = &_i2c_bus_array[num]; + esp_err_t i2cSlaveDeinit(uint8_t num) { + if (num >= SOC_HP_I2C_NUM) { + log_e("Invalid port num: %u", num); + return ESP_ERR_INVALID_ARG; + } + + i2c_slave_struct_t *i2c = &_i2c_bus_array[num]; #if !CONFIG_DISABLE_HAL_LOCKS - if (!i2c->lock) { - log_e("Lock is not initialized! Did you call i2c_slave_init()?"); - return ESP_ERR_NO_MEM; - } + if (!i2c->lock) { + log_e("Lock is not initialized! Did you call i2c_slave_init()?"); + return ESP_ERR_NO_MEM; + } #endif - I2C_SLAVE_MUTEX_LOCK(); - int scl = i2c->scl; - int sda = i2c->sda; - i2c_slave_free_resources(i2c); - perimanClearPinBus(scl); - perimanClearPinBus(sda); - I2C_SLAVE_MUTEX_UNLOCK(); - return ESP_OK; -} - -size_t i2cSlaveWrite(uint8_t num, const uint8_t *buf, uint32_t len, uint32_t timeout_ms) { - if (num >= SOC_HP_I2C_NUM) { - log_e("Invalid port num: %u", num); - return 0; - } - uint32_t to_queue = 0, to_fifo = 0; - i2c_slave_struct_t *i2c = &_i2c_bus_array[num]; + I2C_SLAVE_MUTEX_LOCK(); + int scl = i2c->scl; + int sda = i2c->sda; + i2c_slave_free_resources(i2c); + perimanClearPinBus(scl); + perimanClearPinBus(sda); + I2C_SLAVE_MUTEX_UNLOCK(); + return ESP_OK; + } + + size_t i2cSlaveWrite(uint8_t num, const uint8_t *buf, uint32_t len, uint32_t timeout_ms) { + if (num >= SOC_HP_I2C_NUM) { + log_e("Invalid port num: %u", num); + return 0; + } + uint32_t to_queue = 0, to_fifo = 0; + i2c_slave_struct_t *i2c = &_i2c_bus_array[num]; #if !CONFIG_DISABLE_HAL_LOCKS - if (!i2c->lock) { - log_e("Lock is not initialized! Did you call i2c_slave_init()?"); - return ESP_ERR_NO_MEM; - } + if (!i2c->lock) { + log_e("Lock is not initialized! Did you call i2c_slave_init()?"); + return ESP_ERR_NO_MEM; + } #endif - if (!i2c->tx_queue) { - return 0; - } - I2C_SLAVE_MUTEX_LOCK(); + if (!i2c->tx_queue) { + return 0; + } + I2C_SLAVE_MUTEX_LOCK(); #if CONFIG_IDF_TARGET_ESP32 - i2c_ll_slave_disable_tx_it(i2c->dev); - uint32_t txfifo_len = 0; - i2c_ll_get_txfifo_len(i2c->dev, &txfifo_len); - if (txfifo_len < SOC_I2C_FIFO_LEN) { - i2c_ll_txfifo_rst(i2c->dev); - } + i2c_ll_slave_disable_tx_it(i2c->dev); + uint32_t txfifo_len = 0; + i2c_ll_get_txfifo_len(i2c->dev, &txfifo_len); + if (txfifo_len < SOC_I2C_FIFO_LEN) { + i2c_ll_txfifo_rst(i2c->dev); + } #endif - i2c_ll_get_txfifo_len(i2c->dev, &to_fifo); - if (to_fifo) { - if (len < to_fifo) { - to_fifo = len; - } - i2c_ll_write_txfifo(i2c->dev, (uint8_t *)buf, to_fifo); - buf += to_fifo; - len -= to_fifo; - //reset tx_queue - xQueueReset(i2c->tx_queue); - //write the rest of the bytes to the queue - if (len) { - to_queue = uxQueueSpacesAvailable(i2c->tx_queue); - if (len < to_queue) { - to_queue = len; + i2c_ll_get_txfifo_len(i2c->dev, &to_fifo); + if (to_fifo) { + if (len < to_fifo) { + to_fifo = len; } - for (size_t i = 0; i < to_queue; i++) { - if (xQueueSend(i2c->tx_queue, &buf[i], timeout_ms / portTICK_PERIOD_MS) != pdTRUE) { - xQueueReset(i2c->tx_queue); - to_queue = 0; - break; + i2c_ll_write_txfifo(i2c->dev, (uint8_t *)buf, to_fifo); + buf += to_fifo; + len -= to_fifo; + //reset tx_queue + xQueueReset(i2c->tx_queue); + //write the rest of the bytes to the queue + if (len) { + to_queue = uxQueueSpacesAvailable(i2c->tx_queue); + if (len < to_queue) { + to_queue = len; + } + for (size_t i = 0; i < to_queue; i++) { + if (xQueueSend(i2c->tx_queue, &buf[i], timeout_ms / portTICK_PERIOD_MS) != pdTRUE) { + xQueueReset(i2c->tx_queue); + to_queue = 0; + break; + } + } + //no need to enable TX_EMPTY if tx_queue is empty + if (to_queue) { + i2c_ll_slave_enable_tx_it(i2c->dev); } - } - //no need to enable TX_EMPTY if tx_queue is empty - if (to_queue) { - i2c_ll_slave_enable_tx_it(i2c->dev); } } + I2C_SLAVE_MUTEX_UNLOCK(); + return to_queue + to_fifo; } - I2C_SLAVE_MUTEX_UNLOCK(); - return to_queue + to_fifo; -} -//===================================================================================================================== -//-------------------------------------- Private Functions ------------------------------------------------------------ -//===================================================================================================================== + //===================================================================================================================== + //-------------------------------------- Private Functions ------------------------------------------------------------ + //===================================================================================================================== -static void i2c_slave_free_resources(i2c_slave_struct_t *i2c) { - i2c_slave_detach_gpio(i2c); - i2c_ll_set_slave_addr(i2c->dev, 0, false); - i2c_ll_disable_intr_mask(i2c->dev, I2C_LL_INTR_MASK); - i2c_ll_clear_intr_mask(i2c->dev, I2C_LL_INTR_MASK); + static void i2c_slave_free_resources(i2c_slave_struct_t * i2c) { + i2c_slave_detach_gpio(i2c); + i2c_ll_set_slave_addr(i2c->dev, 0, false); + i2c_ll_disable_intr_mask(i2c->dev, I2C_LL_INTR_MASK); + i2c_ll_clear_intr_mask(i2c->dev, I2C_LL_INTR_MASK); - if (i2c->intr_handle) { - esp_intr_free(i2c->intr_handle); - i2c->intr_handle = NULL; - } + if (i2c->intr_handle) { + esp_intr_free(i2c->intr_handle); + i2c->intr_handle = NULL; + } - if (i2c->task_handle) { - vTaskDelete(i2c->task_handle); - i2c->task_handle = NULL; - } + if (i2c->task_handle) { + vTaskDelete(i2c->task_handle); + i2c->task_handle = NULL; + } #if I2C_SLAVE_USE_RX_QUEUE - if (i2c->rx_queue) { - vQueueDelete(i2c->rx_queue); - i2c->rx_queue = NULL; - } + if (i2c->rx_queue) { + vQueueDelete(i2c->rx_queue); + i2c->rx_queue = NULL; + } #else if (i2c->rx_ring_buf) { vRingbufferDelete(i2c->rx_ring_buf); @@ -517,202 +517,202 @@ static void i2c_slave_free_resources(i2c_slave_struct_t *i2c) { } #endif - if (i2c->tx_queue) { - vQueueDelete(i2c->tx_queue); - i2c->tx_queue = NULL; - } - - if (i2c->event_queue) { - vQueueDelete(i2c->event_queue); - i2c->event_queue = NULL; - } + if (i2c->tx_queue) { + vQueueDelete(i2c->tx_queue); + i2c->tx_queue = NULL; + } - i2c->rx_data_count = 0; -} + if (i2c->event_queue) { + vQueueDelete(i2c->event_queue); + i2c->event_queue = NULL; + } -static bool i2c_slave_set_frequency(i2c_slave_struct_t *i2c, uint32_t clk_speed) { - if (i2c == NULL) { - log_e("no control buffer"); - return false; - } - if (clk_speed > 1100000UL) { - clk_speed = 1100000UL; + i2c->rx_data_count = 0; } - // Adjust Fifo thresholds based on frequency - uint32_t a = (clk_speed / 50000L) + 2; - log_d("Fifo thresholds: rx_fifo_full = %d, tx_fifo_empty = %d", SOC_I2C_FIFO_LEN - a, a); + static bool i2c_slave_set_frequency(i2c_slave_struct_t * i2c, uint32_t clk_speed) { + if (i2c == NULL) { + log_e("no control buffer"); + return false; + } + if (clk_speed > 1100000UL) { + clk_speed = 1100000UL; + } + + // Adjust Fifo thresholds based on frequency + uint32_t a = (clk_speed / 50000L) + 2; + log_d("Fifo thresholds: rx_fifo_full = %d, tx_fifo_empty = %d", SOC_I2C_FIFO_LEN - a, a); - i2c_hal_clk_config_t clk_cal; + i2c_hal_clk_config_t clk_cal; #if SOC_I2C_SUPPORT_APB - i2c_ll_master_cal_bus_clk(APB_CLK_FREQ, clk_speed, &clk_cal); - I2C_CLOCK_SRC_ATOMIC() { - i2c_ll_set_source_clk(i2c->dev, SOC_MOD_CLK_APB); /*!< I2C source clock from APB, 80M*/ - } + i2c_ll_master_cal_bus_clk(APB_CLK_FREQ, clk_speed, &clk_cal); + I2C_CLOCK_SRC_ATOMIC() { + i2c_ll_set_source_clk(i2c->dev, SOC_MOD_CLK_APB); /*!< I2C source clock from APB, 80M*/ + } #elif SOC_I2C_SUPPORT_XTAL i2c_ll_master_cal_bus_clk(XTAL_CLK_FREQ, clk_speed, &clk_cal); I2C_CLOCK_SRC_ATOMIC() { i2c_ll_set_source_clk(i2c->dev, SOC_MOD_CLK_XTAL); /*!< I2C source clock from XTAL, 40M */ } #endif - i2c_ll_set_txfifo_empty_thr(i2c->dev, a); - i2c_ll_set_rxfifo_full_thr(i2c->dev, SOC_I2C_FIFO_LEN - a); - i2c_ll_master_set_bus_timing(i2c->dev, &clk_cal); - i2c_ll_master_set_filter(i2c->dev, 3); - return true; -} + i2c_ll_set_txfifo_empty_thr(i2c->dev, a); + i2c_ll_set_rxfifo_full_thr(i2c->dev, SOC_I2C_FIFO_LEN - a); + i2c_ll_master_set_bus_timing(i2c->dev, &clk_cal); + i2c_ll_master_set_filter(i2c->dev, 3); + return true; + } -static void i2c_slave_delay_us(uint64_t us) { - uint64_t m = esp_timer_get_time(); - if (us) { - uint64_t e = (m + us); - if (m > e) { //overflow - while ((uint64_t)esp_timer_get_time() > e); + static void i2c_slave_delay_us(uint64_t us) { + uint64_t m = esp_timer_get_time(); + if (us) { + uint64_t e = (m + us); + if (m > e) { //overflow + while ((uint64_t)esp_timer_get_time() > e); + } + while ((uint64_t)esp_timer_get_time() < e); } - while ((uint64_t)esp_timer_get_time() < e); } -} -static void i2c_slave_gpio_mode(int8_t pin, gpio_mode_t mode) { - gpio_config_t conf = { - .pin_bit_mask = 1LL << pin, .mode = mode, .pull_up_en = GPIO_PULLUP_ENABLE, .pull_down_en = GPIO_PULLDOWN_DISABLE, .intr_type = GPIO_INTR_DISABLE - }; - gpio_config(&conf); -} + static void i2c_slave_gpio_mode(int8_t pin, gpio_mode_t mode) { + gpio_config_t conf = { + .pin_bit_mask = 1LL << pin, .mode = mode, .pull_up_en = GPIO_PULLUP_ENABLE, .pull_down_en = GPIO_PULLDOWN_DISABLE, .intr_type = GPIO_INTR_DISABLE + }; + gpio_config(&conf); + } -static bool i2c_slave_check_line_state(int8_t sda, int8_t scl) { - if (sda < 0 || scl < 0) { - return false; //return false since there is nothing to do - } - // if the bus is not 'clear' try the cycling SCL until SDA goes High or 9 cycles - gpio_set_level(sda, 1); - gpio_set_level(scl, 1); - i2c_slave_gpio_mode(sda, GPIO_MODE_INPUT | GPIO_MODE_DEF_OD); - i2c_slave_gpio_mode(scl, GPIO_MODE_INPUT | GPIO_MODE_DEF_OD); - gpio_set_level(scl, 1); - - if (!gpio_get_level(sda) || !gpio_get_level(scl)) { // bus in busy state - log_w("invalid state sda(%d)=%d, scl(%d)=%d", sda, gpio_get_level(sda), scl, gpio_get_level(scl)); - for (uint8_t a = 0; a < 9; a++) { - i2c_slave_delay_us(5); - if (gpio_get_level(sda) && gpio_get_level(scl)) { // bus recovered - log_w("Recovered after %d Cycles", a); - gpio_set_level(sda, 0); // start + static bool i2c_slave_check_line_state(int8_t sda, int8_t scl) { + if (sda < 0 || scl < 0) { + return false; //return false since there is nothing to do + } + // if the bus is not 'clear' try the cycling SCL until SDA goes High or 9 cycles + gpio_set_level(sda, 1); + gpio_set_level(scl, 1); + i2c_slave_gpio_mode(sda, GPIO_MODE_INPUT | GPIO_MODE_DEF_OD); + i2c_slave_gpio_mode(scl, GPIO_MODE_INPUT | GPIO_MODE_DEF_OD); + gpio_set_level(scl, 1); + + if (!gpio_get_level(sda) || !gpio_get_level(scl)) { // bus in busy state + log_w("invalid state sda(%d)=%d, scl(%d)=%d", sda, gpio_get_level(sda), scl, gpio_get_level(scl)); + for (uint8_t a = 0; a < 9; a++) { i2c_slave_delay_us(5); - for (uint8_t a = 0; a < 9; a++) { - gpio_set_level(scl, 1); + if (gpio_get_level(sda) && gpio_get_level(scl)) { // bus recovered + log_w("Recovered after %d Cycles", a); + gpio_set_level(sda, 0); // start i2c_slave_delay_us(5); - gpio_set_level(scl, 0); + for (uint8_t a = 0; a < 9; a++) { + gpio_set_level(scl, 1); + i2c_slave_delay_us(5); + gpio_set_level(scl, 0); + i2c_slave_delay_us(5); + } + gpio_set_level(scl, 1); i2c_slave_delay_us(5); + gpio_set_level(sda, 1); // stop + break; } - gpio_set_level(scl, 1); + gpio_set_level(scl, 0); i2c_slave_delay_us(5); - gpio_set_level(sda, 1); // stop - break; + gpio_set_level(scl, 1); } - gpio_set_level(scl, 0); - i2c_slave_delay_us(5); - gpio_set_level(scl, 1); } - } - if (!gpio_get_level(sda) || !gpio_get_level(scl)) { // bus in busy state - log_e("Bus Invalid State, Can't init sda=%d, scl=%d", gpio_get_level(sda), gpio_get_level(scl)); - return false; // bus is busy - } - return true; -} - -static bool i2c_slave_attach_gpio(i2c_slave_struct_t *i2c, int8_t sda, int8_t scl) { - if (i2c == NULL) { - log_e("no control block"); - return false; + if (!gpio_get_level(sda) || !gpio_get_level(scl)) { // bus in busy state + log_e("Bus Invalid State, Can't init sda=%d, scl=%d", gpio_get_level(sda), gpio_get_level(scl)); + return false; // bus is busy + } + return true; } - if ((sda < 0) || (scl < 0)) { - log_e("bad pins sda=%d, scl=%d", sda, scl); - return false; - } + static bool i2c_slave_attach_gpio(i2c_slave_struct_t * i2c, int8_t sda, int8_t scl) { + if (i2c == NULL) { + log_e("no control block"); + return false; + } - i2c->scl = scl; - gpio_set_level(scl, 1); - i2c_slave_gpio_mode(scl, GPIO_MODE_INPUT_OUTPUT_OD); - gpio_matrix_out(scl, I2C_SCL_IDX(i2c->num), false, false); - gpio_matrix_in(scl, I2C_SCL_IDX(i2c->num), false); + if ((sda < 0) || (scl < 0)) { + log_e("bad pins sda=%d, scl=%d", sda, scl); + return false; + } - i2c->sda = sda; - gpio_set_level(sda, 1); - i2c_slave_gpio_mode(sda, GPIO_MODE_INPUT_OUTPUT_OD); - gpio_matrix_out(sda, I2C_SDA_IDX(i2c->num), false, false); - gpio_matrix_in(sda, I2C_SDA_IDX(i2c->num), false); + i2c->scl = scl; + gpio_set_level(scl, 1); + i2c_slave_gpio_mode(scl, GPIO_MODE_INPUT_OUTPUT_OD); + gpio_matrix_out(scl, I2C_SCL_IDX(i2c->num), false, false); + gpio_matrix_in(scl, I2C_SCL_IDX(i2c->num), false); - return true; -} + i2c->sda = sda; + gpio_set_level(sda, 1); + i2c_slave_gpio_mode(sda, GPIO_MODE_INPUT_OUTPUT_OD); + gpio_matrix_out(sda, I2C_SDA_IDX(i2c->num), false, false); + gpio_matrix_in(sda, I2C_SDA_IDX(i2c->num), false); -static bool i2c_slave_detach_gpio(i2c_slave_struct_t *i2c) { - if (i2c == NULL) { - log_e("no control Block"); - return false; - } - if (i2c->scl >= 0) { - gpio_matrix_out(i2c->scl, 0x100, false, false); - gpio_matrix_in(0x30, I2C_SCL_IDX(i2c->num), false); - i2c_slave_gpio_mode(i2c->scl, GPIO_MODE_INPUT); - i2c->scl = -1; // un attached - } - if (i2c->sda >= 0) { - gpio_matrix_out(i2c->sda, 0x100, false, false); - gpio_matrix_in(0x30, I2C_SDA_IDX(i2c->num), false); - i2c_slave_gpio_mode(i2c->sda, GPIO_MODE_INPUT); - i2c->sda = -1; // un attached + return true; } - return true; -} -static bool i2c_slave_send_event(i2c_slave_struct_t *i2c, i2c_slave_queue_event_t *event) { - bool pxHigherPriorityTaskWoken = false; - if (i2c->event_queue) { - if (xQueueSendFromISR(i2c->event_queue, event, (BaseType_t *const)&pxHigherPriorityTaskWoken) != pdTRUE) { - //log_e("event_queue_full"); + static bool i2c_slave_detach_gpio(i2c_slave_struct_t * i2c) { + if (i2c == NULL) { + log_e("no control Block"); + return false; } + if (i2c->scl >= 0) { + gpio_matrix_out(i2c->scl, 0x100, false, false); + gpio_matrix_in(0x30, I2C_SCL_IDX(i2c->num), false); + i2c_slave_gpio_mode(i2c->scl, GPIO_MODE_INPUT); + i2c->scl = -1; // un attached + } + if (i2c->sda >= 0) { + gpio_matrix_out(i2c->sda, 0x100, false, false); + gpio_matrix_in(0x30, I2C_SDA_IDX(i2c->num), false); + i2c_slave_gpio_mode(i2c->sda, GPIO_MODE_INPUT); + i2c->sda = -1; // un attached + } + return true; } - return pxHigherPriorityTaskWoken; -} -static bool i2c_slave_handle_tx_fifo_empty(i2c_slave_struct_t *i2c) { - bool pxHigherPriorityTaskWoken = false; - uint32_t d = 0, moveCnt = 0; - i2c_ll_get_txfifo_len(i2c->dev, &moveCnt); - while (moveCnt > 0) { // read tx queue until Fifo is full or queue is empty - if (xQueueReceiveFromISR(i2c->tx_queue, &d, (BaseType_t *const)&pxHigherPriorityTaskWoken) == pdTRUE) { - i2c_ll_write_txfifo(i2c->dev, (uint8_t *)&d, 1); - moveCnt--; - } else { - i2c_ll_slave_disable_tx_it(i2c->dev); - break; + static bool i2c_slave_send_event(i2c_slave_struct_t * i2c, i2c_slave_queue_event_t * event) { + bool pxHigherPriorityTaskWoken = false; + if (i2c->event_queue) { + if (xQueueSendFromISR(i2c->event_queue, event, (BaseType_t *const)&pxHigherPriorityTaskWoken) != pdTRUE) { + //log_e("event_queue_full"); + } } + return pxHigherPriorityTaskWoken; + } + + static bool i2c_slave_handle_tx_fifo_empty(i2c_slave_struct_t * i2c) { + bool pxHigherPriorityTaskWoken = false; + uint32_t d = 0, moveCnt = 0; + i2c_ll_get_txfifo_len(i2c->dev, &moveCnt); + while (moveCnt > 0) { // read tx queue until Fifo is full or queue is empty + if (xQueueReceiveFromISR(i2c->tx_queue, &d, (BaseType_t *const)&pxHigherPriorityTaskWoken) == pdTRUE) { + i2c_ll_write_txfifo(i2c->dev, (uint8_t *)&d, 1); + moveCnt--; + } else { + i2c_ll_slave_disable_tx_it(i2c->dev); + break; + } + } + return pxHigherPriorityTaskWoken; } - return pxHigherPriorityTaskWoken; -} -static bool i2c_slave_handle_rx_fifo_full(i2c_slave_struct_t *i2c, uint32_t len) { + static bool i2c_slave_handle_rx_fifo_full(i2c_slave_struct_t * i2c, uint32_t len) { #if I2C_SLAVE_USE_RX_QUEUE - uint32_t d = 0; + uint32_t d = 0; #else uint8_t data[SOC_I2C_FIFO_LEN]; #endif - bool pxHigherPriorityTaskWoken = false; + bool pxHigherPriorityTaskWoken = false; #if I2C_SLAVE_USE_RX_QUEUE - while (len > 0) { - i2c_ll_read_rxfifo(i2c->dev, (uint8_t *)&d, 1); - if (xQueueSendFromISR(i2c->rx_queue, &d, (BaseType_t *const)&pxHigherPriorityTaskWoken) != pdTRUE) { - log_e("rx_queue_full"); - } else { - i2c->rx_data_count++; - } - if (--len == 0) { - len = i2c_ll_get_rxfifo_cnt(i2c->dev); - } + while (len > 0) { + i2c_ll_read_rxfifo(i2c->dev, (uint8_t *)&d, 1); + if (xQueueSendFromISR(i2c->rx_queue, &d, (BaseType_t *const)&pxHigherPriorityTaskWoken) != pdTRUE) { + log_e("rx_queue_full"); + } else { + i2c->rx_data_count++; + } + if (--len == 0) { + len = i2c_ll_get_rxfifo_cnt(i2c->dev); + } #else if (len) { i2c_ll_read_rxfifo(i2c->dev, data, len); @@ -722,109 +722,109 @@ static bool i2c_slave_handle_rx_fifo_full(i2c_slave_struct_t *i2c, uint32_t len) i2c->rx_data_count += len; } #endif + } + return pxHigherPriorityTaskWoken; } - return pxHigherPriorityTaskWoken; -} -static void i2c_slave_isr_handler(void *arg) { - bool pxHigherPriorityTaskWoken = false; - i2c_slave_struct_t *i2c = (i2c_slave_struct_t *)arg; // recover data + static void i2c_slave_isr_handler(void *arg) { + bool pxHigherPriorityTaskWoken = false; + i2c_slave_struct_t *i2c = (i2c_slave_struct_t *)arg; // recover data - uint32_t activeInt = 0; - i2c_ll_get_intr_mask(i2c->dev, &activeInt); - i2c_ll_clear_intr_mask(i2c->dev, activeInt); - uint32_t rx_fifo_len = 0; - i2c_ll_get_rxfifo_cnt(i2c->dev, &rx_fifo_len); - bool slave_rw = i2c_ll_slave_rw(i2c->dev); + uint32_t activeInt = 0; + i2c_ll_get_intr_mask(i2c->dev, &activeInt); + i2c_ll_clear_intr_mask(i2c->dev, activeInt); + uint32_t rx_fifo_len = 0; + i2c_ll_get_rxfifo_cnt(i2c->dev, &rx_fifo_len); + bool slave_rw = i2c_ll_slave_rw(i2c->dev); - if (activeInt & I2C_RXFIFO_WM_INT_ENA) { // RX FiFo Full - pxHigherPriorityTaskWoken |= i2c_slave_handle_rx_fifo_full(i2c, rx_fifo_len); - i2c_ll_slave_enable_rx_it(i2c->dev); //is this necessary? - } - - if (activeInt & I2C_TRANS_COMPLETE_INT_ENA) { // STOP - if (rx_fifo_len) { //READ RX FIFO + if (activeInt & I2C_RXFIFO_WM_INT_ENA) { // RX FiFo Full pxHigherPriorityTaskWoken |= i2c_slave_handle_rx_fifo_full(i2c, rx_fifo_len); + i2c_ll_slave_enable_rx_it(i2c->dev); //is this necessary? } - if (i2c->rx_data_count) { //WRITE or RepeatedStart - //SEND RX Event - i2c_slave_queue_event_t event; - event.event = I2C_SLAVE_EVT_RX; - event.stop = !slave_rw; - event.param = i2c->rx_data_count; - pxHigherPriorityTaskWoken |= i2c_slave_send_event(i2c, &event); - //Zero RX count - i2c->rx_data_count = 0; - } - if (slave_rw) { // READ -#if CONFIG_IDF_TARGET_ESP32 - if (i2c->dev->status_reg.scl_main_state_last == 6) { - //SEND TX Event + + if (activeInt & I2C_TRANS_COMPLETE_INT_ENA) { // STOP + if (rx_fifo_len) { //READ RX FIFO + pxHigherPriorityTaskWoken |= i2c_slave_handle_rx_fifo_full(i2c, rx_fifo_len); + } + if (i2c->rx_data_count) { //WRITE or RepeatedStart + //SEND RX Event i2c_slave_queue_event_t event; - event.event = I2C_SLAVE_EVT_TX; + event.event = I2C_SLAVE_EVT_RX; + event.stop = !slave_rw; + event.param = i2c->rx_data_count; pxHigherPriorityTaskWoken |= i2c_slave_send_event(i2c, &event); + //Zero RX count + i2c->rx_data_count = 0; } + if (slave_rw) { // READ +#if CONFIG_IDF_TARGET_ESP32 + if (i2c->dev->status_reg.scl_main_state_last == 6) { + //SEND TX Event + i2c_slave_queue_event_t event; + event.event = I2C_SLAVE_EVT_TX; + pxHigherPriorityTaskWoken |= i2c_slave_send_event(i2c, &event); + } #else //reset TX data i2c_ll_txfifo_rst(i2c->dev); uint8_t d; while (xQueueReceiveFromISR(i2c->tx_queue, &d, (BaseType_t *const)&pxHigherPriorityTaskWoken) == pdTRUE); //flush partial write #endif + } } - } #ifndef CONFIG_IDF_TARGET_ESP32 - if (activeInt & I2C_SLAVE_STRETCH_INT_ENA) { // STRETCH - i2c_stretch_cause_t cause = i2c_ll_stretch_cause(i2c->dev); - if (cause == I2C_STRETCH_CAUSE_MASTER_READ) { - //on C3 RX data disappears with repeated start, so we need to get it here - if (rx_fifo_len) { + if (activeInt & I2C_SLAVE_STRETCH_INT_ENA) { // STRETCH + i2c_stretch_cause_t cause = i2c_ll_stretch_cause(i2c->dev); + if (cause == I2C_STRETCH_CAUSE_MASTER_READ) { + //on C3 RX data disappears with repeated start, so we need to get it here + if (rx_fifo_len) { + pxHigherPriorityTaskWoken |= i2c_slave_handle_rx_fifo_full(i2c, rx_fifo_len); + } + //SEND TX Event + i2c_slave_queue_event_t event; + event.event = I2C_SLAVE_EVT_TX; + pxHigherPriorityTaskWoken |= i2c_slave_send_event(i2c, &event); + //will clear after execution + } else if (cause == I2C_STRETCH_CAUSE_TX_FIFO_EMPTY) { + pxHigherPriorityTaskWoken |= i2c_slave_handle_tx_fifo_empty(i2c); + i2c_ll_stretch_clr(i2c->dev); + } else if (cause == I2C_STRETCH_CAUSE_RX_FIFO_FULL) { pxHigherPriorityTaskWoken |= i2c_slave_handle_rx_fifo_full(i2c, rx_fifo_len); + i2c_ll_stretch_clr(i2c->dev); } - //SEND TX Event - i2c_slave_queue_event_t event; - event.event = I2C_SLAVE_EVT_TX; - pxHigherPriorityTaskWoken |= i2c_slave_send_event(i2c, &event); - //will clear after execution - } else if (cause == I2C_STRETCH_CAUSE_TX_FIFO_EMPTY) { - pxHigherPriorityTaskWoken |= i2c_slave_handle_tx_fifo_empty(i2c); - i2c_ll_stretch_clr(i2c->dev); - } else if (cause == I2C_STRETCH_CAUSE_RX_FIFO_FULL) { - pxHigherPriorityTaskWoken |= i2c_slave_handle_rx_fifo_full(i2c, rx_fifo_len); - i2c_ll_stretch_clr(i2c->dev); } - } #endif - if (activeInt & I2C_TXFIFO_WM_INT_ENA) { // TX FiFo Empty - pxHigherPriorityTaskWoken |= i2c_slave_handle_tx_fifo_empty(i2c); - } + if (activeInt & I2C_TXFIFO_WM_INT_ENA) { // TX FiFo Empty + pxHigherPriorityTaskWoken |= i2c_slave_handle_tx_fifo_empty(i2c); + } - if (pxHigherPriorityTaskWoken) { - portYIELD_FROM_ISR(); + if (pxHigherPriorityTaskWoken) { + portYIELD_FROM_ISR(); + } } -} -static size_t i2c_slave_read_rx(i2c_slave_struct_t *i2c, uint8_t *data, size_t len) { - if (!len) { - return 0; - } -#if I2C_SLAVE_USE_RX_QUEUE - uint8_t d = 0; - BaseType_t res = pdTRUE; - for (size_t i = 0; i < len; i++) { - if (data) { - res = xQueueReceive(i2c->rx_queue, &data[i], 0); - } else { - res = xQueueReceive(i2c->rx_queue, &d, 0); + static size_t i2c_slave_read_rx(i2c_slave_struct_t * i2c, uint8_t * data, size_t len) { + if (!len) { + return 0; } - if (res != pdTRUE) { - log_e("Read Queue(%u) Failed", i); - len = i; - break; +#if I2C_SLAVE_USE_RX_QUEUE + uint8_t d = 0; + BaseType_t res = pdTRUE; + for (size_t i = 0; i < len; i++) { + if (data) { + res = xQueueReceive(i2c->rx_queue, &data[i], 0); + } else { + res = xQueueReceive(i2c->rx_queue, &d, 0); + } + if (res != pdTRUE) { + log_e("Read Queue(%u) Failed", i); + len = i; + break; + } } - } - return (data) ? len : 0; + return (data) ? len : 0; #else size_t dlen = 0, to_read = len, so_far = 0, available = 0; uint8_t *rx_data = NULL; @@ -851,55 +851,55 @@ static size_t i2c_slave_read_rx(i2c_slave_struct_t *i2c, uint8_t *data, size_t l } return (data) ? so_far : 0; #endif -} - -static void i2c_slave_task(void *pv_args) { - i2c_slave_struct_t *i2c = (i2c_slave_struct_t *)pv_args; - i2c_slave_queue_event_t event; - size_t len = 0; - bool stop = false; - uint8_t *data = NULL; - for (;;) { - if (xQueueReceive(i2c->event_queue, &event, portMAX_DELAY) == pdTRUE) { - // Write - if (event.event == I2C_SLAVE_EVT_RX) { - len = event.param; - stop = event.stop; - data = (len > 0) ? (uint8_t *)malloc(len) : NULL; - - if (len && data == NULL) { - log_e("Malloc (%u) Failed", len); - } - len = i2c_slave_read_rx(i2c, data, len); - if (i2c->receive_callback) { - i2c->receive_callback(i2c->num, data, len, stop, i2c->arg); - } - free(data); + } - // Read - } else if (event.event == I2C_SLAVE_EVT_TX) { - if (i2c->request_callback) { - i2c->request_callback(i2c->num, i2c->arg); + static void i2c_slave_task(void *pv_args) { + i2c_slave_struct_t *i2c = (i2c_slave_struct_t *)pv_args; + i2c_slave_queue_event_t event; + size_t len = 0; + bool stop = false; + uint8_t *data = NULL; + for (;;) { + if (xQueueReceive(i2c->event_queue, &event, portMAX_DELAY) == pdTRUE) { + // Write + if (event.event == I2C_SLAVE_EVT_RX) { + len = event.param; + stop = event.stop; + data = (len > 0) ? (uint8_t *)malloc(len) : NULL; + + if (len && data == NULL) { + log_e("Malloc (%u) Failed", len); + } + len = i2c_slave_read_rx(i2c, data, len); + if (i2c->receive_callback) { + i2c->receive_callback(i2c->num, data, len, stop, i2c->arg); + } + free(data); + + // Read + } else if (event.event == I2C_SLAVE_EVT_TX) { + if (i2c->request_callback) { + i2c->request_callback(i2c->num, i2c->arg); + } + i2c_ll_stretch_clr(i2c->dev); } - i2c_ll_stretch_clr(i2c->dev); } } + vTaskDelete(NULL); } - vTaskDelete(NULL); -} -static bool i2cSlaveDetachBus(void *bus_i2c_num) { - uint8_t num = (int)bus_i2c_num - 1; - i2c_slave_struct_t *i2c = &_i2c_bus_array[num]; - if (i2c->scl == -1 && i2c->sda == -1) { + static bool i2cSlaveDetachBus(void *bus_i2c_num) { + uint8_t num = (int)bus_i2c_num - 1; + i2c_slave_struct_t *i2c = &_i2c_bus_array[num]; + if (i2c->scl == -1 && i2c->sda == -1) { + return true; + } + esp_err_t err = i2cSlaveDeinit(num); + if (err != ESP_OK) { + log_e("i2cSlaveDeinit failed with error: %d", err); + return false; + } return true; } - esp_err_t err = i2cSlaveDeinit(num); - if (err != ESP_OK) { - log_e("i2cSlaveDeinit failed with error: %d", err); - return false; - } - return true; -} #endif /* SOC_I2C_SUPPORT_SLAVE */ diff --git a/cores/esp32/esp32-hal-ledc.c b/cores/esp32/esp32-hal-ledc.c index 4ec35e2f8a5..0a3ec5a60c7 100644 --- a/cores/esp32/esp32-hal-ledc.c +++ b/cores/esp32/esp32-hal-ledc.c @@ -332,7 +332,7 @@ bool ledcOutputInvert(uint8_t pin, bool out_invert) { #else esp_rom_gpio_connect_out_signal(pin, LEDC_LS_SIG_OUT0_IDX + ((bus->channel) % 8), out_invert, 0); #endif -#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 +#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 return true; } return false; diff --git a/cores/esp32/esp32-hal-spi.c b/cores/esp32/esp32-hal-spi.c index aa4ef3b3c25..8c8ce0b7705 100644 --- a/cores/esp32/esp32-hal-spi.c +++ b/cores/esp32/esp32-hal-spi.c @@ -103,26 +103,21 @@ struct spi_struct_t { #elif CONFIG_IDF_TARGET_ESP32P4 // ESP32P4 -#define SPI_COUNT (2) // SPI2 and SPI3. SPI0 and SPI1 are reserved for flash and PSRAM +#define SPI_COUNT (2) // SPI2 and SPI3. SPI0 and SPI1 are reserved for flash and PSRAM #define SPI_CLK_IDX(p) ((p == 0) ? SPI2_CK_PAD_OUT_IDX : ((p == 1) ? SPI3_CK_PAD_OUT_IDX : 0)) #define SPI_MISO_IDX(p) ((p == 0) ? SPI2_Q_PAD_OUT_IDX : ((p == 1) ? SPI3_QO_PAD_OUT_IDX : 0)) #define SPI_MOSI_IDX(p) ((p == 0) ? SPI2_D_PAD_IN_IDX : ((p == 1) ? SPI3_D_PAD_IN_IDX : 0)) -#define SPI_HSPI_SS_IDX(n) ((n == 0) ? SPI3_CS_PAD_OUT_IDX : \ - ((n == 1) ? SPI3_CS1_PAD_OUT_IDX : \ - ((n == 2) ? SPI3_CS2_PAD_OUT_IDX : \ - 0))) +#define SPI_HSPI_SS_IDX(n) ((n == 0) ? SPI3_CS_PAD_OUT_IDX : ((n == 1) ? SPI3_CS1_PAD_OUT_IDX : ((n == 2) ? SPI3_CS2_PAD_OUT_IDX : 0))) -#define SPI_FSPI_SS_IDX(n) ((n == 0) ? SPI2_CS_PAD_OUT_IDX : \ - ((n == 1) ? SPI2_CS1_PAD_OUT_IDX : \ - ((n == 2) ? SPI2_CS2_PAD_OUT_IDX : \ - ((n == 3) ? SPI2_CS3_PAD_OUT_IDX : \ - ((n == 4) ? SPI2_CS4_PAD_OUT_IDX : \ - ((n == 5) ? SPI2_CS5_PAD_OUT_IDX : \ - 0)))))) +#define SPI_FSPI_SS_IDX(n) \ + ((n == 0) ? SPI2_CS_PAD_OUT_IDX \ + : ((n == 1) ? SPI2_CS1_PAD_OUT_IDX \ + : ((n == 2) ? SPI2_CS2_PAD_OUT_IDX \ + : ((n == 3) ? SPI2_CS3_PAD_OUT_IDX : ((n == 4) ? SPI2_CS4_PAD_OUT_IDX : ((n == 5) ? SPI2_CS5_PAD_OUT_IDX : 0)))))) -#define SPI_SS_IDX(p, n) ((p == 0) ? SPI_FSPI_SS_IDX(n) : ((p == 1) ? SPI_HSPI_SS_IDX(n) : 0)) +#define SPI_SS_IDX(p, n) ((p == 0) ? SPI_FSPI_SS_IDX(n) : ((p == 1) ? SPI_HSPI_SS_IDX(n) : 0)) #elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 // ESP32C3 @@ -153,15 +148,13 @@ struct spi_struct_t { #if CONFIG_DISABLE_HAL_LOCKS #define SPI_MUTEX_LOCK() #define SPI_MUTEX_UNLOCK() -+ -static spi_t _spi_bus_array[] = { ++ static spi_t _spi_bus_array[] = { #if CONFIG_IDF_TARGET_ESP32S2 {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), 0, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 1, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 2, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 - {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0, -1, -1, -1, -1}, - {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 1, -1, -1, -1, -1} + {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 1, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C2 {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 0, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C3 @@ -187,8 +180,7 @@ static spi_t _spi_bus_array[] = { {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 1, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 2, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 - {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1}, - {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 1, -1, -1, -1, -1} + {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1}, {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 1, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C2 {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 0, -1, -1, -1, -1} #elif CONFIG_IDF_TARGET_ESP32C3 @@ -1622,4 +1614,3 @@ uint32_t spiFrequencyToClockDiv(uint32_t freq) { } #endif /* SOC_GPSPI_SUPPORTED */ - diff --git a/cores/esp32/esp32-hal-touch.c b/cores/esp32/esp32-hal-touch.c index 40a917b544d..4c0ed92656c 100644 --- a/cores/esp32/esp32-hal-touch.c +++ b/cores/esp32/esp32-hal-touch.c @@ -26,7 +26,7 @@ Internal Private Touch Data Structure and Functions */ -#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 +#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 static uint16_t __touchSleepCycles = 0x1000; static uint16_t __touchMeasureCycles = 0x1000; #elif SOC_TOUCH_SENSOR_VERSION == 2 // ESP32S2, ESP32S3 @@ -55,7 +55,7 @@ static bool initialized = false; static bool channels_initialized[SOC_TOUCH_SENSOR_NUM] = {false}; static void ARDUINO_ISR_ATTR __touchISR(void *arg) { -#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 +#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 uint32_t pad_intr = touch_pad_get_status(); //clear interrupt touch_pad_clear_status(); @@ -97,7 +97,7 @@ static void ARDUINO_ISR_ATTR __touchISR(void *arg) { static void __touchSetCycles(uint16_t measure, uint16_t sleep) { __touchSleepCycles = sleep; __touchMeasureCycles = measure; -#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 +#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 touch_pad_set_measurement_clock_cycles(measure); #elif SOC_TOUCH_SENSOR_VERSION == 2 // ESP32S2, ESP32S3 touch_pad_set_charge_discharge_times(measure); @@ -127,7 +127,7 @@ static void __touchInit() { esp_err_t err = ESP_OK; -#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 +#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 err = touch_pad_init(); if (err != ESP_OK) { goto err; @@ -147,7 +147,7 @@ static void __touchInit() { if (err != ESP_OK) { goto err; } - touch_pad_intr_enable(); // returns ESP_OK + touch_pad_intr_enable(); // returns ESP_OK #elif SOC_TOUCH_SENSOR_VERSION == 2 // ESP32S2, ESP32S3 err = touch_pad_init(); if (err != ESP_OK) { @@ -183,11 +183,11 @@ static void __touchChannelInit(int pad) { return; } -#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 +#if SOC_TOUCH_SENSOR_VERSION == 1 // ESP32 // Initial no Threshold and setup __touchInterruptHandlers[pad].fn = NULL; touch_pad_config(pad, TOUCH_PAD_THRESHOLD_MAX); // returns ESP_OK -#elif SOC_TOUCH_SENSOR_VERSION == 2 // ESP32S2, ESP32S3 +#elif SOC_TOUCH_SENSOR_VERSION == 2 // ESP32S2, ESP32S3 // Initial no Threshold and setup __touchInterruptHandlers[pad].fn = NULL; touch_pad_config(pad); // returns ESP_OK @@ -274,7 +274,7 @@ static void __touchDettachInterrupt(uint8_t pin) { External Public Touch API Functions */ -#if SOC_TOUCH_SENSOR_VERSION == 1 // Only for ESP32 SoC +#if SOC_TOUCH_SENSOR_VERSION == 1 // Only for ESP32 SoC void touchInterruptSetThresholdDirection(bool mustbeLower) { if (mustbeLower) { touch_pad_set_trigger_mode(TOUCH_TRIGGER_BELOW); diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c index 37e1b238d73..82c9d8808d0 100644 --- a/cores/esp32/esp32-hal-uart.c +++ b/cores/esp32/esp32-hal-uart.c @@ -1106,16 +1106,18 @@ unsigned long uartDetectBaudrate(uart_t *uart) { // gets the right TX or RX SIGNAL, based on the UART number from gpio_sig_map.h #ifdef CONFIG_IDF_TARGET_ESP32P4 -#define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? UART0_TXD_PAD_OUT_IDX \ - : (uartNumber == UART_NUM_1 ? UART1_TXD_PAD_OUT_IDX \ - : (uartNumber == UART_NUM_2 ? UART2_TXD_PAD_OUT_IDX \ - : (uartNumber == UART_NUM_3 ? UART3_TXD_PAD_OUT_IDX \ - : UART4_TXD_PAD_OUT_IDX)))) -#define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? UART0_RXD_PAD_IN_IDX \ - : (uartNumber == UART_NUM_1 ? UART1_RXD_PAD_IN_IDX \ - : (uartNumber == UART_NUM_2 ? UART2_RXD_PAD_IN_IDX \ - : (uartNumber == UART_NUM_3 ? UART3_RXD_PAD_IN_IDX \ - : UART4_RXD_PAD_IN_IDX)))) +#define UART_TX_SIGNAL(uartNumber) \ + (uartNumber == UART_NUM_0 \ + ? UART0_TXD_PAD_OUT_IDX \ + : (uartNumber == UART_NUM_1 \ + ? UART1_TXD_PAD_OUT_IDX \ + : (uartNumber == UART_NUM_2 ? UART2_TXD_PAD_OUT_IDX : (uartNumber == UART_NUM_3 ? UART3_TXD_PAD_OUT_IDX : UART4_TXD_PAD_OUT_IDX)))) +#define UART_RX_SIGNAL(uartNumber) \ + (uartNumber == UART_NUM_0 \ + ? UART0_RXD_PAD_IN_IDX \ + : (uartNumber == UART_NUM_1 \ + ? UART1_RXD_PAD_IN_IDX \ + : (uartNumber == UART_NUM_2 ? UART2_RXD_PAD_IN_IDX : (uartNumber == UART_NUM_3 ? UART3_RXD_PAD_IN_IDX : UART4_RXD_PAD_IN_IDX)))) #else #if SOC_UART_HP_NUM > 2 #define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0TXD_OUT_IDX : (uartNumber == UART_NUM_1 ? U1TXD_OUT_IDX : U2TXD_OUT_IDX)) @@ -1124,7 +1126,7 @@ unsigned long uartDetectBaudrate(uart_t *uart) { #define UART_TX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0TXD_OUT_IDX : U1TXD_OUT_IDX) #define UART_RX_SIGNAL(uartNumber) (uartNumber == UART_NUM_0 ? U0RXD_IN_IDX : U1RXD_IN_IDX) #endif -#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 +#endif // ifdef CONFIG_IDF_TARGET_ESP32P4 /* This function internally binds defined UARTs TX signal with defined RX pin of any UART (same or different). diff --git a/libraries/BLE/examples/BLE5_extended_scan/ci.json b/libraries/BLE/examples/BLE5_extended_scan/ci.json index 67455e96584..e97e4cf7fea 100644 --- a/libraries/BLE/examples/BLE5_extended_scan/ci.json +++ b/libraries/BLE/examples/BLE5_extended_scan/ci.json @@ -1,7 +1,7 @@ { "targets": { "esp32": false, - "esp32s2": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/BLE5_multi_advertising/ci.json b/libraries/BLE/examples/BLE5_multi_advertising/ci.json index 67455e96584..fc9f75986fe 100644 --- a/libraries/BLE/examples/BLE5_multi_advertising/ci.json +++ b/libraries/BLE/examples/BLE5_multi_advertising/ci.json @@ -1,7 +1,6 @@ { "targets": { - "esp32": false, - "esp32s2": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/BLE5_periodic_advertising/ci.json b/libraries/BLE/examples/BLE5_periodic_advertising/ci.json index 67455e96584..a034e239a3f 100644 --- a/libraries/BLE/examples/BLE5_periodic_advertising/ci.json +++ b/libraries/BLE/examples/BLE5_periodic_advertising/ci.json @@ -1,7 +1,10 @@ { "targets": { "esp32": false, + "esp32c2": false, + "esp32c3": false, + "esp32p4": false, "esp32s2": false, - "esp32p4": false + "esp32s3": false } } diff --git a/libraries/BLE/examples/BLE5_periodic_sync/ci.json b/libraries/BLE/examples/BLE5_periodic_sync/ci.json index 67455e96584..715becda6cb 100644 --- a/libraries/BLE/examples/BLE5_periodic_sync/ci.json +++ b/libraries/BLE/examples/BLE5_periodic_sync/ci.json @@ -1,7 +1,10 @@ { "targets": { "esp32": false, - "esp32s2": false, - "esp32p4": false + "esp32c3": false, + "esp32c6": false, + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/Beacon_Scanner/ci.json b/libraries/BLE/examples/Beacon_Scanner/ci.json index cde395625ee..ee810400be6 100644 --- a/libraries/BLE/examples/Beacon_Scanner/ci.json +++ b/libraries/BLE/examples/Beacon_Scanner/ci.json @@ -1,6 +1,9 @@ { "targets": { - "esp32s2": false, - "esp32p4": false + "esp32c3": false, + "esp32c6": false, + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/Client/ci.json b/libraries/BLE/examples/Client/ci.json index cde395625ee..eb6596c4a37 100644 --- a/libraries/BLE/examples/Client/ci.json +++ b/libraries/BLE/examples/Client/ci.json @@ -1,6 +1,7 @@ { "targets": { - "esp32s2": false, - "esp32p4": false + "esp32c3": false, + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/Notify/ci.json b/libraries/BLE/examples/Notify/ci.json index cde395625ee..156dda6560c 100644 --- a/libraries/BLE/examples/Notify/ci.json +++ b/libraries/BLE/examples/Notify/ci.json @@ -1,6 +1,7 @@ { "targets": { - "esp32s2": false, - "esp32p4": false + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } From 09c0883bacab27c8b7c42dc6ee2b4b4cee1b4e3f Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:00:08 -0300 Subject: [PATCH 24/28] fix(get.py): Remove unused include --- tools/get.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/get.py b/tools/get.py index 3d71dbffd2e..6f42cbaa577 100755 --- a/tools/get.py +++ b/tools/get.py @@ -24,7 +24,6 @@ import re import time import argparse -import stat # Initialize start_time globally start_time = -1 From 50befb5fc4b5b3cbf325e149c4feb868ee075e55 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:03:45 +0000 Subject: [PATCH 25/28] ci(pre-commit): Apply automatic fixes --- libraries/BLE/examples/Scan/ci.json | 4 ++-- libraries/BLE/examples/Server/ci.json | 6 +++++- libraries/BLE/examples/Server_multiconnect/ci.json | 8 ++++++-- libraries/BLE/examples/UART/ci.json | 7 +++++-- libraries/BLE/examples/Write/ci.json | 5 +++-- libraries/BLE/examples/iBeacon/ci.json | 5 +++-- 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/libraries/BLE/examples/Scan/ci.json b/libraries/BLE/examples/Scan/ci.json index cde395625ee..fc9f75986fe 100644 --- a/libraries/BLE/examples/Scan/ci.json +++ b/libraries/BLE/examples/Scan/ci.json @@ -1,6 +1,6 @@ { "targets": { - "esp32s2": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/Server/ci.json b/libraries/BLE/examples/Server/ci.json index cde395625ee..a034e239a3f 100644 --- a/libraries/BLE/examples/Server/ci.json +++ b/libraries/BLE/examples/Server/ci.json @@ -1,6 +1,10 @@ { "targets": { + "esp32": false, + "esp32c2": false, + "esp32c3": false, + "esp32p4": false, "esp32s2": false, - "esp32p4": false + "esp32s3": false } } diff --git a/libraries/BLE/examples/Server_multiconnect/ci.json b/libraries/BLE/examples/Server_multiconnect/ci.json index cde395625ee..715becda6cb 100644 --- a/libraries/BLE/examples/Server_multiconnect/ci.json +++ b/libraries/BLE/examples/Server_multiconnect/ci.json @@ -1,6 +1,10 @@ { "targets": { - "esp32s2": false, - "esp32p4": false + "esp32": false, + "esp32c3": false, + "esp32c6": false, + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/UART/ci.json b/libraries/BLE/examples/UART/ci.json index cde395625ee..ee810400be6 100644 --- a/libraries/BLE/examples/UART/ci.json +++ b/libraries/BLE/examples/UART/ci.json @@ -1,6 +1,9 @@ { "targets": { - "esp32s2": false, - "esp32p4": false + "esp32c3": false, + "esp32c6": false, + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/Write/ci.json b/libraries/BLE/examples/Write/ci.json index cde395625ee..eb6596c4a37 100644 --- a/libraries/BLE/examples/Write/ci.json +++ b/libraries/BLE/examples/Write/ci.json @@ -1,6 +1,7 @@ { "targets": { - "esp32s2": false, - "esp32p4": false + "esp32c3": false, + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/BLE/examples/iBeacon/ci.json b/libraries/BLE/examples/iBeacon/ci.json index cde395625ee..156dda6560c 100644 --- a/libraries/BLE/examples/iBeacon/ci.json +++ b/libraries/BLE/examples/iBeacon/ci.json @@ -1,6 +1,7 @@ { "targets": { - "esp32s2": false, - "esp32p4": false + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } From 59137781440507f68992b5af5becf5b9e18d05ae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:04:44 +0000 Subject: [PATCH 26/28] change(tools): Push generated binaries to PR --- tools/get.exe | Bin 6943200 -> 6943192 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/get.exe b/tools/get.exe index 6447c63e9c8d4e0c292955d3a8634ef187197175..2082c7a4b68b6438c4f43a736a9d1b6aedda614f 100644 GIT binary patch delta 40204 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 I-!HEJ0C&zTKmY&$ delta 40396 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 I{@ob=2VFy7Y5)KL From c882a84960b1d1ea4f6e17c4d2ab08e4fec0f284 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:06:31 +0000 Subject: [PATCH 27/28] ci(pre-commit): Apply automatic fixes --- libraries/OpenThread/examples/COAP/coap_lamp/ci.json | 4 ++-- libraries/OpenThread/examples/COAP/coap_switch/ci.json | 8 ++++---- libraries/OpenThread/examples/SimpleCLI/ci.json | 9 ++++----- libraries/OpenThread/examples/SimpleNode/ci.json | 7 ++----- .../SimpleThreadNetwork/ExtendedRouterNode/ci.json | 9 +++------ 5 files changed, 15 insertions(+), 22 deletions(-) diff --git a/libraries/OpenThread/examples/COAP/coap_lamp/ci.json b/libraries/OpenThread/examples/COAP/coap_lamp/ci.json index ec2b3177531..a034e239a3f 100644 --- a/libraries/OpenThread/examples/COAP/coap_lamp/ci.json +++ b/libraries/OpenThread/examples/COAP/coap_lamp/ci.json @@ -3,8 +3,8 @@ "esp32": false, "esp32c2": false, "esp32c3": false, + "esp32p4": false, "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32s3": false } } diff --git a/libraries/OpenThread/examples/COAP/coap_switch/ci.json b/libraries/OpenThread/examples/COAP/coap_switch/ci.json index ec2b3177531..715becda6cb 100644 --- a/libraries/OpenThread/examples/COAP/coap_switch/ci.json +++ b/libraries/OpenThread/examples/COAP/coap_switch/ci.json @@ -1,10 +1,10 @@ { "targets": { "esp32": false, - "esp32c2": false, "esp32c3": false, - "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32c6": false, + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/OpenThread/examples/SimpleCLI/ci.json b/libraries/OpenThread/examples/SimpleCLI/ci.json index ec2b3177531..ee810400be6 100644 --- a/libraries/OpenThread/examples/SimpleCLI/ci.json +++ b/libraries/OpenThread/examples/SimpleCLI/ci.json @@ -1,10 +1,9 @@ { "targets": { - "esp32": false, - "esp32c2": false, "esp32c3": false, - "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32c6": false, + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/OpenThread/examples/SimpleNode/ci.json b/libraries/OpenThread/examples/SimpleNode/ci.json index ec2b3177531..eb6596c4a37 100644 --- a/libraries/OpenThread/examples/SimpleNode/ci.json +++ b/libraries/OpenThread/examples/SimpleNode/ci.json @@ -1,10 +1,7 @@ { "targets": { - "esp32": false, - "esp32c2": false, "esp32c3": false, - "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json b/libraries/OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json index ec2b3177531..156dda6560c 100644 --- a/libraries/OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json +++ b/libraries/OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode/ci.json @@ -1,10 +1,7 @@ { "targets": { - "esp32": false, - "esp32c2": false, - "esp32c3": false, - "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32h2": false, + "esp32p4": false, + "esp32s2": false } } From 148b6330c19bf3ad8fc132f648a020267d2c5505 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:10:27 -0300 Subject: [PATCH 28/28] fix(ci.json): Fix formatting --- .../examples/SimpleThreadNetwork/LeaderNode/ci.json | 4 ++-- .../examples/SimpleThreadNetwork/RouterNode/ci.json | 4 ++-- libraries/OpenThread/examples/ThreadScan/ci.json | 4 ++-- libraries/OpenThread/examples/onReceive/ci.json | 4 ++-- libraries/SD_MMC/examples/SD2USBMSC/ci.json | 4 ++-- libraries/SD_MMC/examples/SDMMC_Test/ci.json | 4 ++-- libraries/SD_MMC/examples/SDMMC_time/ci.json | 4 ++-- libraries/SimpleBLE/examples/SimpleBleDevice/ci.json | 4 ++-- libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/libraries/OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json b/libraries/OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json index ec2b3177531..a034e239a3f 100644 --- a/libraries/OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json +++ b/libraries/OpenThread/examples/SimpleThreadNetwork/LeaderNode/ci.json @@ -3,8 +3,8 @@ "esp32": false, "esp32c2": false, "esp32c3": false, + "esp32p4": false, "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32s3": false } } diff --git a/libraries/OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json b/libraries/OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json index ec2b3177531..a034e239a3f 100644 --- a/libraries/OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json +++ b/libraries/OpenThread/examples/SimpleThreadNetwork/RouterNode/ci.json @@ -3,8 +3,8 @@ "esp32": false, "esp32c2": false, "esp32c3": false, + "esp32p4": false, "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32s3": false } } diff --git a/libraries/OpenThread/examples/ThreadScan/ci.json b/libraries/OpenThread/examples/ThreadScan/ci.json index ec2b3177531..a034e239a3f 100644 --- a/libraries/OpenThread/examples/ThreadScan/ci.json +++ b/libraries/OpenThread/examples/ThreadScan/ci.json @@ -3,8 +3,8 @@ "esp32": false, "esp32c2": false, "esp32c3": false, + "esp32p4": false, "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32s3": false } } diff --git a/libraries/OpenThread/examples/onReceive/ci.json b/libraries/OpenThread/examples/onReceive/ci.json index ec2b3177531..a034e239a3f 100644 --- a/libraries/OpenThread/examples/onReceive/ci.json +++ b/libraries/OpenThread/examples/onReceive/ci.json @@ -3,8 +3,8 @@ "esp32": false, "esp32c2": false, "esp32c3": false, + "esp32p4": false, "esp32s2": false, - "esp32s3": false, - "esp32p4": false + "esp32s3": false } } diff --git a/libraries/SD_MMC/examples/SD2USBMSC/ci.json b/libraries/SD_MMC/examples/SD2USBMSC/ci.json index e2a8e674362..715becda6cb 100644 --- a/libraries/SD_MMC/examples/SD2USBMSC/ci.json +++ b/libraries/SD_MMC/examples/SD2USBMSC/ci.json @@ -4,7 +4,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, - "esp32s2": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/SD_MMC/examples/SDMMC_Test/ci.json b/libraries/SD_MMC/examples/SDMMC_Test/ci.json index da76969c857..ee810400be6 100644 --- a/libraries/SD_MMC/examples/SDMMC_Test/ci.json +++ b/libraries/SD_MMC/examples/SDMMC_Test/ci.json @@ -3,7 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, - "esp32s2": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/SD_MMC/examples/SDMMC_time/ci.json b/libraries/SD_MMC/examples/SDMMC_time/ci.json index da76969c857..ee810400be6 100644 --- a/libraries/SD_MMC/examples/SDMMC_time/ci.json +++ b/libraries/SD_MMC/examples/SDMMC_time/ci.json @@ -3,7 +3,7 @@ "esp32c3": false, "esp32c6": false, "esp32h2": false, - "esp32s2": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/SimpleBLE/examples/SimpleBleDevice/ci.json b/libraries/SimpleBLE/examples/SimpleBleDevice/ci.json index e438a35ce16..eb6596c4a37 100644 --- a/libraries/SimpleBLE/examples/SimpleBleDevice/ci.json +++ b/libraries/SimpleBLE/examples/SimpleBleDevice/ci.json @@ -1,7 +1,7 @@ { "targets": { "esp32c3": false, - "esp32s2": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } } diff --git a/libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json b/libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json index e938586f086..156dda6560c 100644 --- a/libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json +++ b/libraries/WiFi/examples/WiFiBlueToothSwitch/ci.json @@ -1,7 +1,7 @@ { "targets": { "esp32h2": false, - "esp32s2": false, - "esp32p4": false + "esp32p4": false, + "esp32s2": false } }