XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_main.c
浏览该文件的文档.
1
17/* ==================== [Includes] ========================================== */
18
19#include <string.h>
20
21#include "xf_utils.h"
22#include "xf_netif.h"
23#include "xf_wifi.h"
24#include "xf_task.h"
25
26/* ==================== [Defines] =========================================== */
27
28#define EXAMPLE_WIFI_SSID "myssid"
29#define EXAMPLE_WIFI_PASS "mypassword"
30#define EXAMPLE_WIFI_CHANNEL 6
31#define EXAMPLE_WIFI_AUTHMODE XF_WIFI_AUTH_WPA_WPA2_PSK
33#define EXAMPLE_WIFI_NTASK_PRIORITY 15
34#define EXAMPLE_WIFI_NTASK_PERIOD_MS 10
36/* ==================== [Typedefs] ========================================== */
37
38/* ==================== [Static Prototypes] ================================= */
39
40static void _error_check_failed(void);
41static void _wifi_sta_event_handler(
42 xf_wifi_event_id_t event_id, void *event_data, void *user_args);
43static void _ip_event_handler(
44 xf_ip_event_id_t event_id, void *event_data, void *user_args);
45
60static void _wifi_ntask(xf_task_t task);
61
62/* ==================== [Static Variables] ================================== */
63
64static const char *TAG = "sta";
67 .ip4.ip.addr = XF_IP4TOADDR(192, 168, 6, 2),
68 .ip4.gw.addr = XF_IP4TOADDR(192, 168, 6, 1),
69 .ip4.netmask.addr = XF_IP4TOADDR(255, 255, 255, 0),
70 .ip6 = {},
71};
74 .password = EXAMPLE_WIFI_PASS,
75 .bssid_set = false,
76 .bssid = {0},
77 .authmode = EXAMPLE_WIFI_AUTHMODE,
78 .p_cfg_ext = NULL,
79 .p_static_ip = &s_static_ip_cfg,
80};
81static uint8_t s_is_connected = false;
82static uint8_t s_sta_started = false;
84/* ==================== [Macros] ============================================ */
85
86#define ERROR_CHECK(expression) \
87 do { \
88 if (unlikely((expression) != XF_OK)) { \
89 XF_LOGE(TAG, "An error occurred: %s", XSTR(expression != XF_OK)); \
90 _error_check_failed(); \
91 } \
92 } while (0)
93
94/* ==================== [Global Functions] ================================== */
95
96void xf_main(void)
97{
98 /* 1. 使能 wifi 协议栈 */
100
101 /* 2. 设置 sta 事件回调 */
104
105 /* 3. 配置并启动 sta, 由于配置了静态 ip, 内部将停止 dhcp 客户端并设置 ip */
107
108 /* 5. 开始 wifi 任务 */
112}
113
114/* ==================== [Static Functions] ================================== */
115
117{
119 XF_LOGI(TAG, "_wifi_ntask start!");
120
121 /* 等待 STA 启动 */
122 while (false == s_sta_started) {
123 xf_ntask_delay(20);
124 }
125
126 for (;;) {
127 if (false == xf_wifi_sta_is_connected()) {
128 /* 如果填 NULL,则使用 xf_wifi_sta_init() 设置的配置连接 */
130 XF_LOGI(TAG, "STA attempts to connect.");
131 xf_ntask_delay(3000);
132 }
133 xf_ntask_delay(1000);
134 }
135 XF_NTASK_END();
136}
137
139 xf_wifi_event_id_t event_id, void *event_data, void *user_args)
140{
141 UNUSED(user_args);
142
143 switch (event_id) {
145 XF_LOGI(TAG, "STA has started.");
146 s_sta_started = true;
147 } break;
149 XF_LOGI(TAG, "STA has stopped.");
150 s_sta_started = false;
151 } break;
153 s_is_connected = true;
154 XF_LOGI(TAG, "The STA is connected to the AP.");
156 XF_LOGI(TAG,
157 "\nssid: %s\n"
158 "mac: "XF_MACSTR"\n"
159 "channel: %d\n"
160 "authmode: %d",
161 e->ssid, XF_MAC2STR(e->bssid), (int)e->channel, (int)e->authmode);
162 } break;
164 /* 如果之前的状态是已连接 */
165 if (true == s_is_connected) {
166 s_is_connected = false;
167 XF_LOGI(TAG, "The STA has been disconnected from the AP.");
169 XF_LOGI(TAG,
170 "\nssid: %s\n"
171 "mac: "XF_MACSTR"\n"
172 "rssi: %d",
173 e->ssid, XF_MAC2STR(e->bssid), (int)e->rssi);
174 }
175 } break;
176 default:
177 break;
178 }
179}
180
182 xf_ip_event_id_t event_id, void *event_data, void *user_args)
183{
184 switch (event_id) {
185 case XF_IP_EVENT_GOT_IP: {
187 XF_LOGI(TAG, "\n"
188 "got ip: " XF_IPSTR "\n"
189 "got gw: " XF_IPSTR "\n"
190 "got netmask: " XF_IPSTR,
191 XF_IP2STR(&e->ip_info.ip),
192 XF_IP2STR(&e->ip_info.gw),
194 } break;
195 default:
196 break;
197 }
198}
199
200static void _error_check_failed(void)
201{
202 XF_LOGI(TAG, "Run-time error.");
203 for (;;) {
204 }
205}
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_IPADDR_TYPE_V4
#define XF_MACSTR
Definition xf_mac.h:47
#define XF_IP4TOADDR(a, b, c, d)
#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
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
#define ERROR_CHECK(expression)
Definition xf_main.c:55
static void _error_check_failed(void)
Definition xf_main.c:119
#define EXAMPLE_WIFI_AUTHMODE
Definition xf_main.c:26
#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
static uint8_t s_sta_started
Definition xf_main.c:62
static xf_wifi_sta_cfg_t s_sta_cfg
Definition xf_main.c:64
#define EXAMPLE_WIFI_NTASK_PERIOD_MS
Definition xf_main.c:37
static void _wifi_ntask(xf_task_t task)
Definition xf_main.c:103
#define EXAMPLE_WIFI_NTASK_PRIORITY
Definition xf_main.c:36
static void _wifi_sta_event_handler(xf_wifi_event_id_t event_id, void *event_data, void *user_args)
Definition xf_main.c:161
static xf_wifi_static_ip_cfg_t s_static_ip_cfg
Definition xf_main.c:65
static void _ip_event_handler(xf_ip_event_id_t event_id, void *event_data, void *user_args)
Definition xf_main.c:181
#define XF_LOGI(tag, format,...)
void * xf_task_t
任务句柄。
#define UNUSED(_x)
xf_wifi 包含 STA、AP 接口。