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_cmd.h" 17094332d3Sopenharmony_ci#include <osal_mem.h> 18094332d3Sopenharmony_ci#include "hdf_log.h" 19094332d3Sopenharmony_ci#include "securec.h" 20094332d3Sopenharmony_ci#include "wifi_hal_sta_feature.h" 21094332d3Sopenharmony_ci 22094332d3Sopenharmony_ci#ifdef __cplusplus 23094332d3Sopenharmony_ci#if __cplusplus 24094332d3Sopenharmony_ciextern "C" { 25094332d3Sopenharmony_ci#endif 26094332d3Sopenharmony_ci#endif 27094332d3Sopenharmony_ci 28094332d3Sopenharmony_cistatic struct DListHead g_networkHead = {0}; 29094332d3Sopenharmony_ci 30094332d3Sopenharmony_cistruct DListHead *GetNetworkHead(void) 31094332d3Sopenharmony_ci{ 32094332d3Sopenharmony_ci return &g_networkHead; 33094332d3Sopenharmony_ci} 34094332d3Sopenharmony_ci 35094332d3Sopenharmony_ciint32_t HalCmdGetAvailableNetwork(void) 36094332d3Sopenharmony_ci{ 37094332d3Sopenharmony_ci int32_t ret; 38094332d3Sopenharmony_ci struct NetworkInfoResult networkInfo = { 0 }; 39094332d3Sopenharmony_ci uint32_t i; 40094332d3Sopenharmony_ci 41094332d3Sopenharmony_ci ret = GetUsableNetworkInfo(&networkInfo); 42094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 43094332d3Sopenharmony_ci HDF_LOGE("%s: get network info failed", __FUNCTION__); 44094332d3Sopenharmony_ci return ret; 45094332d3Sopenharmony_ci } 46094332d3Sopenharmony_ci if (!DListIsEmpty(&g_networkHead)) { 47094332d3Sopenharmony_ci ClearIWiFiList(); 48094332d3Sopenharmony_ci } 49094332d3Sopenharmony_ci for (i = 0; i < networkInfo.nums; i++) { 50094332d3Sopenharmony_ci struct IWiFiList *networkList = (struct IWiFiList *)malloc(sizeof(struct IWiFiList)); 51094332d3Sopenharmony_ci if (networkList == NULL) { 52094332d3Sopenharmony_ci HDF_LOGE("%s: malloc failed, line: %d", __FUNCTION__, __LINE__); 53094332d3Sopenharmony_ci ClearIWiFiList(); 54094332d3Sopenharmony_ci return HDF_FAILURE; 55094332d3Sopenharmony_ci } 56094332d3Sopenharmony_ci (void)memset_s(networkList, sizeof(struct IWiFiList), 0, sizeof(struct IWiFiList)); 57094332d3Sopenharmony_ci DListInsertTail(&networkList->entry, &g_networkHead); 58094332d3Sopenharmony_ci if (memcpy_s(networkList->ifName, IFNAME_MAX_LEN, networkInfo.infos[i].name, 59094332d3Sopenharmony_ci strlen(networkInfo.infos[i].name)) != EOK) { 60094332d3Sopenharmony_ci HDF_LOGE("%s: memcpy_s failed, line: %d", __FUNCTION__, __LINE__); 61094332d3Sopenharmony_ci ClearIWiFiList(); 62094332d3Sopenharmony_ci return HDF_FAILURE; 63094332d3Sopenharmony_ci } 64094332d3Sopenharmony_ci if (memcpy_s(networkList->supportMode, PROTOCOL_80211_IFTYPE_NUM, 65094332d3Sopenharmony_ci networkInfo.infos[i].supportMode, PROTOCOL_80211_IFTYPE_NUM) != EOK) { 66094332d3Sopenharmony_ci HDF_LOGE("%s: memcpy_s failed, line: %d", __FUNCTION__, __LINE__); 67094332d3Sopenharmony_ci ClearIWiFiList(); 68094332d3Sopenharmony_ci return HDF_FAILURE; 69094332d3Sopenharmony_ci } 70094332d3Sopenharmony_ci networkList->ifeature = NULL; 71094332d3Sopenharmony_ci } 72094332d3Sopenharmony_ci return ret; 73094332d3Sopenharmony_ci} 74094332d3Sopenharmony_ci 75094332d3Sopenharmony_cistatic void GetSupportTypeByList(uint8_t *supType) 76094332d3Sopenharmony_ci{ 77094332d3Sopenharmony_ci int32_t i; 78094332d3Sopenharmony_ci struct IWiFiList *networkList = NULL; 79094332d3Sopenharmony_ci 80094332d3Sopenharmony_ci DLIST_FOR_EACH_ENTRY(networkList, &g_networkHead, struct IWiFiList, entry) { 81094332d3Sopenharmony_ci for (i = 0; i < PROTOCOL_80211_IFTYPE_NUM; i++) { 82094332d3Sopenharmony_ci if (networkList->supportMode[i] == 1) { 83094332d3Sopenharmony_ci supType[i] = 1; 84094332d3Sopenharmony_ci } 85094332d3Sopenharmony_ci } 86094332d3Sopenharmony_ci } 87094332d3Sopenharmony_ci} 88094332d3Sopenharmony_ci 89094332d3Sopenharmony_ciint32_t HalCmdGetSupportType(uint8_t *supType) 90094332d3Sopenharmony_ci{ 91094332d3Sopenharmony_ci int32_t ret; 92094332d3Sopenharmony_ci uint8_t isComboValid; 93094332d3Sopenharmony_ci 94094332d3Sopenharmony_ci GetSupportTypeByList(supType); 95094332d3Sopenharmony_ci ret = IsSupportCombo(&isComboValid); 96094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 97094332d3Sopenharmony_ci HDF_LOGE("%s:IsSupportCombo failed, line: %d", __FUNCTION__, __LINE__); 98094332d3Sopenharmony_ci return ret; 99094332d3Sopenharmony_ci } 100094332d3Sopenharmony_ci supType[PROTOCOL_80211_IFTYPE_NUM] = isComboValid; 101094332d3Sopenharmony_ci 102094332d3Sopenharmony_ci return ret; 103094332d3Sopenharmony_ci} 104094332d3Sopenharmony_ci 105094332d3Sopenharmony_ciint32_t HalCmdGetSupportCombo(uint64_t *supCombo, uint32_t size) 106094332d3Sopenharmony_ci{ 107094332d3Sopenharmony_ci int32_t ret; 108094332d3Sopenharmony_ci 109094332d3Sopenharmony_ci ret = GetComboInfo(supCombo, size); 110094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 111094332d3Sopenharmony_ci HDF_LOGE("%s: GetComboInfo failed, line: %d", __FUNCTION__, __LINE__); 112094332d3Sopenharmony_ci } 113094332d3Sopenharmony_ci return ret; 114094332d3Sopenharmony_ci} 115094332d3Sopenharmony_ci 116094332d3Sopenharmony_ciint32_t HalCmdGetDevMacAddr(const char *ifName, int32_t type, unsigned char *mac, uint8_t len) 117094332d3Sopenharmony_ci{ 118094332d3Sopenharmony_ci int32_t ret; 119094332d3Sopenharmony_ci 120094332d3Sopenharmony_ci ret = GetDevMacAddr(ifName, type, (uint8_t *)mac, len); 121094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 122094332d3Sopenharmony_ci HDF_LOGE("%s:GetDevMacAddr failed, line: %d", __FUNCTION__, __LINE__); 123094332d3Sopenharmony_ci } 124094332d3Sopenharmony_ci return ret; 125094332d3Sopenharmony_ci} 126094332d3Sopenharmony_ci 127094332d3Sopenharmony_ciint32_t HalCmdSetMacAddr(const char *ifName, unsigned char *mac, uint8_t len) 128094332d3Sopenharmony_ci{ 129094332d3Sopenharmony_ci int32_t ret; 130094332d3Sopenharmony_ci 131094332d3Sopenharmony_ci ret = SetMacAddr(ifName, mac, len); 132094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 133094332d3Sopenharmony_ci HDF_LOGE("%s: SetMacAddr failed, ret = %{public}d", __FUNCTION__, ret); 134094332d3Sopenharmony_ci } 135094332d3Sopenharmony_ci return ret; 136094332d3Sopenharmony_ci} 137094332d3Sopenharmony_ci 138094332d3Sopenharmony_ciint32_t HalCmdGetValidFreqWithBand(const char *ifName, int32_t band, int32_t *freqs, 139094332d3Sopenharmony_ci uint32_t size, uint32_t *num) 140094332d3Sopenharmony_ci{ 141094332d3Sopenharmony_ci int32_t ret; 142094332d3Sopenharmony_ci struct FreqInfoResult result; 143094332d3Sopenharmony_ci 144094332d3Sopenharmony_ci result.freqs = OsalMemCalloc(size * sizeof(uint32_t)); 145094332d3Sopenharmony_ci if (result.freqs == NULL) { 146094332d3Sopenharmony_ci HDF_LOGE("%s: OsalMemCalloc failed", __FUNCTION__); 147094332d3Sopenharmony_ci return HDF_FAILURE; 148094332d3Sopenharmony_ci } 149094332d3Sopenharmony_ci 150094332d3Sopenharmony_ci result.txPower = OsalMemCalloc(size * sizeof(uint32_t)); 151094332d3Sopenharmony_ci if (result.txPower == NULL) { 152094332d3Sopenharmony_ci HDF_LOGE("%s: OsalMemCalloc failed", __FUNCTION__); 153094332d3Sopenharmony_ci OsalMemFree(result.freqs); 154094332d3Sopenharmony_ci return HDF_FAILURE; 155094332d3Sopenharmony_ci } 156094332d3Sopenharmony_ci 157094332d3Sopenharmony_ci do { 158094332d3Sopenharmony_ci ret = GetValidFreqByBand(ifName, band, &result, size); 159094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 160094332d3Sopenharmony_ci HDF_LOGE("%s: GetValidFreqByBand failed", __FUNCTION__); 161094332d3Sopenharmony_ci break; 162094332d3Sopenharmony_ci } 163094332d3Sopenharmony_ci if (memcpy_s(freqs, size * sizeof(uint32_t), result.freqs, result.nums * sizeof(uint32_t)) != EOK) { 164094332d3Sopenharmony_ci HDF_LOGE("%s: memcpy failed, line: %d", __FUNCTION__, __LINE__); 165094332d3Sopenharmony_ci ret = HDF_FAILURE; 166094332d3Sopenharmony_ci break; 167094332d3Sopenharmony_ci } 168094332d3Sopenharmony_ci *num = result.nums; 169094332d3Sopenharmony_ci } while (0); 170094332d3Sopenharmony_ci 171094332d3Sopenharmony_ci OsalMemFree(result.txPower); 172094332d3Sopenharmony_ci OsalMemFree(result.freqs); 173094332d3Sopenharmony_ci return ret; 174094332d3Sopenharmony_ci} 175094332d3Sopenharmony_ci 176094332d3Sopenharmony_ciint32_t HalCmdSetTxPower(const char *ifName, int32_t power) 177094332d3Sopenharmony_ci{ 178094332d3Sopenharmony_ci int32_t ret; 179094332d3Sopenharmony_ci ret = SetTxPower(ifName, power); 180094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 181094332d3Sopenharmony_ci HDF_LOGE("%s: SetTxPower failed", __FUNCTION__); 182094332d3Sopenharmony_ci } 183094332d3Sopenharmony_ci return ret; 184094332d3Sopenharmony_ci} 185094332d3Sopenharmony_ci 186094332d3Sopenharmony_ciint32_t HalCmdGetAssociatedStas(const char *ifName, struct StaInfo *staInfo, uint32_t count, uint32_t *num) 187094332d3Sopenharmony_ci{ 188094332d3Sopenharmony_ci if (num == NULL) { 189094332d3Sopenharmony_ci HDF_LOGE("%s: HalCmdGetAssociatedStas num NULL!", __FUNCTION__); 190094332d3Sopenharmony_ci return HDF_FAILURE; 191094332d3Sopenharmony_ci } 192094332d3Sopenharmony_ci int32_t ret; 193094332d3Sopenharmony_ci struct AssocStaInfoResult result; 194094332d3Sopenharmony_ci 195094332d3Sopenharmony_ci ret = GetAssociatedStas(ifName, &result); 196094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 197094332d3Sopenharmony_ci HDF_LOGE("%s: GetAssociatedStas failed", __FUNCTION__); 198094332d3Sopenharmony_ci return ret; 199094332d3Sopenharmony_ci } 200094332d3Sopenharmony_ci if (memcpy_s(staInfo, count * sizeof(*staInfo), result.infos, 201094332d3Sopenharmony_ci result.num * sizeof(struct AssocStaInfo)) != EOK) { 202094332d3Sopenharmony_ci HDF_LOGE("%s: memcpy staInfo failed", __FUNCTION__); 203094332d3Sopenharmony_ci return HDF_FAILURE; 204094332d3Sopenharmony_ci } 205094332d3Sopenharmony_ci *num = result.num; 206094332d3Sopenharmony_ci return ret; 207094332d3Sopenharmony_ci} 208094332d3Sopenharmony_ci 209094332d3Sopenharmony_ciint32_t HalCmdSetCountryCode(const char *ifName, const char *code, uint32_t len) 210094332d3Sopenharmony_ci{ 211094332d3Sopenharmony_ci int32_t ret; 212094332d3Sopenharmony_ci ret = WifiSetCountryCode(ifName, code, len); 213094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 214094332d3Sopenharmony_ci HDF_LOGE("%s: WifiSetCountryCode failed", __FUNCTION__); 215094332d3Sopenharmony_ci } 216094332d3Sopenharmony_ci return ret; 217094332d3Sopenharmony_ci} 218094332d3Sopenharmony_ci 219094332d3Sopenharmony_ciint32_t HalCmdSetScanningMacAddress(const char *ifName, unsigned char *scanMac, uint8_t len) 220094332d3Sopenharmony_ci{ 221094332d3Sopenharmony_ci int32_t ret; 222094332d3Sopenharmony_ci ret = SetScanMacAddr(ifName, scanMac, len); 223094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 224094332d3Sopenharmony_ci HDF_LOGE("%s: SetScanMacAddr failed", __FUNCTION__); 225094332d3Sopenharmony_ci } 226094332d3Sopenharmony_ci return ret; 227094332d3Sopenharmony_ci} 228094332d3Sopenharmony_ci 229094332d3Sopenharmony_ciint32_t HalCmdStartScanInner(const char *ifName, WifiScan *scan) 230094332d3Sopenharmony_ci{ 231094332d3Sopenharmony_ci int32_t ret; 232094332d3Sopenharmony_ci ret = WifiCmdScan(ifName, (WifiScan *)scan); 233094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 234094332d3Sopenharmony_ci HDF_LOGE("%s: WifiStartScan failed", __FUNCTION__); 235094332d3Sopenharmony_ci } 236094332d3Sopenharmony_ci return ret; 237094332d3Sopenharmony_ci} 238094332d3Sopenharmony_ci 239094332d3Sopenharmony_ciint32_t HalCmdGetChipId(const char *ifName, uint8_t *chipId) 240094332d3Sopenharmony_ci{ 241094332d3Sopenharmony_ci int32_t ret; 242094332d3Sopenharmony_ci ret = AcquireChipId(ifName, chipId); 243094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 244094332d3Sopenharmony_ci HDF_LOGE("%s: AcquireChipId failed", __FUNCTION__); 245094332d3Sopenharmony_ci } 246094332d3Sopenharmony_ci return ret; 247094332d3Sopenharmony_ci} 248094332d3Sopenharmony_ci 249094332d3Sopenharmony_ciint32_t HalCmdGetIfNamesByChipId(const uint8_t chipId, char **ifNames, uint32_t *num) 250094332d3Sopenharmony_ci{ 251094332d3Sopenharmony_ci int32_t ret; 252094332d3Sopenharmony_ci ret = GetIfNamesByChipId(chipId, ifNames, num); 253094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 254094332d3Sopenharmony_ci HDF_LOGE("%s: GetIfNamesByChipId failed", __FUNCTION__); 255094332d3Sopenharmony_ci } 256094332d3Sopenharmony_ci return ret; 257094332d3Sopenharmony_ci} 258094332d3Sopenharmony_ci 259094332d3Sopenharmony_ciint32_t HalCmdStartPnoScan(const char *ifName, const WifiPnoSettings *pnoSettings) 260094332d3Sopenharmony_ci{ 261094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s ifName:%{public}s", __FUNCTION__, ifName); 262094332d3Sopenharmony_ci int32_t ret; 263094332d3Sopenharmony_ci ret = WifiStartPnoScan(ifName, pnoSettings); 264094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 265094332d3Sopenharmony_ci HDF_LOGE("%s: WifiStartPnoScan failed", __FUNCTION__); 266094332d3Sopenharmony_ci } 267094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s ret:%{public}d", __FUNCTION__, ret); 268094332d3Sopenharmony_ci return ret; 269094332d3Sopenharmony_ci} 270094332d3Sopenharmony_ci 271094332d3Sopenharmony_ciint32_t HalCmdStopPnoScan(const char *ifName) 272094332d3Sopenharmony_ci{ 273094332d3Sopenharmony_ci HDF_LOGI("hal enter %{public}s ifName:%{public}s", __FUNCTION__, ifName); 274094332d3Sopenharmony_ci int32_t ret; 275094332d3Sopenharmony_ci ret = WifiStopPnoScan(ifName); 276094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 277094332d3Sopenharmony_ci HDF_LOGE("%s: WifiStopPnoScan failed", __FUNCTION__); 278094332d3Sopenharmony_ci } 279094332d3Sopenharmony_ci HDF_LOGI("hal exit %{public}s ret:%{public}d", __FUNCTION__, ret); 280094332d3Sopenharmony_ci return ret; 281094332d3Sopenharmony_ci} 282094332d3Sopenharmony_ci 283094332d3Sopenharmony_ciint32_t HalCmdGetSignalPollInfo(const char *ifName, struct SignalResult *signalResult) 284094332d3Sopenharmony_ci{ 285094332d3Sopenharmony_ci int32_t ret; 286094332d3Sopenharmony_ci ret = WifiGetSignalPollInfo(ifName, signalResult); 287094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 288094332d3Sopenharmony_ci HDF_LOGE("%s: WifiGetSignalInfo failed", __FUNCTION__); 289094332d3Sopenharmony_ci } 290094332d3Sopenharmony_ci return ret; 291094332d3Sopenharmony_ci} 292094332d3Sopenharmony_ci 293094332d3Sopenharmony_ciint32_t HalCmdSetResetDriver(const uint8_t chipId, const char *ifName) 294094332d3Sopenharmony_ci{ 295094332d3Sopenharmony_ci int32_t ret; 296094332d3Sopenharmony_ci ret = SetResetDriver(chipId, ifName); 297094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 298094332d3Sopenharmony_ci HDF_LOGE("%s: SetResetDriver failed", __FUNCTION__); 299094332d3Sopenharmony_ci } 300094332d3Sopenharmony_ci return ret; 301094332d3Sopenharmony_ci} 302094332d3Sopenharmony_ci 303094332d3Sopenharmony_ciint32_t HalCmdGetFeatureByIfName(const char *ifName, struct IWiFiBaseFeature **ifeature) 304094332d3Sopenharmony_ci{ 305094332d3Sopenharmony_ci struct DListHead *networkHead = GetNetworkHead(); 306094332d3Sopenharmony_ci struct IWiFiList *networkNode = NULL; 307094332d3Sopenharmony_ci 308094332d3Sopenharmony_ci if (ifName == NULL || ifeature == NULL) { 309094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 310094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 311094332d3Sopenharmony_ci } 312094332d3Sopenharmony_ci DLIST_FOR_EACH_ENTRY(networkNode, networkHead, struct IWiFiList, entry) { 313094332d3Sopenharmony_ci if (networkNode == NULL) { 314094332d3Sopenharmony_ci HDF_LOGE("%s: networkNode is NULL, line: %d", __FUNCTION__, __LINE__); 315094332d3Sopenharmony_ci return HDF_FAILURE; 316094332d3Sopenharmony_ci } 317094332d3Sopenharmony_ci if (strcmp(networkNode->ifName, ifName) == HDF_SUCCESS) { 318094332d3Sopenharmony_ci *ifeature = networkNode->ifeature; 319094332d3Sopenharmony_ci return HDF_SUCCESS; 320094332d3Sopenharmony_ci } 321094332d3Sopenharmony_ci } 322094332d3Sopenharmony_ci HDF_LOGE("%s: cannot find feature by ifName, line: %d", __FUNCTION__, __LINE__); 323094332d3Sopenharmony_ci return HDF_FAILURE; 324094332d3Sopenharmony_ci} 325094332d3Sopenharmony_ci 326094332d3Sopenharmony_ciint32_t HalCmdGetApBandwidth(const char *ifName, uint8_t *bandwidth) 327094332d3Sopenharmony_ci{ 328094332d3Sopenharmony_ci int32_t ret = ClientGetApBandwidth(ifName, bandwidth); 329094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 330094332d3Sopenharmony_ci HDF_LOGE("%s: get ap bandwidth failed, code=%d", __FUNCTION__, ret); 331094332d3Sopenharmony_ci } 332094332d3Sopenharmony_ci return ret; 333094332d3Sopenharmony_ci} 334094332d3Sopenharmony_ci 335094332d3Sopenharmony_ciint32_t HalCmdResetToFactoryMacAddress(const char *ifName) 336094332d3Sopenharmony_ci{ 337094332d3Sopenharmony_ci int32_t ret; 338094332d3Sopenharmony_ci struct IWiFiBaseFeature *ifeature = NULL; 339094332d3Sopenharmony_ci ret = HalCmdGetFeatureByIfName(ifName, &ifeature); 340094332d3Sopenharmony_ci if (ret != HDF_SUCCESS || ifeature == NULL) { 341094332d3Sopenharmony_ci HDF_LOGE("%s: hal cmd get devmac addr failed, code=%d", __FUNCTION__, ret); 342094332d3Sopenharmony_ci return ret; 343094332d3Sopenharmony_ci } 344094332d3Sopenharmony_ci 345094332d3Sopenharmony_ci unsigned char mac[ETH_ADDR_LEN] = {0}; 346094332d3Sopenharmony_ci ret = HalCmdGetDevMacAddr(ifName, ifeature->type, mac, ETH_ADDR_LEN); 347094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 348094332d3Sopenharmony_ci HDF_LOGE("%s: hal cmd get devmac addr failed, code=%d", __FUNCTION__, ret); 349094332d3Sopenharmony_ci return ret; 350094332d3Sopenharmony_ci } 351094332d3Sopenharmony_ci 352094332d3Sopenharmony_ci ret = HalCmdSetMacAddr(ifName, mac, ETH_ADDR_LEN); 353094332d3Sopenharmony_ci if (ret != HDF_SUCCESS) { 354094332d3Sopenharmony_ci HDF_LOGE("%s: hal cmd set mac addr failed, code=%d", __FUNCTION__, ret); 355094332d3Sopenharmony_ci } 356094332d3Sopenharmony_ci return ret; 357094332d3Sopenharmony_ci} 358094332d3Sopenharmony_ci 359094332d3Sopenharmony_civoid ClearIWiFiList(void) 360094332d3Sopenharmony_ci{ 361094332d3Sopenharmony_ci struct IWiFiList *networkList = NULL; 362094332d3Sopenharmony_ci struct IWiFiList *tmp = NULL; 363094332d3Sopenharmony_ci 364094332d3Sopenharmony_ci DLIST_FOR_EACH_ENTRY_SAFE(networkList, tmp, &g_networkHead, struct IWiFiList, entry) { 365094332d3Sopenharmony_ci DListRemove(&networkList->entry); 366094332d3Sopenharmony_ci free(networkList); 367094332d3Sopenharmony_ci networkList = NULL; 368094332d3Sopenharmony_ci } 369094332d3Sopenharmony_ci InitIWiFiList(); 370094332d3Sopenharmony_ci} 371094332d3Sopenharmony_ci 372094332d3Sopenharmony_civoid InitIWiFiList(void) 373094332d3Sopenharmony_ci{ 374094332d3Sopenharmony_ci DListHeadInit(&g_networkHead); 375094332d3Sopenharmony_ci} 376094332d3Sopenharmony_ci 377094332d3Sopenharmony_ci#ifdef __cplusplus 378094332d3Sopenharmony_ci#if __cplusplus 379094332d3Sopenharmony_ci} 380094332d3Sopenharmony_ci#endif 381094332d3Sopenharmony_ci#endif