Skip to content

Commit 04ffd0d

Browse files
committed
Add gateway, subnet, and rssi info for current connected AP
ap_rssi is a bound method, which I'm not keen on, but it works
1 parent 9d9bc5a commit 04ffd0d

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,44 @@ wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t
147147
return WIFI_RADIO_ERROR_NONE;
148148
}
149149

150+
mp_obj_t common_hal_wifi_radio_get_ap_rssi(wifi_radio_obj_t *self) {
151+
if (!esp_netif_is_netif_up(self->netif)) {
152+
return mp_const_none;
153+
}
154+
// Make sure the interface is in STA mode
155+
wifi_mode_t if_mode;
156+
esp_wifi_get_mode(&if_mode);
157+
if (if_mode != WIFI_MODE_STA){
158+
return mp_const_none;
159+
}
160+
161+
wifi_ap_record_t ap_info;
162+
esp_wifi_sta_get_ap_info(&ap_info);
163+
164+
mp_obj_t rssi;
165+
rssi = MP_OBJ_NEW_SMALL_INT(ap_info.rssi);
166+
167+
return rssi;
168+
}
169+
170+
mp_obj_t common_hal_wifi_radio_get_ipv4_gateway(wifi_radio_obj_t *self) {
171+
if (!esp_netif_is_netif_up(self->netif)) {
172+
return mp_const_none;
173+
}
174+
esp_netif_ip_info_t ip_info;
175+
esp_netif_get_ip_info(self->netif, &ip_info);
176+
return common_hal_ipaddress_new_ipv4address(ip_info.gw.addr);
177+
}
178+
179+
mp_obj_t common_hal_wifi_radio_get_ipv4_subnet(wifi_radio_obj_t *self) {
180+
if (!esp_netif_is_netif_up(self->netif)) {
181+
return mp_const_none;
182+
}
183+
esp_netif_ip_info_t ip_info;
184+
esp_netif_get_ip_info(self->netif, &ip_info);
185+
return common_hal_ipaddress_new_ipv4address(ip_info.netmask.addr);
186+
}
187+
150188
mp_obj_t common_hal_wifi_radio_get_ipv4_address(wifi_radio_obj_t *self) {
151189
if (!esp_netif_is_netif_up(self->netif)) {
152190
return mp_const_none;

shared-bindings/wifi/Radio.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,47 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m
163163
}
164164
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(wifi_radio_connect_obj, 1, wifi_radio_connect);
165165

166+
//| ap_rssi: int
167+
//| """RSSI of the currently connected AP. Returns none if not connected"""
168+
//|
169+
STATIC mp_obj_t wifi_radio_get_ap_rssi(mp_obj_t self) {
170+
return common_hal_wifi_radio_get_ap_rssi(self);
171+
172+
}
173+
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_ap_rssi_obj, wifi_radio_get_ap_rssi);
174+
175+
//| ipv4_gateway: Optional[ipaddress.IPv4Address]
176+
//| """IP v4 Address of the gateway when connected to an access point. None otherwise."""
177+
//|
178+
STATIC mp_obj_t wifi_radio_get_ipv4_gateway(mp_obj_t self) {
179+
return common_hal_wifi_radio_get_ipv4_gateway(self);
180+
181+
}
182+
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_ipv4_gateway_obj, wifi_radio_get_ipv4_gateway);
183+
184+
const mp_obj_property_t wifi_radio_ipv4_gateway_obj = {
185+
.base.type = &mp_type_property,
186+
.proxy = { (mp_obj_t)&wifi_radio_get_ipv4_gateway_obj,
187+
(mp_obj_t)&mp_const_none_obj,
188+
(mp_obj_t)&mp_const_none_obj },
189+
};
190+
191+
//| ipv4_subnet: Optional[ipaddress.IPv4Address]
192+
//| """IP v4 Address of the subnet when connected to an access point. None otherwise."""
193+
//|
194+
STATIC mp_obj_t wifi_radio_get_ipv4_subnet(mp_obj_t self) {
195+
return common_hal_wifi_radio_get_ipv4_subnet(self);
196+
197+
}
198+
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_ipv4_subnet_obj, wifi_radio_get_ipv4_subnet);
199+
200+
const mp_obj_property_t wifi_radio_ipv4_subnet_obj = {
201+
.base.type = &mp_type_property,
202+
.proxy = { (mp_obj_t)&wifi_radio_get_ipv4_subnet_obj,
203+
(mp_obj_t)&mp_const_none_obj,
204+
(mp_obj_t)&mp_const_none_obj },
205+
};
206+
166207
//| ipv4_address: Optional[ipaddress.IPv4Address]
167208
//| """IP v4 Address of the radio when connected to an access point. None otherwise."""
168209
//|
@@ -219,6 +260,9 @@ STATIC const mp_rom_map_elem_t wifi_radio_locals_dict_table[] = {
219260
{ MP_ROM_QSTR(MP_QSTR_connect), MP_ROM_PTR(&wifi_radio_connect_obj) },
220261
// { MP_ROM_QSTR(MP_QSTR_connect_to_enterprise), MP_ROM_PTR(&wifi_radio_connect_to_enterprise_obj) },
221262

263+
{ MP_ROM_QSTR(MP_QSTR_ap_rssi), MP_ROM_PTR(&wifi_radio_get_ap_rssi_obj) },
264+
{ MP_ROM_QSTR(MP_QSTR_ipv4_gateway), MP_ROM_PTR(&wifi_radio_ipv4_gateway_obj) },
265+
{ MP_ROM_QSTR(MP_QSTR_ipv4_subnet), MP_ROM_PTR(&wifi_radio_ipv4_subnet_obj) },
222266
{ MP_ROM_QSTR(MP_QSTR_ipv4_address), MP_ROM_PTR(&wifi_radio_ipv4_address_obj) },
223267

224268
// { MP_ROM_QSTR(MP_QSTR_access_point_active), MP_ROM_PTR(&wifi_radio_access_point_active_obj) },

shared-bindings/wifi/Radio.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self)
5353

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

56+
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_ipv4_gateway(wifi_radio_obj_t *self);
58+
extern mp_obj_t common_hal_wifi_radio_get_ipv4_subnet(wifi_radio_obj_t *self);
5659
extern mp_obj_t common_hal_wifi_radio_get_ipv4_address(wifi_radio_obj_t *self);
5760

5861
extern mp_int_t common_hal_wifi_radio_ping(wifi_radio_obj_t *self, mp_obj_t ip_address, mp_float_t timeout);

0 commit comments

Comments
 (0)