stm32: Integrate in the cyw43 driver and network.WLAN class.
Enable it by setting MICROPY_PY_NETWORK_CYW43=1 at the Makefile level.
This commit is contained in:
parent
12ed6f91ee
commit
8b7409c295
@ -116,6 +116,7 @@ SRC_LIB = $(addprefix lib/,\
|
||||
mp-readline/readline.c \
|
||||
netutils/netutils.c \
|
||||
netutils/trace.c \
|
||||
netutils/dhcpserver.c \
|
||||
timeutils/timeutils.c \
|
||||
utils/pyexec.c \
|
||||
utils/interrupt_char.c \
|
||||
@ -351,6 +352,14 @@ SRC_USBDEV = $(addprefix $(USBDEV_DIR)/,\
|
||||
class/src/usbd_msc_data.c \
|
||||
)
|
||||
|
||||
ifeq ($(MICROPY_PY_NETWORK_CYW43),1)
|
||||
CFLAGS_MOD += -DMICROPY_PY_NETWORK_CYW43=1
|
||||
SRC_C += sdio.c
|
||||
EXTMOD_SRC_C += extmod/network_cyw43.c
|
||||
DRIVERS_SRC_C += drivers/cyw43/cyw43_ctrl.c drivers/cyw43/cyw43_lwip.c
|
||||
LIBS += $(TOP)/drivers/cyw43/libcyw43.a
|
||||
endif
|
||||
|
||||
ifneq ($(MICROPY_PY_WIZNET5K),0)
|
||||
WIZNET5K_DIR=drivers/wiznet5k
|
||||
INC += -I$(TOP)/$(WIZNET5K_DIR)
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "py/runtime.h"
|
||||
#include "py/gc.h"
|
||||
#include "py/mphal.h"
|
||||
#include "pendsv.h"
|
||||
#include "pin.h"
|
||||
#include "extint.h"
|
||||
#include "irq.h"
|
||||
@ -613,6 +614,15 @@ void Handle_EXTI_Irq(uint32_t line) {
|
||||
__HAL_GPIO_EXTI_CLEAR_FLAG(1 << line);
|
||||
if (line < EXTI_NUM_VECTORS) {
|
||||
mp_obj_t *cb = &MP_STATE_PORT(pyb_extint_callback)[line];
|
||||
#if MICROPY_PY_NETWORK_CYW43 && defined(pyb_pin_WL_HOST_WAKE)
|
||||
if (pyb_extint_callback_arg[line] == MP_OBJ_FROM_PTR(pyb_pin_WL_HOST_WAKE)) {
|
||||
extern void (*cyw43_poll)(void);
|
||||
if (cyw43_poll) {
|
||||
pendsv_schedule_dispatch(PENDSV_DISPATCH_CYW43, cyw43_poll);
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
if (*cb != mp_const_none) {
|
||||
// If it's a soft IRQ handler then just schedule callback for later
|
||||
if (!pyb_extint_hard_irq[line]) {
|
||||
|
@ -39,6 +39,7 @@
|
||||
|
||||
#if MICROPY_PY_LWIP
|
||||
#include "lwip/init.h"
|
||||
#include "drivers/cyw43/cyw43.h"
|
||||
#endif
|
||||
|
||||
#include "systick.h"
|
||||
@ -481,6 +482,17 @@ void stm32_main(uint32_t reset_mode) {
|
||||
systick_enable_dispatch(SYSTICK_DISPATCH_LWIP, mod_network_lwip_poll_wrapper);
|
||||
#endif
|
||||
|
||||
#if MICROPY_PY_NETWORK_CYW43
|
||||
{
|
||||
cyw43_init(&cyw43_state);
|
||||
uint8_t buf[8];
|
||||
memcpy(&buf[0], "PYBD", 4);
|
||||
mp_hal_get_mac_ascii(MP_HAL_MAC_WLAN0, 8, 4, (char*)&buf[4]);
|
||||
cyw43_wifi_ap_set_ssid(&cyw43_state, 8, buf);
|
||||
cyw43_wifi_ap_set_password(&cyw43_state, 8, (const uint8_t*)"pybd0123");
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MICROPY_HW_UART_REPL)
|
||||
// Set up a UART REPL using a statically allocated object
|
||||
pyb_uart_repl_obj.base.type = &pyb_uart_type;
|
||||
|
@ -44,6 +44,8 @@
|
||||
#include "lwip/timeouts.h"
|
||||
#include "lwip/dns.h"
|
||||
#include "lwip/dhcp.h"
|
||||
#include "extmod/network_cyw43.h"
|
||||
#include "drivers/cyw43/cyw43.h"
|
||||
|
||||
// Poll lwIP every 128ms
|
||||
#define LWIP_TICK(tick) (((tick) & ~(SYSTICK_DISPATCH_NUM_SLOTS - 1) & 0x7f) == 0)
|
||||
@ -70,6 +72,16 @@ void mod_network_lwip_poll_wrapper(uint32_t ticks_ms) {
|
||||
if (LWIP_TICK(ticks_ms)) {
|
||||
pendsv_schedule_dispatch(PENDSV_DISPATCH_LWIP, pyb_lwip_poll);
|
||||
}
|
||||
|
||||
#if MICROPY_PY_NETWORK_CYW43
|
||||
if (cyw43_poll) {
|
||||
if (cyw43_sleep != 0) {
|
||||
if (--cyw43_sleep == 0) {
|
||||
pendsv_schedule_dispatch(PENDSV_DISPATCH_CYW43, cyw43_poll);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -119,6 +131,9 @@ STATIC const mp_rom_map_elem_t mp_module_network_globals_table[] = {
|
||||
#if defined(MICROPY_HW_ETH_MDC)
|
||||
{ MP_ROM_QSTR(MP_QSTR_LAN), MP_ROM_PTR(&network_lan_type) },
|
||||
#endif
|
||||
#if MICROPY_PY_NETWORK_CYW43
|
||||
{ MP_ROM_QSTR(MP_QSTR_WLAN), MP_ROM_PTR(&mp_network_cyw43_type) },
|
||||
#endif
|
||||
|
||||
#if MICROPY_PY_WIZNET5K
|
||||
{ MP_ROM_QSTR(MP_QSTR_WIZNET5K), MP_ROM_PTR(&mod_network_nic_type_wiznet5k) },
|
||||
@ -128,6 +143,12 @@ STATIC const mp_rom_map_elem_t mp_module_network_globals_table[] = {
|
||||
#endif
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_route), MP_ROM_PTR(&network_route_obj) },
|
||||
|
||||
// Constants
|
||||
#if MICROPY_PY_NETWORK_CYW43
|
||||
{ MP_ROM_QSTR(MP_QSTR_STA_IF), MP_ROM_INT(CYW43_ITF_STA)},
|
||||
{ MP_ROM_QSTR(MP_QSTR_AP_IF), MP_ROM_INT(CYW43_ITF_AP)},
|
||||
#endif
|
||||
};
|
||||
|
||||
STATIC MP_DEFINE_CONST_DICT(mp_module_network_globals, mp_module_network_globals_table);
|
||||
|
@ -29,6 +29,9 @@
|
||||
enum {
|
||||
#if MICROPY_PY_NETWORK && MICROPY_PY_LWIP
|
||||
PENDSV_DISPATCH_LWIP,
|
||||
#if MICROPY_PY_NETWORK_CYW43
|
||||
PENDSV_DISPATCH_CYW43,
|
||||
#endif
|
||||
#endif
|
||||
PENDSV_DISPATCH_MAX
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user