背景:
手機互聯功能需要讓車機和手機的P2P作業在5G信道,并且車機為GO,以避免BT/WLAN共存問題,相比2.4G而言,5G頻段的ping延遲和帶寬提升很大,
P2P作業信道和角色(GO/CL)取決于WIFI設備之間的協商結果,那么如何影響其協商結果呢?就需要對p2p的配置引數有所了解了,
P2P協商程序:
P2P GO/Client的協商流程只需要簡單的幾步,如下圖:
P2P連接發起端:指在P2P連接程序中主動發起P2P連接的機子,用A表示;
P2P連接接受端:指在P2P連接程序中接受P2P連接的機子,用B表示;
可以參考https://blog.csdn.net/zjli321/article/details/51944887,我這里截取部分內容幫助理解,
協商引數
協商程序中,GO、Client角色由兩個引數確定:
Intent:作為GO的優先級;
breaker:在Intent相同是,用于判定誰做GO;
Intent的取值范圍為:0~1(#define P2P_MAX_GO_INTENT 15)
該Intent初始化時為0,在每次P2P_CONNECT時,由上層傳下來,android系統下,java層默認為6,該定義在:
/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNative.java
private static final int DEFAULT_GROUP_OWNER_INTENT = 6;
在協商時,誰的Intent值大,誰就作為GO;如果一端指定Intent值為15(P2P_MAX_GO_INTENT)那這端是GO,如果兩端都指定Intent為15,那這次的協商就會失敗,在協商兩端的值都不為15,并且值相等的情況下,就要breaker的值進行判定誰做GO了,
breaker的值只有0或1,該值在初始化時采用隨機生成:
if (os_get_random(&p2p->next_tie_breaker, 1) < 0)
p2p->next_tie_breaker = 0;
p2p->next_tie_breaker &= 0x01;
dev->tie_breaker = p2p->next_tie_breaker;
p2p->next_tie_breaker = !p2p->next_tie_breaker;
breaker值在每次發起P2P_CONNECT時都取反一次,這樣做的目的是在雙方的Intent值相同的情況下,多次協商時,雙方都有機會做GO,并且在發送Request時才填入自己的breaker值,在回應Response時,是把對方的breaker值取反后作為breaker值發送,
在協商流程中,由第二次Request/Response的Intent、breaker值決定誰做GO,這是誰的Intent(非15的情況下)值大誰就做GO,當Intent值相同時,這時由發送Request端的breaker值確定誰做GO,當發送Request端的breaker的值為1時,發送Request端作為GO,反之則作為Client,接收Request端的就剛好相反,
? 引數在協商階段的作用
這里結合圖1進行說明:
1、 A發送Request給B,該Request包含A的Intent、breaker值;
2、 B收到Request后,由于B還沒準備好,回應一個Response給A,該Response中包含B的Intent值,同時把A的breaker值取反作為breaker填入Response中,在wifi打開的首次接受P2P連接時,由于B上層還沒有呼叫過P2P_CONNECT,這時的Intent值為0,但這次的Intent值不影響最后的GO、Client判定;
3、 上面個這個回合的Request/Response不做GO、Client判定;
4、 B發送Request給A,該Request包含A的Intent、breaker值;
5、 A收到Request后,回應一個Response給B,該Response中包含A的Intent值,同時把B的breaker值取反作為breaker填入Response中;
6、 在這回合的Request/Response中,就決定了誰做GO,誰的Intent(非15的情況下)值大誰就做GO,在Intent相同的情況下,若B的breaker值為1,則B做GO,若B的breaker值為0,則B做Client,A的角色則剛好與B相反;
可以看到,最終的GO、Client角色是在第二回合的Request/Response中決定的,
解決方案:
wpa_supplicant服務器啟動時會從wpa的組態檔讀取配置,其中有2個配置需要關注:
+p2p_go_intent=15 // 一般手機的默認值為6,車機端配置為15可以保證車機為GO
+p2p_no_go_freq=2412-2484 // 避免作業在2.4G.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254869.html
標籤:其他
