来自官网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相关推荐

  1. Android WLAN框架

    文章目录 概览 应用框架 WLAN服务 WLAN HAL 概览 使用 WLAN 服务的应用通过 Binder 直接与各种 WLAN 服务进行通信.WLAN 服务在系统服务中运行,并通过 HIDL 与 ...

  2. Android WLAN (好文)

    目录 一. 概览 应用框架 WLAN 服务 WLAN HAL 二. WLAN HAL 供应商 HAL 客户端 HAL Hostapd HAL WLAN 多接口并发 三. Wi-Fi Infrastru ...

  3. AOSP ~ WIFI架构总览

    Android WiFi 架构总览 本文介绍Android源码项目(AOSP)中WiFi功能的软件架构及各个模块(可执行文件.动态链接库)间的接口. SDK API Android SDK为开发者提供 ...

  4. 设置Android设备在睡眠期间始终保持WLAN开启的代码实现

    MainActivity例如以下: package cc.ab;import android.os.Bundle; import android.provider.Settings; import a ...

  5. android studio 便携式wlan热点 网络名称_速存 | WLAN信号增强器

    大家好 这里是学长软件,今给大家分享的是一款让家里网速稳定上升的一个软件. 这款软件对以家庭日常网络连接的稳定和提速有一定的提升作用. [应用名称]:WLAN上网加速 [应用大小]:3m [支持平台] ...

  6. android驱动wifi芯片,Android驱动——Wlan驱动

    在linux中,Wlan设备属于网络设备,采用网络接口. Wlan在用户空间采用标准的socket接口进行控制. WiFi协议部分头文件: include/net/wireless.h WiFi协议部 ...

  7. android 一键连接wifi,还在一键连WiFi?快试试更智能的WLAN+

    WLAN+功能可以实现自动扫描.在2.4GHz和5GHz网络频段之间.在移动网络和WLAN网络之间实现无间隙切换,时刻为你提供最优的网络环境,让上网变得更加无忧顺畅. 一.5GHz频段 5GHz是新的 ...

  8. (一百三十五)Android O探索WLAN扫描(WIFI SCAN ALWAYS)

    1.界面信息 小米mix2 WLAN扫描开关位于设置-更多设置-系统安全-位置信息-扫描,截图如下 2.流程梳理 搜索字符串 jiatai@jiatai:~/expand/aosp/aosp/pack ...

  9. Android判断Wlan信号强弱及wlan管理信息

    http://blog.csdn.net/zd_1471278687/article/details/12158367 先来了解下Android如何获取wifi的信息: WifiManager wif ...

最新文章

  1. 求求你们了,别再写满屏的 try catch 了!!
  2. 第13/24周 统计信息
  3. 博图os更新_博途TIA安装与更新
  4. 如何改变标题栏的宽度
  5. java程序员 英文简历_it程序员英文简历范文模板
  6. 2019年年终总结(流水账)
  7. 样本标准差分母为什么是n-1
  8. Android Studio 自带 模拟器无声音 解决方法
  9. 计算机应届生的面试经验
  10. WebSocket网页聊天室
  11. MAC-重新安装系统的三种方法
  12. Wifi模块—源码分析Wifi启动(Android P)
  13. 租用国外服务器应该注意哪些?
  14. 浪漫表白c语言程序玫瑰,c语言玫瑰告白代码
  15. 使用Xilinx XSCT工具进行烧录
  16. 6月楼市或迎降价潮 房企策略有调整
  17. 我的2018——最美的年龄为最纯的梦想尽最大的努力
  18. ssh no matching host key type found. Their offer: ssh-rsa
  19. android卸载保留数据,android在卸载应用程序后保留数据库
  20. 当车载视觉遇上工业视觉(一)

热门文章

  1. 使用现代C++如何避免bugs(上)
  2. java判断是否是数组_java判断对象是否是数组
  3. Access 2000 数据库密码格式
  4. 会声会影X8中文版视频剪辑下载安装教程详解
  5. matlab 3gb开关 win7,【转】Windows 32位系统 大内存 3GB开关 Matlab 内存管理
  6. 2020博客之星评选 - 票数排行(最终Top50)
  7. 全国青少年编程等级考试scratch二级真题2019年3月(含题库答题软件账号)
  8. Vue.js官网版教程
  9. 【转】GridView的DataKeyNames的一些用法
  10. Failed to connect to github.com port 443 连接超时