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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值