wifi框架层流程之--EnableWifi流程
EnableWifi的函数调用流程:

流程伪代码:
所在文件:foundation\communication\wifi\wifi\frameworks\js\napi\src\wifi_napi_device.cpp
NO_SANITIZE("cfi") napi_value EnableWifi(napi_env env, napi_callback_info info) {
ErrCode ret = wifiDevicePtr->EnableWifi();
}
所在文件:foundation\communication\wifi\wifi\frameworks\native\src\wifi_device_impl.cpp
ErrCode WifiDeviceImpl::EnableWifi() {
return client_->EnableWifi();
}
所在文件:foundation\communication\wifi\wifi\frameworks\native\src\wifi_device_proxy.cpp
ErrCode WifiDeviceProxy::EnableWifi() {
int error = Remote()->SendRequest(static_cast<uint32_t>(DevInterfaceCode::WIFI_SVR_CMD_ENABLE_WIFI), data, reply,
option);
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_sta_sa\wifi_device_stub.cpp
int WifiDeviceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) {
HandleFuncMap::iterator iter = handleFuncMap.find(code);
(this->*(iter->second))(code, data, reply);
return 0;
}
void WifiDeviceStub::OnEnableWifi(uint32_t code, MessageParcel &data, MessageParcel &reply) {
ErrCode ret = EnableWifi();
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_sta_sa\wifi_device_service_impl.cpp
ErrCode WifiDeviceServiceImpl::EnableWifi() {
if (m_instId == 0) {
WifiConfigCenter::GetInstance().SetWifiToggledState(WIFI_STATE_ENABLED);
}
return WifiManager::GetInstance().GetWifiTogglerManager()->WifiToggled(1, m_instId);
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_sub_manage\wifi_toggler_manager.cpp
ErrCode WifiTogglerManager::WifiToggled(int isOpen, int id) {
pWifiControllerMachine->SendMessage(CMD_WIFI_TOGGLED, isOpen, id);
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_controller\wifi_controller_state_machine.cpp
bool WifiControllerMachine::DisableState::ExecuteStateMsg(InternalMessagePtr msg) {
pWifiControllerMachine->MakeConcreteManager(role, msg->GetParam2());
pWifiControllerMachine->SwitchState(pWifiControllerMachine->pEnableState);
}
void WifiControllerMachine::MakeConcreteManager(ConcreteManagerRole role, int id) {
ConcreteClientModeManager *clientmode = new (std::nothrow) ConcreteClientModeManager(role, id);
clientmode->RegisterCallback(WifiManager::GetInstance().GetWifiTogglerManager()->GetConcreteCallback());
clientmode->InitConcreteManager();
concreteManagers.push_back(clientmode);
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_controller\concrete_clientmode_manager.cpp
ErrCode ConcreteClientModeManager::InitConcreteManager() {
pConcreteMangerMachine = new (std::nothrow) ConcreteMangerMachine();
pConcreteMangerMachine->InitConcreteMangerMachine();
pConcreteMangerMachine->RegisterCallback(mcb);
pConcreteMangerMachine->SetTargetRole(curRole);
pConcreteMangerMachine->SendMessage(CONCRETE_CMD_START, mid);
return WIFI_OPT_SUCCESS;
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_controller\concrete_manager_state_machine.cpp
bool ConcreteMangerMachine::IdleState::ExecuteStateMsg(InternalMessagePtr msg) {
switch (msg->GetMessageName()) {
case CONCRETE_CMD_START:
HandleStartInIdleState(msg);
break;
}
}
void ConcreteMangerMachine::IdleState::HandleStartInIdleState(InternalMessagePtr msg) {
mid = msg->GetParam1();
if (mTargetRole == static_cast<int>(ConcreteManagerRole::ROLE_CLIENT_STA)) {
ErrCode ret = ErrCode WifiServiceScheduler::AutoStartStaService(int instId, std::string &staIfName)
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_controller\wifi_service_scheduler.cpp
ErrCode WifiServiceScheduler::AutoStartStaService(int instId, std::string &staIfName) {
int ret = WifiStaHalInterface::GetInstance().StartWifi(WifiConfigCenter::GetInstance().GetStaIfaceName());
return WIFI_OPT_SUCCESS;
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_native\wifi_hal_interface\wifi_sta_hal_interface.cpp
WifiErrorNo WifiStaHalInterface::StartWifi(const std::string &ifaceName){
return mHdiWpaClient->StartWifi(ifaceName, instId);
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_native\client\hdi_client\wifi_hdi_wpa_client.cpp
WifiErrorNo WifiHdiWpaClient::StartWifi(const std::string &ifaceName, int instId) {
WifiEventCallback callback;
callback.onConnectChanged = [](int param1, int param2, const std::string ¶m3, int param4) {};
ReqRegisterStaEventCallback(callback, ifaceName.c_str(), instId);
return HdiWpaStaStart(ifaceName.c_str(), instId);
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_native\client\hdi_client\hdi_interface\wifi_hdi_wpa_sta_impl.c
WifiErrorNo HdiWpaStaStart(const char *ifaceName, int instId) {
SetHdiStaIfaceName(ifaceName, instId);
CopyConfigFile("wpa_supplicant.conf");
// 启动wpa
HdiWpaStart();
RegisterEventCallback(ifaceName);
// 添加接口
HdiAddWpaIface(ifaceName, CONFIG_ROOR_DIR "/wpa_supplicant/wpa_supplicant.conf");
return WIFI_HAL_OPT_OK;
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_native\client\hdi_client\hdi_interface\wifi_hdi_wpa_proxy.c
WifiErrorNo HdiWpaStart() {
g_wpaObj = IWpaInterfaceGetInstance(HDI_WPA_SERVICE_NAME, false);
int32_t ret = g_wpaObj->Start(g_wpaObj);
return WIFI_HAL_OPT_OK;
}
所在文件:drivers\peripheral\wlan\wpa\interfaces\hdi_service\service_common\wpa_common_cmd_ext.c
int32_t WpaInterfaceStart(struct IWpaInterface *self) {
InitWifiWpaGlobalInterface();
RemoveLostCtrl();
StartWpaSupplicant(WPA_SUPPLICANT_NAME, GetWpaStartCmd());
return HDF_SUCCESS;
}
所在文件:drivers\peripheral\wlan\wpa\interfaces\hdi_service\service_common\wpa_common_cmd_ext.c
static int32_t StartWpaSupplicant(const char *moduleName, const char *startCmd) {
pthread_create(&g_tid, NULL, WpaThreadMain, (void *)startCmd);
pthread_setname_np(g_tid, "WpaMainThread");
usleep(WPA_SLEEP_TIME);
WifiWpaInterface *pWpaInterface = GetWifiWpaGlobalInterface();
pWpaInterface->wpaCliConnect(pWpaInterface)
return HDF_SUCCESS;
}
所在文件:drivers\peripheral\wlan\wpa\interfaces\hdi_service\service_common\hdi_wpa_hal.c
static int WpaCliConnect(WifiWpaInterface *p) {
HDF_LOGI("Wpa connect start.");
int count = WPA_TRY_CONNECT_TIMES;
InitWpaCtrl(&p->staCtrl, WPA_CTRL_OPEN_IFNAME);
InitWpaCtrl(&p->p2pCtrl, WPA_CTRL_OPEN_IFNAME);
InitWpaCtrl(&p->chbaCtrl, WPA_CTRL_OPEN_IFNAME);
InitWpaCtrl(&p->commonCtrl, WPA_CTRL_OPEN_IFNAME);
p->threadRunFlag = 1;
HDF_LOGI("Wpa connect finish.");
return 0;
}
所在文件:drivers\peripheral\wlan\wpa\interfaces\hdi_service\service_common\hdi_wpa_common.c
int InitWpaCtrl(WpaCtrl *pCtrl, const char *ifname) {
pCtrl->pSend = wpa_ctrl_open(ifname); // wpa_ctrl_open就是wpa_supplicant的接口。
return 0;
}
日志有:Wpa connect finish. 就表面EnableWifi完全成功!
更多推荐
所有评论(0)