From 6982369df1e31b5cde19e83ccdc5c0d4c0456754 Mon Sep 17 00:00:00 2001 From: Mykola Stepanets Date: Fri, 7 Nov 2025 21:47:42 +0200 Subject: [PATCH 1/3] Add support for ESP32-C6/ESP32-C3 --- yoRadio/src/audioVS1053/audioVS1053Ex.h | 23 +++++++++++++++++++---- yoRadio/src/core/config.cpp | 4 ++-- yoRadio/src/core/options.h | 2 +- yoRadio/src/core/optionschecker.h | 2 +- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/yoRadio/src/audioVS1053/audioVS1053Ex.h b/yoRadio/src/audioVS1053/audioVS1053Ex.h index 055a9b5e..2f32437a 100644 --- a/yoRadio/src/audioVS1053/audioVS1053Ex.h +++ b/yoRadio/src/audioVS1053/audioVS1053Ex.h @@ -248,10 +248,25 @@ class Audio : private AudioBuffer{ 88,90,91,92,93,94,95,96,97,98,99,100}; //22 elements uint8_t vuLeft, vuRight; protected: - inline void DCS_HIGH() {(dcs_pin&0x20) ? GPIO.out1_w1ts.data = 1 << (dcs_pin - 32) : GPIO.out_w1ts = 1 << dcs_pin;} - inline void DCS_LOW() {(dcs_pin&0x20) ? GPIO.out1_w1tc.data = 1 << (dcs_pin - 32) : GPIO.out_w1tc = 1 << dcs_pin;} - inline void CS_HIGH() {( cs_pin&0x20) ? GPIO.out1_w1ts.data = 1 << ( cs_pin - 32) : GPIO.out_w1ts = 1 << cs_pin;} - inline void CS_LOW() {( cs_pin&0x20) ? GPIO.out1_w1tc.data = 1 << ( cs_pin - 32) : GPIO.out_w1tc = 1 << cs_pin;} + + #ifndef ESP_ARDUINO_VERSION_VAL + #define ESP_ARDUINO_VERSION_MAJOR 0 + #define ESP_ARDUINO_VERSION_MINOR 0 + #define ESP_ARDUINO_VERSION_PATCH 0 + #endif + + #if ESP_IDF_VERSION_MAJOR < 5 + inline void DCS_HIGH() {(dcs_pin&0x20) ? GPIO.out1_w1ts.data = 1 << (dcs_pin - 32) : GPIO.out_w1ts = 1 << dcs_pin;} + inline void DCS_LOW() {(dcs_pin&0x20) ? GPIO.out1_w1tc.data = 1 << (dcs_pin - 32) : GPIO.out_w1tc = 1 << dcs_pin;} + inline void CS_HIGH() {( cs_pin&0x20) ? GPIO.out1_w1ts.data = 1 << ( cs_pin - 32) : GPIO.out_w1ts = 1 << cs_pin;} + inline void CS_LOW() {( cs_pin&0x20) ? GPIO.out1_w1tc.data = 1 << ( cs_pin - 32) : GPIO.out_w1tc = 1 << cs_pin;} + #else + inline void DCS_HIGH() {gpio_set_level((gpio_num_t)dcs_pin, 1);} + inline void DCS_LOW() {gpio_set_level((gpio_num_t)dcs_pin, 0);} + inline void CS_HIGH() {gpio_set_level((gpio_num_t) cs_pin, 1);} + inline void CS_LOW() {gpio_set_level((gpio_num_t) cs_pin, 0);} + #endif + inline void await_data_request() {while(!digitalRead(dreq_pin)) NOP();} // Very short delay inline bool data_request() {return(digitalRead(dreq_pin) == HIGH);} diff --git a/yoRadio/src/core/config.cpp b/yoRadio/src/core/config.cpp index ad36921e..7b08645c 100644 --- a/yoRadio/src/core/config.cpp +++ b/yoRadio/src/core/config.cpp @@ -988,7 +988,7 @@ void Config::doSleep(){ #ifdef USE_NEXTION nextion.sleep(); #endif -#if !defined(ARDUINO_ESP32C3_DEV) +#if !(defined(ARDUINO_ESP32C3_DEV) || defined(ARDUINO_ESP32C6_DEV)) if(WAKE_PIN!=255) esp_sleep_enable_ext0_wakeup((gpio_num_t)WAKE_PIN, LOW); esp_sleep_enable_timer_wakeup(config.sleepfor * 60 * 1000000ULL); esp_deep_sleep_start(); @@ -1001,7 +1001,7 @@ void Config::doSleepW(){ #ifdef USE_NEXTION nextion.sleep(); #endif -#if !defined(ARDUINO_ESP32C3_DEV) +#if !(defined(ARDUINO_ESP32C3_DEV) || defined(ARDUINO_ESP32C6_DEV)) if(WAKE_PIN!=255) esp_sleep_enable_ext0_wakeup((gpio_num_t)WAKE_PIN, LOW); esp_deep_sleep_start(); #endif diff --git a/yoRadio/src/core/options.h b/yoRadio/src/core/options.h index d5b36010..6117e530 100644 --- a/yoRadio/src/core/options.h +++ b/yoRadio/src/core/options.h @@ -272,7 +272,7 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti #endif /* ESP DEVBOARD */ -#if defined(ARDUINO_ESP32S3_DEV) || defined(ARDUINO_ESP32C3_DEV) +#if defined(ARDUINO_ESP32S3_DEV) || defined(ARDUINO_ESP32C3_DEV) || defined(ARDUINO_ESP32C6_DEV) #define ESP_S3C3 1 #ifndef USE_BUILTIN_LED #define USE_BUILTIN_LED true diff --git a/yoRadio/src/core/optionschecker.h b/yoRadio/src/core/optionschecker.h index f520c9d9..42aad325 100644 --- a/yoRadio/src/core/optionschecker.h +++ b/yoRadio/src/core/optionschecker.h @@ -13,7 +13,7 @@ # error YOU MUST CHOOSE BETWEEN I2S DAC AND VS1053 BY DISABLING THE SECOND MODULE IN THE myoptions.h #endif -#if !(defined(ARDUINO_ESP32_DEV) || defined(ARDUINO_ESP32S3_DEV) || defined(ARDUINO_ESP32C3_DEV)) +#if !(defined(ARDUINO_ESP32_DEV) || defined(ARDUINO_ESP32S3_DEV) || defined(ARDUINO_ESP32C3_DEV) || defined(ARDUINO_ESP32C6_DEV)) # error ONLY MODULES "ESP32 Dev Module", "ESP32 Wrover Module" AND "ESP32 S3 Dev Module" ARE SUPPORTED. PLEASE SELECT ONE OF THEM IN THE MENU >> TOOLS >> BOARD #endif From f6e344a9c6449571c25d01f9ab799fd4e23a8ed2 Mon Sep 17 00:00:00 2001 From: Mykola Stepanets Date: Fri, 7 Nov 2025 21:49:20 +0200 Subject: [PATCH 2/3] Fix crash on boot screen --- yoRadio/src/core/display.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yoRadio/src/core/display.cpp b/yoRadio/src/core/display.cpp index 4dcfd250..989b1a92 100644 --- a/yoRadio/src/core/display.cpp +++ b/yoRadio/src/core/display.cpp @@ -109,8 +109,6 @@ void Display::init() { displayQueue=NULL; displayQueue = xQueueCreate( 5, sizeof( requestParams_t ) ); while(displayQueue==NULL){;} - _createDspTask(); - while(!_bootStep==0) { delay(10); } //_pager.begin(); //_bootScreen(); _pager = new Pager(); @@ -121,6 +119,8 @@ void Display::init() { _meta = new ScrollWidget(); _title1 = new ScrollWidget(); _plcurrent = new ScrollWidget(); + _createDspTask(); + while(!_bootStep==0) { delay(10); } Serial.println("done"); } From 48018561197bb3b72225ad7c0db687e7c28fa2c8 Mon Sep 17 00:00:00 2001 From: Mykola Stepanets Date: Sun, 16 Nov 2025 04:25:22 +0200 Subject: [PATCH 3/3] Fix audio watchdog crash on ESP32-C3/ESP32-C6 --- yoRadio/src/audioVS1053/audioVS1053Ex.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yoRadio/src/audioVS1053/audioVS1053Ex.cpp b/yoRadio/src/audioVS1053/audioVS1053Ex.cpp index 9c5a2261..55dfd5eb 100644 --- a/yoRadio/src/audioVS1053/audioVS1053Ex.cpp +++ b/yoRadio/src/audioVS1053/audioVS1053Ex.cpp @@ -1851,7 +1851,7 @@ bool Audio::connecttohost(const char* host, const char* user, const char* pwd) { res = _client->connect(hostwoext, port, m_f_ssl ? m_timeout_ms_ssl : m_timeout_ms); }else{ ConnectParams* params = new ConnectParams{ strdup(hostwoext), port, this }; _connectionResult = false; - xTaskCreatePinnedToCore(connectTask, "ConnectTask", WATCHDOG_TASK_SIZE, params, WATCHDOG_TASK_PRIORITY, &_connectTaskHandle, WATCHDOG_TASK_CORE_ID); + xTaskCreatePinnedToCore(connectTask, "ConnectTask", WATCHDOG_TASK_SIZE, params, WATCHDOG_TASK_PRIORITY, &_connectTaskHandle, ESP.getChipCores() > 1 ? WATCHDOG_TASK_CORE_ID : 0); for(;;){ if(millis()-t>(m_f_ssl ? m_timeout_ms_ssl : m_timeout_ms) || _connectionResult) break; vTaskDelay(10);