在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            Android WIFI 詳解

            作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

            注意:這里的每個(gè)事件的捕獲(由wifimonitor完成),最終都會(huì)調(diào)用相應(yīng)的mWifiStateTracker的消息通知函數(shù)上報(bào)消息;輪詢和事件處理都是在Monitor線程類中實(shí)現(xiàn)的。

            7)WifiNative

            frameworks/base/wifi/java/android/net/wifi/WifiNative.java

            里面定義了一個(gè)類WifiNative:其中聲明了許多本地接口,可由native的標(biāo)志看出,這是Java代碼和本地庫(kù)之間的聯(lián)系接口;

            8) android_net_wifi_Wifi.java

            frameworks/base/core/jni/

            里面定義了許多的JNI的本地代碼實(shí)現(xiàn),每個(gè)實(shí)現(xiàn)中都會(huì)調(diào)用wpa_supplicant適配層的接口,通過(guò)包含適配層的頭文件wifi.h獲取適配層定 義的接口;后面是一個(gè)JNINativeMethod數(shù)組,定義了每個(gè)本地接口和本地實(shí)現(xiàn)的對(duì)應(yīng)關(guān)系;最后有一個(gè)注冊(cè)函數(shù) regester_XXX_XX(),用以把上面的方法類數(shù)組注冊(cè)到系統(tǒng)中。

            該類實(shí)現(xiàn)了本地接口的相關(guān)功能,并通過(guò)調(diào)用wpa的適配層的相關(guān)函數(shù)和wpa_supplicant通信,所以JNI是連接Java框架層和wpa適配層的橋梁.

            9)wpa_supplicant適配層,wifi.c:目錄libhardware/wifi/

            里面定義很多字符串變量和適配層的接口實(shí)現(xiàn),是對(duì)wpa_supplicant程序通信的接口封裝,用來(lái)完成上層和wpa_supplicant的通信, 頭文件在libhardware/include/hardware下,這里的函數(shù)用來(lái)向JNI的本地實(shí)現(xiàn)提供調(diào)用接口。

            這里的函數(shù),我把它們分為三類函數(shù):

            一 類是命令相關(guān)的(控制)函數(shù),就是在JNI層android_XXX_Command()函數(shù)所調(diào)用的::Wifi_Command()函數(shù),調(diào)用流 程:android_XXX_command()=>docommand()=>wifi_command()=> wifi_send_command()=>wpa_ctrl_require()。

            二類是監(jiān)聽(tīng)函數(shù),即Wifi_wait_for_event()函數(shù),調(diào)用流程:android_net_wifi_Waitforevent()=>wifi_wait_for_event()=>wpa_ctrl_recv()。

            三類是剩下的函數(shù)。

            10)wpa_supplicant與上層的接口,wpa_ctrl.c:external/wpa_supplicant

            定義了三類套接字,并分別實(shí)現(xiàn)了和wpa_supplicant的通信,因此wpa_supplicant適配層和wpa_supplicant層是通過(guò)socket通訊的。

            要 是從wifi.c中真的很難看出它和wpa_supplicant有什么關(guān)系,和它聯(lián)系密切的是wpa_ctrl.h文件,這里面定義了一個(gè)類 wpa_ctrl,這個(gè)類中聲明了兩個(gè)Socket套接口,一個(gè)是本地一個(gè)是要連接的套接口,wpa_ctrl與wpa_supplicant的通信就需 要socket來(lái)幫忙了,而wpa_supplicant就是通過(guò)調(diào)用wpa_ctrl.h中定義的函數(shù)和wpa_supplicant進(jìn)行通訊 的,wpa_ctrl類(其實(shí)是其中的兩個(gè)socket)就是他們之間的橋梁。

            11)wpa_supplicant和driver_wext驅(qū)動(dòng)接口的聯(lián)系:

            driver.h:該文件定義了系列結(jié)構(gòu),首先是一個(gè)wpa_scan_result結(jié)構(gòu),這是一個(gè)掃描結(jié)果的通用格式,里面包含了掃描的所有信息(如 BSSID,SSID,信號(hào)質(zhì)量,噪音水平,支持的最大波特率等等信息),每個(gè)驅(qū)動(dòng)接口實(shí)現(xiàn)負(fù)責(zé)將從驅(qū)動(dòng)中上傳的掃描信息的格式轉(zhuǎn)換到該通用的掃描信息格 式;然后是一些宏定義和枚舉定義,最后也是最重要的是wpa_driver_ops結(jié)構(gòu),該結(jié)構(gòu)是wpa driver的操作函數(shù)集合,里面有驅(qū)動(dòng)接口的名稱和很多的函數(shù)指針。

            drviers.c:該文件很簡(jiǎn)單,首先是一些外部變量的引用聲明,都是不同驅(qū)動(dòng)操作接口的集合wpa_driver_XXX_ops變量;然后就是定義一個(gè)驅(qū)動(dòng)操作接口集合的數(shù)組,根據(jù)宏定義添加對(duì)應(yīng)的驅(qū)動(dòng)操作接口集合的變量。

            drvier_XXX.h:這是不同驅(qū)動(dòng)接口頭文件,主要聲明了操作接口

            drvier_XXX.c:實(shí)現(xiàn)操作接口,定義一個(gè)操作集合變量,并用上面定義的函數(shù)初始化其中的函數(shù)指針

            注意:下面要搞清楚wpa_supplicant守護(hù)進(jìn)程是如何操作,最后調(diào)用驅(qū)動(dòng)接口集合中的函數(shù)的;要知道wpa_supplicant是為不同驅(qū)動(dòng) 和操作系統(tǒng)具有更好移植性而被設(shè)計(jì)的,以便在wpa_supplicant層不用實(shí)現(xiàn)驅(qū)動(dòng)的具體接口就可以添加新的驅(qū)動(dòng)程序;在 wpa_supplicant結(jié)構(gòu)中有一個(gè)wpa_drv_ops類型的drvier成員,在wpa_supplicant進(jìn)程中,經(jīng)常通過(guò) Wpa_supplicant_XXX函數(shù)傳遞wpa_supplicant實(shí)例指針wpa_s參數(shù)給wpa_drv_XXX函數(shù)來(lái)調(diào)用它,在 wpa_drv_XX中會(huì)通過(guò)wpa_s->driver->XXX()的流程來(lái)調(diào)用通用驅(qū)動(dòng)接口,簡(jiǎn)單才是生活的真相,可android始 終讓我感到真相還是遙不可及。

            12)WifiWatchdogService:

            首 先聲明了兩個(gè)主要變量mWifiStateTracker,mWifiManager,需要這兩個(gè)類對(duì)象來(lái)完成具體的控制工作,在 WifiWatchdogService的構(gòu)造函數(shù)中,創(chuàng)建了這兩個(gè)類,并通過(guò)regesterForWifiBroadcasts()注冊(cè)了 BroadcastReceiver,BroadcastReceiver是用來(lái)獲取網(wǎng)絡(luò)變化的,然后啟動(dòng)了一個(gè)WatchdogTread線程,用來(lái)處 理從WifiStateTracker接收到的消息。

            frameworks/base/services/java/com/android/server/WifiWatchdogService.java

            WifiWatchdogService(Context context,WifiStateTracker wifiStateTracker) {

            mContext = context;

            mContentResolver = context.getContentResolver();

            mWifiStateTracker =wifiStateTracker;

            mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

            createThread();

            // The content observer to listen needs a handler, which createThreadcreates

            registerForSettingsChanges();

            if (isWatchdogEnabled()) {

            registerForWifiBroadcasts();

            }

            if (V) {

            myLogV(WifiWatchdogService: Created);

            }

            }

            WifiWatchdogHandler繼承了handler類,成為一個(gè)消息處理類,定義handlemessage()函數(shù),處理消息隊(duì)列上的消息。

            二,wpa_supplicant再解析

            1)wpa_ctrl.h:

            該文件中并沒(méi)有定義structwpa_ctrl結(jié)構(gòu),因?yàn)樵谄渌撐募?c文件中不能直接使用該結(jié)構(gòu)的成員,這里主要聲明了幾個(gè)用于使用 socket通信的函數(shù)接口,包 括:wpa_ctrl_open,wpa_ctrl_close,wpa_ctrl_attach,wpa_ctrl_detach,wpa_ctrl_cleanup,wpa_ctrl_recv,wpa_ctrl_request, wpa_ctrl_pending, wpa_ctrl_get_fd 等函數(shù)。



            關(guān)鍵詞:

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉