Skip to content

Commit 0b3e248

Browse files
committed
feat(p4): Add method to set the pins for SDIO to WiFi chip
1 parent 9e61fa7 commit 0b3e248

File tree

2 files changed

+67
-24
lines changed

2 files changed

+67
-24
lines changed

libraries/WiFi/src/WiFiGeneric.cpp

Lines changed: 62 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -246,29 +246,67 @@ extern "C" {
246246
extern esp_err_t esp_hosted_init();
247247
extern esp_err_t esp_hosted_deinit();
248248
};
249+
typedef struct {
250+
uint8_t pin_clk;
251+
uint8_t pin_cmd;
252+
uint8_t pin_d0;
253+
uint8_t pin_d1;
254+
uint8_t pin_d2;
255+
uint8_t pin_d3;
256+
uint8_t pin_reset;
257+
} sdio_pin_config_t;
258+
249259
static bool hosted_initialized = false;
260+
static sdio_pin_config_t sdio_pin_config = {
261+
#ifdef BOARD_HAS_SDIO_ESP_HOSTED
262+
.pin_clk = BOARD_SDIO_ESP_HOSTED_CLK,
263+
.pin_cmd = BOARD_SDIO_ESP_HOSTED_CMD,
264+
.pin_d0 = BOARD_SDIO_ESP_HOSTED_D0,
265+
.pin_d1 = BOARD_SDIO_ESP_HOSTED_D1,
266+
.pin_d2 = BOARD_SDIO_ESP_HOSTED_D2,
267+
.pin_d3 = BOARD_SDIO_ESP_HOSTED_D3,
268+
.pin_reset = BOARD_SDIO_ESP_HOSTED_RESET
269+
#else
270+
.pin_clk = CONFIG_ESP_SDIO_PIN_CLK,
271+
.pin_cmd = CONFIG_ESP_SDIO_PIN_CMD,
272+
.pin_d0 = CONFIG_ESP_SDIO_PIN_D0,
273+
.pin_d1 = CONFIG_ESP_SDIO_PIN_D1,
274+
.pin_d2 = CONFIG_ESP_SDIO_PIN_D2,
275+
.pin_d3 = CONFIG_ESP_SDIO_PIN_D3,
276+
.pin_reset = CONFIG_ESP_SDIO_GPIO_RESET_SLAVE
277+
#endif
278+
};
279+
280+
bool WiFiGenericClass::setPins(int8_t clk, int8_t cmd, int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t rst) {
281+
if (clk < 0 || cmd < 0 || d0 < 0 || d1 < 0 || d2 < 0 || d3 < 0 || rst < 0) {
282+
log_e("All SDIO pins must be defined");
283+
return false;
284+
}
285+
if (hosted_initialized) {
286+
log_e("SDIO pins must be set before WiFi is initialized");
287+
return false;
288+
}
289+
sdio_pin_config.pin_clk = clk;
290+
sdio_pin_config.pin_cmd = cmd;
291+
sdio_pin_config.pin_d0 = d0;
292+
sdio_pin_config.pin_d1 = d1;
293+
sdio_pin_config.pin_d2 = d2;
294+
sdio_pin_config.pin_d3 = d3;
295+
sdio_pin_config.pin_reset = rst;
296+
return true;
297+
}
250298

251299
static bool wifiHostedInit() {
252300
if (!hosted_initialized) {
253301
hosted_initialized = true;
254302
struct esp_hosted_sdio_config conf = INIT_DEFAULT_HOST_SDIO_CONFIG();
255-
#ifdef BOARD_HAS_SDIO_ESP_HOSTED
256-
conf.pin_clk.pin = BOARD_SDIO_ESP_HOSTED_CLK;
257-
conf.pin_cmd.pin = BOARD_SDIO_ESP_HOSTED_CMD;
258-
conf.pin_d0.pin = BOARD_SDIO_ESP_HOSTED_D0;
259-
conf.pin_d1.pin = BOARD_SDIO_ESP_HOSTED_D1;
260-
conf.pin_d2.pin = BOARD_SDIO_ESP_HOSTED_D2;
261-
conf.pin_d3.pin = BOARD_SDIO_ESP_HOSTED_D3;
262-
conf.pin_reset.pin = BOARD_SDIO_ESP_HOSTED_RESET;
263-
#else
264-
conf.pin_clk.pin = CONFIG_ESP_SDIO_PIN_CLK;
265-
conf.pin_cmd.pin = CONFIG_ESP_SDIO_PIN_CMD;
266-
conf.pin_d0.pin = CONFIG_ESP_SDIO_PIN_D0;
267-
conf.pin_d1.pin = CONFIG_ESP_SDIO_PIN_D1;
268-
conf.pin_d2.pin = CONFIG_ESP_SDIO_PIN_D2;
269-
conf.pin_d3.pin = CONFIG_ESP_SDIO_PIN_D3;
270-
conf.pin_reset.pin = CONFIG_ESP_SDIO_GPIO_RESET_SLAVE;
271-
#endif
303+
conf.pin_clk.pin = sdio_pin_config.pin_clk;
304+
conf.pin_cmd.pin = sdio_pin_config.pin_cmd;
305+
conf.pin_d0.pin = sdio_pin_config.pin_d0;
306+
conf.pin_d1.pin = sdio_pin_config.pin_d1;
307+
conf.pin_d2.pin = sdio_pin_config.pin_d2;
308+
conf.pin_d3.pin = sdio_pin_config.pin_d3;
309+
conf.pin_reset.pin = sdio_pin_config.pin_reset;
272310
// esp_hosted_sdio_set_config() will fail on second attempt but here temporarily to not cause exception on reinit
273311
if (esp_hosted_sdio_set_config(&conf) != ESP_OK || esp_hosted_init() != ESP_OK) {
274312
log_e("esp_hosted_init failed!");
@@ -279,13 +317,13 @@ static bool wifiHostedInit() {
279317
}
280318
// Attach pins to PeriMan here
281319
// Slave chip model is CONFIG_IDF_SLAVE_TARGET
282-
// CONFIG_ESP_SDIO_PIN_CMD
283-
// CONFIG_ESP_SDIO_PIN_CLK
284-
// CONFIG_ESP_SDIO_PIN_D0
285-
// CONFIG_ESP_SDIO_PIN_D1
286-
// CONFIG_ESP_SDIO_PIN_D2
287-
// CONFIG_ESP_SDIO_PIN_D3
288-
// CONFIG_ESP_SDIO_GPIO_RESET_SLAVE
320+
// sdio_pin_config.pin_clk
321+
// sdio_pin_config.pin_cmd
322+
// sdio_pin_config.pin_d0
323+
// sdio_pin_config.pin_d1
324+
// sdio_pin_config.pin_d2
325+
// sdio_pin_config.pin_d3
326+
// sdio_pin_config.pin_reset
289327

290328
return true;
291329
}

libraries/WiFi/src/WiFiGeneric.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ class WiFiGenericClass {
8282
public:
8383
WiFiGenericClass();
8484

85+
#if CONFIG_ESP_WIFI_REMOTE_ENABLED
86+
// Set SDIO pins for connection to external ESP MCU
87+
static bool setPins(int8_t clk, int8_t cmd, int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t rst);
88+
#endif
89+
8590
wifi_event_id_t onEvent(WiFiEventCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX);
8691
wifi_event_id_t onEvent(WiFiEventFuncCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX);
8792
wifi_event_id_t onEvent(WiFiEventSysCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX);

0 commit comments

Comments
 (0)