XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_main.c
浏览该文件的文档.
1
17/* ==================== [Includes] ========================================== */
18
19#include "xf_utils.h"
20#include "xf_wifi.h"
21#include "xf_task.h"
22
23/* ==================== [Defines] =========================================== */
24
25#define EXAMPLE_WIFI_SSID "myssid"
26#define EXAMPLE_WIFI_PASS "mypassword"
27#define EXAMPLE_WIFI_CHANNEL 6
28#define EXAMPLE_WIFI_AUTHMODE XF_WIFI_AUTH_WPA_WPA2_PSK
30#define EXAMPLE_WIFI_NTASK_PRIORITY 15
31#define EXAMPLE_WIFI_NTASK_PERIOD_MS 10
33/* ==================== [Typedefs] ========================================== */
34
35/* ==================== [Static Prototypes] ================================= */
36
37static void _error_check_failed(void);
38static void _wifi_sta_event_handler(
39 xf_wifi_event_id_t event_id, void *event_data, void *user_args);
40static void _ip_event_handler(
41 xf_ip_event_id_t event_id, void *event_data, void *user_args);
42
57static void _wifi_ntask(xf_task_t task);
58
59/* ==================== [Static Variables] ================================== */
60
61static const char *TAG = "sta";
62static uint8_t s_sta_started = false;
63static uint8_t s_is_connected = false;
66 .password = EXAMPLE_WIFI_PASS,
67 .bssid_set = false,
68 .bssid = {0},
69 .authmode = EXAMPLE_WIFI_AUTHMODE,
70 .channel = EXAMPLE_WIFI_CHANNEL,
71 .p_cfg_ext = NULL,
72 .p_static_ip = NULL,
73};
74
75/* ==================== [Macros] ============================================ */
76
77#define ERROR_CHECK(expression) \
78 do { \
79 if (unlikely((expression) != XF_OK)) { \
80 XF_LOGE(TAG, "An error occurred: %s", XSTR(expression != XF_OK)); \
81 _error_check_failed(); \
82 } \
83 } while (0)
84
85/* ==================== [Global Functions] ================================== */
86
87void xf_main(void)
88{
89 /* 1. 使能 wifi 协议栈 */
91
92 /* 2. 设置 sta 事件回调 */
95
96 /* 3. 配置并启动 sta */
98
99 /* 4. 开始 wifi 任务 */
103}
104
105/* ==================== [Static Functions] ================================== */
106
108{
110 XF_LOGI(TAG, "_wifi_ntask start!");
111
112 /* 等待 STA 启动 */
113 while (false == s_sta_started) {
114 xf_ntask_delay(20);
115 }
116
117 for (;;) {
118 if (false == xf_wifi_sta_is_connected()) {
119 /* 如果填 NULL,则使用 xf_wifi_sta_init() 设置的配置连接 */
121 XF_LOGI(TAG, "STA attempts to connect.");
122 xf_ntask_delay(3000);
123 }
124 xf_ntask_delay(1000);
125 }
126 XF_NTASK_END();
127}
128
130 xf_wifi_event_id_t event_id, void *event_data, void *user_args)
131{
132 UNUSED(user_args);
133
134 switch (event_id) {
136 XF_LOGI(TAG, "STA has started.");
137 s_sta_started = true;
138 } break;
140 XF_LOGI(TAG, "STA has stopped.");
141 s_sta_started = false;
142 } break;
144 s_is_connected = true;
145 XF_LOGI(TAG, "The STA is connected to the AP.");
147 XF_LOGI(TAG,
148 "\nssid: %s\n"
149 "mac: "XF_MACSTR"\n"
150 "channel: %d\n"
151 "authmode: %d",
152 e->ssid, XF_MAC2STR(e->bssid), (int)e->channel, (int)e->authmode);
153 } break;
155 /* 如果之前的状态是已连接 */
156 if (true == s_is_connected) {
157 s_is_connected = false;
158 XF_LOGI(TAG, "The STA has been disconnected from the AP.");
160 XF_LOGI(TAG,
161 "\nssid: %s\n"
162 "mac: "XF_MACSTR"\n"
163 "rssi: %d",
164 e->ssid, XF_MAC2STR(e->bssid), (int)e->rssi);
165 }
166 } break;
167 default:
168 break;
169 }
170}
171
173 xf_ip_event_id_t event_id, void *event_data, void *user_args)
174{
175 switch (event_id) {
176 case XF_IP_EVENT_GOT_IP: {
178 XF_LOGI(TAG, "\n"
179 "got ip: " XF_IPSTR "\n"
180 "got gw: " XF_IPSTR "\n"
181 "got netmask: " XF_IPSTR,
182 XF_IP2STR(&e->ip_info.ip),
183 XF_IP2STR(&e->ip_info.gw),
185 } break;
186 default:
187 break;
188 }
189}
190
191static void _error_check_failed(void)
192{
193 XF_LOGI(TAG, "Run-time error.");
194 for (;;) {
195 }
196}
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
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
#define EXAMPLE_WIFI_CHANNEL
Definition xf_main.c:27
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 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 接口。