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 uint16_t ble_suggested_default_data_txtime;
static bool readable;
static bool ble_supported;
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);
+ &ble_suggested_default_data_length,
+ &ble_suggested_default_data_txtime);
}
// Set the ble event mask next
return ble_suggested_default_data_length;
}
+static uint16_t get_ble_suggested_default_data_txtime(void)
+{
+ assert(readable);
+ assert(ble_supported);
+ return ble_suggested_default_data_txtime;
+}
+
static uint16_t get_acl_buffer_count_classic(void)
{
assert(readable);
get_acl_packet_size_classic,
get_acl_packet_size_ble,
get_ble_suggested_default_data_length,
+ get_ble_suggested_default_data_txtime,
get_acl_buffer_count_classic,
get_acl_buffer_count_ble,
uint16_t (*get_acl_packet_size_ble)(void);
uint16_t (*get_ble_default_data_packet_length)(void);
+ uint16_t (*get_ble_default_data_packet_txtime)(void);
// Get the number of acl packets the controller can buffer.
uint16_t (*get_acl_buffer_count_classic)(void);
static void parse_ble_read_suggested_default_data_length_response(
BT_HDR *response,
- uint16_t *ble_default_packet_length_ptr)
+ uint16_t *ble_default_packet_length_ptr,
+ uint16_t *ble_default_packet_txtime_ptr)
{
uint8_t *stream = read_command_complete_header(response, HCI_BLE_READ_DEFAULT_DATA_LENGTH, 2 /* bytes after */);
- STREAM_TO_UINT8(*ble_default_packet_length_ptr, stream);
-
+ STREAM_TO_UINT16(*ble_default_packet_length_ptr, stream);
+ STREAM_TO_UINT16(*ble_default_packet_txtime_ptr, stream);
buffer_allocator->free(response);
}
void (*parse_ble_read_suggested_default_data_length_response)(
BT_HDR *response,
- uint16_t *ble_default_packet_length_ptr
+ uint16_t *ble_default_packet_length_ptr,
+ uint16_t *ble_default_packet_txtime_ptr
);
} hci_packet_parser_t;
}
#if BLE_INCLUDED == TRUE
if (p_acl_cb->transport == BT_TRANSPORT_LE) {
+ if (HCI_LE_DATA_LEN_EXT_SUPPORTED(p_acl_cb->peer_le_features)) {
+ uint16_t data_length = controller_get_interface()->get_ble_default_data_packet_length();
+ uint16_t data_txtime = controller_get_interface()->get_ble_default_data_packet_txtime();
+ btsnd_hcic_ble_set_data_length(p_acl_cb->hci_handle, data_length, data_txtime);
+ }
l2cble_notify_le_connection (p_acl_cb->remote_addr);
}
#endif
}
if (!HCI_LE_DATA_LEN_EXT_SUPPORTED(p_acl->peer_le_features)) {
- BTM_TRACE_DEBUG("%s failed, peer does not support request", __FUNCTION__);
+ BTM_TRACE_ERROR("%s failed, peer does not support request", __FUNCTION__);
return BTM_PEER_LE_DATA_LEN_UNSUPPORTED;
}
if (p_acl_cb->link_role == HCI_ROLE_MASTER){
btsnd_hcic_rmt_ver_req (p_acl_cb->hci_handle);
}
-
else{
if (p_acl_cb->transport == BT_TRANSPORT_LE) {
+ if (HCI_LE_DATA_LEN_EXT_SUPPORTED(p_acl_cb->peer_le_features)) {
+ uint16_t data_length = controller_get_interface()->get_ble_default_data_packet_length();
+ uint16_t data_txtime = controller_get_interface()->get_ble_default_data_packet_txtime();
+ btsnd_hcic_ble_set_data_length(p_acl_cb->hci_handle, data_length, data_txtime);
+ }
l2cble_notify_le_connection (p_acl_cb->remote_addr);
}
}
p_tcb->payload_size = mtu;
}
}
-
- l2cble_set_fixed_channel_tx_data_length(p_tcb->peer_bda, L2CAP_ATT_CID, p_tcb->payload_size);
+ /* host will set packet data length to 251 automatically if remote device support set packet data length,
+ so l2cble_set_fixed_channel_tx_data_length() is not necessary.
+ l2cble_set_fixed_channel_tx_data_length(p_tcb->peer_bda, L2CAP_ATT_CID, p_tcb->payload_size);
+ */
gatt_end_operation(p_clcb, status, NULL);
}
/*******************************************************************************
p_tcb->payload_size = mtu;
}
- l2cble_set_fixed_channel_tx_data_length(p_tcb->peer_bda, L2CAP_ATT_CID, p_tcb->payload_size);
+ /* host will set packet data length to 251 automatically if remote device support set packet data length,
+ so l2cble_set_fixed_channel_tx_data_length() is not necessary.
+ l2cble_set_fixed_channel_tx_data_length(p_tcb->peer_bda, L2CAP_ATT_CID, p_tcb->payload_size);
+ */
if ((p_buf = attp_build_sr_msg(p_tcb, GATT_RSP_MTU, (tGATT_SR_MSG *) &p_tcb->payload_size)) != NULL) {
attp_send_sr_msg (p_tcb, p_buf);
-Subproject commit 4b4ff28683982cee0b89e1e7a4480c2abfb00f0c
+Subproject commit cfff26955edbf837c497ef9d1dc60fc1e5a1608e