From 289e1d9b8bfeba7c346127bf623febc417203831 Mon Sep 17 00:00:00 2001 From: Shantanu <196452821+shaxntanu@users.noreply.github.com> Date: Sun, 18 Oct 2026 20:16:37 +0530 Subject: [PATCH] ports/raspberrypi/wifi: Implement connected AP info. Populate wifi.radio.ap_info with the connected SSID, BSSID, RSSI, channel, and authentication mode on the Raspberry Pi port. Return None when disconnected or when CYW43 cannot provide the connection details. Fixes #11030 Signed-off-by: Shantanu --- ports/raspberrypi/common-hal/wifi/Radio.c | 26 ++++++++++++++++++++++- ports/raspberrypi/common-hal/wifi/Radio.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ports/raspberrypi/common-hal/wifi/Radio.c b/ports/raspberrypi/common-hal/wifi/Radio.c index 876941cab4d..36b6daa513e 100644 --- a/ports/raspberrypi/common-hal/wifi/Radio.c +++ b/ports/raspberrypi/common-hal/wifi/Radio.c @@ -364,6 +364,8 @@ wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t case CYW43_LINK_UP: memcpy(self->connected_ssid, ssid, ssid_len); self->connected_ssid_len = ssid_len; + // Match the auth_mode flags used by cyw43_ev_scan_result_t. + self->connected_auth_mode = password_len ? 5 : 0; bindings_cyw43_wifi_enforce_pm(); return WIFI_RADIO_ERROR_NONE; case CYW43_LINK_FAIL: @@ -384,7 +386,29 @@ bool common_hal_wifi_radio_get_connected(wifi_radio_obj_t *self) { } mp_obj_t common_hal_wifi_radio_get_ap_info(wifi_radio_obj_t *self) { - mp_raise_NotImplementedError(NULL); + if (!common_hal_wifi_radio_get_connected(self)) { + return mp_const_none; + } + + cyw43_ev_scan_result_t record = {0}; + int32_t rssi; + int32_t channel; + if (cyw43_wifi_get_bssid(&cyw43_state, record.bssid) != 0 || + cyw43_wifi_get_rssi(&cyw43_state, &rssi) != 0 || + cyw43_ioctl(&cyw43_state, CYW43_IOCTL_GET_CHANNEL, sizeof(channel), + (uint8_t *)&channel, CYW43_ITF_STA) != 0) { + return mp_const_none; + } + + memcpy(record.ssid, self->connected_ssid, self->connected_ssid_len); + record.ssid_len = self->connected_ssid_len; + record.channel = (uint16_t)channel; + record.rssi = (int16_t)rssi; + record.auth_mode = self->connected_auth_mode; + + wifi_network_obj_t *ap_info = mp_obj_malloc(wifi_network_obj_t, &wifi_network_type); + ap_info->record = record; + return MP_OBJ_FROM_PTR(ap_info); } mp_obj_t common_hal_wifi_radio_get_ipv4_gateway(wifi_radio_obj_t *self) { diff --git a/ports/raspberrypi/common-hal/wifi/Radio.h b/ports/raspberrypi/common-hal/wifi/Radio.h index 53b6cd8f92f..de195495ad6 100644 --- a/ports/raspberrypi/common-hal/wifi/Radio.h +++ b/ports/raspberrypi/common-hal/wifi/Radio.h @@ -17,6 +17,7 @@ typedef struct { wifi_scannednetworks_obj_t *current_scan; uint8_t connected_ssid[32]; uint8_t connected_ssid_len; + uint8_t connected_auth_mode; bool enabled; } wifi_radio_obj_t;