• 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/contextual_callback.h"
20 #include "hci/address.h"
21 #include "hci/hci_packets.h"
22 #include "hci_controller_generated.h"
23 #include "module.h"
24 #include "os/handler.h"
25 
26 namespace bluetooth {
27 namespace hci {
28 
29 class Controller : public Module {
30  public:
31   Controller();
32   Controller(const Controller&) = delete;
33   Controller& operator=(const Controller&) = delete;
34 
35   virtual ~Controller();
36 
37   using CompletedAclPacketsCallback =
38       common::ContextualCallback<void(uint16_t /* handle */, uint16_t /* num_packets */)>;
39   virtual void RegisterCompletedAclPacketsCallback(CompletedAclPacketsCallback cb);
40 
41   virtual void UnregisterCompletedAclPacketsCallback();
42 
43   virtual void RegisterCompletedMonitorAclPacketsCallback(CompletedAclPacketsCallback cb);
44   virtual void UnregisterCompletedMonitorAclPacketsCallback();
45 
46   virtual std::string GetLocalName() const;
47 
48   virtual LocalVersionInformation GetLocalVersionInformation() const;
49 
50   virtual bool SupportsSimplePairing() const;
51   virtual bool SupportsSecureConnections() const;
52   virtual bool SupportsSimultaneousLeBrEdr() const;
53   virtual bool SupportsInterlacedInquiryScan() const;
54   virtual bool SupportsRssiWithInquiryResults() const;
55   virtual bool SupportsExtendedInquiryResponse() const;
56   virtual bool SupportsRoleSwitch() const;
57   virtual bool Supports3SlotPackets() const;
58   virtual bool Supports5SlotPackets() const;
59   virtual bool SupportsClassic2mPhy() const;
60   virtual bool SupportsClassic3mPhy() const;
61   virtual bool Supports3SlotEdrPackets() const;
62   virtual bool Supports5SlotEdrPackets() const;
63   virtual bool SupportsSco() const;
64   virtual bool SupportsHv2Packets() const;
65   virtual bool SupportsHv3Packets() const;
66   virtual bool SupportsEv3Packets() const;
67   virtual bool SupportsEv4Packets() const;
68   virtual bool SupportsEv5Packets() const;
69   virtual bool SupportsEsco2mPhy() const;
70   virtual bool SupportsEsco3mPhy() const;
71   virtual bool Supports3SlotEscoEdrPackets() const;
72   virtual bool SupportsHoldMode() const;
73   virtual bool SupportsSniffMode() const;
74   virtual bool SupportsParkMode() const;
75   virtual bool SupportsNonFlushablePb() const;
76   virtual bool SupportsSniffSubrating() const;
77   virtual bool SupportsEncryptionPause() const;
78   virtual bool SupportsBle() const;
79 
80   virtual bool SupportsBleEncryption() const;
81   virtual bool SupportsBleConnectionParametersRequest() const;
82   virtual bool SupportsBleExtendedReject() const;
83   virtual bool SupportsBlePeripheralInitiatedFeaturesExchange() const;
84   virtual bool SupportsBlePing() const;
85   virtual bool SupportsBleDataPacketLengthExtension() const;
86   virtual bool SupportsBlePrivacy() const;
87   virtual bool SupportsBleExtendedScannerFilterPolicies() const;
88   virtual bool SupportsBle2mPhy() const;
89   virtual bool SupportsBleStableModulationIndexTx() const;
90   virtual bool SupportsBleStableModulationIndexRx() const;
91   virtual bool SupportsBleCodedPhy() const;
92   virtual bool SupportsBleExtendedAdvertising() const;
93   virtual bool SupportsBlePeriodicAdvertising() const;
94   virtual bool SupportsBleChannelSelectionAlgorithm2() const;
95   virtual bool SupportsBlePowerClass1() const;
96   virtual bool SupportsBleMinimumUsedChannels() const;
97   virtual bool SupportsBleConnectionCteRequest() const;
98   virtual bool SupportsBleConnectionCteResponse() const;
99   virtual bool SupportsBleConnectionlessCteTransmitter() const;
100   virtual bool SupportsBleConnectionlessCteReceiver() const;
101   virtual bool SupportsBleAntennaSwitchingDuringCteTx() const;
102   virtual bool SupportsBleAntennaSwitchingDuringCteRx() const;
103   virtual bool SupportsBleReceivingConstantToneExtensions() const;
104   virtual bool SupportsBlePeriodicAdvertisingSyncTransferSender() const;
105   virtual bool SupportsBlePeriodicAdvertisingSyncTransferRecipient() const;
106   virtual bool SupportsBleSleepClockAccuracyUpdates() const;
107   virtual bool SupportsBleRemotePublicKeyValidation() const;
108   virtual bool SupportsBleConnectedIsochronousStreamCentral() const;
109   virtual bool SupportsBleConnectedIsochronousStreamPeripheral() const;
110   virtual bool SupportsBleIsochronousBroadcaster() const;
111   virtual bool SupportsBleSynchronizedReceiver() const;
112   virtual bool SupportsBleIsochronousChannelsHostSupport() const;
113   virtual bool SupportsBlePowerControlRequest() const;
114   virtual bool SupportsBlePowerChangeIndication() const;
115   virtual bool SupportsBlePathLossMonitoring() const;
116 
117   virtual uint16_t GetAclPacketLength() const;
118 
119   virtual uint16_t GetNumAclPacketBuffers() const;
120 
121   virtual uint8_t GetScoPacketLength() const;
122 
123   virtual uint16_t GetNumScoPacketBuffers() const;
124 
125   virtual Address GetMacAddress() const;
126 
127   virtual void SetEventMask(uint64_t event_mask);
128 
129   virtual void Reset();
130 
131   virtual void SetEventFilterClearAll();
132 
133   virtual void SetEventFilterInquiryResultAllDevices();
134 
135   virtual void SetEventFilterInquiryResultClassOfDevice(ClassOfDevice class_of_device,
136                                                         ClassOfDevice class_of_device_mask);
137 
138   virtual void SetEventFilterInquiryResultAddress(Address address);
139 
140   virtual void SetEventFilterConnectionSetupAllDevices(AutoAcceptFlag auto_accept_flag);
141 
142   virtual void SetEventFilterConnectionSetupClassOfDevice(ClassOfDevice class_of_device,
143                                                           ClassOfDevice class_of_device_mask,
144                                                           AutoAcceptFlag auto_accept_flag);
145 
146   virtual void SetEventFilterConnectionSetupAddress(Address address, AutoAcceptFlag auto_accept_flag);
147 
148   virtual void WriteLocalName(std::string local_name);
149 
150   virtual void HostBufferSize(uint16_t host_acl_data_packet_length, uint8_t host_synchronous_data_packet_length,
151                               uint16_t host_total_num_acl_data_packets,
152                               uint16_t host_total_num_synchronous_data_packets);
153 
154   // LE controller commands
155   virtual void LeSetEventMask(uint64_t le_event_mask);
156 
157   virtual LeBufferSize GetLeBufferSize() const;
158 
159   virtual uint64_t GetLeSupportedStates() const;
160 
161   virtual LeBufferSize GetControllerIsoBufferSize() const;
162 
163   virtual uint64_t GetControllerLeLocalSupportedFeatures() const;
164 
165   virtual uint8_t GetLeFilterAcceptListSize() const;
166 
167   virtual uint8_t GetLeResolvingListSize() const;
168 
169   virtual LeMaximumDataLength GetLeMaximumDataLength() const;
170 
171   virtual uint16_t GetLeMaximumAdvertisingDataLength() const;
172 
173   virtual uint16_t GetLeSuggestedDefaultDataLength() const;
174 
175   virtual uint8_t GetLeNumberOfSupportedAdverisingSets() const;
176 
177   virtual uint8_t GetLePeriodicAdvertiserListSize() const;
178 
179   virtual VendorCapabilities GetVendorCapabilities() const;
180 
181   virtual bool IsSupported(OpCode op_code) const;
182 
183   static const ModuleFactory Factory;
184 
185   static constexpr uint64_t kDefaultEventMask = 0x3dbfffffffffffff;
186   static constexpr uint64_t kDefaultLeEventMask = 0x000000004d02fe7f;
187 
188  protected:
189   void ListDependencies(ModuleList* list) const override;
190 
191   void Start() override;
192 
193   void Stop() override;
194 
195   std::string ToString() const override;
196 
197   DumpsysDataFinisher GetDumpsysData(flatbuffers::FlatBufferBuilder* builder) const override;  // Module
198 
199  private:
200   virtual uint64_t GetLocalFeatures(uint8_t page_number) const;
201   virtual uint64_t GetLocalLeFeatures() const;
202 
203   struct impl;
204   std::unique_ptr<impl> impl_;
205 };
206 
207 }  // namespace hci
208 }  // namespace bluetooth
209