wpa_supplicant 启动过程(android P/9.0)

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
setWifiEnabled()
  WifiController.sendMessage(CMD_WIFI_TOGGLED)

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiController.java
StaDisabledState extends State {
 case CMD_WIFI_TOGGLED
   if (doDeferEnable(msg))  --sendDelayedMessage CMD_DEFERRED_TOGGLE
   transitionTo(mDeviceActiveState)

class DeviceActiveState extends State {
   @Override
   public void enter() {
       mWifiStateMachinePrime.enterClientMode();
       mWifiStateMachine.setHighPerfModeEnabled(false);
   }

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachinePrime.java
public void enterClientMode() {
       changeMode(ModeStateMachine.CMD_START_CLIENT_MODE);
   }

private boolean checkForAndHandleModeChange(Message message) {
 switch(message.what) {
     case ModeStateMachine.CMD_START_CLIENT_MODE:
         Log.d(TAG, "Switching from " + getCurrentMode() + " to ClientMode");
         mModeStateMachine.transitionTo(mClientModeActiveState);
         break;

  ClientModeActiveState
 public void enter() {
  Log.d(TAG, "Entering ClientModeActiveState");

  mListener = new ClientListener();
  mManager = mWifiInjector.makeClientModeManager(mListener);
  mManager.start();
  mActiveModeManagers.add(mManager);

  updateBatteryStatsWifiState(true);

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiInjector.java
ClientModeManager makeClientModeManager(ClientModeManager.Listener listener) {
        return new ClientModeManager(mContext, mWifiStateMachineHandlerThread.getLooper(),
                mWifiNative, listener, mWifiMetrics, mScanRequestProxy, mWifiStateMachine);
    }

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeManager.java
 ClientModeManager(Context context, @NonNull Looper looper, WifiNative wifiNative,
           Listener listener, WifiMetrics wifiMetrics, ScanRequestProxy scanRequestProxy,
           WifiStateMachine wifiStateMachine) {
       mContext = context;
       mWifiNative = wifiNative;
       mListener = listener;
       mWifiMetrics = wifiMetrics;
       mScanRequestProxy = scanRequestProxy;
       mWifiStateMachine = wifiStateMachine;
       mStateMachine = new ClientModeStateMachine(looper);
   }

 ClientModeStateMachine(Looper looper) {
       super(TAG, looper);

       addState(mIdleState);
       addState(mStartedState);

       setInitialState(mIdleState);
       start();
   }

 public void start() {
       mStateMachine.sendMessage(ClientModeStateMachine.CMD_START);
   }

case CMD_START
   mClientInterfaceName = mWifiNative.setupInterfaceForClientMode()

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNative.java
setupInterfaceForClientMode()
  startSupplicant()
    WificondControl.enableSupplicant()

/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WificondControl.java
   public boolean enableSupplicant() 
        return mWificond.enableSupplicant();


/system/connectivity/wificond/server.cpp
Status Server::enableSupplicant(bool* success) {
   *success = supplicant_manager_->StartSupplicant();
   return Status::ok();
 }


/frameworks/opt/net/wifi/libwifi_system/supplicant_manager.cpp
SupplicantManager::StartSupplicant() 
  property_set("ctl.start", kSupplicantServiceName);  const char kSupplicantServiceName[] = "wpa_supplicant"       
  
init.*.rc  
service wpa_supplicant /vendor/bin/hw/wpa_supplicant   

猜你喜欢

转载自blog.csdn.net/kv110/article/details/103647814
今日推荐