XFusion API v1.3.0
载入中...
搜索中...
未找到
examples/wireless/wifi/get_started/station/main/xf_main.c

xf_wal wifi station 示例。

/* ==================== [Includes] ========================================== */
#include "xf_utils.h"
#include "xf_wifi.h"
#include "xf_task.h"
/* ==================== [Defines] =========================================== */
#define EXAMPLE_WIFI_SSID "myssid"
#define EXAMPLE_WIFI_PASS "mypassword"
#define EXAMPLE_WIFI_CHANNEL 6
#define EXAMPLE_WIFI_AUTHMODE XF_WIFI_AUTH_WPA_WPA2_PSK
#define EXAMPLE_WIFI_NTASK_PRIORITY 15
#define EXAMPLE_WIFI_NTASK_PERIOD_MS 10
/* ==================== [Typedefs] ========================================== */
/* ==================== [Static Prototypes] ================================= */
static void _error_check_failed(void);
xf_wifi_event_id_t event_id, void *event_data, void *user_args);
static void _ip_event_handler(
xf_ip_event_id_t event_id, void *event_data, void *user_args);
static void _wifi_ntask(xf_task_t task);
/* ==================== [Static Variables] ================================== */
static const char *TAG = "sta";
static uint8_t s_sta_started = false;
static uint8_t s_is_connected = false;
.password = EXAMPLE_WIFI_PASS,
.bssid_set = false,
.bssid = {0},
.authmode = EXAMPLE_WIFI_AUTHMODE,
.p_cfg_ext = NULL,
.p_static_ip = NULL,
};
/* ==================== [Macros] ============================================ */
#define ERROR_CHECK(expression) \
do { \
if (unlikely((expression) != XF_OK)) { \
XF_LOGE(TAG, "An error occurred: %s", XSTR(expression != XF_OK)); \
_error_check_failed(); \
} \
} while (0)
/* ==================== [Global Functions] ================================== */
void xf_main(void)
{
/* 1. 使能 wifi 协议栈 */
/* 2. 设置 sta 事件回调 */
/* 3. 配置并启动 sta */
/* 4. 开始 wifi 任务 */
}
/* ==================== [Static Functions] ================================== */
{
XF_LOGI(TAG, "_wifi_ntask start!");
/* 等待 STA 启动 */
while (false == s_sta_started) {
}
for (;;) {
if (false == xf_wifi_sta_is_connected()) {
/* 如果填 NULL,则使用 xf_wifi_sta_init() 设置的配置连接 */
XF_LOGI(TAG, "STA attempts to connect.");
}
}
}
xf_wifi_event_id_t event_id, void *event_data, void *user_args)
{
UNUSED(user_args);
switch (event_id) {
XF_LOGI(TAG, "STA has started.");
s_sta_started = true;
} break;
XF_LOGI(TAG, "STA has stopped.");
s_sta_started = false;
} break;
XF_LOGI(TAG, "The STA is connected to the AP.");
"\nssid: %s\n"
"mac: "XF_MACSTR"\n"
"channel: %d\n"
"authmode: %d",
e->ssid, XF_MAC2STR(e->bssid), (int)e->channel, (int)e->authmode);
} break;
/* 如果之前的状态是已连接 */
if (true == s_is_connected) {
s_is_connected = false;
XF_LOGI(TAG, "The STA has been disconnected from the AP.");
"\nssid: %s\n"
"mac: "XF_MACSTR"\n"
"rssi: %d",
e->ssid, XF_MAC2STR(e->bssid), (int)e->rssi);
}
} break;
default:
break;
}
}
static void _ip_event_handler(
xf_ip_event_id_t event_id, void *event_data, void *user_args)
{
switch (event_id) {
XF_LOGI(TAG, "\n"
"got ip: " XF_IPSTR "\n"
"got gw: " XF_IPSTR "\n"
"got netmask: " XF_IPSTR,
} break;
default:
break;
}
}
static void _error_check_failed(void)
{
XF_LOGI(TAG, "Run-time error.");
for (;;) {
}
}
static void _wifi_sta_event_handler(xf_wifi_event_id_t event_id, void *event_data, void *user_args)
#define EXAMPLE_WIFI_CHANNEL
#define EXAMPLE_WIFI_AUTHMODE
static xf_wifi_sta_cfg_t s_sta_cfg
static void _ip_event_handler(xf_ip_event_id_t event_id, void *event_data, void *user_args)
void xf_main(void)
Definition xf_main.c:28
int32_t xf_ip_event_id_t
ip 事件 id。见 xf_ip_event_code_t.
#define XF_IPSTR
#define XF_MACSTR
Definition xf_mac.h:47
#define XF_MAC2STR(a)
Definition xf_mac.h:44
#define XF_IP2STR(ipaddr)
@ XF_IP_EVENT_GOT_IP
#define XF_NTASK_BEGIN(ntask)
Definition xf_ntask.h:193
#define XF_NTASK_END()
Definition xf_ntask.h:199
#define xf_ntask_delay(delay_ms)
Definition xf_ntask.h:229
static xf_task_t xf_ttask_create_loop(xf_task_func_t func, void *func_arg, uint16_t priority, uint32_t delay_ms)
在默认的任务管理下,创建 ttask 循环任务。
Definition xf_task.h:162
xf_err_t xf_wifi_sta_set_ip_cb(xf_ip_cb_t cb_func, void *user_args)
STA 设置 ip 事件回调函数.
xf_err_t xf_wifi_sta_connect(xf_wifi_sta_cfg_t *p_cfg)
STA 连接到指定 AP.
bool xf_wifi_sta_is_connected(void)
STA 检查是否已经连接到 AP.
xf_err_t xf_wifi_sta_set_cb(xf_wifi_cb_t cb_func, void *user_args)
wifi STA 设置回调函数.
xf_err_t xf_wifi_sta_init(const xf_wifi_sta_cfg_t *p_cfg)
启用 wifi STA 模式.
xf_err_t xf_wifi_enable(void)
启用 wifi 协议栈.
int32_t xf_wifi_event_id_t
wifi 事件 id。见 xf_wifi_event_code_t.
@ XF_WIFI_EVENT_STA_START
@ XF_WIFI_EVENT_STA_DISCONNECTED
@ XF_WIFI_EVENT_STA_STOP
@ XF_WIFI_EVENT_STA_CONNECTED
#define TAG
Definition xf_main.c:24
#define ERROR_CHECK(e)
Definition xf_main.c:70
XF_IP_EVENT_STA_GOT_IP 事件的事件结构。
xf_netif_ip_info_t ip_info
STA 事件消息类型: 已连接到 AP。 事件 id 见 XF_WIFI_EVENT_STA_CONNECTED.
uint8_t bssid[XF_MAC_LEN_MAX]
uint8_t ssid[XF_WIFI_SSID_LEN_MAX]
STA 事件消息类型: 已从 AP 断开连接。 事件 id 见 XF_WIFI_EVENT_STA_DISCONNECTED.
uint8_t bssid[XF_MAC_LEN_MAX]
uint8_t ssid[XF_WIFI_SSID_LEN_MAX]
STA 基础配置结构体。
uint8_t ssid[XF_WIFI_SSID_LEN_MAX]
static void task(xf_task_t task)
Definition xf_main.c:45
static void _error_check_failed(void)
Definition xf_main.c:119
#define EXAMPLE_WIFI_SSID
Definition xf_main.c:24
#define EXAMPLE_WIFI_PASS
Definition xf_main.c:25
static uint8_t s_is_connected
Definition xf_main.c:63
#define EXAMPLE_WIFI_NTASK_PERIOD_MS
Definition xf_main.c:31
static void _wifi_ntask(xf_task_t task)
wifi 无栈任务。
Definition xf_main.c:107
#define EXAMPLE_WIFI_NTASK_PRIORITY
Definition xf_main.c:30
static uint8_t s_sta_started
Definition xf_main.c:62
#define XF_LOGI(tag, format,...)
void * xf_task_t
任务句柄。
#define UNUSED(_x)
xf_wifi 包含 STA、AP 接口。