diff options
author | Priti Aghera <paghera@broadcom.com> | 2014-12-18 13:55:48 -0800 |
---|---|---|
committer | Andre Eisenbach <eisenbach@google.com> | 2015-04-15 23:25:17 -0700 |
commit | 636d6714a4c08dd99d2147dcce05dc3892e804b4 (patch) | |
tree | 1ae16fa567a6d95b8424bc1bbec3587412e7305a /device | |
parent | 8a0b80ebad0cb187ff7856d14b83fa74aed51d98 (diff) | |
download | android_system_bt-636d6714a4c08dd99d2147dcce05dc3892e804b4.tar.gz android_system_bt-636d6714a4c08dd99d2147dcce05dc3892e804b4.tar.bz2 android_system_bt-636d6714a4c08dd99d2147dcce05dc3892e804b4.zip |
LE Data Packet Extension support
Included support for LE data packet extension feature according
to BT 4.2 spec. This patch checks if the controller supports LE
packet extension and provides functions to set the PDU length.
Bug: 20013956
Change-Id: I6a92970fede2f793ad48c9fa2e0247ad00297533
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, |