1 /* 2 * Copyright 2023 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/class_of_device.h" 22 #include "hci/hci_packets.h" 23 #include "hci/le_rand_callback.h" 24 25 namespace bluetooth { 26 namespace hci { 27 28 class ControllerInterface { 29 public: 30 ControllerInterface() = default; 31 virtual ~ControllerInterface() = default; 32 33 /// Write debug information relevant for the controller interface 34 /// to the dumpsys output file descriptor. Dump(int)35 virtual void Dump(int /*fd*/) const {} 36 37 using CompletedAclPacketsCallback = 38 common::ContextualCallback<void(uint16_t /* handle */, uint16_t /* num_packets */)>; 39 virtual void RegisterCompletedAclPacketsCallback(CompletedAclPacketsCallback cb) = 0; 40 41 virtual void UnregisterCompletedAclPacketsCallback() = 0; 42 43 virtual void RegisterCompletedMonitorAclPacketsCallback(CompletedAclPacketsCallback cb) = 0; 44 virtual void UnregisterCompletedMonitorAclPacketsCallback() = 0; 45 46 virtual std::string GetLocalName() const = 0; 47 virtual LocalVersionInformation GetLocalVersionInformation() const = 0; 48 49 virtual bool SupportsSimplePairing() const = 0; 50 virtual bool SupportsSecureConnections() const = 0; 51 virtual bool SupportsSimultaneousLeBrEdr() const = 0; 52 virtual bool SupportsInterlacedInquiryScan() const = 0; 53 virtual bool SupportsRssiWithInquiryResults() const = 0; 54 virtual bool SupportsExtendedInquiryResponse() const = 0; 55 virtual bool SupportsRoleSwitch() const = 0; 56 virtual bool Supports3SlotPackets() const = 0; 57 virtual bool Supports5SlotPackets() const = 0; 58 virtual bool SupportsClassic2mPhy() const = 0; 59 virtual bool SupportsClassic3mPhy() const = 0; 60 virtual bool Supports3SlotEdrPackets() const = 0; 61 virtual bool Supports5SlotEdrPackets() const = 0; 62 virtual bool SupportsSco() const = 0; 63 virtual bool SupportsHv2Packets() const = 0; 64 virtual bool SupportsHv3Packets() const = 0; 65 virtual bool SupportsEv3Packets() const = 0; 66 virtual bool SupportsEv4Packets() const = 0; 67 virtual bool SupportsEv5Packets() const = 0; 68 virtual bool SupportsEsco2mPhy() const = 0; 69 virtual bool SupportsEsco3mPhy() const = 0; 70 virtual bool Supports3SlotEscoEdrPackets() const = 0; 71 virtual bool SupportsHoldMode() const = 0; 72 virtual bool SupportsSniffMode() const = 0; 73 virtual bool SupportsParkMode() const = 0; 74 virtual bool SupportsNonFlushablePb() const = 0; 75 virtual bool SupportsSniffSubrating() const = 0; 76 virtual bool SupportsEncryptionPause() const = 0; 77 virtual bool SupportsBle() const = 0; 78 79 virtual bool SupportsBleEncryption() const = 0; 80 virtual bool SupportsBleConnectionParametersRequest() const = 0; 81 virtual bool SupportsBleExtendedReject() const = 0; 82 virtual bool SupportsBlePeripheralInitiatedFeaturesExchange() const = 0; 83 virtual bool SupportsBlePing() const = 0; 84 virtual bool SupportsBleDataPacketLengthExtension() const = 0; 85 virtual bool SupportsBlePrivacy() const = 0; 86 virtual bool SupportsBleExtendedScannerFilterPolicies() const = 0; 87 virtual bool SupportsBle2mPhy() const = 0; 88 virtual bool SupportsBleStableModulationIndexTx() const = 0; 89 virtual bool SupportsBleStableModulationIndexRx() const = 0; 90 virtual bool SupportsBleCodedPhy() const = 0; 91 virtual bool SupportsBleExtendedAdvertising() const = 0; 92 virtual bool SupportsBlePeriodicAdvertising() const = 0; 93 virtual bool SupportsBleChannelSelectionAlgorithm2() const = 0; 94 virtual bool SupportsBlePowerClass1() const = 0; 95 virtual bool SupportsBleMinimumUsedChannels() const = 0; 96 virtual bool SupportsBleConnectionCteRequest() const = 0; 97 virtual bool SupportsBleConnectionCteResponse() const = 0; 98 virtual bool SupportsBleConnectionlessCteTransmitter() const = 0; 99 virtual bool SupportsBleConnectionlessCteReceiver() const = 0; 100 virtual bool SupportsBleAntennaSwitchingDuringCteTx() const = 0; 101 virtual bool SupportsBleAntennaSwitchingDuringCteRx() const = 0; 102 virtual bool SupportsBleReceivingConstantToneExtensions() const = 0; 103 virtual bool SupportsBlePeriodicAdvertisingSyncTransferSender() const = 0; 104 virtual bool SupportsBlePeriodicAdvertisingSyncTransferRecipient() const = 0; 105 virtual bool SupportsBleSleepClockAccuracyUpdates() const = 0; 106 virtual bool SupportsBleRemotePublicKeyValidation() const = 0; 107 virtual bool SupportsBleConnectedIsochronousStreamCentral() const = 0; 108 virtual bool SupportsBleConnectedIsochronousStreamPeripheral() const = 0; 109 virtual bool SupportsBleIsochronousBroadcaster() const = 0; 110 virtual bool SupportsBleSynchronizedReceiver() const = 0; 111 virtual bool SupportsBleIsochronousChannelsHostSupport() const = 0; 112 virtual bool SupportsBlePowerControlRequest() const = 0; 113 virtual bool SupportsBlePowerChangeIndication() const = 0; 114 virtual bool SupportsBlePathLossMonitoring() const = 0; 115 virtual bool SupportsBlePeriodicAdvertisingAdi() const = 0; 116 virtual bool SupportsBleConnectionSubrating() const = 0; 117 virtual bool SupportsBleConnectionSubratingHost() const = 0; 118 virtual bool SupportsBleChannelSounding() const = 0; 119 120 virtual uint16_t GetAclPacketLength() const = 0; 121 122 virtual uint16_t GetNumAclPacketBuffers() const = 0; 123 124 virtual uint8_t GetScoPacketLength() const = 0; 125 126 virtual uint16_t GetNumScoPacketBuffers() const = 0; 127 128 virtual Address GetMacAddress() const = 0; 129 130 virtual void SetEventMask(uint64_t event_mask) = 0; 131 132 virtual void Reset() = 0; 133 134 virtual void LeRand(LeRandCallback cb) = 0; 135 136 virtual void SetEventFilterClearAll() = 0; 137 138 virtual void SetEventFilterInquiryResultAllDevices() = 0; 139 140 virtual void SetEventFilterInquiryResultClassOfDevice(ClassOfDevice class_of_device, 141 ClassOfDevice class_of_device_mask) = 0; 142 143 virtual void SetEventFilterInquiryResultAddress(Address address) = 0; 144 145 virtual void SetEventFilterConnectionSetupAllDevices(AutoAcceptFlag auto_accept_flag) = 0; 146 147 virtual void SetEventFilterConnectionSetupClassOfDevice(ClassOfDevice class_of_device, 148 ClassOfDevice class_of_device_mask, 149 AutoAcceptFlag auto_accept_flag) = 0; 150 151 virtual void SetEventFilterConnectionSetupAddress(Address address, 152 AutoAcceptFlag auto_accept_flag) = 0; 153 154 virtual void WriteLocalName(std::string local_name) = 0; 155 156 virtual void HostBufferSize(uint16_t host_acl_data_packet_length, 157 uint8_t host_synchronous_data_packet_length, 158 uint16_t host_total_num_acl_data_packets, 159 uint16_t host_total_num_synchronous_data_packets) = 0; 160 161 // LE controller commands 162 virtual void LeSetEventMask(uint64_t le_event_mask) = 0; 163 164 virtual LeBufferSize GetLeBufferSize() const = 0; 165 166 virtual uint64_t GetLeSupportedStates() const = 0; 167 168 virtual LeBufferSize GetControllerIsoBufferSize() const = 0; 169 170 virtual uint64_t GetControllerLeLocalSupportedFeatures() const = 0; 171 172 virtual uint8_t GetLeFilterAcceptListSize() const = 0; 173 174 virtual uint8_t GetLeResolvingListSize() const = 0; 175 176 virtual LeMaximumDataLength GetLeMaximumDataLength() const = 0; 177 178 virtual uint16_t GetLeMaximumAdvertisingDataLength() const = 0; 179 180 virtual uint16_t GetLeSuggestedDefaultDataLength() const = 0; 181 182 virtual uint8_t GetLeNumberOfSupportedAdverisingSets() const = 0; 183 184 virtual uint8_t GetLePeriodicAdvertiserListSize() const = 0; 185 186 // 7.4.8 Read Local Supported Codecs command v1 only returns codecs on the BR/EDR transport 187 virtual std::vector<uint8_t> GetLocalSupportedBrEdrCodecIds() const = 0; 188 189 struct VendorCapabilities { 190 uint8_t is_supported_; 191 uint8_t max_advt_instances_; 192 uint8_t offloaded_resolution_of_private_address_; 193 uint16_t total_scan_results_storage_; 194 uint8_t max_irk_list_sz_; 195 uint8_t filtering_support_; 196 uint8_t max_filter_; 197 uint8_t activity_energy_info_support_; 198 uint16_t version_supported_; 199 uint16_t total_num_of_advt_tracked_; 200 uint8_t extended_scan_support_; 201 uint8_t debug_logging_supported_; 202 uint8_t le_address_generation_offloading_support_; 203 uint32_t a2dp_source_offload_capability_mask_; 204 uint8_t bluetooth_quality_report_support_; 205 uint32_t dynamic_audio_buffer_support_; 206 uint8_t a2dp_offload_v2_support_; 207 }; 208 209 virtual uint32_t GetDabSupportedCodecs() const = 0; 210 virtual const std::array<DynamicAudioBufferCodecCapability, 32>& GetDabCodecCapabilities() 211 const = 0; 212 213 virtual void SetDabAudioBufferTime(uint16_t buffer_time_ms) = 0; 214 215 virtual VendorCapabilities GetVendorCapabilities() const = 0; 216 217 virtual bool IsSupported(OpCode op_code) const = 0; 218 219 virtual bool IsRpaGenerationSupported(void) const = 0; 220 }; 221 222 } // namespace hci 223 } // namespace bluetooth 224