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 <vector> 20 21 #include "hci/address.h" 22 #include "hci/controller_interface.h" 23 #include "hci/hci_packets.h" 24 #include "hci/le_rand_callback.h" 25 #include "module.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, public ControllerInterface { 34 public: 35 Controller(); 36 Controller(const Controller&) = delete; 37 Controller& operator=(const Controller&) = delete; 38 39 void Dump(int fd) const override; 40 41 virtual ~Controller(); 42 43 virtual void RegisterCompletedAclPacketsCallback(CompletedAclPacketsCallback cb) override; 44 45 virtual void UnregisterCompletedAclPacketsCallback() override; 46 47 virtual void RegisterCompletedMonitorAclPacketsCallback(CompletedAclPacketsCallback cb) override; 48 virtual void UnregisterCompletedMonitorAclPacketsCallback() override; 49 50 virtual std::string GetLocalName() const override; 51 52 virtual LocalVersionInformation GetLocalVersionInformation() const override; 53 54 virtual bool SupportsSimplePairing() const override; 55 virtual bool SupportsSecureConnections() const override; 56 virtual bool SupportsSimultaneousLeBrEdr() const override; 57 virtual bool SupportsInterlacedInquiryScan() const override; 58 virtual bool SupportsRssiWithInquiryResults() const override; 59 virtual bool SupportsExtendedInquiryResponse() const override; 60 virtual bool SupportsRoleSwitch() const override; 61 virtual bool Supports3SlotPackets() const override; 62 virtual bool Supports5SlotPackets() const override; 63 virtual bool SupportsClassic2mPhy() const override; 64 virtual bool SupportsClassic3mPhy() const override; 65 virtual bool Supports3SlotEdrPackets() const override; 66 virtual bool Supports5SlotEdrPackets() const override; 67 virtual bool SupportsSco() const override; 68 virtual bool SupportsHv2Packets() const override; 69 virtual bool SupportsHv3Packets() const override; 70 virtual bool SupportsEv3Packets() const override; 71 virtual bool SupportsEv4Packets() const override; 72 virtual bool SupportsEv5Packets() const override; 73 virtual bool SupportsEsco2mPhy() const override; 74 virtual bool SupportsEsco3mPhy() const override; 75 virtual bool Supports3SlotEscoEdrPackets() const override; 76 virtual bool SupportsHoldMode() const override; 77 virtual bool SupportsSniffMode() const override; 78 virtual bool SupportsParkMode() const override; 79 virtual bool SupportsNonFlushablePb() const override; 80 virtual bool SupportsSniffSubrating() const override; 81 virtual bool SupportsEncryptionPause() const override; 82 virtual bool SupportsBle() const override; 83 84 virtual bool SupportsBleEncryption() const override; 85 virtual bool SupportsBleConnectionParametersRequest() const override; 86 virtual bool SupportsBleExtendedReject() const override; 87 virtual bool SupportsBlePeripheralInitiatedFeaturesExchange() const override; 88 virtual bool SupportsBlePing() const override; 89 virtual bool SupportsBleDataPacketLengthExtension() const override; 90 virtual bool SupportsBlePrivacy() const override; 91 virtual bool SupportsBleExtendedScannerFilterPolicies() const override; 92 virtual bool SupportsBle2mPhy() const override; 93 virtual bool SupportsBleStableModulationIndexTx() const override; 94 virtual bool SupportsBleStableModulationIndexRx() const override; 95 virtual bool SupportsBleCodedPhy() const override; 96 virtual bool SupportsBleExtendedAdvertising() const override; 97 virtual bool SupportsBlePeriodicAdvertising() const override; 98 virtual bool SupportsBleChannelSelectionAlgorithm2() const override; 99 virtual bool SupportsBlePowerClass1() const override; 100 virtual bool SupportsBleMinimumUsedChannels() const override; 101 virtual bool SupportsBleConnectionCteRequest() const override; 102 virtual bool SupportsBleConnectionCteResponse() const override; 103 virtual bool SupportsBleConnectionlessCteTransmitter() const override; 104 virtual bool SupportsBleConnectionlessCteReceiver() const override; 105 virtual bool SupportsBleAntennaSwitchingDuringCteTx() const override; 106 virtual bool SupportsBleAntennaSwitchingDuringCteRx() const override; 107 virtual bool SupportsBleReceivingConstantToneExtensions() const override; 108 virtual bool SupportsBlePeriodicAdvertisingSyncTransferSender() const override; 109 virtual bool SupportsBlePeriodicAdvertisingSyncTransferRecipient() const override; 110 virtual bool SupportsBleSleepClockAccuracyUpdates() const override; 111 virtual bool SupportsBleRemotePublicKeyValidation() const override; 112 virtual bool SupportsBleConnectedIsochronousStreamCentral() const override; 113 virtual bool SupportsBleConnectedIsochronousStreamPeripheral() const override; 114 virtual bool SupportsBleIsochronousBroadcaster() const override; 115 virtual bool SupportsBleSynchronizedReceiver() const override; 116 virtual bool SupportsBleIsochronousChannelsHostSupport() const override; 117 virtual bool SupportsBlePowerControlRequest() const override; 118 virtual bool SupportsBlePowerChangeIndication() const override; 119 virtual bool SupportsBlePathLossMonitoring() const override; 120 virtual bool SupportsBlePeriodicAdvertisingAdi() const override; 121 virtual bool SupportsBleConnectionSubrating() const override; 122 virtual bool SupportsBleConnectionSubratingHost() const override; 123 virtual bool SupportsBleChannelSounding() const override; 124 125 virtual uint16_t GetAclPacketLength() const override; 126 127 virtual uint16_t GetNumAclPacketBuffers() const override; 128 129 virtual uint8_t GetScoPacketLength() const override; 130 131 virtual uint16_t GetNumScoPacketBuffers() const override; 132 133 virtual Address GetMacAddress() const override; 134 135 virtual void SetEventMask(uint64_t event_mask) override; 136 137 virtual void Reset() override; 138 139 virtual void LeRand(LeRandCallback cb) override; 140 141 virtual void SetEventFilterClearAll() override; 142 143 virtual void SetEventFilterInquiryResultAllDevices() override; 144 145 virtual void SetEventFilterInquiryResultClassOfDevice( 146 ClassOfDevice class_of_device, ClassOfDevice class_of_device_mask) override; 147 148 virtual void SetEventFilterInquiryResultAddress(Address address) override; 149 150 virtual void SetEventFilterConnectionSetupAllDevices(AutoAcceptFlag auto_accept_flag) override; 151 152 virtual void SetEventFilterConnectionSetupClassOfDevice(ClassOfDevice class_of_device, 153 ClassOfDevice class_of_device_mask, 154 AutoAcceptFlag auto_accept_flag) override; 155 156 virtual void SetEventFilterConnectionSetupAddress(Address address, 157 AutoAcceptFlag auto_accept_flag) override; 158 159 virtual void WriteLocalName(std::string local_name) override; 160 161 virtual void HostBufferSize(uint16_t host_acl_data_packet_length, 162 uint8_t host_synchronous_data_packet_length, 163 uint16_t host_total_num_acl_data_packets, 164 uint16_t host_total_num_synchronous_data_packets) override; 165 166 // LE controller commands 167 virtual void LeSetEventMask(uint64_t le_event_mask) override; 168 169 virtual LeBufferSize GetLeBufferSize() const override; 170 171 virtual uint64_t GetLeSupportedStates() const override; 172 173 virtual LeBufferSize GetControllerIsoBufferSize() const override; 174 175 virtual uint64_t GetControllerLeLocalSupportedFeatures() const override; 176 177 virtual uint8_t GetLeFilterAcceptListSize() const override; 178 179 virtual uint8_t GetLeResolvingListSize() const override; 180 181 virtual LeMaximumDataLength GetLeMaximumDataLength() const override; 182 183 virtual uint16_t GetLeMaximumAdvertisingDataLength() const override; 184 185 virtual uint16_t GetLeSuggestedDefaultDataLength() const override; 186 187 virtual uint8_t GetLeNumberOfSupportedAdverisingSets() const override; 188 189 virtual uint8_t GetLePeriodicAdvertiserListSize() const override; 190 191 // 7.4.8 Read Local Supported Codecs command v1 only returns codecs on the BR/EDR transport 192 virtual std::vector<uint8_t> GetLocalSupportedBrEdrCodecIds() const override; 193 194 virtual VendorCapabilities GetVendorCapabilities() const override; 195 196 virtual uint32_t GetDabSupportedCodecs() const override; 197 virtual const std::array<DynamicAudioBufferCodecCapability, 32>& GetDabCodecCapabilities() 198 const override; 199 200 virtual void SetDabAudioBufferTime(uint16_t buffer_time_ms) override; 201 202 virtual bool IsSupported(OpCode op_code) const override; 203 204 static const ModuleFactory Factory; 205 206 static constexpr uint64_t kDefaultEventMask = 0x3dbfffffffffffff; 207 static constexpr uint64_t kDefaultEventMaskPage2 = 0x2000000; 208 static constexpr uint64_t kDefaultLeEventMask = 0x000000074d02fe7f; 209 static constexpr uint64_t kLeCSEventMask = 0x0007f80000000000; 210 211 static constexpr uint64_t kLeEventMask53 = 0x00000007ffffffff; 212 static constexpr uint64_t kLeEventMask52 = 0x00000003ffffffff; 213 static constexpr uint64_t kLeEventMask51 = 0x0000000000ffffff; 214 static constexpr uint64_t kLeEventMask50 = 0x00000000000fffff; 215 static constexpr uint64_t kLeEventMask42 = 0x00000000000003ff; 216 static constexpr uint64_t kLeEventMask41 = 0x000000000000003f; 217 218 static uint64_t MaskLeEventMask(HciVersion version, uint64_t mask); 219 220 virtual bool IsRpaGenerationSupported(void) const override; 221 222 protected: 223 void ListDependencies(ModuleList* list) const override; 224 225 void Start() override; 226 227 void Stop() override; 228 229 std::string ToString() const override; 230 231 private: 232 virtual uint64_t GetLocalFeatures(uint8_t page_number) const; 233 virtual uint64_t GetLocalLeFeatures() const; 234 235 struct impl; 236 std::unique_ptr<impl> impl_; 237 }; 238 239 } // namespace hci 240 } // namespace bluetooth 241