diff --git a/ports/espressif/common-hal/wifi/Radio.c b/ports/espressif/common-hal/wifi/Radio.c index a6f3c320b9227..1e499b9d1d60b 100644 --- a/ports/espressif/common-hal/wifi/Radio.c +++ b/ports/espressif/common-hal/wifi/Radio.c @@ -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); diff --git a/ports/espressif/mpconfigport.mk b/ports/espressif/mpconfigport.mk index d431501129f66..e1bbea5c12eee 100644 --- a/ports/espressif/mpconfigport.mk +++ b/ports/espressif/mpconfigport.mk @@ -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//common-hal: CIRCUITPY_ALARM ?= 1 CIRCUITPY_ALARM_TOUCH ?= 0 diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index e7900ce0696df..e57874bfe35a0 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -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) diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index f6a35e28c8490..34e48925d3e75 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -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. diff --git a/shared-bindings/wifi/Radio.h b/shared-bindings/wifi/Radio.h index 8a5391a8ccbeb..ac352626dccba 100644 --- a/shared-bindings/wifi/Radio.h +++ b/shared-bindings/wifi/Radio.h @@ -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); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy