Skip to content

Commit 2a4a244

Browse files
committed
Add ap_ssid and ap_bssid
1 parent 7b7ef8e commit 2a4a244

File tree

3 files changed

+73
-2
lines changed

3 files changed

+73
-2
lines changed

ports/esp32s2/common-hal/wifi/Radio.c

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
#include "esp-idf/components/esp_wifi/include/esp_wifi.h"
3939
#include "esp-idf/components/lwip/include/apps/ping/ping_sock.h"
4040

41+
#define MAC_ADDRESS_LENGTH 6
42+
4143
static void start_station(wifi_radio_obj_t *self) {
4244
if (self->sta_mode) {
4345
return;
@@ -73,8 +75,6 @@ void common_hal_wifi_radio_set_enabled(wifi_radio_obj_t *self, bool enabled) {
7375
}
7476
}
7577

76-
#define MAC_ADDRESS_LENGTH 6
77-
7878
mp_obj_t common_hal_wifi_radio_get_mac_address(wifi_radio_obj_t *self) {
7979
uint8_t mac[MAC_ADDRESS_LENGTH];
8080
esp_wifi_get_mac(ESP_IF_WIFI_STA, mac);
@@ -168,6 +168,41 @@ mp_obj_t common_hal_wifi_radio_get_ap_rssi(wifi_radio_obj_t *self) {
168168
}
169169
}
170170

171+
mp_obj_t common_hal_wifi_radio_get_ap_ssid(wifi_radio_obj_t *self) {
172+
if (!esp_netif_is_netif_up(self->netif)) {
173+
return mp_const_none;
174+
}
175+
176+
// Make sure the interface is in STA mode
177+
if (self->sta_mode){
178+
return mp_const_none;
179+
}
180+
181+
if (esp_wifi_sta_get_ap_info(&self->ap_info) != ESP_OK){
182+
return mp_const_none;
183+
} else {
184+
const char* cstr = (const char*) self->ap_info.ssid;
185+
return mp_obj_new_str(cstr, strlen(cstr));
186+
}
187+
}
188+
189+
mp_obj_t common_hal_wifi_radio_get_ap_bssid(wifi_radio_obj_t *self) {
190+
if (!esp_netif_is_netif_up(self->netif)) {
191+
return mp_const_none;
192+
}
193+
194+
// Make sure the interface is in STA mode
195+
if (self->sta_mode){
196+
return mp_const_none;
197+
}
198+
199+
if (esp_wifi_sta_get_ap_info(&self->ap_info) != ESP_OK){
200+
return mp_const_none;
201+
} else {
202+
return mp_obj_new_bytes(self->ap_info.bssid, MAC_ADDRESS_LENGTH);
203+
}
204+
}
205+
171206
mp_obj_t common_hal_wifi_radio_get_ipv4_gateway(wifi_radio_obj_t *self) {
172207
if (!esp_netif_is_netif_up(self->netif)) {
173208
return mp_const_none;

shared-bindings/wifi/Radio.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,38 @@ const mp_obj_property_t wifi_radio_ap_rssi_obj = {
179179
(mp_obj_t)&mp_const_none_obj },
180180
};
181181

182+
//| ap_ssid: int
183+
//| """SSID of the currently connected AP. Returns none if not connected"""
184+
//|
185+
STATIC mp_obj_t wifi_radio_get_ap_ssid(mp_obj_t self) {
186+
return common_hal_wifi_radio_get_ap_ssid(self);
187+
188+
}
189+
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_ap_ssid_obj, wifi_radio_get_ap_ssid);
190+
191+
const mp_obj_property_t wifi_radio_ap_ssid_obj = {
192+
.base.type = &mp_type_property,
193+
.proxy = { (mp_obj_t)&wifi_radio_get_ap_ssid_obj,
194+
(mp_obj_t)&mp_const_none_obj,
195+
(mp_obj_t)&mp_const_none_obj },
196+
};
197+
198+
//| ap_bssid: int
199+
//| """BSSID (usually MAC) of the currently connected AP. Returns none if not connected"""
200+
//|
201+
STATIC mp_obj_t wifi_radio_get_ap_bssid(mp_obj_t self) {
202+
return common_hal_wifi_radio_get_ap_bssid(self);
203+
204+
}
205+
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_ap_bssid_obj, wifi_radio_get_ap_bssid);
206+
207+
const mp_obj_property_t wifi_radio_ap_bssid_obj = {
208+
.base.type = &mp_type_property,
209+
.proxy = { (mp_obj_t)&wifi_radio_get_ap_bssid_obj,
210+
(mp_obj_t)&mp_const_none_obj,
211+
(mp_obj_t)&mp_const_none_obj },
212+
};
213+
182214
//| ipv4_gateway: Optional[ipaddress.IPv4Address]
183215
//| """IP v4 Address of the gateway when connected to an access point. None otherwise."""
184216
//|
@@ -284,6 +316,8 @@ STATIC const mp_rom_map_elem_t wifi_radio_locals_dict_table[] = {
284316
// { MP_ROM_QSTR(MP_QSTR_connect_to_enterprise), MP_ROM_PTR(&wifi_radio_connect_to_enterprise_obj) },
285317

286318
{ MP_ROM_QSTR(MP_QSTR_ap_rssi), MP_ROM_PTR(&wifi_radio_ap_rssi_obj) },
319+
{ MP_ROM_QSTR(MP_QSTR_ap_ssid), MP_ROM_PTR(&wifi_radio_ap_ssid_obj) },
320+
{ MP_ROM_QSTR(MP_QSTR_ap_bssid), MP_ROM_PTR(&wifi_radio_ap_bssid_obj) },
287321
{ MP_ROM_QSTR(MP_QSTR_ipv4_dns), MP_ROM_PTR(&wifi_radio_ipv4_dns_obj) },
288322
{ MP_ROM_QSTR(MP_QSTR_ipv4_gateway), MP_ROM_PTR(&wifi_radio_ipv4_gateway_obj) },
289323
{ MP_ROM_QSTR(MP_QSTR_ipv4_subnet), MP_ROM_PTR(&wifi_radio_ipv4_subnet_obj) },

shared-bindings/wifi/Radio.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self)
5454
extern wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t* ssid, size_t ssid_len, uint8_t* password, size_t password_len, uint8_t channel, mp_float_t timeout, uint8_t* bssid, size_t bssid_len);
5555

5656
extern mp_obj_t common_hal_wifi_radio_get_ap_rssi(wifi_radio_obj_t *self);
57+
extern mp_obj_t common_hal_wifi_radio_get_ap_ssid(wifi_radio_obj_t *self);
58+
extern mp_obj_t common_hal_wifi_radio_get_ap_bssid(wifi_radio_obj_t *self);
5759
extern mp_obj_t common_hal_wifi_radio_get_ipv4_dns(wifi_radio_obj_t *self);
5860
extern mp_obj_t common_hal_wifi_radio_get_ipv4_gateway(wifi_radio_obj_t *self);
5961
extern mp_obj_t common_hal_wifi_radio_get_ipv4_subnet(wifi_radio_obj_t *self);

0 commit comments

Comments
 (0)