1. 程式人生 > >[RK3288][Android6.0] WiFi之無線網路配置的關閉過程

[RK3288][Android6.0] WiFi之無線網路配置的關閉過程

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

是wifi enabled的逆過程,不過呼叫的也是setWifiEnable()介面.

onSwitchChanged -> WifiEnabler.java
  mWifiManager.setWifiEnable //引數是false,開啟wifi的時候是true
    mService.setWifiEnabled ->
      setWifiEnabled ->
        mWifiController.sendMessage -> //CMD_WIFI_TOGGLED
          processMessage ->  WifiController.java //處於DeviceActiveState,呼叫父類處理
            transitionTo(mApStaDisabledState) ->
              enter -> //ApStaDisabledState
                mWifiStateMachine.setSupplicantRunning -> //通知WAPS stop running
                    sendMessage(CMD_STOP_SUPPLICANT) -> //發訊息給wifi狀態機處理
                      processMsg -> //目前處於ConnectedState,一級級呼叫父類SupplicantStartedState
                        transitionTo(mWaitForP2pDisableState) ->
                          exit -> //ConnectedState
                             setScanAlarm(false) //關閉週期掃描
                          exit -> //L2ConnectedState
                           handleNetworkDisconnect ->
                            stopRssiMonitoringOffload -> //通知HAL stop rssi
                              mWifiNative.stopRssiMonitoring ->
                                stopRssiMonitoringNative ->
                                  android_net_wifi_stop_rssi_monitoring_native ->
                                    hal_fn.wifi_stop_rssi_monitoring
                             clearCurrentConfigBSSID -> //清理bssid
                               clearConfigBSSID
                             stopDhcp -> //關dchp,之前有分析過startdhcp的
                               handlePostDhcpSetup
                               mDhcpStateMachine.sendMessage  //DhcpStateMachine.CMD_STOP_DHCP
                                 processMessage ->  //DhcpBoundState
                                   processMessage -> //DhcpHaveAddressState的父類DhcpState
                                     transitionTo(mStoppedState) ->
                                       exit -> //DhcpHaveAddressState
                                         setIpAddress ->
                                           mNMService.setInterfaceConfig //通知netd設定ip
                             mNwService.clearInterfaceAddresses
                             mNwService.disableIpv6
                             setNetworkDetailedState    //這部分和ConnectionService有關,打算後面再細講
                             mNetworkAgent.sendNetworkInfo
                             sendNetworkStateChangeBroadcast //廣播WifiManager.NETWORK_STATE_CHANGED_ACTION
                           exit -> DriverStartedState
                             mContext.sendStickyBroadcastAsUser //intent: WifiManager.WIFI_SCAN_AVAILABLE
                           processMessage -> WaitForP2pDisableState的上上級父類DefaultState, CMD_UPDATE_LINKPROPERTIES
                             updateLinkProperties //更新路由表,DNS
                           ......//中間省略了幾部訊息通知,然後收到WPAS的通知: CMD_STOP_SUPPLICANT
                           processMessage -> //WaitForP2pDisableState的父類SupplicantStartedState
                             transitionTo(mSupplicantStoppingState) ->
                               enter -> //SupplicantStartedState
                                 handleNetworkDisconnect //又呼叫了一次
                                 mDhcpStateMachine.doQuit //dhcp退出
                           //WPAS斷開後WifiMonitor傳送SUP_DISCONNECTION_EVENT事件給wifi狀態機
                           stopMonitoring ->
                             m.mStateMachine.sendMessage(SUP_DISCONNECTION_EVENT) ->
                               processMessage -> //SupplicantStoppingState
                                 handleSupplicantConnectionLoss ->
                                   mWifiNative.closeSupplicantConnection
                                   sendSupplicantConnectionChangedBroadcast //傳送廣播:WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION
                                 transitionTo(mInitialState) ->
                                   enter ->
                                     WifiNative.stopHal
                                     mWifiNative.unloadDriver