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