1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include "wifi_hal.h" 17094332d3Sopenharmony_ci#include <stdbool.h> 18094332d3Sopenharmony_ci#include "securec.h" 19094332d3Sopenharmony_ci#include "unistd.h" 20094332d3Sopenharmony_ci#include "hdf_log.h" 21094332d3Sopenharmony_ci#include "wifi_hal_cmd.h" 22094332d3Sopenharmony_ci#include "wifi_hal_common.h" 23094332d3Sopenharmony_ci#include "wifi_hal_util.h" 24094332d3Sopenharmony_ci#include "wifi_driver_client.h" 25094332d3Sopenharmony_ci 26094332d3Sopenharmony_ci#ifdef __cplusplus 27094332d3Sopenharmony_ci#if __cplusplus 28094332d3Sopenharmony_ciextern "C" { 29094332d3Sopenharmony_ci#endif 30094332d3Sopenharmony_ci#endif 31094332d3Sopenharmony_ci 32094332d3Sopenharmony_cistatic bool g_wifiIsStarted = false; 33094332d3Sopenharmony_ci 34094332d3Sopenharmony_cistatic int32_t StartInner(const struct IWiFi *iwifi) 35094332d3Sopenharmony_ci{ 36094332d3Sopenharmony_ci int32_t ret; 37094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 38094332d3Sopenharmony_ci if (iwifi == NULL) { 39094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 40094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 41094332d3Sopenharmony_ci } 42094332d3Sopenharmony_ci if (g_wifiIsStarted) { 43094332d3Sopenharmony_ci HDF_LOGI("%s: wifi has started already, line: %d", __FUNCTION__, __LINE__); 44094332d3Sopenharmony_ci return HDF_SUCCESS; 45094332d3Sopenharmony_ci } 46094332d3Sopenharmony_ci ret = WifiDriverClientInit(); 47094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 48094332d3Sopenharmony_ci HDF_LOGE("%s: WifiDriverClientInit failed, line: %d, error no: %d", __FUNCTION__, __LINE__, ret); 49094332d3Sopenharmony_ci return ret; 50094332d3Sopenharmony_ci } 51094332d3Sopenharmony_ci 52094332d3Sopenharmony_ci ret = HalCmdGetAvailableNetwork(); 53094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 54094332d3Sopenharmony_ci HDF_LOGE("%s: HalCmdGetAvailableNetwork failed, line: %d, error no: %d", __FUNCTION__, __LINE__, ret); 55094332d3Sopenharmony_ci WifiDriverClientDeinit(); 56094332d3Sopenharmony_ci return ret; 57094332d3Sopenharmony_ci } 58094332d3Sopenharmony_ci g_wifiIsStarted = true; 59094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s", __FUNCTION__); 60094332d3Sopenharmony_ci return ret; 61094332d3Sopenharmony_ci} 62094332d3Sopenharmony_ci 63094332d3Sopenharmony_cistatic int32_t StopInner(const struct IWiFi *iwifi) 64094332d3Sopenharmony_ci{ 65094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 66094332d3Sopenharmony_ci if (iwifi == NULL) { 67094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 68094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 69094332d3Sopenharmony_ci } 70094332d3Sopenharmony_ci if (!g_wifiIsStarted) { 71094332d3Sopenharmony_ci HDF_LOGI("%s: wifi has stopped already, line: %d", __FUNCTION__, __LINE__); 72094332d3Sopenharmony_ci return HDF_SUCCESS; 73094332d3Sopenharmony_ci } 74094332d3Sopenharmony_ci WifiDriverClientDeinit(); 75094332d3Sopenharmony_ci ClearIWiFiList(); 76094332d3Sopenharmony_ci g_wifiIsStarted = false; 77094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s", __FUNCTION__); 78094332d3Sopenharmony_ci return HDF_SUCCESS; 79094332d3Sopenharmony_ci} 80094332d3Sopenharmony_ci 81094332d3Sopenharmony_cistatic int32_t GetSupportFeatureInner(uint8_t *supType, uint32_t size) 82094332d3Sopenharmony_ci{ 83094332d3Sopenharmony_ci if (supType == NULL || size <= PROTOCOL_80211_IFTYPE_NUM) { 84094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 85094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 86094332d3Sopenharmony_ci } 87094332d3Sopenharmony_ci return HalCmdGetSupportType(supType); 88094332d3Sopenharmony_ci} 89094332d3Sopenharmony_ci 90094332d3Sopenharmony_cistatic int32_t GetSupportComboInner(uint64_t *combo, uint32_t size) 91094332d3Sopenharmony_ci{ 92094332d3Sopenharmony_ci if (combo == NULL) { 93094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 94094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 95094332d3Sopenharmony_ci } 96094332d3Sopenharmony_ci return HalCmdGetSupportCombo(combo, size); 97094332d3Sopenharmony_ci} 98094332d3Sopenharmony_ci 99094332d3Sopenharmony_cistatic int32_t InitFeatureByType(int32_t type, struct IWiFiBaseFeature **ifeature) 100094332d3Sopenharmony_ci{ 101094332d3Sopenharmony_ci int32_t ret; 102094332d3Sopenharmony_ci 103094332d3Sopenharmony_ci switch (type) { 104094332d3Sopenharmony_ci case PROTOCOL_80211_IFTYPE_AP: 105094332d3Sopenharmony_ci *ifeature = (struct IWiFiBaseFeature *)malloc(sizeof(struct IWiFiAp)); 106094332d3Sopenharmony_ci if (*ifeature == NULL) { 107094332d3Sopenharmony_ci HDF_LOGE("%s: malloc failed, line: %d", __FUNCTION__, __LINE__); 108094332d3Sopenharmony_ci return HDF_FAILURE; 109094332d3Sopenharmony_ci } 110094332d3Sopenharmony_ci (void)memset_s(*ifeature, sizeof(struct IWiFiAp), 0, sizeof(struct IWiFiAp)); 111094332d3Sopenharmony_ci ret = InitApFeature((struct IWiFiAp **)ifeature); 112094332d3Sopenharmony_ci break; 113094332d3Sopenharmony_ci case PROTOCOL_80211_IFTYPE_STATION: 114094332d3Sopenharmony_ci *ifeature = (struct IWiFiBaseFeature *)malloc(sizeof(struct IWiFiSta)); 115094332d3Sopenharmony_ci if (*ifeature == NULL) { 116094332d3Sopenharmony_ci HDF_LOGE("%s: malloc failed, line: %d", __FUNCTION__, __LINE__); 117094332d3Sopenharmony_ci return HDF_FAILURE; 118094332d3Sopenharmony_ci } 119094332d3Sopenharmony_ci (void)memset_s(*ifeature, sizeof(struct IWiFiSta), 0, sizeof(struct IWiFiSta)); 120094332d3Sopenharmony_ci ret = InitStaFeature((struct IWiFiSta **)ifeature); 121094332d3Sopenharmony_ci break; 122094332d3Sopenharmony_ci case PROTOCOL_80211_IFTYPE_P2P_DEVICE: 123094332d3Sopenharmony_ci *ifeature = (struct IWiFiBaseFeature *)malloc(sizeof(struct IWiFiP2p)); 124094332d3Sopenharmony_ci if (*ifeature == NULL) { 125094332d3Sopenharmony_ci HDF_LOGE("%s: malloc failed, line: %d", __FUNCTION__, __LINE__); 126094332d3Sopenharmony_ci return HDF_FAILURE; 127094332d3Sopenharmony_ci } 128094332d3Sopenharmony_ci (void)memset_s(*ifeature, sizeof(struct IWiFiP2p), 0, sizeof(struct IWiFiP2p)); 129094332d3Sopenharmony_ci ret = InitP2pFeature((struct IWiFiP2p **)ifeature); 130094332d3Sopenharmony_ci break; 131094332d3Sopenharmony_ci default: 132094332d3Sopenharmony_ci HDF_LOGE("%s: type not support, line: %d", __FUNCTION__, __LINE__); 133094332d3Sopenharmony_ci return HDF_FAILURE; 134094332d3Sopenharmony_ci } 135094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 136094332d3Sopenharmony_ci free(*ifeature); 137094332d3Sopenharmony_ci *ifeature = NULL; 138094332d3Sopenharmony_ci } 139094332d3Sopenharmony_ci return ret; 140094332d3Sopenharmony_ci} 141094332d3Sopenharmony_ci 142094332d3Sopenharmony_cistatic int32_t FindValidNetwork(int32_t type, struct IWiFiBaseFeature **feature) 143094332d3Sopenharmony_ci{ 144094332d3Sopenharmony_ci struct DListHead *networkHead = GetNetworkHead(); 145094332d3Sopenharmony_ci struct IWiFiList *networkNode = NULL; 146094332d3Sopenharmony_ci 147094332d3Sopenharmony_ci DLIST_FOR_EACH_ENTRY(networkNode, networkHead, struct IWiFiList, entry) { 148094332d3Sopenharmony_ci if (networkNode == NULL) { 149094332d3Sopenharmony_ci HDF_LOGE("%s: networkNode is NULL, line: %d", __FUNCTION__, __LINE__); 150094332d3Sopenharmony_ci break; 151094332d3Sopenharmony_ci } 152094332d3Sopenharmony_ci if (networkNode->ifeature != NULL && networkNode->ifeature->type == type) { 153094332d3Sopenharmony_ci HDF_LOGI("%s: feature is existed. type: %d", __FUNCTION__, type); 154094332d3Sopenharmony_ci if (memcpy_s((*feature)->ifName, IFNAME_MAX_LEN, networkNode->ifName, strlen(networkNode->ifName)) != EOK) { 155094332d3Sopenharmony_ci HDF_LOGE("%s: memcpy_s failed, line: %d", __FUNCTION__, __LINE__); 156094332d3Sopenharmony_ci return HDF_FAILURE; 157094332d3Sopenharmony_ci } 158094332d3Sopenharmony_ci (*feature)->type = type; 159094332d3Sopenharmony_ci return HDF_SUCCESS; 160094332d3Sopenharmony_ci } 161094332d3Sopenharmony_ci if (networkNode->ifeature == NULL && networkNode->supportMode[type] == 1) { 162094332d3Sopenharmony_ci if (memcpy_s((*feature)->ifName, IFNAME_MAX_LEN, networkNode->ifName, strlen(networkNode->ifName)) != EOK) { 163094332d3Sopenharmony_ci HDF_LOGE("%s: memcpy_s failed, line: %d", __FUNCTION__, __LINE__); 164094332d3Sopenharmony_ci return HDF_FAILURE; 165094332d3Sopenharmony_ci } 166094332d3Sopenharmony_ci (*feature)->type = type; 167094332d3Sopenharmony_ci networkNode->ifeature = *feature; 168094332d3Sopenharmony_ci return HDF_SUCCESS; 169094332d3Sopenharmony_ci } 170094332d3Sopenharmony_ci } 171094332d3Sopenharmony_ci HDF_LOGE("%s: cannot find available network, line: %d", __FUNCTION__, __LINE__); 172094332d3Sopenharmony_ci return HDF_FAILURE; 173094332d3Sopenharmony_ci} 174094332d3Sopenharmony_ci 175094332d3Sopenharmony_cistatic int32_t CreateFeatureInner(int32_t type, struct IWiFiBaseFeature **ifeature) 176094332d3Sopenharmony_ci{ 177094332d3Sopenharmony_ci int32_t ret; 178094332d3Sopenharmony_ci 179094332d3Sopenharmony_ci if (ifeature == NULL) { 180094332d3Sopenharmony_ci HDF_LOGE("%s: ifeature is null, line: %d", __FUNCTION__, __LINE__); 181094332d3Sopenharmony_ci return HDF_FAILURE; 182094332d3Sopenharmony_ci } 183094332d3Sopenharmony_ci ret = InitFeatureByType(type, ifeature); 184094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 185094332d3Sopenharmony_ci HDF_LOGE("%s: init feature failed, line: %d, error no: %d", __FUNCTION__, __LINE__, ret); 186094332d3Sopenharmony_ci return ret; 187094332d3Sopenharmony_ci } 188094332d3Sopenharmony_ci 189094332d3Sopenharmony_ci ret = FindValidNetwork(type, ifeature); 190094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 191094332d3Sopenharmony_ci HDF_LOGE("%s: create feature failed, line: %d, error no: %d", __FUNCTION__, __LINE__, ret); 192094332d3Sopenharmony_ci if (*ifeature != NULL) { 193094332d3Sopenharmony_ci free(*ifeature); 194094332d3Sopenharmony_ci *ifeature = NULL; 195094332d3Sopenharmony_ci } 196094332d3Sopenharmony_ci return ret; 197094332d3Sopenharmony_ci } 198094332d3Sopenharmony_ci return HDF_SUCCESS; 199094332d3Sopenharmony_ci} 200094332d3Sopenharmony_ci 201094332d3Sopenharmony_cistatic int32_t DestroyFeatureInner(struct IWiFiBaseFeature *ifeature) 202094332d3Sopenharmony_ci{ 203094332d3Sopenharmony_ci struct DListHead *networkHead = GetNetworkHead(); 204094332d3Sopenharmony_ci struct IWiFiList *networkNode = NULL; 205094332d3Sopenharmony_ci 206094332d3Sopenharmony_ci if (ifeature == NULL) { 207094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 208094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 209094332d3Sopenharmony_ci } 210094332d3Sopenharmony_ci 211094332d3Sopenharmony_ci DLIST_FOR_EACH_ENTRY(networkNode, networkHead, struct IWiFiList, entry) { 212094332d3Sopenharmony_ci if (strcmp(networkNode->ifName, ifeature->ifName) == HDF_SUCCESS) { 213094332d3Sopenharmony_ci free(ifeature); 214094332d3Sopenharmony_ci networkNode->ifeature = NULL; 215094332d3Sopenharmony_ci return HDF_SUCCESS; 216094332d3Sopenharmony_ci } 217094332d3Sopenharmony_ci } 218094332d3Sopenharmony_ci HDF_LOGE("%s: cannot find feature to destroy, line: %d", __FUNCTION__, __LINE__); 219094332d3Sopenharmony_ci return HDF_FAILURE; 220094332d3Sopenharmony_ci} 221094332d3Sopenharmony_ci 222094332d3Sopenharmony_cistatic int32_t RegisterEventCallbackInner(OnReceiveFunc onRecFunc, const char *ifName) 223094332d3Sopenharmony_ci{ 224094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 225094332d3Sopenharmony_ci if (onRecFunc == NULL || ifName == NULL) { 226094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 227094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 228094332d3Sopenharmony_ci } 229094332d3Sopenharmony_ci if (WifiRegisterEventCallback(onRecFunc, WIFI_KERNEL_TO_HAL_CLIENT, ifName) != HDF_SUCCESS) { 230094332d3Sopenharmony_ci HDF_LOGE("%s: callback function has been registered, line: %d", __FUNCTION__, __LINE__); 231094332d3Sopenharmony_ci return HDF_FAILURE; 232094332d3Sopenharmony_ci } 233094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s", __FUNCTION__); 234094332d3Sopenharmony_ci return HDF_SUCCESS; 235094332d3Sopenharmony_ci} 236094332d3Sopenharmony_ci 237094332d3Sopenharmony_cistatic int32_t UnregisterEventCallbackInner(OnReceiveFunc onRecFunc, const char *ifName) 238094332d3Sopenharmony_ci{ 239094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 240094332d3Sopenharmony_ci if (onRecFunc == NULL || ifName == NULL) { 241094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 242094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 243094332d3Sopenharmony_ci } 244094332d3Sopenharmony_ci WifiUnregisterEventCallback(onRecFunc, WIFI_KERNEL_TO_HAL_CLIENT, ifName); 245094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s", __FUNCTION__); 246094332d3Sopenharmony_ci return HDF_SUCCESS; 247094332d3Sopenharmony_ci} 248094332d3Sopenharmony_ci 249094332d3Sopenharmony_cistatic int32_t RegisterHid2dCallbackInner(Hid2dCallback func, const char *ifName) 250094332d3Sopenharmony_ci{ 251094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 252094332d3Sopenharmony_ci int32_t ret; 253094332d3Sopenharmony_ci if (func == NULL || ifName == NULL) { 254094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 255094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 256094332d3Sopenharmony_ci } 257094332d3Sopenharmony_ci ret = WifiRegisterHid2dCallback(func, ifName); 258094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 259094332d3Sopenharmony_ci HDF_LOGE("%s: register hid2d callback fail!", __FUNCTION__); 260094332d3Sopenharmony_ci } 261094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s", __FUNCTION__); 262094332d3Sopenharmony_ci return ret; 263094332d3Sopenharmony_ci} 264094332d3Sopenharmony_ci 265094332d3Sopenharmony_cistatic int32_t UnregisterHid2dCallbackInner(Hid2dCallback func, const char *ifName) 266094332d3Sopenharmony_ci{ 267094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 268094332d3Sopenharmony_ci if (func == NULL || ifName == NULL) { 269094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 270094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 271094332d3Sopenharmony_ci } 272094332d3Sopenharmony_ci WifiUnregisterHid2dCallback(func, ifName); 273094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s", __FUNCTION__); 274094332d3Sopenharmony_ci return HDF_SUCCESS; 275094332d3Sopenharmony_ci} 276094332d3Sopenharmony_ci 277094332d3Sopenharmony_cistatic int32_t ResetDriverInner(uint8_t chipId, const char *ifName) 278094332d3Sopenharmony_ci{ 279094332d3Sopenharmony_ci if (ifName == NULL || chipId >= MAX_WLAN_DEVICE) { 280094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d, chipId = %u", __FUNCTION__, __LINE__, chipId); 281094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 282094332d3Sopenharmony_ci } 283094332d3Sopenharmony_ci return HalCmdSetResetDriver(chipId, ifName); 284094332d3Sopenharmony_ci} 285094332d3Sopenharmony_ci 286094332d3Sopenharmony_cistatic int32_t GetNetDevInfoInner(struct NetDeviceInfoResult *netDeviceInfoResult) 287094332d3Sopenharmony_ci{ 288094332d3Sopenharmony_ci if (netDeviceInfoResult == NULL) { 289094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 290094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 291094332d3Sopenharmony_ci } 292094332d3Sopenharmony_ci return GetNetDeviceInfo(netDeviceInfoResult); 293094332d3Sopenharmony_ci} 294094332d3Sopenharmony_ci 295094332d3Sopenharmony_cistatic int32_t GetPowerModeInner(const char *ifName, uint8_t *mode) 296094332d3Sopenharmony_ci{ 297094332d3Sopenharmony_ci if (ifName == NULL || mode == NULL) { 298094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 299094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 300094332d3Sopenharmony_ci } 301094332d3Sopenharmony_ci 302094332d3Sopenharmony_ci return GetCurrentPowerMode(ifName, mode); 303094332d3Sopenharmony_ci} 304094332d3Sopenharmony_ci 305094332d3Sopenharmony_cistatic int32_t SetPowerModeInner(const char *ifName, uint8_t mode) 306094332d3Sopenharmony_ci{ 307094332d3Sopenharmony_ci if (ifName == NULL || mode >= WIFI_POWER_MODE_NUM) { 308094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 309094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 310094332d3Sopenharmony_ci } 311094332d3Sopenharmony_ci return SetPowerMode(ifName, mode); 312094332d3Sopenharmony_ci} 313094332d3Sopenharmony_ci 314094332d3Sopenharmony_cistatic int32_t StartChannelMeasInner(const char *ifName, const struct MeasParam *measParam) 315094332d3Sopenharmony_ci{ 316094332d3Sopenharmony_ci if (ifName == NULL || measParam == NULL || measParam->channelId < 0) { 317094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 318094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 319094332d3Sopenharmony_ci } 320094332d3Sopenharmony_ci return StartChannelMeas(ifName, measParam); 321094332d3Sopenharmony_ci} 322094332d3Sopenharmony_ci 323094332d3Sopenharmony_cistatic int32_t GetChannelMeasResultInner(const char *ifName, struct MeasResult *measResult) 324094332d3Sopenharmony_ci{ 325094332d3Sopenharmony_ci if (ifName == NULL || measResult == NULL) { 326094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 327094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 328094332d3Sopenharmony_ci } 329094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 330094332d3Sopenharmony_ci} 331094332d3Sopenharmony_ci 332094332d3Sopenharmony_cistatic int32_t SetProjectionScreenParamInner(const char *ifName, const ProjectionScreenParam *param) 333094332d3Sopenharmony_ci{ 334094332d3Sopenharmony_ci if (ifName == NULL || param == NULL) { 335094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 336094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 337094332d3Sopenharmony_ci } 338094332d3Sopenharmony_ci return SetProjectionScreenParam(ifName, param); 339094332d3Sopenharmony_ci} 340094332d3Sopenharmony_ci 341094332d3Sopenharmony_cistatic int32_t SendCmdIoctlInner(const char *ifName, int32_t cmdId, const int8_t *paramBuf, uint32_t paramBufLen) 342094332d3Sopenharmony_ci{ 343094332d3Sopenharmony_ci if (ifName == NULL || paramBuf == NULL) { 344094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 345094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 346094332d3Sopenharmony_ci } 347094332d3Sopenharmony_ci return SendCmdIoctl(ifName, cmdId, paramBuf, paramBufLen); 348094332d3Sopenharmony_ci} 349094332d3Sopenharmony_ci 350094332d3Sopenharmony_cistatic int32_t GetStationInfoInner(const char *ifName, StationInfo *info, const uint8_t *mac, uint32_t macLen) 351094332d3Sopenharmony_ci{ 352094332d3Sopenharmony_ci if (ifName == NULL || info == NULL || mac == NULL || macLen != ETH_ADDR_LEN) { 353094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 354094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 355094332d3Sopenharmony_ci } 356094332d3Sopenharmony_ci return GetStationInfo(ifName, info, mac, macLen); 357094332d3Sopenharmony_ci} 358094332d3Sopenharmony_ci 359094332d3Sopenharmony_cistatic int32_t SendActionFrameInner(const char *ifName, uint32_t freq, const uint8_t *frameData, uint32_t frameDataLen) 360094332d3Sopenharmony_ci{ 361094332d3Sopenharmony_ci if (ifName == NULL || freq == 0 || frameData == NULL || frameDataLen == 0) { 362094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 363094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 364094332d3Sopenharmony_ci } 365094332d3Sopenharmony_ci return WifiSendActionFrame(ifName, freq, frameData, frameDataLen); 366094332d3Sopenharmony_ci} 367094332d3Sopenharmony_ci 368094332d3Sopenharmony_cistatic int32_t RegisterActionFrameReceiverInner(const char *ifName, const uint8_t *match, uint32_t matchLen) 369094332d3Sopenharmony_ci{ 370094332d3Sopenharmony_ci if (ifName == NULL || match == NULL || matchLen == 0) { 371094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 372094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 373094332d3Sopenharmony_ci } 374094332d3Sopenharmony_ci return WifiRegisterActionFrameReceiver(ifName, match, matchLen); 375094332d3Sopenharmony_ci} 376094332d3Sopenharmony_ci 377094332d3Sopenharmony_cistatic int32_t SetPowerSaveModeInner(const char *ifName, int32_t frequency, int32_t mode) 378094332d3Sopenharmony_ci{ 379094332d3Sopenharmony_ci if (ifName == NULL) { 380094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 381094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 382094332d3Sopenharmony_ci } 383094332d3Sopenharmony_ci return WifiSetPowerSaveMode(ifName, frequency, mode); 384094332d3Sopenharmony_ci} 385094332d3Sopenharmony_ci 386094332d3Sopenharmony_cistatic int32_t SetPowerSaveMode(const char *ifName, int32_t frequency, int32_t mode) 387094332d3Sopenharmony_ci{ 388094332d3Sopenharmony_ci HalMutexLock(); 389094332d3Sopenharmony_ci int32_t ret = SetPowerSaveModeInner(ifName, frequency, mode); 390094332d3Sopenharmony_ci HalMutexUnlock(); 391094332d3Sopenharmony_ci return ret; 392094332d3Sopenharmony_ci} 393094332d3Sopenharmony_ci 394094332d3Sopenharmony_cistatic int32_t SetDpiMarkRuleInner(int32_t uid, int32_t protocol, int32_t enable) 395094332d3Sopenharmony_ci{ 396094332d3Sopenharmony_ci return WifiSetDpiMarkRule(uid, protocol, enable); 397094332d3Sopenharmony_ci} 398094332d3Sopenharmony_ci 399094332d3Sopenharmony_cistatic int32_t SetDpiMarkRule(int32_t uid, int32_t protocol, int32_t enable) 400094332d3Sopenharmony_ci{ 401094332d3Sopenharmony_ci HalMutexLock(); 402094332d3Sopenharmony_ci int32_t ret = SetDpiMarkRuleInner(uid, protocol, enable); 403094332d3Sopenharmony_ci HalMutexUnlock(); 404094332d3Sopenharmony_ci return ret; 405094332d3Sopenharmony_ci} 406094332d3Sopenharmony_ci 407094332d3Sopenharmony_cistatic int32_t Start(struct IWiFi *iwifi) 408094332d3Sopenharmony_ci{ 409094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 410094332d3Sopenharmony_ci HalMutexLock(); 411094332d3Sopenharmony_ci int32_t ret = StartInner(iwifi); 412094332d3Sopenharmony_ci HalMutexUnlock(); 413094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 414094332d3Sopenharmony_ci return ret; 415094332d3Sopenharmony_ci} 416094332d3Sopenharmony_ci 417094332d3Sopenharmony_cistatic int32_t Stop(struct IWiFi *iwifi) 418094332d3Sopenharmony_ci{ 419094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 420094332d3Sopenharmony_ci HalMutexLock(); 421094332d3Sopenharmony_ci int32_t ret = StopInner(iwifi); 422094332d3Sopenharmony_ci HalMutexUnlock(); 423094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 424094332d3Sopenharmony_ci return ret; 425094332d3Sopenharmony_ci} 426094332d3Sopenharmony_ci 427094332d3Sopenharmony_cistatic int32_t GetSupportFeature(uint8_t *supType, uint32_t size) 428094332d3Sopenharmony_ci{ 429094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 430094332d3Sopenharmony_ci HalMutexLock(); 431094332d3Sopenharmony_ci int32_t ret = GetSupportFeatureInner(supType, size); 432094332d3Sopenharmony_ci HalMutexUnlock(); 433094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 434094332d3Sopenharmony_ci return ret; 435094332d3Sopenharmony_ci} 436094332d3Sopenharmony_ci 437094332d3Sopenharmony_cistatic int32_t GetSupportCombo(uint64_t *combo, uint32_t size) 438094332d3Sopenharmony_ci{ 439094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 440094332d3Sopenharmony_ci HalMutexLock(); 441094332d3Sopenharmony_ci int32_t ret = GetSupportComboInner(combo, size); 442094332d3Sopenharmony_ci HalMutexUnlock(); 443094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 444094332d3Sopenharmony_ci return ret; 445094332d3Sopenharmony_ci} 446094332d3Sopenharmony_ci 447094332d3Sopenharmony_cistatic int32_t CreateFeature(int32_t type, struct IWiFiBaseFeature **ifeature) 448094332d3Sopenharmony_ci{ 449094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 450094332d3Sopenharmony_ci HalMutexLock(); 451094332d3Sopenharmony_ci int32_t ret = CreateFeatureInner(type, ifeature); 452094332d3Sopenharmony_ci HalMutexUnlock(); 453094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 454094332d3Sopenharmony_ci return ret; 455094332d3Sopenharmony_ci} 456094332d3Sopenharmony_ci 457094332d3Sopenharmony_cistatic int32_t GetFeatureByIfName(const char *ifName, struct IWiFiBaseFeature **ifeature) 458094332d3Sopenharmony_ci{ 459094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 460094332d3Sopenharmony_ci HalMutexLock(); 461094332d3Sopenharmony_ci int32_t ret = HalCmdGetFeatureByIfName(ifName, ifeature); 462094332d3Sopenharmony_ci HalMutexUnlock(); 463094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 464094332d3Sopenharmony_ci return ret; 465094332d3Sopenharmony_ci} 466094332d3Sopenharmony_ci 467094332d3Sopenharmony_cistatic int32_t DestroyFeature(struct IWiFiBaseFeature *ifeature) 468094332d3Sopenharmony_ci{ 469094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 470094332d3Sopenharmony_ci HalMutexLock(); 471094332d3Sopenharmony_ci int32_t ret = DestroyFeatureInner(ifeature); 472094332d3Sopenharmony_ci HalMutexUnlock(); 473094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 474094332d3Sopenharmony_ci return ret; 475094332d3Sopenharmony_ci} 476094332d3Sopenharmony_ci 477094332d3Sopenharmony_cistatic int32_t HalRegisterEventCallback(OnReceiveFunc onRecFunc, const char *ifName) 478094332d3Sopenharmony_ci{ 479094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 480094332d3Sopenharmony_ci HalMutexLock(); 481094332d3Sopenharmony_ci int32_t ret = RegisterEventCallbackInner(onRecFunc, ifName); 482094332d3Sopenharmony_ci HalMutexUnlock(); 483094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 484094332d3Sopenharmony_ci return ret; 485094332d3Sopenharmony_ci} 486094332d3Sopenharmony_ci 487094332d3Sopenharmony_cistatic int32_t HalUnregisterEventCallback(OnReceiveFunc onRecFunc, const char *ifName) 488094332d3Sopenharmony_ci{ 489094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 490094332d3Sopenharmony_ci HalMutexLock(); 491094332d3Sopenharmony_ci int32_t ret = UnregisterEventCallbackInner(onRecFunc, ifName); 492094332d3Sopenharmony_ci HalMutexUnlock(); 493094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 494094332d3Sopenharmony_ci return ret; 495094332d3Sopenharmony_ci} 496094332d3Sopenharmony_ci 497094332d3Sopenharmony_cistatic int32_t HalRegisterHid2dCallback(Hid2dCallback func, const char *ifName) 498094332d3Sopenharmony_ci{ 499094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 500094332d3Sopenharmony_ci HalMutexLock(); 501094332d3Sopenharmony_ci int32_t ret = RegisterHid2dCallbackInner(func, ifName); 502094332d3Sopenharmony_ci HalMutexUnlock(); 503094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 504094332d3Sopenharmony_ci return ret; 505094332d3Sopenharmony_ci} 506094332d3Sopenharmony_ci 507094332d3Sopenharmony_cistatic int32_t HalUnregisterHid2dCallback(Hid2dCallback func, const char *ifName) 508094332d3Sopenharmony_ci{ 509094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 510094332d3Sopenharmony_ci HalMutexLock(); 511094332d3Sopenharmony_ci int32_t ret = UnregisterHid2dCallbackInner(func, ifName); 512094332d3Sopenharmony_ci HalMutexUnlock(); 513094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 514094332d3Sopenharmony_ci return ret; 515094332d3Sopenharmony_ci} 516094332d3Sopenharmony_ci 517094332d3Sopenharmony_cistatic int32_t ResetDriver(const uint8_t chipId, const char *ifName) 518094332d3Sopenharmony_ci{ 519094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 520094332d3Sopenharmony_ci HalMutexLock(); 521094332d3Sopenharmony_ci int32_t ret = ResetDriverInner(chipId, ifName); 522094332d3Sopenharmony_ci HalMutexUnlock(); 523094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 524094332d3Sopenharmony_ci return ret; 525094332d3Sopenharmony_ci} 526094332d3Sopenharmony_ci 527094332d3Sopenharmony_cistatic int32_t GetNetDevInfo(struct NetDeviceInfoResult *netDeviceInfoResult) 528094332d3Sopenharmony_ci{ 529094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 530094332d3Sopenharmony_ci HalMutexLock(); 531094332d3Sopenharmony_ci int32_t ret = GetNetDevInfoInner(netDeviceInfoResult); 532094332d3Sopenharmony_ci HalMutexUnlock(); 533094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 534094332d3Sopenharmony_ci return ret; 535094332d3Sopenharmony_ci} 536094332d3Sopenharmony_ci 537094332d3Sopenharmony_cistatic int32_t WifiGetPowerMode(const char *ifName, uint8_t *mode) 538094332d3Sopenharmony_ci{ 539094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 540094332d3Sopenharmony_ci HalMutexLock(); 541094332d3Sopenharmony_ci int32_t ret = GetPowerModeInner(ifName, mode); 542094332d3Sopenharmony_ci HalMutexUnlock(); 543094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 544094332d3Sopenharmony_ci return ret; 545094332d3Sopenharmony_ci} 546094332d3Sopenharmony_ci 547094332d3Sopenharmony_cistatic int32_t WifiSetPowerMode(const char *ifName, uint8_t mode) 548094332d3Sopenharmony_ci{ 549094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 550094332d3Sopenharmony_ci HalMutexLock(); 551094332d3Sopenharmony_ci int32_t ret = SetPowerModeInner(ifName, mode); 552094332d3Sopenharmony_ci HalMutexUnlock(); 553094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 554094332d3Sopenharmony_ci return ret; 555094332d3Sopenharmony_ci} 556094332d3Sopenharmony_ci 557094332d3Sopenharmony_cistatic int32_t WifiStartChannelMeas(const char *ifName, const struct MeasParam *measParam) 558094332d3Sopenharmony_ci{ 559094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 560094332d3Sopenharmony_ci HalMutexLock(); 561094332d3Sopenharmony_ci int32_t ret = StartChannelMeasInner(ifName, measParam); 562094332d3Sopenharmony_ci HalMutexUnlock(); 563094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 564094332d3Sopenharmony_ci return ret; 565094332d3Sopenharmony_ci} 566094332d3Sopenharmony_ci 567094332d3Sopenharmony_cistatic int32_t WifiGetChannelMeasResult(const char *ifName, struct MeasResult *measResult) 568094332d3Sopenharmony_ci{ 569094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 570094332d3Sopenharmony_ci HalMutexLock(); 571094332d3Sopenharmony_ci int32_t ret = GetChannelMeasResultInner(ifName, measResult); 572094332d3Sopenharmony_ci HalMutexUnlock(); 573094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 574094332d3Sopenharmony_ci return ret; 575094332d3Sopenharmony_ci} 576094332d3Sopenharmony_ci 577094332d3Sopenharmony_cistatic int32_t WifiSetProjectionScreenParam(const char *ifName, const ProjectionScreenParam *param) 578094332d3Sopenharmony_ci{ 579094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 580094332d3Sopenharmony_ci HalMutexLock(); 581094332d3Sopenharmony_ci int32_t ret = SetProjectionScreenParamInner(ifName, param); 582094332d3Sopenharmony_ci HalMutexUnlock(); 583094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 584094332d3Sopenharmony_ci return ret; 585094332d3Sopenharmony_ci} 586094332d3Sopenharmony_ci 587094332d3Sopenharmony_cistatic int32_t WifiSendCmdIoctl(const char *ifName, int32_t cmdId, const int8_t *paramBuf, uint32_t paramBufLen) 588094332d3Sopenharmony_ci{ 589094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 590094332d3Sopenharmony_ci HalMutexLock(); 591094332d3Sopenharmony_ci int32_t ret = SendCmdIoctlInner(ifName, cmdId, paramBuf, paramBufLen); 592094332d3Sopenharmony_ci HalMutexUnlock(); 593094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 594094332d3Sopenharmony_ci return ret; 595094332d3Sopenharmony_ci} 596094332d3Sopenharmony_ci 597094332d3Sopenharmony_cistatic int32_t WifiGetStationInfo(const char *ifName, StationInfo *info, const uint8_t *mac, uint32_t macLen) 598094332d3Sopenharmony_ci{ 599094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 600094332d3Sopenharmony_ci HalMutexLock(); 601094332d3Sopenharmony_ci int32_t ret = GetStationInfoInner(ifName, info, mac, macLen); 602094332d3Sopenharmony_ci HalMutexUnlock(); 603094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 604094332d3Sopenharmony_ci return ret; 605094332d3Sopenharmony_ci} 606094332d3Sopenharmony_ci 607094332d3Sopenharmony_cistatic int32_t SendActionFrame(const char *ifName, uint32_t freq, const uint8_t *frameData, uint32_t frameDataLen) 608094332d3Sopenharmony_ci{ 609094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 610094332d3Sopenharmony_ci HalMutexLock(); 611094332d3Sopenharmony_ci int32_t ret = SendActionFrameInner(ifName, freq, frameData, frameDataLen); 612094332d3Sopenharmony_ci HalMutexUnlock(); 613094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 614094332d3Sopenharmony_ci return ret; 615094332d3Sopenharmony_ci} 616094332d3Sopenharmony_ci 617094332d3Sopenharmony_cistatic int32_t RegisterActionFrameReceiver(const char *ifName, const uint8_t *match, uint32_t matchLen) 618094332d3Sopenharmony_ci{ 619094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 620094332d3Sopenharmony_ci HalMutexLock(); 621094332d3Sopenharmony_ci int32_t ret = RegisterActionFrameReceiverInner(ifName, match, matchLen); 622094332d3Sopenharmony_ci HalMutexUnlock(); 623094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, ret:%{public}d", __FUNCTION__, ret); 624094332d3Sopenharmony_ci return ret; 625094332d3Sopenharmony_ci} 626094332d3Sopenharmony_ci 627094332d3Sopenharmony_ciint32_t WifiConstruct(struct IWiFi **wifiInstance) 628094332d3Sopenharmony_ci{ 629094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 630094332d3Sopenharmony_ci static bool isInited = false; 631094332d3Sopenharmony_ci static struct IWiFi singleWifiInstance; 632094332d3Sopenharmony_ci 633094332d3Sopenharmony_ci if (!isInited) { 634094332d3Sopenharmony_ci if (HalMutexInit() != HDF_SUCCESS) { 635094332d3Sopenharmony_ci HDF_LOGE("%s: HalMutexInit failed, line: %d", __FUNCTION__, __LINE__); 636094332d3Sopenharmony_ci return HDF_FAILURE; 637094332d3Sopenharmony_ci } 638094332d3Sopenharmony_ci 639094332d3Sopenharmony_ci singleWifiInstance.start = Start; 640094332d3Sopenharmony_ci singleWifiInstance.stop = Stop; 641094332d3Sopenharmony_ci singleWifiInstance.getSupportFeature = GetSupportFeature; 642094332d3Sopenharmony_ci singleWifiInstance.getSupportCombo = GetSupportCombo; 643094332d3Sopenharmony_ci singleWifiInstance.createFeature = CreateFeature; 644094332d3Sopenharmony_ci singleWifiInstance.getFeatureByIfName = GetFeatureByIfName; 645094332d3Sopenharmony_ci singleWifiInstance.destroyFeature = DestroyFeature; 646094332d3Sopenharmony_ci singleWifiInstance.registerEventCallback = HalRegisterEventCallback; 647094332d3Sopenharmony_ci singleWifiInstance.unregisterEventCallback = HalUnregisterEventCallback; 648094332d3Sopenharmony_ci singleWifiInstance.resetDriver = ResetDriver; 649094332d3Sopenharmony_ci singleWifiInstance.getNetDevInfo = GetNetDevInfo; 650094332d3Sopenharmony_ci singleWifiInstance.getPowerMode = WifiGetPowerMode; 651094332d3Sopenharmony_ci singleWifiInstance.setPowerMode = WifiSetPowerMode; 652094332d3Sopenharmony_ci singleWifiInstance.startChannelMeas = WifiStartChannelMeas; 653094332d3Sopenharmony_ci singleWifiInstance.getChannelMeasResult = WifiGetChannelMeasResult; 654094332d3Sopenharmony_ci singleWifiInstance.setProjectionScreenParam = WifiSetProjectionScreenParam; 655094332d3Sopenharmony_ci singleWifiInstance.sendCmdIoctl = WifiSendCmdIoctl; 656094332d3Sopenharmony_ci singleWifiInstance.registerHid2dCallback = HalRegisterHid2dCallback; 657094332d3Sopenharmony_ci singleWifiInstance.unregisterHid2dCallback = HalUnregisterHid2dCallback; 658094332d3Sopenharmony_ci singleWifiInstance.getStationInfo = WifiGetStationInfo; 659094332d3Sopenharmony_ci singleWifiInstance.sendActionFrame = SendActionFrame; 660094332d3Sopenharmony_ci singleWifiInstance.registerActionFrameReceiver = RegisterActionFrameReceiver; 661094332d3Sopenharmony_ci singleWifiInstance.setPowerSaveMode = SetPowerSaveMode; 662094332d3Sopenharmony_ci singleWifiInstance.setDpiMarkRule = SetDpiMarkRule; 663094332d3Sopenharmony_ci InitIWiFiList(); 664094332d3Sopenharmony_ci isInited = true; 665094332d3Sopenharmony_ci } 666094332d3Sopenharmony_ci (*wifiInstance) = &singleWifiInstance; 667094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s, isInited:%{public}d", __FUNCTION__, isInited); 668094332d3Sopenharmony_ci return HDF_SUCCESS; 669094332d3Sopenharmony_ci} 670094332d3Sopenharmony_ci 671094332d3Sopenharmony_ciint32_t WifiDestruct(struct IWiFi **wifiInstance) 672094332d3Sopenharmony_ci{ 673094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s", __FUNCTION__); 674094332d3Sopenharmony_ci if (wifiInstance == NULL) { 675094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 676094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 677094332d3Sopenharmony_ci } 678094332d3Sopenharmony_ci *wifiInstance = NULL; 679094332d3Sopenharmony_ci if (HalMutexDestroy() != HDF_SUCCESS) { 680094332d3Sopenharmony_ci HDF_LOGE("%s: HalMutexDestroy failed, line: %d", __FUNCTION__, __LINE__); 681094332d3Sopenharmony_ci return HDF_FAILURE; 682094332d3Sopenharmony_ci } 683094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s", __FUNCTION__); 684094332d3Sopenharmony_ci return HDF_SUCCESS; 685094332d3Sopenharmony_ci} 686094332d3Sopenharmony_ci 687094332d3Sopenharmony_ci#ifdef __cplusplus 688094332d3Sopenharmony_ci#if __cplusplus 689094332d3Sopenharmony_ci} 690094332d3Sopenharmony_ci#endif 691094332d3Sopenharmony_ci#endif 692