• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
28 namespace android {
29 namespace wificond {
30 
31 class ClientInterfaceImpl;
32 class ScanUtils;
33 
34 class ScannerImpl : public android::net::wifi::BnWifiScannerImpl {
35  public:
36   ScannerImpl(uint32_t wiphy_index,
37               uint32_t interface_index,
38               const ScanCapabilities& scan_capabilities,
39               const WiphyFeatures& wiphy_features,
40               ClientInterfaceImpl* client_interface,
41               NetlinkUtils* netlink_utils,
42               ScanUtils* scan_utils);
43   ~ScannerImpl();
44   // Returns a vector of available frequencies for 2.4GHz channels.
45   ::android::binder::Status getAvailable2gChannels(
46       ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
47   // Returns a vector of available frequencies for 5GHz non-DFS channels.
48   ::android::binder::Status getAvailable5gNonDFSChannels(
49       ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
50   // Returns a vector of available frequencies for DFS channels.
51   ::android::binder::Status getAvailableDFSChannels(
52       ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
53   // Get the latest scan results from kernel.
54   ::android::binder::Status getScanResults(
55       std::vector<com::android::server::wifi::wificond::NativeScanResult>*
56           out_scan_results) override;
57   ::android::binder::Status scan(
58       const ::com::android::server::wifi::wificond::SingleScanSettings&
59           scan_settings,
60       bool* out_success) override;
61   ::android::binder::Status startPnoScan(
62       const ::com::android::server::wifi::wificond::PnoSettings& pno_settings,
63       bool* out_success) override;
64   ::android::binder::Status stopPnoScan(bool* out_success) override;
65   ::android::binder::Status abortScan() 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 OnScanResultsReady(
78       uint32_t interface_index,
79       bool aborted,
80       std::vector<std::vector<uint8_t>>& ssids,
81       std::vector<uint32_t>& frequencies);
82   void OnSchedScanResultsReady(uint32_t interface_index, bool scan_stopped);
83   void LogSsidList(std::vector<std::vector<uint8_t>>& ssid_list,
84                    std::string prefix);
85 
86   // Boolean variables describing current scanner status.
87   bool valid_;
88   bool scan_started_;
89   bool pno_scan_started_;
90 
91   const uint32_t wiphy_index_;
92   const uint32_t interface_index_;
93 
94   // Scanning relevant capability information for this wiphy/interface.
95   ScanCapabilities scan_capabilities_;
96   WiphyFeatures wiphy_features_;
97 
98   ClientInterfaceImpl* client_interface_;
99   NetlinkUtils* const netlink_utils_;
100   ScanUtils* const scan_utils_;
101   ::android::sp<::android::net::wifi::IPnoScanEvent> pno_scan_event_handler_;
102   ::android::sp<::android::net::wifi::IScanEvent> scan_event_handler_;
103 
104   DISALLOW_COPY_AND_ASSIGN(ScannerImpl);
105 };
106 
107 }  // namespace wificond
108 }  // namespace android
109 
110 #endif  // WIFICOND_SCANNER_IMPL_H_
111