• 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 
17 #pragma once
18 
19 #include "common/init_flags.h"
20 #include "hci/address.h"
21 #include "hci/hci_packets.h"
22 #include "hci/le_rand_callback.h"
23 #include "hci_controller_generated.h"
24 #include "module.h"
25 #include "os/handler.h"
26 
27 // TODO Remove this once all QTI specific hacks are removed.
28 #define LMP_COMPID_QTI 0x001D
29 
30 namespace bluetooth {
31 namespace hci {
32 
33 class Controller : public Module {
34  public:
35   Controller();
36   Controller(const Controller&) = delete;
37   Controller& operator=(const Controller&) = delete;
38 
39   virtual ~Controller();
40 
41   using CompletedAclPacketsCallback =
42       common::ContextualCallback<void(uint16_t /* handle */, uint16_t /* num_packets */)>;
43   virtual void RegisterCompletedAclPacketsCallback(CompletedAclPacketsCallback cb);
44 
45   virtual void UnregisterCompletedAclPacketsCallback();
46 
47   virtual void RegisterCompletedMonitorAclPacketsCallback(CompletedAclPacketsCallback cb);
48   virtual void UnregisterCompletedMonitorAclPacketsCallback();
49 
50   virtual std::string GetLocalName() const;
51 
52   virtual LocalVersionInformation GetLocalVersionInformation() const;
53 
54   virtual bool SupportsSimplePairing() const;
55   virtual bool SupportsSecureConnections() const;
56   virtual bool SupportsSimultaneousLeBrEdr() const;
57   virtual bool SupportsInterlacedInquiryScan() const;
58   virtual bool SupportsRssiWithInquiryResults() const;
59   virtual bool SupportsExtendedInquiryResponse() const;
60   virtual bool SupportsRoleSwitch() const;
61   virtual bool Supports3SlotPackets() const;
62   virtual bool Supports5SlotPackets() const;
63   virtual bool SupportsClassic2mPhy() const;
64   virtual bool SupportsClassic3mPhy() const;
65   virtual bool Supports3SlotEdrPackets() const;
66   virtual bool Supports5SlotEdrPackets() const;
67   virtual bool SupportsSco() const;
68   virtual bool SupportsHv2Packets() const;
69   virtual bool SupportsHv3Packets() const;
70   virtual bool SupportsEv3Packets() const;
71   virtual bool SupportsEv4Packets() const;
72   virtual bool SupportsEv5Packets() const;
73   virtual bool SupportsEsco2mPhy() const;
74   virtual bool SupportsEsco3mPhy() const;
75   virtual bool Supports3SlotEscoEdrPackets() const;
76   virtual bool SupportsHoldMode() const;
77   virtual bool SupportsSniffMode() const;
78   virtual bool SupportsParkMode() const;
79   virtual bool SupportsNonFlushablePb() const;
80   virtual bool SupportsSniffSubrating() const;
81   virtual bool SupportsEncryptionPause() const;
82   virtual bool SupportsBle() const;
83 
84   virtual bool SupportsBleEncryption() const;
85   virtual bool SupportsBleConnectionParametersRequest() const;
86   virtual bool SupportsBleExtendedReject() const;
87   virtual bool SupportsBlePeripheralInitiatedFeaturesExchange() const;
88   virtual bool SupportsBlePing() const;
89   virtual bool SupportsBleDataPacketLengthExtension() const;
90   virtual bool SupportsBlePrivacy() const;
91   virtual bool SupportsBleExtendedScannerFilterPolicies() const;
92   virtual bool SupportsBle2mPhy() const;
93   virtual bool SupportsBleStableModulationIndexTx() const;
94   virtual bool SupportsBleStableModulationIndexRx() const;
95   virtual bool SupportsBleCodedPhy() const;
96   virtual bool SupportsBleExtendedAdvertising() const;
97   virtual bool SupportsBlePeriodicAdvertising() const;
98   virtual bool SupportsBleChannelSelectionAlgorithm2() const;
99   virtual bool SupportsBlePowerClass1() const;
100   virtual bool SupportsBleMinimumUsedChannels() const;
101   virtual bool SupportsBleConnectionCteRequest() const;
102   virtual bool SupportsBleConnectionCteResponse() const;
103   virtual bool SupportsBleConnectionlessCteTransmitter() const;
104   virtual bool SupportsBleConnectionlessCteReceiver() const;
105   virtual bool SupportsBleAntennaSwitchingDuringCteTx() const;
106   virtual bool SupportsBleAntennaSwitchingDuringCteRx() const;
107   virtual bool SupportsBleReceivingConstantToneExtensions() const;
108   virtual bool SupportsBlePeriodicAdvertisingSyncTransferSender() const;
109   virtual bool SupportsBlePeriodicAdvertisingSyncTransferRecipient() const;
110   virtual bool SupportsBleSleepClockAccuracyUpdates() const;
111   virtual bool SupportsBleRemotePublicKeyValidation() const;
112   virtual bool SupportsBleConnectedIsochronousStreamCentral() const;
113   virtual bool SupportsBleConnectedIsochronousStreamPeripheral() const;
114   virtual bool SupportsBleIsochronousBroadcaster() const;
115   virtual bool SupportsBleSynchronizedReceiver() const;
116   virtual bool SupportsBleIsochronousChannelsHostSupport() const;
117   virtual bool SupportsBlePowerControlRequest() const;
118   virtual bool SupportsBlePowerChangeIndication() const;
119   virtual bool SupportsBlePathLossMonitoring() const;
120   virtual bool SupportsBlePeriodicAdvertisingAdi() const;
121   virtual bool SupportsBleConnectionSubrating() const;
122   virtual bool SupportsBleConnectionSubratingHost() const;
123 
124   virtual uint16_t GetAclPacketLength() const;
125 
126   virtual uint16_t GetNumAclPacketBuffers() const;
127 
128   virtual uint8_t GetScoPacketLength() const;
129 
130   virtual uint16_t GetNumScoPacketBuffers() const;
131 
132   virtual Address GetMacAddress() const;
133 
134   virtual void SetEventMask(uint64_t event_mask);
135 
136   virtual void Reset();
137 
138   virtual void LeRand(LeRandCallback cb);
139 
140   virtual void SetEventFilterClearAll();
141 
142   virtual void SetEventFilterInquiryResultAllDevices();
143 
144   virtual void SetEventFilterInquiryResultClassOfDevice(ClassOfDevice class_of_device,
145                                                         ClassOfDevice class_of_device_mask);
146 
147   virtual void SetEventFilterInquiryResultAddress(Address address);
148 
149   virtual void SetEventFilterConnectionSetupAllDevices(AutoAcceptFlag auto_accept_flag);
150 
151   virtual void SetEventFilterConnectionSetupClassOfDevice(ClassOfDevice class_of_device,
152                                                           ClassOfDevice class_of_device_mask,
153                                                           AutoAcceptFlag auto_accept_flag);
154 
155   virtual void SetEventFilterConnectionSetupAddress(Address address, AutoAcceptFlag auto_accept_flag);
156 
157   virtual void WriteLocalName(std::string local_name);
158 
159   virtual void HostBufferSize(uint16_t host_acl_data_packet_length, uint8_t host_synchronous_data_packet_length,
160                               uint16_t host_total_num_acl_data_packets,
161                               uint16_t host_total_num_synchronous_data_packets);
162 
163   // LE controller commands
164   virtual void LeSetEventMask(uint64_t le_event_mask);
165 
166   virtual LeBufferSize GetLeBufferSize() const;
167 
168   virtual uint64_t GetLeSupportedStates() const;
169 
170   virtual LeBufferSize GetControllerIsoBufferSize() const;
171 
172   virtual uint64_t GetControllerLeLocalSupportedFeatures() const;
173 
174   virtual uint8_t GetLeFilterAcceptListSize() const;
175 
176   virtual uint8_t GetLeResolvingListSize() const;
177 
178   virtual LeMaximumDataLength GetLeMaximumDataLength() const;
179 
180   virtual uint16_t GetLeMaximumAdvertisingDataLength() const;
181 
182   virtual uint16_t GetLeSuggestedDefaultDataLength() const;
183 
184   virtual uint8_t GetLeNumberOfSupportedAdverisingSets() const;
185 
186   virtual uint8_t GetLePeriodicAdvertiserListSize() const;
187 
188   struct VendorCapabilities {
189     uint8_t is_supported_;
190     uint8_t max_advt_instances_;
191     uint8_t offloaded_resolution_of_private_address_;
192     uint16_t total_scan_results_storage_;
193     uint8_t max_irk_list_sz_;
194     uint8_t filtering_support_;
195     uint8_t max_filter_;
196     uint8_t activity_energy_info_support_;
197     uint16_t version_supported_;
198     uint16_t total_num_of_advt_tracked_;
199     uint8_t extended_scan_support_;
200     uint8_t debug_logging_supported_;
201     uint8_t le_address_generation_offloading_support_;
202     uint32_t a2dp_source_offload_capability_mask_;
203     uint8_t bluetooth_quality_report_support_;
204   };
205 
206   virtual VendorCapabilities GetVendorCapabilities() const;
207 
208   virtual bool IsSupported(OpCode op_code) const;
209 
210   static const ModuleFactory Factory;
211 
212   static constexpr uint64_t kDefaultEventMask = 0x3dbfffffffffffff;
213   static constexpr uint64_t kDefaultLeEventMask = 0x000000074d02fe7f;
214 
215   static constexpr uint64_t kLeEventMask53 = 0x00000007ffffffff;
216   static constexpr uint64_t kLeEventMask52 = 0x00000003ffffffff;
217   static constexpr uint64_t kLeEventMask51 = 0x0000000000ffffff;
218   static constexpr uint64_t kLeEventMask42 = 0x00000000000003ff;
219   static constexpr uint64_t kLeEventMask41 = 0x000000000000003f;
220 
MaskLeEventMask(HciVersion version,uint64_t mask)221   static uint64_t MaskLeEventMask(HciVersion version, uint64_t mask) {
222     if (!common::init_flags::subrating_is_enabled()) {
223       mask = mask & ~(static_cast<uint64_t>(LLFeaturesBits::CONNECTION_SUBRATING_HOST_SUPPORT));
224     }
225     if (version >= HciVersion::V_5_3) {
226       return mask;
227     } else if (version >= HciVersion::V_5_2) {
228       return mask & kLeEventMask52;
229     } else if (version >= HciVersion::V_5_1) {
230       return mask & kLeEventMask51;
231     } else if (version >= HciVersion::V_4_2) {
232       return mask & kLeEventMask42;
233     } else {
234       return mask & kLeEventMask41;
235     }
236   }
237 
238  protected:
239   void ListDependencies(ModuleList* list) const override;
240 
241   void Start() override;
242 
243   void Stop() override;
244 
245   std::string ToString() const override;
246 
247   DumpsysDataFinisher GetDumpsysData(flatbuffers::FlatBufferBuilder* builder) const override;  // Module
248 
249  private:
250   virtual uint64_t GetLocalFeatures(uint8_t page_number) const;
251   virtual uint64_t GetLocalLeFeatures() const;
252 
253   struct impl;
254   std::unique_ptr<impl> impl_;
255 };
256 
257 }  // namespace hci
258 }  // namespace bluetooth
259