Skip to content

Commit 6208124

Browse files
authored
Merge branch 'adafruit:main' into main
2 parents b580df5 + 90fec27 commit 6208124

File tree

12 files changed

+220
-49
lines changed

12 files changed

+220
-49
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
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "supervisor/board.h"
8+
9+
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#pragma once
8+
9+
#define MICROPY_HW_BOARD_NAME "Waveshare RP2040-One"
10+
#define MICROPY_HW_MCU_NAME "rp2040"
11+
12+
#define DEFAULT_UART_BUS_TX (&pin_GPIO0)
13+
#define DEFAULT_UART_BUS_RX (&pin_GPIO1)
14+
15+
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO4)
16+
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO5)
17+
18+
#define DEFAULT_SPI_BUS_CK (&pin_GPIO6)
19+
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO7)
20+
#define DEFAULT_SPI_BUS_MISO (&pin_GPIO8)
21+
22+
#define MICROPY_HW_NEOPIXEL (&pin_GPIO16)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
USB_VID = 0x2E8A
2+
USB_PID = 0x103A
3+
USB_PRODUCT = "RP2040-One"
4+
USB_MANUFACTURER = "Waveshare Electronics"
5+
6+
CHIP_VARIANT = RP2040
7+
CHIP_FAMILY = rp2
8+
9+
EXTERNAL_FLASH_DEVICES = "W25Q32JVxQ"
10+
11+
CIRCUITPY__EVE = 1
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#pragma once
8+
9+
// Put board-specific pico-sdk definitions here. This file must exist.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "shared-bindings/board/__init__.h"
8+
9+
static const mp_rom_map_elem_t board_module_globals_table[] = {
10+
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
11+
12+
{ MP_ROM_QSTR(MP_QSTR_GP0), MP_ROM_PTR(&pin_GPIO0) },
13+
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO0) },
14+
15+
{ MP_ROM_QSTR(MP_QSTR_GP1), MP_ROM_PTR(&pin_GPIO1) },
16+
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO1) },
17+
18+
{ MP_ROM_QSTR(MP_QSTR_GP2), MP_ROM_PTR(&pin_GPIO2) },
19+
{ MP_ROM_QSTR(MP_QSTR_GP3), MP_ROM_PTR(&pin_GPIO3) },
20+
{ MP_ROM_QSTR(MP_QSTR_GP4), MP_ROM_PTR(&pin_GPIO4) },
21+
{ MP_ROM_QSTR(MP_QSTR_GP5), MP_ROM_PTR(&pin_GPIO5) },
22+
{ MP_ROM_QSTR(MP_QSTR_GP6), MP_ROM_PTR(&pin_GPIO6) },
23+
{ MP_ROM_QSTR(MP_QSTR_GP7), MP_ROM_PTR(&pin_GPIO7) },
24+
{ MP_ROM_QSTR(MP_QSTR_GP8), MP_ROM_PTR(&pin_GPIO8) },
25+
{ MP_ROM_QSTR(MP_QSTR_GP9), MP_ROM_PTR(&pin_GPIO9) },
26+
{ MP_ROM_QSTR(MP_QSTR_GP10), MP_ROM_PTR(&pin_GPIO10) },
27+
{ MP_ROM_QSTR(MP_QSTR_GP11), MP_ROM_PTR(&pin_GPIO11) },
28+
{ MP_ROM_QSTR(MP_QSTR_GP12), MP_ROM_PTR(&pin_GPIO12) },
29+
{ MP_ROM_QSTR(MP_QSTR_GP13), MP_ROM_PTR(&pin_GPIO13) },
30+
{ MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14) },
31+
{ MP_ROM_QSTR(MP_QSTR_GP15), MP_ROM_PTR(&pin_GPIO15) },
32+
{ MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16) },
33+
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO16) },
34+
{ MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17) },
35+
{ MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18) },
36+
{ MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19) },
37+
{ MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20) },
38+
{ MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21) },
39+
{ MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22) },
40+
{ MP_ROM_QSTR(MP_QSTR_GP23), MP_ROM_PTR(&pin_GPIO23) },
41+
{ MP_ROM_QSTR(MP_QSTR_GP24), MP_ROM_PTR(&pin_GPIO24) },
42+
{ MP_ROM_QSTR(MP_QSTR_GP25), MP_ROM_PTR(&pin_GPIO25) },
43+
44+
{ MP_ROM_QSTR(MP_QSTR_GP26_A0), MP_ROM_PTR(&pin_GPIO26) },
45+
{ MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26) },
46+
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
47+
48+
{ MP_ROM_QSTR(MP_QSTR_GP27_A1), MP_ROM_PTR(&pin_GPIO27) },
49+
{ MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27) },
50+
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
51+
52+
{ MP_ROM_QSTR(MP_QSTR_GP28_A2), MP_ROM_PTR(&pin_GPIO28) },
53+
{ MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28) },
54+
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) },
55+
56+
{ MP_ROM_QSTR(MP_QSTR_GP29_A3), MP_ROM_PTR(&pin_GPIO29) },
57+
{ MP_ROM_QSTR(MP_QSTR_GP29), MP_ROM_PTR(&pin_GPIO29) },
58+
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) },
59+
60+
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
61+
};
62+
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

py/circuitpy_mpconfig.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,9 @@ CFLAGS += -DCIRCUITPY_WEB_WORKFLOW=$(CIRCUITPY_WEB_WORKFLOW)
677677
CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS?= 1
678678
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS=$(CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS)
679679

680+
CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL?= 0
681+
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL=$(CIRCUITPY_WIFI_RADIO_SETTABLE_LISTEN_INTERVAL)
682+
680683
# tinyusb port tailored configuration
681684
CIRCUITPY_TUSB_MEM_ALIGN ?= 4
682685
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)