diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_controller/wifi_controller_state_machine.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_controller/wifi_controller_state_machine.cpp index 50bc47dd00fb7e2a1e08e15ff23b8c67574affe4..5625c0f3749c148ae71186876fa61509ce217605 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_controller/wifi_controller_state_machine.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_controller/wifi_controller_state_machine.cpp @@ -327,6 +327,10 @@ void WifiControllerMachine::HandleAirplaneOpen() #endif if (!WifiSettings::GetInstance().GetWifiFlagOnAirplaneMode() || !ShouldEnableWifi(INSTID_WLAN0)) { multiStaManagers.StopAllManagers(); + if (IsDisableWifiProhibitedByEdm()) { + WIFI_LOGE("HandleAirplaneOpen:wifi is prohibited by EDM!"); + return; + } concreteManagers.StopAllManagers(); } } @@ -978,5 +982,23 @@ void WifiControllerMachine::IsLocalOnlyHotspot(bool isLohs) { isLocalOnlyHotspot_ = isLohs; } + +bool WifiControllerMachine::IsDisableWifiProhibitedByEdm(void) +{ + constexpr const char* wifiEdmForceOpenKey = "persist.edm.force_open_wifi"; + constexpr const uint32_t paramTrueLen = 4; + constexpr const uint32_t paramFalseLen = 5; + constexpr const char* paramTrue = "true"; + constexpr const char* paramFalse = "false"; + + char preValue[paramFalseLen] = {0}; + int errCode = GetParamValue(wifiEdmForceOpenKey, paramFalse, preValue, paramFalseLen); + if (errCode > 0) { + if (strncmp(preValue, paramTrue, paramTrueLen) == 0) { + return true; + } + } + return false; +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_controller/wifi_controller_state_machine.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_controller/wifi_controller_state_machine.h index ed81fef71a9623160bdbde2aef077df744b67015..60204c8eb18f4bfbecb08aefb19b6b1a59c8da13 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_controller/wifi_controller_state_machine.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_controller/wifi_controller_state_machine.h @@ -150,6 +150,7 @@ private: void MakeRptManager(RptManager::Role role, int id); #endif #endif + bool IsDisableWifiProhibitedByEdm(void); bool ShouldDisableWifi(InternalMessagePtr msg); bool ShouldEnableWifi(int id = 0); ConcreteManagerRole GetWifiRole();