8000 Merge pull request #9476 from EternityForest/wifi-pm · adafruit/circuitpython@736ba1e · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 736ba1e

Browse files
authored
Merge pull request #9476 from EternityForest/wifi-pm
DRAFT: Add wifi.radio.listen_interval to ESP32-family chips.
2 parents 87f7bc9 + fc6a344 commit 736ba1e

File tree

5 files changed

+57
-0
lines changed

5 files changed

+57
-0
lines changed

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,25 @@ void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t
139139
esp_wifi_set_max_tx_power(tx_power * 4.0f);
140140
}
141141

142+
mp_int_t common_hal_wifi_radio_get_listen_interval(wifi_radio_obj_t *self) {
143+
wifi_config_t *config = &self->sta_config;
144+
return config->sta.listen_interval;
145+
}
146+
147+
void common_hal_wifi_radio_set_listen_interval(wifi_radio_obj_t *self, const mp_int_t listen_interval) {
148+
wifi_config_t *config = &self->sta_config;
149+
config->sta.listen_interval = listen_interval;
150+
if (listen_interval == 1) {
151+
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
152+
} else if (listen_interval > 1) {
153+
esp_wifi_set_ps(WIFI_PS_MAX_MODEM);
154+
} else {
155+
esp_wifi_set_ps(WIFI_PS_NONE);
156+
}
157+
158+
esp_wifi_set_config(ESP_IF_WIFI_STA, config);
159+
}
160+
142161
mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) {
143162
uint8_t mac[MAC_ADDRESS_LENGTH];
144163
esp_wifi_get_mac(ESP_IF_WIFI_AP, mac);

ports/espressif/mpconfigport.mk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ CIRCUITPY_FULL_BUILD ?= 1
2020
# If SSL is enabled, it's mbedtls
2121
CIRCUITPY_SSL_MBEDTLS = 1
2222

23+
# Wifi Power Save
24+
CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL = 1
25+
26+
2327
# These modules are implemented in ports/<port>/common-hal:
2428
CIRCUITPY_ALARM ?= 1
2529
CIRCUITPY_ALARM_TOUCH ?= 0

py/circuitpy_mpconfig.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,9 @@ CFLAGS += -DCIRCUITPY_WEB_WORKFLOW=$(CIRCUITPY_WEB_WORKFLOW)
674674
CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS?= 1
675675
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS=$(CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS)
676676

677+
CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL?= 0
678+
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL=$(CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL)
679+
677680
# tinyusb port tailored configuration
678681
CIRCUITPY_TUSB_MEM_ALIGN ?= 4
679682
CFLAGS += -DCIRCUITPY_TUSB_MEM_ALIGN=$(CIRCUITPY_TUSB_MEM_ALIGN)

shared-bindings/wifi/Radio.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,34 @@ MP_PROPERTY_GETSET(wifi_radio_tx_power_obj,
186186
(mp_obj_t)&wifi_radio_get_tx_power_obj,
187187
(mp_obj_t)&wifi_radio_set_tx_power_obj);
188188

189+
//| listen_interval: int
190+
//| """Wifi power save listen interval, in DTIM periods, or 100ms intervals if TWT is supported."""
191+
static mp_obj_t wifi_radio_get_listen_interval(mp_obj_t self_in) {
192+
#if CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL
193+
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
194+
return mp_obj_new_int(common_hal_wifi_radio_get_listen_interval(self));
195+
#else
196+
return mp_obj_new_int(0);
197+
#endif
198+
}
199+
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_listen_interval_obj, wifi_radio_get_listen_interval);
200+
201+
static mp_obj_t wifi_radio_set_listen_interval(mp_obj_t self_in, mp_obj_t listen_interval_in) {
202+
#if CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL
203+
mp_int_t listen_interval = mp_obj_get_int(listen_interval_in);
204+
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
205+
common_hal_wifi_radio_set_listen_interval(self, listen_interval);
206+
#else
207+
mp_raise_NotImplementedError(NULL);
208+
#endif
209+
return mp_const_none;
210+
}
211+
MP_DEFINE_CONST_FUN_OBJ_2(wifi_radio_set_listen_interval_obj, wifi_radio_set_listen_interval);
212+
213+
MP_PROPERTY_GETSET(wifi_radio_listen_interval_obj,
214+
(mp_obj_t)&wifi_radio_get_listen_interval_obj,
215+
(mp_obj_t)&wifi_radio_set_listen_interval_obj);
216+
189217
//| mac_address_ap: ReadableBuffer
190218
//| """MAC address for the AP. When the address is altered after interface is started
191219
//| the changes would only be reflected once the interface restarts.

shared-bindings/wifi/Radio.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ extern void common_hal_wifi_radio_set_mac_address_ap(wifi_radio_obj_t *self, con
7575
extern mp_float_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self);
7676
extern void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t power);
7777

78+
extern void common_hal_wifi_radio_set_listen_interval(wifi_radio_obj_t *self, const mp_int_t listen_interval);
79+
extern mp_int_t common_hal_wifi_radio_get_listen_interval(wifi_radio_obj_t *self);
80+
7881
extern mp_obj_t common_hal_wifi_radio_start_scanning_networks(wifi_radio_obj_t *self, uint8_t start_channel, uint8_t stop_channel);
7982
extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self);
8083

0 commit comments

Comments
 (0)
0