@@ -246,29 +246,67 @@ extern "C" {
246246extern esp_err_t esp_hosted_init ();
247247extern 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+
249259static 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
251299static 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}
0 commit comments