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