Android 12 引入了 Wi-Fi STA/STA 并发功能,使设备可同时连接到两个 Wi-Fi 网络。此可选功能支持以下功能。
- Make-before-break:设备会在断开现有连接之前连接到新的 Wi-Fi 网络。这使得 Wi-Fi 网络之间的切换更加顺畅
- 并发仅本地和互联网连接:设备会连接到仅限本地的网络,而不中断设备的主要互联网提供连接。
- 并发受限和互联网连接:设备会连接到受限网络(仅适用于某些特权应用),而不会中断设备的主要互联网连接。
- (Android 13 或更高版本)具有互联网连接的多个并发网络:设备连接到两个不受限制的网络,这两个网络对所有应用均可用,并提供互联网连接。
实现
设备必须满足以下要求才能实现 Wi-Fi STA/STA 并发:
-
Wi-Fi 芯片或固件必须支持两个并发 STA 连接。固件必须支持两个连接的所有信道和频段组合。为避免出现性能问题,我们建议使用支持 2x2+2x2 DBS 的 Wi-Fi 芯片。
-
设备必须支持供应商 HAL 1.5 版本中的以下 API
IWifiChip.setMultiStaPrimaryConnection()
IWifiChip.setMultiStaUseCase()
-
HAL Wi-Fi 接口组合必须使用规范格式(如
[{STA} <= 2, ...]
)公开的两个并发 STA 接口。如需了解详情,请参阅 Wi-Fi 多接口并发。
如果满足这些前提条件,则通过执行以下操作来实现 Wi-Fi STA/STA 并发:
-
使用运行时资源叠加层逐个启用一个或多个函数(默认情况下处于停用状态)。
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- 并发仅本地和互联网连接:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- 并发受限和互联网连接:
config_wifiMultiStaRestrictedConcurrencyEnabled
- 具有互联网连接的多个并发网络:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
-
按照以下各部分的说明验证每个实现。
为了更好地支持 Wi-Fi STA/STA 并发,我们建议 OEM 自定义的框架和应用使用 NetworkCallback#onCapabilitiesChanged()
方法,而不是 WifiManager#getConnectionInfo()
方法,因为后者仅返回 WifiInfo
且在 Android 12 中已废弃。如需了解详情,请参阅适用于点对点连接的 Wi-Fi 网络请求 API。
具有互联网连接的多个并发网络
“具有互联网连接的多个并发网络”功能适用于 Android 13 或更高版本,可允许设备并发连接到两个网络 (AP),这两个网络不受限制(所有应用均可访问),并提供互联网访问。
应用可以使用 WifiManager#isStaConcurrencyForMultiInternetSupported()
方法检查设备是否支持此功能。
如果支持此功能,特权应用可以使用 WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
方法启用此功能。此功能具有以下模式:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
:限制与 DBS AP 的双频的并发连接。WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
:连接到任意 AP,其中的各个连接使用不同的频段。WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
:停用功能。
如需查询当前活跃的功能模式,请使用 WifiManager#getStaConcurrencyForMultiInternetMode()
方法。
启用此功能后,请按照以下步骤请求另一个提供互联网连接的 Wi-Fi 网络。
-
使用
WifiNetworkSpecifier.Builder
创建一个 Wi-Fi 网络说明符。使用setBand()
方法为说明符选择一个频段。请勿指定 SSID 或 BSSID 作为另一个网络,因为 Wi-Fi 框架选择了指定频段。 -
使用
ConnectivityManager
创建一个具有NET_CAPABILITY_INTERNET
功能的NetworkRequest
。 -
将说明符与
NetworkCallback
实例一同添加到网络请求中以跟踪请求的状态,并向ConnectivityManager
发出请求。如果扫描结果中存在某个包含请求频段的已保存网络,且已成功连接到该网络,则会在回调对象上调用NetworkCallback.onAvailable()
。
验证具有互联网连接的多个并发网络
如需验证此功能,请使用以下 CTS 测试:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Wi-Fi 芯片供应准则
对于 Wi-Fi 芯片供应商,请遵循以下准则来支持 Wi-Fi STA/STA 并发。
Wi-Fi 芯片必须支持双并发 STA 连接。这意味着它支持以下各项:
- 每个 STA 接口都有一个可由框架编程的唯一 MAC 地址。
- 次要 STA 接口可以动态创建和销毁。
- 每个 STA 可以连接到不同 SSID(同一频段或不同频段内)。
- 每个 STA 可以连接到同一 SSID(同一频段或不同频段内)。这两个 STA 绝不能连接到同一 BSSID。
关键功能必须基于每个接口运行,而且只能在主接口上使用。下面列出了这些关键功能:
-
至少必须在主接口(使用
IWifiChip.setMultiStaPrimaryConnection()
进行设置)上支持漫游。如果两个接口均支持漫游,则在一个连接上的决定不得与第二个并发连接发生冲突。例如,一个接口不得漫游到另一个连接的 BSSID。 -
必须至少在主接口(使用
IWifiChip.setMultiStaPrimaryConnection()
设置)上支持 APF(以及其他分流,例如 ARP 和 NS)。 -
链路层统计数据必须基于每个接口运行。
以下是针对不同并发场景的推荐 Wi-Fi 芯片实现:
-
Wi-Fi 芯片必须让框架使用以下某个常量调用
IWifiChip.setMultiStaUseCase()
来指定当前功能:DUAL_STA_TRANSIENT_PREFER_PRIMARY
:指定 Make-Before-Break 功能。主连接的质量必须优先于次级连接的质量。DUAL_STA_NON_TRANSIENT_UNBIASED
:指定并发仅本地和互联网连接或并发受限和互联网连接功能。两个连接的质量必须具有相同的优先级。
-
由于双并发 STA 可能会产生 MCC、SCC 和 DBS 操作模式,因此当框架调用
IWifiChip.setMultiStaUseCase()
来指示该功能时,供应商实现必须选择最佳的无线装置配置。一般准则如下:
- 首选 2x2+2x2 DBS(如果有)。
- 由于连接质量受到过度影响,请尽可能避免使用 1x1+1x1 DBS。相反,建议您选用 MCC。
- 必须由驱动程序或固件配置 MCC 占空比,以实现各种功能。框架不会直接设置 MCC 占空比,而是使用
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
查询此信息。 -
如果使用 MCC,我们建议主次连接之间的占空比如下:
DUAL_STA_TRANSIENT_PREFER_PRIMARY
:70% 主要/30% 次要DUAL_STA_NON_TRANSIENT_UNBIASED
:50% 主要/50% 次要
refs:
Wi-Fi STA/STA 并发
https://source.android.com/docs/core/connect/wifi-sta-sta-concurrency?hl=zh-cn
Wi-Fi STA/AP 并发
https://source.android.com/docs/core/connect/wifi-sta-ap-concurrency?hl=zh-cn
Wi-Fi 多接口并发
https://source.android.com/docs/core/connect/wifi-hal?hl=zh-cn#wi-fi_multi-interface_concurrency
/1.5/IWifiChip.hal
https://cs.android.com/android/platform/superproject/main/+/main:hardware/interfaces/wifi/1.5/IWifiChip.hal
小米开放平台双WiFi适配说明
https://www.yimenapp.com/kb-yimen/12508/
“小米双wifi接口列表v1.0”下载链接:http://f4.market.xiaomi.com/download/MiPass/036a45c2758ccbb709f58f5eefc4a6134f943e679/小米双wifi接口列表v1.0.xlsx
WLAN 感知
https://developer.android.com/guide/topics/connectivity/wifi-aware?hl=zh-cn
//////其他idea
根据用户策略开启双网卡,实现双网卡并存通信的网络架构是本申请的核心部分。下面将详细讲述关于移动网络和wifi网络是如何开启的,及两个网络如何并存。
双网卡启动过程:
应用层分别调用这两个函数:启用移动数据(setMobileDataEnabled)和启用WIFI(setWifiEnable)实现移动网络和wifi网络的开启。下面简要说明移动网络、wifi网络开启过程。
开启移动网络(LTE/3G)流程说明:
当开启移动网络时,应用程序会调用连接管理器启用移动数据(ConnectivityManager.setMobileDataEnable)方法,但是这个方法被定义为私有(private)类型,系统级的应用才能调用。本申请实施例中通过如下方式实现用户级的应用调用:通过java中的反射就可以实现调用到连接管理器(ConnectivityManager)类中的启动移动数据(setMobileDataEnable)函数。使能移动网络后,接着会发送一条设置移动数据事件(EVENT_SET_MOBILE_DATA)消息,连接服务(ConnectivityService)的消息处理单元(handleMessage)将接收并处理这条消息,在处理该消息的代码中做真正的使能工作:连接接入点(APN),通过动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)获得IP地址,配置rmnet_usb0使得移动网络状态为已连接,至此移动网络使能完成。
开启wifi流程说明:
当开启wifi时,应用程序会调用Wifi服务(WifiService)模块中的启用wifi(setWifiEnable)函数使能wifi,WifiService模块接着向自身发送一条CMD_WIFI_TOGGLED消息,在处理该消息的代码中做真正的使能工作:首先加载wifi内核驱动模块,然后启动wpa_supplicant程序(WifiService负责启动和关闭wpa_supplicant),wpa_supplicant程序主要是完成AP扫描,扫描后将扫描结果通过事件通知framework层,在framework层的wifi状态追踪器(wifiStateTracker)会创建wifi监视器(WifiMonitor)接收来自底层的事件,而WifiMonitor负责从wpa_supplicant接收事件通知,同时WifiMontior监视线程会把命令下发给wpa_supplicant,配置AP,连接AP,获取IP地址,wifi状态为已连接,至此wifi使能完成。
在两个网卡都启动后,本申请实施例通过修改framework层的网络连接处理流程而实现双网卡共存。本申请实施例提供的双网卡启动整体实现流程如图1所示,包括如下步骤:
步骤101:判断新连接的网络类型是否是默认的网络(默认的网络指的是wifi或移动网络,即本申请所要开启的双网卡对应的网络),如果这个网络是默认的网络,继续步骤102,否则跳转到步骤107;
步骤102:判断激活默认网络(mActiveDefaultNetwork)变量是否已经设置(之前已开启过一个网络wifi或移动网络,已经处于连接状态,如果已开启过网络,mActiveDefaultNetwork值为是1或0,否则值为-1),并且新连接的网络类型不等于这个mActiveDefaultNetwork已激活的网络类型,如果条件满足则保留这个新连接的网络并且保留它的网络状态信息,使这个新的网络和原网络并存,结束本流程;否则说明之前没有开启过任何网络,将继续步骤103;
步骤103:使能同步处理函数,该函数的具体处理过程包括:首先判断网络传输唤醒锁定(mNetTransitionWakeLock)变量是否是保持(held)状态,这里是判断屏幕是否亮着,若亮着,一秒之后关闭屏幕,之所以一秒钟之后关闭是留给应用程序连接新网络所用的时间;
步骤104:更新激活默认网络(mActiveDefaultNetwork)变量实现新网络连接,重新设置正在运行的网络类型,同时更新其他的变量;
步骤105:设置拆解(teardown)请求为否,不关闭网络;
步骤106:更新网络设置;这一步主要是从系统属性里面读出要连接的那个网络的属性信息,然后把它写到安卓系统的内核(kernel)里;
步骤107:改变网络连接,主要包括更新路由设置、域名系统设置、网络接口设置和连接属性;切换到新连接的网络上;
步骤108:发送一个广播消息至网络状态服务(NetWorkStateService),用于通知网络接口名称发生改变。
该流程与现有技术开启网络流程的区别:
现有技术在两个网络(wifi和3g/lte)同时开启时,虽然在网络设置界面上看到两个网络都是开启状态,但实质上它的内部程序处理策略是优先选择wifi网络,程序在内部处理上是只打开了wifi,而将3g/lte关闭,这时虽然打开了两个网络但只有wifi网络可用,3g/lte是无法使用的。通过查看网络状态,只有WLAN处于up状态并且有IP地址,如图2所示。
标签:STA,wifi,网络,Wi,Fi,连接 From: https://www.cnblogs.com/bluestorm/p/17604274.html