blob: f1c85aa3f625279eca76004067c69bec3917f5da [file] [log] [blame]
Zach Johnsonbf8193b2014-09-08 09:56:35 -07001/******************************************************************************
2 *
Jakub Pawlowski5b790fe2017-09-18 09:00:20 -07003 * Copyright 2014 Google, Inc.
Zach Johnsonbf8193b2014-09-08 09:56:35 -07004 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 ******************************************************************************/
18
19#pragma once
20
Zach Johnson30e58062014-09-26 21:14:34 -070021#include <stdbool.h>
Zach Johnsonbf8193b2014-09-08 09:56:35 -070022#include <stdint.h>
23
Zach Johnson30e58062014-09-26 21:14:34 -070024#include "device_features.h"
Zach Johnsonbf8193b2014-09-08 09:56:35 -070025#include "hci_layer.h"
26#include "hci_packet_factory.h"
27#include "hci_packet_parser.h"
28
Sharvil Nanavati06ef2052014-11-06 18:34:06 -080029static const char CONTROLLER_MODULE[] = "controller_module";
30
Zach Johnsonbf8193b2014-09-08 09:56:35 -070031typedef struct controller_t {
Zach Johnson30e58062014-09-26 21:14:34 -070032 bool (*get_is_ready)(void);
Zach Johnsonbf8193b2014-09-08 09:56:35 -070033
Jakub Pawlowskia484a882017-06-24 17:30:18 -070034 const RawAddress* (*get_address)(void);
Myles Watson4451b3b2016-11-09 10:20:44 -080035 const bt_version_t* (*get_bt_version)(void);
Zach Johnsonbf8193b2014-09-08 09:56:35 -070036
Myles Watson4451b3b2016-11-09 10:20:44 -080037 const bt_device_features_t* (*get_features_classic)(int index);
Zach Johnson30e58062014-09-26 21:14:34 -070038 uint8_t (*get_last_features_classic_index)(void);
39
Myles Watson4451b3b2016-11-09 10:20:44 -080040 const bt_device_features_t* (*get_features_ble)(void);
41 const uint8_t* (*get_ble_supported_states)(void);
Zach Johnson30e58062014-09-26 21:14:34 -070042
43 bool (*supports_simple_pairing)(void);
Satya Calloji444a8da2015-03-06 10:38:22 -080044 bool (*supports_secure_connections)(void);
Zach Johnson30e58062014-09-26 21:14:34 -070045 bool (*supports_simultaneous_le_bredr)(void);
46 bool (*supports_reading_remote_extended_features)(void);
47 bool (*supports_interlaced_inquiry_scan)(void);
48 bool (*supports_rssi_with_inquiry_results)(void);
49 bool (*supports_extended_inquiry_response)(void);
50 bool (*supports_master_slave_role_switch)(void);
Mudumba Ananth57f65082017-02-09 09:05:48 -080051 bool (*supports_enhanced_setup_synchronous_connection)(void);
52 bool (*supports_enhanced_accept_synchronous_connection)(void);
Zach Johnson30e58062014-09-26 21:14:34 -070053
54 bool (*supports_ble)(void);
Priti Aghera636d6712014-12-18 13:55:48 -080055 bool (*supports_ble_packet_extension)(void);
Zach Johnson30e58062014-09-26 21:14:34 -070056 bool (*supports_ble_connection_parameters_request)(void);
Satya Calloji444a8da2015-03-06 10:38:22 -080057 bool (*supports_ble_privacy)(void);
Jakub Pawlowskiba786012017-06-26 11:26:46 -070058 bool (*supports_ble_set_privacy_mode)(void);
Jakub Pawlowski4b1feb62017-03-09 18:11:43 -080059 bool (*supports_ble_2m_phy)(void);
60 bool (*supports_ble_coded_phy)(void);
Jakub Pawlowski1f4cc6d2016-11-28 11:16:04 -080061 bool (*supports_ble_extended_advertising)(void);
62 bool (*supports_ble_periodic_advertising)(void);
Zach Johnson30e58062014-09-26 21:14:34 -070063
64 // Get the cached acl data sizes for the controller.
65 uint16_t (*get_acl_data_size_classic)(void);
66 uint16_t (*get_acl_data_size_ble)(void);
67
68 // Get the cached acl packet sizes for the controller.
69 // This is a convenience function for the respective
70 // acl data size + size of the acl header.
71 uint16_t (*get_acl_packet_size_classic)(void);
72 uint16_t (*get_acl_packet_size_ble)(void);
73
Priti Aghera636d6712014-12-18 13:55:48 -080074 uint16_t (*get_ble_default_data_packet_length)(void);
Jakub Pawlowski4f0c5b52018-02-02 22:05:11 -080075 uint16_t (*get_ble_maximum_tx_data_length)(void);
Jakub Pawlowski1f4cc6d2016-11-28 11:16:04 -080076 uint16_t (*get_ble_maxium_advertising_data_length)(void);
77 uint8_t (*get_ble_number_of_supported_advertising_sets)(void);
Priti Aghera636d6712014-12-18 13:55:48 -080078
Zach Johnson30e58062014-09-26 21:14:34 -070079 // Get the number of acl packets the controller can buffer.
80 uint16_t (*get_acl_buffer_count_classic)(void);
81 uint8_t (*get_acl_buffer_count_ble)(void);
Satya Calloji444a8da2015-03-06 10:38:22 -080082
Priti Agherab8b3e802015-04-17 18:11:24 -070083 uint8_t (*get_ble_white_list_size)(void);
84
Satya Calloji444a8da2015-03-06 10:38:22 -080085 uint8_t (*get_ble_resolving_list_max_size)(void);
86 void (*set_ble_resolving_list_max_size)(int resolving_list_max_size);
Myles Watson4451b3b2016-11-09 10:20:44 -080087 uint8_t* (*get_local_supported_codecs)(uint8_t* number_of_codecs);
Srinu Jella6e7a3352015-08-24 21:00:28 +053088 bool (*supports_ble_offload_features)(void);
Jakub Pawlowski96fb2732017-03-24 17:52:02 -070089 uint8_t (*get_le_all_initiating_phys)(void);
90
Zach Johnsonbf8193b2014-09-08 09:56:35 -070091} controller_t;
92
Myles Watson4451b3b2016-11-09 10:20:44 -080093const controller_t* controller_get_interface();
Zach Johnsonbf8193b2014-09-08 09:56:35 -070094
Myles Watson4451b3b2016-11-09 10:20:44 -080095const controller_t* controller_get_test_interface(
96 const hci_t* hci_interface,
97 const hci_packet_factory_t* packet_factory_interface,
98 const hci_packet_parser_t* packet_parser_interface);