鸿蒙之WiFi联网(STA模式)
介绍
Station模式
- 介绍
- Station模式
- WiFi连接过程介绍
- 具体设计
- 后续
从理论上来说,任何一个WiFi设备都可以称位STA。STA是支持IEEE802.11协议的设备。 在大多数情况下,当大家说到STA模式时,一般是指具有WiFi client行为的设备,可以连接到接入点。 STA会扫描可连接的接入点,选择一个想要连接的接入点,经过认证、关联等步骤后,将与接入点进行连接。
WiFi连接过程介绍WiFi扫描有两种不同的方式,一种是主动扫描,另一种是被动扫描。
- 主动扫描。由WiFi client 在每个信道上发送探测请求帧,接入点收到探测请求之后,返回探测响应。主动扫描需要指定一定的条件。例如: SSID,根据指定的AP SSID扫描。 频段,根据特定的频带扫描,单位是MHz。 频带,根据特定的频带扫描。 如果没有指定任何参数,那么会认为这是一个被动扫描请求。
- 被动扫描。被动扫描即WiFi Client在每个信道上监听接入点发出的Beacon Frame。
- 扫描WiFi接入点 WifiErrorCode Scan(void) 该函数触发WiFi接入点的扫描。若成功,则返回WIFI_SUCCESS;若错误,则返回相应的错误码。
- 初始化wifi
static void WiFiInit(void)
{
printf("\r\n");
g_wifiEventHandler.OnWifiScanStateChanged = OnWifiScanStateChangedHandler;
g_wifiEventHandler.OnWifiConnectionChanged = OnWifiConnectionChangedHandler;
g_wifiEventHandler.OnHotspotStaJoin = OnHotspotStaJoinHandler;
g_wifiEventHandler.OnHotspotStaLeave = OnHotspotStaLeaveHandler;
g_wifiEventHandler.OnHotspotStateChanged = OnHotspotStateChangedHandler;
error = RegisterWifiEvent(&g_wifiEventHandler);
if (error != WIFI_SUCCESS)
{
printf("register wifi event fail!\r\n");
}
else
{
printf("register wifi event succeed!\r\n");
}
}
- 使能WIFI
if (EnableWifi() != WIFI_SUCCESS)
{
printf("EnableWifi failed, error = %d\n", error);
return -1;
}
- 判断WIFI是否激活
if (IsWifiActive() == 0)
{
printf("Wifi station is not actived.\n");
return -1;
}
- 分配空间,保存WiFi信息
info = malloc(sizeof(WifiScanInfo) * WIFI_SCAN_HOTSPOT_LIMIT);
if (info == NULL)
{
return -1;
}
- 轮询查找WiFi列表
do{
//重置标志位
ssid_count = 0;
g_staScanSuccess = 0;
//开始扫描
Scan();
//等待扫描结果
WaitSacnResult();
//获取扫描列表
error = GetScanInfoList(info, &size);
}while(g_staScanSuccess != 1);
- 打印WiFi列表
printf("********************\r\n");
for(uint8_t i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?