WLAN#
基本信息#
起草日期:2020-01-14
设计人员:[freestrong @ Snail]
为什么需要WLAN中间件管理WIFI#
随着物联网快速发展,越来越多的嵌入式设备上搭载了 WIFI 无线网络设备。为了能够管理 WIFI 网络设备,RT-Thread 引入了 WLAN 设备管理框架。这套框架具备控制和管理 WIFI 的众多功能,为开发者使用 WIFI 设备提供许多便利。
设计思路和边界#
管理并抽象Wlan的C API, 提供一套Lua API供用户代码调用
相关知识点#
C API(平台层)#
#define Luat_WLAN_SECURITY_OPEN 0x00
#define Luat_WLAN_SECURITY_WEP_PSK 0x01
#define Luat_WLAN_SECURITY_WEP_SHARED 0x02
#define Luat_WLAN_SECURITY_WPA_TKIP_PSK 0x03
#define Luat_WLAN_SECURITY_WPA_AES_PSK 0x04
#define Luat_WLAN_SECURITY_WPA2_AES_PSK 0x05
#define Luat_WLAN_SECURITY_WPA2_TKIP_PSK 0x06
#define Luat_WLAN_SECURITY_WPA2_MIXED_PSK 0x07
#define Luat_WLAN_SECURITY_WPS_OPEN 0x08
#define Luat_WLAN_SECURITY_WPS_SECURE 0x09
#define Luat_WLAN_EVT_READY 0x01
#define Luat_WLAN_EVT_SCAN_DONE 0x02
#define Luat_WLAN_EVT_SCAN_REPORT 0x03
#define Luat_WLAN_EVT_STA_CONNECTED 0x04
#define Luat_WLAN_EVT_STA_CONNECTED_FAIL 0x05
#define Luat_WLAN_EVT_STA_DISCONNECTED 0x06
#define Luat_WLAN_EVT_AP_START 0x07
#define Luat_WLAN_EVT_AP_STOP 0x08
#define Luat_WLAN_EVT_AP_ASSOCIATED 0x09
#define Luat_WLAN_EVT_AP_DISASSOCIATED 0x0A
/* 网络 */
int luat_wlan_set_stanet(luat_wlan_net_t * net) //设置STA的网络信息
luat_wlan_net_t luat_wlan_get_stanet(void) //获取STA的网络信息
int luat_wlan_set_apnet(luat_wlan_net_t * net) //设置AP的网络信息
luat_wlan_net_t luat_wlan_get_apnet(void) //获取AP的网络信息
/* WLAN 连接 */
int luat_wlan_connect(luat_wlan_info_t *info); //连接热点
int luat_wlan_is_ready(void); //获取就绪标志
luat_wlan_info_t luat_wlan_get_info(void); //获取连接信息
int luat_wlan_get_rssi(void); //获取信号强度
/* WLAN 扫描 */
luat_wlan_info_t luat_wlan_scan_with_info(void); //扫描
/* WLAN 热点 */
int luat_wlan_start_ap(luat_wlan_info_t); //启动热点
int luat_wlan_ap_is_active(void); //获取启动标志
int luat_wlan_ap_stop(void); //停止热点
luat_wlan_info_t luat_wlan_ap_get_info(void); //获取热点信息
luat_wlan_info_t luat_wlan_ap_get_stainfo(void); //获取连接热点的Station信息
/* WLAN 事件回调 */
int luat_wlan_register_event_handler(int evt); //事件注册
int luat_wlan_unregister_event_handler(int evt)); //解除注册
/* WLAN 功耗管理 */
int luat_wlan_set_powersave(int level); //设置功耗等级,用于 station 模式。
int luat_wlan_get_powersave(void); //获取功耗等级
常量#
--安全模式
wlan.OPEN --Open security
wlan.WEP_PSK --WEP Security with open authentication
wlan.WEP_SHARED --WEP Security with shared authentication
wlan.WPA_TKIP_PSK --WPA Security with TKIP
wlan.WPA_AES_PSK --WPA Security with AES
wlan.WPA2_AES_PSK --WPA2 Security with AES
wlan.WPA2_TKIP_PSK --WPA2 Security with TKIP
wlan.WPA2_MIXED_PSK --WPA2 Security with AES & TKIP
wlan.WPS_OPEN --WPS with open securit
wlan.WPS_SECURE --WPS with AES security
--注册串口事件的处理函数事件
wlan.EVT_READY --IP 地址
wlan.EVT_SCAN_DONE --扫描的结果
wlan.EVT_SCAN_REPORT --扫描到的热点信息
wlan.EVT_STA_CONNECTED --连接成功的 Station 信息
wlan.EVT_STA_CONNECTED_FAIL --连接失败的 Station 信息
wlan.EVT_STA_DISCONNECTED --断开连接的 Station 信息
wlan.EVT_AP_START --启动成功的 AP 信息
wlan.EVT_AP_STOP --启动失败的 AP 信息
wlan.EVT_AP_ASSOCIATED --连入的 Station 信息
wlan.EVT_AP_DISASSOCIATED --断开的 Station 信息
Lua API#
--设置wifi Station 模式下的网络信息
wlan.setStaNet(ip,netmask,gateway)
--[[
用例:
wlan.setStaNet() --启动DHCP,自动获取ip地址,子网掩码,网关等信息
wlan.setStaNet(ip) --静态设置ip地址,ip:xxx.xxx.xxx.xxx,子网掩码:255.255.255.0, 网关:xxx.xxx.xxx.1
wlan.setStaNet(ip,net) --静态设置ip地址,ip:xxx.xxx.xxx.xxx,子网掩码:xxx.xxx.xxx.xxx,网关:xxx.xxx.xxx.1
wlan.setStaNet(ip,netmask,gateway) --静态设置ip地址,ip:xxx.xxx.xxx.xxx,子网掩码:xxx.xxx.xxx.xxx,网关:xxx.xxx.xxx.xxx
]]
--获取 wifi Station 模式下的网络信息
wlan.getStaNet()
--[[
用例:
local ip,netmask,gateway = wlan.getStaNet()
]]
--设置wifi AP 模式下的网络信息
wlan.setApNet()
--[[
用例:
wlan.setStaNet(ip) --静态设置ip地址,ip:xxx.xxx.xxx.xxx,子网掩码:255.255.255.0, 网关:xxx.xxx.xxx.1
wlan.setStaNet(ip,net) --静态设置ip地址,ip:xxx.xxx.xxx.xxx,子网掩码:xxx.xxx.xxx.xxx,网关:xxx.xxx.xxx.1
wlan.setStaNet(ip,netmask,gateway) --静态设置ip地址,ip:xxx.xxx.xxx.xxx,子网掩码:xxx.xxx.xxx.xxx,网关:xxx.xxx.xxx.xxx
]]
--获取 wifi AP 模式下的网络信息
wlan.getApNet()
--[[
用例:
local ip,netmask,gateway = wlan.getApNet()
]]
--扫描热点
wlan.scan(ssid)
--[[
用例:
local num,info = wlan.scan() --扫描热点
local num,info = wlan.scan(ssid) --扫描指定的ssid热点
]]
--连接热点
wlan.connect(ssid,password,bssid)
--[[
用例:
wlan.connect(ssid) --连接开放的热点
wlan.connect(ssid,password) --连接加密的热点
wlan.connect(ssid,password,bssid) --连接指定MAC地址的加密的热点
wlan.connect(ssid,nil,bssid) --连接指定MAC地址的开放热点
]]
--获取连接热点的信息
wlan.getinfo()
--[[
用例:
local info = wlan.getinfo()
info.ssid --连接热点的信息ssid
info.channel --连接热点的信道
info.rssi --连接热点的信号强度
info.bssid --连接热点的MAC地址
info.security --连接热点的安全模式
]]
--断开热点
wlan.disconnect()
--连接状态
wlan.ready()
--获取信号强度
wlan.getrssi()
--创建热点
wlan.ap_start(ssid,password,security,channel,hidden)
--[[
用例:
wlan.connect(ssid) --创建开放的热点
wlan.connect(ssid,password) --创建加密的热点
wlan.connect(ssid,password,security) --创建指定安全级别加密的热点
wlan.connect(ssid,password,security,channel) --创建指定信道,指定安全级别加密的热点
wlan.connect(ssid,password,nil,channel) --创建指定信道,加密的热点
wlan.connect(ssid,nil,nil,channel) --创建指定信道,开发的热点
wlan.connect(ssid,password,security,channel,hidden) --创建指定安全级别,指定信道,是否广播ssid的加密热点
wlan.connect(ssid,password,nil,channel,hidden) --指定信道,是否广播ssid的加密热点
wlan.connect(ssid,password,nil,nil,hidden) --指定信道,是否广播ssid的加密热点
wlan.connect(ssid,nil,nil,nil,hidden) --指定信道,是否广播ssid的开发热点
]]
--获取创建热点的信息
wlan.getapinfo()
--[[
用例:
local info = wlan.getapinfo()
info.ssid --连接热点的信息ssid
info.channel --连接热点的信道
info.rssi --连接热点的信号强度
info.bssid --连接热点的MAC地址
info.security --连接热点的安全模式
info.hidden --是否广播ssid
]]
--获取加入热点的STA信息
wlan.getJionApInfo()
--[[
用例:
local num,info = wlan.getJionApInfo()
num --已经连接的 station 数目
info[num].ip --station 的 ip 地址
info[num].mac --station 的 mac 地址
]]
--热点的状态
wlan.ap_ready()
--关闭热点
wlan.ap_stop()
--注册中断函数
wlan.on(EVT,fun)
--[[
用例:
wlan.on(wlan.EVT_READY ,function() ... end)
...
]]
--设置功耗等级,用于station模式。
wlan.pw(level)
--获取功耗等级
wlan.getpw()