• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2019 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 #pragma once
17 
18 #include <memory>
19 
20 #include "common/callback.h"
21 #include "hci/address_with_type.h"
22 #include "hci/hci_packets.h"
23 #include "hci/le_scanning_callback.h"
24 #include "hci/uuid.h"
25 #include "module.h"
26 
27 namespace bluetooth {
28 namespace hci {
29 
30 enum class BatchScanMode : uint8_t {
31   DISABLE = 0,
32   TRUNCATED = 1,
33   FULL = 2,
34   TRUNCATED_AND_FULL = 3,
35 };
36 
37 class LeScanningManager : public bluetooth::Module {
38  public:
39   static constexpr uint8_t kMaxAppNum = 32;
40   static constexpr uint8_t kAdvertisingDataInfoNotPresent = 0xff;
41   static constexpr uint8_t kTxPowerInformationNotPresent = 0x7f;
42   static constexpr uint8_t kNotPeriodicAdvertisement = 0x00;
43   static constexpr ScannerId kInvalidScannerId = 0xFF;
44   LeScanningManager();
45   LeScanningManager(const LeScanningManager&) = delete;
46   LeScanningManager& operator=(const LeScanningManager&) = delete;
47 
48   virtual void RegisterScanner(const Uuid app_uuid);
49 
50   virtual void Unregister(ScannerId scanner_id);
51 
52   virtual void Scan(bool start);
53 
54   virtual void SetScanParameters(
55       ScannerId scanner_id, LeScanType scan_type, uint16_t scan_interval, uint16_t scan_window);
56 
57   virtual void SetScanFilterPolicy(LeScanningFilterPolicy filter_policy);
58 
59   /* Scan filter */
60   virtual void ScanFilterEnable(bool enable);
61 
62   virtual void ScanFilterParameterSetup(
63       ApcfAction action, uint8_t filter_index, AdvertisingFilterParameter advertising_filter_parameter);
64 
65   virtual void ScanFilterAdd(uint8_t filter_index, std::vector<AdvertisingPacketContentFilterCommand> filters);
66 
67   /*Batch Scan*/
68   virtual void BatchScanConifgStorage(
69       uint8_t batch_scan_full_max,
70       uint8_t batch_scan_truncated_max,
71       uint8_t batch_scan_notify_threshold,
72       ScannerId scanner_id);
73   virtual void BatchScanEnable(
74       BatchScanMode scan_mode,
75       uint32_t duty_cycle_scan_window_slots,
76       uint32_t duty_cycle_scan_interval_slots,
77       BatchScanDiscardRule batch_scan_discard_rule);
78   virtual void BatchScanDisable();
79   virtual void BatchScanReadReport(ScannerId scanner_id, BatchScanMode scan_mode);
80 
81   virtual void StartSync(uint8_t sid, const AddressWithType& address, uint16_t skip, uint16_t timeout, int reg_id);
82 
83   virtual void StopSync(uint16_t handle);
84 
85   virtual void CancelCreateSync(uint8_t sid, const Address& address);
86 
87   virtual void TransferSync(const Address& address, uint16_t service_data, uint16_t sync_handle, int pa_source);
88 
89   virtual void TransferSetInfo(const Address& address, uint16_t service_data, uint8_t adv_handle, int pa_source);
90 
91   virtual void SyncTxParameters(const Address& addr, uint8_t mode, uint16_t skip, uint16_t timeout, int reg_id);
92 
93   virtual void TrackAdvertiser(uint8_t filter_index, ScannerId scanner_id);
94 
95   virtual void RegisterScanningCallback(ScanningCallback* scanning_callback);
96 
97   virtual bool IsAdTypeFilterSupported() const;
98 
99   static const ModuleFactory Factory;
100 
101  protected:
102   void ListDependencies(ModuleList* list) const override;
103 
104   void Start() override;
105 
106   void Stop() override;
107 
108   std::string ToString() const override;
109 
110  private:
111   struct impl;
112   std::unique_ptr<impl> pimpl_;
113 };
114 
115 }  // namespace hci
116 }  // namespace bluetooth
117