summaryrefslogtreecommitdiffstats
path: root/device
diff options
context:
space:
mode:
authorPriti Aghera <paghera@broadcom.com>2014-12-18 13:55:48 -0800
committerAndre Eisenbach <eisenbach@google.com>2015-04-15 23:25:17 -0700
commit636d6714a4c08dd99d2147dcce05dc3892e804b4 (patch)
tree1ae16fa567a6d95b8424bc1bbec3587412e7305a /device
parent8a0b80ebad0cb187ff7856d14b83fa74aed51d98 (diff)
downloadandroid_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.h3
-rw-r--r--device/src/controller.c25
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,