From b204c36b572373fd371d129df6173a2ec5ff55ab Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 22 Mar 2024 11:23:04 -0300 Subject: [PATCH 1/8] Add method to set the WiFi radio channel --- libraries/WiFi/src/WiFiGeneric.cpp | 21 +++++++++++++++++++++ libraries/WiFi/src/WiFiGeneric.h | 1 + 2 files changed, 22 insertions(+) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 2fade00e450..12a6aa8b90d 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -1269,6 +1269,27 @@ int32_t WiFiGenericClass::channel(void) return primaryChan; } +/** + * Set the WiFi channel configuration + * @param primaryChan primary channel. Depending on the region, not all channels may be available. + * @param secondChan secondary channel (WIFI_SECOND_CHAN_NONE, WIFI_SECOND_CHAN_ABOVE, WIFI_SECOND_CHAN_BELOW) + */ +void WiFiGenericClass::channel(uint8_t primary, wifi_second_chan_t secondary) +{ + wifi_country_t country; + esp_wifi_get_country(&country); + + uint8_t min_chan = country.schan; + uint8_t max_chan = min_chan + country.nchan - 1; + + if(primary < min_chan || primary > max_chan){ + log_e("Invalid primary channel: %d", primary); + return; + } + + esp_wifi_set_channel(primary, secondary); +} + /** * store WiFi config in SDK flash area * @param persistent diff --git a/libraries/WiFi/src/WiFiGeneric.h b/libraries/WiFi/src/WiFiGeneric.h index 3de43905416..0bdfc6878cc 100644 --- a/libraries/WiFi/src/WiFiGeneric.h +++ b/libraries/WiFi/src/WiFiGeneric.h @@ -183,6 +183,7 @@ class WiFiGenericClass static int waitStatusBits(int bits, uint32_t timeout_ms); int32_t channel(void); + void channel(uint8_t primary, wifi_second_chan_t secondary=WIFI_SECOND_CHAN_NONE); void persistent(bool persistent); void enableLongRange(bool enable); From b9090e7c0a5e8f68147f3995ce59d0d12441ac8f Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 22 Mar 2024 11:33:52 -0300 Subject: [PATCH 2/8] Fix Tab --- libraries/WiFi/src/WiFiGeneric.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/WiFi/src/WiFiGeneric.h b/libraries/WiFi/src/WiFiGeneric.h index 0bdfc6878cc..3d813454dbb 100644 --- a/libraries/WiFi/src/WiFiGeneric.h +++ b/libraries/WiFi/src/WiFiGeneric.h @@ -183,7 +183,7 @@ class WiFiGenericClass static int waitStatusBits(int bits, uint32_t timeout_ms); int32_t channel(void); - void channel(uint8_t primary, wifi_second_chan_t secondary=WIFI_SECOND_CHAN_NONE); + void channel(uint8_t primary, wifi_second_chan_t secondary=WIFI_SECOND_CHAN_NONE); void persistent(bool persistent); void enableLongRange(bool enable); From e1337aaef1fbaf9a3c7be773fe673d3b24b35e33 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 22 Mar 2024 11:36:14 -0300 Subject: [PATCH 3/8] Add check --- libraries/WiFi/src/WiFiGeneric.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 12a6aa8b90d..3f903d08cfe 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -1277,7 +1277,11 @@ int32_t WiFiGenericClass::channel(void) void WiFiGenericClass::channel(uint8_t primary, wifi_second_chan_t secondary) { wifi_country_t country; - esp_wifi_get_country(&country); + + if (esp_wifi_get_country(&country) != ESP_OK) { + log_e("Failed to get country info"); + return; + } uint8_t min_chan = country.schan; uint8_t max_chan = min_chan + country.nchan - 1; From 0710145afa5395df26fa21b5039290f628e7907c Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:12:38 -0300 Subject: [PATCH 4/8] Change name --- libraries/WiFi/src/WiFiGeneric.cpp | 2 +- libraries/WiFi/src/WiFiGeneric.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 3f903d08cfe..88f1256c988 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -1274,7 +1274,7 @@ int32_t WiFiGenericClass::channel(void) * @param primaryChan primary channel. Depending on the region, not all channels may be available. * @param secondChan secondary channel (WIFI_SECOND_CHAN_NONE, WIFI_SECOND_CHAN_ABOVE, WIFI_SECOND_CHAN_BELOW) */ -void WiFiGenericClass::channel(uint8_t primary, wifi_second_chan_t secondary) +void WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary) { wifi_country_t country; diff --git a/libraries/WiFi/src/WiFiGeneric.h b/libraries/WiFi/src/WiFiGeneric.h index 3d813454dbb..372e7550e88 100644 --- a/libraries/WiFi/src/WiFiGeneric.h +++ b/libraries/WiFi/src/WiFiGeneric.h @@ -183,7 +183,7 @@ class WiFiGenericClass static int waitStatusBits(int bits, uint32_t timeout_ms); int32_t channel(void); - void channel(uint8_t primary, wifi_second_chan_t secondary=WIFI_SECOND_CHAN_NONE); + void setChannel(uint8_t primary, wifi_second_chan_t secondary=WIFI_SECOND_CHAN_NONE); void persistent(bool persistent); void enableLongRange(bool enable); From 621eaae733bb18832dbac29982c4f3aa372c9fe5 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:18:34 -0300 Subject: [PATCH 5/8] Fix description --- libraries/WiFi/src/WiFiGeneric.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 88f1256c988..6ee5d18e141 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -1271,8 +1271,8 @@ int32_t WiFiGenericClass::channel(void) /** * Set the WiFi channel configuration - * @param primaryChan primary channel. Depending on the region, not all channels may be available. - * @param secondChan secondary channel (WIFI_SECOND_CHAN_NONE, WIFI_SECOND_CHAN_ABOVE, WIFI_SECOND_CHAN_BELOW) + * @param primary primary channel. Depending on the region, not all channels may be available. + * @param secondary secondary channel (WIFI_SECOND_CHAN_NONE, WIFI_SECOND_CHAN_ABOVE, WIFI_SECOND_CHAN_BELOW) */ void WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary) { From c12417c5f113a42baad1f44c1c0edbdb8d1b487e Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Sun, 24 Mar 2024 13:16:58 -0300 Subject: [PATCH 6/8] Add check --- libraries/WiFi/src/WiFiGeneric.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 6ee5d18e141..d5fced401cb 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -1291,7 +1291,9 @@ void WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary) return; } - esp_wifi_set_channel(primary, secondary); + if (esp_wifi_set_channel(primary, secondary)) { + log_e("Failed to set channel"); + } } /** From 7ccf60961d918a3af04ae1612503c2ba0aa2b8fe Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Sun, 24 Mar 2024 13:41:32 -0300 Subject: [PATCH 7/8] Add error return --- libraries/WiFi/src/WiFiGeneric.cpp | 17 ++++++++++++----- libraries/WiFi/src/WiFiGeneric.h | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index d5fced401cb..ea774059fb8 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -1273,14 +1273,17 @@ int32_t WiFiGenericClass::channel(void) * Set the WiFi channel configuration * @param primary primary channel. Depending on the region, not all channels may be available. * @param secondary secondary channel (WIFI_SECOND_CHAN_NONE, WIFI_SECOND_CHAN_ABOVE, WIFI_SECOND_CHAN_BELOW) + * @return 0 on success, otherwise error */ -void WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary) +int WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary) { wifi_country_t country; + esp_err_t ret; - if (esp_wifi_get_country(&country) != ESP_OK) { + ret = esp_wifi_get_country(&country); + if (ret != ESP_OK) { log_e("Failed to get country info"); - return; + return ret; } uint8_t min_chan = country.schan; @@ -1288,12 +1291,16 @@ void WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary) if(primary < min_chan || primary > max_chan){ log_e("Invalid primary channel: %d", primary); - return; + return ESP_ERR_INVALID_ARG; } - if (esp_wifi_set_channel(primary, secondary)) { + ret = esp_wifi_set_channel(primary, secondary); + if (ret != ESP_OK) { log_e("Failed to set channel"); + return ret; } + + return ESP_OK; } /** diff --git a/libraries/WiFi/src/WiFiGeneric.h b/libraries/WiFi/src/WiFiGeneric.h index 372e7550e88..d48ee0a9de8 100644 --- a/libraries/WiFi/src/WiFiGeneric.h +++ b/libraries/WiFi/src/WiFiGeneric.h @@ -183,7 +183,7 @@ class WiFiGenericClass static int waitStatusBits(int bits, uint32_t timeout_ms); int32_t channel(void); - void setChannel(uint8_t primary, wifi_second_chan_t secondary=WIFI_SECOND_CHAN_NONE); + int setChannel(uint8_t primary, wifi_second_chan_t secondary=WIFI_SECOND_CHAN_NONE); void persistent(bool persistent); void enableLongRange(bool enable); From 7d73ef2746fa3a6c4751d0d7ed5ef35289e4a85d Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Sun, 24 Mar 2024 13:53:16 -0300 Subject: [PATCH 8/8] Improve error message --- libraries/WiFi/src/WiFiGeneric.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index ea774059fb8..c827b3c4868 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -1290,7 +1290,7 @@ int WiFiGenericClass::setChannel(uint8_t primary, wifi_second_chan_t secondary) uint8_t max_chan = min_chan + country.nchan - 1; if(primary < min_chan || primary > max_chan){ - log_e("Invalid primary channel: %d", primary); + log_e("Invalid primary channel: %d. Valid range is %d-%d for country %s", primary, min_chan, max_chan, country.cc); return ESP_ERR_INVALID_ARG; }