From 18f20193009096a99f66a558331a3b46bce02f65 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 11 Nov 2021 17:04:35 -0600 Subject: [PATCH 1/6] Set Station MAC address & validate connect SSID len --- locale/circuitpython.pot | 16 ++++++++++++ ports/espressif/common-hal/wifi/Radio.c | 10 ++++++++ shared-bindings/wifi/Radio.c | 33 ++++++++++++++++++++----- shared-bindings/wifi/Radio.h | 1 + 4 files changed, 54 insertions(+), 6 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 70432cff8e..456f9ac58b 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -682,6 +682,10 @@ msgstr "" msgid "Can't set CCCD on local Characteristic" msgstr "" +#: ports/espressif/common-hal/wifi/Radio.c +msgid "Can't change MAC address while station is started" +msgstr "" + #: shared-bindings/storage/__init__.c shared-bindings/usb_cdc/__init__.c #: shared-bindings/usb_hid/__init__.c shared-bindings/usb_midi/__init__.c msgid "Cannot change USB devices now" @@ -1349,6 +1353,10 @@ msgstr "" msgid "Invalid format chunk size" msgstr "" +#: shared-bindings/wifi/Radio.c +msgid ""Invalid MAC address"" +msgstr "" + #: supervisor/shared/safe_mode.c msgid "Invalid memory access." msgstr "" @@ -1461,6 +1469,10 @@ msgstr "" msgid "Layer must be a Group or TileGrid subclass." msgstr "" +#: ports/espressif/common-hal/wifi/Radio.c +msgid "MAC address can't be a multicast address" +msgstr "" + #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c msgid "MAC address was invalid" msgstr "" @@ -4445,6 +4457,10 @@ msgstr "" msgid "wifi is not enabled" msgstr "" +#: shared-bindings/wifi/Radio.c +msgid "wifi ssid must be between 1 and 32 characters" +msgstr "" + #: shared-bindings/_bleio/Adapter.c msgid "window must be <= interval" msgstr "" diff --git a/ports/espressif/common-hal/wifi/Radio.c b/ports/espressif/common-hal/wifi/Radio.c index bf75cb7624..2861f64d76 100644 --- a/ports/espressif/common-hal/wifi/Radio.c +++ b/ports/espressif/common-hal/wifi/Radio.c @@ -120,6 +120,16 @@ mp_obj_t common_hal_wifi_radio_get_mac_address(wifi_radio_obj_t *self) { return mp_obj_new_bytes(mac, MAC_ADDRESS_LENGTH); } +void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const uint8_t *mac) { + if (self->sta_mode) { + mp_raise_RuntimeError(translate("Can't change MAC address while station is started")); + } + if ((mac[0] & 0b1) == 0b1) { + mp_raise_RuntimeError(translate("MAC address can't be a multicast address")); + } + esp_wifi_set_mac(ESP_IF_WIFI_STA, mac); +} + mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) { uint8_t mac[MAC_ADDRESS_LENGTH]; esp_wifi_get_mac(ESP_IF_WIFI_AP, mac); diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index 9f6c62fce9..0828aac6b5 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -33,6 +33,8 @@ #include "py/runtime.h" #include "py/objproperty.h" +#define MAC_ADDRESS_LENGTH 6 + //| class Radio: //| """Native wifi radio. //| @@ -115,23 +117,38 @@ const mp_obj_property_t wifi_radio_hostname_obj = { MP_ROM_NONE}, }; -//| mac_address: bytes -//| """MAC address of the wifi radio station. (read-only)""" +//| mac_address: ReadableBuffer +//| """MAC address of the wifi radio station. +//| Can only be set while the Station is not started.""" //| -STATIC mp_obj_t wifi_radio_get_mac_address(mp_obj_t self) { +STATIC mp_obj_t wifi_radio_get_mac_address(mp_obj_t self_in) { + wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in); return MP_OBJ_FROM_PTR(common_hal_wifi_radio_get_mac_address(self)); - } MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_mac_address_obj, wifi_radio_get_mac_address); +STATIC mp_obj_t wifi_radio_set_mac_address(mp_obj_t self_in, mp_obj_t mac_address_in) { + mp_buffer_info_t mac_address; + mp_get_buffer_raise(mac_address_in, &mac_address, MP_BUFFER_READ); + + if (mac_address.len != MAC_ADDRESS_LENGTH) { + mp_raise_ValueError(translate("Invalid MAC address")); + } + + wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in); + common_hal_wifi_radio_set_mac_address(self, mac_address.buf); + + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_2(wifi_radio_set_mac_address_obj, wifi_radio_set_mac_address); + const mp_obj_property_t wifi_radio_mac_address_obj = { .base.type = &mp_type_property, .proxy = { (mp_obj_t)&wifi_radio_get_mac_address_obj, - MP_ROM_NONE, + (mp_obj_t)&wifi_radio_set_mac_address_obj, MP_ROM_NONE }, }; - //| mac_address_ap: bytes //| """MAC address of the wifi radio access point. (read-only)""" //| @@ -307,7 +324,11 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m } mp_buffer_info_t ssid; + ssid.len = 0; mp_get_buffer_raise(args[ARG_ssid].u_obj, &ssid, MP_BUFFER_READ); + if (ssid.len > 32) { + mp_raise_ValueError(translate("wifi ssid must be between 1 and 32 characters")); + } mp_buffer_info_t password; password.len = 0; diff --git a/shared-bindings/wifi/Radio.h b/shared-bindings/wifi/Radio.h index eeeffa2f94..19b3ff55e1 100644 --- a/shared-bindings/wifi/Radio.h +++ b/shared-bindings/wifi/Radio.h @@ -78,6 +78,7 @@ extern mp_obj_t common_hal_wifi_radio_get_hostname(wifi_radio_obj_t *self); extern void common_hal_wifi_radio_set_hostname(wifi_radio_obj_t *self, const char *hostname); extern mp_obj_t common_hal_wifi_radio_get_mac_address(wifi_radio_obj_t *self); +extern void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const uint8_t *mac); extern mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self); extern mp_obj_t common_hal_wifi_radio_start_scanning_networks(wifi_radio_obj_t *self); From 85301cb0e544b4e7203f13659b1c305e840bc97d Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 11 Nov 2021 17:26:07 -0600 Subject: [PATCH 2/6] fix typo --- locale/circuitpython.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 456f9ac58b..2b78effef8 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -1354,7 +1354,7 @@ msgid "Invalid format chunk size" msgstr "" #: shared-bindings/wifi/Radio.c -msgid ""Invalid MAC address"" +msgid "Invalid MAC address" msgstr "" #: supervisor/shared/safe_mode.c From bb8e9ef483f0abd4fca8aefd46e2fdbe5e3b8f26 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 11 Nov 2021 21:54:41 -0600 Subject: [PATCH 3/6] tweak exception messages (re-tested) --- locale/circuitpython.pot | 4 ++-- ports/espressif/common-hal/wifi/Radio.c | 2 +- shared-bindings/wifi/Radio.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 2b78effef8..1e528a4aa0 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -683,7 +683,7 @@ msgid "Can't set CCCD on local Characteristic" msgstr "" #: ports/espressif/common-hal/wifi/Radio.c -msgid "Can't change MAC address while station is started" +msgid "Can't change MAC address while station is connected" msgstr "" #: shared-bindings/storage/__init__.c shared-bindings/usb_cdc/__init__.c @@ -4458,7 +4458,7 @@ msgid "wifi is not enabled" msgstr "" #: shared-bindings/wifi/Radio.c -msgid "wifi ssid must be between 1 and 32 characters" +msgid "wifi ssid can't be more than 32 bytes" msgstr "" #: shared-bindings/_bleio/Adapter.c diff --git a/ports/espressif/common-hal/wifi/Radio.c b/ports/espressif/common-hal/wifi/Radio.c index 2861f64d76..ad7a5d747c 100644 --- a/ports/espressif/common-hal/wifi/Radio.c +++ b/ports/espressif/common-hal/wifi/Radio.c @@ -122,7 +122,7 @@ mp_obj_t common_hal_wifi_radio_get_mac_address(wifi_radio_obj_t *self) { void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const uint8_t *mac) { if (self->sta_mode) { - mp_raise_RuntimeError(translate("Can't change MAC address while station is started")); + mp_raise_RuntimeError(translate("Can't change MAC address while station is connected")); } if ((mac[0] & 0b1) == 0b1) { mp_raise_RuntimeError(translate("MAC address can't be a multicast address")); diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index 0828aac6b5..36c75def9d 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -327,7 +327,7 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m ssid.len = 0; mp_get_buffer_raise(args[ARG_ssid].u_obj, &ssid, MP_BUFFER_READ); if (ssid.len > 32) { - mp_raise_ValueError(translate("wifi ssid must be between 1 and 32 characters")); + mp_raise_ValueError(translate("wifi ssid can't be more than 32 bytes")); } mp_buffer_info_t password; From e4f06f69cdb566c10ae3eb24ced066ba76e6d2f7 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 11 Nov 2021 23:23:52 -0600 Subject: [PATCH 4/6] maybe fewer bytes --- locale/circuitpython.pot | 6 +++--- ports/espressif/common-hal/wifi/Radio.c | 4 ++-- shared-bindings/wifi/Radio.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 1e528a4aa0..33cd0d2ab9 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -683,7 +683,7 @@ msgid "Can't set CCCD on local Characteristic" msgstr "" #: ports/espressif/common-hal/wifi/Radio.c -msgid "Can't change MAC address while station is connected" +msgid "Can't set MAC address while connected" msgstr "" #: shared-bindings/storage/__init__.c shared-bindings/usb_cdc/__init__.c @@ -1470,7 +1470,7 @@ msgid "Layer must be a Group or TileGrid subclass." msgstr "" #: ports/espressif/common-hal/wifi/Radio.c -msgid "MAC address can't be a multicast address" +msgid "Invalid multicast MAC address" msgstr "" #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c @@ -4458,7 +4458,7 @@ msgid "wifi is not enabled" msgstr "" #: shared-bindings/wifi/Radio.c -msgid "wifi ssid can't be more than 32 bytes" +msgid "ssid can't be more than 32 bytes" msgstr "" #: shared-bindings/_bleio/Adapter.c diff --git a/ports/espressif/common-hal/wifi/Radio.c b/ports/espressif/common-hal/wifi/Radio.c index ad7a5d747c..119731bba0 100644 --- a/ports/espressif/common-hal/wifi/Radio.c +++ b/ports/espressif/common-hal/wifi/Radio.c @@ -122,10 +122,10 @@ mp_obj_t common_hal_wifi_radio_get_mac_address(wifi_radio_obj_t *self) { void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const uint8_t *mac) { if (self->sta_mode) { - mp_raise_RuntimeError(translate("Can't change MAC address while station is connected")); + mp_raise_RuntimeError(translate("Can't set MAC address while connected")); } if ((mac[0] & 0b1) == 0b1) { - mp_raise_RuntimeError(translate("MAC address can't be a multicast address")); + mp_raise_RuntimeError(translate("Invalid multicast MAC address")); } esp_wifi_set_mac(ESP_IF_WIFI_STA, mac); } diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index 36c75def9d..f5bbb4c210 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -327,7 +327,7 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m ssid.len = 0; mp_get_buffer_raise(args[ARG_ssid].u_obj, &ssid, MP_BUFFER_READ); if (ssid.len > 32) { - mp_raise_ValueError(translate("wifi ssid can't be more than 32 bytes")); + mp_raise_ValueError(translate("ssid can't be more than 32 bytes")); } mp_buffer_info_t password; From 31d45a3f3261eb7668c1b96d4bb5cf4e3000198c Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Fri, 12 Nov 2021 16:27:13 -0600 Subject: [PATCH 5/6] fix old bug that was masking new bug --- locale/circuitpython.pot | 2 +- ports/espressif/common-hal/wifi/Radio.c | 4 ++-- ports/espressif/common-hal/wifi/__init__.c | 2 +- shared-bindings/wifi/Radio.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 33cd0d2ab9..45f8b9e3e8 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -683,7 +683,7 @@ msgid "Can't set CCCD on local Characteristic" msgstr "" #: ports/espressif/common-hal/wifi/Radio.c -msgid "Can't set MAC address while connected" +msgid "Station must be started" msgstr "" #: shared-bindings/storage/__init__.c shared-bindings/usb_cdc/__init__.c diff --git a/ports/espressif/common-hal/wifi/Radio.c b/ports/espressif/common-hal/wifi/Radio.c index 119731bba0..d3feb261f7 100644 --- a/ports/espressif/common-hal/wifi/Radio.c +++ b/ports/espressif/common-hal/wifi/Radio.c @@ -121,8 +121,8 @@ mp_obj_t common_hal_wifi_radio_get_mac_address(wifi_radio_obj_t *self) { } void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const uint8_t *mac) { - if (self->sta_mode) { - mp_raise_RuntimeError(translate("Can't set MAC address while connected")); + if (!self->sta_mode) { + mp_raise_RuntimeError(translate("Station must be started")); } if ((mac[0] & 0b1) == 0b1) { mp_raise_RuntimeError(translate("Invalid multicast MAC address")); diff --git a/ports/espressif/common-hal/wifi/__init__.c b/ports/espressif/common-hal/wifi/__init__.c index 469b379dee..cb9b028aba 100644 --- a/ports/espressif/common-hal/wifi/__init__.c +++ b/ports/espressif/common-hal/wifi/__init__.c @@ -152,7 +152,7 @@ void common_hal_wifi_init(void) { mp_raise_RuntimeError(translate("Failed to init wifi")); } // set station mode to avoid the default SoftAP - esp_wifi_set_mode(WIFI_MODE_STA); + common_hal_wifi_radio_start_station(self); // start wifi common_hal_wifi_radio_set_enabled(self, true); } diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index f5bbb4c210..332188539f 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -118,8 +118,8 @@ const mp_obj_property_t wifi_radio_hostname_obj = { }; //| mac_address: ReadableBuffer -//| """MAC address of the wifi radio station. -//| Can only be set while the Station is not started.""" +//| """MAC address for the station. When the address is altered after interface is connected +//| the changes would only be reflected once the interface reconnects.""" //| STATIC mp_obj_t wifi_radio_get_mac_address(mp_obj_t self_in) { wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in); From 7a89f62e6a0b36da702e78513fd699325340460e Mon Sep 17 00:00:00 2001 From: microDev <70126934+microDev1@users.noreply.github.com> Date: Mon, 15 Nov 2021 20:48:00 +0530 Subject: [PATCH 6/6] update translation --- locale/circuitpython.pot | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 45f8b9e3e8..945ac7c336 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -682,10 +682,6 @@ msgstr "" msgid "Can't set CCCD on local Characteristic" msgstr "" -#: ports/espressif/common-hal/wifi/Radio.c -msgid "Station must be started" -msgstr "" - #: shared-bindings/storage/__init__.c shared-bindings/usb_cdc/__init__.c #: shared-bindings/usb_hid/__init__.c shared-bindings/usb_midi/__init__.c msgid "Cannot change USB devices now" @@ -1284,6 +1280,10 @@ msgstr "" msgid "Invalid DAC pin supplied" msgstr "" +#: shared-bindings/wifi/Radio.c +msgid "Invalid MAC address" +msgstr "" + #: shared-bindings/synthio/__init__.c msgid "Invalid MIDI file" msgstr "" @@ -1353,14 +1353,14 @@ msgstr "" msgid "Invalid format chunk size" msgstr "" -#: shared-bindings/wifi/Radio.c -msgid "Invalid MAC address" -msgstr "" - #: supervisor/shared/safe_mode.c msgid "Invalid memory access." msgstr "" +#: ports/espressif/common-hal/wifi/Radio.c +msgid "Invalid multicast MAC address" +msgstr "" + #: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c msgid "Invalid number of bits" msgstr "" @@ -1469,10 +1469,6 @@ msgstr "" msgid "Layer must be a Group or TileGrid subclass." msgstr "" -#: ports/espressif/common-hal/wifi/Radio.c -msgid "Invalid multicast MAC address" -msgstr "" - #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c msgid "MAC address was invalid" msgstr "" @@ -2146,6 +2142,10 @@ msgstr "" msgid "Stack size must be at least 256" msgstr "" +#: ports/espressif/common-hal/wifi/Radio.c +msgid "Station must be started" +msgstr "" + #: ports/raspberrypi/common-hal/audiopwmio/PWMAudioOut.c msgid "Stereo left must be on PWM channel A" msgstr "" @@ -3936,7 +3936,7 @@ msgid "pow() with 3 arguments requires integers" msgstr "" #: ports/espressif/boards/adafruit_feather_esp32s2/mpconfigboard.h -#: ports/espressif/boards/adafruit_feather_esp32s2_nopsram/mpconfigboard.h +#: ports/espressif/boards/adafruit_feather_esp32s2_tft/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32s2_tftback_nopsram/mpconfigboard.h #: ports/espressif/boards/adafruit_funhouse/mpconfigboard.h #: ports/espressif/boards/adafruit_magtag_2.9_grayscale/mpconfigboard.h @@ -4154,6 +4154,10 @@ msgstr "" msgid "source_bitmap must have value_count of 8" msgstr "" +#: shared-bindings/wifi/Radio.c +msgid "ssid can't be more than 32 bytes" +msgstr "" + #: py/objstr.c msgid "start/end indices" msgstr "" @@ -4457,10 +4461,6 @@ msgstr "" msgid "wifi is not enabled" msgstr "" -#: shared-bindings/wifi/Radio.c -msgid "ssid can't be more than 32 bytes" -msgstr "" - #: shared-bindings/_bleio/Adapter.c msgid "window must be <= interval" msgstr ""