OSDN Git Service

Link libwifi-system-iface for InterfaceTool
[android-x86/system-connectivity-wificond.git] / scanning / scanner_impl.h
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef WIFICOND_SCANNER_IMPL_H_
18 #define WIFICOND_SCANNER_IMPL_H_
19
20 #include <vector>
21
22 #include <android-base/macros.h>
23 #include <binder/Status.h>
24
25 #include "android/net/wifi/BnWifiScannerImpl.h"
26 #include "wificond/net/netlink_utils.h"
27 #include "wificond/scanning/offload/offload_scan_manager.h"
28
29 namespace android {
30 namespace wificond {
31
32 class ClientInterfaceImpl;
33 class ScanUtils;
34
35 class ScannerImpl : public android::net::wifi::BnWifiScannerImpl {
36  public:
37   ScannerImpl(uint32_t wiphy_index,
38               uint32_t interface_index,
39               const ScanCapabilities& scan_capabilities,
40               const WiphyFeatures& wiphy_features,
41               ClientInterfaceImpl* client_interface,
42               NetlinkUtils* netlink_utils,
43               ScanUtils* scan_utils);
44   ~ScannerImpl();
45   // Returns a vector of available frequencies for 2.4GHz channels.
46   ::android::binder::Status getAvailable2gChannels(
47       ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
48   // Returns a vector of available frequencies for 5GHz non-DFS channels.
49   ::android::binder::Status getAvailable5gNonDFSChannels(
50       ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
51   // Returns a vector of available frequencies for DFS channels.
52   ::android::binder::Status getAvailableDFSChannels(
53       ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
54   // Get the latest scan results from kernel.
55   ::android::binder::Status getScanResults(
56       std::vector<com::android::server::wifi::wificond::NativeScanResult>*
57           out_scan_results) override;
58   ::android::binder::Status scan(
59       const ::com::android::server::wifi::wificond::SingleScanSettings&
60           scan_settings,
61       bool* out_success) override;
62   ::android::binder::Status startPnoScan(
63       const ::com::android::server::wifi::wificond::PnoSettings& pno_settings,
64       bool* out_success) override;
65   ::android::binder::Status stopPnoScan(bool* out_success) override;
66
67   ::android::binder::Status subscribeScanEvents(
68       const ::android::sp<::android::net::wifi::IScanEvent>& handler) override;
69   ::android::binder::Status unsubscribeScanEvents() override;
70   ::android::binder::Status subscribePnoScanEvents(
71       const ::android::sp<::android::net::wifi::IPnoScanEvent>& handler) override;
72   ::android::binder::Status unsubscribePnoScanEvents() override;
73   void Invalidate();
74
75  private:
76   bool CheckIsValid();
77   void OnOffloadScanResult(
78       std::vector<::com::android::server::wifi::wificond::NativeScanResult>);
79   void OnScanResultsReady(
80       uint32_t interface_index,
81       bool aborted,
82       std::vector<std::vector<uint8_t>>& ssids,
83       std::vector<uint32_t>& frequencies);
84   void OnSchedScanResultsReady(uint32_t interface_index, bool scan_stopped);
85   void LogSsidList(std::vector<std::vector<uint8_t>>& ssid_list,
86                    std::string prefix);
87
88   // Boolean variables describing current scanner status.
89   bool valid_;
90   bool scan_started_;
91   bool pno_scan_started_;
92
93   const uint32_t wiphy_index_;
94   const uint32_t interface_index_;
95
96   // Scanning relevant capability information for this wiphy/interface.
97   ScanCapabilities scan_capabilities_;
98   WiphyFeatures wiphy_features_;
99
100   ClientInterfaceImpl* client_interface_;
101   NetlinkUtils* const netlink_utils_;
102   ScanUtils* const scan_utils_;
103   ::android::sp<::android::net::wifi::IPnoScanEvent> pno_scan_event_handler_;
104   ::android::sp<::android::net::wifi::IScanEvent> scan_event_handler_;
105   std::unique_ptr<OffloadScanManager> offload_scan_manager_;
106
107   DISALLOW_COPY_AND_ASSIGN(ScannerImpl);
108 };
109
110 }  // namespace wificond
111 }  // namespace android
112
113 #endif  // WIFICOND_SCANNER_IMPL_H_