pico-cyw43-arch
将 CYW43 驱动(用于 Pico W 无线功能)和 lwIP(用于 TCP/IP 协议栈)集成到 SDK 中的架构层。访问 Pico W 板载 LED 也需要此模块。
详细描述
底层 cyw43_driver 和 lwIP 协议栈都需要定期维护,并且对于是否可以从多个核心/线程调用有所限制。
pico_cyw43_arch 尝试将这些复杂性抽象为几种行为模式:
-
'poll' - 非多核/IRQ 安全,需要用户在主循环中定期调用 cyw43_arch_poll。
-
'thread_safe_background' - 多核/线程/任务安全,驱动和 TCP/IP 协议栈的维护在后台自动处理。
-
'freertos' - 多核/线程/任务安全,使用独立的 FreeRTOS 任务处理 lwIP 和驱动工作。
目前 lwIP 是唯一支持的 TCP/IP 协议栈,但 pico_cyw43_arch 的设计旨在未来独立于特定的 TCP/IP 协议栈(以及可能的蓝牙协议栈)。因此,lwIP 的集成在基础(pico_cyw43_arch)库中根据 cyw43_driver 使用的 #define CYW43_LWIP 来处理。
自 Raspberry Pi Pico SDK 1.5.0 版起,pico_cyw43_arch 库不再直接实现各种行为抽象,这项工作现在由更通用的 pico_async_context 库负责。pico_cyw43_arch 的用户可见行为因此没有改变,但 pico_cyw43_arch 现在只是一个薄封装,负责创建适当的 async_context 并简单调用以添加 lwIP 或 cyw43_driver 支持。您可以自由地执行上下文创建和添加 lwIP、cyw43_driver 或任何其他未来协议/驱动支持到您的 async_context,但目前 pico_cyw43_arch 仍提供一些 cyw43_ 专用(即 Pico W)API,用于连接管理、锁定和 GPIO 交互。
连接管理 API 在未来版本中至少可能会移至更通用的库。锁定方法现在由其 pico_async_context 等价方法支持,这些方法可互换使用(详见 cyw43_arch_lwip_begin、cyw43_arch_lwip_end 和 cyw43_arch_lwip_check)。
有关创建自己的 async_context 并添加 cyw43_driver 和 lwIP 支持的示例,请参阅源文件 cyw43_arch_poll.c、cyw43_arch_threadsafe_background.c 和 cyw43_arch_freertos.c。
虽然您可以直接使用 pico_cyw43_arch 库并自行指定 CYW43_LWIP(和其他定义),但构建系统还提供了几个其他库,它们为您聚合了定义和其他依赖项:
- pico_cyw43_arch_lwip_poll - 使用 RAW lwIP API(NO_SYS=1 模式),不进行后台处理或多核/线程安全保证。
用户必须在主循环中定期调用 cyw43_arch_poll。
此封装库:
-
设置
CYW43_LWIP=1 以在pico_cyw43_arch和 cyw43_driver 中启用lwIP支持。 -
设置 PICO_CYW43_ARCH_POLL=1 以选择轮询行为。
-
添加 pico_lwip 作为依赖项以引入 lwIP。
-
pico_cyw43_arch_lwip_threadsafe_background - 使用 RAW lwIP API(
NO_SYS=1 模式),具有多核/线程安全性,并在后台自动维护cyw43_driver和 lwIP。
对 cyw43_driver 高级 API([cyw43.h])的调用可以从任一核心或 lwIP 回调中进行,但对 lwIP(非线程安全)的调用(除 lwIP 回调中的调用外)必须用 cyw43_arch_lwip_begin 和 cyw43_arch_lwip_end 括起来。在 lwIP 回调中括起来也可以,只是不必要。
lwIP 回调在(低优先级)IRQ 上下文中发生(类似于告警回调),与其他代码交互时需要小心。
此封装库:
-
设置
CYW43_LWIP=1 以在pico_cyw43_arch和 cyw43_driver 中启用lwIP支持。 -
设置 PICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1 以选择线程安全/非轮询行为。
-
添加 pico_lwip 作为依赖项以引入 lwIP。
此库也可以在 RP2040 的 FreeRTOS 移植版本下以 NO_SYS=1 模式的 lwIP 使用(允许您从任意任务调用 cyw43_driver API,以及从 lwIP 回调或任何任务(如果用 cyw43_arch_lwip_begin 和 cyw43_arch_lwip_end 括起来的调用)调用 lwIP。同样,在 lwIP 回调中执行操作时应谨慎,因为在 IRQ 上下文中不能调用大多数 FreeRTOS API。除非有充分理由,否则应使用 pico_cyw43_arch_lwip_sys_freertos 提供的完整 FreeRTOS 集成(NO_SYS=0)。
- pico_cyw43_arch_lwip_sys_freertos - 在 OS(
NO_SYS=0)模式下使用完整lwIPAPI(包括阻塞套接字),具有多核/任务/线程安全性,并自动维护cyw43_driver和 lwIP 协议栈。
此封装库:
-
设置
CYW43_LWIP=1 以在pico_cyw43_arch和 cyw43_driver 中启用lwIP支持 。 -
设置 PICO_CYW43_ARCH_FREERTOS=1 以选择 NO_SYS=0 的 lwip/FreeRTOS 集成。
-
设置 LWIP_PROVIDE_ERRNO=1 以提供无 OS 编译所需的错误码。
-
添加 pico_lwip 作为依赖项以引入 lwIP。
-
从 lwip-contrib 添加 lwIP/FreeRTOS 代码(在 lwIP 的 contrib 目录中)。
对 cyw43_driver 高级 API([cyw43.h])的调用可以从任意任务或 lwIP 回调中进行,但不能从 IRQ 中进行。对 lwIP RAW API(非线程安全)的调用必须用 cyw43_arch_lwip_begin 和 cyw43_arch_lwip_end 括起来。在 lwIP 回调中括起来也可以,只是不必要。
此封装库要求您自行将 FreeRTOS 功能链接到应用程序。
- pico_cyw43_arch_none - 如果不需要 TCP/IP 协议栈,但希望使用板载 LED。
此封装库:
- 设置
CYW43_LWIP=0 以在pico_cyw43_arch和 cyw43_driver 中禁用lwIP支持。
模块
cyw43_driver
Pico W 无线驱动。
函数
int cyw43_arch_init (void): 初始化 CYW43 架构。int cyw43_arch_init_with_country (uint32_t country): 初始化 CYW43 架构,用于特定国家/地区。void cyw43_arch_deinit (void): 反初始化 CYW43 架构。async_context_t * cyw43_arch_async_context (void)
返回cyw43_arch代码当前使用的async_context。
void cyw43_arch_set_async_context (async_context_t *context)
设置 cyw43_arch_init 要使用的 async_context。
async_context_t * cyw43_arch_init_default_async_context (void)
为当前 cyw43_arch 类型初始化默认的 async_context。
void cyw43_arch_poll (void): 执行cyw43_driver或 TCP/IP 协议栈所需的任何处理。void cyw43_arch_wait_for_work_until (absolute_time_t until): 休眠直到有 cyw43_driver 工作需要处理。uint32_t cyw43_arch_get_country_code (void): 返回用于初始化 cyw43_arch 的国家代码。void cyw43_arch_enable_sta_mode (void): 启用 Wi-Fi STA(站点)模式。void cyw43_arch_disable_sta_mode (void): 禁用 Wi-Fi STA(站点)模式。void cyw43_arch_enable_ap_mode (const char **ssid, const char **password, uint32_t auth)
启用 Wi-Fi AP(接入点)模式。void cyw43_arch_disable_ap_mode (void): 禁用 Wi-Fi AP(接入点)模式。int cyw43_arch_wifi_connect_blocking (const char **ssid, const char **pw, uint32_t auth)
尝试连接到无线接入点,阻塞直到加入网络或检测到失败。
int cyw43_arch_wifi_connect_bssid_blocking (const char **ssid, const uint8_t **bssid, const char *pw, uint32_t auth)
尝试连接到由 SSID 和 BSSID 指定的无线接入点,阻塞直到加入网络或检测到失败。
int cyw43_arch_wifi_connect_timeout_ms (const char **ssid, const char **pw, uint32_t auth, uint32_t timeout)
尝试连接到无线接入点,阻塞直到加入网络、检测到失败或超时。
int cyw43_arch_wifi_connect_bssid_timeout_ms (const char **ssid, const uint8_t **bssid, const char *pw, uint32_t auth, uint32_t timeout)
尝试连接到由 SSID 和 BSSID 指定的无线接入点,阻塞直到加入网络、检测到失败或超时。
int cyw43_arch_wifi_connect_async (const char **ssid, const char **pw, uint32_t auth)
开始尝试连接到无线接入点。
int cyw43_arch_wifi_connect_bssid_async (const char **ssid, const uint8_t **bssid, const char *pw, uint32_t auth)
开始尝试连接到由 SSID 和 BSSID 指定的无线接入点。
void cyw43_arch_gpio_put (uint wl_gpio, bool value): 将无线芯片上的 GPIO 引脚设置为指定值。bool cyw43_arch_gpio_get (uint wl_gpio): 读取无线芯片上 GPIO 引脚的值。
函数文档
cyw43_arch_async_context
async_context_t * cyw43_arch_async_context (void)
返回 cyw43_arch 代码当前使用的 async_context。
返回值
async_context。
cyw43_arch_deinit
void cyw43_arch_deinit (void)
反初始化 CYW43 架构。
此方法反初始化 cyw43_driver 代码并反初始化 lwIP 协议栈(如果在构 建时启用)。注意,此方法应始终从与 cyw43_arch_init 相同的核心(或 RTOS 任务,取决于环境)调用。
此外,如果 cyw43_arch 使用其自己的 async_context 实例,则该实例也会被反初始化。
cyw43_arch_disable_ap_mode
void cyw43_arch_disable_ap_mode (void)
禁用 Wi-Fi AP(接入点)模式。
禁用接入点模式下的 Wi-Fi。
cyw43_arch_disable_sta_mode
void cyw43_arch_disable_sta_mode (void)
禁用 Wi-Fi STA(站点)模式。
禁用站点模式下的 Wi-Fi,断开所有活动连接。您应随后通过调用 cyw43_wifi_link_status 检查状态。
cyw43_arch_enable_ap_mode
void cyw43_arch_enable_ap_mode (const char ** ssid, const char ** password, uint32_t auth)
启用 Wi-Fi AP(接入点)模式。
在接入点模式下启用 Wi-Fi,使其他 Wi-Fi 客户端可以连接到此设备。
参数
- ssid: 接入点名称
- password: 使用的密码,无密码时传 NULL。
- auth: 启用密码时使用的授权类型。值为 [CYW43_AUTH_WPA_TKIP_PSK]、[CYW43_AUTH_WPA2_AES_PSK] 或 [CYW43_AUTH_WPA2_MIXED_PSK](参见 [CYW43_AUTH_])。
cyw43_arch_enable_sta_mode
void cyw43_arch_enable_sta_mode (void)
启用 Wi-Fi STA(站点)模式。
在站点模式下启用 Wi-Fi,使其可以连接到其他 Wi-Fi 接入点。
cyw43_arch_get_country_code
uint32_t cyw43_arch_get_country_code (void)
返回用于初始化 cyw43_arch 的国家代码。
返回值
国家代码(参见 [CYW43_COUNTRY_])
cyw43_arch_gpio_get
bool cyw43_arch_gpio_get (uint wl_gpio)
读取无线芯片上 GPIO 引脚的值。
此方法不检查设置 GPIO 时的错误。如果希望检查错误,可改用底层 cyw43_gpio_get。
参数
- wl_gpio: 无线芯片上的 GPIO 编号
返回值
GPIO 为高电平时返回 true,否则返回 false
cyw43_arch_gpio_put
void cyw43_arch_gpio_put (uint wl_gpio, bool value)
将无线芯片上的 GPIO 引脚设置为指定值。
此方法不检查设置 GPIO 时的错误。如果希望检查错误,可改用底层 cyw43_gpio_set。
参数
- wl_gpio: 无线芯片上的 GPIO 编号
- value: true 设置 GPIO 为高,false 清除为低。
cyw43_arch_init
int cyw43_arch_init (void)
初始化 CYW43 架构。
此方法初始化 cyw43_driver 代码并初始化 lwIP 协议栈(如果在构建时启用)。使用任何其他 pico_cyw43_arch、cyw43_driver 或 lwIP 函数之前必须调用此方法。
此方法使用国家代码 PICO_CYW43_ARCH_DEFAULT_COUNTRY_CODE(默认为 CYW43_COUNTRY_WORLDWIDE)初始化无线功能。全球设置可能无法提供最佳性能;考虑将 PICO_CYW43_ARCH_DEFAULT_COUNTRY_CODE 设置为其他值或调用 cyw43_arch_init_with_country。
默认情况下,此方法通过调用 cyw43_arch_init_default_async_context 初始化 cyw43_arch 代码自己的 async_context,但用户可以通过在调用此方法前调用 cyw43_arch_set_async_context() 来指定使用自己的 async_context。
返回值
初始化成功返回 0,否则返回错误码,参见 pico_error_codes
cyw43_arch_init_default_async_context
async_context_t * cyw43_arch_init_default_async_context (void)
为当前 cyw43_arch 类型初始化默认的 async_context。
此方法初始化并返回指向与 cyw43_arch 关联的静态 async_context 的指针。如果未通过 cyw43_arch_set_async_context 设置不同的 async_context,cyw43_arch_init 会自动调用此方法。
返回值
上下文,初始化失败则返回 NULL。
cyw43_arch_init_with_country
int cyw43_arch_init_with_country (uint32_t country)
初始化 CYW43 架构,用于特定国家/地区。
此方法初始化 cyw43_driver 代码并初始化 lwIP 协议栈(如果在构建时启用)。使用任何其他 pico_cyw43_arch、cyw43_driver 或 lwIP 函数之前必须调用此方法。
默认情况下,此方法通过调用 cyw43_arch_init_default_async_context 初始化 cyw43_arch 代码自己的 async_context,但用户可以通过在调用此方法前调用 cyw43_arch_set_async_context() 来指定使用自己的 async_context。
参数
- country: 要使用的国家代码(参见 [CYW43_COUNTRY_])
返回值
初始化成功返回 0,否则返回错误码,参见 pico_error_codes
cyw43_arch_poll
void cyw43_arch_poll (void)
执行 cyw43_driver 或 TCP/IP 协议栈所需的任何处理。
使用轮询风格的 pico_cyw43_arch(例如 pico_cyw43_arch_lwip_poll)时,此方法必须在主循环中定期调用。其他风格也可调用,但不是必须的。
cyw43_arch_set_async_context
void cyw43_arch_set_async_context (async_context_t * context)
设置 cyw43_arch_init 要使用的 async_context。
如果希望使用自定义 async_context 实例,必须在调用 cyw43_arch_init 或 cyw43_arch_init_with_country 之前调用此方法。
参数
context: 要使用的async_context
cyw43_arch_wait_for_work_until
void cyw43_arch_wait_for_work_until (absolute_time_t until)
休眠直到有 cyw43_driver 工作需要处理。
此方法可由等待 cyw43_driver 事件且没有其他工作要做、但希望在不阻塞与 cyw43_driver 相关的后台工作的情况下休眠的代码调用。
参数
- until: 如果没有工作要做,等待到此时间。
cyw43_arch_wifi_connect_async
int cyw43_arch_wifi_connect_async (const char ** ssid, const char ** pw, uint32_t auth)
开始尝试连接到无线接入点。
此方法告知 CYW43 驱动开始连接到接入点。您应随后通过调用 cyw43_wifi_link_status 检查状态。
参数
- ssid: 要连接的网络名称
- pw: 网络密码,无需密码时传 NULL
- auth: 启用密码时使用的授权类型。值为 [CYW43_AUTH_WPA_TKIP_PSK]、[CYW43_AUTH_WPA2_AES_PSK] 或 [CYW43_AUTH_WPA2_MIXED_PSK](参见 [CYW43_AUTH_])。
返回值
扫描成功启动返回 0,否则返回错误码,参见 pico_error_codes
cyw43_arch_wifi_connect_blocking
int cyw43_arch_wifi_connect_blocking (const char ** ssid, const char ** pw, uint32_t auth)
尝试连接到无线接入点,阻塞直到加入网络或检测到失败。
参数
- ssid: 要连接的网络名称
- pw: 网络密码,无需密码时传 NULL
- auth: 启用密码时使用的授权类型。值为 [CYW43_AUTH_WPA_TKIP_PSK]、[CYW43_AUTH_WPA2_AES_PSK] 或 [CYW43_AUTH_WPA2_MIXED_PSK](参见 [CYW43_AUTH_])。
返回值
连接成功返回 0。Wi-Fi 密码错误返回 PICO_ERROR_BADAUTH。其他原因连接失败返回 PICO_ERROR_CONNECT_FAILED。
cyw43_arch_wifi_connect_bssid_async
int cyw43_arch_wifi_connect_bssid_async (const char ** ssid, const uint8_t **bssid, const char * pw, uint32_t auth)
开始尝试连接到由 SSID 和 BSSID 指定的无线接入点。
此方法告知 CYW43 驱动开始连接到接入点。您应随后通过调用 cyw43_wifi_link_status 检查状态。
参数
- ssid: 要连接的网络名称
- bssid: 要连接的网络 BSSID,忽略时传 NULL
- pw: 网络密码,无需密码时传 NULL
- auth: 启用密码时使用的授权类型。值为 [CYW43_AUTH_WPA_TKIP_PSK]、[CYW43_AUTH_WPA2_AES_PSK] 或 [CYW43_AUTH_WPA2_MIXED_PSK](参见 [CYW43_AUTH_])。
返回值
扫描成功启动返回 0,否则返回错误码,参见 pico_error_codes
cyw43_arch_wifi_connect_bssid_blocking
int cyw43_arch_wifi_connect_bssid_blocking (const char ** ssid, const uint8_t **bssid, const char * pw, uint32_t auth)
尝试连接到由 SSID 和 BSSID 指定的无线接入点,阻塞直到加入网络或检测到失败。
参数
- ssid: 要连接的网络名称
- bssid: 要连接的网络 BSSID,忽略时传 NULL
- pw: 网络密码,无需密码时传 NULL
- auth: 启用密码时使用的授权类型。值为 [CYW43_AUTH_WPA_TKIP_PSK]、[CYW43_AUTH_WPA2_AES_PSK] 或 [CYW43_AUTH_WPA2_MIXED_PSK](参见 [CYW43_AUTH_])。
返回值
连接成功返回 0。Wi-Fi 密码错误返回 PICO_ERROR_BADAUTH。 其他原因连接失败返回 PICO_ERROR_CONNECT_FAILED。
cyw43_arch_wifi_connect_bssid_timeout_ms
int cyw43_arch_wifi_connect_bssid_timeout_ms (const char ** ssid, const uint8_t **bssid, const char * pw, uint32_t auth, uint32_t timeout)
尝试连接到由 SSID 和 BSSID 指定的无线接入点,阻塞直到加入网络、检测到失败或超时。
参数
- ssid: 要连接的网络名称
- bssid: 要连接的网络 BSSID,忽略时传 NULL
- pw: 网络密码,无需密码时传 NULL
- auth: 启用密码时使用的授权类型。值为 [CYW43_AUTH_WPA_TKIP_PSK]、[CYW43_AUTH_WPA2_AES_PSK] 或 [CYW43_AUTH_WPA2_MIXED_PSK](参见 [CYW43_AUTH_])。
- timeout: 在放弃之前等待连接成功的毫秒数
返回值
连接成功返回 0。达到超时前未成功连接返回 PICO_ERROR_TIMEOUT。Wi-Fi 密码错误返回 PICO_ERROR_BADAUTH。其他原因连接失败返回 PICO_ERROR_CONNECT_FAILED。
cyw43_arch_wifi_connect_timeout_ms
int cyw43_arch_wifi_connect_timeout_ms (const char ** ssid, const char ** pw, uint32_t auth, uint32_t timeout)
尝试连接到无线接入点,阻塞直到加入网络、检测到失败或超时。
参数
- ssid: 要连接 的网络名称
- pw: 网络密码,无需密码时传 NULL
- auth: 启用密码时使用的授权类型。值为 [CYW43_AUTH_WPA_TKIP_PSK]、[CYW43_AUTH_WPA2_AES_PSK] 或 [CYW43_AUTH_WPA2_MIXED_PSK](参见 [CYW43_AUTH_])。
- timeout: 在放弃之前等待连接成功的毫秒数
返回值
连接成功返回 0。达到超时前未成功连接返回 PICO_ERROR_TIMEOUT。Wi-Fi 密码错误返回 PICO_ERROR_BADAUTH。其他原因连接失败返回 PICO_ERROR_CONNECT_FAILED。
cyw43_driver
Pico W 无线驱动。
模块
cyw43_ll
底层 CYW43 驱动接口。
宏
- #define [CYW43_DEFAULT_PM] (CYW43_PERFORMANCE_PM)
- #define [CYW43_NONE_PM] (cyw43_pm_value(CYW43_NO_POWERSAVE_MODE, 10, 0, 0, 0))
- #define [CYW43_AGGRESSIVE_PM] (cyw43_pm_value(CYW43_PM1_POWERSAVE_MODE, 10, 0, 0, 0))
- #define [CYW43_PERFORMANCE_PM] (cyw43_pm_value(CYW43_PM2_POWERSAVE_MODE, 200, 1, 1, 10))
#define CYW43_COUNTRY(A, B, REV) ((unsigned char)(A) | ((unsigned char)(B)
类型定义
- typedef struct _cyw43_t cyw43_t
函数
void cyw43_init (cyw43_t *self)
初始化驱动。
void cyw43_deinit (cyw43_t *self)
关闭驱动。
int cyw43_ioctl (cyw43_t **self, uint32_t cmd, size_t len, uint8_t **buf, uint32_t iface)
向 cyw43 发送 ioctl 命令。
int cyw43_send_ethernet (cyw43_t **self, int itf, size_t len, const void **buf, bool is_pbuf)
发送原始以太网数据包。
int cyw43_wifi_pm (cyw43_t *self, uint32_t pm)
设置 Wi-Fi 电源管理模式。
int cyw43_wifi_get_pm (cyw43_t **self, uint32_t **pm)
获取 Wi-Fi 电源管理模式。
int cyw43_wifi_link_status (cyw43_t *self, int itf)
获取 Wi-Fi 链路状态。
void cyw43_wifi_set_up (cyw43_t *self, int itf, bool up, uint32_t country)
设置并初始化 Wi-Fi。
int cyw43_wifi_get_mac (cyw43_t *self, int itf, uint8_t mac[6])
获取设备的 MAC 地址。
int cyw43_wifi_update_multicast_filter (cyw43_t **self, uint8_t **addr, bool add)
添加/删除多播组地址。
int cyw43_wifi_scan (cyw43_t **self, cyw43_wifi_scan_options_t **opts, void **env, int(**result_cb)(void **, const cyw43_ev_scan_result_t **))
执行 Wi-Fi 网络扫描。
static bool cyw43_wifi_scan_active (cyw43_t *self)
判断 Wi-Fi 扫描是否正在进行。
int cyw43_wifi_join (cyw43_t **self, size_t ssid_len, const uint8_t **ssid, size_t key_len, const uint8_t **key, uint32_t auth_type, const uint8_t **bssid, uint32_t channel)
连接或加入 Wi-Fi 网络。
int cyw43_wifi_leave (cyw43_t *self, int itf)
从 Wi-Fi 网络解除关联。
int cyw43_wifi_get_rssi (cyw43_t **self, int32_t **rssi)
获取 Wi-Fi 网络的信号强度(RSSI)。
int cyw43_wifi_get_bssid (cyw43_t *self, uint8_t bssid[6])
获取已连接 Wi-Fi 网络的 BSSID。
static void cyw43_wifi_ap_get_ssid (cyw43_t **self, size_t **len, const uint8_t ****buf)
获取接入点的 SSID。
static uint32_t cyw43_wifi_ap_get_auth (cyw43_t *self)
获取 AP 模式下使用的安全授权方式。
static void cyw43_wifi_ap_set_channel (cyw43_t *self, uint32_t channel)
设置接入点使用的信道。
static void cyw43_wifi_ap_set_ssid (cyw43_t **self, size_t len, const uint8_t **buf)
设置接入点的 SSID。
static void cyw43_wifi_ap_set_password (cyw43_t **self, size_t len, const uint8_t **buf)
设置 Wi-Fi 接入点的密码。
static void cyw43_wifi_ap_set_auth (cyw43_t *self, uint32_t auth)
设置 AP 模式下使用的安全授权方式。
void cyw43_wifi_ap_get_max_stas (cyw43_t **self, int **max_stas)
获取可与 Wi-Fi 接入点关联的设备(STA)最大数量。
void cyw43_wifi_ap_get_stas (cyw43_t **self, int **num_stas, uint8_t *macs)
获取已与 Wi-Fi 接入点关联的设备(STA)数量。
static bool cyw43_is_initialized (cyw43_t *self)
判断 cyw43 驱动是否已初始化。
void cyw43_cb_tcpip_init (cyw43_t *self, int itf)
初始化 IP 协议栈。
void cyw43_cb_tcpip_deinit (cyw43_t *self, int itf)
反初始化 IP 协议栈。
void cyw43_cb_tcpip_set_link_up (cyw43_t *self, int itf)
通知 IP 协议栈链路已连通。
void cyw43_cb_tcpip_set_link_down (cyw43_t *self, int itf)
通知 IP 协议栈链路已断开。
int cyw43_tcpip_link_status (cyw43_t *self, int itf)
获取链路状态。
static uint32_t cyw43_pm_value (uint8_t pm_mode, uint16_t pm2_sleep_ret_ms, uint8_t li_beacon_period, uint8_t li_dtim_period, uint8_t li_assoc): 返回要传递给 cyw43_wifi_pm 的电源管理值。
变量
- cyw43_t cyw43_state void(* cyw43_poll)(void)
uint32_t cyw43_sleep
CYW43 驱动版本组件
CYW43 驱动的当前版本,以主版本号/次版本号/微版本号形式表示。
CYW43_VERSION_MAJOR
#define CYW43_VERSION_MAJOR 1 CYW43_VERSION_MINOR
#define CYW43_VERSION_MINOR 1 CYW43_VERSION_MICRO
#define CYW43_VERSION_MICRO 0
CYW43 驱动版本
CYW43 驱动的组合版本(32 位整数)。
CYW43_VERSION
#define CYW43_VERSION (CYW43_VERSION_MAJOR
追踪标志
CYW43_TRACE_ASYNC_EV
#define CYW43_TRACE_ASYNC_EV (0x0001) CYW43_TRACE_ETH_TX
#define CYW43_TRACE_ETH_TX (0x0002) CYW43_TRACE_ETH_RX
#define CYW43_TRACE_ETH_RX (0x0004) CYW43_TRACE_ETH_FULL
#define CYW43_TRACE_ETH_FULL (0x0008) CYW43_TRACE_MAC
#define CYW43_TRACE_MAC (0x0010)
链路状态
参见
cyw43_wifi_link_status() 获取 Wi-Fi 状态
cyw43_tcpip_link_status() 获取整体链路状态
CYW43_LINK_DOWN
#define CYW43_LINK_DOWN (0)
链路已断开。 CYW43_LINK_JOIN
#define CYW43_LINK_JOIN (1)
已连接到 Wi-Fi。 CYW43_LINK_NOIP
#define CYW43_LINK_NOIP (2)
已连接到 Wi-Fi,但无 IP 地址。 CYW43_LINK_UP
#define CYW43_LINK_UP (3)
已连接到 Wi-Fi 并具有 IP 地址。 CYW43_LINK_FAIL
#define CYW43_LINK_FAIL (-1)
连接失败。 CYW43_LINK_NONET
#define CYW43_LINK_NONET (-2)
未找到匹配的 SSID(可能超出范围或已关闭)。 CYW43_LINK_BADAUTH
#define CYW43_LINK_BADAUTH (-3)
认证失败。
国家代码
CYW43_COUNTRY_WORLDWIDE
#define CYW43_COUNTRY_WORLDWIDE CYW43_COUNTRY('X', 'X', 0) CYW43_COUNTRY_AUSTRALIA
#define CYW43_COUNTRY_AUSTRALIA CYW43_COUNTRY('A', 'U', 0) CYW43_COUNTRY_AUSTRIA
#define CYW43_COUNTRY_AUSTRIA CYW43_COUNTRY('A', 'T', 0) CYW43_COUNTRY_BELGIUM
#define CYW43_COUNTRY_BELGIUM CYW43_COUNTRY('B', 'E', 0) CYW43_COUNTRY_BRAZIL
#define CYW43_COUNTRY_BRAZIL CYW43_COUNTRY('B', 'R', 0) CYW43_COUNTRY_CANADA
#define CYW43_COUNTRY_CANADA CYW43_COUNTRY('C', 'A', 0) CYW43_COUNTRY_CHILE
#define CYW43_COUNTRY_CHILE CYW43_COUNTRY('C', 'L', 0) CYW43_COUNTRY_CHINA
#define CYW43_COUNTRY_CHINA CYW43_COUNTRY('C', 'N', 0) CYW43_COUNTRY_COLOMBIA
#define CYW43_COUNTRY_COLOMBIA CYW43_COUNTRY('C', 'O', 0) CYW43_COUNTRY_CZECH_REPUBLIC
#define CYW43_COUNTRY_CZECH_REPUBLIC CYW43_COUNTRY('C', 'Z', 0) CYW43_COUNTRY_DENMARK
#define CYW43_COUNTRY_DENMARK CYW43_COUNTRY('D', 'K', 0) CYW43_COUNTRY_ESTONIA
#define CYW43_COUNTRY_ESTONIA CYW43_COUNTRY('E', 'E', 0) CYW43_COUNTRY_FINLAND
#define CYW43_COUNTRY_FINLAND CYW43_COUNTRY('F', 'I', 0) CYW43_COUNTRY_FRANCE
#define CYW43_COUNTRY_FRANCE CYW43_COUNTRY('F', 'R', 0) CYW43_COUNTRY_GERMANY
#define CYW43_COUNTRY_GERMANY CYW43_COUNTRY('D', 'E', 0) CYW43_COUNTRY_GREECE
#define CYW43_COUNTRY_GREECE CYW43_COUNTRY('G', 'R', 0) CYW43_COUNTRY_HONG_KONG
#define CYW43_COUNTRY_HONG_KONG CYW43_COUNTRY('H', 'K', 0) CYW43_COUNTRY_HUNGARY
#define CYW43_COUNTRY_HUNGARY CYW43_COUNTRY('H', 'U', 0) CYW43_COUNTRY_ICELAND
#define CYW43_COUNTRY_ICELAND CYW43_COUNTRY('I', 'S', 0) CYW43_COUNTRY_INDIA
#define CYW43_COUNTRY_INDIA CYW43_COUNTRY('I', 'N', 0) CYW43_COUNTRY_ISRAEL
#define CYW43_COUNTRY_ISRAEL CYW43_COUNTRY('I', 'L', 0) CYW43_COUNTRY_ITALY
#define CYW43_COUNTRY_ITALY CYW43_COUNTRY('I', 'T', 0) CYW43_COUNTRY_JAPAN
#define CYW43_COUNTRY_JAPAN CYW43_COUNTRY('J', 'P', 0) CYW43_COUNTRY_KENYA
#define CYW43_COUNTRY_KENYA CYW43_COUNTRY('K', 'E', 0) CYW43_COUNTRY_LATVIA
#define CYW43_COUNTRY_LATVIA CYW43_COUNTRY('L', 'V', 0) CYW43_COUNTRY_LIECHTENSTEIN
#define CYW43_COUNTRY_LIECHTENSTEIN CYW43_COUNTRY('L', 'I', 0) CYW43_COUNTRY_LITHUANIA
#define CYW43_COUNTRY_LITHUANIA CYW43_COUNTRY('L', 'T', 0) CYW43_COUNTRY_LUXEMBOURG
#define CYW43_COUNTRY_LUXEMBOURG CYW43_COUNTRY('L', 'U', 0) CYW43_COUNTRY_MALAYSIA
#define CYW43_COUNTRY_MALAYSIA CYW43_COUNTRY('M', 'Y', 0) CYW43_COUNTRY_MALTA
#define CYW43_COUNTRY_MALTA CYW43_COUNTRY('M', 'T', 0) CYW43_COUNTRY_MEXICO
#define CYW43_COUNTRY_MEXICO CYW43_COUNTRY('M', 'X', 0) CYW43_COUNTRY_NETHERLANDS
#define CYW43_COUNTRY_NETHERLANDS CYW43_COUNTRY('N', 'L', 0) CYW43_COUNTRY_NEW_ZEALAND
#define CYW43_COUNTRY_NEW_ZEALAND CYW43_COUNTRY('N', 'Z', 0) CYW43_COUNTRY_NIGERIA
#define CYW43_COUNTRY_NIGERIA CYW43_COUNTRY('N', 'G', 0) CYW43_COUNTRY_NORWAY
#define CYW43_COUNTRY_NORWAY CYW43_COUNTRY('N', 'O', 0) CYW43_COUNTRY_PERU
#define CYW43_COUNTRY_PERU CYW43_COUNTRY('P', 'E', 0) CYW43_COUNTRY_PHILIPPINES
#define CYW43_COUNTRY_PHILIPPINES CYW43_COUNTRY('P', 'H', 0) CYW43_COUNTRY_POLAND
#define CYW43_COUNTRY_POLAND CYW43_COUNTRY('P', 'L', 0) CYW43_COUNTRY_PORTUGAL
#define CYW43_COUNTRY_PORTUGAL CYW43_COUNTRY('P', 'T', 0) CYW43_COUNTRY_SINGAPORE
#define CYW43_COUNTRY_SINGAPORE CYW43_COUNTRY('S', 'G', 0) CYW43_COUNTRY_SLOVAKIA
#define CYW43_COUNTRY_SLOVAKIA CYW43_COUNTRY('S', 'K', 0) CYW43_COUNTRY_SLOVENIA
#define CYW43_COUNTRY_SLOVENIA CYW43_COUNTRY('S', 'I', 0) CYW43_COUNTRY_SOUTH_AFRICA
#define CYW43_COUNTRY_SOUTH_AFRICA CYW43_COUNTRY('Z', 'A', 0) CYW43_COUNTRY_SOUTH_KOREA
#define CYW43_COUNTRY_SOUTH_KOREA CYW43_COUNTRY('K', 'R', 0) CYW43_COUNTRY_SPAIN
#define CYW43_COUNTRY_SPAIN CYW43_COUNTRY('E', 'S', 0) CYW43_COUNTRY_SWEDEN
#define CYW43_COUNTRY_SWEDEN CYW43_COUNTRY('S', 'E', 0) CYW43_COUNTRY_SWITZERLAND
#define CYW43_COUNTRY_SWITZERLAND CYW43_COUNTRY('C', 'H', 0) CYW43_COUNTRY_TAIWAN
#define CYW43_COUNTRY_TAIWAN CYW43_COUNTRY('T', 'W', 0) CYW43_COUNTRY_THAILAND
#define CYW43_COUNTRY_THAILAND CYW43_COUNTRY('T', 'H', 0) CYW43_COUNTRY_TURKEY
#define CYW43_COUNTRY_TURKEY CYW43_COUNTRY('T', 'R', 0) CYW43_COUNTRY_UK
#define CYW43_COUNTRY_UK CYW43_COUNTRY('G', 'B', 0) CYW43_COUNTRY_USA
#define CYW43_COUNTRY_USA CYW43_COUNTRY('U', 'S', 0)