系列文章目录

第一章 国内下载AOSP最新源码的方法
第二章 下载AOSP WiFi相关的代码
第三章 将源码导入Android Studio(无需编译idegen)



前言

本篇介绍一下Android Wi-Fi系统架构,提供给应用使用Wi-Fi功能的API,以及一些硬件和无线电相关常识。


一、WiFi是什么?

WI-FI(Wireless Fidelity),是一种可以将个人电脑、手持设备等终端以无线方式互相连接的技术,由澳洲政府的研究机构CSIRO在20世纪90年代发明的,发明人是John O’Sullivan,被媒体称为”Wi-Fi之父“。 WI-FI是一个无线网路通信技术的品牌,由Wi-Fi联盟所持有,组成部分包括基本服务单元、分配系统、接入点、扩展服务单元和关口等。目的是改善基于IEEE 802.11标准的无线网路产品之间的互通性。Wi-Fi的样式有很多类型,有无线的卡,还有连接电脑的等等。
知乎Wi-Fi介绍

在无线局域网WLAN发明之前,人们要想通过网络进行联络和通信,必须先用物理线缆-铜绞线组建一个电子运行的通路,为了提高效率和速度,后来又发明了光纤。当网络发展到一定规模后,人们又发现,这种有线网络无论组建、拆装还是在原有基础上进行重新布局和改建,都非常困难,且成本和代价也非常高,于是WLAN的组网方式应运而生。 无线局域网络英文全名:Wireless Local Area Networks;简写为:WLAN。它是相当便利的数据传输系统,它利用射频(Radio Frequency; RF)的技术,使用电磁波,取代旧式碍手碍脚的双绞铜线(Coaxial)所构成的局域网络,在空中进行通信连接,使得无线局域网络能利用简单的存取架构让用户透过它,达到“信息随身化、便利走天下”的理想境界。
知乎无线局域网介绍

记住一点,WI-FI是一个无线网路通信技术的品牌,由Wi-Fi联盟所持有。在中国大陆地区销售的具有无线连接功能的设备上要遵守中国通信管理局的认证要求,不允许出现Wi-Fi商标,所以大陆手机都是显示WLAN。

二、WiFi系统架构

AOSP > 开发 > 连接性: https://source.android.google.cn/devices/tech/connect/wifi-overview?hl=zh-cn

1. 概述

Android 提供默认 Android 框架实现,其中包括对各种 WLAN 协议和模式的支持,这些协议和模式包括:

WLAN 基础架构 (STA)
网络共享模式或仅限本地模式下的 WLAN 热点 (Soft AP)
WLAN 直连(P2P)
WLAN 感知 (NAN)
WLAN RTT (IEEE 802.11mc FTM)
使用 Wi-Fi 服务的应用通过 Binder 直接与各种 Wi-Fi 服务进行通信。Wi-Fi 服务在系统服务中运行,并通过 HIDL 与 HAL 进行通信。下图显示了 Android Wi-Fi 堆栈的常规结构。
Android WLAN 架构

2. 应用框架

应用代码位于应用框架级别,它使用各种 android.net.wifi API 与 Wi-Fi 框架和硬件进行交互。此代码在内部通过 Binder IPC 机制调用 WLAN 进程。

3. Wi-Fi 服务

Wi-Fi 服务在系统服务中运行,这类服务位于 frameworks/opt/net/wifi 中。Wi-Fi 服务通过 HIDL 与 Wi-Fi HAL 进行通信。

WLAN 服务有很多种:

WLAN 服务:用于控制 WLAN 基础架构模式(包括 STA 和 AP)的主要机制。
WLAN 点对点服务:管理 WLAN 直连模式。
WLAN 感知服务:管理 WLAN 感知模式。
Wi-Fi RTT 服务:管理 IEEE 802.11mc FTM 功能。
此外,Wi-Fi 框架还包含一个独立的 wificond 进程,该进程位于 system/connectivity/wificond 中。wificond 进程通过标准的 nl80211 命令与 Wi-Fi 驱动程序进行通信。

4. Wi-Fi HAL

Wi-Fi 框架具有三个 Wi-Fi HAL 表面,分别由三个不同的 HIDL 软件包表示:供应商 HAL、客户端 HAL 和 Hostapd HAL。

如需详细了解各种 HAL 的实现,请参阅 Wi-Fi HAL

三、WiFi面向应用提供的API

Android 开发者 > 文档 > 指南 > WLAN:https://developer.android.google.cn/guide/topics/connectivity/companion-device-pairing?hl=zh-cn

从 Android 10 开始,Wi-Fi 基础架构引入两个全新 API 表面:适用于互联网连接的 Wi-Fi 建议 API 和适用于对等连接的 Wi-Fi 网络请求 API。

1. WLAN 扫描

扫描流程分为三步:

  1. 为 SCAN_RESULTS_AVAILABLE_ACTION 注册一个广播监听器,系统会在完成扫描请求时调用此监听器,提供其成功/失败状态。对于搭载 Android 10(API 级别 29)及更高版本的设备,系统将针对平台或其他应用在设备上执行的所有完整 WLAN 扫描发送此广播。应用可以使用广播被动监听设备上所有扫描的完成情况,无需发出自己的扫描。
  2. 使用 WifiManager.startScan() 请求扫描。请务必检查方法的返回状态,因为调用可能因以下任一原因失败:
    - 由于短时间扫描过多,扫描请求可能遭到节流。
    - 设备处于空闲状态,扫描已停用。
    - WLAN 硬件报告扫描失败。
  3. 使用 WifiManager.getScanResults() 获取扫描结果。系统返回的扫描结果为最近更新的结果,但如果当前扫描尚未完成或成功,可能会返回以前扫描的结果。也就是说,如果在收到成功的 SCAN_RESULTS_AVAILABLE_ACTION 广播前调用此方法,您可能会获得较旧的扫描结果。

2. WLAN 直连(对等连接或 P2P)

使用 WLAN 直连 (P2P) 技术,可以让具备相应硬件的 Android 4.0(API 级别 14)或更高版本设备在没有中间接入点的情况下,通过 WLAN 进行直接互联。使用这些 API,您可以实现支持 WLAN P2P 的设备间相互发现和连接,从而获得比蓝牙连接更远距离的高速连接通信效果。对于多人游戏或照片共享等需要在用户之间共享数据的应用而言,这一技术非常有用。

WLAN P2P API 包含以下主要部分:
- 支持您发现、请求,以及连接到对等设备的方法(在 WifiP2pManager 类中定义)。
- 支持您获知 WifiP2pManager 方法调用成功与否的侦听器。调用 WifiP2pManager 方法时,每个方法均可收到作为参数传入的特定侦听器。
- 通知您 WLAN P2P 框架检测到的特定事件(例如连接断开或新发现对等设备)的 Intent。

通常,您可以一起使用 API 的这三个主要组件。例如,您可以为针对 discoverPeers() 的调用提供 WifiP2pManager.ActionListener,这样您便可以通过 ActionListener.onSuccess() 和 ActionListener.onFailure() 方法来接收通知。如果 discoverPeers() 方法发现对等设备列表已经更改,则还将广播 WIFI_P2P_PEERS_CHANGED_ACTION Intent。

3. WLAN 感知

WLAN 感知功能使搭载 Android 8.0(API 级别 26)及更高版本的设备能够发现彼此并直接进行连接,它们之间无需任何其他类型的连接。WLAN 感知也称为“邻近感知网络”(NAN)。

WLAN 感知网络的工作原理是与邻近设备组建集群,如果设备是某个区域的第一个设备,则创建一个新集群。此集群行为适用于整个设备,由 WLAN 感知系统服务管理;应用无法控制集群行为。应用使用 WLAN 感知 API 与 WLAN 感知系统服务通信,后者管理设备上的 WLAN 感知硬件。

应用可通过 WLAN 感知 API 执行以下操作:

  • 发现其他设备:此 API 具有查找其他附近设备的机制。此过程会在一台设备发布一项或多项可发现服务时启动。然后,当设备订阅一项或多项服务并进入发布者的 WLAN 范围时,订阅者会收到一条告知已发现匹配发布者的通知。在订阅者发现发布者后,订阅者可以发送短消息或与发现的设备建立网络连接。设备可以既是发布者又是订阅者。
  • 创建网络连接:两台设备发现彼此后,可以创建没有接入点的双向 WLAN 感知网络连接。

与蓝牙连接相比,WLAN 感知网络连接支持的覆盖范围更广,支持的吞吐率更高。这些类型的连接适用于在用户之间共享大量数据的应用,例如照片共享应用。

4. 通过 RTT 确定 Wi-Fi 位置信息

您可以利用 Wi-Fi RTT(往返时间)API 提供的 Wi-Fi 位置功能测量距附近支持 RTT 的 Wi-Fi 接入点和 Wi-Fi 感知对等设备的距离。

如果您测量与三个或更多接入点的距离,可以使用多点定位算法来预估与这些测量值最相符的设备位置。结果通常可以精确到 1 至 2 米。

凭借这种精准度,您可以开发基于精确位置的服务,例如室内导航、无歧义语音控制(例如,“打开这盏灯”)以及基于位置的信息(例如,“此产品是否有特别优惠?”)。

请求发出设备无需连接到接入点即可通过 Wi-Fi RTT 测量距离。为了保护隐私,只有发出请求的设备能够确定距接入点的距离,接入点没有此类信息。前台应用执行 Wi-Fi RTT 操作不受限制,但后台应用执行此类操作时会受限。

Wi-Fi RTT 和相关精确时间测量 (FTM) 功能根据 IEEE 802.11mc 标准指定。Wi-Fi RTT 需要 FTM 提供的精确时间测量,因为前者通过测量数据包在设备之间往返所需的时间,并将该时间乘以光速来计算两个设备之间的距离。

四、WiFi硬件相关的知识

1. WiFi频段和信道

无线频谱是一种有限资源,每个国家在军用和民用无线电频段有所差异,但民用无线电频段大体上遵循国际电信联盟定义的ISM频段。ISM频段 是什么,有什么用呢?

ISM(工业、科学、医疗)频段为国际电信联盟(ITU)《无线电规则》定义的指定无线电频段。这些频段是为电信之外的其他射频用途挪出的频段。因此, ISM频段虽然理论上可用于电信用途,但使用ISM频段的电信设备必须能够承受来自其他射频及微波技术的干扰,如来自微波炉、射频加热及其他可能生成电磁干扰(EMI)的设备的干扰。虽然国际电信联盟已确定了指定频段,但各个国家所规定的ISM频段并不统一。ISM频段的最初目的并非用于通信,但是现在很多短距离、低功耗、免许可(或免许可容错)通信系统均在该频段内运行。除通信之外,ISM频段的最常见用途为工业和家庭用感应加热,工业和家庭用微波加热,以及透热疗法、高温疗法和射频/微波消融等医疗用射频及微波加热。此外,由于ISM频段可随时使用,而且针对该频段下的频率存在一些低价的无线集成电路,因此最近开发的某些雷达系统也使用ISM频段,尤其2.4GH ISM频段。ISM频段的最常见日常用途为WiFi、蓝牙、Zigbee、无线电话、RFID及NFC等低功耗及短距离通信。在美国,由于大多数WiFi和蓝牙通信以及最近越来越普及的5GHz WiFi系统都使用ISM频段,因此很多人对该频段都非常熟悉。此外,还有许多常用RFID和NFC系统使用13.553MHz ~13.567MHz ISM频段内的13.56MHz频率,而且还有许多信用卡、安全接入、人员识别及无线支付系统也使用此类技术。

目前WI-FI使用下面两个频段:

  • 2.4GHz
  • 5GHz

每个频道又按照一定的带宽划分为若干信道。

  • 2.4G WIFI共有14个信道,工作频率范围是2.4G-2.4835Ghz,不过在国内,只应用了13个信道。其中北美区域应用了11个信道(1-11);欧洲和我国等应用了13个信道(1-13),日本应用了14个信道(1-14)。
    2.4G WiFi的每一个信道的频宽是22Mhz,中心频点间隔是5Mhz。其中20M属于有效带宽,剩余2M属于隔离保护带宽。
    从信道的图例可以看到,WIFI相邻的信道之间是存在频率交叠的,也正是因为这个,2.4G WIFI整个频段只有1、6、11这三个频率是互不干扰的。
  • 5G WIFI的信道比较多,工作频率范围是5.15G-5.85Ghz。
    5G WIFI早期在国内只开放了5.8Ghz左右的频率,所以一些早期的5G WIFI也只支持149之后的信道。不过现在中国开放了部分其余的5G WIFI信道,可以使用的无线信道也变得更多了。
  • 2.4G WIFI和5G WIFI的区别。
    2.4G WIFI的工作频率低,绕射能力强,所以这个频段的干扰信号更多,使得2.4G WIFI的下载速度也变得很慢。
    而5G WIFI由于工作频率高,使用的频宽大,所以下载速度快。但是这个频段的信号绕射能力差,而且穿墙衰减非常大,所以它比较适合近距离的、在同一个房间内的覆盖。

Wi-Fi信号的“频段”和“信道”有何区别?

2. WiFi网络协议栈分层

  • L1:STA跟AP关联上就表明L1(物理层)连接成功
  • L2:STA跟AP接入认证成功就表明L2(数据链路层)连接成功
  • L3:STA通过DHCP从AP成功获取IP租约/DNS服务器列表就表明L3(网络层)连接成功

L1 对应wpa_supplicant里面的关联;
L2对应wpa_supplicant里面的四次握手(对于加密热点,OPEN认证的关联上就算连上L2了);
L3对应IpClient DHCP成功。

3. WiFi芯片相关

  • 当前手机WiFi芯片厂商主要有高通/博通/MTK/海思,基本上都是蓝牙/GPS/Wi-Fi三合一芯片。芯片上运行一个厂商提供的固件系统,通过接口跟厂商提供的wlan驱动通信。固件是二进制形式提供,wlan驱动是以源码方式提供。
  • 当前大多数旗舰机都支持双频Wi-Fi,也就是硬件接口有两个wlan0和wlan1,天线2x2,可以同时一个连2.4G热点一个连5G热点,也可以一个连Wi-Fi,另一个工作在SoftAp模式共享Wi-Fi网络。

总结

以上就是今天要讲的内容,本文简单介绍了Android WiFI的一些基础知识,由于Wi-Fi整个功能涉及面非常广也非常复杂,很多东西这里一笔带过了。最后希望能帮到大家,觉得对你有帮助的话可以点个赞或关注一下。

Logo

开源、云原生的融合云平台

更多推荐