1、问题描述

    当前大屏共建的需求是miracast功能要开机即可用。miracast会去使能wifi p2p功能,导致wifi连接概率失败。失败的原因是wifi连接时,p2p正在占用资源,导致wifi无法完成正常的扫描,最终连接超时失败

wpa_supplicant: wlan0: Delay station mode scan while P2P operation is in progress.

 

2、分析过程

时间:10-31 14:49:45.614-------10-31 14:49:47.642

wpa_supplicant由于p2p流程占用导致wlan0的扫描流程被阻塞

Line 40216: 10-31 14:49:45.661  4204  4205 I C05200/wpa_supplicant: wlan0: Delay station mode scan while P2P operation is in progress

 

延时5S再扫描

Line 40221: 10-31 14:49:45.662  4204  4205 D C05200/wpa_supplicant: wlan0: Setting scan request: 5.000000 sec

 

随后上层断开连接

10-31 14:49:47.642  5268  5268 I A00500/[Settings]: Settings WifiModel -> start to removeDeviceConfig{"ssid":"H151-370_AA7D_5G","bssid":"c2:c3:7f:7d:aa:9b","bssidType":1,"capabilities":"[WPA2-PSK-CCMP][WPS][ESS]","securityType":3,"rssi":-54,"band":2,"frequency":5765,"channelWidth":0,"centerFrequency0":5765,"centerFrequency1":0,"infoElems":[{"eid":61,"content":"99080400000000000000000000000000000000000000"},{"eid":192,"content":"000000faff"}],"timestamp":465805358,"supportedWifiCategory":1,"isHiLinkNetwork":false}

 

wlan0取消扫描任务

Line 52509: 10-31 14:49:47.657  4204  4205 I C05200/wpa_supplicant: wlan0: Cancelling scan request

 

wpa层断开连接

Line 52518: 10-31 14:49:47.657  4204  4205 D C05200/wpa_supplicant: wlan0: No ongoing scan/p2p-scan found to abort

Line 52519: 10-31 14:49:47.657  4204  4205 W C05200/wpa_supplicant: Request to deauthenticate - bssid=00:00:**:**:**:00 pending_bssid=00:00:**:**:**:00 reason=3 (DEAUTH_LEAVING) state=DISCONNECTED valid_links=0x0 ap_mld_addr=00:00:**:**:**:00

Line 52520: 10-31 14:49:47.657  4204  4205 I C05200/wpa_supplicant: wlan0: State: DISCONNECTED -> DISCONNECTED

 

执行清理动作,连接失败

Line 52529: 10-31 14:49:47.657  4204  4205 I C05200/wpa_supplicant: wlan0: CTRL-EVENT-DSCP-POLICY clear_all

 

3、解决方案

    目前我们使用的模组在p2p模式打开时,wifi的连接会受到限制,因此我们必须在连接wifi的时候关闭p2p

 

方案1:在框架层连接wifi时附带p2p的disable接口,这样在wifi连接时p2p不会使能也就不会影响wifi的连接

https://gitee.com/cooperation-team-goke/vendor_aix/pulls/197

 

但是后来发现该方案会破坏流程与wifi状态机的一致性,导致流程完全不可控,进而衍生其它的问题,故不可取

 

方案2:开机即自动创建永久Go组(避免后续p2p一直扫描影响wifi连接),由应用层感知wifi连接的动作,在连接wifi时直接从最顶层关闭miracast投屏,连接完成后再打开miracast投屏。

 

但是此时source端无法稳定搜索到tv设备

现象:

  1. tv连接到工作在149信道AP的时候,source端(手机)能稳定搜索到tv

  2. tv连接到工作在非149信道AP的时候,source端(手机)无法搜索到tv

  3. 、不连接wifi的时候只打开wifi开关,source端(手机)概率无法搜索到tv

分析得知:

source能搜索到TV的时候,tv端创建GO组成功;

source不能搜索到TV的时候,tv端创建GO组失败

 

深入分析创建组失败的原因如下:

艾克斯采用的wifi模组不支持跨频段并发,在连接到A信道的wifi的时候不支持同时在信道B作为GO,所以创建组会失败。

我们在前面已经连接了wifi,而其信道刚好就是149(5745MHZ),因此我们只有在此信道创建GO才能成功

 

GO创建详细流程如下

我们在上层使用了5G的band

所以使用信道149-5745Mhz创建Go

int P2pStateMachine::GetAvailableFreqByBand(GroupOwnerBand band) const

 

方案3:因为当前模组不支持跨频段并发,所以还需要确保p2p和sta在同一频率上,所以在开启miracast投屏功能时,miracast框架层创建的永久p2p group还必须以连接的wifi的频率作为基准创建Go,否则以5745Mhz的默认频率创建Go。

https://e.gitee.com/kunyuan-hongke/repos/cooperation-team-goke/vendor_goke_gk6780/pulls/96

 

最终方案:

  1. 、miracast应用开机即打开,投屏开机即可用

  2. 、miracast框架层直接创建一个永久p2p group,直接成为Go

  3. 、wifi在连接上ap时,创建组的时候信道采用当前连接的wifi信道

  4. 、在连接wifi的时候关闭miracast,连接上之后再打开

 

至此,wifi的sta和p2p的共存问题解决

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐