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 &param3, 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完全成功!

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐