diff --git a/wifi/frameworks/native/src/wifi_device_impl.cpp b/wifi/frameworks/native/src/wifi_device_impl.cpp index 7d3a53ae97cb6f1ce7a97d005051ab5d1fc027a2..fb219db0860e414d7fd39ad0fb5b2e6166e96b49 100644 --- a/wifi/frameworks/native/src/wifi_device_impl.cpp +++ b/wifi/frameworks/native/src/wifi_device_impl.cpp @@ -45,6 +45,8 @@ WifiDeviceImpl::~WifiDeviceImpl() { #ifdef OHOS_ARCH_LITE WifiDeviceProxy::ReleaseInstance(); +#else + client_ = nullptr; #endif } @@ -75,6 +77,11 @@ bool WifiDeviceImpl::GetWifiDeviceProxy() #ifdef OHOS_ARCH_LITE return (client_ != nullptr); #else + if (client_ != nullptr) { + WIFI_LOGD("client_ has been inited!"); + return true; + } + WifiSaLoadManager::GetInstance().LoadWifiSa(systemAbilityId_); if (IsRemoteDied() == false) { return true; diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ista_service.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ista_service.h index 4874f5498ac90378b34b9bbeea48c9de87897858..7db4ad7a300d0bed3b1a24dae0032b08aa1b2a66 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ista_service.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ista_service.h @@ -64,6 +64,14 @@ public: * @Return success: WIFI_OPT_SUCCESS fail: WIFI_OPT_FAILED */ virtual ErrCode ConnectToNetwork(int networkId) = 0; + /** + * @Description check wifi is connected or NOT. + * + * @param isConnected - true for connected, false for NOT.(out) + * @Output: Return operating results to Interface Service. + * @Return success: WIFI_OPT_SUCCESS fail: WIFI_OPT_FAILED + */ + virtual ErrCode IsConnected(bool &isConnected) = 0; /** * @Description Disconnect to the network * diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.cpp index 12ddfcba1e861c62857510468ae7cb155ef2620d..838e339e8c571138106b2db9da3c7c66326dc1e2 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.cpp @@ -107,6 +107,18 @@ ErrCode StaInterface::ConnectToDevice(const WifiDeviceConfig &config) return WIFI_OPT_SUCCESS; } +ErrCode StaInterface::IsConnected(bool &isConnected) +{ + LOGD("Enter StaInterface::isConnected.\n"); + std::lock_guard lock(mutex); + CHECK_NULL_AND_RETURN(pStaService, WIFI_OPT_FAILED); + if (pStaService->IsConnected(isConnected) != WIFI_OPT_SUCCESS) { + LOGD("IsConnected failed.\n"); + return WIFI_OPT_FAILED; + } + return WIFI_OPT_SUCCESS; +} + ErrCode StaInterface::ReConnect() { LOGD("Enter StaInterface::ReConnect.\n"); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.h index 52d0b946dc1dfcd1688e38300d3473b8345f6b70..57204f2b14df3217a7d67e8d855fb40e58cdd6a7 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.h @@ -76,6 +76,12 @@ public: * @Return success: WIFI_OPT_SUCCESS fail: WIFI_OPT_FAILED */ virtual ErrCode Disconnect() override; + /** + * @Description Is wifi connected + * + * @Return success: WIFI_OPT_SUCCESS fail: WIFI_OPT_FAILED + */ + virtual ErrCode IsConnected(bool &isConnected) override; /** * @Description ReConnect network * diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.cpp index a7a05e4681614c664454e0fe064f5f962fa0ff89..e64a6ea93419891c5f677036f949cf0f45a1ffc7 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.cpp @@ -418,6 +418,14 @@ ErrCode StaService::ConnectToNetwork(int networkId) const return WIFI_OPT_SUCCESS; } +ErrCode StaService::IsConnected(bool &isConnected) const +{ + WIFI_LOGI("Enter IsConnected.\n"); + CHECK_NULL_AND_RETURN(pStaStateMachine, WIFI_OPT_FAILED); + isConnected = pStaStateMachine->GetLinkedConnState() == ConnState::CONNECTED; + return WIFI_OPT_SUCCESS; +} + ErrCode StaService::ReAssociate() const { WIFI_LOGI("Enter ReAssociate.\n"); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.h index 3b9761a6c7b885579ec1aaeb3f9073e07f4cef9b..bbc239bef5b0e148ab233b7ec69702666f686bcc 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.h @@ -86,6 +86,14 @@ public: * @Return success: WIFI_OPT_SUCCESS fail: WIFI_OPT_FAILED */ virtual ErrCode Disconnect() const; + /** + * @Description check wifi is connected or NOT. + * + * @param isConnected - true for connected, false for NOT.(out) + * @Output: Return operating results to Interface Service. + * @Return success: WIFI_OPT_SUCCESS fail: WIFI_OPT_FAILED + */ + virtual ErrCode IsConnected(bool &isConnected) const; /** * @Description ReAssociate network * diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp index fdf739a1ffdb37dd2842e098315a069d1ddedd6d..bfe88cf1d1ef2f2a50f6578b63ec2a9ef2a76d43 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp @@ -3009,6 +3009,11 @@ int StaStateMachine::GetLinkedInfo(WifiLinkedInfo& linkedInfo) return WifiSettings::GetInstance().GetLinkedInfo(linkedInfo, m_instId); } +ConnState StaStateMachine::GetLinkedConnState() +{ + return linkedInfo.connState; +} + ErrCode StaStateMachine::DisableNetwork(int networkId) { if (WifiStaHalInterface::GetInstance().DisableNetwork(networkId) != WIFI_IDL_OPT_OK) { diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.h index 9c16e11d54a903950bc4e968e8dd589f4e18e258..f2e928d9156dcd160e09198ffb190bd6684a1859 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.h @@ -426,6 +426,13 @@ public: */ int GetLinkedInfo(WifiLinkedInfo& linkedInfo); + /** + * @Description : Get connState for LikedInfo. + * + * @return ConnState - ConnState of LikedInfo. + */ + ConnState GetLinkedConnState(); + /** * @Description Reupdate net link info */ @@ -831,14 +838,14 @@ private: * @param networkId - networkId */ void OnWifiWpa3SelfCure(int failreason, int networkId); - + /** * @Description : Deal screen state change event. * * @param msg - Message body received by the state machine[in] */ void DealScreenStateChangedEvent(InternalMessage *msg); - + #ifndef OHOS_ARCH_LITE /** * @Description Subscribe system ability changed. diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.cpp index adbd3c1dc8d134881b65856b5cce4cdaa2710f68..7e5feae921c0d0f413f663fe6624b30a229349f2 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.cpp @@ -821,15 +821,22 @@ ErrCode WifiDeviceServiceImpl::ConnectToDevice(const WifiDeviceConfig &config) ErrCode WifiDeviceServiceImpl::IsConnected(bool &isConnected) { - WifiLinkedInfo linkedInfo; - if (WifiPermissionUtils::VerifyGetWifiInfoPermission() == PERMISSION_DENIED) { WIFI_LOGE("IsConnected:VerifyGetWifiInfoPermission() PERMISSION_DENIED!"); return WIFI_OPT_PERMISSION_DENIED; } - - WifiConfigCenter::GetInstance().GetLinkedInfo(linkedInfo, m_instId); - isConnected = (linkedInfo.connState == ConnState::CONNECTED); + isConnected = false; + if (!IsStaServiceRunning()) { + return WIFI_OPT_SUCCESS; + } + IStaService *pService = WifiServiceManager::GetInstance().GetStaServiceInst(m_instId); + if (pService == nullptr) { + WIFI_LOGE("IsConnected: pService is nullptr!"); + return WIFI_OPT_SUCCESS; + } + if (pService->IsConnected(isConnected) != WIFI_OPT_SUCCESS) { + WIFI_LOGE("IsConnected: IsConnected return fail!"); + } return WIFI_OPT_SUCCESS; } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp index b34b54e984abb635d13ce0f99c35e4c0153984af..35683b6eb08fe645d5627175fa8eb20fec523677 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp @@ -75,6 +75,7 @@ WifiSettings::WifiSettings() IpV6Info ipv6Info; mWifiIpV6Info[0] = ipv6Info; WifiLinkedInfo wifiLinkedInfo; + wifiLinkedInfo.channelWidth = WifiChannelWidth::WIDTH_INVALID; mWifiLinkedInfo[0] = wifiLinkedInfo; mMacAddress[0] = ""; mHotspotState[0] = static_cast(ApState::AP_STATE_CLOSED); @@ -968,7 +969,8 @@ int WifiSettings::GetLinkedInfo(WifiLinkedInfo &info, int instId) std::unique_lock lock(mInfoMutex); auto iter = mWifiLinkedInfo.find(instId); if (iter != mWifiLinkedInfo.end()) { - if (iter->second.channelWidth == WifiChannelWidth::WIDTH_INVALID) { + if (iter->second.channelWidth == WifiChannelWidth::WIDTH_INVALID && + mWifiLinkedInfo[instId].bssid.size() != 0) { GetLinkedChannelWidth(instId); } info = iter->second; @@ -1724,7 +1726,8 @@ void WifiSettings::GetLinkedChannelWidth(int instId) return; } } - LOGD("WifiSettings GetLinkedChannelWidth failed."); + LOGI("WifiSettings GetLinkedChannelWidth failed, bssid = %{private}s.", + mWifiLinkedInfo[instId].bssid.c_str()); } void WifiSettings::UpdateLinkedChannelWidth(const std::string bssid, WifiChannelWidth channelWidth, int instId)