mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-25 06:40:10 +00:00
pass in signaling identifier, use correct signaling identifier for l2cap connection parameter update response
This commit is contained in:
parent
7dba825776
commit
79f53f1d06
@ -164,7 +164,7 @@ void l2cap_emit_connection_parameter_update_response(uint16_t handle, uint16_t r
|
||||
}
|
||||
|
||||
// copy & paste from src/l2cap_signalin.c
|
||||
uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffer, uint16_t handle, uint16_t interval_min, uint16_t interval_max, uint16_t slave_latency, uint16_t timeout_multiplier){
|
||||
uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffer, uint16_t handle, uint8_t identifier, uint16_t interval_min, uint16_t interval_max, uint16_t slave_latency, uint16_t timeout_multiplier){
|
||||
|
||||
int pb = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
|
||||
|
||||
@ -174,8 +174,8 @@ uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffe
|
||||
bt_store_16(acl_buffer, 6, 5);
|
||||
// 8 - Code
|
||||
acl_buffer[8] = CONNECTION_PARAMETER_UPDATE_REQUEST;
|
||||
// 9 - id (!= 0 sequentially)
|
||||
acl_buffer[9] = 1;
|
||||
// 9 - id
|
||||
acl_buffer[9] = identifier;
|
||||
uint16_t pos = 12;
|
||||
bt_store_16(acl_buffer, pos, interval_min);
|
||||
pos += 2;
|
||||
@ -195,7 +195,7 @@ uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffe
|
||||
}
|
||||
|
||||
// copy & paste from src/l2cap_signalin.c
|
||||
uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buffer, uint16_t handle, uint16_t response){
|
||||
uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buffer, uint16_t handle, uint8_t identifier, uint16_t response){
|
||||
|
||||
int pb = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
|
||||
|
||||
@ -205,8 +205,8 @@ uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buff
|
||||
bt_store_16(acl_buffer, 6, 5);
|
||||
// 8 - Code
|
||||
acl_buffer[8] = CONNECTION_PARAMETER_UPDATE_RESPONSE;
|
||||
// 9 - id (!= 0 sequentially)
|
||||
acl_buffer[9] = 1;
|
||||
// 9 - id
|
||||
acl_buffer[9] = identifier;
|
||||
uint16_t pos = 12;
|
||||
bt_store_16(acl_buffer, pos, response);
|
||||
pos += 2;
|
||||
@ -219,6 +219,7 @@ uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buff
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
static void l2cap_run(void){
|
||||
// send l2cap con paramter update if necessary
|
||||
linked_list_iterator_t it;
|
||||
@ -244,7 +245,7 @@ static void l2cap_run(void){
|
||||
hci_reserve_packet_buffer();
|
||||
uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
|
||||
connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
|
||||
uint16_t len = l2cap_le_create_connection_parameter_update_response(acl_buffer, connection->con_handle, result);
|
||||
uint16_t len = l2cap_le_create_connection_parameter_update_response(acl_buffer, connection->con_handle, connection->le_con_param_update_identifier, result);
|
||||
hci_send_acl_packet_buffer(len);
|
||||
if (result == 0){
|
||||
connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS;
|
||||
@ -327,6 +328,7 @@ void l2cap_acl_handler( uint8_t *packet, uint16_t size ){
|
||||
} else {
|
||||
connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY;
|
||||
}
|
||||
connection->le_con_param_update_identifier = packet[COMPLETE_L2CAP_HEADER + 1];
|
||||
}
|
||||
hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
(*packet_handler)(NULL, HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
|
@ -522,11 +522,11 @@ typedef struct {
|
||||
|
||||
// LE Connection parameter update
|
||||
le_con_parameter_update_state_t le_con_parameter_update_state;
|
||||
uint8_t le_con_param_update_identifier;
|
||||
uint16_t le_conn_interval_min;
|
||||
uint16_t le_conn_interval_max;
|
||||
uint16_t le_conn_latency;
|
||||
uint16_t le_supervision_timeout;
|
||||
uint16_t le_update_con_parameter_response;
|
||||
|
||||
#ifdef HAVE_BLE
|
||||
// LE Security Manager
|
||||
|
@ -724,7 +724,7 @@ void l2cap_run(void){
|
||||
hci_reserve_packet_buffer();
|
||||
uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
|
||||
connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
|
||||
uint16_t len = l2cap_le_create_connection_parameter_update_response(acl_buffer, connection->con_handle, result);
|
||||
uint16_t len = l2cap_le_create_connection_parameter_update_response(acl_buffer, connection->con_handle, connection->le_con_param_update_identifier, result);
|
||||
hci_send_acl_packet_buffer(len);
|
||||
if (result == 0){
|
||||
connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS;
|
||||
@ -1453,6 +1453,7 @@ void l2cap_acl_handler( uint8_t *packet, uint16_t size ){
|
||||
} else {
|
||||
connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY;
|
||||
}
|
||||
connection->le_con_param_update_identifier = packet[COMPLETE_L2CAP_HEADER + 1];
|
||||
}
|
||||
|
||||
hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
@ -1596,7 +1597,8 @@ int l2cap_le_request_connection_parameter_update(uint16_t handle, uint16_t inter
|
||||
// log_info("l2cap_send_signaling_packet type %u", cmd);
|
||||
hci_reserve_packet_buffer();
|
||||
uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
|
||||
uint16_t len = l2cap_le_create_connection_parameter_update_request(acl_buffer, handle, interval_min, interval_max, slave_latency, timeout_multiplier);
|
||||
// TODO: find better way to get signaling identifier
|
||||
uint16_t len = l2cap_le_create_connection_parameter_update_request(acl_buffer, handle, 1, interval_min, interval_max, slave_latency, timeout_multiplier);
|
||||
return hci_send_acl_packet_buffer(len);
|
||||
}
|
||||
#endif
|
||||
|
@ -151,7 +151,7 @@ uint16_t l2cap_create_signaling_le(uint8_t * acl_buffer, hci_con_handle_t handle
|
||||
return l2cap_create_signaling_internal(acl_buffer, handle, 5, cmd, identifier, argptr);
|
||||
}
|
||||
|
||||
uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffer, uint16_t handle, uint16_t interval_min, uint16_t interval_max, uint16_t slave_latency, uint16_t timeout_multiplier){
|
||||
uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffer, uint16_t handle, uint8_t identifier, uint16_t interval_min, uint16_t interval_max, uint16_t slave_latency, uint16_t timeout_multiplier){
|
||||
|
||||
int pb = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
|
||||
|
||||
@ -161,8 +161,8 @@ uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffe
|
||||
bt_store_16(acl_buffer, 6, 5);
|
||||
// 8 - Code
|
||||
acl_buffer[8] = CONNECTION_PARAMETER_UPDATE_REQUEST;
|
||||
// 9 - id (!= 0 sequentially)
|
||||
acl_buffer[9] = 1;
|
||||
// 9 - id
|
||||
acl_buffer[9] = identifier;
|
||||
uint16_t pos = 12;
|
||||
bt_store_16(acl_buffer, pos, interval_min);
|
||||
pos += 2;
|
||||
@ -181,7 +181,7 @@ uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffe
|
||||
return pos;
|
||||
}
|
||||
|
||||
uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buffer, uint16_t handle, uint16_t response){
|
||||
uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buffer, uint16_t handle, uint8_t identifier, uint16_t response){
|
||||
|
||||
int pb = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
|
||||
|
||||
@ -191,8 +191,8 @@ uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buff
|
||||
bt_store_16(acl_buffer, 6, 5);
|
||||
// 8 - Code
|
||||
acl_buffer[8] = CONNECTION_PARAMETER_UPDATE_RESPONSE;
|
||||
// 9 - id (!= 0 sequentially)
|
||||
acl_buffer[9] = 1;
|
||||
// 9 - id
|
||||
acl_buffer[9] = identifier;
|
||||
uint16_t pos = 12;
|
||||
bt_store_16(acl_buffer, pos, response);
|
||||
pos += 2;
|
||||
|
@ -72,8 +72,8 @@ typedef enum {
|
||||
|
||||
uint16_t l2cap_create_signaling_classic(uint8_t * acl_buffer,hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, va_list argptr);
|
||||
uint16_t l2cap_create_signaling_le(uint8_t * acl_buffer, hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, va_list argptr);
|
||||
uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffer, uint16_t handle, uint16_t interval_min, uint16_t interval_max, uint16_t slave_latency, uint16_t timeout_multiplier);
|
||||
uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buffer, uint16_t handle, uint16_t response);
|
||||
uint16_t l2cap_le_create_connection_parameter_update_request(uint8_t * acl_buffer, uint16_t handle, uint8_t identifier, uint16_t interval_min, uint16_t interval_max, uint16_t slave_latency, uint16_t timeout_multiplier);
|
||||
uint16_t l2cap_le_create_connection_parameter_update_response(uint8_t * acl_buffer, uint16_t handle, uint8_t identifier, uint16_t response);
|
||||
uint8_t l2cap_next_sig_id(void);
|
||||
uint16_t l2cap_next_local_cid(void);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user