diff --git a/wifi/frameworks/native/c_adapter/src/wifi_c_p2p.cpp b/wifi/frameworks/native/c_adapter/src/wifi_c_p2p.cpp index efec171f32b8c003a109d4e8271d0ee81cd127b0..73e70a126b0dc61d668e81de17f3adbf325b49f5 100644 --- a/wifi/frameworks/native/c_adapter/src/wifi_c_p2p.cpp +++ b/wifi/frameworks/native/c_adapter/src/wifi_c_p2p.cpp @@ -624,4 +624,9 @@ NO_SANITIZE("cfi") WifiErrorCode SetMiracastSinkConfig(const char* config) { CHECK_PTR_RETURN(wifiP2pPtr, ERROR_WIFI_NOT_AVAILABLE); return GetCErrorCode(wifiP2pPtr->SetMiracastSinkConfig(config)); -} \ No newline at end of file +} +NO_SANITIZE("cfi") WifiErrorCode SetP2pHighPerf(bool isEnable) +{ + CHECK_PTR_RETURN(wifiP2pPtr, ERROR_WIFI_NOT_AVAILABLE); + return GetCErrorCode(wifiP2pPtr->SetP2pHighPerf(isEnable)); +} diff --git a/wifi/frameworks/native/interfaces/i_wifi_p2p.h b/wifi/frameworks/native/interfaces/i_wifi_p2p.h index 6f1ebafe106fb13d8e488eae7766867e4469dae3..b4e1b8ca45466307103aeff52bf467218851a329 100644 --- a/wifi/frameworks/native/interfaces/i_wifi_p2p.h +++ b/wifi/frameworks/native/interfaces/i_wifi_p2p.h @@ -428,6 +428,15 @@ public: * @return ErrCode - operation result */ virtual ErrCode GetSupportedChanForBand(std::vector &channels, int band) = 0; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return ErrCode - operation result + */ + virtual ErrCode SetP2pHighPerf(bool isEnable) = 0; + public: DECLARE_INTERFACE_DESCRIPTOR(u"ohos.wifi.IWifiP2pService"); }; diff --git a/wifi/frameworks/native/interfaces/wifi_manager_service_ipc_interface_code.h b/wifi/frameworks/native/interfaces/wifi_manager_service_ipc_interface_code.h index a7bee35ed9ebaf749c89946b6bd9e8f1d8ac7ba4..16bed0786ce1ca962c420d453ecb6149e0e32a6d 100644 --- a/wifi/frameworks/native/interfaces/wifi_manager_service_ipc_interface_code.h +++ b/wifi/frameworks/native/interfaces/wifi_manager_service_ipc_interface_code.h @@ -190,6 +190,7 @@ enum class P2PInterfaceCode { WIFI_SVR_CMD_P2P_HID2D_WIDE_SUPPORTED = 0x202C, /* Hid2d Is Wide Bandwidth Supported */ WIFI_SVR_CMD_P2P_SET_MIRACAST_SINK_CONFIG = 0x202D, /* Set miracast sink config */ WIFI_SVR_CMD_P2P_GET_SUPPORT_CHANN_FOR_BAND = 0x202E, /* Get support channels for band*/ + WIFI_SVR_CMD_SET_P2P_HIGH_PERF_MODE = 0x202F, /* Set p2p high perf mode*/ /* 新增WIFI_SVR_CMD_类code,请在此下方添加 */ WIFI_SVR_CMD_P2P_REMOVE_GROUP_CLIENT = 0x3000, diff --git a/wifi/frameworks/native/libwifi_sdk.map b/wifi/frameworks/native/libwifi_sdk.map index 5e5ce03bb20098010bc6db8f87b05dfb8812f5cf..df50fa66bf872cb158095559be9e34a0c305e611 100644 --- a/wifi/frameworks/native/libwifi_sdk.map +++ b/wifi/frameworks/native/libwifi_sdk.map @@ -27,6 +27,7 @@ RegisterP2pConnectionChangedCallback; RegisterP2pPeersChangedCallback; CheckCanUseP2p; + SetP2pHighPerf; SetMiracastSinkConfig; EnableHotspot; DisableHotspot; diff --git a/wifi/frameworks/native/src/wifi_p2p_impl.cpp b/wifi/frameworks/native/src/wifi_p2p_impl.cpp index 8c1ec4371693feda0439ac3c2d18b742d142e49d..652ed3f9409e9777143a142bf51b4ff68d641d36 100644 --- a/wifi/frameworks/native/src/wifi_p2p_impl.cpp +++ b/wifi/frameworks/native/src/wifi_p2p_impl.cpp @@ -433,5 +433,12 @@ ErrCode WifiP2pImpl::GetSupportedChanForBand(std::vector &channels, int ban RETURN_IF_FAIL(GetWifiP2pProxy()); return client_->GetSupportedChanForBand(channels, band); } + +ErrCode WifiP2pImpl::SetP2pHighPerf(bool isEnable) +{ + std::lock_guard lock(mutex_); + RETURN_IF_FAIL(GetWifiP2pProxy()); + return client_->SetP2pHighPerf(isEnable); +} } // namespace Wifi } // namespace OHOS \ No newline at end of file diff --git a/wifi/frameworks/native/src/wifi_p2p_impl.h b/wifi/frameworks/native/src/wifi_p2p_impl.h index 1e381ad0e064d5ecc2e9d54572050d876298f538..82e2fb0059f684da67c1bd5d3b2cd6c140bb7aa6 100644 --- a/wifi/frameworks/native/src/wifi_p2p_impl.h +++ b/wifi/frameworks/native/src/wifi_p2p_impl.h @@ -436,6 +436,14 @@ public: * @return ErrCode - operation result */ ErrCode GetSupportedChanForBand(std::vector &channels, int band) override; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return ErrCode - operation result + */ + ErrCode SetP2pHighPerf(bool isEnable) override; private: bool GetWifiP2pProxy(); std::atomic systemAbilityId_; diff --git a/wifi/frameworks/native/src/wifi_p2p_proxy.cpp b/wifi/frameworks/native/src/wifi_p2p_proxy.cpp index be9917df4f9ed33fe5e6ba1038825b353fe5dbce..440f7c137ca10c511a2302b5b3f6f873ce4e0634 100644 --- a/wifi/frameworks/native/src/wifi_p2p_proxy.cpp +++ b/wifi/frameworks/native/src/wifi_p2p_proxy.cpp @@ -1895,5 +1895,36 @@ ErrCode WifiP2pProxy::GetSupportedChanForBand(std::vector &channels, int ba } return WIFI_OPT_SUCCESS; } + +ErrCode WifiP2pProxy::SetP2pHighPerf(bool isEnable) +{ + if (mRemoteDied) { + WIFI_LOGW("failed to `%{public}s`,remote service is died!", __func__); + return WIFI_OPT_FAILED; + } + MessageOption option; + MessageParcel data; + MessageParcel reply; + if (!data.WriteInterfaceToken(GetDescriptor())) { + WIFI_LOGE("Write interface token error: %{public}s", __func__); + return WIFI_OPT_FAILED; + } + data.WriteInt32(0); + data.WriteBool(isEnable); + int error = Remote()->SendRequest( + static_cast(P2PInterfaceCode::WIFI_SVR_CMD_SET_P2P_HIGH_PERF_MODE), data, reply, option); + if (error != ERR_NONE) { + WIFI_LOGE("Set Attr(%{public}d) failed,error code is %{public}d", + static_cast(P2PInterfaceCode::WIFI_SVR_CMD_SET_P2P_HIGH_PERF_MODE), error); + return WIFI_OPT_FAILED; + } + int exception = reply.ReadInt32(); + if (exception) { + return WIFI_OPT_FAILED; + } + + return WIFI_OPT_SUCCESS; +} + } // namespace Wifi } // namespace OHOS diff --git a/wifi/frameworks/native/src/wifi_p2p_proxy.h b/wifi/frameworks/native/src/wifi_p2p_proxy.h index 992d1c84ecf72b7efe2db87ca5413385c2ca562e..043f7a23979f053f77b2a1ccf97e05a8576d0528 100644 --- a/wifi/frameworks/native/src/wifi_p2p_proxy.h +++ b/wifi/frameworks/native/src/wifi_p2p_proxy.h @@ -423,6 +423,14 @@ public: * @return ErrCode - operation result */ ErrCode GetSupportedChanForBand(std::vector &channels, int band) override; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return ErrCode - operation result + */ + ErrCode SetP2pHighPerf(bool isEnable) override; private: class WifiDeathRecipient : public IRemoteObject::DeathRecipient { public: diff --git a/wifi/interfaces/inner_api/wifi_p2p.h b/wifi/interfaces/inner_api/wifi_p2p.h index 76a6dd3ae6ee1111b085430dfea5027979eee521..ea010992bd0d5c9413a062d7a1c424906dd9ba6e 100644 --- a/wifi/interfaces/inner_api/wifi_p2p.h +++ b/wifi/interfaces/inner_api/wifi_p2p.h @@ -308,6 +308,14 @@ public: * @return ErrCode - operation result */ virtual ErrCode GetSupportedChanForBand(std::vector &channels, int band) = 0; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return ErrCode - operation result + */ + virtual ErrCode SetP2pHighPerf(bool isEnable) = 0; }; } // namespace Wifi } // namespace OHOS diff --git a/wifi/interfaces/kits/c/wifi_p2p.h b/wifi/interfaces/kits/c/wifi_p2p.h index cde58277e00aff4fee52a6de7b42025d87bbac67..b15f1709666e4d78bd60e97d70c85a5e6d44cdf9 100644 --- a/wifi/interfaces/kits/c/wifi_p2p.h +++ b/wifi/interfaces/kits/c/wifi_p2p.h @@ -255,6 +255,14 @@ WifiErrorCode CheckCanUseP2p(); */ WifiErrorCode SetMiracastSinkConfig(const char* config); +/** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return WifiErrorCode - operation result + */ +WifiErrorCode SetP2pHighPerf(bool isEnable); + #ifdef __cplusplus } #endif diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/hal_device_manage/hal_device_manage.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/hal_device_manage/hal_device_manage.cpp index 7080ae844f13f531442ff5efca6126ebf85a26b9..6ed49391a88aa086aa8810cffedc837f1aba450f 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/hal_device_manage/hal_device_manage.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/hal_device_manage/hal_device_manage.cpp @@ -51,6 +51,7 @@ sptr HalDeviceManager::g_chipIfaceCallback = nullptr; OnChipServiceDied HalDeviceManager::g_chipHdiServiceDiedCb = nullptr; constexpr int32_t CMD_SET_MAX_CONNECT = 102; constexpr int32_t MAX_CONNECT_DEFAULT = 8; +constexpr int32_t CMD_SET_P2P_HIGH_PERF = 103; HalDeviceManager::HalDeviceManager() { @@ -848,6 +849,14 @@ bool HalDeviceManager::SetMaxConnectNum(const std::string &ifaceName, int32_t ch return SendCmdToDriver(ifaceName, ifaceName, CMD_SET_MAX_CONNECT, param, result); } +bool HalDeviceManager::SetP2pHighPerf(const std::string &ifaceName, bool isEnable) +{ + std::string param = std::to_string(static_cast(isEnable)); + LOGI("SetP2pHighPerf param is %{public}s", param.c_str()); + std::string result; + return SendCmdToDriver(ifaceName, ifaceName, CMD_SET_P2P_HIGH_PERF, param, result); +} + void HalDeviceManager::ResetHalDeviceManagerInfo(bool isRemoteDied) { std::lock_guard lock(mMutex); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/hal_device_manage/hal_device_manage.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/hal_device_manage/hal_device_manage.h index d10beafc972299e9d002bef376d336cd0572ef5e..84b0d1a40c58c80d6ca2e928c5e255d444981e12 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/hal_device_manage/hal_device_manage.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/hal_device_manage/hal_device_manage.h @@ -432,6 +432,14 @@ public: */ bool SetMaxConnectNum(const std::string &ifaceName, int32_t channel, int32_t maxConn); + /** + * @Description Set p2p high perf mode + * @param interfaceName interfaceName + * @param isEnable - enable high perf mode or not + * @return bool + */ + bool SetP2pHighPerf(const std::string &ifaceName, bool isEnable); + void RegisterChipHdiDeathCallback(OnChipServiceDied cb); private: bool CheckReloadChipHdiService(); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_p2p_hal_interface.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_p2p_hal_interface.cpp index e362bc0aa42164644d36f06b864992dee030e773..efc274ab2909247b642e640439ff54a7d6902c0c 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_p2p_hal_interface.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_p2p_hal_interface.cpp @@ -574,5 +574,17 @@ WifiErrorNo WifiP2PHalInterface::TempGroupAdd(int freq) #endif return WIFI_HAL_OPT_FAILED; } + +WifiErrorNo WifiP2PHalInterface::SetP2pHighPerf(bool isEnable) +{ +#ifdef HDI_WPA_INTERFACE_SUPPORT + std::string ifName = WifiConfigCenter::GetInstance().GetP2pIfaceName(); + if (!HalDeviceManager::GetInstance().SetP2pHighPerf(ifName, isEnable)) { + return WIFI_HAL_OPT_FAILED; + } + return WIFI_HAL_OPT_OK; +#endif + return WIFI_HAL_OPT_FAILED; +} } // namespace Wifi } // namespace OHOS \ No newline at end of file diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_p2p_hal_interface.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_p2p_hal_interface.h index 5e635e5f9d96d19af9ade77a98a8fd6cbb218450..c002d4bb920c4fc571a4da96b8ea92def5aa3ef8 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_p2p_hal_interface.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_p2p_hal_interface.h @@ -509,6 +509,14 @@ public: WifiErrorNo TempGroupAdd(int freq); WifiErrorNo P2pSetTempConfig(int networkId, const HalP2pGroupConfig &config) const; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return WifiErrorNo + */ + WifiErrorNo SetP2pHighPerf(bool isEnable); private: P2pHalCallback mP2pCallback; }; diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/ip2p_service.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/ip2p_service.h index 7b2484fd5b4d6204d8e45f4d66e262ce2f1ee51e..8d7fd7bdd37087f18ce558714b889e2bce1b3fba 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/ip2p_service.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/ip2p_service.h @@ -365,6 +365,14 @@ public: * @return success: WIFI_OPT_SUCCESS, failed: WIFI_OPT_FAILED */ virtual ErrCode SetMiracastSinkConfig(const std::string& config) = 0; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return success: WIFI_OPT_SUCCESS, failed: WIFI_OPT_FAILED + */ + virtual ErrCode SetP2pHighPerf(bool isEnable) = 0; }; } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_define.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_define.h index 0620c6f4427a9d65d96fb31594f5841e0fd30d44..8806dd27dab84d85de4b513d3b2079c9bf9fa9b6 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_define.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_define.h @@ -119,6 +119,7 @@ enum class P2P_STATE_MACHINE_CMD { CMD_UNREGISTER_SERVICE_CB, CMD_CLEAR_SERVICE_CB, CMD_SET_MIRACAST_SINK_CONFIG, + CMD_SET_P2P_HIGH_PERF, /* monitor to state machine */ WPA_CONNECTED_EVENT = 100, // result of connect diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_enabled_state.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_enabled_state.cpp index 2bfb84836632adb97ec204ccbc51290b67284c95..1e9de753e974f544a078572036de626f8755b752 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_enabled_state.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_enabled_state.cpp @@ -129,6 +129,8 @@ void P2pEnabledState::InitProcessMsg() [this](InternalMessagePtr msg) { return this->ProcessChrReport(msg); })); mProcessFunMap.insert(std::make_pair(P2P_STATE_MACHINE_CMD::CMD_SET_MIRACAST_SINK_CONFIG, [this](InternalMessagePtr msg) { return this->ProcessSetMiracastSinkConfig(msg); })); + mProcessFunMap.insert(std::make_pair(P2P_STATE_MACHINE_CMD::CMD_SET_P2P_HIGH_PERF, + [this](InternalMessagePtr msg) { return this->ProcessSetP2pHighPerf(msg); })); } bool P2pEnabledState::ProcessCmdDisable(InternalMessagePtr msg) const @@ -712,5 +714,13 @@ bool P2pEnabledState::ProcessSetMiracastSinkConfig(InternalMessagePtr msg) const WifiP2PHalInterface::GetInstance().SetMiracastSinkConfig(config); return EXECUTED; } + +bool P2pEnabledState::ProcessSetP2pHighPerf(InternalMessagePtr msg) const +{ + const bool isEnable = msg->GetParam1(); + WIFI_LOGI("P2pEnabledState receive set p2p high perf mode, isEnable: %{public}d", isEnable); + WifiP2PHalInterface::GetInstance().SetP2pHighPerf(isEnable); + return EXECUTED; +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_enabled_state.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_enabled_state.h index 0b83deb9da0cb5e08b5c50d2bae042aa497e8372..9311f163f390081e6f3ea34e7e35b6155daff1df 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_enabled_state.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_enabled_state.h @@ -285,6 +285,15 @@ private: * @return - bool true:handle false:not handle */ virtual bool ProcessSetMiracastSinkConfig(InternalMessagePtr msg) const; + + /** + * @Description Set p2p high perf mode + * + * @param Message body sent by the state machine + * @return - bool true:handle false:not handle + */ + virtual bool ProcessSetP2pHighPerf(InternalMessagePtr msg) const; + private: void P2pConfigInitExt(bool &result); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_interface.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_interface.cpp index e8845c6c8a531db84f70228d354325f3faa2551d..ec603a469f265a4cf454ab978038d126a00050bf 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_interface.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_interface.cpp @@ -292,5 +292,10 @@ ErrCode P2pInterface::SetMiracastSinkConfig(const std::string& config) { return p2pService.SetMiracastSinkConfig(config); } + +ErrCode P2pInterface::SetP2pHighPerf(bool isEnable) +{ + return p2pService.SetP2pHighPerf(isEnable); +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_interface.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_interface.h index 7f932e09b04822ac9e26f945f7d006ff18aae8f9..1b2a937b6a31de6d9c14cb58ac24f9b3e10fe247 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_interface.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_interface.h @@ -377,6 +377,14 @@ public: * @return success: WIFI_OPT_SUCCESS, failed: WIFI_OPT_FAILED */ virtual ErrCode SetMiracastSinkConfig(const std::string& config) override; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return success: WIFI_OPT_SUCCESS, failed: WIFI_OPT_FAILED + */ + virtual ErrCode SetP2pHighPerf(bool isEnable) override; private: WifiP2pGroupManager groupManager; /* group manager */ WifiP2pDeviceManager deviceMgr; /* device manager */ diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/wifi_p2p_service.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/wifi_p2p_service.cpp index 82a1daccadf5841fd84ec6e93c99f1cc3d230310..a4e92fd5762100ef5e84aec65865b5056be9ae9b 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/wifi_p2p_service.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/wifi_p2p_service.cpp @@ -530,5 +530,12 @@ ErrCode WifiP2pService::SetMiracastSinkConfig(const std::string& config) p2pStateMachine.SendMessage(static_cast(P2P_STATE_MACHINE_CMD::CMD_SET_MIRACAST_SINK_CONFIG), info); return WIFI_OPT_SUCCESS; } + +ErrCode WifiP2pService::SetP2pHighPerf(bool isEnable) +{ + WIFI_LOGI("SetP2pHighPerf"); + p2pStateMachine.SendMessage(static_cast(P2P_STATE_MACHINE_CMD::CMD_SET_P2P_HIGH_PERF), isEnable); + return WIFI_OPT_SUCCESS; +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/wifi_p2p_service.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/wifi_p2p_service.h index 62a5fe07801e3b05c59a8581ffdb6d3122f38f6b..fb167e5e291c1c5019dd126a01cf371576cd720f 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/wifi_p2p_service.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/wifi_p2p_service.h @@ -347,6 +347,14 @@ public: * @return success: WIFI_OPT_SUCCESS, failed: WIFI_OPT_FAILED */ virtual ErrCode SetMiracastSinkConfig(const std::string& config) override; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return success: WIFI_OPT_SUCCESS, failed: WIFI_OPT_FAILED + */ + virtual ErrCode SetP2pHighPerf(bool isEnable) override; private: /** * @Description - P2P state machine deregistration event callback. diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_service_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_service_impl.cpp index db4a76b2f6330937adb56e8c7b5138321858be45..13313ea18309c50eb621bdb1acf2a96d6426536d 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_service_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_service_impl.cpp @@ -1635,5 +1635,32 @@ ErrCode WifiP2pServiceImpl::GetSupportedChanForBand(std::vector &channels, } return WIFI_OPT_SUCCESS; } + +ErrCode WifiP2pServiceImpl::SetP2pHighPerf(bool isEnable) +{ + WIFI_LOGI("SetP2pHighPerf"); + + if (WifiPermissionUtils::VerifyGetWifiInfoPermission() == PERMISSION_DENIED) { + WIFI_LOGE("SetP2pHighPerf:VerifyGetWifiInfoPermission PERMISSION_DENIED!"); + return WIFI_OPT_PERMISSION_DENIED; + } + + if (WifiPermissionUtils::VerifySetWifiInfoPermission() == PERMISSION_DENIED) { + WIFI_LOGE("SetP2pHighPerf:VerifySetWifiInfoPermission PERMISSION_DENIED!"); + return WIFI_OPT_PERMISSION_DENIED; + } + + if (!IsP2pServiceRunning()) { + WIFI_LOGE("P2pService is not running!"); + return WIFI_OPT_P2P_NOT_OPENED; + } + + IP2pService *pService = WifiServiceManager::GetInstance().GetP2pServiceInst(); + if (pService == nullptr) { + WIFI_LOGE("Get P2P service failed!"); + return WIFI_OPT_P2P_NOT_OPENED; + } + return pService->SetP2pHighPerf(isEnable); +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_service_impl.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_service_impl.h index 794af3458823c7eabc936a1e6dbe42ce4a2eecd9..c540eeb6bb4d4774f60a10fbae0a811d10f8ee78 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_service_impl.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_service_impl.h @@ -453,6 +453,14 @@ public: * @return ErrCode - operation result */ ErrCode GetSupportedChanForBand(std::vector &channels, int band) override; + + /** + * @Description Set p2p high perf mode + * + * @param isEnable - enable high perf mode or not + * @return ErrCode - operation result + */ + ErrCode SetP2pHighPerf(bool isEnable) override; private: bool Init(); ErrCode CheckCanEnableP2p(void); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_stub.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_stub.cpp index 11a564f0956286886887ebd289b5ea0660ec3cc4..5ea7511ab4435d9e716b1612e39351b754d69de9 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_stub.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_stub.cpp @@ -122,6 +122,10 @@ void WifiP2pStub::InitHandleMapExPart3() [this](uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { OnGetSupportChanForBand(code, data, reply, option); }; + handleFuncMap[static_cast(P2PInterfaceCode::WIFI_SVR_CMD_SET_P2P_HIGH_PERF_MODE)] = + [this](uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { + OnSetP2pHighPerf(code, data, reply, option); + }; } void WifiP2pStub::InitHandleMap() @@ -1153,5 +1157,16 @@ void WifiP2pStub::OnGetSupportChanForBand( } } } + +void WifiP2pStub::OnSetP2pHighPerf( + uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) +{ + bool isEnable = data.ReadBool(); + WIFI_LOGD("run %{public}s code %{public}u, isEnable = %{public}d", __func__, code, isEnable); + + ErrCode ret = SetP2pHighPerf(isEnable); + reply.WriteInt32(0); + reply.WriteInt32(ret); +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_stub.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_stub.h index 8bb45bd9faf29b2f93dfc2ce8aaefcbbd40898d5..9cf84ee27eb3df668eb5e491c2a77762d61e7565 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_stub.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_sa/wifi_p2p_stub.h @@ -106,7 +106,7 @@ private: void OnSetMiracastSinkConfig( uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option); void OnGetSupportChanForBand(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option); - + void OnSetP2pHighPerf(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option); private: HandleFuncMap handleFuncMap; std::mutex deathRecipientMutex; diff --git a/wifi/test/fuzztest/wifi_sta/wifip2pstub_fuzzer/wifip2pstub_fuzzer.cpp b/wifi/test/fuzztest/wifi_sta/wifip2pstub_fuzzer/wifip2pstub_fuzzer.cpp index 52005100f76aa20cec063cee804a78423753e66e..09c7848186daa3cb17fd080c9128cb34b567e831 100644 --- a/wifi/test/fuzztest/wifi_sta/wifip2pstub_fuzzer/wifip2pstub_fuzzer.cpp +++ b/wifi/test/fuzztest/wifi_sta/wifip2pstub_fuzzer/wifip2pstub_fuzzer.cpp @@ -704,6 +704,19 @@ void OnGetSupportChanForBandTest(const uint8_t* data, size_t size) datas, reply, option); } +void OnSetP2pHighPerfTest(const uint8_t* data, size_t size) +{ + MessageParcel datas; + datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN); + datas.WriteInt32(0); + datas.WriteBuffer(data, size); + MessageParcel reply; + MessageOption option; + pWifiDeviceStub->OnRemoteRequest( + static_cast(P2PInterfaceCode::WIFI_SVR_CMD_SET_P2P_HIGH_PERF_MODE), + datas, reply, option); +} + /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/wifi_mock_p2p_service.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/wifi_mock_p2p_service.cpp index c9d71250b97e39b156b30281adfa397151e6a416..70300a4c7601ed637c2429824937cbc4ed25dd90 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/wifi_mock_p2p_service.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/wifi_mock_p2p_service.cpp @@ -441,6 +441,11 @@ ErrCode WifiMockP2pService::SetMiracastSinkConfig(const std::string& config) return WIFI_OPT_SUCCESS; } +ErrCode WifiMockP2pService::SetP2pHighPerf(bool isEnable) +{ + return WIFI_OPT_SUCCESS; +} + extern "C" IP2pService *Create(void) { return new (std::nothrow) WifiMockP2pService(); diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/wifi_mock_p2p_service.h b/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/wifi_mock_p2p_service.h index f03716b897ebdee90ecfffbd1d5d76bff1e80554..7a278a8363a098f865819830863d58d0fd2c1eaa 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/wifi_mock_p2p_service.h +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/wifi_mock_p2p_service.h @@ -55,7 +55,7 @@ public: ErrCode GetRptStationsList(std::vector &result); void NotifyWscDialogConfirmResult(bool isAccept); ErrCode SetMiracastSinkConfig(const std::string& config); - + ErrCode SetP2pHighPerf(bool isEnable); public: IP2pServiceCallbacks mCallback; }; diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_p2p_interface.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_p2p_interface.cpp index 4d35247e7c4f6612b540870336aa96ce3430d2a4..294d9f2cf2f2cd4f627e7da2f79ce5ae7ecaee25 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_p2p_interface.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_p2p_interface.cpp @@ -242,5 +242,10 @@ ErrCode P2pInterface::SetMiracastSinkConfig(const std::string& config) { return WIFI_OPT_SUCCESS; } + +ErrCode P2pInterface::SetP2pHighPerf(bool isEnable) +{ + return WIFI_OPT_SUCCESS; +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_p2p_interface.h b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_p2p_interface.h index ec19c6b1a5c9050f53721deb027e803612d31fc4..69c1d2c35eab9f94156697d732f04885c353e6d9 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_p2p_interface.h +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_p2p_interface.h @@ -69,6 +69,7 @@ public: virtual ErrCode GetRptStationsList(std::vector &result); virtual void NotifyWscDialogConfirmResult(bool isAccept); virtual ErrCode SetMiracastSinkConfig(const std::string& config); + virtual ErrCode SetP2pHighPerf(bool isEnable); }; } // namespace Wifi } // namespace OHOS diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_wifi_p2p_hal_interface.h b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_wifi_p2p_hal_interface.h index 6fc778d2323e4b06719ee567fcc654dd14179dd9..8ad543b56d813a50c92cf97d6f423e380715c5e1 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_wifi_p2p_hal_interface.h +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/test/Mock/mock_wifi_p2p_hal_interface.h @@ -93,6 +93,7 @@ public: virtual WifiErrorNo GroupClientRemove(const std::string &deviceMac) const = 0; virtual WifiErrorNo P2pReject(const std::string &mac); virtual WifiErrorNo SetMiracastSinkConfig(const std::string &config); + virtual WifiErrorNo SetP2pHighPerf(bool isEnable); }; class WifiP2PHalInterface : public MockWifiP2PHalInterface { @@ -164,6 +165,7 @@ public: MOCK_CONST_METHOD1(GroupClientRemove, WifiErrorNo(const std::string &deviceMac)); MOCK_METHOD1(P2pReject, WifiErrorNo(const std::string &mac)); MOCK_METHOD1(SetMiracastSinkConfig, WifiErrorNo(const std::string &config)); + MOCK_METHOD1(SetP2pHighPerf, WifiErrorNo(bool isEnable)); }; } // namespace Wifi } // namespace OHOS