当前位置: 首页 > news >正文

wifi架构

Wi-Fi HIDL接口梳理 | Jiansoft

Android Wi-Fi架构概述

简单来说Android Wi-Fi架构分三层:

  1. Application层,即应用层,指系统应用或第三方应用
  2. Wi-Fi Service层,属于Android framework层,是aosp中Wi-Fi相关功能的主要代码
  3. Native层,包括wpa_supplicant、hostapd、driver

这篇文章聚焦在Wi-Fi Service层和Native层之间的HIDL接口,梳理下都有哪些HIDL接口以及这些接口的功能。为后续分析WiFi具体功能流程时打下基础。

从上面的架构图可以看到,HIDL接口主要分三类,Vendor HAL、Supplicant HAL和Hostapd HAL:

  • Vendor HAL: Android专用命令的HAL接口。HIDL 文件位于 hardware/interfaces/wifi/1.x 中
  • Supplicant HAL: wpa_supplicant的HAL接口。HIDL 文件位于 hardware/interfaces/supplicant/1.x 中
  • Hostapd HAL: hostapd的HAL接口。HIDL 文件位于 hardware/interfaces/hostapd/1.x 中

HIDL接口简介

分析具体Wi-Fi Service的HIDL接口之前,先简单了解下Android HIDL机制。

HIDL是HAL interface definition language的缩写,用来定义HAL和HAL使用者之间的接口。HIDL可以让通信的两端代码独立编译。HIDL旨在用于进程间通信,进程间通信采用Binder机制。 HIDL在一个接口文件中指定数据结构和方法签名,最终生成一个包。HIDL语法与C类似。

HIDL设计初衷

HIDL设计的目标是可以独立的替换android framework而不用重新编译HAL层。HAL层由vendor厂商编译,放到/vendor分区;framework在其它分区,OTA可以直接替换framework所在的分区,而不用重新编译HAL。

HIDL语法关键字

  • generates: 表示将值返回客户端的接口方法。要返回一个非原始值或多个值,会生成同步回调函数。
  • oneway: 用来修饰HIDL方法,表示这个方法没有返回值并且非阻塞。

Wi-Fi HIDL接口梳理

下面开始梳理WiFi HIDL接口,主要梳理Vendor HAL和Supplicant HAL两部分,Hostapd HAL留到后面分析Soft AP代码时再补充。这里以列表的方式列出接口名和接口描述,为后续分析WiFi代码流程打基础。

Vendor HAL

IWifi.hal

HAL模块的根模块,加载WiFi HAL时返回的接口

  • 1.0
接口名描述
registerEventCallback
isStarted获取HAL当前状态
start执行使用这个模块的任何设置动作
stop
getChipIds
getChip获取chip的HIDL接口对象
IWifiEventCallback.hal
接口名描述
oneway onStart()
oneway onStop()
oneway onFailure
IWifiChip.hal

表示芯片的接口

  • 1.0
接口名描述
getId
registerEventCallback注册这个chip上事件的回调
getCapabilities
getAvailableModes
configureChip
getMode
createApIface
getApIfaceNames
getApIface
removeApIface
createNanIface
createP2pIface
createStaIface
createRttController
  • 1.1
接口名描述
selectTxPowerScenario选择tx功率场景,OEM厂商可以定义不同场景的功率配置
resetTxPowerScenario
  • 1.2
接口名描述
selectTxPowerScenario_1_2选择tx功率场景,OEM厂商可以定义不同场景的功率配置
registerEventCallback_1_2
  • 1.3
接口名描述
getCapabilities_1_31.3新增SET_LATENCY_MODE和P2P_RAND_MAC两个能力
setLatencyMode设置低时延模式;低时延优化是牺牲扫描、漫游等功能的权衡
flushRingBufferToFileThis API help to collect firmware/driver/pkt logs
IWifiChipEventCallback.hal
  • 1.0
接口名描述
oneway onChipReconfigured表示芯片重配置成功
oneway onChipReconfigureFailure
oneway onIfaceAdded
oneway onIfaceRemoved
oneway onDebugRingBufferDataAvailable
oneway onDebugErrorAlert
  • 1.2
接口名描述
oneway onRadioModeChange
IWifiIface.hal

用来表示单个接口的接口

接口名描述
getType
getName
IWifiStaIface.hal

用来表示单个STA接口的接口

  • 1.0
接口名描述
registerEventCallback
getCapabilities获取这个STA Iface支持的能力
getApfPacketFilterCapabilities查询芯片支持的APF能力
installApfPacketFilter安装APF程序
getBackgroundScanCapabilities
getValidFrequenciesForBand
startBackgroundScan
stopBackgroundScan
enableLinkLayerStatsCollection
disableLinkLayerStatsCollection
getLinkLayerStats
startRssiMonitoring
stopRssiMonitoring
getRoamingCapabilities
configureRoaming
setRoamingState
enableNdOffload
startSendingKeepAlivePackets
stopSendingKeepAlivePackets
setScanningMacOui
startDebugPacketFateMonitoring
getDebugTxPacketFates
getDebugRxPacketFates
  • 1.2
接口名描述
readApfPacketFilterData获取APF程序,获取APF程序等同于被卸载
setMacAddress
  • 1.3
接口名描述
getLinkLayerStats_1_3
getFactoryMacAddress获取这个STA接口的工厂MAC
IWifiStaIfaceEventCallback
接口名描述
oneway onBackgroundScanFailure
oneway onBackgroundFullScanResult
oneway onBackgroundScanResults
oneway onRssiThresholdBreached
IWifiApIface.hal
接口名描述
setCountryCode
getValidFrequenciesForBand

Supplicant HAL

ISupplicant.hal
  • 1.0
接口名描述
getInterface获取supplicant控制的一个HIDL接口对象
listInterfaces获取supplicant控制的所有接口
registerCallback注册supplicant服务的回调,这些回调由不属于任何接口或网络的全局事件回调
setConcurrencyPriorityP2P和STA单信道共存产生信道冲突时,设置谁更优先
  • 1.1
接口名描述
addInterface注册一个接口到supplicant
removeInterface从supplicant去注册一个接口
oneway terminate
ISupplicantCallback.hal

supplicant服务提供的callback接口,通过ISupplicant.registerCallback注册

  • 1.0
接口名描述
oneway onInterfaceCreated一个新的接口被创建
oneway onInterfaceRemoved一个接口被删除
oneway onTerminatingsupplicant退出
ISupplicantIface.hal

supplicant对每个网络接口(比如wlan0)暴露的接口

  • 1.0
接口名描述
getName获取网络接口名字,比如返回wlan0
getType获取网络接口类型,比如STA
addNetwork添加一个网络,返回这个网络的HIDL接口对象
removeNetwork移除网络
getNetwork获取网络
listNetworks获取网络列表
WPS相关的一些接口
setWpsDeviceName
setWpsDeviceType
setWpsManufacturer
setWpsModelName
setWpsModelNumber
setWpsSerialNumber
setWpsConfigMethods
ISupplicantNetwork.hal

supplicant为每个网络配置暴露的接口

  • 1.0
接口名描述
getId获取由supplicant所分配的网络的ID
getInterfaceName获取这个网络所属的interface name
getType获取这个网络所属的interface type
ISupplicantStaIface.hal

extends ISupplicantIface,supplicant为每个station模式网络接口暴露的接口

  • 1.0
接口名描述
registerCallback注册这个接口的回调
reassociate重连当前使能的网络,即使是已连接
reconnect重连当前使能的网络,在当前是断连状态下
disconnect断开当前使能的网络
setPowerSave开关power save
initiateTdlsDiscover发起TDLS discover
initiateTdlsSetup发起TDLS设置
initiateTdlsTeardown发起TDLS down
initiateAnqpQuery发起ANQP查询
initiateHs20IconQuery发起Hotspot2.0图标查询
getMacAddress获取MAC地址
startRxFilter开启rx filter
stopRxFilter停止rx filter
addRxFilter添加指定的rx filter
removeRxFilter删除指定的rx filter
setBtCoexistenceMode
setBtCoexistenceScanModeEnabled
setSuspendModeEnabled
setCountryCode
startWpsRegistrar
startWpsPbc
startWpsPinKeypad
cancelWps
setExternalSim
addExtRadioWork
removeExtRadioWork
enableAutoReconnect
  • 1.1
接口名描述
registerCallback_1_1
  • 1.2

增加了DPP相关的接口

接口名描述
registerCallback_1_2
getKeyMgmtCapabilities
addDppPeerUri
removeDppUri
startDppConfiguratorInitiator
startDppEnrolleeInitiator
stopDppInitiator
ISupplicantStaIfaceCallback.hal

supplicant为STA模式接口暴露的回调接口

  • 1.0
接口名描述
oneway onNetworkAdded
oneway onNetworkRemoved
oneway onStateChanged
oneway onAnqpQueryDone
oneway onHs20IconQueryDone
oneway onHs20SubscriptionRemediation
onHs20DeauthImminentNotice
oneway onDisconnected
oneway onAssociationRejected
oneway onAuthenticationTimeout
oneway onEapFailure
oneway onBssidChanged
oneway onWpsEventSuccess
oneway onWpsEventFail
oneway onWpsEventPbcOverlap
oneway onExtRadioWorkStart
oneway onExtRadioWorkTimeout
  • 1.1
接口名描述
oneway onEapFailure_1_1指示EAP认证失败
  • 1.2
接口名描述
oneway onDppSuccessConfigReceived
oneway onDppSuccessConfigSent
oneway onDppProgress
oneway onDppFailure
ISupplicantStaNetwork.hal

extends ISupplicantNetwork,supplicant为每个STA模式网络配置暴露的接口

  • 1.0
接口名描述
registerCallback
setSsid对应wpa_s中的ssid成员
setBssid
setScanSsid对于此网络是否要发probe request
setKeyMgmt哪一种密钥管理方式
setProto设置所使用的协议,即WPA WPA2
setAuthAlg认证算法,open/share key/LEAP
setGroupCipher
setPairwiseCipher
setPskPassphrase
setPsk直接设置raw psk
setWepKey
setWepTxKeyIdx
setRequirePmf
setEapMethod
setEapPhase2Method
setEapIdentity
setEapAnonymousIdentity
setEapPassword
setEapCACert设置EAP CA证书文件路径
setEapCAPath设置CA证书文件夹路径
setEapClientCert
setEapPrivateKeyId
setEapSubjectMatch
setEapAltSubjectMatch
setEapEngineEnable EAP Open SSL Engine for this network
setEapEngineID
setEapDomainSuffixMatch
setProactiveKeyCaching
setIdStr
enable
disable
select发起连接
sendNetworkEapSimGsmAuthResponse
sendNetworkEapSimGsmAuthFailure
sendNetworkEapSimUmtsAuthResponse
sendNetworkEapSimUmtsAutsResponse
sendNetworkEapSimUmtsAuthFailure
sendNetworkEapIdentityResponse
  • 1.1
接口名描述
setEapEncryptedImsiIdentity
sendNetworkEapIdentityResponse_1_1
  • 1.2
接口名描述
setKeyMgmt_1_2
getKeyMgmt_1_2
setPairwiseCipher_1_2
getPairwiseCipher_1_2
setGroupCipher_1_2
getGroupCipher_1_2
setGroupMgmtCipher
getGroupMgmtCipher
enableTlsSuiteBEapPhase1Param
enableSuiteBEapOpenSslCiphers
getSaePassword
getSaePasswordId
getSaePasswordId
setSaePasswordId
ISupplicantStaNetworkCallback

supplicant为每一个网路配置暴露的回调接口

  • 1.0
接口名描述
oneway onNetworkEapSimGsmAuthRequest
oneway onNetworkEapSimUmtsAuthRequest
oneway onNetworkEapIdentityRequest

相关文章:

  • 2.5 Rviz使用教程
  • 平均数与倍数
  • Hashcat使用教程:快速上手密码恢复工具
  • 03.利用显卡内核模块等特性为算法提速百倍
  • 速度与精度的结合:Faster R-CNN模型的性能剖析
  • flask JWT 认证
  • IDEA—配置MySQL的驱动程序,引入jar包没有配置不成功问题解决
  • 访问vLLM启动的大模型,报错The model `XXX/XXX` does not exist
  • 嵌入式学习笔记 - HAL库对外设的封装
  • 【卫星通信】Skylo与ViaSat标准建议详解:基于NB-IoT NTN通过GEO卫星实现IMS语音通话的解决方案
  • 【卫星通信】3GPP标准提案:面向NB-IoT(GEO)场景的IMS信令优化方案-降低卫星通信场景下的语音呼叫建立时延
  • Python装饰器:优雅增强函数行为的艺术
  • import引入api报select.default is not a function异常解析
  • 细节致胜:如何重塑反向海淘用户体验
  • 洛谷 P5711:闰年判断
  • IO扩展的一种简易方法
  • java在银行业务数值金额计算问题处理篇
  • 《A Gentle Introduction to Graph Neural Networks》
  • 前端与协议
  • H5快速学习
  • 网站备案号的区别/营销渠道管理
  • 网站效果图可以做动态的嘛/网站优化排名优化
  • 网站pc端和手机端分离怎么做/排名公式
  • dw做网站首页怎么做/生猪价格今日猪价
  • lnmp搭建后怎么做网站/谷歌chrome浏览器
  • 网站建设 中企动力西安/如何用模板建站