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

相关知识点

  • 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.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:部署达梦数据库DM8(1)

0.安装DM8数据库安装包 产品下载-达梦数据 (dameng.com)https://www.dameng.com/list_103.html进入官方网站下载centos7的安装包,本章使用centos7进行部署,提前关闭好防火墙和selinux 建议你的系统运行内存为:2G或以上 1.部署基础环境 先安…

现在的市场对 C++ 的需求大吗?

先说结论:需求还是很大,但是没有什么初级程序员能干的岗位。 游戏引擎,存储,推荐引擎,infra,各种各样的性能敏感场景。 在开始前我分享下我的经历,我刚入行时遇到一个好公司和师父,…

在线教程 | 一键启动 Sora 开源平替,俘获 45 万 AI 开发者

1888 年,爱迪生提交了一项名为「活动电影放映机」的专利,该设备首次实现连续播放静态照片,形成类似动态画面的效果,由此拉开了视频发展的序幕。 回顾历史,视频经历了从无到有、从黑白到彩色、从模拟信号到数字信号的迭…

Chrome 插件各模块之间的消息传递

Chrome 插件各模块之间的消息传递 一、消息传递 1. 消息传递分类 Chrome 插件的 Action、Background 和 content_script 三个模块之间的信息传输插件和插件之间的信息传输网页向插件进行信息传输与原生应用进行消息传递 2. 消息传递 API runtime API runtime.sendMessage(…

HTML作业2

作业1: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>table…

【实验室塑料器皿】耐受强酸强碱特氟龙量具PFA量筒量杯适用于半导体新材料

PFA量筒为上下等粗的直筒状&#xff0c;特氟龙量杯是上大下小的圆台形&#xff0c;底座均有宽台设计&#xff0c;保证稳定性&#xff0c;两者均可在实验室中作为定量量取液体的量具&#xff0c;上沿一侧有弧嘴设计&#xff0c;便于流畅地倾倒液体。 规格参考&#xff1a;5ml、…

P3919 【模板】可持久化线段树 1(可持久化数组)

题目描述 如题&#xff0c;你需要维护这样的一个长度为 N 的数组&#xff0c;支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外&#xff0c;每进行一次操作&#xff08;对于操作2&#xff0c;即为生成一个完全一样的版本&…

curl在window及linux中的使用及区别

目录 内容介绍 测试一&#xff08;GET,application/json&#xff09; 归纳 测试二&#xff08;GET,x-www-form-urlencoded&#xff09; 归纳 测试三&#xff08;POST,FORM-DATA&#xff09; 归纳 测试四&#xff08;POST,x-www-form-urlencoded&#xff09; 归纳 总结…

yolov5交互式界面 V5.0-6.0版本通用界面-yolo-pyqt-gui(通用界面制作+代码)

往期热门博客项目回顾&#xff1a; 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 yolo GUI OYQT界面 YOLOv5…

pycharm连接服务器运行时找不到文件或目录

选择你要修改的python interpreter 进入下图界面&#xff0c;默认选择的是Deployment configuration,需要将其改成SSH。 再将上图python interpreter path和pycharm helpers path 配置成服务器上相应地址即可。 over

校园跑腿小程序源码系统多校园版 跑腿达人入驻接单 带完整的安装代码包以及系统部署教程

在数字化时代的浪潮中&#xff0c;校园生活的便捷性和高效性成为了广大师生的共同追求。为了满足这一需求&#xff0c;罗峰给大家分享一款适用于多校园的跑腿小程序源码系统——校园跑腿小程序源码系统多校园版。该系统不仅提供了完整的安装代码包&#xff0c;还附带了详尽的系…

用指针处理链表(一)

1链表概述 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。我们知道,用数组存放数据时,必须事先定义固定的长度(即元素个数)。比如,有的班级有100人&#xff0c;而有的班只有30人&#xff0c;如果要用同一个数组先后存放不同班级的学生数据,则必须定义长度…

男青年穿什么裤子好看?适合男生穿的百搭神裤

这几年衣服的款式可谓是越来越多了&#xff0c;很多男生在选裤子的时候都发现虽然款式越来越多&#xff0c;但现在市面上的裤子质量参差不齐&#xff0c;导致难以选择。而且还有很多商家为了利润采用低廉的材料&#xff0c;从而上身舒适性极差。 那么今天就给大家详细介绍几点…

3D软件坐标系速查

本文介绍不同3D软件的世界坐标系之间的差异及其工作原理。 基本上&#xff0c;游戏引擎和3D软件包最重要的问题是根据软件的坐标轴系统创建资产&#xff0c;正确缩放它们并根据要完成的工作设置枢轴系统。 坐标系正确性的定义可能会根据模型导入的游戏引擎或 3D 软件而变化。…

开放式耳机性价比高的品牌有哪些呢?五大高性价比选购清单

不入耳开放式蓝牙耳机近两年开始火起来了&#xff0c;因为它佩戴的舒适性和安全性两方面受到了很多人的关注。开放式的设计&#xff0c;就算不放进耳朵里也能听歌&#xff0c;同时加上它独特的空气传导的传声途径&#xff0c;整体的音质还是很不错的。不压耳&#xff0c;不涨耳…

2016年认证杯SPSSPRO杯数学建模D题(第二阶段)NBA是否有必要设立四分线全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 D题 NBA是否有必要设立四分线 原题再现&#xff1a; NBA 联盟从 1946 年成立到今天&#xff0c;一路上经历过无数次规则上的变迁。有顺应民意、皆大欢喜的&#xff0c;比如 1973 年在技术统计中增加了抢断和盖帽数据&#xff1b;有应运而生、力…

通过MobaXterm工具远程连接可视化服务器桌面并操控

目录 一、MobaXterm工具二、MobaXterm工具可视化服务器目录三、MobaXterm工具可视化服务器桌面 一、MobaXterm工具 MobaXterm是一款功能强大的远程连接工具&#xff0c;可以用于连接到各种类型的服务器&#xff0c;包括Linux、Windows和MacOS。它支持多种协议&#xff0c;包括…

【C语言】linux内核pci_enable_device函数和_PCI_NOP宏

pci_enable_device 一、注释 static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags) {struct pci_dev *bridge;int err;int i, bars 0;/** 此时电源状态可能是未知的&#xff0c;可能是由于新启动或者设备移除调用。* 因此获取当前的电源状态&…

【Java】哈希表

文章目录 一、概念二、哈希冲突2.1概念2.2设计合理的哈希函数-避免冲突2.3调节负载因子-避免冲突2.4闭散列-冲突解决&#xff08;了解&#xff09;2.5开散列/哈希桶-冲突解决&#xff08;重点掌握&#xff09; 三、代码实现3.1成员变量及方法的设定3.2插入3.3重新哈希3.4 获取到…

YT8531调试记录

总结 还是从设备树&#xff0c;mac驱动&#xff0c;mac驱动对mdio总线的注册&#xff0c;phy驱动 &#xff0c;phy的datasheet&#xff0c;cpu的datasheet 几个方面来看来看 0.确认供电&#xff0c;以及phy的地址(一般会有多个地址&#xff0c;根据相关引脚电平可配置) 1.确…