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 "scan_monitor.h"
16 #include "wifi_logger.h"
17 #include "wifi_supplicant_hal_interface.h"
18 
19 DEFINE_WIFILOG_SCAN_LABEL("ScanMonitor");
20 
21 namespace OHOS {
22 namespace Wifi {
ScanMonitor(int instId)23 ScanMonitor::ScanMonitor(int instId) : pScanStateMachine(nullptr), m_instId(instId)
24 {}
25 
~ScanMonitor()26 ScanMonitor::~ScanMonitor()
27 {}
28 
InitScanMonitor()29 bool ScanMonitor::InitScanMonitor()
30 {
31     WIFI_LOGI("Enter ScanMonitor::InitScanMonitor.");
32 
33     SupplicantEventCallback eventCallback;
34     eventCallback.onScanNotify = std::bind(&ScanMonitor::ReceiveScanEventFromIdl, this, std::placeholders::_1);
35     if (WifiSupplicantHalInterface::GetInstance().RegisterSupplicantEventCallback(eventCallback) != WIFI_HAL_OPT_OK) {
36         WIFI_LOGE("RegisterSupplicantEventCallback failed.");
37         return false;
38     }
39 
40     return true;
41 }
42 
UnInitScanMonitor()43 void ScanMonitor::UnInitScanMonitor()
44 {
45     WIFI_LOGI("Enter ScanMonitor::UnInitScanMonitor.");
46     if (WifiSupplicantHalInterface::GetInstance().UnRegisterSupplicantEventCallback() != WIFI_HAL_OPT_OK) {
47         WIFI_LOGE("UnRegisterSupplicantEventCallback failed.");
48     }
49     return;
50 }
51 
SetScanStateMachine(ScanStateMachine * paraScanStateMachine)52 void ScanMonitor::SetScanStateMachine(ScanStateMachine *paraScanStateMachine)
53 {
54     pScanStateMachine = paraScanStateMachine;
55     return;
56 }
57 
ReceiveScanEventFromIdl(int result)58 void ScanMonitor::ReceiveScanEventFromIdl(int result)
59 {
60     WIFI_LOGI("Enter ScanMonitor::ReceiveScanEventFromIdl, result is %{public}d.", result);
61     ProcessReceiveScanEvent(result);
62     return;
63 }
64 
ProcessReceiveScanEvent(int result)65 void ScanMonitor::ProcessReceiveScanEvent(int result)
66 {
67     WIFI_LOGI("Enter ScanMonitor::ProcessReceiveScanEvent, result is %{public}d.\n", result);
68 
69     switch (result) {
70         case HAL_SINGLE_SCAN_OVER_OK: {
71             SendScanInfoEvent();
72             break;
73         }
74         case HAL_SINGLE_SCAN_FAILED: {
75             SendScanFailedEvent();
76             break;
77         }
78         case HAL_PNO_SCAN_OVER_OK: {
79             SendPnoScanInfoEvent();
80             break;
81         }
82         default: {
83             WIFI_LOGE("result is error.\n");
84             break;
85         }
86     }
87 
88     return;
89 }
90 
SendScanInfoEvent()91 void ScanMonitor::SendScanInfoEvent()
92 {
93     if (pScanStateMachine == nullptr) {
94         WIFI_LOGE("The statemachine pointer is null.");
95         return;
96     }
97     pScanStateMachine->SendMessage(static_cast<int>(SCAN_RESULT_EVENT));
98     return;
99 }
100 
SendPnoScanInfoEvent()101 void ScanMonitor::SendPnoScanInfoEvent()
102 {
103     if (pScanStateMachine == nullptr) {
104         WIFI_LOGE("The statemachine pointer is null.");
105         return;
106     }
107     pScanStateMachine->SendMessage(static_cast<int>(PNO_SCAN_RESULT_EVENT));
108     return;
109 }
110 
SendScanFailedEvent()111 void ScanMonitor::SendScanFailedEvent()
112 {
113     if (pScanStateMachine == nullptr) {
114         WIFI_LOGE("The statemachine pointer is null.");
115         return;
116     }
117     pScanStateMachine->SendMessage(static_cast<int>(SCAN_FAILED_EVENT));
118     return;
119 }
120 }  // namespace Wifi
121 }  // namespace OHOS
122