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_SCAN_CHANNEL_START 1
26#define EXAMPLE_SCAN_CHANNEL_END 13
27#define EXAMPLE_SCAN_RESULT_SIZE 20
28#define EXAMPLE_SCAN_BLOCK_IS_ENABLE 1
29
30#if EXAMPLE_SCAN_BLOCK_IS_ENABLE
31# define EXAMPLE_SCAN_BLOCK true
32#else
33# define EXAMPLE_SCAN_BLOCK false
34#endif
35
36#define EXAMPLE_WIFI_NTASK_PRIORITY 15
37#define EXAMPLE_WIFI_NTASK_PERIOD_MS 10
38
39#define TBL_IT(v) {v, XSTR(v)}
40
41/* ==================== [Typedefs] ========================================== */
42
49
54
55/* ==================== [Static Prototypes] ================================= */
56
57static void _error_check_failed(void);
58static void _wifi_sta_event_handler(
59 xf_wifi_event_id_t event_id, void *event_data, void *user_args);
60
61static const char *ex_auth_mode_to_name(xf_wifi_auth_mode_t code);
62
63static void _wifi_ntask(xf_task_t task);
64
65/* ==================== [Static Variables] ================================== */
66
67static const char *TAG = "scan";
68
69static ex_scan_ctx_t ctx = {0};
71
72/* ==================== [Macros] ============================================ */
73
74#define ERROR_CHECK(expression) \
75 do { \
76 if (unlikely((expression) != XF_OK)) { \
77 XF_LOGE(TAG, "An error occurred: %s", XSTR(expression != XF_OK)); \
78 _error_check_failed(); \
79 } \
80 } while (0)
81
82/* ==================== [Global Functions] ================================== */
83
84void xf_main(void)
85{
86 /* 1. 使能 wifi 协议栈 */
88
89 /* 2. 设置 sta 事件回调 */
91
92 /* 3. 启动 sta */
94
95 /* 4. 开始扫描任务 */
99}
100
101/* ==================== [Static Functions] ================================== */
102
104{
106 XF_LOGI(TAG, "_wifi_ntask start!");
108
109 for (;;) {
110 xf_wifi_scan_cfg_t scan_cfg = {
112 .show_hidden = true,
113 };
115
116#if (!EXAMPLE_SCAN_BLOCK_IS_ENABLE)
117 if (false == sp_ctx->scan_complete) {
118 xf_ntask_delay(50);
119 }
120 sp_ctx->scan_complete = false;
121#endif
122
123 XF_LOGI(TAG, "------------------------------");
126 XF_LOGI(TAG, "Channel %d scanning is complete. There are %d APs.",
128 for (uint32_t i = 0;
129 (i < ARRAY_SIZE(sp_ctx->ap_info)) && (i < sp_ctx->ap_num);
130 i++) {
131 XF_LOGI(TAG,
132 "\n"
133 " index: %d\n"
134 " ssid: %s\n"
135 " bssid: " XF_MACSTR "\n"
136 " rssi: %d\n"
137 " authmode: %s",
138 i,
139 sp_ctx->ap_info[i].ssid,
141 sp_ctx->ap_info[i].rssi,
143 }
144 XF_LOGI(TAG, "------------------------------");
145
146 /* 清除未读完的数据 */
148 memset(sp_ctx->ap_info, 0, sizeof(sp_ctx->ap_info));
149
150 /* 扫描下一个通道 */
154 XF_LOGI(TAG, "done!");
155 xf_ntask_delay(10000);
156 }
157 }
158 XF_NTASK_END();
159}
160
162 xf_wifi_event_id_t event_id, void *event_data, void *user_args)
163{
164 UNUSED(user_args);
165 UNUSED(event_data);
166 switch (event_id) {
168 sp_ctx->scan_complete = true;
169 } break;
170 default:
171 break;
172 }
173}
174
176{
177 static const ex_auth_mode_msg_t ex_auth_mode_msg_table[] = {
190 };
191
192 unsigned int i = 0;
193 for (i = 0; i < (unsigned int)ARRAY_SIZE(ex_auth_mode_msg_table); ++i) {
194 if (ex_auth_mode_msg_table[i].code == code) {
195 return ex_auth_mode_msg_table[i].msg;
196 }
197 }
198 return ex_auth_mode_msg_table[ARRAY_SIZE(ex_auth_mode_msg_table) - 1].msg;
199}
200
201static void _error_check_failed(void)
202{
203 XF_LOGI(TAG, "Run-time error.");
204 for (;;) {
205 }
206}
void xf_main(void)
Definition xf_main.c:28
#define XF_MACSTR
Definition xf_mac.h:47
#define XF_MAC2STR(a)
Definition xf_mac.h:44
#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
#define ARRAY_SIZE(arr)
ARRAY_SIZE - 获取数组 arr 中的元素数量。
Definition xf_predef.h:173
xf_err_t xf_wifi_scan_get_result(xf_wifi_ap_info_t result_array[], uint32_t result_array_size, uint32_t *p_result_num)
wifi 获取扫描结果。
xf_err_t xf_wifi_scan_start(const xf_wifi_scan_cfg_t *p_cfg, bool block)
wifi 启动 AP 扫描。
xf_err_t xf_wifi_scan_clear_result(void)
wifi 清除扫描结果。
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 协议栈.
enum _xf_wifi_authenticate_mode_t xf_wifi_auth_mode_t
授权模式的强度。 OPEN < WEP < WPA_PSK < OWE < WPA2_PSK = WPA_WPA2_PSK < WAPI_PSK < WPA3_PSK = WPA2_WPA3_PSK
int32_t xf_wifi_event_id_t
wifi 事件 id。见 xf_wifi_event_code_t.
@ XF_WIFI_AUTH_WPA2_PSK
@ XF_WIFI_AUTH_WEP
@ XF_WIFI_AUTH_OPEN
@ XF_WIFI_AUTH_MAX
@ XF_WIFI_AUTH_WPA3_PSK
@ XF_WIFI_AUTH_WPA_WPA2_PSK
@ XF_WIFI_AUTH_ENTERPRISE
@ XF_WIFI_AUTH_WPA_PSK
@ XF_WIFI_AUTH_WPA3_ENT_192
@ XF_WIFI_AUTH_WAPI_PSK
@ XF_WIFI_AUTH_OWE
@ XF_WIFI_AUTH_WPA2_WPA3_PSK
@ XF_WIFI_EVENT_SCAN_DONE
#define TAG
Definition xf_main.c:24
AP 信息。 扫描结果中使用。
uint8_t bssid[XF_MAC_LEN_MAX]
xf_wifi_auth_mode_t authmode
uint8_t ssid[XF_WIFI_SSID_LEN_MAX]
Parameters for an SSID scan.
认证模式与字符串消息。
Definition xf_main.c:50
扫描任务无栈协程上下文。
Definition xf_main.c:43
xf_wifi_ap_info_t ap_info[EXAMPLE_SCAN_RESULT_SIZE]
Definition xf_main.c:46
uint8_t curr_scan_channel
Definition xf_main.c:45
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_NTASK_PERIOD_MS
Definition xf_main.c:37
#define EXAMPLE_SCAN_CHANNEL_START
Definition xf_main.c:25
struct example_authenticate_mode_message_s ex_auth_mode_msg_t
static void _wifi_ntask(xf_task_t task)
Definition xf_main.c:103
#define EXAMPLE_WIFI_NTASK_PRIORITY
Definition xf_main.c:36
#define EXAMPLE_SCAN_CHANNEL_END
Definition xf_main.c:26
static ex_scan_ctx_t ctx
Definition xf_main.c:69
static void _wifi_sta_event_handler(xf_wifi_event_id_t event_id, void *event_data, void *user_args)
Definition xf_main.c:161
#define EXAMPLE_SCAN_BLOCK
Definition xf_main.c:31
#define TBL_IT(v)
Definition xf_main.c:39
static const char * ex_auth_mode_to_name(xf_wifi_auth_mode_t code)
Definition xf_main.c:175
struct example_scan_context_s ex_scan_ctx_t
static ex_scan_ctx_t * sp_ctx
Definition xf_main.c:70
#define EXAMPLE_SCAN_RESULT_SIZE
Definition xf_main.c:27
#define XF_LOGI(tag, format,...)
void * xf_task_t
任务句柄。
#define UNUSED(_x)
xf_wifi 包含 STA、AP 接口。