diff options
Diffstat (limited to 'device')
| -rw-r--r-- | device/include/controller.h | 3 | ||||
| -rw-r--r-- | device/src/controller.c | 25 |
2 files changed, 27 insertions, 1 deletions
diff --git a/device/include/controller.h b/device/include/controller.h index af93e4742..2acca1bc0 100644 --- a/device/include/controller.h +++ b/device/include/controller.h @@ -51,6 +51,7 @@ typedef struct controller_t { bool (*supports_master_slave_role_switch)(void); bool (*supports_ble)(void); + bool (*supports_ble_packet_extension)(void); bool (*supports_ble_connection_parameters_request)(void); bool (*supports_ble_privacy)(void); @@ -64,6 +65,8 @@ typedef struct controller_t { uint16_t (*get_acl_packet_size_classic)(void); uint16_t (*get_acl_packet_size_ble)(void); + uint16_t (*get_ble_default_data_packet_length)(void); + // Get the number of acl packets the controller can buffer. uint16_t (*get_acl_buffer_count_classic)(void); uint8_t (*get_acl_buffer_count_ble)(void); diff --git a/device/src/controller.c b/device/src/controller.c index f0d3e584d..02edc4faf 100644 --- a/device/src/controller.c +++ b/device/src/controller.c @@ -34,7 +34,8 @@ #include "stack/include/btm_ble_api.h" #include "btcore/include/version.h" -const bt_event_mask_t BLE_EVENT_MASK = { "\x00\x00\x00\x00\x00\x00\x00\x3f" }; +const bt_event_mask_t BLE_EVENT_MASK = { "\x00\x00\x00\x00\x00\x00\x04\x7f" }; + #if (BLE_INCLUDED) const bt_event_mask_t CLASSIC_EVENT_MASK = { HCI_DUMO_EVENT_MASK_EXT }; #else @@ -69,6 +70,7 @@ static uint8_t ble_white_list_size; static uint8_t ble_resolving_list_max_size; static uint8_t ble_supported_states[BLE_SUPPORTED_STATES_SIZE]; static bt_device_features_t features_ble; +static uint16_t ble_suggested_default_data_length; static bool readable; static bool ble_supported; @@ -225,6 +227,13 @@ static future_t *start_up(void) { &ble_resolving_list_max_size); } + if (HCI_LE_DATA_LEN_EXT_SUPPORTED(features_ble.as_array)) { + response = AWAIT_COMMAND(packet_factory->make_ble_read_suggested_default_data_length()); + packet_parser->parse_ble_read_suggested_default_data_length_response( + response, + &ble_suggested_default_data_length); + } + // Set the ble event mask next response = AWAIT_COMMAND(packet_factory->make_ble_set_event_mask(&BLE_EVENT_MASK)); packet_parser->parse_generic_command_complete(response); @@ -348,6 +357,12 @@ static bool supports_ble_privacy(void) { return HCI_LE_ENHANCED_PRIVACY_SUPPORTED(features_ble.as_array); } +static bool supports_ble_packet_extension(void) { + assert(readable); + assert(ble_supported); + return HCI_LE_DATA_LEN_EXT_SUPPORTED(features_ble.as_array); +} + static bool supports_ble_connection_parameters_request(void) { assert(readable); assert(ble_supported); @@ -375,6 +390,12 @@ static uint16_t get_acl_packet_size_ble(void) { return acl_data_size_ble + HCI_DATA_PREAMBLE_SIZE; } +static uint16_t get_ble_suggested_default_data_length(void) { + assert(readable); + assert(ble_supported); + return ble_suggested_default_data_length; +} + static uint16_t get_acl_buffer_count_classic(void) { assert(readable); return acl_buffer_count_classic; @@ -420,6 +441,7 @@ static const controller_t interface = { supports_master_slave_role_switch, supports_ble, + supports_ble_packet_extension, supports_ble_connection_parameters_request, supports_ble_privacy, @@ -428,6 +450,7 @@ static const controller_t interface = { get_acl_packet_size_classic, get_acl_packet_size_ble, + get_ble_suggested_default_data_length, get_acl_buffer_count_classic, get_acl_buffer_count_ble, |
