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/callback.h" 20 #include "hci/address.h" 21 #include "hci/hci_packets.h" 22 #include "module.h" 23 #include "os/handler.h" 24 25 namespace bluetooth { 26 namespace hci { 27 28 class Controller : public Module { 29 public: 30 Controller(); 31 virtual ~Controller(); 32 DISALLOW_COPY_AND_ASSIGN(Controller); 33 34 virtual void RegisterCompletedAclPacketsCallback( 35 common::Callback<void(uint16_t /* handle */, uint16_t /* num_packets */)> cb, os::Handler* handler); 36 37 virtual std::string GetControllerLocalName() const; 38 39 virtual LocalVersionInformation GetControllerLocalVersionInformation() const; 40 41 virtual std::array<uint8_t, 64> GetControllerLocalSupportedCommands() const; 42 43 virtual uint64_t GetControllerLocalSupportedFeatures() const; 44 45 virtual uint8_t GetControllerLocalExtendedFeaturesMaxPageNumber() const; 46 47 virtual uint64_t GetControllerLocalExtendedFeatures(uint8_t page_number) const; 48 49 virtual uint16_t GetControllerAclPacketLength() const; 50 51 virtual uint16_t GetControllerNumAclPacketBuffers() const; 52 53 virtual uint8_t GetControllerScoPacketLength() const; 54 55 virtual uint16_t GetControllerNumScoPacketBuffers() const; 56 57 virtual Address GetControllerMacAddress() const; 58 59 virtual void SetEventMask(uint64_t event_mask); 60 61 virtual void Reset(); 62 63 virtual void SetEventFilterClearAll(); 64 65 virtual void SetEventFilterInquiryResultAllDevices(); 66 67 virtual void SetEventFilterInquiryResultClassOfDevice(ClassOfDevice class_of_device, 68 ClassOfDevice class_of_device_mask); 69 70 virtual void SetEventFilterInquiryResultAddress(Address address); 71 72 virtual void SetEventFilterConnectionSetupAllDevices(AutoAcceptFlag auto_accept_flag); 73 74 virtual void SetEventFilterConnectionSetupClassOfDevice(ClassOfDevice class_of_device, 75 ClassOfDevice class_of_device_mask, 76 AutoAcceptFlag auto_accept_flag); 77 78 virtual void SetEventFilterConnectionSetupAddress(Address address, AutoAcceptFlag auto_accept_flag); 79 80 virtual void WriteLocalName(std::string local_name); 81 82 virtual void HostBufferSize(uint16_t host_acl_data_packet_length, uint8_t host_synchronous_data_packet_length, 83 uint16_t host_total_num_acl_data_packets, 84 uint16_t host_total_num_synchronous_data_packets); 85 86 // LE controller commands 87 virtual void LeSetEventMask(uint64_t le_event_mask); 88 89 virtual LeBufferSize GetControllerLeBufferSize() const; 90 91 virtual uint64_t GetControllerLeLocalSupportedFeatures() const; 92 93 virtual uint64_t GetControllerLeSupportedStates() const; 94 95 virtual LeMaximumDataLength GetControllerLeMaximumDataLength() const; 96 97 virtual uint16_t GetControllerLeMaximumAdvertisingDataLength() const; 98 99 virtual uint8_t GetControllerLeNumberOfSupportedAdverisingSets() const; 100 101 virtual VendorCapabilities GetControllerVendorCapabilities() const; 102 103 virtual bool IsSupported(OpCode op_code) const; 104 105 static const ModuleFactory Factory; 106 107 static constexpr uint64_t kDefaultEventMask = 0x3dbfffffffffffff; 108 109 protected: 110 void ListDependencies(ModuleList* list) override; 111 112 void Start() override; 113 114 void Stop() override; 115 116 std::string ToString() const override; 117 118 private: 119 struct impl; 120 std::unique_ptr<impl> impl_; 121 }; 122 123 } // namespace hci 124 } // namespace bluetooth 125