1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2021 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_ap_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 GetAssociatedStasInner(const struct IWiFiAp *apFeature,
30094332d3Sopenharmony_ci    struct StaInfo *staInfo, uint32_t size, uint32_t *num)
31094332d3Sopenharmony_ci{
32094332d3Sopenharmony_ci    if (apFeature == NULL || staInfo == NULL || size == 0 || num == NULL) {
33094332d3Sopenharmony_ci        HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__);
34094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
35094332d3Sopenharmony_ci    }
36094332d3Sopenharmony_ci    return HalCmdGetAssociatedStas(apFeature->baseFeature.ifName, staInfo, size, num);
37094332d3Sopenharmony_ci}
38094332d3Sopenharmony_ci
39094332d3Sopenharmony_cistatic int32_t SetCountryCodeInner(const struct IWiFiAp *apFeature, const char *code, uint32_t len)
40094332d3Sopenharmony_ci{
41094332d3Sopenharmony_ci    if (apFeature == NULL || code == NULL || len != strlen(code)) {
42094332d3Sopenharmony_ci        HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__);
43094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
44094332d3Sopenharmony_ci    }
45094332d3Sopenharmony_ci    return HalCmdSetCountryCode(apFeature->baseFeature.ifName, code, len);
46094332d3Sopenharmony_ci}
47094332d3Sopenharmony_ci
48094332d3Sopenharmony_cistatic int32_t HalGetAssociatedStas(const struct IWiFiAp *apFeature,
49094332d3Sopenharmony_ci    struct StaInfo *staInfo, uint32_t count, uint32_t *num)
50094332d3Sopenharmony_ci{
51094332d3Sopenharmony_ci    HalMutexLock();
52094332d3Sopenharmony_ci    int32_t ret = GetAssociatedStasInner(apFeature, staInfo, count, num);
53094332d3Sopenharmony_ci    HalMutexUnlock();
54094332d3Sopenharmony_ci    return ret;
55094332d3Sopenharmony_ci}
56094332d3Sopenharmony_ci
57094332d3Sopenharmony_cistatic int32_t HalSetCountryCode(const struct IWiFiAp *apFeature, const char *code, uint32_t len)
58094332d3Sopenharmony_ci{
59094332d3Sopenharmony_ci    HalMutexLock();
60094332d3Sopenharmony_ci    int32_t ret = SetCountryCodeInner(apFeature, code, len);
61094332d3Sopenharmony_ci    HalMutexUnlock();
62094332d3Sopenharmony_ci    return ret;
63094332d3Sopenharmony_ci}
64094332d3Sopenharmony_ci
65094332d3Sopenharmony_cistatic int32_t HalGetApBandwidth(const char *ifName, uint8_t *bandwidth)
66094332d3Sopenharmony_ci{
67094332d3Sopenharmony_ci    HalMutexLock();
68094332d3Sopenharmony_ci    int32_t ret = HalCmdGetApBandwidth(ifName, bandwidth);
69094332d3Sopenharmony_ci    HalMutexUnlock();
70094332d3Sopenharmony_ci    return ret;
71094332d3Sopenharmony_ci}
72094332d3Sopenharmony_ci
73094332d3Sopenharmony_ciint32_t InitApFeature(struct IWiFiAp **fe)
74094332d3Sopenharmony_ci{
75094332d3Sopenharmony_ci    if (fe == NULL || *fe == NULL) {
76094332d3Sopenharmony_ci        HDF_LOGE("%s: input parameter invalid, line: %d", __FUNCTION__, __LINE__);
77094332d3Sopenharmony_ci        return HDF_ERR_INVALID_PARAM;
78094332d3Sopenharmony_ci    }
79094332d3Sopenharmony_ci    if (InitBaseFeature((struct IWiFiBaseFeature **)fe) != HDF_SUCCESS) {
80094332d3Sopenharmony_ci        HDF_LOGE("%s: init base feature, line: %d", __FUNCTION__, __LINE__);
81094332d3Sopenharmony_ci        return HDF_FAILURE;
82094332d3Sopenharmony_ci    }
83094332d3Sopenharmony_ci    (*fe)->getAssociatedStas = HalGetAssociatedStas;
84094332d3Sopenharmony_ci    (*fe)->setCountryCode = HalSetCountryCode;
85094332d3Sopenharmony_ci    (*fe)->getApBandwidth = HalGetApBandwidth;
86094332d3Sopenharmony_ci    return HDF_SUCCESS;
87094332d3Sopenharmony_ci}
88094332d3Sopenharmony_ci
89094332d3Sopenharmony_ci#ifdef __cplusplus
90094332d3Sopenharmony_ci#if __cplusplus
91094332d3Sopenharmony_ci}
92094332d3Sopenharmony_ci#endif
93094332d3Sopenharmony_ci#endif