<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                結合第5章對WifiService相關內容的介紹,假設當前STA沒有連接上目標AP,則WifiStateMachine處于DisconnectedState。不過,DisconnectedState并不處理START_WPS消息,但其父狀態ConnectedModeState會處理該消息,故直接來看ConnectedModeState的處理流程。 **1、START_WPS處理流程分析** 代碼如下。 **WifiStateMachine.java::ConnectedModeState:processMessage** ~~~ public boolean processMessage(Message message) { StateChangeResult stateChangeResult; switch(message.what) { ...... case WifiManager.START_WPS: WpsInfo wpsInfo = (WpsInfo) message.obj; WpsResult result; switch (wpsInfo.setup) { case WpsInfo.PBC: result = mWifiConfigStore.startWpsPbc(wpsInfo); break; ......// WpsInfo.Keypad的處理 case WpsInfo.DISPLAY:// 對PIN來說,setup的值為DISPLAY // 調用WifiConfigStore的startWpsWithPinFromDevice函數 result = mWifiConfigStore.startWpsWithPinFromDevice(wpsInfo); break; default: result = new WpsResult(Status.FAILURE); break; } if (result.status == Status.SUCCESS) { // 回復WifiManager,界面框中將顯示動態PIN碼 replyToMessage(message, WifiManager.START_WPS_SUCCEEDED, result); transitionTo(mWpsRunningState);// 轉入WpsRunningState } ......// 錯誤處理 break; ...... } return HANDLED; } ~~~ 來看startWpsWithPinFromDevice函數,代碼如下所示。 **WifiConfigStore.java::startWpsWithPinFromDevice** ~~~ WpsResult startWpsWithPinFromDevice(WpsInfo config) { WpsResult result = new WpsResult(); /* config.BSSID代表目標AP的MAC地址,此處為空。下面的startWpsPinDisplay函數將發送 “WPS_PIN any”命令給WPAS。WPAS將計算一個動態PIN碼返回給用戶。這個PIN碼也就是 圖6-2右圖所示的PIN碼。 */ result.pin = mWifiNative.startWpsPinDisplay(config.BSSID); if (!TextUtils.isEmpty(result.pin)) { // WPAS必須返回一個PIN碼 markAllNetworksDisabled(); // 停止使用其他網絡 result.status = WpsResult.Status.SUCCESS; } else{ result.status = WpsResult.Status.FAILURE; return result; } } ~~~ 當WPAS成功返回PIN碼后,WifiStateMachine將從DisconnectedState狀態進入WpsRunningState。該狀態的enter函數沒有做什么有意義的工作。 **2、WPS_SUCCESS_EVENT處理流程分析** 當WPAS完成WSC流程后,它將發送WPS-SUCCESS給WifiMonitor,而WifiMonitor將發送WPS_SUCCESS_EVENT給WifiStateMachine。該消息將由WpsRunningState狀態處理,相關代碼如下所示。 **WifiStateMachine.java::WpsRunningState:processMessage** ~~~ public boolean processMessage(Message message) { switch (message.what) { case WifiMonitor.WPS_SUCCESS_EVENT: // 收到來自WPAS的WPS成功消息 // 回復WifiManager。如此,WpsDialog中WpsListener對象的onCompleted函數將被調用 replyToMessage(mSourceMessage, WifiManager.WPS_COMPLETED); mSourceMessage.recycle(); mSourceMessage = null; transitionTo(mDisconnectedState);// 轉入DisconnectedState break; ...... } } ~~~ 如果WSC流程一切順利,WifiStateMachine將從WpsRunningState重新進入DisconnectedState。WifiStateMachine以后 的流程就和5.3.2節所述的流程完全一樣了。 >[info] 提示 WifiStateMachine內部也會發起掃描請求,這和第5章分析的流程略有不同。第5章中,掃描請求由WifiSettings發起。 由上文介紹可知,Android App層以及Framework WifiService相關模塊對WSC的處理非常簡單。它們將通過發送"WPS_PIN any"命令以觸發WPAS開始WSC的處理流程。下面分析WPAS中WSC的處理。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看