8000 Add wifi.radio.listen_interval to ESP32-family chips. by EternityForest · Pull Request #9476 · adafruit/circuitpython · GitHub
[go: up one dir, main page]

Skip to content

Add wifi.radio.listen_interval to ESP32-family chips. #9476

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Aug 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions ports/espressif/common-hal/wifi/Radio.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,25 @@ void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t
esp_wifi_set_max_tx_power(tx_power * 4.0f);
}

mp_int_t common_hal_wifi_radio_get_listen_interval(wifi_radio_obj_t *self) {
wifi_config_t *config = &self->sta_config;
return config->sta.listen_interval;
}

void common_hal_wifi_radio_set_listen_interval(wifi_radio_obj_t *self, const mp_int_t listen_interval) {
wifi_config_t *config = &self->sta_config;
config->sta.listen_interval = listen_interval;
if (listen_interval == 1) {
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
} else if (listen_interval > 1) {
esp_wifi_set_ps(WIFI_PS_MAX_MODEM);
} else {
esp_wifi_set_ps(WIFI_PS_NONE);
}

esp_wifi_set_config(ESP_IF_WIFI_STA, config);
}

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);
Expand Down
4 changes: 4 additions & 0 deletions ports/espressif/mpconfigport.mk
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ CIRCUITPY_FULL_BUILD ?= 1
# If SSL is enabled, it's mbedtls
CIRCUITPY_SSL_MBEDTLS = 1

# Wifi Power Save
CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL = 1


# These modules are implemented in ports/<port>/common-hal:
CIRCUITPY_ALARM ?= 1
CIRCUITPY_ALARM_TOUCH ?= 0
Expand Down
3 changes: 3 additions & 0 deletions py/circuitpy_mpconfig.mk
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,9 @@ CFLAGS += -DCIRCUITPY_WEB_WORKFLOW=$(CIRCUITPY_WEB_WORKFLOW)
CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS?= 1
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS=$(CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS)

CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL?= 0
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL=$(CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL)

# tinyusb port tailored configuration
CIRCUITPY_TUSB_MEM_ALIGN ?= 4
CFLAGS += -DCIRCUITPY_TUSB_MEM_ALIGN=$(CIRCUITPY_TUSB_MEM_ALIGN)
Expand Down
28 changes: 28 additions & 0 deletions shared-bindings/wifi/Radio.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,34 @@ MP_PROPERTY_GETSET(wifi_radio_tx_power_obj,
(mp_obj_t)&wifi_radio_get_tx_power_obj,
(mp_obj_t)&wifi_radio_set_tx_power_obj);

//| listen_interval: int
//| """Wifi power save listen interval, in DTIM periods, or 100ms intervals if TWT is supported."""
static mp_obj_t wifi_radio_get_listen_interval(mp_obj_t self_in) {
#if CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_int(common_hal_wifi_radio_get_listen_interval(self));
#else
return mp_obj_new_int(0);
#endif
}
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_listen_interval_obj, wifi_radio_get_listen_interval);

static mp_obj_t wifi_radio_set_listen_interval(mp_obj_t self_in, mp_obj_t listen_interval_in) {
#if CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL
mp_int_t listen_interval = mp_obj_get_int(listen_interval_in);
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_wifi_radio_set_listen_interval(self, listen_interval);
#else
mp_raise_NotImplementedError(NULL);
#endif
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(wifi_radio_set_listen_interval_obj, wifi_radio_set_listen_interval);

MP_PROPERTY_GETSET(wifi_radio_listen_interval_obj,
(mp_obj_t)&wifi_radio_get_listen_interval_obj,
(mp_obj_t)&wifi_radio_set_listen_interval_obj);

//| mac_address_ap: ReadableBuffer
//| """MAC address for the AP. When the address is altered after interface is started
//| the changes would only be reflected once the interface restarts.
Expand Down
3 changes: 3 additions & 0 deletions shared-bindings/wifi/Radio.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ extern void common_hal_wifi_radio_set_mac_address_ap(wifi_radio_obj_t *self, con
extern mp_float_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self);
extern void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t power);

extern void common_hal_wifi_radio_set_listen_interval(wifi_radio_obj_t *self, const mp_int_t listen_interval);
extern mp_int_t common_hal_wifi_radio_get_listen_interval(wifi_radio_obj_t *self);

extern mp_obj_t common_hal_wifi_radio_start_scanning_networks(wifi_radio_obj_t *self, uint8_t start_channel, uint8_t stop_channel);
extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self);

Expand Down
Loading
0