Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2592a7b

Browse files
me-no-devpre-commit-ci-lite[bot]
andauthored
feat(p4): Add method to set the pins for SDIO to WiFi chip (espressif#11513)
* feat(p4): Add method to set the pins for SDIO to WiFi chip * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 6e60f2f commit 2592a7b

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)

AltStyle によって変換されたページ (->オリジナル) /