Harmony OS WiFi编程——连接热点、创建热点

835 篇文章 5 订阅
608 篇文章 11 订阅

相关知识点

  • WiFi的工作模式
    • AP模式:热点模式,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式。
    • STA模式:类似于无线终端,本身并不接受其他设备的接入,它可以连接到AP,一般无线网卡即工作在该模式。
  • Harmony OS的WiFi相关API头文件位于foundation\communication\interfaces\kits\wifi_lite\wifiservice目录,该目录下有9个文件;
    • wifi_device.h中定义的是STA模式的主要接口,例如扫描其他热点、添加热点配置(热点名称、密码等)、连接其他热点;
    • wifi_hotspot.h中定义的是AP模式的主要接口,例如设置热点信息(热点名称、密码等)、查询连接的设备列表;
    • wifi_hotspot_config.h中定义了设置和获取当前工作在2.4G或者5G频段的接口SetBandGetBand
    • 另外6个文件中定义了上述接口相关的类型,例如扫描结果、热点配置、热点连接状态等;

STA模式编程指南

STA模式API

扫描WiFi热点

在Harmony OS上STA模式扫描其他WiFi热点,需要注意以下事项

  1. 功能相关接口都有WifiErrorCode类型的返回值:

    • 需要接收并判断返回值是否为WIFI_SUCCESS,用于确认是否调用成功;
    • 不为WIFI_SUCCESS表示失败,通过枚举值查找错误原因;
  2. EnableWifi接口使能STA模式之前:

    • 需要使用RegisterWifiEvent接口,向系统注册状态监听函数,用于接收状态通知,STA模式需要绑定如下两个回调函数;
      • OnWifiScanStateChanged用于绑定扫描状态监听函数,该回调函数有两个参数statesize
        • state表示扫描状态,取值为0和1,1表示扫描动作完成;编程时可以与WifiEventState枚举值的WIFI_STATE_NOT_AVALIABLEWIFI_STATE_AVALIABLE进行比较,避免魔法数字;
    • size表示扫描到的热点个数;
    • OnWifiConnectionChanged用于绑定WiFi连接状态监听函数,该回调函数有两个参数stateinfo
      • state表示WiFi连接状态,连接成功是WIFI_STATE_AVALIABLE值为1,连接失败时WIFI_STATE_NOT_AVALIABLE值为0;
      • info类型为WifiLinkedInfo*WifiLinkedInfo有多个成员,包括ssidbssidrssiconnStatedisconnectedReason
  3. Scan接口只是触发扫描动作,并不会等到扫描完成才返回;

  4. 调用Scan接口进行扫描之前,

    • 需要确保已经调用EnableWifi接口,并成功使能了STA模式;
  5. 扫描状态监听回调函数内,不能直接调用GetScanInfoList函数(否则会有运行时异常报错),正确用法:

    • 可以在状态更新回调函数中更新全局状态变量,另外一个线程中轮训状态变量,这种方式实现起来比较简单;但需要保证更新和查询操作的原子性(可以使用gcc内置原子操作函数),逻辑才是严格正确的;
    • 或者使用信号量进行通知,这种方式更好一些,更优雅;
  6. 扫描完成后要及时调用GetScanInfoList函数获取扫描结果;

    • 如果间隔时间太长(例如5秒以上),可能会无法获得上次扫描结果;
  7. GetScanResult函数有两个参数:

    • 第一个参数result指向用于存放结果的数组,需要大于等于WIFI_SCAN_HOTSPOT_LIMIT
    • 第二个参数size类型为指针是为了内部能够修改它的值,返回后size指向的值是实际搜索到的热点个数;
  • 调用GetScanResult函数前,第二个参数size指向的实际值不能为0,否则会包参数错误;
  1. DisableWifi关闭STA模式;

连接WiFi热点

在Harmony OS上STA模式连接其他WiFi热点,需要注意的事项和扫描WiFi热点类似,一下介绍差异的部分:

  1. 首先,需要使用RegisterWifiEvent接口,向系统注册状态监听函数,STA模式需要绑定两个回调;
  2. 然后,通过AddDeviceConfig接口,向系统添加热点配置,它有两个参数;
    • 第一个参数config,类型为const WifiDeviceConfig*,用于指定热点配置;
    • 第二个参数result,类型为int*,用于操作成功时返回netId
  3. 连接热点使用ConnectTo接口,他有一个参数;
    • netId,类型为int,应该使用AddDeviceConfig接口调用成功之后result参数得到值填充;
  4. ConnectTo是同步的,连接成功失败会通过返回值体现;
    • 同时,系统也会通过回调函数通知应用代码;
  5. 连接成功后,需要调用DHCP客户端,从热点获取IP地址;
    • struct netif* iface = netifapi_netif_find("wlan0"); 获取STA模式的网络接口
    • err_t netifapi_dhcp_start(struct netif*)接口,启动DHCP客户端;
  6. 断开热点使用Disconnect接口,无需参数,端口之前需要:
    • err_t netifapi_dhcp_stop(struct netif*)接口,停止DHCP客户端;
  7. 删除热点配置使用RemoveDevice,参数和ConnectTo类似,
    • 需要使用AddDeviceConfig接口调用成功之后result参数得到值填充;

AP模式编程指南

AP模式API接口

创建WiFi热点

在Harmony OS上创建WiFi热点,通用有一些事项需要注意:

  1. 首先,需要使用RegisterWifiEvent接口,向系统注册扫描状态监听函数,用于接收扫描状态通知,AP模式需要绑定三个函数;
    • OnHotspotStaJoin回调函数,其他设备连上当前热点时会被调用,参数StationInfo* info,其中包含macAddressdisconnectedReason
    • OnHotspotStaLeave回调函数,其他设备断开当前热点时会被调用,参数StationInfo* info
    • OnHotspotStateChanged回调函数,当热点本身状态变化时会被调用,参数int state表示热点状态;
  2. 然后,通过SetHotspotConfig接口,向系统设置当前热点配置信息;
  3. 是用EnableHotspot接口,开启热点,无需参数;
  4. 热点开启成功之后,需要启动DHCP服务端,Hi3861上使用如下SDK接口;
    • g_iface = netifapi_netif_find("ap0");,获取AP模式的网口
    • 使用netifapi_netif_set_addr接口设置热点本身的IP地址、网关、子网掩码;
    • 使用netifapi_dhcps_start接口启动DHCP服务端;
    • 使用netifapi_dhcps_stop接口停止DHCP服务端;
  5. 使用DisableHotspot接口关闭热点;
  6. 使用UnRegisterWifiEvent接口解除事件监听;

如何编译

有两种方法可以编译此目录下的样例程序:

  1. 前两章中的方法——将当前目录下的*.c文件和BUILD.gn拷贝到openharmony源码的applications\sample\wifi-iot\app\iothardware目录下;

    1. 再修改openharmony源码的applications\sample\wifi-iot\app\BUILD.gn文件,将其中的 features 改为:iothardware:wifi_demo
    2. 再修改applications\sample\wifi-iot\app\iothardware\BUILD.gn文件,决定需要编译哪个.c文件;
    3. 在openharmony源码顶层目录执行:python build.py wifiiot
  2. 可以将本仓整体拷贝到openharmony源码树下,和applications同级;

    1. 修改openharmony源码的build\lite\product\wifiiot.json文件,将其中的:

      //applications/sample/wifi-iot/app替换为://HarmonyOS-IoT-Application-Development:app

    2. 在openharmony源码顶层目录执行:python build.py wifiiot

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值