From 0b3e248a4061a412c12d84b02f726adb9b899bd0 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Tue, 24 Jun 2025 17:46:46 +0300 Subject: [PATCH 1/2] feat(p4): Add method to set the pins for SDIO to WiFi chip --- libraries/WiFi/src/WiFiGeneric.cpp | 86 +++++++++++++++++++++--------- libraries/WiFi/src/WiFiGeneric.h | 5 ++ 2 files changed, 67 insertions(+), 24 deletions(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index bddcb5fd448..12bcfc2df47 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -246,29 +246,67 @@ extern "C" { extern esp_err_t esp_hosted_init(); extern esp_err_t esp_hosted_deinit(); }; +typedef struct { + uint8_t pin_clk; + uint8_t pin_cmd; + uint8_t pin_d0; + uint8_t pin_d1; + uint8_t pin_d2; + uint8_t pin_d3; + uint8_t pin_reset; +} sdio_pin_config_t; + static bool hosted_initialized = false; +static sdio_pin_config_t sdio_pin_config = { +#ifdef BOARD_HAS_SDIO_ESP_HOSTED + .pin_clk = BOARD_SDIO_ESP_HOSTED_CLK, + .pin_cmd = BOARD_SDIO_ESP_HOSTED_CMD, + .pin_d0 = BOARD_SDIO_ESP_HOSTED_D0, + .pin_d1 = BOARD_SDIO_ESP_HOSTED_D1, + .pin_d2 = BOARD_SDIO_ESP_HOSTED_D2, + .pin_d3 = BOARD_SDIO_ESP_HOSTED_D3, + .pin_reset = BOARD_SDIO_ESP_HOSTED_RESET +#else + .pin_clk = CONFIG_ESP_SDIO_PIN_CLK, + .pin_cmd = CONFIG_ESP_SDIO_PIN_CMD, + .pin_d0 = CONFIG_ESP_SDIO_PIN_D0, + .pin_d1 = CONFIG_ESP_SDIO_PIN_D1, + .pin_d2 = CONFIG_ESP_SDIO_PIN_D2, + .pin_d3 = CONFIG_ESP_SDIO_PIN_D3, + .pin_reset = CONFIG_ESP_SDIO_GPIO_RESET_SLAVE +#endif +}; + +bool WiFiGenericClass::setPins(int8_t clk, int8_t cmd, int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t rst) { + if (clk < 0 || cmd < 0 || d0 < 0 || d1 < 0 || d2 < 0 || d3 < 0 || rst < 0) { + log_e("All SDIO pins must be defined"); + return false; + } + if (hosted_initialized) { + log_e("SDIO pins must be set before WiFi is initialized"); + return false; + } + sdio_pin_config.pin_clk = clk; + sdio_pin_config.pin_cmd = cmd; + sdio_pin_config.pin_d0 = d0; + sdio_pin_config.pin_d1 = d1; + sdio_pin_config.pin_d2 = d2; + sdio_pin_config.pin_d3 = d3; + sdio_pin_config.pin_reset = rst; + return true; +} static bool wifiHostedInit() { if (!hosted_initialized) { hosted_initialized = true; struct esp_hosted_sdio_config conf = INIT_DEFAULT_HOST_SDIO_CONFIG(); -#ifdef BOARD_HAS_SDIO_ESP_HOSTED - conf.pin_clk.pin = BOARD_SDIO_ESP_HOSTED_CLK; - conf.pin_cmd.pin = BOARD_SDIO_ESP_HOSTED_CMD; - conf.pin_d0.pin = BOARD_SDIO_ESP_HOSTED_D0; - conf.pin_d1.pin = BOARD_SDIO_ESP_HOSTED_D1; - conf.pin_d2.pin = BOARD_SDIO_ESP_HOSTED_D2; - conf.pin_d3.pin = BOARD_SDIO_ESP_HOSTED_D3; - conf.pin_reset.pin = BOARD_SDIO_ESP_HOSTED_RESET; -#else - conf.pin_clk.pin = CONFIG_ESP_SDIO_PIN_CLK; - conf.pin_cmd.pin = CONFIG_ESP_SDIO_PIN_CMD; - conf.pin_d0.pin = CONFIG_ESP_SDIO_PIN_D0; - conf.pin_d1.pin = CONFIG_ESP_SDIO_PIN_D1; - conf.pin_d2.pin = CONFIG_ESP_SDIO_PIN_D2; - conf.pin_d3.pin = CONFIG_ESP_SDIO_PIN_D3; - conf.pin_reset.pin = CONFIG_ESP_SDIO_GPIO_RESET_SLAVE; -#endif + conf.pin_clk.pin = sdio_pin_config.pin_clk; + conf.pin_cmd.pin = sdio_pin_config.pin_cmd; + conf.pin_d0.pin = sdio_pin_config.pin_d0; + conf.pin_d1.pin = sdio_pin_config.pin_d1; + conf.pin_d2.pin = sdio_pin_config.pin_d2; + conf.pin_d3.pin = sdio_pin_config.pin_d3; + conf.pin_reset.pin = sdio_pin_config.pin_reset; // esp_hosted_sdio_set_config() will fail on second attempt but here temporarily to not cause exception on reinit if (esp_hosted_sdio_set_config(&conf) != ESP_OK || esp_hosted_init() != ESP_OK) { log_e("esp_hosted_init failed!"); @@ -279,13 +317,13 @@ static bool wifiHostedInit() { } // Attach pins to PeriMan here // Slave chip model is CONFIG_IDF_SLAVE_TARGET - // CONFIG_ESP_SDIO_PIN_CMD - // CONFIG_ESP_SDIO_PIN_CLK - // CONFIG_ESP_SDIO_PIN_D0 - // CONFIG_ESP_SDIO_PIN_D1 - // CONFIG_ESP_SDIO_PIN_D2 - // CONFIG_ESP_SDIO_PIN_D3 - // CONFIG_ESP_SDIO_GPIO_RESET_SLAVE + // sdio_pin_config.pin_clk + // sdio_pin_config.pin_cmd + // sdio_pin_config.pin_d0 + // sdio_pin_config.pin_d1 + // sdio_pin_config.pin_d2 + // sdio_pin_config.pin_d3 + // sdio_pin_config.pin_reset return true; } diff --git a/libraries/WiFi/src/WiFiGeneric.h b/libraries/WiFi/src/WiFiGeneric.h index ed216229ed4..bdfa7b5dd85 100644 --- a/libraries/WiFi/src/WiFiGeneric.h +++ b/libraries/WiFi/src/WiFiGeneric.h @@ -82,6 +82,11 @@ class WiFiGenericClass { public: WiFiGenericClass(); +#if CONFIG_ESP_WIFI_REMOTE_ENABLED + // Set SDIO pins for connection to external ESP MCU + static bool setPins(int8_t clk, int8_t cmd, int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t rst); +#endif + wifi_event_id_t onEvent(WiFiEventCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX); wifi_event_id_t onEvent(WiFiEventFuncCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX); wifi_event_id_t onEvent(WiFiEventSysCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX); From 462efa99ee8e04ed1a5b3f8caadbaf59aa841a1e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Mon, 30 Jun 2025 10:20:17 +0000 Subject: [PATCH 2/2] ci(pre-commit): Apply automatic fixes --- libraries/WiFi/src/WiFiGeneric.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 12bcfc2df47..ec661ef7d8f 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -259,21 +259,21 @@ typedef struct { static bool hosted_initialized = false; static sdio_pin_config_t sdio_pin_config = { #ifdef BOARD_HAS_SDIO_ESP_HOSTED - .pin_clk = BOARD_SDIO_ESP_HOSTED_CLK, - .pin_cmd = BOARD_SDIO_ESP_HOSTED_CMD, - .pin_d0 = BOARD_SDIO_ESP_HOSTED_D0, - .pin_d1 = BOARD_SDIO_ESP_HOSTED_D1, - .pin_d2 = BOARD_SDIO_ESP_HOSTED_D2, - .pin_d3 = BOARD_SDIO_ESP_HOSTED_D3, - .pin_reset = BOARD_SDIO_ESP_HOSTED_RESET + .pin_clk = BOARD_SDIO_ESP_HOSTED_CLK, + .pin_cmd = BOARD_SDIO_ESP_HOSTED_CMD, + .pin_d0 = BOARD_SDIO_ESP_HOSTED_D0, + .pin_d1 = BOARD_SDIO_ESP_HOSTED_D1, + .pin_d2 = BOARD_SDIO_ESP_HOSTED_D2, + .pin_d3 = BOARD_SDIO_ESP_HOSTED_D3, + .pin_reset = BOARD_SDIO_ESP_HOSTED_RESET #else - .pin_clk = CONFIG_ESP_SDIO_PIN_CLK, - .pin_cmd = CONFIG_ESP_SDIO_PIN_CMD, - .pin_d0 = CONFIG_ESP_SDIO_PIN_D0, - .pin_d1 = CONFIG_ESP_SDIO_PIN_D1, - .pin_d2 = CONFIG_ESP_SDIO_PIN_D2, - .pin_d3 = CONFIG_ESP_SDIO_PIN_D3, - .pin_reset = CONFIG_ESP_SDIO_GPIO_RESET_SLAVE + .pin_clk = CONFIG_ESP_SDIO_PIN_CLK, + .pin_cmd = CONFIG_ESP_SDIO_PIN_CMD, + .pin_d0 = CONFIG_ESP_SDIO_PIN_D0, + .pin_d1 = CONFIG_ESP_SDIO_PIN_D1, + .pin_d2 = CONFIG_ESP_SDIO_PIN_D2, + .pin_d3 = CONFIG_ESP_SDIO_PIN_D3, + .pin_reset = CONFIG_ESP_SDIO_GPIO_RESET_SLAVE #endif };