@@ -246,19 +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- conf.pin_clk .pin = CONFIG_ESP_SDIO_PIN_CLK ;
256- conf.pin_cmd .pin = CONFIG_ESP_SDIO_PIN_CMD ;
257- conf.pin_d0 .pin = CONFIG_ESP_SDIO_PIN_D0 ;
258- conf.pin_d1 .pin = CONFIG_ESP_SDIO_PIN_D1 ;
259- conf.pin_d2 .pin = CONFIG_ESP_SDIO_PIN_D2 ;
260- conf.pin_d3 .pin = CONFIG_ESP_SDIO_PIN_D3 ;
261- // conf.pin_rst .pin = CONFIG_ESP_SDIO_GPIO_RESET_SLAVE ;
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 ;
262310 // esp_hosted_sdio_set_config() will fail on second attempt but here temporarily to not cause exception on reinit
263311 if (esp_hosted_sdio_set_config (&conf) != ESP_OK || esp_hosted_init () != ESP_OK) {
264312 log_e (" esp_hosted_init failed!" );
@@ -269,13 +317,13 @@ static bool wifiHostedInit() {
269317 }
270318 // Attach pins to PeriMan here
271319 // Slave chip model is CONFIG_IDF_SLAVE_TARGET
272- // CONFIG_ESP_SDIO_PIN_CMD
273- // CONFIG_ESP_SDIO_PIN_CLK
274- // CONFIG_ESP_SDIO_PIN_D0
275- // CONFIG_ESP_SDIO_PIN_D1
276- // CONFIG_ESP_SDIO_PIN_D2
277- // CONFIG_ESP_SDIO_PIN_D3
278- // 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
279327
280328 return true ;
281329}
@@ -308,7 +356,7 @@ bool wifiLowLevelInit(bool persistent) {
308356
309357 esp_err_t err = esp_wifi_init (&cfg);
310358 if (err) {
311- log_e (" esp_wifi_init %d " , err);
359+ log_e (" esp_wifi_init 0x%x: %s " , err, esp_err_to_name (err) );
312360 lowLevelInitDone = false ;
313361 return lowLevelInitDone;
314362 }
@@ -375,7 +423,7 @@ static bool espWiFiStart() {
375423 esp_err_t err = esp_wifi_start ();
376424 if (err != ESP_OK) {
377425 _esp_wifi_started = false ;
378- log_e (" esp_wifi_start %d " , err);
426+ log_e (" esp_wifi_start 0x%x: %s " , err, esp_err_to_name (err) );
379427 return _esp_wifi_started;
380428 }
381429 return _esp_wifi_started;
@@ -389,7 +437,7 @@ static bool espWiFiStop() {
389437 _esp_wifi_started = false ;
390438 err = esp_wifi_stop ();
391439 if (err) {
392- log_e (" Could not stop WiFi! %d " , err);
440+ log_e (" Could not stop WiFi! 0x%x: %s " , err, esp_err_to_name (err) );
393441 _esp_wifi_started = true ;
394442 return false ;
395443 }
@@ -478,7 +526,7 @@ int WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary)
478526
479527 ret = esp_wifi_get_country (&country);
480528 if (ret != ESP_OK) {
481- log_e (" Failed to get country info" );
529+ log_e (" Failed to get country info 0x%x: %s " , ret, esp_err_to_name (ret) );
482530 return ret;
483531 }
484532
@@ -492,7 +540,7 @@ int WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary)
492540
493541 ret = esp_wifi_set_channel (primary, secondary);
494542 if (ret != ESP_OK) {
495- log_e (" Failed to set channel" );
543+ log_e (" Failed to set channel 0x%x: %s " , ret, esp_err_to_name (ret) );
496544 return ret;
497545 }
498546
@@ -562,13 +610,13 @@ bool WiFiGenericClass::mode(wifi_mode_t m) {
562610 if (((m & WIFI_MODE_STA) != 0 ) && ((cm & WIFI_MODE_STA) == 0 )) {
563611 err = esp_netif_set_hostname (esp_netifs[ESP_IF_WIFI_STA], NetworkManager::getHostname ());
564612 if (err) {
565- log_e (" Could not set hostname! %d " , err);
613+ log_e (" Could not set hostname! 0x%x: %s " , err, esp_err_to_name (err) );
566614 return false ;
567615 }
568616 }
569617 err = esp_wifi_set_mode (m);
570618 if (err) {
571- log_e (" Could not set mode! %d " , err);
619+ log_e (" Could not set mode! 0x%x: %s " , err, esp_err_to_name (err) );
572620 return false ;
573621 }
574622
@@ -585,17 +633,44 @@ bool WiFiGenericClass::mode(wifi_mode_t m) {
585633 if (m & WIFI_MODE_STA) {
586634 err = esp_wifi_set_protocol (WIFI_IF_STA, WIFI_PROTOCOL_LR);
587635 if (err != ESP_OK) {
588- log_e (" Could not enable long range on STA! %d " , err);
636+ log_e (" Could not enable long range on STA! 0x%x: %s " , err, esp_err_to_name (err) );
589637 return false ;
590638 }
591639 }
592640 if (m & WIFI_MODE_AP) {
593641 err = esp_wifi_set_protocol (WIFI_IF_AP, WIFI_PROTOCOL_LR);
594642 if (err != ESP_OK) {
595- log_e (" Could not enable long range on AP! %d " , err);
643+ log_e (" Could not enable long range on AP! 0x%x: %s " , err, esp_err_to_name (err) );
596644 return false ;
597645 }
598646 }
647+ } else {
648+ #if CONFIG_SOC_WIFI_HE_SUPPORT
649+ #define WIFI_PROTOCOL_DEFAULT (WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N | WIFI_PROTOCOL_11AX)
650+ #else
651+ #define WIFI_PROTOCOL_DEFAULT (WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N)
652+ #endif
653+ uint32_t current_protocol = 0 ;
654+ if (m & WIFI_MODE_STA) {
655+ err = esp_wifi_get_protocol (WIFI_IF_STA, (uint8_t *)¤t_protocol);
656+ if (err == ESP_OK && current_protocol == WIFI_PROTOCOL_LR) {
657+ log_v (" Disabling long range on STA" );
658+ err = esp_wifi_set_protocol (WIFI_IF_STA, WIFI_PROTOCOL_DEFAULT);
659+ if (err != ESP_OK) {
660+ log_e (" Could not disable long range on STA! 0x%x: %s" , err, esp_err_to_name (err));
661+ }
662+ }
663+ }
664+ if (m & WIFI_MODE_AP) {
665+ err = esp_wifi_get_protocol (WIFI_IF_AP, (uint8_t *)¤t_protocol);
666+ if (err == ESP_OK && current_protocol == WIFI_PROTOCOL_LR) {
667+ log_v (" Disabling long range on AP" );
668+ err = esp_wifi_set_protocol (WIFI_IF_AP, WIFI_PROTOCOL_DEFAULT);
669+ if (err != ESP_OK) {
670+ log_e (" Could not disable long range on AP! 0x%x: %s" , err, esp_err_to_name (err));
671+ }
672+ }
673+ }
599674 }
600675 if (!espWiFiStart ()) {
601676 return false ;
@@ -683,8 +758,9 @@ bool WiFiGenericClass::setSleep(wifi_ps_type_t sleepType) {
683758 if (sleepType != _sleepEnabled) {
684759 _sleepEnabled = sleepType;
685760 if (WiFi.STA .started ()) {
686- if (esp_wifi_set_ps (_sleepEnabled) != ESP_OK) {
687- log_e (" esp_wifi_set_ps failed!" );
761+ esp_err_t err = esp_wifi_set_ps (_sleepEnabled);
762+ if (err != ESP_OK) {
763+ log_e (" esp_wifi_set_ps failed!: 0x%x: %s" , err, esp_err_to_name (err));
688764 return false ;
689765 }
690766 }
@@ -748,8 +824,9 @@ bool WiFiGenericClass::initiateFTM(uint8_t frm_count, uint16_t burst_period, uin
748824 memcpy (ftmi_cfg.resp_mac , mac, 6 );
749825 }
750826 // Request FTM session with the Responder
751- if (ESP_OK != esp_wifi_ftm_initiate_session (&ftmi_cfg)) {
752- log_e (" Failed to initiate FTM session" );
827+ esp_err_t err = esp_wifi_ftm_initiate_session (&ftmi_cfg);
828+ if (ESP_OK != err) {
829+ log_e (" Failed to initiate FTM session: 0x%x: %s" , err, esp_err_to_name (err));
753830 return false ;
754831 }
755832 return true ;
@@ -768,8 +845,9 @@ bool WiFiGenericClass::setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2
768845
769846 esp_phy_ant_gpio_config_t wifi_ant_io;
770847
771- if (ESP_OK != esp_phy_get_ant_gpio (&wifi_ant_io)) {
772- log_e (" Failed to get antenna configuration" );
848+ esp_err_t err = esp_phy_get_ant_gpio (&wifi_ant_io);
849+ if (ESP_OK != err) {
850+ log_e (" Failed to get antenna configuration: 0x%x: %s" , err, esp_err_to_name (err));
773851 return false ;
774852 }
775853
@@ -778,8 +856,9 @@ bool WiFiGenericClass::setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2
778856 wifi_ant_io.gpio_cfg [1 ].gpio_num = gpio_ant2;
779857 wifi_ant_io.gpio_cfg [1 ].gpio_select = 1 ;
780858
781- if (ESP_OK != esp_phy_set_ant_gpio (&wifi_ant_io)) {
782- log_e (" Failed to set antenna GPIO configuration" );
859+ err = esp_phy_set_ant_gpio (&wifi_ant_io);
860+ if (ESP_OK != err) {
861+ log_e (" Failed to set antenna GPIO configuration: 0x%x: %s" , err, esp_err_to_name (err));
783862 return false ;
784863 }
785864
@@ -827,8 +906,9 @@ bool WiFiGenericClass::setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2
827906 }
828907
829908set_ant:
830- if (ESP_OK != esp_phy_set_ant (&ant_config)) {
831- log_e (" Failed to set antenna configuration" );
909+ err = esp_phy_set_ant (&ant_config);
910+ if (ESP_OK != err) {
911+ log_e (" Failed to set antenna configuration: 0x%x: %s" , err, esp_err_to_name (err));
832912 return false ;
833913 }
834914#endif
0 commit comments