WifiDisplay邏輯分析

一、概述

底層使用Wifi Direct技術。

二、Source與Sink邏輯

1.Source端

打開WifiDisplay方法;即所有動作都是通過WifiDisplayController完成:

Settings.Global.putInt(getContentResolver(),Settings.Global.WIFI_DISPLAY_ON, mWifiDisplayOnSetting?1:0);

會觸發WifiDisplayController.java中updateWfdEnableState調用如下:

  wfdInfo.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE)->WifiP2pManager.setMiracastMode(WifiP2pManager.MIRACAST_SOURCE)

  updateScanState->WifiP2pManager.discoveryPeers //包括信道協商

  WifiP2pManager.requestPeers

  獲取到掃描結果以後;如果之前連接過,則直接連接。

  

p2p連接成功以後;WiFiDisplayController會調用ExtendRemoteDisplayHelper去binder廠家的WfdService,進而到SessionManagerService直到WfdSession。

還有一種情況是,第一次用戶手動點擊連接:這個是應用直接調用DisplayManager的connectWifiDisplay接口,該接口最終也是通過上處WifiDisplayController到ExtendRemoteDisplayHelper進而調用到WfdService核心服務。WfdService會通過Listen機制將結果給到ExtendRemoteDisplayHelper。

2.Sink端

sink端打開方法;直接調用如下接口:  

WifiP2pManger.setMiracastMode(WifiP2pManager.MIRACAST_SINK) //設置設備未sink端設備

WifiP2pManager.discoveryPeers //包括信道協商

WifiP2pManager.requestPeers

WifiP2pManager.connect等動作 //包括Go協商以及wps認證

 

p2p連接成功以後;會直接去binder廠家的WfdService,進而到SessionManagerService直到WfdSession。

WfdService會通過Listen機制將結果給到應用。

發佈了322 篇原創文章 · 獲贊 47 · 訪問量 122萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章