mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-03 20:54:18 +00:00
hci: require ENABLE_LE_DATA_LENGTH_EXTENSION to enable max packet lenghts
This commit is contained in:
parent
dcd678ba09
commit
b435e06234
@ -66,21 +66,22 @@ LE_DEVICE_DB_PATH | Path to stored LE device information
|
|||||||
### ENABLE_* directives {#sec:enableDirectives}
|
### ENABLE_* directives {#sec:enableDirectives}
|
||||||
BTstack properties:
|
BTstack properties:
|
||||||
|
|
||||||
#define | Description
|
#define | Description
|
||||||
-----------------------------|---------------------------------------------
|
--------------------------------|---------------------------------------------
|
||||||
ENABLE_CLASSIC | Enable Classic related code in HCI and L2CAP
|
ENABLE_CLASSIC | Enable Classic related code in HCI and L2CAP
|
||||||
ENABLE_BLE | Enable BLE related code in HCI and L2CAP
|
ENABLE_BLE | Enable BLE related code in HCI and L2CAP
|
||||||
ENABLE_EHCILL | Enable eHCILL low power mode on TI CC256x/WL18xx chipsets
|
ENABLE_EHCILL | Enable eHCILL low power mode on TI CC256x/WL18xx chipsets
|
||||||
ENABLE_LOG_DEBUG | Enable log_debug messages
|
ENABLE_LOG_DEBUG | Enable log_debug messages
|
||||||
ENABLE_LOG_ERROR | Enable log_error messages
|
ENABLE_LOG_ERROR | Enable log_error messages
|
||||||
ENABLE_LOG_INFO | Enable log_info messages
|
ENABLE_LOG_INFO | Enable log_info messages
|
||||||
ENABLE_SCO_OVER_HCI | Enable SCO over HCI for chipsets (only TI CC256x/WL18xx, CSR + Broadcom H2/USB))
|
ENABLE_SCO_OVER_HCI | Enable SCO over HCI for chipsets (only TI CC256x/WL18xx, CSR + Broadcom H2/USB))
|
||||||
ENABLE_HFP_WIDE_BAND_SPEECH | Enable support for mSBC codec used in HFP profile for Wide-Band Speech
|
ENABLE_HFP_WIDE_BAND_SPEECH | Enable support for mSBC codec used in HFP profile for Wide-Band Speech
|
||||||
ENBALE_LE_PERIPHERAL | Enable support for LE Peripheral Role in HCI and Security Manager
|
ENBALE_LE_PERIPHERAL | Enable support for LE Peripheral Role in HCI and Security Manager
|
||||||
ENBALE_LE_CENTRAL | Enable support for LE Central Role in HCI and Security Manager
|
ENBALE_LE_CENTRAL | Enable support for LE Central Role in HCI and Security Manager
|
||||||
ENABLE_LE_SECURE_CONNECTIONS | Enable LE Secure Connections using [mbed TLS library](https://tls.mbed.org)
|
ENABLE_LE_SECURE_CONNECTIONS | Enable LE Secure Connections using [mbed TLS library](https://tls.mbed.org)
|
||||||
ENABLE_LE_DATA_CHANNELS | Enable LE Data Channels in credit-based flow control mode
|
ENABLE_LE_DATA_CHANNELS | Enable LE Data Channels in credit-based flow control mode
|
||||||
ENABLE_LE_SIGNED_WRITE | Enable LE Signed Writes in ATT/GATT
|
ENABLE_LE_DATA_LENGTH_EXTENSION | Enable LE Data Length Extension support
|
||||||
|
ENABLE_LE_SIGNED_WRITE | Enable LE Signed Writes in ATT/GATT
|
||||||
ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL | Enable HCI Controller to Host Flow Control, see below
|
ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL | Enable HCI Controller to Host Flow Control, see below
|
||||||
ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CC256x Flow Control during baud rate change, see chipset docs.
|
ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CC256x Flow Control during baud rate change, see chipset docs.
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
#define ENABLE_SCO_OVER_HCI
|
#define ENABLE_SCO_OVER_HCI
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
#define ENABLE_SCO_OVER_HCI
|
#define ENABLE_SCO_OVER_HCI
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
#define ENABLE_SCO_OVER_HCI
|
#define ENABLE_SCO_OVER_HCI
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
#define ENABLE_SCO_OVER_HCI
|
#define ENABLE_SCO_OVER_HCI
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
#define ENABLE_SCO_OVER_HCI
|
#define ENABLE_SCO_OVER_HCI
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#define ENABLE_BLE
|
#define ENABLE_BLE
|
||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
// #define ENABLE_LOG_DEBUG
|
// #define ENABLE_LOG_DEBUG
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
#define ENABLE_SCO_OVER_HCI
|
#define ENABLE_SCO_OVER_HCI
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#define ENABLE_LE_CENTRAL
|
#define ENABLE_LE_CENTRAL
|
||||||
#define ENABLE_LE_PERIPHERAL
|
#define ENABLE_LE_PERIPHERAL
|
||||||
#define ENABLE_LE_SECURE_CONNECTIONS
|
#define ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
#define ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
#define ENABLE_LOG_ERROR
|
#define ENABLE_LOG_ERROR
|
||||||
#define ENABLE_LOG_INFO
|
#define ENABLE_LOG_INFO
|
||||||
#define ENABLE_SCO_OVER_HCI
|
#define ENABLE_SCO_OVER_HCI
|
||||||
|
27
src/hci.c
27
src/hci.c
@ -1297,15 +1297,19 @@ static void hci_initializing_run(void){
|
|||||||
hci_stack->substate = HCI_INIT_W4_WRITE_LE_HOST_SUPPORTED;
|
hci_stack->substate = HCI_INIT_W4_WRITE_LE_HOST_SUPPORTED;
|
||||||
hci_send_cmd(&hci_write_le_host_supported, 1, 0);
|
hci_send_cmd(&hci_write_le_host_supported, 1, 0);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
case HCI_INIT_LE_READ_MAX_DATA_LENGTH:
|
case HCI_INIT_LE_READ_MAX_DATA_LENGTH:
|
||||||
hci_stack->substate = HCI_INIT_W4_LE_READ_MAX_DATA_LENGTH;
|
hci_stack->substate = HCI_INIT_W4_LE_READ_MAX_DATA_LENGTH;
|
||||||
hci_send_cmd(&hci_le_read_maximum_data_length);
|
hci_send_cmd(&hci_le_read_maximum_data_length);
|
||||||
break;
|
break;
|
||||||
case HCI_INIT_LE_WRITE_SUGGESTED_DATA_LENGTH:
|
case HCI_INIT_LE_WRITE_SUGGESTED_DATA_LENGTH:
|
||||||
hci_stack->substate = HCI_INIT_W4_LE_WRITE_SUGGESTED_DATA_LENGTH;
|
hci_stack->substate = HCI_INIT_W4_LE_WRITE_SUGGESTED_DATA_LENGTH;
|
||||||
// TODO: use values from read max data length
|
hci_send_cmd(&hci_le_write_suggested_default_data_length, hci_stack->le_supported_max_tx_octets, hci_stack->le_supported_max_tx_time);
|
||||||
hci_send_cmd(&hci_le_write_suggested_default_data_length, 251, 2120);
|
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_LE_CENTRAL
|
#ifdef ENABLE_LE_CENTRAL
|
||||||
case HCI_INIT_READ_WHITE_LIST_SIZE:
|
case HCI_INIT_READ_WHITE_LIST_SIZE:
|
||||||
hci_stack->substate = HCI_INIT_W4_READ_WHITE_LIST_SIZE;
|
hci_stack->substate = HCI_INIT_W4_READ_WHITE_LIST_SIZE;
|
||||||
@ -1316,7 +1320,6 @@ static void hci_initializing_run(void){
|
|||||||
hci_stack->substate = HCI_INIT_W4_LE_SET_SCAN_PARAMETERS;
|
hci_stack->substate = HCI_INIT_W4_LE_SET_SCAN_PARAMETERS;
|
||||||
hci_send_cmd(&hci_le_set_scan_parameters, 1, 0x1e0, 0x30, hci_stack->le_own_addr_type, 0);
|
hci_send_cmd(&hci_le_set_scan_parameters, 1, 0x1e0, 0x30, hci_stack->le_own_addr_type, 0);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
@ -1558,13 +1561,25 @@ static void hci_initializing_event_handler(uint8_t * packet, uint16_t size){
|
|||||||
case HCI_INIT_W4_LE_READ_BUFFER_SIZE:
|
case HCI_INIT_W4_LE_READ_BUFFER_SIZE:
|
||||||
// skip write le host if not supported (e.g. on LE only EM9301)
|
// skip write le host if not supported (e.g. on LE only EM9301)
|
||||||
if (hci_stack->local_supported_commands[0] & 0x02) break;
|
if (hci_stack->local_supported_commands[0] & 0x02) break;
|
||||||
|
// explicit fall through to reduce repetitions
|
||||||
|
|
||||||
|
#ifdef ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
|
case HCI_INIT_W4_WRITE_LE_HOST_SUPPORTED:
|
||||||
|
if ((hci_stack->local_supported_commands[0] & 0x30) == 0x30){
|
||||||
|
hci_stack->substate = HCI_INIT_LE_READ_MAX_DATA_LENGTH;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// explicit fall through to reduce repetitions
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_LE_CENTRAL
|
#ifdef ENABLE_LE_CENTRAL
|
||||||
hci_stack->substate = HCI_INIT_LE_READ_MAX_DATA_LENGTH;
|
hci_stack->substate = HCI_INIT_READ_WHITE_LIST_SIZE;
|
||||||
#else
|
#else
|
||||||
hci_init_done();
|
hci_init_done();
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case HCI_INIT_W4_WRITE_LOCAL_NAME:
|
case HCI_INIT_W4_WRITE_LOCAL_NAME:
|
||||||
// skip write eir data if no eir data set
|
// skip write eir data if no eir data set
|
||||||
if (hci_stack->eir_data) break;
|
if (hci_stack->eir_data) break;
|
||||||
@ -1684,17 +1699,19 @@ static void event_handler(uint8_t *packet, int size){
|
|||||||
}
|
}
|
||||||
log_info("hci_le_read_buffer_size: size %u, count %u", hci_stack->le_data_packets_length, hci_stack->le_acl_packets_total_num);
|
log_info("hci_le_read_buffer_size: size %u, count %u", hci_stack->le_data_packets_length, hci_stack->le_acl_packets_total_num);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_le_read_maximum_data_length)){
|
if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_le_read_maximum_data_length)){
|
||||||
hci_stack->le_supported_max_tx_octets = little_endian_read_16(packet, 6);
|
hci_stack->le_supported_max_tx_octets = little_endian_read_16(packet, 6);
|
||||||
hci_stack->le_supported_max_tx_time = little_endian_read_16(packet, 8);
|
hci_stack->le_supported_max_tx_time = little_endian_read_16(packet, 8);
|
||||||
log_info("hci_le_read_maximum_data_length: tx octets %u, tx time %u us", hci_stack->le_supported_max_tx_octets, hci_stack->le_supported_max_tx_time);
|
log_info("hci_le_read_maximum_data_length: tx octets %u, tx time %u us", hci_stack->le_supported_max_tx_octets, hci_stack->le_supported_max_tx_time);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#ifdef ENABLE_LE_CENTRAL
|
#ifdef ENABLE_LE_CENTRAL
|
||||||
if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_le_read_white_list_size)){
|
if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_le_read_white_list_size)){
|
||||||
hci_stack->le_whitelist_capacity = packet[6];
|
hci_stack->le_whitelist_capacity = packet[6];
|
||||||
log_info("hci_le_read_white_list_size: size %u", hci_stack->le_whitelist_capacity);
|
log_info("hci_le_read_white_list_size: size %u", hci_stack->le_whitelist_capacity);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_bd_addr)) {
|
if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_bd_addr)) {
|
||||||
reverse_bd_addr(&packet[OFFSET_OF_DATA_IN_COMMAND_COMPLETE + 1],
|
reverse_bd_addr(&packet[OFFSET_OF_DATA_IN_COMMAND_COMPLETE + 1],
|
||||||
|
@ -598,6 +598,9 @@ typedef enum hci_init_state{
|
|||||||
HCI_INIT_W4_LE_READ_BUFFER_SIZE,
|
HCI_INIT_W4_LE_READ_BUFFER_SIZE,
|
||||||
HCI_INIT_WRITE_LE_HOST_SUPPORTED,
|
HCI_INIT_WRITE_LE_HOST_SUPPORTED,
|
||||||
HCI_INIT_W4_WRITE_LE_HOST_SUPPORTED,
|
HCI_INIT_W4_WRITE_LE_HOST_SUPPORTED,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
HCI_INIT_LE_READ_MAX_DATA_LENGTH,
|
HCI_INIT_LE_READ_MAX_DATA_LENGTH,
|
||||||
HCI_INIT_W4_LE_READ_MAX_DATA_LENGTH,
|
HCI_INIT_W4_LE_READ_MAX_DATA_LENGTH,
|
||||||
HCI_INIT_LE_WRITE_SUGGESTED_DATA_LENGTH,
|
HCI_INIT_LE_WRITE_SUGGESTED_DATA_LENGTH,
|
||||||
@ -820,9 +823,11 @@ typedef struct {
|
|||||||
bd_addr_t le_advertisements_direct_address;
|
bd_addr_t le_advertisements_direct_address;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ENABLE_LE_DATA_LENGTH_EXTENSION
|
||||||
// LE Data Length
|
// LE Data Length
|
||||||
uint16_t le_supported_max_tx_octets;
|
uint16_t le_supported_max_tx_octets;
|
||||||
uint16_t le_supported_max_tx_time;
|
uint16_t le_supported_max_tx_time;
|
||||||
|
#endif
|
||||||
|
|
||||||
// custom BD ADDR
|
// custom BD ADDR
|
||||||
bd_addr_t custom_bd_addr;
|
bd_addr_t custom_bd_addr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user