• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <mutex>
17 #include "wifi_ap_hal_interface.h"
18 #include "hal_device_manage.h"
19 #include "wifi_log.h"
20 #include "wifi_error_no.h"
21 
22 #undef LOG_TAG
23 #define LOG_TAG "WifiApHalInterface"
24 
25 namespace OHOS {
26 namespace Wifi {
27 static IWifiApMonitorEventCallback g_cb = {nullptr, nullptr};
GetInstance(void)28 WifiApHalInterface &WifiApHalInterface::GetInstance(void)
29 {
30     static WifiApHalInterface inst;
31     static int initFlag = 0;
32     static std::mutex initMutex;
33     if (initFlag == 0) {
34         std::unique_lock<std::mutex> lock(initMutex);
35         if (initFlag == 0) {
36 #ifdef HDI_WPA_INTERFACE_SUPPORT
37             if (inst.InitHdiWpaClient()) {
38                 initFlag = 1;
39             }
40 #endif
41         }
42     }
43     return inst;
44 }
45 
StartAp(int id,const std::string & ifaceName)46 WifiErrorNo WifiApHalInterface::StartAp(int id, const std::string &ifaceName)
47 {
48     WifiErrorNo ret = WIFI_HAL_OPT_FAILED;
49 #ifdef HDI_WPA_INTERFACE_SUPPORT
50     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
51     ret = mHdiWpaClient->StartAp(id, ifaceName);
52 #endif
53     return ret;
54 }
55 
StopAp(int id)56 WifiErrorNo WifiApHalInterface::StopAp(int id)
57 {
58     WifiErrorNo ret = WIFI_HAL_OPT_FAILED;
59 #ifdef HDI_WPA_INTERFACE_SUPPORT
60     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
61     ret = mHdiWpaClient->StopAp(id);
62 #endif
63     return ret;
64 }
65 
SetSoftApConfig(const std::string & ifName,const HotspotConfig & config,int id)66 WifiErrorNo WifiApHalInterface::SetSoftApConfig(const std::string &ifName, const HotspotConfig &config, int id)
67 {
68 #ifdef HDI_WPA_INTERFACE_SUPPORT
69     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
70     return mHdiWpaClient->SetSoftApConfig(ifName, config, id);
71 #endif
72     return WIFI_HAL_OPT_FAILED;
73 }
74 
SetMaxConnectNum(const std::string & ifName,int32_t channel,int32_t maxConn)75 WifiErrorNo WifiApHalInterface::SetMaxConnectNum(const std::string &ifName, int32_t channel, int32_t maxConn)
76 {
77 #ifdef HDI_WPA_INTERFACE_SUPPORT
78     if (!HalDeviceManager::GetInstance().SetMaxConnectNum(ifName, channel, maxConn)) {
79         return WIFI_HAL_OPT_FAILED;
80     }
81     return WIFI_HAL_OPT_OK;
82 #endif
83     return WIFI_HAL_OPT_FAILED;
84 }
85 
EnableAp(int id)86 WifiErrorNo WifiApHalInterface::EnableAp(int id)
87 {
88 #ifdef HDI_WPA_INTERFACE_SUPPORT
89     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
90     return mHdiWpaClient->EnableAp(id);
91 #endif
92     return WIFI_HAL_OPT_FAILED;
93 }
94 
SetApPasswd(const char * pass,int id)95 WifiErrorNo WifiApHalInterface::SetApPasswd(const char *pass, int id)
96 {
97 #ifdef HDI_WPA_INTERFACE_SUPPORT
98     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
99     return mHdiWpaClient->SetApPasswd(pass, id);
100 #endif
101     return WIFI_HAL_OPT_FAILED;
102 }
103 
GetStationList(std::vector<std::string> & result,int id)104 WifiErrorNo WifiApHalInterface::GetStationList(std::vector<std::string> &result, int id)
105 {
106 #ifdef HDI_WPA_INTERFACE_SUPPORT
107     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
108     return mHdiWpaClient->GetStationList(result, id);
109 #endif
110     return WIFI_HAL_OPT_FAILED;
111 }
112 
SetSoftApBlockList(const std::string & ifaceName,const std::vector<std::string> & blockList)113 WifiErrorNo WifiApHalInterface::SetSoftApBlockList(const std::string &ifaceName,
114     const std::vector<std::string> &blockList)
115 {
116 #ifdef HDI_CHIP_INTERFACE_SUPPORT
117     if (!HalDeviceManager::GetInstance().SetBlockList(ifaceName, ifaceName, blockList)) {
118         return WIFI_HAL_OPT_FAILED;
119     }
120     return WIFI_HAL_OPT_OK;
121 #endif
122     return WIFI_HAL_OPT_FAILED;
123 }
124 
DisAssociateSta(const std::string & ifaceName,const std::string & mac)125 WifiErrorNo WifiApHalInterface::DisAssociateSta(const std::string &ifaceName, const std::string &mac)
126 {
127 #ifdef HDI_CHIP_INTERFACE_SUPPORT
128     if (!HalDeviceManager::GetInstance().DisAssociateSta(ifaceName, ifaceName, mac)) {
129         return WIFI_HAL_OPT_FAILED;
130     }
131     return WIFI_HAL_OPT_OK;
132 #endif
133     return WIFI_HAL_OPT_FAILED;
134 }
135 
AddBlockByMac(const std::string & mac,int id)136 WifiErrorNo WifiApHalInterface::AddBlockByMac(const std::string &mac, int id)
137 {
138 #ifdef HDI_WPA_INTERFACE_SUPPORT
139     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
140     return mHdiWpaClient->AddBlockByMac(mac, id);
141 #endif
142     return WIFI_HAL_OPT_FAILED;
143 }
144 
DelBlockByMac(const std::string & mac,int id)145 WifiErrorNo WifiApHalInterface::DelBlockByMac(const std::string &mac, int id)
146 {
147 #ifdef HDI_WPA_INTERFACE_SUPPORT
148     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
149     return mHdiWpaClient->DelBlockByMac(mac, id);
150 #endif
151     return WIFI_HAL_OPT_FAILED;
152 }
153 
RemoveStation(const std::string & mac,int id)154 WifiErrorNo WifiApHalInterface::RemoveStation(const std::string &mac, int id)
155 {
156 #ifdef HDI_WPA_INTERFACE_SUPPORT
157     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
158     return mHdiWpaClient->RemoveStation(mac, id);
159 #endif
160     return WIFI_HAL_OPT_FAILED;
161 }
162 
GetFrequenciesByBand(const std::string & ifaceName,int band,std::vector<int> & frequencies)163 WifiErrorNo WifiApHalInterface::GetFrequenciesByBand(const std::string &ifaceName,  int band,
164     std::vector<int> &frequencies)
165 {
166 #ifdef HDI_CHIP_INTERFACE_SUPPORT
167     if (!HalDeviceManager::GetInstance().GetFrequenciesByBand(ifaceName, band, frequencies)) {
168         return WIFI_HAL_OPT_FAILED;
169     }
170     return WIFI_HAL_OPT_OK;
171 #endif
172     return WIFI_HAL_OPT_FAILED;
173 }
174 
RegisterApEvent(IWifiApMonitorEventCallback callback,int id)175 WifiErrorNo WifiApHalInterface::RegisterApEvent(IWifiApMonitorEventCallback callback, int id)
176 {
177     WifiErrorNo err = WIFI_HAL_OPT_FAILED;
178 #ifdef HDI_WPA_INTERFACE_SUPPORT
179     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
180     err = mHdiWpaClient->RegisterApEvent(callback, id);
181 #endif
182     if (err == WIFI_HAL_OPT_OK || callback.onStaJoinOrLeave == nullptr) {
183         mApCallback[id] = callback;
184     }
185     return err;
186 }
187 
SetWifiCountryCode(const std::string & ifaceName,const std::string & code)188 WifiErrorNo WifiApHalInterface::SetWifiCountryCode(const std::string &ifaceName, const std::string &code)
189 {
190 #ifdef HDI_CHIP_INTERFACE_SUPPORT
191     if (!HalDeviceManager::GetInstance().SetWifiCountryCode(ifaceName, code)) {
192         return WIFI_HAL_OPT_FAILED;
193     }
194     return WIFI_HAL_OPT_OK;
195 #endif
196     return WIFI_HAL_OPT_FAILED;
197 }
198 
DisconnectStaByMac(const std::string & mac,int id)199 WifiErrorNo WifiApHalInterface::DisconnectStaByMac(const std::string &mac, int id)
200 {
201 #ifdef HDI_WPA_INTERFACE_SUPPORT
202     CHECK_NULL_AND_RETURN(mHdiWpaClient, WIFI_HAL_OPT_FAILED);
203     return mHdiWpaClient->ReqDisconnectStaByMac(mac, id);
204 #endif
205     return WIFI_HAL_OPT_FAILED;
206 }
207 
GetApCallbackInst(int id) const208 const IWifiApMonitorEventCallback &WifiApHalInterface::GetApCallbackInst(int id) const
209 {
210     auto iter = mApCallback.find(id);
211     if (iter != mApCallback.end()) {
212         return iter->second;
213     }
214     return g_cb;
215 }
216 
GetPowerModel(const std::string & ifaceName,int & model)217 WifiErrorNo WifiApHalInterface::GetPowerModel(const std::string &ifaceName, int& model)
218 {
219 #ifdef HDI_CHIP_INTERFACE_SUPPORT
220     if (!HalDeviceManager::GetInstance().GetPowerModel(ifaceName, model)) {
221         return WIFI_HAL_OPT_FAILED;
222     }
223     return WIFI_HAL_OPT_OK;
224 #endif
225     return WIFI_HAL_OPT_FAILED;
226 }
227 
SetPowerModel(const std::string & ifaceName,int model)228 WifiErrorNo WifiApHalInterface::SetPowerModel(const std::string &ifaceName, int model)
229 {
230 #ifdef HDI_CHIP_INTERFACE_SUPPORT
231     if (!HalDeviceManager::GetInstance().SetPowerModel(ifaceName, model)) {
232         return WIFI_HAL_OPT_FAILED;
233     }
234     return WIFI_HAL_OPT_OK;
235 #endif
236     return WIFI_HAL_OPT_FAILED;
237 }
238 
SetConnectMacAddr(const std::string & ifaceName,const std::string & mac)239 WifiErrorNo WifiApHalInterface::SetConnectMacAddr(const std::string &ifaceName, const std::string &mac)
240 {
241 #ifdef HDI_CHIP_INTERFACE_SUPPORT
242     if (!HalDeviceManager::GetInstance().SetApMacAddress(ifaceName, mac)) {
243         return WIFI_HAL_OPT_FAILED;
244     }
245     return WIFI_HAL_OPT_OK;
246 #endif
247     return WIFI_HAL_OPT_FAILED;
248 }
249 }  // namespace Wifi
250 }  // namespace OHOS