UI层控制命令传送给hostapd的流程:
WifiManager->WifiService->NetworkManagementService->Netd->HostApd
WifiApWpsActivity::onPreferenceTreeClick()
|--->openPBCDialog()
|--->OnClickListener()
|--->hostApdHandler.sendEmptyMessage(WPS_AP_EVENT_START_PBC);
|--->HostApdHandler::handleMessage()
|--->WifiManager::hostApdSendWifiCommand("WPS_PBC") ;
|--->WifiService::sendWifiApCommand(command);
|--->NetworkManagementService::sendCommandAccessPoint()
|--->(1)设置权限:CHANGE_NETWORK_STATE和CHANGE_WIFI_STATE
|--->(2)mConnector.execute("softap", "cmd", command);
|--->先makeCommand再write
CHANGE_NETWORK_STATE表示允许程序改变网络连接状态 CHANGE_WIFI_STATE表示允许程序改变Wi-Fi连接状态
mConnector:类型为NativeDaemonConnector,是用于和netd通信的对象
接下来就进入Netd了。
CommandListener::SoftapCmd::runCommand()
|--->pthread_create(…… CommandListener::SoftapCmd::Monitor_thread)
|--->SoftapController::wifi_connect_to_hostapd()
|--->WPAS::wpa_ctrl_open()
|--->(1)socket()
|--->(2)bind()
|--->(3)connect()
|--->(4)fcntl()