@@ -246,19 +246,67 @@ extern "C" {
246
246
extern esp_err_t esp_hosted_init ();
247
247
extern esp_err_t esp_hosted_deinit ();
248
248
};
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
+
249
259
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
+ }
250
298
251
299
static bool wifiHostedInit () {
252
300
if (!hosted_initialized) {
253
301
hosted_initialized = true ;
254
302
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 ;
262
310
// esp_hosted_sdio_set_config() will fail on second attempt but here temporarily to not cause exception on reinit
263
311
if (esp_hosted_sdio_set_config (&conf) != ESP_OK || esp_hosted_init () != ESP_OK) {
264
312
log_e (" esp_hosted_init failed!" );
@@ -269,13 +317,13 @@ static bool wifiHostedInit() {
269
317
}
270
318
// Attach pins to PeriMan here
271
319
// 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
279
327
280
328
return true ;
281
329
}
@@ -308,7 +356,7 @@ bool wifiLowLevelInit(bool persistent) {
308
356
309
357
esp_err_t err = esp_wifi_init (&cfg);
310
358
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) );
312
360
lowLevelInitDone = false ;
313
361
return lowLevelInitDone;
314
362
}
@@ -375,7 +423,7 @@ static bool espWiFiStart() {
375
423
esp_err_t err = esp_wifi_start ();
376
424
if (err != ESP_OK) {
377
425
_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) );
379
427
return _esp_wifi_started;
380
428
}
381
429
return _esp_wifi_started;
@@ -389,7 +437,7 @@ static bool espWiFiStop() {
389
437
_esp_wifi_started = false ;
390
438
err = esp_wifi_stop ();
391
439
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) );
393
441
_esp_wifi_started = true ;
394
442
return false ;
395
443
}
@@ -478,7 +526,7 @@ int WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary)
478
526
479
527
ret = esp_wifi_get_country (&country);
480
528
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) );
482
530
return ret;
483
531
}
484
532
@@ -492,7 +540,7 @@ int WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary)
492
540
493
541
ret = esp_wifi_set_channel (primary, secondary);
494
542
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) );
496
544
return ret;
497
545
}
498
546
@@ -562,13 +610,13 @@ bool WiFiGenericClass::mode(wifi_mode_t m) {
562
610
if (((m & WIFI_MODE_STA) != 0 ) && ((cm & WIFI_MODE_STA) == 0 )) {
563
611
err = esp_netif_set_hostname (esp_netifs[ESP_IF_WIFI_STA], NetworkManager::getHostname ());
564
612
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) );
566
614
return false ;
567
615
}
568
616
}
569
617
err = esp_wifi_set_mode (m);
570
618
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) );
572
620
return false ;
573
621
}
574
622
@@ -585,17 +633,44 @@ bool WiFiGenericClass::mode(wifi_mode_t m) {
585
633
if (m & WIFI_MODE_STA) {
586
634
err = esp_wifi_set_protocol (WIFI_IF_STA, WIFI_PROTOCOL_LR);
587
635
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) );
589
637
return false ;
590
638
}
591
639
}
592
640
if (m & WIFI_MODE_AP) {
593
641
err = esp_wifi_set_protocol (WIFI_IF_AP, WIFI_PROTOCOL_LR);
594
642
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) );
596
644
return false ;
597
645
}
598
646
}
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
+ }
599
674
}
600
675
if (!espWiFiStart ()) {
601
676
return false ;
@@ -683,8 +758,9 @@ bool WiFiGenericClass::setSleep(wifi_ps_type_t sleepType) {
683
758
if (sleepType != _sleepEnabled) {
684
759
_sleepEnabled = sleepType;
685
760
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));
688
764
return false ;
689
765
}
690
766
}
@@ -748,8 +824,9 @@ bool WiFiGenericClass::initiateFTM(uint8_t frm_count, uint16_t burst_period, uin
748
824
memcpy (ftmi_cfg.resp_mac , mac, 6 );
749
825
}
750
826
// 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));
753
830
return false ;
754
831
}
755
832
return true ;
@@ -768,8 +845,9 @@ bool WiFiGenericClass::setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2
768
845
769
846
esp_phy_ant_gpio_config_t wifi_ant_io;
770
847
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));
773
851
return false ;
774
852
}
775
853
@@ -778,8 +856,9 @@ bool WiFiGenericClass::setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2
778
856
wifi_ant_io.gpio_cfg [1 ].gpio_num = gpio_ant2;
779
857
wifi_ant_io.gpio_cfg [1 ].gpio_select = 1 ;
780
858
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));
783
862
return false ;
784
863
}
785
864
@@ -827,8 +906,9 @@ bool WiFiGenericClass::setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2
827
906
}
828
907
829
908
set_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));
832
912
return false ;
833
913
}
834
914
#endif
0 commit comments