1 /*
2 * Copyright (C) 2021 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 #include "wifi_idl_inner_interface.h"
16 #include "wifi_chip_hal_interface.h"
17 #include "wifi_ap_hal_interface.h"
18 #include "wifi_sta_hal_interface.h"
19 #include "wifi_supplicant_hal_interface.h"
20 #include "wifi_p2p_hal_interface.h"
21 #include "wifi_global_func.h"
22
GetChipRpcClient(void)23 RpcClient *GetChipRpcClient(void)
24 {
25 return OHOS::Wifi::WifiChipHalInterface::GetInstance().mIdlClient->pRpcClient;
26 }
27
GetApRpcClient(void)28 RpcClient *GetApRpcClient(void)
29 {
30 return OHOS::Wifi::WifiApHalInterface::GetInstance().mIdlClient->pRpcClient;
31 }
32
OnApStaJoinOrLeave(const CStationInfo * info)33 void OnApStaJoinOrLeave(const CStationInfo *info)
34 {
35 if (info == nullptr) {
36 return;
37 }
38 const OHOS::Wifi::IWifiApMonitorEventCallback &cbk =
39 OHOS::Wifi::WifiApHalInterface::GetInstance().GetApCallbackInst();
40 if (cbk.onStaJoinOrLeave) {
41 OHOS::Wifi::WifiApConnectionNofify cbInfo;
42 cbInfo.type = info->type;
43 cbInfo.mac = info->mac;
44 cbk.onStaJoinOrLeave(cbInfo);
45 }
46 }
47
OnApEnableOrDisable(int satus)48 void OnApEnableOrDisable(int satus)
49 {
50 const OHOS::Wifi::IWifiApMonitorEventCallback &cbk =
51 OHOS::Wifi::WifiApHalInterface::GetInstance().GetApCallbackInst();
52 if (cbk.onApEnableOrDisable) {
53 cbk.onApEnableOrDisable(satus);
54 }
55 }
56
GetStaRpcClient(void)57 RpcClient *GetStaRpcClient(void)
58 {
59 return OHOS::Wifi::WifiStaHalInterface::GetInstance().mIdlClient->pRpcClient;
60 }
61
OnConnectChanged(int status,int networkId,const char * mac)62 void OnConnectChanged(int status, int networkId, const char *mac)
63 {
64 if (mac == nullptr) {
65 return;
66 }
67 const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst();
68 if (cbk.onConnectChanged) {
69 cbk.onConnectChanged(status, networkId, mac);
70 }
71 }
72
OnWpaStateChanged(int status)73 void OnWpaStateChanged(int status)
74 {
75 const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst();
76 if (cbk.onWpaStateChanged) {
77 cbk.onWpaStateChanged(status);
78 }
79 }
80
OnWpaSsidWrongKey(int status)81 void OnWpaSsidWrongKey(int status)
82 {
83 const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst();
84 if (cbk.onWpaSsidWrongKey) {
85 cbk.onWpaSsidWrongKey(status);
86 }
87 }
88
onWpaConnectionFull(int status)89 void onWpaConnectionFull(int status)
90 {
91 const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst();
92 if (cbk.onWpaConnectionFull) {
93 cbk.onWpaConnectionFull(status);
94 }
95 }
96
onWpaConnectionReject(int status)97 void onWpaConnectionReject(int status)
98 {
99 const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst();
100 if (cbk.onWpaConnectionReject) {
101 cbk.onWpaConnectionReject(status);
102 }
103 }
104
OnWpsOverlap(int status)105 void OnWpsOverlap(int status)
106 {
107 const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst();
108 if (cbk.onWpsOverlap) {
109 cbk.onWpsOverlap(status);
110 }
111 }
112
OnWpsTimeOut(int status)113 void OnWpsTimeOut(int status)
114 {
115 const OHOS::Wifi::WifiEventCallback &cbk = OHOS::Wifi::WifiStaHalInterface::GetInstance().GetCallbackInst();
116 if (cbk.onWpsTimeOut) {
117 cbk.onWpsTimeOut(status);
118 }
119 }
120
GetSupplicantRpcClient(void)121 RpcClient *GetSupplicantRpcClient(void)
122 {
123 return OHOS::Wifi::WifiSupplicantHalInterface::GetInstance().mIdlClient->pRpcClient;
124 }
125
OnScanNotify(int status)126 void OnScanNotify(int status)
127 {
128 const OHOS::Wifi::SupplicantEventCallback &cbk =
129 OHOS::Wifi::WifiSupplicantHalInterface::GetInstance().GetCallbackInst();
130 if (cbk.onScanNotify) {
131 cbk.onScanNotify(status);
132 }
133 }
134
GetP2pRpcClient(void)135 RpcClient *GetP2pRpcClient(void)
136 {
137 return OHOS::Wifi::WifiP2PHalInterface::GetInstance().mIdlClient->pRpcClient;
138 }
139
OnP2pConnectSupplicant(int state)140 void OnP2pConnectSupplicant(int state)
141 {
142 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
143 if (cbk.onConnectSupplicant) {
144 cbk.onConnectSupplicant(state);
145 }
146 }
147
OnP2pDeviceFound(const HidlP2pDeviceInfo * info)148 void OnP2pDeviceFound(const HidlP2pDeviceInfo *info)
149 {
150 if (info == nullptr) {
151 return;
152 }
153 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
154 if (cbk.onDeviceFound) {
155 OHOS::Wifi::IdlP2pDeviceFound cbInfo;
156 cbInfo.srcAddress = info->srcAddress;
157 cbInfo.p2pDeviceAddress = info->p2pDeviceAddress;
158 cbInfo.primaryDeviceType = info->primaryDeviceType;
159 cbInfo.deviceName = info->deviceName;
160 cbInfo.configMethods = info->configMethods;
161 cbInfo.deviceCapabilities = info->deviceCapabilities;
162 cbInfo.groupCapabilities = info->groupCapabilities;
163 const int wfdLength = 14; /* wfd info type: 0x000000000000 */
164 const int wfdStartPos = 2; /* skip 0x */
165 if (info->wfdLength >= wfdLength && strlen(info->wfdDeviceInfo) >= wfdLength) {
166 OHOS::Wifi::HexStringToVec(info->wfdDeviceInfo + wfdStartPos, cbInfo.wfdDeviceInfo);
167 }
168 cbk.onDeviceFound(cbInfo);
169 }
170 }
171
OnP2pDeviceLost(const char * p2pDeviceAddress)172 void OnP2pDeviceLost(const char *p2pDeviceAddress)
173 {
174 if (p2pDeviceAddress == nullptr) {
175 return;
176 }
177 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
178 if (cbk.onDeviceLost) {
179 cbk.onDeviceLost(p2pDeviceAddress);
180 }
181 }
182
OnP2pGoNegotiationRequest(const char * srcAddress,short passwordId)183 void OnP2pGoNegotiationRequest(const char *srcAddress, short passwordId)
184 {
185 if (srcAddress == nullptr) {
186 return;
187 }
188 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
189 if (cbk.onGoNegotiationRequest) {
190 cbk.onGoNegotiationRequest(srcAddress, passwordId);
191 }
192 }
193
OnP2pGoNegotiationSuccess(void)194 void OnP2pGoNegotiationSuccess(void)
195 {
196 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
197 if (cbk.onGoNegotiationSuccess) {
198 cbk.onGoNegotiationSuccess();
199 }
200 }
201
OnP2pGoNegotiationFailure(int status)202 void OnP2pGoNegotiationFailure(int status)
203 {
204 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
205 if (cbk.onGoNegotiationFailure) {
206 cbk.onGoNegotiationFailure(status);
207 }
208 }
209
OnP2pInvitationResult(const char * bssid,int status)210 void OnP2pInvitationResult(const char *bssid, int status)
211 {
212 if (bssid == nullptr) {
213 return;
214 }
215 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
216 if (cbk.onInvitationResult) {
217 cbk.onInvitationResult(bssid, status);
218 }
219 }
220
OnP2pInvitationReceived(const HidlP2pInvitationInfo * info)221 void OnP2pInvitationReceived(const HidlP2pInvitationInfo *info)
222 {
223 if (info == nullptr) {
224 return;
225 }
226 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
227 if (cbk.onInvitationReceived) {
228 OHOS::Wifi::IdlP2pInvitationInfo cbInfo;
229 cbInfo.type = info->type;
230 cbInfo.persistentNetworkId = info->persistentNetworkId;
231 cbInfo.operatingFrequency = info->operatingFrequency;
232 cbInfo.srcAddress = info->srcAddress;
233 cbInfo.goDeviceAddress = info->goDeviceAddress;
234 cbInfo.bssid = info->bssid;
235 cbk.onInvitationReceived(cbInfo);
236 }
237 }
238
OnP2pGroupFormationSuccess(void)239 void OnP2pGroupFormationSuccess(void)
240 {
241 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
242 if (cbk.onGroupFormationSuccess) {
243 cbk.onGroupFormationSuccess();
244 }
245 }
246
OnP2pGroupFormationFailure(const char * failureReason)247 void OnP2pGroupFormationFailure(const char *failureReason)
248 {
249 if (failureReason == nullptr) {
250 return;
251 }
252 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
253 if (cbk.onGroupFormationFailure) {
254 cbk.onGroupFormationFailure(failureReason);
255 }
256 }
257
OnP2pGroupStarted(const HidlP2pGroupInfo * group)258 void OnP2pGroupStarted(const HidlP2pGroupInfo *group)
259 {
260 if (group == nullptr) {
261 return;
262 }
263 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
264 if (cbk.onGroupStarted) {
265 OHOS::Wifi::IdlP2pGroupInfo cbInfo;
266 cbInfo.isGo = group->isGo;
267 cbInfo.isPersistent = group->isPersistent;
268 cbInfo.frequency = group->frequency;
269 cbInfo.groupName = group->groupName;
270 cbInfo.ssid = group->ssid;
271 cbInfo.psk = group->psk;
272 cbInfo.passphrase = group->passphrase;
273 cbInfo.goDeviceAddress = group->goDeviceAddress;
274 cbk.onGroupStarted(cbInfo);
275 }
276 }
277
OnP2pGroupRemoved(const char * groupIfName,int isGo)278 void OnP2pGroupRemoved(const char *groupIfName, int isGo)
279 {
280 if (groupIfName == nullptr) {
281 return;
282 }
283 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
284 if (cbk.onGroupRemoved) {
285 cbk.onGroupRemoved(groupIfName, (isGo == 1));
286 }
287 }
288
OnP2pProvisionDiscoveryPbcRequest(const char * p2pDeviceAddress)289 void OnP2pProvisionDiscoveryPbcRequest(const char *p2pDeviceAddress)
290 {
291 if (p2pDeviceAddress == nullptr) {
292 return;
293 }
294 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
295 if (cbk.onProvisionDiscoveryPbcRequest) {
296 cbk.onProvisionDiscoveryPbcRequest(p2pDeviceAddress);
297 }
298 }
299
OnP2pProvisionDiscoveryPbcResponse(const char * p2pDeviceAddress)300 void OnP2pProvisionDiscoveryPbcResponse(const char *p2pDeviceAddress)
301 {
302 if (p2pDeviceAddress == nullptr) {
303 return;
304 }
305 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
306 if (cbk.onProvisionDiscoveryPbcResponse) {
307 cbk.onProvisionDiscoveryPbcResponse(p2pDeviceAddress);
308 }
309 }
310
OnP2pProvisionDiscoveryEnterPin(const char * p2pDeviceAddress)311 void OnP2pProvisionDiscoveryEnterPin(const char *p2pDeviceAddress)
312 {
313 if (p2pDeviceAddress == nullptr) {
314 return;
315 }
316 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
317 if (cbk.onProvisionDiscoveryEnterPin) {
318 cbk.onProvisionDiscoveryEnterPin(p2pDeviceAddress);
319 }
320 }
321
OnP2pProvisionDiscoveryShowPin(const char * p2pDeviceAddress,const char * generatedPin)322 void OnP2pProvisionDiscoveryShowPin(const char *p2pDeviceAddress, const char *generatedPin)
323 {
324 if (p2pDeviceAddress == nullptr || generatedPin == nullptr) {
325 return;
326 }
327 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
328 if (cbk.onProvisionDiscoveryShowPin) {
329 cbk.onProvisionDiscoveryShowPin(p2pDeviceAddress, generatedPin);
330 }
331 }
332
OnP2pProvisionDiscoveryFailure(void)333 void OnP2pProvisionDiscoveryFailure(void)
334 {
335 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
336 if (cbk.onProvisionDiscoveryFailure) {
337 cbk.onProvisionDiscoveryFailure();
338 }
339 }
340
OnP2pFindStopped(void)341 void OnP2pFindStopped(void)
342 {
343 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
344 if (cbk.onFindStopped) {
345 cbk.onFindStopped();
346 }
347 }
348
OnP2pServiceDiscoveryResponse(const char * srcAddress,short updateIndicator,const unsigned char * tlvs,size_t tlvsLength)349 void OnP2pServiceDiscoveryResponse(
350 const char *srcAddress, short updateIndicator, const unsigned char *tlvs, size_t tlvsLength)
351 {
352 if (srcAddress == nullptr) {
353 return;
354 }
355 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
356 if (cbk.onServiceDiscoveryResponse) {
357 std::vector<unsigned char> tlvList;
358 if (tlvs != nullptr) {
359 OHOS::Wifi::Char2Vec(tlvs, tlvsLength, tlvList);
360 }
361 cbk.onServiceDiscoveryResponse(srcAddress, updateIndicator, tlvList);
362 }
363 }
364
OnP2pStaDeauthorized(const char * p2pDeviceAddress)365 void OnP2pStaDeauthorized(const char *p2pDeviceAddress)
366 {
367 if (p2pDeviceAddress == nullptr) {
368 return;
369 }
370 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
371 if (cbk.onStaDeauthorized) {
372 cbk.onStaDeauthorized(p2pDeviceAddress);
373 }
374 }
375
OnP2pStaAuthorized(const char * p2pDeviceAddress)376 void OnP2pStaAuthorized(const char *p2pDeviceAddress)
377 {
378 if (p2pDeviceAddress == nullptr) {
379 return;
380 }
381 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
382 if (cbk.onStaAuthorized) {
383 cbk.onStaAuthorized(p2pDeviceAddress);
384 }
385 }
386
OnP2pConnectSupplicantFailed(void)387 void OnP2pConnectSupplicantFailed(void)
388 {
389 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
390 if (cbk.connectSupplicantFailed) {
391 cbk.connectSupplicantFailed();
392 }
393 }
394
OnP2pServDiscReq(const HidlP2pServDiscReqInfo * info)395 void OnP2pServDiscReq(const HidlP2pServDiscReqInfo *info)
396 {
397 if (info == nullptr) {
398 return;
399 }
400 const OHOS::Wifi::P2pHalCallback &cbk = OHOS::Wifi::WifiP2PHalInterface::GetInstance().GetP2pCallbackInst();
401 if (cbk.onP2pServDiscReq) {
402 OHOS::Wifi::IdlP2pServDiscReqInfo cbInfo;
403 cbInfo.freq = info->freq;
404 cbInfo.dialogToken = info->dialogToken;
405 cbInfo.updateIndic = info->updateIndic;
406 cbInfo.mac = info->mac;
407 if (info->tlvsLength > 0 && info->tlvs != nullptr) {
408 OHOS::Wifi::Char2Vec(info->tlvs, info->tlvsLength, cbInfo.tlvList);
409 }
410 cbk.onP2pServDiscReq(cbInfo);
411 }
412 }
413