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_sta_feature.h" 17094332d3Sopenharmony_ci#include "hdf_base.h" 18094332d3Sopenharmony_ci#include "hdf_log.h" 19094332d3Sopenharmony_ci#include "securec.h" 20094332d3Sopenharmony_ci#include "wifi_hal_cmd.h" 21094332d3Sopenharmony_ci#include "wifi_hal_util.h" 22094332d3Sopenharmony_ci 23094332d3Sopenharmony_ci#ifdef __cplusplus 24094332d3Sopenharmony_ci#if __cplusplus 25094332d3Sopenharmony_ciextern "C" { 26094332d3Sopenharmony_ci#endif 27094332d3Sopenharmony_ci#endif 28094332d3Sopenharmony_ci 29094332d3Sopenharmony_cistatic int32_t SetScanningMacAddressInner(const struct IWiFiSta *staFeature, unsigned char *scanMac, uint8_t len) 30094332d3Sopenharmony_ci{ 31094332d3Sopenharmony_ci if (staFeature == NULL || scanMac == NULL || len != WIFI_MAC_ADDR_LENGTH) { 32094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 33094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 34094332d3Sopenharmony_ci } 35094332d3Sopenharmony_ci return HalCmdSetScanningMacAddress(staFeature->baseFeature.ifName, scanMac, len); 36094332d3Sopenharmony_ci} 37094332d3Sopenharmony_ci 38094332d3Sopenharmony_cistatic int32_t SetScanningMacAddress(const struct IWiFiSta *staFeature, unsigned char *scanMac, uint8_t len) 39094332d3Sopenharmony_ci{ 40094332d3Sopenharmony_ci HalMutexLock(); 41094332d3Sopenharmony_ci int32_t ret = SetScanningMacAddressInner(staFeature, scanMac, len); 42094332d3Sopenharmony_ci HalMutexUnlock(); 43094332d3Sopenharmony_ci return ret; 44094332d3Sopenharmony_ci} 45094332d3Sopenharmony_ci 46094332d3Sopenharmony_cistatic int32_t StartScanInner(const char *ifName, WifiScan *scan) 47094332d3Sopenharmony_ci{ 48094332d3Sopenharmony_ci if (ifName == NULL || scan == NULL) { 49094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 50094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 51094332d3Sopenharmony_ci } 52094332d3Sopenharmony_ci return HalCmdStartScanInner(ifName, scan); 53094332d3Sopenharmony_ci} 54094332d3Sopenharmony_ci 55094332d3Sopenharmony_cistatic int32_t StartScan(const char *ifName, WifiScan *scan) 56094332d3Sopenharmony_ci{ 57094332d3Sopenharmony_ci HalMutexLock(); 58094332d3Sopenharmony_ci int32_t ret = StartScanInner(ifName, scan); 59094332d3Sopenharmony_ci HalMutexUnlock(); 60094332d3Sopenharmony_ci return ret; 61094332d3Sopenharmony_ci} 62094332d3Sopenharmony_ci 63094332d3Sopenharmony_cistatic int32_t StartPnoScanInner(const char *ifName, const WifiPnoSettings *pnoSettings) 64094332d3Sopenharmony_ci{ 65094332d3Sopenharmony_ci if (ifName == NULL || pnoSettings == NULL) { 66094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 67094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 68094332d3Sopenharmony_ci } 69094332d3Sopenharmony_ci return HalCmdStartPnoScan(ifName, pnoSettings); 70094332d3Sopenharmony_ci} 71094332d3Sopenharmony_ci 72094332d3Sopenharmony_cistatic int32_t StartPnoScan(const char *ifName, const WifiPnoSettings *pnoSettings) 73094332d3Sopenharmony_ci{ 74094332d3Sopenharmony_ci HalMutexLock(); 75094332d3Sopenharmony_ci int32_t ret = StartPnoScanInner(ifName, pnoSettings); 76094332d3Sopenharmony_ci HalMutexUnlock(); 77094332d3Sopenharmony_ci return ret; 78094332d3Sopenharmony_ci} 79094332d3Sopenharmony_ci 80094332d3Sopenharmony_cistatic int32_t StopPnoScanInner(const char *ifName) 81094332d3Sopenharmony_ci{ 82094332d3Sopenharmony_ci if (ifName == NULL) { 83094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 84094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 85094332d3Sopenharmony_ci } 86094332d3Sopenharmony_ci return HalCmdStopPnoScan(ifName); 87094332d3Sopenharmony_ci} 88094332d3Sopenharmony_ci 89094332d3Sopenharmony_cistatic int32_t StopPnoScan(const char *ifName) 90094332d3Sopenharmony_ci{ 91094332d3Sopenharmony_ci HalMutexLock(); 92094332d3Sopenharmony_ci int32_t ret = StopPnoScanInner(ifName); 93094332d3Sopenharmony_ci HalMutexUnlock(); 94094332d3Sopenharmony_ci return ret; 95094332d3Sopenharmony_ci} 96094332d3Sopenharmony_ci 97094332d3Sopenharmony_cistatic int32_t GetSignalPollInfoInner(const char *ifName, struct SignalResult *signalResult) 98094332d3Sopenharmony_ci{ 99094332d3Sopenharmony_ci if (ifName == NULL || signalResult == NULL) { 100094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 101094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 102094332d3Sopenharmony_ci } 103094332d3Sopenharmony_ci return HalCmdGetSignalPollInfo(ifName, signalResult); 104094332d3Sopenharmony_ci} 105094332d3Sopenharmony_ci 106094332d3Sopenharmony_cistatic int32_t GetSignalPollInfo(const char *ifName, struct SignalResult *signalResult) 107094332d3Sopenharmony_ci{ 108094332d3Sopenharmony_ci HalMutexLock(); 109094332d3Sopenharmony_ci int32_t ret = GetSignalPollInfoInner(ifName, signalResult); 110094332d3Sopenharmony_ci HalMutexUnlock(); 111094332d3Sopenharmony_ci return ret; 112094332d3Sopenharmony_ci} 113094332d3Sopenharmony_ci 114094332d3Sopenharmony_ciint32_t InitStaFeature(struct IWiFiSta **fe) 115094332d3Sopenharmony_ci{ 116094332d3Sopenharmony_ci if (fe == NULL || *fe == NULL) { 117094332d3Sopenharmony_ci HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__); 118094332d3Sopenharmony_ci return HDF_ERR_INVALID_PARAM; 119094332d3Sopenharmony_ci } 120094332d3Sopenharmony_ci if (InitBaseFeature((struct IWiFiBaseFeature **)fe) != HDF_SUCCESS) { 121094332d3Sopenharmony_ci HDF_LOGE("%s: init base feature, line: %d", __FUNCTION__, __LINE__); 122094332d3Sopenharmony_ci return HDF_FAILURE; 123094332d3Sopenharmony_ci } 124094332d3Sopenharmony_ci (*fe)->setScanningMacAddress = SetScanningMacAddress; 125094332d3Sopenharmony_ci (*fe)->startScan = StartScan; 126094332d3Sopenharmony_ci (*fe)->startPnoScan = StartPnoScan; 127094332d3Sopenharmony_ci (*fe)->stopPnoScan = StopPnoScan; 128094332d3Sopenharmony_ci (*fe)->getSignalPollInfo = GetSignalPollInfo; 129094332d3Sopenharmony_ci return HDF_SUCCESS; 130094332d3Sopenharmony_ci} 131094332d3Sopenharmony_ci 132094332d3Sopenharmony_ci#ifdef __cplusplus 133094332d3Sopenharmony_ci#if __cplusplus 134094332d3Sopenharmony_ci} 135094332d3Sopenharmony_ci#endif 136094332d3Sopenharmony_ci#endif