文章目录

  • 一、rtthread wlan框架
  • 二、wlan api
    • 2.1 初始化相关api
    • 2.2 连接相关api
    • 2.3 扫描相关api
    • 2.4 热点相关api
    • 2.5 自动重连api
    • 2.6 事件注册回调api
    • 2.7 功耗管理api
      • 连接信息
      • 安全模式
      • 扫描结果结构体
      • 事件类型
      • 事件回调函数中的buff涵义
  • 三、wlan示例

一、rtthread wlan框架

wlan框架是rtthread用于管理wifi的中间件,对下连接硬件,控制连接、扫描, 对上承载不同的应用,为应用提供 WIFI 控制,事件,数据导流等操作。

二、wlan api

2.1 初始化相关api

//设置wlan模式
/*
dev_name:wlan设备名称
mode:工作模式,可取RT_WLAN_NONE, /* 停 止 工 作 模 式 */RT_WLAN_STATION, /* 无 线 终 端 模 式 */RT_WLAN_AP, /* 无 线 接 入 服 务 模 式 */RT_WLAN_MODE_MAX /* 无 效 */
*/
rt_err_t rt_wlan_set_mode(const char *dev_name, rt_wlan_mode_t mode)//获取设备模式
/*
dev_name:设备名称,系统默认
*/
rt_wlan_mode_t rt_wlan_get_mode(const char *dev_name)

2.2 连接相关api

//阻塞式连接热点,连接成功还需要热点准备好才能进行数据通信。
/*
ssid:热点名称
password:热点密码
*/
rt_err_t rt_wlan_connect(const char *ssid, const char *password)//无阻塞连接
/*
info:连接信息
passoword:热点密码
*/
rt_err_t rt_wlan_connect_adv(struct rt_wlan_info *info, const char *password)//阻塞式断开连接
rt_err_t rt_wlan_disconnect(void)//获取连接状态
rt_bool_t rt_wlan_is_connected(void)//获取就绪状态
rt_bool_t rt_wlan_is_ready(void)//获取连接信息
/*
info:连接信息结构体
*/
rt_err_t rt_wlan_get_info(struct rt_wlan_info *info)//获取信号强度
int rt_wlan_get_rssi(void)

2.3 扫描相关api

//启动扫描
rt_err_t rt_wlan_scan(void)//同步扫描
struct rt_wlan_scan_result *rt_wlan_scan_sync(void)//条件扫描
/*
info:连接信息结构体指针
*/
struct rt_wlan_scan_result *rt_wlan_scan_with_info(struct rt_wlan_info *info)//获取连接个数
int rt_wlan_scan_get_result_num(void)//获取连接信息
/*
info:连接信息结构体指针
num:要获取的连接信息个数
*/
int rt_wlan_scan_get_info(struct rt_wlan_info *info, int num)//获取扫描缓存
struct rt_wlan_scan_result *rt_wlan_scan_get_result(void)//清理扫描缓存
void rt_wlan_scan_result_clean(void)//查找最佳热点
/*
ssid:指定ssid
info:连接信息结构体指针
*/
rt_bool_t rt_wlan_find_best_by_cache(const char *ssid, struct rt_wlan_info *info)

2.4 热点相关api

//启动热点
/*
ssid:热点名称
password:热点密码
*/
rt_err_t rt_wlan_start_ap(const char *ssid, const char *password)//无阻塞启动热点
/*
info:热点信息
*/
rt_err_t rt_wlan_start_ap_adv(struct rt_wlan_info *info, const char *password)//获取启动状态
rt_bool_t rt_wlan_ap_is_active(void)//停止热点
rt_err_t rt_wlan_ap_stop(void)//获取热点信息
/*
info:连接信息结构体
*/
rt_err_t rt_wlan_ap_get_info(struct rt_wlan_info *info)

2.5 自动重连api

//使/失能自动重连
/*
enable:使/失能
*/
void rt_wlan_config_autoreconnect(rt_bool_t enable)//获取自动重连模式
/*
返回RT_TRUE:当前使能自动重连
返回RT_FALSE:当前失能自动重连
*/
rt_bool_t rt_wlan_get_autoreconnect_mode(void)

2.6 事件注册回调api

//注册事件回调函数
/*
event:事件类型
handle:回调函数
parameter:回调函数参数
*/
rt_err_t rt_wlan_register_event_handler(rt_wlan_event_t event, rt_wlan_event_handler handler, void *parameter)//注销事件回调函数
rt_err_t rt_wlan_unregister_event_handler(rt_wlan_event_t event)

2.7 功耗管理api

//设置功耗等级
/*
level:功耗等级
*/
rt_err_t rt_wlan_set_powersave(int level)//获取功耗等级
int rt_wlan_get_powersave(void)

连接信息

struct rt_wlan_info
{rt_wlan_security_t security; /* 安 全 类 型 */rt_802_11_band_t band; /* 2.4G / 5G */rt_uint32_t datarate; /* 连 接 速 率 */rt_int16_t channel; /* 通 道 */rt_int16_t rssi; /* 信 号 强 度 */rt_wlan_ssid_t ssid; /* 热 点 名 称 */rt_uint8_t bssid[RT_WLAN_BSSID_MAX_LENGTH]; /* 热 点 物 理 地 址 */rt_uint8_t hidden; /* 热 点 隐 藏 标 志 */
};

安全模式

typedef enum
{SECURITY_OPEN = 0, /* Opensecurity */SECURITY_WEP_PSK = WEP_ENABLED, /* WEPSecurity with open authentication */SECURITY_WEP_SHARED = (WEP_ENABLED | SHARED_ENABLED), /* WEPSecurity with shared authentication */SECURITY_WPA_TKIP_PSK = (WPA_SECURITY | TKIP_ENABLED), /* WPASecurity with TKIP */SECURITY_WPA_AES_PSK = (WPA_SECURITY | AES_ENABLED), /* WPASecurity with AES */SECURITY_WPA2_AES_PSK = (WPA2_SECURITY | AES_ENABLED), /* WPA2Security with AES */SECURITY_WPA2_TKIP_PSK = (WPA2_SECURITY | TKIP_ENABLED), /* WPA2Security with TKIP */SECURITY_WPA2_MIXED_PSK = (WPA2_SECURITY | AES_ENABLED | TKIP_ENABLED), /* WPA2Security with AES & TKIP */SECURITY_WPS_OPEN = WPS_ENABLED, /* WPSwith open security */SECURITY_WPS_SECURE = (WPS_ENABLED | AES_ENABLED), /* WPSwith AES security */SECURITY_UNKNOWN = -1, /*security is unknown. */
} rt_wlan_security_t;

扫描结果结构体

struct rt_wlan_scan_result
{rt_int32_t num; /* 热 点 个 数 */struct rt_wlan_info *info; /* 热 点 信 息 */
};

事件类型

typedef enum
{RT_WLAN_EVT_READY = 0, /* 网 络 就 绪 */RT_WLAN_EVT_SCAN_DONE, /* 扫 描 完 成 */RT_WLAN_EVT_SCAN_REPORT, /* 扫 描 到 一 个 热 点 */RT_WLAN_EVT_STA_CONNECTED, /* 连 接 成 功 */RT_WLAN_EVT_STA_CONNECTED_FAIL, /* 连 接 失 败 */RT_WLAN_EVT_STA_DISCONNECTED, /* 断 开 连 接 */RT_WLAN_EVT_AP_START, /* 热 点 启 动 */RT_WLAN_EVT_AP_STOP, /* 热 点 停 止 */RT_WLAN_EVT_AP_ASSOCIATED, /* STA 接 入 */RT_WLAN_EVT_AP_DISASSOCIATED, /* STA 断 开 */
} rt_wlan_event_t;

事件回调函数中的buff涵义

回调标志 涵义 描述
RT_WLAN_EVT_READY ip_addr_t * IP 地址
RT_WLAN_EVT_SCAN_DONE struct rt_wlan_scan_result * 扫描的结果
RT_WLAN_EVT_SCAN_REPORT struct rt_wlan_info * 扫描到的热点信息
RT_WLAN_EVT_STA_CONNECTED struct rt_wlan_info * 连接成功的 Station 信息
RT_WLAN_EVT_STA_CONNECTED_FAIL struct rt_wlan_info * 连接失败的 Station 信息
RT_WLAN_EVT_STA_DISCONNECTEDstruct rt_wlan_info * 断开连接的 Station 信息
RT_WLAN_EVT_AP_START struct rt_wlan_info * 启动成功的 AP 信息
RT_WLAN_EVT_AP_STOP struct rt_wlan_info * 启动失败的 AP 信息
RT_WLAN_EVT_AP_ASSOCIATED struct rt_wlan_info * 连入的 Station 信息
RT_WLAN_EVT_AP_DISASSOCIATEDstruct rt_wlan_info * 断开的 Station 信息

三、wlan示例

#include <rthw.h>
#include <rtthread.h>
#include <wlan_mgnt.h>
#include <wlan_prot.h>
#include <wlan_cfg.h>
#define WLAN_SSID "SSID-A"
#define WLAN_PASSWORD "12345678"
#define NET_READY_TIME_OUT (rt_tick_from_millisecond(15 * 1000))
static rt_sem_t net_ready = RT_NULL;
static void wifi_ready_callback(int event, struct rt_wlan_buff *buff, void *parameter)
{rt_kprintf("%s\n", __FUNCTION__);rt_sem_release(net_ready);
}
static void wifi_connect_callback(int event, struct rt_wlan_buff *buff, void *parameter)
{rt_kprintf("%s\n", __FUNCTION__);if ((buff != RT_NULL) && (buff->len == sizeof(struct rt_wlan_info))){rt_kprintf("ssid : %s \n", ((struct rt_wlan_info *)buff->data)->ssid.val);}
}
static void wifi_disconnect_callback(int event, struct rt_wlan_buff *buff, void *parameter)
{rt_kprintf("%s\n", __FUNCTION__);if ((buff != RT_NULL) && (buff->len == sizeof(struct rt_wlan_info))){rt_kprintf("ssid : %s \n", ((struct rt_wlan_info *)buff->data)->ssid.val);}
}
static void wifi_connect_fail_callback(int event, struct rt_wlan_buff *buff, void *parameter)
{rt_kprintf("%s\n", __FUNCTION__);if ((buff != RT_NULL) && (buff->len == sizeof(struct rt_wlan_info))){rt_kprintf("ssid : %s \n", ((struct rt_wlan_info *)buff->data)->ssid.val);}
}
rt_err_t wifi_connect(void)
{rt_err_t result = RT_EOK;/* Configuring WLAN device working mode */rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION);/* station connect */rt_kprintf("start to connect ap ...\n");net_ready = rt_sem_create("net_ready", 0, RT_IPC_FLAG_FIFO);rt_wlan_register_event_handler(RT_WLAN_EVT_READY,wifi_ready_callback, RT_NULL);rt_wlan_register_event_handler(RT_WLAN_EVT_STA_CONNECTED,wifi_connect_callback, RT_NULL);rt_wlan_register_event_handler(RT_WLAN_EVT_STA_DISCONNECTED,wifi_disconnect_callback, RT_NULL);rt_wlan_register_event_handler(RT_WLAN_EVT_STA_CONNECTED_FAIL,wifi_connect_fail_callback, RT_NULL);/* connect wifi */result = rt_wlan_connect(WLAN_SSID, WLAN_PASSWORD);if (result == RT_EOK){/* waiting for IP to be got successfully */result = rt_sem_take(net_ready, NET_READY_TIME_OUT);if (result == RT_EOK){rt_kprintf("networking ready!\n");}else{rt_kprintf("wait ip got timeout!\n");}rt_wlan_unregister_event_handler(RT_WLAN_EVT_READY);rt_sem_delete(net_ready);rt_thread_delay(rt_tick_from_millisecond(5 * 1000));rt_kprintf("wifi disconnect test!\n");/* disconnect */result = rt_wlan_disconnect();if (result != RT_EOK){rt_kprintf("disconnect failed\n");return result;}rt_kprintf("disconnect success\n");}else{rt_kprintf("connect failed!\n");}return result;
}
int connect(int argc, char *argv[])
{wifi_connect();return 0;
}
MSH_CMD_EXPORT(connect, connect test.);

【rtthread番外】第零篇:wlan框架相关推荐

  1. 【rtthread番外】第三篇:套接字抽象层SAL

    文章目录 一.SAL概念 二.SAL api 三.SAL注册示例 一.SAL概念 SAL是rtthread提供的socket组件,将底层不同协议栈统一为上层提供标准的BSD Socket api. 二 ...

  2. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...

  3. yolov5使用2080ti显卡训练是一种什么样的体验我通过vscode搭建linux服务器对python-yolov5-4.0项目进行训练,零基础小白都能看得懂的教程。>>>>>>>>>第二章番外篇

    第二章番外篇:yolov5通过vscode搭建linux服务器对python-yolov5-4.0项目进行训练,零基础小白都能看得懂的教程.YOLOv5搭建的最快搭建方式,踩坑经历详谈 前期准备: 2 ...

  4. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    转载自:https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程:给深度学习入门者的Python快速教程 - 基础篇 给深度学习入门者的Python快速教程 - ...

  5. 通过游戏编程学Python(番外篇)— 单词小测验

    通过游戏编程学Python 通过游戏编程学Python(6)- 英汉词典.背单词 通过游戏编程学Python(番外篇)- 乱序成语.猜单词 通过游戏编程学Python(5)- 猜成语(下) 通过游戏编 ...

  6. 番外篇 齐老湿面试计

    番外篇 老齐面试计 这次,老齐冒充软件行业的新人,带着隐形录音笔去公司面试,希望大家能够学习其中的套路,"旁白君"是我当时的内心独白,以后我会经常更新类似的内容,打开微信扫描二维码 ...

  7. [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法

    数学之美番外篇:平凡而又神奇的贝叶斯方法 Tags: 数学, 机器学习与人工智能, 计算机科学 save it69 saved tags: 贝叶斯 math bayesian algorithm 数学 ...

  8. 转:数学之美番外篇:平凡而又神奇的贝叶斯方法 收藏

    为什么80%的码农都做不了架构师?>>>    转自:http://blog.csdn.net/pongba/archive/2008/09/21/2958094.aspx 数学之美 ...

  9. 教你从0到1搭建秒杀系统-Canal快速入门(番外篇)

    Canal用途很广,并且上手非常简单,小伙伴们在平时完成公司的需求时,很有可能会用到.本篇介绍一下数据库中间件Canal的使用. 很多时候为了缩短调用延时,我们会对部分接口数据加入了缓存.一旦这些数据 ...

最新文章

  1. css3中的box-sizing属性
  2. DIV CSS display (block none inline)属性的用法教程
  3. C#基础之Equals和Dispose
  4. 我的KT库之----数据对象
  5. 蓝桥杯基础模块9:IO口扩展与存储器映射
  6. 关于BigInteger的加减乘除使用
  7. Linux下Redis的安装和部署
  8. HTML5和Web前端有什么区别?具备HTML5技能的人薪资多少?
  9. Espcms 注册或登录提示Can not connect to MySQL server
  10. width:100%与绝对定位同时存在,偏移出父级容器
  11. nginx rewrite解决 jenkins error 404心得笔记
  12. paip. sip module implements API v10.0 to v10.1 but the PyQt4.QtCore module requires API v9.2
  13. 小学阅读方法六种_小学数学阅读理解解题技巧,附常见的6种方法
  14. 麦克风阵列技术(转载)
  15. html5与java开发视频教程_JAVA视频—WEB开发视频教程
  16. reStructuredText 表格快速生成
  17. PNG生成多尺寸ico文件,开发桌面应用必备
  18. 2022.1.25 Python可视化实战:这些医院离司机究竟有多远?
  19. 屏蔽百度搜索右边的热点和广告推广
  20. 滴滴 算法实习生 面试详解 nlp方向

热门文章

  1. 阿里云ACP/ACE在线考试规定(考生须知)
  2. 程序员慵懒的周末:想吃番茄、豆腐和肉末
  3. java 控制麦克风_java – 模拟麦克风输入
  4. 5.3. nightly version
  5. python 请在微信客户端打开_当 Python 遇到微信
  6. 数据读取速度达1.5G/s,UFS 2.1存储技术曝光
  7. 美国的计算机科学本科哪个好,美国本科,专业排名和综合排名哪个更重要,比如说圣路易斯华盛顿大学、圣母大学的计算机科学专业和伊利诺伊大学、普渡大学的相比选择哪一个?谢谢!...
  8. 海外电子邮箱怎么申请,电子邮箱排名,哪家好!
  9. python-爬虫中的extract()
  10. 模电学习笔记_双极型晶体管及其放大电路(4)