blob: ba02dcbcb141eb5e1beed80dba25962820b190ca [file] [log] [blame]
Myles Watsonb79d5ea2019-06-03 16:33:59 -07001/*
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"
Martin Brabham94db40c2019-03-29 10:24:52 -070020#include "hci/address.h"
Myles Watsonb79d5ea2019-06-03 16:33:59 -070021#include "hci/hci_packets.h"
22#include "module.h"
23#include "os/handler.h"
24
25namespace bluetooth {
26namespace hci {
27
28class 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
Myles Watsonf3916a02019-11-07 10:26:54 -080037 virtual std::string GetControllerLocalName() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080038
Myles Watsonf3916a02019-11-07 10:26:54 -080039 virtual LocalVersionInformation GetControllerLocalVersionInformation() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080040
Myles Watsonf3916a02019-11-07 10:26:54 -080041 virtual std::array<uint8_t, 64> GetControllerLocalSupportedCommands() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080042
Myles Watsonf3916a02019-11-07 10:26:54 -080043 virtual uint64_t GetControllerLocalSupportedFeatures() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080044
Myles Watsonf3916a02019-11-07 10:26:54 -080045 virtual uint8_t GetControllerLocalExtendedFeaturesMaxPageNumber() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080046
Myles Watsonf3916a02019-11-07 10:26:54 -080047 virtual uint64_t GetControllerLocalExtendedFeatures(uint8_t page_number) const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080048
Myles Watsonf3916a02019-11-07 10:26:54 -080049 virtual uint16_t GetControllerAclPacketLength() const;
Myles Watsonb79d5ea2019-06-03 16:33:59 -070050
Myles Watsonf3916a02019-11-07 10:26:54 -080051 virtual uint16_t GetControllerNumAclPacketBuffers() const;
Myles Watsonb79d5ea2019-06-03 16:33:59 -070052
Myles Watsonf3916a02019-11-07 10:26:54 -080053 virtual uint8_t GetControllerScoPacketLength() const;
Myles Watsonb79d5ea2019-06-03 16:33:59 -070054
Myles Watsonf3916a02019-11-07 10:26:54 -080055 virtual uint16_t GetControllerNumScoPacketBuffers() const;
Hansong Zhangc443be72019-06-18 16:04:01 -070056
Myles Watsonf3916a02019-11-07 10:26:54 -080057 virtual Address GetControllerMacAddress() const;
Myles Watsonb79d5ea2019-06-03 16:33:59 -070058
Chienyuana7ad3fb2019-08-15 18:04:32 +080059 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
Myles Watsonf3916a02019-11-07 10:26:54 -080089 virtual LeBufferSize GetControllerLeBufferSize() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080090
Myles Watsonf3916a02019-11-07 10:26:54 -080091 virtual uint64_t GetControllerLeLocalSupportedFeatures() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080092
Myles Watsonf3916a02019-11-07 10:26:54 -080093 virtual uint64_t GetControllerLeSupportedStates() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080094
Myles Watsonf3916a02019-11-07 10:26:54 -080095 virtual LeMaximumDataLength GetControllerLeMaximumDataLength() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080096
Myles Watsonf3916a02019-11-07 10:26:54 -080097 virtual uint16_t GetControllerLeMaximumAdvertisingDataLength() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +080098
Chris Manton9809f872019-12-09 21:53:45 -080099 virtual uint8_t GetControllerLeNumberOfSupportedAdverisingSets() const;
Chienyuana7ad3fb2019-08-15 18:04:32 +0800100
Myles Watsonf3916a02019-11-07 10:26:54 -0800101 virtual VendorCapabilities GetControllerVendorCapabilities() const;
Chienyuan1beb9f82019-09-03 14:24:26 +0800102
Myles Watsonf3916a02019-11-07 10:26:54 -0800103 virtual bool IsSupported(OpCode op_code) const;
Chienyuana7ad3fb2019-08-15 18:04:32 +0800104
Myles Watsonb79d5ea2019-06-03 16:33:59 -0700105 static const ModuleFactory Factory;
106
Myles Watsond7399052020-02-12 08:53:39 -0800107 static constexpr uint64_t kDefaultEventMask = 0x3dbfffffffffffff;
108
Myles Watsonb79d5ea2019-06-03 16:33:59 -0700109 protected:
110 void ListDependencies(ModuleList* list) override;
111
112 void Start() override;
113
114 void Stop() override;
115
Zongheng Wang6fd349a2019-11-12 16:14:01 -0800116 std::string ToString() const override;
117
Myles Watsonb79d5ea2019-06-03 16:33:59 -0700118 private:
119 struct impl;
120 std::unique_ptr<impl> impl_;
121};
122
123} // namespace hci
124} // namespace bluetooth