diff --git a/wifi/base/inner_api/ienhance_service.h b/wifi/base/inner_api/ienhance_service.h index 37de35a7ea214f28e2da1f7eee041bf550e42ef4..c781b9fdd179550ccc41b7418c96b9e8c2b9b814 100644 --- a/wifi/base/inner_api/ienhance_service.h +++ b/wifi/base/inner_api/ienhance_service.h @@ -307,6 +307,13 @@ public: */ virtual void OnWifiLinkTypeChanged(const WifiLinkType &wifiLinkType) = 0; + /** + * @Description handle beacon lost + * + * @return void + */ + virtual void HandleBeaconLost() = 0; + /** * @Description get limit switching network scenes * diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sub_manage/wifi_sta_manager.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sub_manage/wifi_sta_manager.cpp index d5f1136846bf91b3171ddb653c248bdf618ff151..3e59dad3f2ae9b375c8592eb79f2d106b5f35fb5 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sub_manage/wifi_sta_manager.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sub_manage/wifi_sta_manager.cpp @@ -243,7 +243,14 @@ static void HandleStaDisconnected(int instId) void WifiStaManager::DealSignalPollReport(const std::string &bssid, const int32_t signalLevel, const int32_t instId) { - WifiChrUtils::GetInstance().BeaconLostReport(bssid, signalLevel, instId); + bool isBeaconLost = WifiChrUtils::GetInstance().BeaconLostReport(bssid, signalLevel, instId); + if (isBeaconLost) { + WIFI_LOGI("Enter HandleBeaconLost"); + IEnhanceService *pEnhanceService = WifiServiceManager::GetInstance().GetEnhanceServiceInst(); + if (pEnhanceService != nullptr) { + pEnhanceService->HandleBeaconLost(); + } + } } void WifiStaManager::DealStaConnChanged(OperateResState state, const WifiLinkedInfo &info, int instId) diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_chr_utils.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_chr_utils.cpp index b81386606e978729fee6b58c65a2f926ac0a0e9b..7f736739379af00dfc6b8907f07556a69d073a3b 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_chr_utils.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_chr_utils.cpp @@ -60,9 +60,9 @@ void WifiChrUtils::GetSignalPollInfoArray(std::vector &wifiS } } -void WifiChrUtils::BeaconLostReport(const std::string &bssid, const int32_t signalLevel, const int32_t instId) +bool WifiChrUtils::BeaconLostReport(const std::string &bssid, const int32_t signalLevel, const int32_t instId) { - if (signalLevel < 0) return; + if (signalLevel < 0) return false; std::vector wifiCheckInfoArray = signalPollInfoArray; std::sort(wifiCheckInfoArray.begin(), wifiCheckInfoArray.end(), [](const WifiSignalPollInfo& a, const WifiSignalPollInfo& b) {return a.timeStamp > b.timeStamp;}); @@ -83,8 +83,10 @@ void WifiChrUtils::BeaconLostReport(const std::string &bssid, const int32_t sign if (currentTime - startTime_ >= SIGNAL_RECORD_5S) { startTime_ = currentTime; WriteWifiBeaconLostHiSysEvent(errorCode); + return true; } } + return false; } } // namespace Wifi } // namespace OHOS \ No newline at end of file diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_chr_utils.h b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_chr_utils.h index c6ae61e20e85bbecbc908043df1bd22ae6862ea0..7dd379fa0e33cb0c3490c7205f5fcd94dea1f3f2 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_chr_utils.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_chr_utils.h @@ -30,7 +30,7 @@ public: void AddSignalPollInfoArray(WifiSignalPollInfo signalInfo); void GetSignalPollInfoArray(std::vector &wifiSignalPollInfos, int length); void ClearSignalPollInfoArray(); - void BeaconLostReport(const std::string &bssid, const int32_t signalLevel, const int32_t instId); + bool BeaconLostReport(const std::string &bssid, const int32_t signalLevel, const int32_t instId); private: WifiChrUtils();