Android-WLAN
来自官网https://source.android.google.cn/devices/tech/connect/wifi-overview
1、WLAN 架构
Android 提供默认 Android 框架实现,其中包括对各种 WLAN 协议和模式的支持,这些协议和模式包括:
WLAN 基础架构 (STA)
网络共享模式或仅限本地模式下的 WLAN 热点 (Soft AP)
WLAN 直连(点对点)
WLAN 感知 (NAN)
WLAN RTT (IEEE 802.11mc FTM)
使用 WLAN 服务的应用通过 Binder 直接与各种 WLAN 服务进行通信。WLAN 服务在系统服务中运行,并通过 HIDL 与 HAL 进行通信。下图显示了 Android WLAN 堆栈的常规结构。
2、WLAN 服务
WLAN 服务在系统服务中运行,这类服务位于 frameworks/opt/net/wifi 中。WLAN 服务通过 HIDL 与 WLAN HAL 进行通信。
WLAN 服务有很多种:
WLAN 服务:用于控制 WLAN 基础架构模式(包括 STA 和 AP)的主要机制。
WLAN 点对点服务:管理 WLAN 直连模式。
WLAN 感知服务:管理 WLAN 感知模式。
WLAN RTT 服务:管理 IEEE 802.11mc FTM 功能。
此外,WLAN 框架还包括一个独立的进程 wificond,此进程位于 system/connectivity/wificond 中。wificond 进程通过标准 nl80211 命令与 WLAN 驱动程序进行通信。
3、WLAN HAL
WLAN 框架具有三个 WLAN HAL 表面,分别由三个不同的 HIDL 软件包表示:
供应商 HAL:Android 专用命令的 HAL 表面。HIDL 文件位于 hardware/interfaces/wifi/1.x 中。
客户端 HAL:wpa_supplicant 的 HAL 表面。HIDL 文件位于 hardware/interfaces/supplicant/1.x 中。
Hostapd HAL:hostapd 的 HAL 表面。HIDL 文件位于 hardware/interfaces/hostapd/1.x 中。
供应商 HAL
供应商 HAL 提供 Android 专用命令。供应商 HAL 对于基础架构 Station (STA) 和 Soft AP (SAP) 模式的正常运行而言是可选的(不是必需的)。不过,对于 WLAN 感知和 WLAN RTT 服务而言,供应商 HAL 是必要 HAL。
在 HIDL 之前(即 Android 8.0 版本之前),Android 使用的是现在称为“旧版 HAL”的 HAL 机制。Android 源代码目前使用在旧版 HAL 之上运行的 shim 来提供 HIDL 默认实现。
旧版 HAL 标头位于 hardware/libhardware_legacy/include/hardware_legacy/ 中。基于旧版 HAL 的实现位于 hardware/interfaces/wifi/1.x/default 中。
客户端 HAL
客户端 HAL 为 wpa_supplicant 守护进程提供 HIDL 接口。
wpa_supplicant 源代码位于 external/wpa_supplicant_8/wpa_supplicant 中。提供 HIDL 接口的 wpa_supplicant 代码位于 hidl 子目录中。
Hostapd HAL
Hostapd HAL 为 hostapd 守护进程提供 HIDL 接口。
hostapd 源代码位于 external/wpa_supplicant_8/hostapd 中。提供 HIDL 接口的 hostapd 代码位于 hidl 子目录中。
WLAN 多接口并发
不同的 Android 设备可以并行支持不同的 WLAN 接口组合。受支持的组合在 HAL 中定义,并提供给框架。规范格式在 android/hardware/interfaces/wifi/1.0/IWifiChip.hal 中定义。例如,一台设备可以支持一个 STA 和一个 NAN(WLAN 感知)类型或点对点(WLAN 直连)类型的接口(但不能同时支持这两种接口)。这可以表示为:
[{STA} <= 1, {NAN,P2P} <= 1]
并发规范格式非常灵活,且是通用格式。它可以表示框架尚不支持的组合。要配置特定组合,请使用位于 device/<oem>/<device>/BoardConfig-common.mk 的 WIFI_HAL_INTERFACE_COMBINATIONS 编译标记。或者,参考 HAL 具有适合多种组合的配置,这些配置可通过(旧版)编译标记进行启用。如需了解配置说明,请参阅:
WLAN STA/AP 并发
Android 9 引入了可让设备同时在 STA 和 AP 模式下运行的功能。对于支持双频并发 (DBS) 的设备,此功能让一些新功能得以实现,例如在用户想要启用热点 (softAP) 时不会中断 STA WLAN。
WLAN 感知
通过 Android 8.0 中新增的 WLAN 感知功能,支持设备可以直接使用 WLAN 感知协议发现其他设备、与其他设备进行互连,以及将覆盖范围扩展到其他设备(Android 9 中新增的功能),而无需连接到互联网或移动网络。此功能是基于 WLAN 联盟 (WFA) WLAN 感知规范(2.0 版和 3.0 版)构建的,它支持在断开网络的情况下,在可信设备与应用之间轻松共享高吞吐量数据。
WLAN 直连
WLAN 直连功能又称“WLAN 点对点”,它允许支持设备直接使用 WLAN 直连协议发现其他设备并与之互连(无需连接到互联网或移动网络)。此功能是基于 Wi-Fi 联盟 (WFA) WLAN 直连规范构建的,它支持在断开网络的情况下,在可信设备与应用之间共享高吞吐量数据。
WLAN RTT (IEEE 802.11mc)
Android 9 中的 WLAN 往返时间 (RTT) 功能允许设备测量与其他支持设备的距离:无论它们是接入点 (AP) 还是 WLAN 感知对等设备(如果设备支持 WLAN 感知功能)。此功能基于 IEEE 802.11mc 协议,使应用能够使用准确性更高的定位功能和增强的感知功能。
3、wifiservice 类图
Hal层交互类图:
4 wifi打开流程
4.1 setWifiEnable-frameworks(WifiManager)
app调用frameworks的WifiManager的setWifiEnabled去切换wifi,通过Aidl binder通信调用到wifiService的WifiServiceImpl。然后WifiServiceImpl发送消息CMD_WIFI_TOGGLED,给到状态机DeviceActiveState来切换wifi
4.2 enterClientMode 进入ClientModeActiveState状态
DeviceActiveState状态进入时,会调用状态机WifiStateMachinePrime发送CMD_START_CLIENT_MODE消息,进入ClientModeActiveState状态
4.3 ClientModeActiveState状态中makeClientModeManager,调用WifiNative处理请求
ClientModeActiveState状态中调用WifiInjector makeClientModeManager,然后调用ClientModeActiveManager的start,发送CMD_START消息, 调用WifiNative的setupInterfaceForClientMode 设置启动client
4.4 调用到Hal层处理wifi 打开请求
WifiNative中启动StartVendorHal,通过IWifi的HIDL通信调用到wifi的start 然后加载驱动;
调用startSupplicant启动supplicant
调用createStaIface创建Iface
Android-WLAN相关推荐
- Android WLAN框架
文章目录 概览 应用框架 WLAN服务 WLAN HAL 概览 使用 WLAN 服务的应用通过 Binder 直接与各种 WLAN 服务进行通信.WLAN 服务在系统服务中运行,并通过 HIDL 与 ...
- Android WLAN (好文)
目录 一. 概览 应用框架 WLAN 服务 WLAN HAL 二. WLAN HAL 供应商 HAL 客户端 HAL Hostapd HAL WLAN 多接口并发 三. Wi-Fi Infrastru ...
- AOSP ~ WIFI架构总览
Android WiFi 架构总览 本文介绍Android源码项目(AOSP)中WiFi功能的软件架构及各个模块(可执行文件.动态链接库)间的接口. SDK API Android SDK为开发者提供 ...
- 设置Android设备在睡眠期间始终保持WLAN开启的代码实现
MainActivity例如以下: package cc.ab;import android.os.Bundle; import android.provider.Settings; import a ...
- android studio 便携式wlan热点 网络名称_速存 | WLAN信号增强器
大家好 这里是学长软件,今给大家分享的是一款让家里网速稳定上升的一个软件. 这款软件对以家庭日常网络连接的稳定和提速有一定的提升作用. [应用名称]:WLAN上网加速 [应用大小]:3m [支持平台] ...
- android驱动wifi芯片,Android驱动——Wlan驱动
在linux中,Wlan设备属于网络设备,采用网络接口. Wlan在用户空间采用标准的socket接口进行控制. WiFi协议部分头文件: include/net/wireless.h WiFi协议部 ...
- android 一键连接wifi,还在一键连WiFi?快试试更智能的WLAN+
WLAN+功能可以实现自动扫描.在2.4GHz和5GHz网络频段之间.在移动网络和WLAN网络之间实现无间隙切换,时刻为你提供最优的网络环境,让上网变得更加无忧顺畅. 一.5GHz频段 5GHz是新的 ...
- (一百三十五)Android O探索WLAN扫描(WIFI SCAN ALWAYS)
1.界面信息 小米mix2 WLAN扫描开关位于设置-更多设置-系统安全-位置信息-扫描,截图如下 2.流程梳理 搜索字符串 jiatai@jiatai:~/expand/aosp/aosp/pack ...
- Android判断Wlan信号强弱及wlan管理信息
http://blog.csdn.net/zd_1471278687/article/details/12158367 先来了解下Android如何获取wifi的信息: WifiManager wif ...
最新文章
- 求求你们了,别再写满屏的 try catch 了!!
- 第13/24周 统计信息
- 博图os更新_博途TIA安装与更新
- 如何改变标题栏的宽度
- java程序员 英文简历_it程序员英文简历范文模板
- 2019年年终总结(流水账)
- 样本标准差分母为什么是n-1
- Android Studio 自带 模拟器无声音 解决方法
- 计算机应届生的面试经验
- WebSocket网页聊天室
- MAC-重新安装系统的三种方法
- Wifi模块—源码分析Wifi启动(Android P)
- 租用国外服务器应该注意哪些?
- 浪漫表白c语言程序玫瑰,c语言玫瑰告白代码
- 使用Xilinx XSCT工具进行烧录
- 6月楼市或迎降价潮 房企策略有调整
- 我的2018——最美的年龄为最纯的梦想尽最大的努力
- ssh no matching host key type found. Their offer: ssh-rsa
- android卸载保留数据,android在卸载应用程序后保留数据库
- 当车载视觉遇上工业视觉(一)
热门文章
- 使用现代C++如何避免bugs(上)
- java判断是否是数组_java判断对象是否是数组
- Access 2000 数据库密码格式
- 会声会影X8中文版视频剪辑下载安装教程详解
- matlab 3gb开关 win7,【转】Windows 32位系统 大内存 3GB开关 Matlab 内存管理
- 2020博客之星评选 - 票数排行(最终Top50)
- 全国青少年编程等级考试scratch二级真题2019年3月(含题库答题软件账号)
- Vue.js官网版教程
- 【转】GridView的DataKeyNames的一些用法
- Failed to connect to github.com port 443 连接超时