add wifi.radio.power_management et al
This commit is contained in:
parent
97d037b3c4
commit
1ff3dff298
12 changed files with 150 additions and 94 deletions
|
|
@ -140,7 +140,7 @@ void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t
|
||||||
}
|
}
|
||||||
|
|
||||||
wifi_power_management_t common_hal_wifi_radio_get_power_management(wifi_radio_obj_t *self) {
|
wifi_power_management_t common_hal_wifi_radio_get_power_management(wifi_radio_obj_t *self) {
|
||||||
wifi_ps_type ps;
|
wifi_ps_type_t ps;
|
||||||
esp_err_t ret = esp_wifi_get_ps(&ps);
|
esp_err_t ret = esp_wifi_get_ps(&ps);
|
||||||
if (ret == ESP_OK) {
|
if (ret == ESP_OK) {
|
||||||
switch (ps) {
|
switch (ps) {
|
||||||
|
|
@ -156,7 +156,7 @@ wifi_power_management_t common_hal_wifi_radio_get_power_management(wifi_radio_ob
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void common_hal_wifi_radio_set_power_management(wifi_radio_obj_t *self, wifi_power_management_t power_management, mp_uint_t listen_interval) {
|
void common_hal_wifi_radio_set_power_management(wifi_radio_obj_t *self, wifi_power_management_t power_management) {
|
||||||
switch (power_management) {
|
switch (power_management) {
|
||||||
case POWER_MANAGEMENT_MIN:
|
case POWER_MANAGEMENT_MIN:
|
||||||
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
|
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
|
||||||
|
|
@ -164,7 +164,8 @@ void common_hal_wifi_radio_set_power_management(wifi_radio_obj_t *self, wifi_pow
|
||||||
case POWER_MANAGEMENT_MAX: {
|
case POWER_MANAGEMENT_MAX: {
|
||||||
// listen_interval is only used in this case.
|
// listen_interval is only used in this case.
|
||||||
wifi_config_t *config = &self->sta_config;
|
wifi_config_t *config = &self->sta_config;
|
||||||
config->sta.listen_interval = listen_interval;
|
// This is a typical value seen in various examples.
|
||||||
|
config->sta.listen_interval = 3;
|
||||||
esp_wifi_set_ps(WIFI_PS_MAX_MODEM);
|
esp_wifi_set_ps(WIFI_PS_MAX_MODEM);
|
||||||
esp_wifi_set_config(ESP_IF_WIFI_STA, config);
|
esp_wifi_set_config(ESP_IF_WIFI_STA, config);
|
||||||
}
|
}
|
||||||
|
|
@ -172,14 +173,12 @@ void common_hal_wifi_radio_set_power_management(wifi_radio_obj_t *self, wifi_pow
|
||||||
case POWER_MANAGEMENT_NONE:
|
case POWER_MANAGEMENT_NONE:
|
||||||
esp_wifi_set_ps(WIFI_PS_NONE);
|
esp_wifi_set_ps(WIFI_PS_NONE);
|
||||||
break;
|
break;
|
||||||
|
case POWER_MANAGEMENT_UNKNOWN:
|
||||||
|
// This should be prevented in shared-bindings.
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) {
|
mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) {
|
||||||
uint8_t mac[MAC_ADDRESS_LENGTH];
|
uint8_t mac[MAC_ADDRESS_LENGTH];
|
||||||
esp_wifi_get_mac(ESP_IF_WIFI_AP, mac);
|
esp_wifi_get_mac(ESP_IF_WIFI_AP, mac);
|
||||||
|
|
|
||||||
|
|
@ -40,9 +40,6 @@ CIRCUITPY_FULL_BUILD ?= 1
|
||||||
# If SSL is enabled, it's mbedtls
|
# If SSL is enabled, it's mbedtls
|
||||||
CIRCUITPY_SSL_MBEDTLS = 1
|
CIRCUITPY_SSL_MBEDTLS = 1
|
||||||
|
|
||||||
# Wifi Power Save
|
|
||||||
CIRCUITPY_WIFI_RADIO_SETTABLE_POWER_MANAGEMENT = 1
|
|
||||||
|
|
||||||
# Never use our copy of MBEDTLS
|
# Never use our copy of MBEDTLS
|
||||||
CIRCUITPY_HASHLIB_MBEDTLS_ONLY = 0
|
CIRCUITPY_HASHLIB_MBEDTLS_ONLY = 0
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#include "lib/cyw43-driver/src/cyw43.h"
|
#include "lib/cyw43-driver/src/cyw43.h"
|
||||||
|
|
||||||
static int power_management_value = PM_DISABLED;
|
static uint32_t power_management_value = CONST_CYW43_DEFAULT_PM;
|
||||||
|
|
||||||
void cyw43_enter_deep_sleep(void) {
|
void cyw43_enter_deep_sleep(void) {
|
||||||
#define WL_REG_ON 23
|
#define WL_REG_ON 23
|
||||||
|
|
@ -43,14 +43,23 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
print, shared_bindings_microcontroller_pin_print
|
print, shared_bindings_microcontroller_pin_print
|
||||||
);
|
);
|
||||||
|
|
||||||
|
uint32_t cyw43_get_power_management_value() {
|
||||||
|
return power_management_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cyw43_set_power_management_value(uint32_t value) {
|
||||||
|
power_management_value = value;
|
||||||
|
bindings_cyw43_wifi_enforce_pm();
|
||||||
|
}
|
||||||
|
|
||||||
//| PM_STANDARD: int
|
//| PM_STANDARD: int
|
||||||
//| """The standard power management mode"""
|
//| """The default power management mode; same as PM_PERFORMANCE"""
|
||||||
//| PM_AGGRESSIVE: int
|
//| PM_AGGRESSIVE: int
|
||||||
//| """Aggressive power management mode for optimal power usage at the cost of performance"""
|
//| """Aggressive power management mode for optimal power usage at the cost of performance"""
|
||||||
//| PM_PERFORMANCE: int
|
//| PM_PERFORMANCE: int
|
||||||
//| """Performance power management mode where more power is used to increase performance"""
|
//| """Performance power management mode where more power is used to increase performance"""
|
||||||
//| PM_DISABLED: int
|
//| PM_DISABLED: int
|
||||||
//| """Disable power management and always use highest power mode. CircuitPython sets this value at reset time, because it provides the best connectivity reliability."""
|
//| """Disable power management and always use highest power mode."""
|
||||||
//|
|
//|
|
||||||
//|
|
//|
|
||||||
//| def set_power_management(value: int) -> None:
|
//| def set_power_management(value: int) -> None:
|
||||||
|
|
@ -85,8 +94,7 @@ MP_DEFINE_CONST_OBJ_TYPE(
|
||||||
//|
|
//|
|
||||||
static mp_obj_t cyw43_set_power_management(const mp_obj_t value_in) {
|
static mp_obj_t cyw43_set_power_management(const mp_obj_t value_in) {
|
||||||
mp_int_t value = mp_obj_get_int(value_in);
|
mp_int_t value = mp_obj_get_int(value_in);
|
||||||
power_management_value = value;
|
cyw43_set_power_management_value(value);
|
||||||
bindings_cyw43_wifi_enforce_pm();
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
static MP_DEFINE_CONST_FUN_OBJ_1(cyw43_set_power_management_obj, cyw43_set_power_management);
|
static MP_DEFINE_CONST_FUN_OBJ_1(cyw43_set_power_management_obj, cyw43_set_power_management);
|
||||||
|
|
@ -126,10 +134,10 @@ static const mp_rom_map_elem_t cyw43_module_globals_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_CywPin), MP_ROM_PTR(&cyw43_pin_type) },
|
{ MP_ROM_QSTR(MP_QSTR_CywPin), MP_ROM_PTR(&cyw43_pin_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_set_power_management), &cyw43_set_power_management_obj },
|
{ MP_ROM_QSTR(MP_QSTR_set_power_management), &cyw43_set_power_management_obj },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_get_power_management), &cyw43_get_power_management_obj },
|
{ MP_ROM_QSTR(MP_QSTR_get_power_management), &cyw43_get_power_management_obj },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_PM_STANDARD), MP_ROM_INT(PM_STANDARD) },
|
{ MP_ROM_QSTR(MP_QSTR_PM_STANDARD), MP_ROM_INT(CONST_CYW43_DEFAULT_PM) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_PM_AGGRESSIVE), MP_ROM_INT(PM_AGGRESSIVE) },
|
{ MP_ROM_QSTR(MP_QSTR_PM_AGGRESSIVE), MP_ROM_INT(CONST_CYW43_AGGRESSIVE_PM) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_PM_PERFORMANCE), MP_ROM_INT(PM_PERFORMANCE) },
|
{ MP_ROM_QSTR(MP_QSTR_PM_PERFORMANCE), MP_ROM_INT(CONST_CYW43_PERFORMANCE_PM) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_PM_DISABLED), MP_ROM_INT(PM_DISABLED) },
|
{ MP_ROM_QSTR(MP_QSTR_PM_DISABLED), MP_ROM_INT(CONST_CYW43_NONE_PM) },
|
||||||
};
|
};
|
||||||
|
|
||||||
static MP_DEFINE_CONST_DICT(cyw43_module_globals, cyw43_module_globals_table);
|
static MP_DEFINE_CONST_DICT(cyw43_module_globals, cyw43_module_globals_table);
|
||||||
|
|
|
||||||
|
|
@ -16,21 +16,25 @@ const mcu_pin_obj_t *validate_obj_is_free_pin_including_cyw43(mp_obj_t obj, qstr
|
||||||
const mcu_pin_obj_t *validate_obj_is_free_pin_or_gpio29(mp_obj_t obj, qstr arg_name);
|
const mcu_pin_obj_t *validate_obj_is_free_pin_or_gpio29(mp_obj_t obj, qstr arg_name);
|
||||||
const mcu_pin_obj_t *validate_obj_is_pin_including_cyw43(mp_obj_t obj, qstr arg_name);
|
const mcu_pin_obj_t *validate_obj_is_pin_including_cyw43(mp_obj_t obj, qstr arg_name);
|
||||||
|
|
||||||
#define CONSTANT_CYW43_PM_VALUE(pm_mode, pm2_sleep_ret_ms, li_beacon_period, li_dtim_period, li_assoc) \
|
// This is equivalent to the code in cyw43.h, except that the values are computed at compile time.
|
||||||
|
// A `CONST_` prefix has been added to the computation function (expressed as a macro) and the values.
|
||||||
|
|
||||||
|
#define CONST_cyw43_pm_value(pm_mode, pm2_sleep_ret_ms, li_beacon_period, li_dtim_period, li_assoc) \
|
||||||
(li_assoc << 20 | /* listen interval sent to ap */ \
|
(li_assoc << 20 | /* listen interval sent to ap */ \
|
||||||
li_dtim_period << 16 | \
|
li_dtim_period << 16 | \
|
||||||
li_beacon_period << 12 | \
|
li_beacon_period << 12 | \
|
||||||
(pm2_sleep_ret_ms / 10) << 4 | /* cyw43_ll_wifi_pm multiplies this by 10 */ \
|
(pm2_sleep_ret_ms / 10) << 4 | /* cyw43_ll_wifi_pm multiplies this by 10 */ \
|
||||||
pm_mode /* CYW43_PM2_POWERSAVE_MODE etc */)
|
pm_mode /* CYW43_PM2_POWERSAVE_MODE etc */)
|
||||||
|
|
||||||
// CYW43_DEFAULT_PM (except a compile-time constant)
|
#define CONST_CYW43_DEFAULT_PM (CONST_CYW43_PERFORMANCE_PM)
|
||||||
#define PM_STANDARD CONSTANT_CYW43_PM_VALUE(CYW43_PM2_POWERSAVE_MODE, 200, 1, 1, 10)
|
|
||||||
// CYW43_AGGRESSIVE_PM (except a compile-time constant)
|
|
||||||
#define PM_AGGRESSIVE CONSTANT_CYW43_PM_VALUE(CYW43_PM2_POWERSAVE_MODE, 2000, 1, 1, 10)
|
|
||||||
// CYW43_PERFORMANCE_PM (except a compile-time constant)
|
|
||||||
#define PM_PERFORMANCE CONSTANT_CYW43_PM_VALUE(CYW43_PM2_POWERSAVE_MODE, 20, 1, 1, 1)
|
|
||||||
// The 0xa11140 magic value
|
|
||||||
#define PM_DISABLED CONSTANT_CYW43_PM_VALUE(CYW43_NO_POWERSAVE_MODE, 200, 1, 1, 10)
|
|
||||||
|
|
||||||
|
#define CONST_CYW43_NONE_PM (CONST_cyw43_pm_value(CYW43_NO_POWERSAVE_MODE, 10, 0, 0, 0))
|
||||||
|
|
||||||
|
#define CONST_CYW43_AGGRESSIVE_PM (CONST_cyw43_pm_value(CYW43_PM1_POWERSAVE_MODE, 10, 0, 0, 0))
|
||||||
|
|
||||||
|
#define CONST_CYW43_PERFORMANCE_PM (CONST_cyw43_pm_value(CYW43_PM2_POWERSAVE_MODE, 200, 1, 1, 10))
|
||||||
|
|
||||||
|
extern uint32_t cyw43_get_power_management_value(void);
|
||||||
|
extern void cyw43_set_power_management_value(uint32_t value);
|
||||||
extern void bindings_cyw43_wifi_enforce_pm(void);
|
extern void bindings_cyw43_wifi_enforce_pm(void);
|
||||||
void cyw43_enter_deep_sleep(void);
|
void cyw43_enter_deep_sleep(void);
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
#include "supervisor/port.h"
|
#include "supervisor/port.h"
|
||||||
|
#include "shared-bindings/wifi/PowerManagement.h"
|
||||||
#include "shared-bindings/wifi/Radio.h"
|
#include "shared-bindings/wifi/Radio.h"
|
||||||
#include "shared-bindings/wifi/Network.h"
|
#include "shared-bindings/wifi/Network.h"
|
||||||
|
|
||||||
|
|
@ -107,6 +108,41 @@ void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t
|
||||||
cyw43_ioctl(&cyw43_state, CYW43_IOCTL_SET_VAR, 9 + 4, buf, CYW43_ITF_AP);
|
cyw43_ioctl(&cyw43_state, CYW43_IOCTL_SET_VAR, 9 + 4, buf, CYW43_ITF_AP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wifi_power_management_t common_hal_wifi_radio_get_power_management(wifi_radio_obj_t *self) {
|
||||||
|
uint32_t pm_value = cyw43_get_power_management_value();
|
||||||
|
|
||||||
|
switch (pm_value) {
|
||||||
|
case CONST_CYW43_PERFORMANCE_PM:
|
||||||
|
return POWER_MANAGEMENT_MIN;
|
||||||
|
case CONST_CYW43_AGGRESSIVE_PM:
|
||||||
|
return POWER_MANAGEMENT_MAX;
|
||||||
|
case CONST_CYW43_NONE_PM:
|
||||||
|
return POWER_MANAGEMENT_NONE;
|
||||||
|
default:
|
||||||
|
return POWER_MANAGEMENT_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void common_hal_wifi_radio_set_power_management(wifi_radio_obj_t *self, wifi_power_management_t power_management) {
|
||||||
|
uint32_t pm_setting = CONST_CYW43_DEFAULT_PM;
|
||||||
|
switch (power_management) {
|
||||||
|
case POWER_MANAGEMENT_MIN:
|
||||||
|
pm_setting = CONST_CYW43_PERFORMANCE_PM;
|
||||||
|
break;
|
||||||
|
case POWER_MANAGEMENT_MAX:
|
||||||
|
pm_setting = CONST_CYW43_AGGRESSIVE_PM;
|
||||||
|
break;
|
||||||
|
case POWER_MANAGEMENT_NONE:
|
||||||
|
pm_setting = CONST_CYW43_NONE_PM;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Should not get here.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cyw43_set_power_management_value(pm_setting);
|
||||||
|
}
|
||||||
|
|
||||||
mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) {
|
mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) {
|
||||||
return common_hal_wifi_radio_get_mac_address(self);
|
return common_hal_wifi_radio_get_mac_address(self);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -617,6 +617,7 @@ $(filter $(SRC_PATTERNS), \
|
||||||
supervisor/StatusBar.c \
|
supervisor/StatusBar.c \
|
||||||
wifi/AuthMode.c \
|
wifi/AuthMode.c \
|
||||||
wifi/Packet.c \
|
wifi/Packet.c \
|
||||||
|
wifi/PowerManagement.c \
|
||||||
)
|
)
|
||||||
|
|
||||||
ifeq ($(CIRCUITPY_BLEIO_HCI),1)
|
ifeq ($(CIRCUITPY_BLEIO_HCI),1)
|
||||||
|
|
|
||||||
|
|
@ -705,9 +705,6 @@ CFLAGS += -DCIRCUITPY_WEB_WORKFLOW=$(CIRCUITPY_WEB_WORKFLOW)
|
||||||
CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS?= 1
|
CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS?= 1
|
||||||
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS=$(CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS)
|
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS=$(CIRCUITPY_WIFI_RADIO_SETTABLE_MAC_ADDRESS)
|
||||||
|
|
||||||
CIRCUITPY_WIFI_RADIO_SETTABLE_POWER_MANAGEMENT?= 0
|
|
||||||
CFLAGS += -DCIRCUITPY_WIFI_RADIO_SETTABLE_POWER_MANAGEMENT=$(CIRCUITPY_WIFI_RADIO_SETTABLE_POWER_MANAGEMENT)
|
|
||||||
|
|
||||||
# tinyusb port tailored configuration
|
# tinyusb port tailored configuration
|
||||||
CIRCUITPY_TUSB_MEM_ALIGN ?= 4
|
CIRCUITPY_TUSB_MEM_ALIGN ?= 4
|
||||||
CFLAGS += -DCIRCUITPY_TUSB_MEM_ALIGN=$(CIRCUITPY_TUSB_MEM_ALIGN)
|
CFLAGS += -DCIRCUITPY_TUSB_MEM_ALIGN=$(CIRCUITPY_TUSB_MEM_ALIGN)
|
||||||
|
|
|
||||||
|
|
@ -9,25 +9,38 @@
|
||||||
#include "shared-bindings/wifi/PowerManagement.h"
|
#include "shared-bindings/wifi/PowerManagement.h"
|
||||||
|
|
||||||
//| class PowerManagement:
|
//| class PowerManagement:
|
||||||
//| """Power-saving options for wifi"""
|
//| """Power-saving options for wifi
|
||||||
|
//|
|
||||||
|
//| .. note:: On boards using the CYW43 radio module, the choices below correspond to the
|
||||||
|
//| power management values defined in the `cyw43` module:
|
||||||
|
//| `PowerManagement.MIN` is the same as `cyw43.PM_PERFORMANCE`, `PowerManagement.MAX`
|
||||||
|
//| is the same as `cyw43.PM_AGGRESSIVE`, and `PowerManagement.NONE` is the same as
|
||||||
|
//| `cyw43.PM_DISABLED`. If a custom value was set with `cyw43.set_power_management()`
|
||||||
|
//| not corresponding to one of these three values, then `PowerManagement.UNKNOWN` will be returned.
|
||||||
|
//| """
|
||||||
//|
|
//|
|
||||||
//| MIN: PowerManagement
|
//| MIN: PowerManagement
|
||||||
//| """Minimum power management (default). The WiFi station wakes up to receive a beacon every DTIM period.
|
//| """Minimum power management (default). The WiFi station wakes up to receive a beacon every DTIM period.
|
||||||
//| The DTIM period is set by the access point."""
|
//| The DTIM period is set by the access point."""
|
||||||
//| MAX: PowerManagement
|
//| MAX: PowerManagement
|
||||||
//| """Maximum power management, at the expense of some performance. The WiFi station wakes up every 100 ms."""
|
//| """Maximum power management, at the expense of some performance. The WiFi station wakes up less often than `MIN`."""
|
||||||
//| NONE: PowerManagement
|
//| NONE: PowerManagement
|
||||||
//| """No power management: the WiFi station does not sleep."""
|
//| """No power management: the WiFi station does not sleep."""
|
||||||
|
//| UNKNOWN: PowerManagement
|
||||||
|
//| """Power management setting cannot be determined."""
|
||||||
|
//|
|
||||||
|
|
||||||
// In order of the enum type.
|
// In order of the enum type.
|
||||||
MAKE_ENUM_VALUE(wifi_power_management_type, power_management, NONE, POWER_MANAGEMENT_NONE);
|
MAKE_ENUM_VALUE(wifi_power_management_type, power_management, NONE, POWER_MANAGEMENT_NONE);
|
||||||
MAKE_ENUM_VALUE(wifi_power_management_type, power_management, MIN, POWER_MANAGEMENT_MIN);
|
MAKE_ENUM_VALUE(wifi_power_management_type, power_management, MIN, POWER_MANAGEMENT_MIN);
|
||||||
MAKE_ENUM_VALUE(wifi_power_management_type, power_management, MAX, POWER_MANAGEMENT_MAX);
|
MAKE_ENUM_VALUE(wifi_power_management_type, power_management, MAX, POWER_MANAGEMENT_MAX);
|
||||||
|
MAKE_ENUM_VALUE(wifi_power_management_type, power_management, UNKNOWN, POWER_MANAGEMENT_UNKNOWN);
|
||||||
|
|
||||||
MAKE_ENUM_MAP(wifi_power_management) {
|
MAKE_ENUM_MAP(wifi_power_management) {
|
||||||
MAKE_ENUM_MAP_ENTRY(power_management, NONE),
|
MAKE_ENUM_MAP_ENTRY(power_management, NONE),
|
||||||
MAKE_ENUM_MAP_ENTRY(power_management, MIN),
|
MAKE_ENUM_MAP_ENTRY(power_management, MIN),
|
||||||
MAKE_ENUM_MAP_ENTRY(power_management, MAX),
|
MAKE_ENUM_MAP_ENTRY(power_management, MAX),
|
||||||
|
MAKE_ENUM_MAP_ENTRY(power_management, UNKNOWN),
|
||||||
};
|
};
|
||||||
|
|
||||||
static MP_DEFINE_CONST_DICT(wifi_power_management_locals_dict, wifi_power_management_locals_table);
|
static MP_DEFINE_CONST_DICT(wifi_power_management_locals_dict, wifi_power_management_locals_table);
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,11 @@
|
||||||
#include "py/enum.h"
|
#include "py/enum.h"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
POWER_MANAGMENT_NONE = 0,
|
POWER_MANAGEMENT_NONE = 0,
|
||||||
POWER_MANAGEMENT_MIN = 1,
|
POWER_MANAGEMENT_MIN = 1,
|
||||||
POWER_MANAGEMENT_MAX = 2,
|
POWER_MANAGEMENT_MAX = 2,
|
||||||
|
// Value can't be determined.
|
||||||
|
POWER_MANAGEMENT_UNKNOWN = 3,
|
||||||
} wifi_power_management_t;
|
} wifi_power_management_t;
|
||||||
|
|
||||||
extern const mp_obj_type_t wifi_power_management_type;
|
extern const mp_obj_type_t wifi_power_management_type;
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "shared-bindings/wifi/__init__.h"
|
#include "shared-bindings/wifi/__init__.h"
|
||||||
#include "shared-bindings/wifi/AuthMode.h"
|
#include "shared-bindings/wifi/AuthMode.h"
|
||||||
|
#include "shared-bindings/wifi/PowerManagement.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
@ -189,33 +190,29 @@ MP_PROPERTY_GETSET(wifi_radio_tx_power_obj,
|
||||||
(mp_obj_t)&wifi_radio_set_tx_power_obj);
|
(mp_obj_t)&wifi_radio_set_tx_power_obj);
|
||||||
|
|
||||||
//| power_management: PowerManagement
|
//| power_management: PowerManagement
|
||||||
//| """Wifi power management setting. The default is `wifi.PowerManagement.MIN.
|
//| """Wifi power management setting. See `wifi.PowerManagement`. The default is `wifi.PowerManagement.MIN`.
|
||||||
//| """
|
//| """
|
||||||
static mp_obj_t wifi_radio_get_power_management(mp_obj_t self_in) {
|
static mp_obj_t wifi_radio_get_power_management(mp_obj_t self_in) {
|
||||||
#if CIRCUITPY_WIFI_RADIO_SETTABLE_POWER_MANAGEMENT
|
|
||||||
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
return cp_enum_find(&wifi_power_management_type, common_hal_wifi_radio_get_power_management(self));
|
return cp_enum_find(&wifi_power_management_type, common_hal_wifi_radio_get_power_management(self));
|
||||||
#else
|
|
||||||
return MP_OBJ_FROM_PTR(&power_management_MIN);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_listen_interval_obj, wifi_radio_get_listen_interval);
|
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_power_management_obj, wifi_radio_get_power_management);
|
||||||
|
|
||||||
static mp_obj_t wifi_radio_set_power_management(mp_obj_t self_in, mp_obj_t power_management_in) {
|
static mp_obj_t wifi_radio_set_power_management(mp_obj_t self_in, mp_obj_t power_management_in) {
|
||||||
#if CIRCUITPY_WIFI_RADIO_SETTABLE_POWER_MANAGEMENT
|
|
||||||
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
wifi_power_management_t power_management = cp_enum_value(&wifi_power_management_type, power_management_in, MP_QSTR_power_management);
|
wifi_power_management_t power_management =
|
||||||
|
cp_enum_value(&wifi_power_management_type, power_management_in, MP_QSTR_power_management);
|
||||||
|
if (power_management == POWER_MANAGEMENT_UNKNOWN) {
|
||||||
|
mp_arg_error_invalid(MP_QSTR_power_management);
|
||||||
|
}
|
||||||
common_hal_wifi_radio_set_power_management(self, power_management);
|
common_hal_wifi_radio_set_power_management(self, power_management);
|
||||||
#else
|
|
||||||
mp_raise_NotImplementedError(NULL);
|
|
||||||
#endif
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_2(wifi_radio_set_listen_interval_obj, wifi_radio_set_listen_interval);
|
MP_DEFINE_CONST_FUN_OBJ_2(wifi_radio_set_power_management_obj, wifi_radio_set_power_management);
|
||||||
|
|
||||||
MP_PROPERTY_GETSET(wifi_radio_listen_interval_obj,
|
MP_PROPERTY_GETSET(wifi_radio_power_management_obj,
|
||||||
(mp_obj_t)&wifi_radio_get_listen_interval_obj,
|
(mp_obj_t)&wifi_radio_get_power_management_obj,
|
||||||
(mp_obj_t)&wifi_radio_set_listen_interval_obj);
|
(mp_obj_t)&wifi_radio_set_power_management_obj);
|
||||||
|
|
||||||
//| mac_address_ap: ReadableBuffer
|
//| mac_address_ap: ReadableBuffer
|
||||||
//| """MAC address for the AP. When the address is altered after interface is started
|
//| """MAC address for the AP. When the address is altered after interface is started
|
||||||
|
|
@ -870,7 +867,7 @@ static const mp_rom_map_elem_t wifi_radio_locals_dict_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ipv4_subnet_ap), MP_ROM_PTR(&wifi_radio_ipv4_subnet_ap_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_ipv4_subnet_ap), MP_ROM_PTR(&wifi_radio_ipv4_subnet_ap_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ipv4_address), MP_ROM_PTR(&wifi_radio_ipv4_address_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_ipv4_address), MP_ROM_PTR(&wifi_radio_ipv4_address_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ipv4_address_ap), MP_ROM_PTR(&wifi_radio_ipv4_address_ap_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_ipv4_address_ap), MP_ROM_PTR(&wifi_radio_ipv4_address_ap_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_listen_interval), MP_ROM_PTR(&wifi_radio_listen_interval_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_power_management), MP_ROM_PTR(&wifi_radio_power_management_obj) },
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_set_ipv4_address), MP_ROM_PTR(&wifi_radio_set_ipv4_address_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_set_ipv4_address), MP_ROM_PTR(&wifi_radio_set_ipv4_address_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_set_ipv4_address_ap), MP_ROM_PTR(&wifi_radio_set_ipv4_address_ap_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_set_ipv4_address_ap), MP_ROM_PTR(&wifi_radio_set_ipv4_address_ap_obj) },
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "shared-bindings/wifi/PowerManagement.h"
|
||||||
|
|
||||||
#include "common-hal/wifi/Radio.h"
|
#include "common-hal/wifi/Radio.h"
|
||||||
|
|
||||||
#include "py/objstr.h"
|
#include "py/objstr.h"
|
||||||
|
|
@ -75,47 +77,46 @@ 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 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_tx_power(wifi_radio_obj_t *self, const mp_float_t power);
|
||||||
|
|
||||||
wifi_power_management_t common_hal_wifi_radio_get_power_management(wifi_radio_obj_t *self) {
|
extern wifi_power_management_t common_hal_wifi_radio_get_power_management(wifi_radio_obj_t *self);
|
||||||
void common_hal_wifi_radio_set_power_management(wifi_radio_obj_t *self, wifi_power_management_t power_management, mp_uint_t listen_interval);
|
extern void common_hal_wifi_radio_set_power_management(wifi_radio_obj_t *self, wifi_power_management_t power_management);
|
||||||
extern wifi_power_management_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 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);
|
extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self);
|
||||||
|
|
||||||
extern void common_hal_wifi_radio_start_station(wifi_radio_obj_t *self);
|
extern void common_hal_wifi_radio_start_station(wifi_radio_obj_t *self);
|
||||||
extern void common_hal_wifi_radio_stop_station(wifi_radio_obj_t *self);
|
extern void common_hal_wifi_radio_stop_station(wifi_radio_obj_t *self);
|
||||||
|
|
||||||
extern void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, uint32_t authmode, uint8_t max_connections);
|
extern void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, uint32_t authmode, uint8_t max_connections);
|
||||||
extern void common_hal_wifi_radio_stop_ap(wifi_radio_obj_t *self);
|
extern void common_hal_wifi_radio_stop_ap(wifi_radio_obj_t *self);
|
||||||
extern bool common_hal_wifi_radio_get_ap_active(wifi_radio_obj_t *self);
|
extern bool common_hal_wifi_radio_get_ap_active(wifi_radio_obj_t *self);
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_stations_ap(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_stations_ap(wifi_radio_obj_t *self);
|
||||||
|
|
||||||
extern void common_hal_wifi_radio_start_dhcp_client(wifi_radio_obj_t *self, bool ipv4, bool ipv6);
|
extern void common_hal_wifi_radio_start_dhcp_client(wifi_radio_obj_t *self, bool ipv4, bool ipv6);
|
||||||
extern void common_hal_wifi_radio_stop_dhcp_client(wifi_radio_obj_t *self);
|
extern void common_hal_wifi_radio_stop_dhcp_client(wifi_radio_obj_t *self);
|
||||||
extern void common_hal_wifi_radio_start_dhcp_server(wifi_radio_obj_t *self);
|
extern void common_hal_wifi_radio_start_dhcp_server(wifi_radio_obj_t *self);
|
||||||
extern void common_hal_wifi_radio_stop_dhcp_server(wifi_radio_obj_t *self);
|
extern void common_hal_wifi_radio_stop_dhcp_server(wifi_radio_obj_t *self);
|
||||||
|
|
||||||
extern wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, mp_float_t timeout, uint8_t *bssid, size_t bssid_len);
|
extern wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, mp_float_t timeout, uint8_t *bssid, size_t bssid_len);
|
||||||
extern bool common_hal_wifi_radio_get_connected(wifi_radio_obj_t *self);
|
extern bool common_hal_wifi_radio_get_connected(wifi_radio_obj_t *self);
|
||||||
|
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_ap_info(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_ap_info(wifi_radio_obj_t *self);
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_ipv4_dns(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_ipv4_dns(wifi_radio_obj_t *self);
|
||||||
extern void common_hal_wifi_radio_set_ipv4_dns(wifi_radio_obj_t *self, mp_obj_t ipv4_dns_addr);
|
extern void common_hal_wifi_radio_set_ipv4_dns(wifi_radio_obj_t *self, mp_obj_t ipv4_dns_addr);
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_ipv4_gateway(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_ipv4_gateway(wifi_radio_obj_t *self);
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_ipv4_gateway_ap(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_ipv4_gateway_ap(wifi_radio_obj_t *self);
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_ipv4_subnet(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_ipv4_subnet(wifi_radio_obj_t *self);
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_ipv4_subnet_ap(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_ipv4_subnet_ap(wifi_radio_obj_t *self);
|
||||||
uint32_t wifi_radio_get_ipv4_address(wifi_radio_obj_t *self);
|
uint32_t wifi_radio_get_ipv4_address(wifi_radio_obj_t *self);
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_ipv4_address(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_ipv4_address(wifi_radio_obj_t *self);
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_ipv4_address_ap(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_ipv4_address_ap(wifi_radio_obj_t *self);
|
||||||
|
|
||||||
mp_obj_t common_hal_wifi_radio_get_addresses(wifi_radio_obj_t *self);
|
mp_obj_t common_hal_wifi_radio_get_addresses(wifi_radio_obj_t *self);
|
||||||
mp_obj_t common_hal_wifi_radio_get_addresses_ap(wifi_radio_obj_t *self);
|
mp_obj_t common_hal_wifi_radio_get_addresses_ap(wifi_radio_obj_t *self);
|
||||||
|
|
||||||
extern mp_obj_t common_hal_wifi_radio_get_dns(wifi_radio_obj_t *self);
|
extern mp_obj_t common_hal_wifi_radio_get_dns(wifi_radio_obj_t *self);
|
||||||
extern void common_hal_wifi_radio_set_dns(wifi_radio_obj_t *self, mp_obj_t dns_addr);
|
extern void common_hal_wifi_radio_set_dns(wifi_radio_obj_t *self, mp_obj_t dns_addr);
|
||||||
|
|
||||||
extern void common_hal_wifi_radio_set_ipv4_address(wifi_radio_obj_t *self, mp_obj_t ipv4, mp_obj_t netmask, mp_obj_t gateway, mp_obj_t ipv4_dns_addr);
|
extern void common_hal_wifi_radio_set_ipv4_address(wifi_radio_obj_t *self, mp_obj_t ipv4, mp_obj_t netmask, mp_obj_t gateway, mp_obj_t ipv4_dns_addr);
|
||||||
extern void common_hal_wifi_radio_set_ipv4_address_ap(wifi_radio_obj_t *self, mp_obj_t ipv4, mp_obj_t netmask, mp_obj_t gateway);
|
extern void common_hal_wifi_radio_set_ipv4_address_ap(wifi_radio_obj_t *self, mp_obj_t ipv4, mp_obj_t netmask, mp_obj_t gateway);
|
||||||
|
|
||||||
extern mp_int_t common_hal_wifi_radio_ping(wifi_radio_obj_t *self, mp_obj_t ip_address, mp_float_t timeout);
|
extern mp_int_t common_hal_wifi_radio_ping(wifi_radio_obj_t *self, mp_obj_t ip_address, mp_float_t timeout);
|
||||||
|
|
|
||||||
|
|
@ -30,21 +30,22 @@ static MP_DEFINE_CONST_FUN_OBJ_0(wifi___init___obj, wifi___init__);
|
||||||
|
|
||||||
static const mp_rom_map_elem_t wifi_module_globals_table[] = {
|
static const mp_rom_map_elem_t wifi_module_globals_table[] = {
|
||||||
// Name
|
// Name
|
||||||
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_wifi) },
|
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_wifi) },
|
||||||
|
|
||||||
// Initialization
|
// Initialization
|
||||||
{ MP_ROM_QSTR(MP_QSTR___init__), MP_ROM_PTR(&wifi___init___obj) },
|
{ MP_ROM_QSTR(MP_QSTR___init__), MP_ROM_PTR(&wifi___init___obj) },
|
||||||
|
|
||||||
// Classes
|
// Classes
|
||||||
{ MP_ROM_QSTR(MP_QSTR_AuthMode), MP_ROM_PTR(&wifi_authmode_type) },
|
{ MP_ROM_QSTR(MP_QSTR_AuthMode), MP_ROM_PTR(&wifi_authmode_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_Monitor), MP_ROM_PTR(&wifi_monitor_type) },
|
{ MP_ROM_QSTR(MP_QSTR_Monitor), MP_ROM_PTR(&wifi_monitor_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_Network), MP_ROM_PTR(&wifi_network_type) },
|
{ MP_ROM_QSTR(MP_QSTR_Network), MP_ROM_PTR(&wifi_network_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_Packet), MP_ROM_PTR(&wifi_packet_type) },
|
{ MP_ROM_QSTR(MP_QSTR_Packet), MP_ROM_PTR(&wifi_packet_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_Radio), MP_ROM_PTR(&wifi_radio_type) },
|
{ MP_ROM_QSTR(MP_QSTR_PowerManagement), MP_ROM_PTR(&wifi_power_management_type) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_Station), MP_ROM_PTR(&wifi_radio_station_type) },
|
{ MP_ROM_QSTR(MP_QSTR_Radio), MP_ROM_PTR(&wifi_radio_type) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_Station), MP_ROM_PTR(&wifi_radio_station_type) },
|
||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
{ MP_ROM_QSTR(MP_QSTR_radio), MP_ROM_PTR(&common_hal_wifi_radio_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_radio), MP_ROM_PTR(&common_hal_wifi_radio_obj) },
|
||||||
};
|
};
|
||||||
static MP_DEFINE_CONST_DICT(wifi_module_globals, wifi_module_globals_table);
|
static MP_DEFINE_CONST_DICT(wifi_module_globals, wifi_module_globals_table);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue