WLAN直连总体结构和相关流程概览(二)
在上一篇?WLAN直連總體結(jié)構(gòu)和相關(guān)流程概覽(一) 中介紹了WLAN直連UI層及StateMachine。這里繼續(xù)介紹framework層及Supplicant層。
在framework層,最主要有三個類WifiP2pManager,WifiP2pService,WifiMonitor,而最核心的就是WifiP2pService了。
1. WifiP2pManager:個人理解,可以把它看做是Framework層向UI層提供的一個接口,對Framework層的所有操作通過這個接口來進(jìn)行。一般的使用順序?yàn)?#xff1a;
?> 調(diào)用initialize() 進(jìn)行初始化
?> 調(diào)用discoverPeers() 搜索P2P設(shè)備
?> 調(diào)用connect() 連接P2P設(shè)備
?>更多其他操作
2. WifiP2pService: 在這個類里面,最主要的就是內(nèi)部類P2pStateMachine了。在打開WiFi時,會啟動supplicant,而在這時,WifiStateMachine會發(fā)消息給P2pStateMachine啟動P2P(實(shí)際上,在啟動系統(tǒng)的時候,就已經(jīng)啟動WifiP2pService了,這里主要是進(jìn)行了狀態(tài)機(jī)里的狀態(tài)轉(zhuǎn)換和啟動了P2P對底層事件的監(jiān)聽)。
> Enable P2P
在WifiStateMachine進(jìn)入P2pStartedState后,會發(fā)送消息以啟動P2P。
在P2P沒有啟動之前,處于P2pDisabledState狀態(tài),根據(jù)前一章的介紹,會在這個狀態(tài)里處理這個消息,并且啟動WifiMonitor,狀態(tài)轉(zhuǎn)換到P2pEnablingState。
因?yàn)樵陂_啟WiFi的時候,就已經(jīng)和supplicant建立連接了,所以在WifiMonitor,直接發(fā)送SUP_CONNECTION_EVENT 信息到P2pStateMachine。
在P2pEnablingState收到這個消息后,直接轉(zhuǎn)到InactiveState
而InactiveState是P2pEnabledState的子狀態(tài),所以首先會調(diào)用P2pEnabledState.enter()
在這里,會進(jìn)行一些初始化的操作,如set device_name, device_type, static_ip 等。
> P2P Scan
首先來看一下它的調(diào)用順序圖
下面分步詳細(xì)介紹
通過調(diào)用discoverPeers() 方法,給P2pStateMachine發(fā)一個DISCOVER_PEERS 消息
通過JNI調(diào)用,給Supplicant層發(fā)送“P2P_FIND”命令,將會搜索周圍P2P設(shè)備。在Supplicant啟動時,會建立兩個socket和底層進(jìn)行通信。一個用于發(fā)送命令(ctrl_conn),一個用于接收底層返回的事件(ctrl_recv)。在搜到設(shè)備后,在WifiMonitor里通過輪詢的方式得到supplicant返回的字符串,字符串格式為 P2P-DEVICE-FOUND 02:12:34:2b:7f:fe p2p_dev_addr=02:12:34:2b:7f:fe pri_dev_type=10-0050F204-5 name= 'Android_82f5' config_methods=0x188 dev_capab=0x25 group_capab=0x0。這個字符串會被轉(zhuǎn)化為一個WifiP2pDevice對象,然后發(fā)送給P2pStateMachine。
> P2P Connect
搜到設(shè)備之后,就可以進(jìn)行連接了。發(fā)送CONNECT 請求,在InactiveState中處理這個消息。
注:下面分析的是主動發(fā)送連接請求的設(shè)備
GC(Group Client)端,狀態(tài)機(jī)里各狀態(tài)流程如下
同樣是GC端,下面附上接收到連接請求的設(shè)備的順序圖
還有很重要的一個功能就是多連接了。實(shí)際上多連接和單連接并沒有很大的區(qū)別,在多連接中,發(fā)出請求的設(shè)備首先會建立一個Group,此設(shè)備就是GO(Group Owner)。Group成功建立后,就會按順序邀請其他設(shè)備加入這個Group。
下面是多連接的流程圖
如果選擇了連接多個設(shè)備,即便一些設(shè)備拒絕了連接邀請或者連接失敗(超時),它還是會邀請其他設(shè)備(通過索引mSelectedP2pConfigIndex來獲取需要連接的設(shè)備的信息)。
Supplicant層
其官方網(wǎng)站有很詳細(xì)的文檔 http://hostap.epitest.fi/wpa_supplicant/devel/index.html
總結(jié)
以上是生活随笔為你收集整理的WLAN直连总体结构和相关流程概览(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 易语言小项目实例
- 下一篇: 重建 nextcloud 索引,通过非