您的位置:首页 > 移动开发 > Android开发

[RK3288][Android6.0] WiFi在Setting中的开启过程小结

2017-05-02 17:05 330 查看
Platform: Rockchip

OS: Android 6.0

Kernel: 3.10.92

当Setting选项中打开Wifi时, 调用流程如下,入口主要是setWifiEnabled()函数.

onSwitchChanged ->    WifiEnabler.java  settings apk中.

    mWifiManager.setWifiEnabled ->

        setWifiEnabled    ->     WifiManager.java

            mService.setWifiEnabled ->

            setWifiEnabled ->    WifiServiceImpl.java

                mSettingsStore.handleWifiToggled    WifiSettingsStore.java    //检查airplaymode下是否能打开wifi

                mWifiController.sendMessage(CMD_WIFI_TOGGLED);

                    processMessage ->    WifiController.java //ApStaDisabledState类

                        transitionTo(mDeviceActiveState); ->

                            enter    //StaEnabledState类(ApStaDisabledState的父类)

                                mWifiStateMachine.setSupplicantRunning ->    StaEnabledState

                                    setSupplicantRunning    WifiStateMachine.java

                                        sendMessage(CMD_START_SUPPLICANT); ->

                            enter ->    DeviceActiveState类

                                mWifiStateMachine.setOperationalMode(WifiStateMachine.CONNECT_MODE) ->

                                     sendMessage(CMD_SET_OPERATIONAL_MODE, mode, 0)

                                mWifiStateMachine.setDriverStart(true) ->

                                     sendMessage(CMD_START_DRIVER)

                            processMessage ->    InitialState类

                                mWifiNative.loadDriver    //wifi驱动在开机已经加载完成,这里不做处理。

                                mNwService.wifiFirmwareReload     //wifi固件在开机已经加载完成,这里不做处理。

                                mNwService.setInterfaceDown(mInterfaceName);    //关闭网卡,设置interfaceDriverStartedState

                                WifiNative.startHal

                                    startHalNative

                                    new MonitorThread //接收来自WPS的消息

                                mWifiNative.startSupplicant    //开启supplicant

                                mWifiMonitor.startMonitoring  -> //创建两个socket和wps交互

                                    mWifiNative.connectToSupplicant

                                    m.mStateMachine.sendMessage(SUP_CONNECTION_EVENT);

                                    MonitorThread(mWifiNative, this).start ->

                                        run    ->    WifiMonitor.java

                                            mWifiNative.waitForEvent    //收取wps发上来的event

                                            mWifiMonitorSingleton.dispatchEvent

                                transitionTo(mSupplicantStartingState) ->

                                    processMessage -> SupplicantStartingState类,上面发送了SUP_CONNECTION_EVENT

                                        mWifiInfo.setMacAddress

                                        setFrequencyBand

                                        mWifiNative.enableSaveConfig ->    

                                            doBooleanCommand    //发送命令给wps

                                        mWifiConfigStore.loadAndEnableAllNetworks ->

                                            loadAndEnableAllNetworks -> WifiConfigStore.java

                                                mWifiNative.listNetworks

                                                readNetworkVariables

                                            enableAllNetworks

                                         transitionTo(mDriverStartedState) ->

                                            enter ->    SupplicantStartedState类(DriverStartedState的父类)

                                                mWifiNative.enableAutoConnect

                                            enter ->    DriverStartedState类

                                                transitionTo(mDisconnectedState) ->

                                            enter -> DisconnectedState类

                                                startScan

                                                processMessage ->  //这时前面的下一条消息CMD_SET_OPERATIONAL_MODE会被处理

                                            processMessage ->     处理最后之后的一条消息CMD_START_DRIVER
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: