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