From 50f521b5283a5ac01b03bfc640e92d848d37bd58 Mon Sep 17 00:00:00 2001 From: flyingcys Date: Sat, 25 Nov 2023 22:54:24 +0800 Subject: [PATCH] [bsp]add bl808 wifi driver (#8294) --- bsp/bouffalo_lab/README.md | 1 + bsp/bouffalo_lab/bl808/m0/.config | 238 +++++++- bsp/bouffalo_lab/bl808/m0/applications/main.c | 8 +- bsp/bouffalo_lab/bl808/m0/board/Kconfig | 20 + bsp/bouffalo_lab/bl808/m0/board/SConscript | 10 +- bsp/bouffalo_lab/bl808/m0/board/board.c | 29 +- .../m0/board/linker_scripts/bl808_flash_m0.ld | 81 ++- .../bl808/m0/board/wlan_port/SConscript | 8 + .../bl808/m0/board/wlan_port/drv_wifi.c | 532 ++++++++++++++++++ .../bl808/m0/board/wlan_port/drv_wifi.h | 16 + bsp/bouffalo_lab/bl808/m0/rtconfig.h | 134 ++++- .../soc/bl808/std/startup/m0/start_load.c | 6 + .../soc/bl808/std/startup/m0/system_bl808.c | 9 + 13 files changed, 1046 insertions(+), 46 deletions(-) mode change 100644 => 100755 bsp/bouffalo_lab/bl808/m0/.config create mode 100755 bsp/bouffalo_lab/bl808/m0/board/wlan_port/SConscript create mode 100644 bsp/bouffalo_lab/bl808/m0/board/wlan_port/drv_wifi.c create mode 100755 bsp/bouffalo_lab/bl808/m0/board/wlan_port/drv_wifi.h diff --git a/bsp/bouffalo_lab/README.md b/bsp/bouffalo_lab/README.md index da8e3de55d..2628406a66 100755 --- a/bsp/bouffalo_lab/README.md +++ b/bsp/bouffalo_lab/README.md @@ -201,6 +201,7 @@ Windows下推荐使用[env工具][1],在console下进入bsp/bouffalo_lab/bl61x | HWTIMER | 支持 | | | FLASH | 支持 | | | SDCARD | 支持 | | +| Wi-Fi | 支持 | 仅 BL808 支持 | diff --git a/bsp/bouffalo_lab/bl808/m0/.config b/bsp/bouffalo_lab/bl808/m0/.config old mode 100644 new mode 100755 index 337d681380..60471004b7 --- a/bsp/bouffalo_lab/bl808/m0/.config +++ b/bsp/bouffalo_lab/bl808/m0/.config @@ -6,10 +6,11 @@ # # RT-Thread Kernel # -CONFIG_RT_NAME_MAX=8 +CONFIG_RT_NAME_MAX=16 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set # CONFIG_RT_USING_AMP is not set # CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 CONFIG_RT_ALIGN_SIZE=8 # CONFIG_RT_THREAD_PRIORITY_8 is not set CONFIG_RT_THREAD_PRIORITY_32=y @@ -21,10 +22,10 @@ CONFIG_RT_USING_HOOK=y CONFIG_RT_HOOK_USING_FUNC_PTR=y CONFIG_RT_USING_IDLE_HOOK=y CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=1024 +CONFIG_IDLE_THREAD_STACK_SIZE=2048 CONFIG_RT_USING_TIMER_SOFT=y CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=512 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=2048 # # kservice optimization @@ -37,7 +38,7 @@ CONFIG_RT_KSERVICE_USING_STDLIB=y CONFIG_RT_USING_DEBUG=y CONFIG_RT_DEBUGING_COLOR=y CONFIG_RT_DEBUGING_CONTEXT=y -# CONFIG_RT_DEBUGING_INIT is not set +# CONFIG_RT_DEBUGING_AUTO_INIT is not set # # Inter-Thread communication @@ -65,19 +66,15 @@ CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set # CONFIG_RT_USING_HEAP_ISR is not set CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y -CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLEBUF_SIZE=512 CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" -CONFIG_RT_VER_NUM=0x50002 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 # CONFIG_RT_USING_CACHE is not set # CONFIG_RT_USING_HW_ATOMIC is not set # CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set @@ -148,20 +145,25 @@ CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 # CONFIG_RT_DFS_ELM_USE_ERASE is not set CONFIG_RT_DFS_ELM_REENTRANT=y CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 +# CONFIG_RT_DFS_ELM_USE_EXFAT is not set CONFIG_RT_USING_DFS_DEVFS=y CONFIG_RT_USING_DFS_ROMFS=y # CONFIG_RT_USING_DFS_CROMFS is not set # CONFIG_RT_USING_DFS_RAMFS is not set # CONFIG_RT_USING_DFS_TMPFS is not set # CONFIG_RT_USING_DFS_MQUEUE is not set +# CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 -# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=8192 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 CONFIG_RT_USING_SERIAL=y CONFIG_RT_USING_SERIAL_V1=y # CONFIG_RT_USING_SERIAL_V2 is not set @@ -182,7 +184,6 @@ CONFIG_RT_USING_PWM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set @@ -203,7 +204,33 @@ CONFIG_RT_USING_WDT=y # CONFIG_RT_USING_PULSE_ENCODER is not set # CONFIG_RT_USING_INPUT_CAPTURE is not set # CONFIG_RT_USING_DEV_BUS is not set -# CONFIG_RT_USING_WIFI is not set +CONFIG_RT_USING_WIFI=y +CONFIG_RT_WLAN_DEVICE_STA_NAME="wlan0" +CONFIG_RT_WLAN_DEVICE_AP_NAME="wlan1" +CONFIG_RT_WLAN_SSID_MAX_LENGTH=32 +CONFIG_RT_WLAN_PASSWORD_MAX_LENGTH=32 +CONFIG_RT_WLAN_DEV_EVENT_NUM=2 +CONFIG_RT_WLAN_MANAGE_ENABLE=y +CONFIG_RT_WLAN_SCAN_WAIT_MS=10000 +CONFIG_RT_WLAN_CONNECT_WAIT_MS=10000 +CONFIG_RT_WLAN_SCAN_SORT=y +CONFIG_RT_WLAN_MSH_CMD_ENABLE=y +CONFIG_RT_WLAN_AUTO_CONNECT_ENABLE=y +CONFIG_AUTO_CONNECTION_PERIOD_MS=2000 +CONFIG_RT_WLAN_CFG_ENABLE=y +CONFIG_RT_WLAN_CFG_INFO_MAX=3 +CONFIG_RT_WLAN_PROT_ENABLE=y +CONFIG_RT_WLAN_PROT_NAME_LEN=8 +CONFIG_RT_WLAN_PROT_MAX=2 +CONFIG_RT_WLAN_DEFAULT_PROT="lwip" +CONFIG_RT_WLAN_PROT_LWIP_ENABLE=y +CONFIG_RT_WLAN_PROT_LWIP_NAME="lwip" +CONFIG_RT_WLAN_PROT_LWIP_PBUF_FORCE=y +CONFIG_RT_WLAN_WORK_THREAD_ENABLE=y +CONFIG_RT_WLAN_WORKQUEUE_THREAD_NAME="wlan" +CONFIG_RT_WLAN_WORKQUEUE_THREAD_SIZE=8192 +CONFIG_RT_WLAN_WORKQUEUE_THREAD_PRIO=15 +# CONFIG_RT_WLAN_DEBUG is not set # CONFIG_RT_USING_VIRTIO is not set # CONFIG_RT_USING_KTIME is not set @@ -234,7 +261,17 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer # -# CONFIG_RT_USING_POSIX_FS is not set +CONFIG_RT_USING_POSIX_FS=y +# CONFIG_RT_USING_POSIX_DEVIO is not set +# CONFIG_RT_USING_POSIX_STDIO is not set +CONFIG_RT_USING_POSIX_POLL=y +CONFIG_RT_USING_POSIX_SELECT=y +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set +CONFIG_RT_USING_POSIX_SOCKET=y +# CONFIG_RT_USING_POSIX_TERMIOS is not set +# CONFIG_RT_USING_POSIX_AIO is not set +# CONFIG_RT_USING_POSIX_MMAN is not set # CONFIG_RT_USING_POSIX_DELAY is not set # CONFIG_RT_USING_POSIX_CLOCK is not set # CONFIG_RT_USING_POSIX_TIMER is not set @@ -256,9 +293,87 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # Network # -# CONFIG_RT_USING_SAL is not set -# CONFIG_RT_USING_NETDEV is not set -# CONFIG_RT_USING_LWIP is not set +CONFIG_RT_USING_SAL=y +CONFIG_SAL_INTERNET_CHECK=y + +# +# Docking with protocol stacks +# +CONFIG_SAL_USING_LWIP=y +# CONFIG_SAL_USING_AT is not set +CONFIG_SAL_USING_TLS=y +CONFIG_SAL_USING_POSIX=y +# CONFIG_SAL_USING_AF_UNIX is not set +CONFIG_RT_USING_NETDEV=y +CONFIG_NETDEV_USING_IFCONFIG=y +CONFIG_NETDEV_USING_PING=y +CONFIG_NETDEV_USING_NETSTAT=y +CONFIG_NETDEV_USING_AUTO_DEFAULT=y +# CONFIG_NETDEV_USING_IPV6 is not set +CONFIG_NETDEV_IPV4=1 +CONFIG_NETDEV_IPV6=0 +# CONFIG_NETDEV_IPV6_SCOPES is not set +CONFIG_RT_USING_LWIP=y +# CONFIG_RT_USING_LWIP_LOCAL_VERSION is not set +# CONFIG_RT_USING_LWIP141 is not set +# CONFIG_RT_USING_LWIP203 is not set +CONFIG_RT_USING_LWIP212=y +# CONFIG_RT_USING_LWIP_LATEST is not set +CONFIG_RT_USING_LWIP_VER_NUM=0x20102 +# CONFIG_RT_USING_LWIP_IPV6 is not set +CONFIG_RT_LWIP_MEM_ALIGNMENT=4 +CONFIG_RT_LWIP_IGMP=y +CONFIG_RT_LWIP_ICMP=y +# CONFIG_RT_LWIP_SNMP is not set +CONFIG_RT_LWIP_DNS=y +CONFIG_RT_LWIP_DHCP=y +CONFIG_IP_SOF_BROADCAST=1 +CONFIG_IP_SOF_BROADCAST_RECV=1 + +# +# Static IPv4 Address +# +CONFIG_RT_LWIP_IPADDR="192.168.1.30" +CONFIG_RT_LWIP_GWADDR="192.168.1.1" +CONFIG_RT_LWIP_MSKADDR="255.255.255.0" +CONFIG_RT_LWIP_UDP=y +CONFIG_RT_LWIP_TCP=y +CONFIG_RT_LWIP_RAW=y +# CONFIG_RT_LWIP_PPP is not set +CONFIG_RT_MEMP_NUM_NETCONN=8 +CONFIG_RT_LWIP_PBUF_NUM=16 +CONFIG_RT_LWIP_RAW_PCB_NUM=4 +CONFIG_RT_LWIP_UDP_PCB_NUM=4 +CONFIG_RT_LWIP_TCP_PCB_NUM=4 +CONFIG_RT_LWIP_TCP_SEG_NUM=40 +CONFIG_RT_LWIP_TCP_SND_BUF=8196 +CONFIG_RT_LWIP_TCP_WND=8196 +CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=10 +CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 +CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=4096 +CONFIG_LWIP_NO_RX_THREAD=y +CONFIG_LWIP_NO_TX_THREAD=y +CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 +CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=4096 +CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 +# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set +CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 +CONFIG_LWIP_NETIF_LINK_CALLBACK=1 +CONFIG_SO_REUSE=1 +CONFIG_LWIP_SO_RCVTIMEO=1 +CONFIG_LWIP_SO_SNDTIMEO=1 +CONFIG_LWIP_SO_RCVBUF=1 +CONFIG_LWIP_SO_LINGER=0 +# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set +CONFIG_LWIP_NETIF_LOOPBACK=0 +# CONFIG_RT_LWIP_STATS is not set +# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set +CONFIG_RT_LWIP_USING_PING=y +CONFIG_LWIP_USING_DHCPD=y +CONFIG_DHCPD_SERVER_IP="192.168.169.1" +# CONFIG_DHCPD_USING_ROUTER is not set +# CONFIG_LWIP_USING_CUSTOMER_DNS_SERVER is not set +# CONFIG_RT_LWIP_DEBUG is not set # CONFIG_RT_USING_AT is not set # @@ -273,6 +388,17 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set + +# +# Memory protection +# +# CONFIG_RT_USING_MEM_PROTECTION is not set +# CONFIG_RT_USING_HW_STACK_GUARD is not set + # # RT-Thread Utestcases # @@ -313,6 +439,20 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set + +# +# BL808 WiFi +# +CONFIG_PKG_USING_WLAN_BL808=y +CONFIG_PKG_WLAN_BL808_PATH="/packages/iot/WiFi/wlan_bl808" +CONFIG_PKG_USING_WLAN_BL808_LATEST_VERSION=y +# CONFIG_PKG_USING_WLAN_BL808_V001 is not set +CONFIG_PKG_WLAN_BL808_VER="latest" # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -334,7 +474,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_JIOT-C-SDK is not set # CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set # CONFIG_PKG_USING_JOYLINK is not set -# CONFIG_PKG_USING_EZ_IOT_OS is not set # CONFIG_PKG_USING_IOTSHARP_SDK is not set # CONFIG_PKG_USING_NIMBLE is not set # CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set @@ -355,6 +494,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -374,11 +514,45 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages # -# CONFIG_PKG_USING_MBEDTLS is not set +CONFIG_PKG_USING_MBEDTLS=y + +# +# Select Root Certificate +# +# CONFIG_PKG_USING_MBEDTLS_USE_ALL_CERTS is not set +# CONFIG_PKG_USING_MBEDTLS_USER_CERTS is not set +# CONFIG_PKG_USING_MBEDTLS_THAWTE_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_VERSIGN_PBULIC_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_VERSIGN_UNIVERSAL_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_GEOTRUST_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_DIGICERT_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_GODADDY_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_COMODOR_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_DST_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_CLOBALSIGN_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_ENTRUST_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_AMAZON_ROOT_CA is not set +# CONFIG_PKG_USING_MBEDTLS_CERTUM_TRUSTED_NETWORK_ROOT_CA is not set +CONFIG_MBEDTLS_AES_ROM_TABLES=y +CONFIG_MBEDTLS_ECP_WINDOW_SIZE=2 +CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=3584 +# CONFIG_PKG_USING_MBEDTLS_EXAMPLE is not set +# CONFIG_PKG_USING_MBEDTLS_DEBUG is not set +CONFIG_PKG_MBEDTLS_PATH="/packages/security/mbedtls" +CONFIG_PKG_USING_MBEDTLS_V2281=y +# CONFIG_PKG_USING_MBEDTLS_V27102 is not set +# CONFIG_PKG_USING_MBEDTLS_V27101 is not set +# CONFIG_PKG_USING_MBEDTLS_V2710 is not set +# CONFIG_PKG_USING_MBEDTLS_V261 is not set +# CONFIG_PKG_USING_MBEDTLS_V260 is not set +# CONFIG_PKG_USING_MBEDTLS_LATEST_VERSION is not set +CONFIG_PKG_MBEDTLS_VER="v2.28.1" # CONFIG_PKG_USING_LIBSODIUM is not set # CONFIG_PKG_USING_LIBHYDROGEN is not set # CONFIG_PKG_USING_TINYCRYPT is not set @@ -420,7 +594,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -476,6 +649,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_CPU_USAGE is not set # CONFIG_PKG_USING_GBK2UTF8 is not set # CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_MBEDTLS_BENCH is not set # CONFIG_PKG_USING_KDB is not set # CONFIG_PKG_USING_WAMR is not set # CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set @@ -495,6 +669,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -531,6 +706,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -554,6 +731,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -567,6 +745,11 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set # CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -631,6 +814,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -732,6 +916,10 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_FINGERPRINT is not set # CONFIG_PKG_USING_BT_ECB02C is not set # CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set # CONFIG_PKG_USING_SPI_TOOLS is not set # @@ -746,6 +934,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages @@ -792,6 +981,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -976,6 +1166,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set @@ -984,6 +1175,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set # CONFIG_PKG_USING_ARDUINO_TICKER is not set # CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set @@ -1020,7 +1212,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1041,6 +1232,9 @@ CONFIG_BSP_USING_BL808=y CONFIG_BL808_CORE_M0=y CONFIG_BSP_USING_TRIPLECORE=y CONFIG_BSP_USING_PSRAM=y +CONFIG_BSP_USING_WIFI=y +CONFIG_LWIP_SUPPORT_CUSTOM_PBUF=1 +CONFIG_PBUF_LINK_ENCAPSULATION_HLEN=128 # # General Drivers Configuration diff --git a/bsp/bouffalo_lab/bl808/m0/applications/main.c b/bsp/bouffalo_lab/bl808/m0/applications/main.c index 6897456dde..8d315ddf8a 100644 --- a/bsp/bouffalo_lab/bl808/m0/applications/main.c +++ b/bsp/bouffalo_lab/bl808/m0/applications/main.c @@ -6,14 +6,20 @@ * Change Logs: * Date Author Notes * 2022/12/25 flyingcys first version - */ + * 2023/11/23 flyingcys add wifi driver + */ #include #include +#include int main(void) { rt_kprintf("Hello, RISC-V!\n"); + /* set wifi work mode */ + rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION); + rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP); + return 0; } diff --git a/bsp/bouffalo_lab/bl808/m0/board/Kconfig b/bsp/bouffalo_lab/bl808/m0/board/Kconfig index 5b4ceb3f6f..96d2d32dee 100755 --- a/bsp/bouffalo_lab/bl808/m0/board/Kconfig +++ b/bsp/bouffalo_lab/bl808/m0/board/Kconfig @@ -19,3 +19,23 @@ config BSP_USING_TRIPLECORE config BSP_USING_PSRAM bool "Enable PSRAM" default n + +config BSP_USING_WIFI + bool "Enable Wi-Fi" + default y + select PKG_USING_WLAN_BL808 + select RT_USING_WIFI + select RT_WLAN_PROT_LWIP_PBUF_FORCE + select BSP_USING_PSRAM + select RT_USING_LWIP + + config LWIP_SUPPORT_CUSTOM_PBUF + int + default 1 + + config PBUF_LINK_ENCAPSULATION_HLEN + int + default 128 + + + diff --git a/bsp/bouffalo_lab/bl808/m0/board/SConscript b/bsp/bouffalo_lab/bl808/m0/board/SConscript index 0907feabe2..abc191f550 100755 --- a/bsp/bouffalo_lab/bl808/m0/board/SConscript +++ b/bsp/bouffalo_lab/bl808/m0/board/SConscript @@ -6,4 +6,12 @@ CPPPATH = [cwd] group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH) -Return('group') +objs = [group] + +list = os.listdir(cwd) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') \ No newline at end of file diff --git a/bsp/bouffalo_lab/bl808/m0/board/board.c b/bsp/bouffalo_lab/bl808/m0/board/board.c index e958c674ca..48bb974685 100644 --- a/bsp/bouffalo_lab/bl808/m0/board/board.c +++ b/bsp/bouffalo_lab/bl808/m0/board/board.c @@ -142,9 +142,25 @@ void rt_hw_board_init(void) bflb_mtimer_config(CPU_Get_MTimer_Clock() / RT_TICK_PER_SECOND, systick_isr); +#ifdef BSP_USING_PSRAM + if (uhs_psram_init() < 0) + { + rt_kprintf("uhs_psram_init failed!\n"); + return; + } + + extern uint32_t __psrambss_start__; + extern uint32_t __psrambss_end__; + uint32_t *pDest; + pDest = &__psrambss_start__; + + for (; pDest < &__psrambss_end__;) { + *pDest++ = 0ul; + } +#endif + #ifdef RT_USING_HEAP /* initialize memory system */ - rt_kprintf("RT_HW_HEAP_BEGIN:%x RT_HW_HEAP_END:%x size: %d\r\n", RT_HW_HEAP_BEGIN, RT_HW_HEAP_END, RT_HW_HEAP_END - RT_HW_HEAP_BEGIN); rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END); #endif @@ -153,13 +169,6 @@ void rt_hw_board_init(void) rt_hw_uart_init(); #endif -#ifdef BSP_USING_PSRAM - if (uhs_psram_init() < 0) - { - rt_kprintf("uhs_psram_init failed!\n"); - } -#endif - /* Set the shell console output device */ #if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE) rt_console_set_device(RT_CONSOLE_DEVICE_NAME); @@ -189,6 +198,10 @@ void rt_hw_board_init(void) BL_WR_WORD(IPC_SYNC_ADDR2, IPC_SYNC_FLAG); L1C_DCache_Clean_By_Addr(IPC_SYNC_ADDR1, 8); #endif + +#ifdef RT_USING_HEAP + rt_kprintf("RT_HW_HEAP_BEGIN:%x RT_HW_HEAP_END:%x size: %d\r\n", RT_HW_HEAP_BEGIN, RT_HW_HEAP_END, RT_HW_HEAP_END - RT_HW_HEAP_BEGIN); +#endif } void rt_hw_cpu_reset(void) diff --git a/bsp/bouffalo_lab/bl808/m0/board/linker_scripts/bl808_flash_m0.ld b/bsp/bouffalo_lab/bl808/m0/board/linker_scripts/bl808_flash_m0.ld index 2dc1f8fa37..98ec2bbba8 100755 --- a/bsp/bouffalo_lab/bl808/m0/board/linker_scripts/bl808_flash_m0.ld +++ b/bsp/bouffalo_lab/bl808/m0/board/linker_scripts/bl808_flash_m0.ld @@ -26,9 +26,12 @@ MEMORY xip_memory (rx) : ORIGIN = 0x58000000, LENGTH = 32M itcm_memory (rx) : ORIGIN = 0x62020000, LENGTH = 20K dtcm_memory (rx) : ORIGIN = 0x62025000, LENGTH = 4K - nocache_ram_memory (!rx) : ORIGIN = 0x22026000, LENGTH = 40K - ram_memory (!rx) : ORIGIN = 0x62030000, LENGTH = 160K + 64K - 20K - 4K - 40K + nocache_ram_memory (!rx) : ORIGIN = 0x22026000, LENGTH = 0K + ram_memory (!rx) : ORIGIN = 0x22026000, LENGTH = 40K + ram_wifi (!rx) : ORIGIN = 0x22030000, LENGTH = 96K + ram_dram (wxa) : ORIGIN = 0x3EF80000, LENGTH = 512K xram_memory (!rx) : ORIGIN = 0x40000000, LENGTH = 16K + ram_psram (!rx) : ORIGIN = 0x50000000, LENGTH = 1M } SECTIONS @@ -97,6 +100,12 @@ SECTIONS *(.srodata) *(.srodata.*) + /* static fw attribute entry */ + . = ALIGN(4); + _bl_static_fw_cfg_entry_start = .; + KEEP(*(.wifi.cfg.entry)) + _bl_static_fw_cfg_entry_end = .; + . = ALIGN(4); __text_code_end__ = .; } > xip_memory @@ -209,19 +218,74 @@ SECTIONS __etext_final = (__ram_load_addr + SIZEOF (RAM_DATA)); ASSERT(__etext_final <= ORIGIN(xip_memory) + LENGTH(xip_memory), "code memory overflow") + .wifibss (NOLOAD) : + { + PROVIDE( __wifi_bss_start = ADDR(.wifibss) ); + PROVIDE( __wifi_bss_end = ADDR(.wifibss) + SIZEOF(.wifibss) ); + *ipc_shared.o(COMMON) + *sdu_shared.o(COMMON) + *hal_desc.o(COMMON) + *txl_buffer_shared.o(COMMON) + *txl_frame_shared.o(COMMON) + *scan_shared.o(COMMON) + *scanu_shared.o(COMMON) + *mfp_bip.o(COMMON) + *me_mic.o(COMMON) + *bl_sta_mgmt_others.o(COMMON) + *bl_pmk_mgmt.o(COMMON) + *bl_pmk_mgmt_internal.o(COMMON) + *libwifi_drv.a:bl_utils.o(COMMON) + *libwifi_drv.a:bl_utils.o(.bss*) + *(.wifi_ram*) + . = ALIGN(16); + } > ram_wifi + .bss (NOLOAD) : { . = ALIGN(4); __bss_start__ = .; - *(.bss*) + *interrupt*.o*(.bss*) + *riscv_fpu*.o*(.bss*) + *start*.o*(.bss*) + *system_bl808*.o*(.bss*) + *vector*.o*(.bss*) + *bl808_*.o*(.bss*) + *bflb_*.o*(.bss*) + *(.sbss*) - *(COMMON) . = ALIGN(4); __bss_end__ = .; } > ram_memory + .drambss (NOLOAD) : + { + . = ALIGN(4); + __drambss_start__ = .; + + . = ALIGN(4); + __drambss_end__ = .; + } > ram_dram + + .psrambss (NOLOAD) : + { + . = ALIGN(4); + __psrambss_start__ = .; + + *(EXCLUDE_FILE( *interrupt*.o* \ + *riscv_fpu*.o* \ + *start*.o* \ + *system_bl808*.o* \ + *vector*.o* \ + *bl808_*.o* \ + *bflb_*.o* ) .bss*) + *(COMMON) + + . = ALIGN(4); + __psrambss_end__ = .; + } > ram_psram + .noinit_data (NOLOAD) : { . = ALIGN(4); @@ -256,10 +320,15 @@ SECTIONS . = ALIGN(4); __HeapLimit = .; - } > ram_memory + } > ram_psram - __HeapLimit = ORIGIN(ram_memory) + LENGTH(ram_memory); + __HeapLimit = ORIGIN(ram_psram) + LENGTH(ram_psram); ASSERT(__HeapLimit - __HeapBase >= HeapMinSize, "heap region overflow") + PROVIDE( _ld_ram_size2 = LENGTH(ram_wifi) ); + PROVIDE( _ld_ram_addr2 = ORIGIN(ram_wifi) ); + + PROVIDE( _ld_bl_static_cfg_entry_start = _bl_static_fw_cfg_entry_start ); + PROVIDE( _ld_bl_static_cfg_entry_end = _bl_static_fw_cfg_entry_end ); } diff --git a/bsp/bouffalo_lab/bl808/m0/board/wlan_port/SConscript b/bsp/bouffalo_lab/bl808/m0/board/wlan_port/SConscript new file mode 100755 index 0000000000..095e5be9dd --- /dev/null +++ b/bsp/bouffalo_lab/bl808/m0/board/wlan_port/SConscript @@ -0,0 +1,8 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') + Glob('*.cpp') +CPPPATH = [cwd] +group = DefineGroup('drv_wifi', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/bouffalo_lab/bl808/m0/board/wlan_port/drv_wifi.c b/bsp/bouffalo_lab/bl808/m0/board/wlan_port/drv_wifi.c new file mode 100644 index 0000000000..d033ce8776 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/m0/board/wlan_port/drv_wifi.c @@ -0,0 +1,532 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023/11/23 flyingcys first version + */ + +#include +#include + +#define DBG_TAG "drv.wifi" +#define DBG_LVL DBG_LOG +#include + +#include "drv_wifi.h" + +#define MAX_ADDR_LEN 6 + +struct _bl_wifi +{ + struct rt_wlan_device *wlan; + rt_uint8_t dev_addr[MAX_ADDR_LEN]; +}; + +static struct _bl_wifi wifi_sta; +static struct _bl_wifi wifi_ap; + +extern err_t bl_wifi_tx(uint8_t idx, struct pbuf* p); + +void event_cb_wifi_event(input_event_t *event, void *private_data) +{ + switch (event->code) + { + case CODE_WIFI_ON_INIT_DONE: + { + } + break; + + case CODE_WIFI_ON_MGMR_DONE: + { + } + break; + + case CODE_WIFI_ON_CONNECTED: + { + rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_CONNECT, RT_NULL); + wifi_mgmr_api_ip_got(); + } + break; + + case CODE_WIFI_ON_DISCONNECT: + { + rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_DISCONNECT, RT_NULL); + } + break; + + case CODE_WIFI_ON_SCAN_DONE: + { + } + break; + + case CODE_WIFI_ON_PRE_GOT_IP: + { + wifi_mgmr_api_ip_got(); + } + break; + + case CODE_WIFI_ON_AP_STARTED: + { + rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_START, RT_NULL); + } + break; + + case CODE_WIFI_ON_AP_STOPPED: + { + rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_STOP, RT_NULL); + } + break; + + default: + { + LOG_D(" unknow event code %d\r\n", event->code); + } + break; + } +} + +static rt_err_t drv_wlan_init(struct rt_wlan_device *wlan) +{ + static rt_bool_t init = RT_FALSE; + + if (init == RT_TRUE) + { + return RT_EOK; + } + + bl808_wifi_init(event_cb_wifi_event); + + init = RT_TRUE; + + return RT_EOK; +} + +static rt_err_t drv_wlan_mode(struct rt_wlan_device *wlan, rt_wlan_mode_t mode) +{ + LOG_D("set wlan mode: %d", mode); + + return RT_EOK; +} + +static void wifi_scan_complete_callback(uint32_t scan_total, void *scan_buffer, void *param) +{ + struct rt_wlan_device *wlan = (struct rt_wlan_device *)param; + struct wifi_mgmr_scan_item *scan_item = (struct wifi_mgmr_scan_item *)scan_buffer; + + struct rt_wlan_info wlan_info; + struct rt_wlan_buff buff = {0}; + + rt_uint32_t i; + for (i = 0; i < scan_total; i ++) + { + memset(&wlan_info, 0, sizeof(wlan_info)); + + wlan_info.security = SECURITY_OPEN; + switch (scan_item[i].auth) + { + case WIFI_EVENT_BEACON_IND_AUTH_WPA3_SAE: + { + } + break; + case WIFI_EVENT_BEACON_IND_AUTH_WPA2_PSK_WPA3_SAE: + { + } + break; + case WIFI_EVENT_BEACON_IND_AUTH_OPEN: + { + wlan_info.security = SECURITY_OPEN; + } + break; + case WIFI_EVENT_BEACON_IND_AUTH_WEP: + { + wlan_info.security = WEP_ENABLED; + } + break; + case WIFI_EVENT_BEACON_IND_AUTH_WPA_PSK: + { + wlan_info.security = SECURITY_WPA_TKIP_PSK; + } + break; + case WIFI_EVENT_BEACON_IND_AUTH_WPA2_PSK: + { + wlan_info.security = SECURITY_WPA2_TKIP_PSK; + } + break; + case WIFI_EVENT_BEACON_IND_AUTH_WPA_WPA2_PSK: + { + wlan_info.security = SECURITY_WPA2_MIXED_PSK; + } + break; + case WIFI_EVENT_BEACON_IND_AUTH_WPA_ENT: + { + } + break; + case WIFI_EVENT_BEACON_IND_AUTH_UNKNOWN: + { + } + break; + default: + { + wlan_info.security = SECURITY_OPEN; + } + break; + } + wlan_info.band = RT_802_11_BAND_2_4GHZ; + wlan_info.channel = scan_item[i].channel; + wlan_info.rssi = scan_item[i].rssi; + + memcpy(wlan_info.bssid, scan_item[i].bssid, 6); + if (scan_item[i].ssid_len) + { + wlan_info.hidden == 0; + memcpy(wlan_info.ssid.val, scan_item[i].ssid, strlen(scan_item[i].ssid)); + wlan_info.ssid.len = strlen(scan_item[i].ssid); + } + buff.data = &wlan_info; + buff.len = sizeof(wlan_info); + rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_SCAN_REPORT, &buff); + } + + rt_wlan_dev_indicate_event_handle(wlan, RT_WLAN_DEV_EVT_SCAN_DONE, RT_NULL); +} + +static rt_err_t drv_wlan_scan(struct rt_wlan_device *wlan, struct rt_scan_info *scan_info) +{ + int channel_input_num = 0; + uint8_t channel_input[MAX_FIXED_CHANNELS_LIMIT] = {0}; + const char *ssid = NULL; + uint8_t bssid[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + uint8_t scan_mode = SCAN_ACTIVE; + uint32_t duration_scan_us = 0; + + if (scan_info != NULL && scan_info->ssid.len > 0) + { + ssid = scan_info->ssid.val; + } + + if (wifi_mgmr_scan_adv(wlan, wifi_scan_complete_callback, channel_input, channel_input_num, bssid, ssid, scan_mode, duration_scan_us) != 0) + return -RT_ERROR; + + return RT_EOK; +} + +static rt_err_t drv_wlan_join(struct rt_wlan_device *wlan, struct rt_sta_info *sta_info) +{ + uint8_t channel_index = 0; + int bssid_set_flag = 0; + int quick_connect = 0; + uint32_t flags = 0; + int pci_en = 0; + int scan_mode = 0; + uint8_t pmf_flag = WIFI_MGMR_CONNECT_PMF_CAPABLE_BIT; + + if (sta_info->bssid != NULL) + { + bssid_set_flag = 1; + } + + if (quick_connect > 0) + { + flags |= WIFI_CONNECT_STOP_SCAN_CURRENT_CHANNEL_IF_TARGET_AP_FOUND; + } + + if (scan_mode) + { + flags |= WIFI_CONNECT_STOP_SCAN_ALL_CHANNEL_IF_TARGET_AP_FOUND; + } + + if (pci_en) + { + flags |= WIFI_CONNECT_PCI_EN; + } + + if (pmf_flag & WIFI_MGMR_CONNECT_PMF_CAPABLE_BIT) + { + flags |= WIFI_CONNECT_PMF_CAPABLE; + } else + { + flags &= ~WIFI_CONNECT_PMF_CAPABLE; + } + + if (pmf_flag & WIFI_MGMR_CONNECT_PMF_REQUIRED_BIT) + { + flags |= WIFI_CONNECT_PMF_REQUIRED; + } else { + flags &= ~WIFI_CONNECT_PMF_REQUIRED; + } + + wifi_mgmr_mode_set(0); + wifi_mgmr_sta_connect_mid(RT_NULL, sta_info->ssid.val, (sta_info->key.len == 0) ? NULL : sta_info->key.val, NULL, bssid_set_flag ? sta_info->bssid : NULL, 0, channel_index, 1, flags); + + return RT_EOK; +} + +static rt_err_t drv_wlan_softap(struct rt_wlan_device *wlan, struct rt_ap_info *ap_info) +{ + int ret; + uint8_t mac[6]; + uint8_t hidden_ssid = 0; + char ssid_name[32 + 1]; + char passwd[64 + 1]; + int channel; + int max_sta_supported = -1; + + memset(mac, 0, sizeof(mac)); + bl_wifi_mac_addr_get(mac); + + memset(ssid_name, 0, sizeof(ssid_name)); + memset(passwd, 0, sizeof(passwd)); + + memcpy(ssid_name, ap_info->ssid.val, (ap_info->ssid.len > 32)? 32 : ap_info->ssid.len); + + if (ap_info->hidden) + hidden_ssid = 1; + + channel = ap_info->channel; + + wifi_mgmr_mode_set(1); + + //TODO:未知原因导致 ap 有密码的情况下会crash +#if 0 + if (ap_info->key.len > 0) + { + memcpy(passwd, ap_info->key.val, (ap_info->key.len > 64)? 64 : ap_info->key.len); + ret = wifi_mgmr_api_ap_start(ssid_name, passwd, channel, hidden_ssid, max_sta_supported, 1); + } + else +#endif + { + ret = wifi_mgmr_api_ap_start(ssid_name, NULL, channel, hidden_ssid, max_sta_supported, 1); + } + + if (ret < 0) + return RT_ERROR; + + return RT_EOK; +} + +static rt_err_t drv_wlan_disconnect(struct rt_wlan_device *wlan) +{ + wifi_mgmr_sta_disconnect(); + + rt_thread_mdelay(WIFI_MGMR_STA_DISCONNECT_DELAY); + wifi_mgmr_sta_disable(NULL); + + return RT_EOK; +} + +static rt_err_t drv_wlan_ap_stop(struct rt_wlan_device *wlan) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + wifi_mgmr_api_ap_stop(); + return RT_EOK; +} + +static rt_err_t drv_wlan_ap_deauth(struct rt_wlan_device *wlan, rt_uint8_t mac[]) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + return RT_EOK; +} + +static rt_err_t drv_wlan_scan_stop(struct rt_wlan_device *wlan) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + return RT_EOK; +} + +static int drv_wlan_get_rssi(struct rt_wlan_device *wlan) +{ + int rssi; + + wifi_mgmr_rssi_get(&rssi); + + return rssi; +} + +static rt_err_t drv_wlan_set_powersave(struct rt_wlan_device *wlan, int level) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + return RT_EOK; +} + +static int drv_wlan_get_powersave(struct rt_wlan_device *wlan) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + return RT_EOK; +} + +static void sniffer_cb(void *env, uint8_t *pkt, int len, struct bl_rx_info *info) +{ + static unsigned int sniffer_counter, sniffer_last; + static unsigned int last_tick; + + (void)sniffer_last; + (void)sniffer_counter; + + sniffer_counter++; + if ((int)bl_os_get_tick() - (int)last_tick > 10 * 1000) { + bl_os_log_info("[SNIFFER] PKT Number is %d\r\n", + (int)sniffer_counter - (int)sniffer_last + ); + last_tick = bl_os_get_tick(); + sniffer_last = sniffer_counter; + } +} + +static rt_err_t drv_wlan_cfg_promisc(struct rt_wlan_device *wlan, rt_bool_t start) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + if (start) + { + wifi_mgmr_sniffer_register(RT_NULL, sniffer_cb); + wifi_mgmr_sniffer_enable(); + } + else + { + wifi_mgmr_sniffer_disable(); + wifi_mgmr_sniffer_register(RT_NULL, RT_NULL); + } + + return RT_EOK; +} + +static rt_err_t drv_wlan_cfg_filter(struct rt_wlan_device *wlan, struct rt_wlan_filter *filter) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + return RT_EOK; +} + +static rt_err_t drv_wlan_cfg_mgnt_filter(struct rt_wlan_device *wlan, rt_bool_t start) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + return RT_EOK; +} + +static rt_err_t drv_wlan_set_channel(struct rt_wlan_device *wlan, int channel) +{ + wifi_mgmr_channel_set(channel, 0); + + return RT_EOK; +} + +static int drv_wlan_get_channel(struct rt_wlan_device *wlan) +{ + int channel; + + wifi_mgmr_channel_get(&channel); + + return channel; +} + +static rt_err_t drv_wlan_set_country(struct rt_wlan_device *wlan, rt_country_code_t country_code) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + wifi_mgmr_set_country_code("CN"); + + return RT_EOK; +} + +static rt_country_code_t drv_wlan_get_country(struct rt_wlan_device *wlan) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + return RT_EOK; +} + +static rt_err_t drv_wlan_set_mac(struct rt_wlan_device *wlan, rt_uint8_t mac[]) +{ + wifi_mgmr_sta_mac_set(mac); + + return RT_EOK; +} + +static rt_err_t drv_wlan_get_mac(struct rt_wlan_device *wlan, rt_uint8_t mac[]) +{ + wifi_mgmr_sta_mac_get(mac); + + return RT_EOK; +} + +int bl_wifi_rx(uint8_t idx, struct pbuf *p) +{ + rt_err_t ret = RT_EOK; + if (idx == 0) + ret = rt_wlan_dev_report_data(wifi_sta.wlan, p, p->tot_len); + else + ret = rt_wlan_dev_report_data(wifi_ap.wlan, p, p->tot_len); + + return ret; +} + +static int drv_wlan_recv(struct rt_wlan_device *wlan, void *buff, int len) +{ + LOG_D("%s %d", __FUNCTION__, __LINE__); + + return RT_EOK; +} + +static int drv_wlan_send(struct rt_wlan_device *wlan, void *buff, int len) +{ + if (wlan->user_data == &wifi_sta) + bl_wifi_tx(0, (struct pbuf *)buff); + else + bl_wifi_tx(1, (struct pbuf *)buff); + + return RT_EOK; +} + +static const struct rt_wlan_dev_ops ops = +{ + .wlan_init = drv_wlan_init, + .wlan_mode = drv_wlan_mode, + .wlan_scan = drv_wlan_scan, + .wlan_join = drv_wlan_join, + .wlan_softap = drv_wlan_softap, + .wlan_disconnect = drv_wlan_disconnect, + .wlan_ap_stop = drv_wlan_ap_stop, + .wlan_ap_deauth = drv_wlan_ap_deauth, + .wlan_scan_stop = drv_wlan_scan_stop, + .wlan_get_rssi = drv_wlan_get_rssi, + .wlan_set_powersave = drv_wlan_set_powersave, + .wlan_get_powersave = drv_wlan_get_powersave, + .wlan_cfg_promisc = drv_wlan_cfg_promisc, + .wlan_cfg_filter = drv_wlan_cfg_filter, + .wlan_cfg_mgnt_filter = drv_wlan_cfg_mgnt_filter, + .wlan_set_channel = drv_wlan_set_channel, + .wlan_get_channel = drv_wlan_get_channel, + .wlan_set_country = drv_wlan_set_country, + .wlan_get_country = drv_wlan_get_country, + .wlan_set_mac = drv_wlan_set_mac, + .wlan_get_mac = drv_wlan_get_mac, + .wlan_recv = drv_wlan_recv, + .wlan_send = drv_wlan_send, +}; + +int rt_hw_wifi_init(void) +{ + rt_err_t ret = RT_EOK; + + static struct rt_wlan_device wlan0; + static struct rt_wlan_device wlan1; + + memset(&wifi_sta, 0, sizeof(wifi_sta)); + ret = rt_wlan_dev_register(&wlan0, RT_WLAN_DEVICE_STA_NAME, &ops, 0, &wifi_sta); + wifi_sta.wlan = &wlan0; + + memset(&wifi_ap, 0, sizeof(wifi_ap)); + ret |= rt_wlan_dev_register(&wlan1, RT_WLAN_DEVICE_AP_NAME, &ops, 0, &wifi_ap); + wifi_ap.wlan = &wlan1; + + return ret; +} +INIT_DEVICE_EXPORT(rt_hw_wifi_init); diff --git a/bsp/bouffalo_lab/bl808/m0/board/wlan_port/drv_wifi.h b/bsp/bouffalo_lab/bl808/m0/board/wlan_port/drv_wifi.h new file mode 100755 index 0000000000..c3a47b5551 --- /dev/null +++ b/bsp/bouffalo_lab/bl808/m0/board/wlan_port/drv_wifi.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023/11/23 flyingcys first version + */ + +#ifndef __DRV_WIFI_H__ +#define __DRV_WIFI_H__ + +#include "bl808_wifi.h" + +#endif /* __DRV_WIFI_H__ */ diff --git a/bsp/bouffalo_lab/bl808/m0/rtconfig.h b/bsp/bouffalo_lab/bl808/m0/rtconfig.h index 253f61cad1..7539560d4b 100644 --- a/bsp/bouffalo_lab/bl808/m0/rtconfig.h +++ b/bsp/bouffalo_lab/bl808/m0/rtconfig.h @@ -6,7 +6,8 @@ /* RT-Thread Kernel */ -#define RT_NAME_MAX 8 +#define RT_NAME_MAX 16 +#define RT_CPUS_NR 1 #define RT_ALIGN_SIZE 8 #define RT_THREAD_PRIORITY_32 #define RT_THREAD_PRIORITY_MAX 32 @@ -16,10 +17,10 @@ #define RT_HOOK_USING_FUNC_PTR #define RT_USING_IDLE_HOOK #define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 1024 +#define IDLE_THREAD_STACK_SIZE 2048 #define RT_USING_TIMER_SOFT #define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 512 +#define RT_TIMER_THREAD_STACK_SIZE 2048 /* kservice optimization */ @@ -42,14 +43,12 @@ #define RT_USING_SMALL_MEM #define RT_USING_SMALL_MEM_AS_HEAP #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE -#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLEBUF_SIZE 512 #define RT_CONSOLE_DEVICE_NAME "uart0" -#define RT_VER_NUM 0x50002 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 #define ARCH_RISCV #define ARCH_RISCV_FPU #define ARCH_RISCV_FPU_S @@ -107,6 +106,9 @@ #define RT_USING_DEVICE_IPC #define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 8192 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 #define RT_USING_SERIAL #define RT_USING_SERIAL_V1 #define RT_SERIAL_USING_DMA @@ -121,6 +123,32 @@ #define RT_MMCSD_THREAD_PREORITY 22 #define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_WDT +#define RT_USING_WIFI +#define RT_WLAN_DEVICE_STA_NAME "wlan0" +#define RT_WLAN_DEVICE_AP_NAME "wlan1" +#define RT_WLAN_SSID_MAX_LENGTH 32 +#define RT_WLAN_PASSWORD_MAX_LENGTH 32 +#define RT_WLAN_DEV_EVENT_NUM 2 +#define RT_WLAN_MANAGE_ENABLE +#define RT_WLAN_SCAN_WAIT_MS 10000 +#define RT_WLAN_CONNECT_WAIT_MS 10000 +#define RT_WLAN_SCAN_SORT +#define RT_WLAN_MSH_CMD_ENABLE +#define RT_WLAN_AUTO_CONNECT_ENABLE +#define AUTO_CONNECTION_PERIOD_MS 2000 +#define RT_WLAN_CFG_ENABLE +#define RT_WLAN_CFG_INFO_MAX 3 +#define RT_WLAN_PROT_ENABLE +#define RT_WLAN_PROT_NAME_LEN 8 +#define RT_WLAN_PROT_MAX 2 +#define RT_WLAN_DEFAULT_PROT "lwip" +#define RT_WLAN_PROT_LWIP_ENABLE +#define RT_WLAN_PROT_LWIP_NAME "lwip" +#define RT_WLAN_PROT_LWIP_PBUF_FORCE +#define RT_WLAN_WORK_THREAD_ENABLE +#define RT_WLAN_WORKQUEUE_THREAD_NAME "wlan" +#define RT_WLAN_WORKQUEUE_THREAD_SIZE 8192 +#define RT_WLAN_WORKQUEUE_THREAD_PRIO 15 /* Using USB */ @@ -138,6 +166,10 @@ /* POSIX (Portable Operating System Interface) layer */ +#define RT_USING_POSIX_FS +#define RT_USING_POSIX_POLL +#define RT_USING_POSIX_SELECT +#define RT_USING_POSIX_SOCKET /* Interprocess Communication (IPC) */ @@ -147,10 +179,77 @@ /* Network */ +#define RT_USING_SAL +#define SAL_INTERNET_CHECK + +/* Docking with protocol stacks */ + +#define SAL_USING_LWIP +#define SAL_USING_TLS +#define SAL_USING_POSIX +#define RT_USING_NETDEV +#define NETDEV_USING_IFCONFIG +#define NETDEV_USING_PING +#define NETDEV_USING_NETSTAT +#define NETDEV_USING_AUTO_DEFAULT +#define NETDEV_IPV4 1 +#define NETDEV_IPV6 0 +#define RT_USING_LWIP +#define RT_USING_LWIP212 +#define RT_USING_LWIP_VER_NUM 0x20102 +#define RT_LWIP_MEM_ALIGNMENT 4 +#define RT_LWIP_IGMP +#define RT_LWIP_ICMP +#define RT_LWIP_DNS +#define RT_LWIP_DHCP +#define IP_SOF_BROADCAST 1 +#define IP_SOF_BROADCAST_RECV 1 + +/* Static IPv4 Address */ + +#define RT_LWIP_IPADDR "192.168.1.30" +#define RT_LWIP_GWADDR "192.168.1.1" +#define RT_LWIP_MSKADDR "255.255.255.0" +#define RT_LWIP_UDP +#define RT_LWIP_TCP +#define RT_LWIP_RAW +#define RT_MEMP_NUM_NETCONN 8 +#define RT_LWIP_PBUF_NUM 16 +#define RT_LWIP_RAW_PCB_NUM 4 +#define RT_LWIP_UDP_PCB_NUM 4 +#define RT_LWIP_TCP_PCB_NUM 4 +#define RT_LWIP_TCP_SEG_NUM 40 +#define RT_LWIP_TCP_SND_BUF 8196 +#define RT_LWIP_TCP_WND 8196 +#define RT_LWIP_TCPTHREAD_PRIORITY 10 +#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 +#define RT_LWIP_TCPTHREAD_STACKSIZE 4096 +#define LWIP_NO_RX_THREAD +#define LWIP_NO_TX_THREAD +#define RT_LWIP_ETHTHREAD_PRIORITY 12 +#define RT_LWIP_ETHTHREAD_STACKSIZE 4096 +#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_NETIF_LINK_CALLBACK 1 +#define SO_REUSE 1 +#define LWIP_SO_RCVTIMEO 1 +#define LWIP_SO_SNDTIMEO 1 +#define LWIP_SO_RCVBUF 1 +#define LWIP_SO_LINGER 0 +#define LWIP_NETIF_LOOPBACK 0 +#define RT_LWIP_USING_PING +#define LWIP_USING_DHCPD +#define DHCPD_SERVER_IP "192.168.169.1" /* Utilities */ +/* Memory management */ + + +/* Memory protection */ + + /* RT-Thread Utestcases */ @@ -167,11 +266,27 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + +/* BL808 WiFi */ + +#define PKG_USING_WLAN_BL808 +#define PKG_USING_WLAN_BL808_LATEST_VERSION + /* IoT Cloud */ /* security packages */ +#define PKG_USING_MBEDTLS + +/* Select Root Certificate */ + +#define MBEDTLS_AES_ROM_TABLES +#define MBEDTLS_ECP_WINDOW_SIZE 2 +#define MBEDTLS_SSL_MAX_CONTENT_LEN 3584 +#define PKG_USING_MBEDTLS_V2281 /* language packages */ @@ -271,6 +386,9 @@ #define BL808_CORE_M0 #define BSP_USING_TRIPLECORE #define BSP_USING_PSRAM +#define BSP_USING_WIFI +#define LWIP_SUPPORT_CUSTOM_PBUF 1 +#define PBUF_LINK_ENCAPSULATION_HLEN 128 /* General Drivers Configuration */ diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/startup/m0/start_load.c b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/startup/m0/start_load.c index f9715fccac..18b4c73998 100755 --- a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/startup/m0/start_load.c +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/startup/m0/start_load.c @@ -88,5 +88,11 @@ void start_load(void) *pDest++ = 0ul; } + extern uint32_t __wifi_bss_start; + extern uint32_t __wifi_bss_end; + pDest = &__wifi_bss_start; + for ( ; pDest < &__wifi_bss_end ; ) { + *pDest++ = 0ul; + } #endif } diff --git a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/startup/m0/system_bl808.c b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/startup/m0/system_bl808.c index 8c9e9dc63c..edcf541d8c 100755 --- a/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/startup/m0/system_bl808.c +++ b/bsp/bouffalo_lab/libraries/bl_mcu_sdk/drivers/soc/bl808/std/startup/m0/system_bl808.c @@ -119,6 +119,15 @@ void System_Post_Init(void) /* make D0 all ram avalable for mcu usage */ GLB_Set_DSP_L2SRAM_Available_Size(3, 1, 1, 1); + extern uint32_t __drambss_start__; + extern uint32_t __drambss_end__; + uint32_t *pDest; + pDest = &__drambss_start__; + + for (; pDest < &__drambss_end__;) { + *pDest++ = 0ul; + } + /* global IRQ enable */ __enable_irq(); } \ No newline at end of file