mark l2cap signal response pending to avoid sending it multiple times with synchronous HCI Transport implementation

This commit is contained in:
matthias.ringwald@gmail.com 2014-10-31 15:46:38 +00:00
parent 0f058b53b4
commit f53da564a8

View File

@ -525,8 +525,16 @@ void l2cap_run(void){
uint8_t sig_id = signaling_responses[0].sig_id;
uint16_t infoType = signaling_responses[0].data; // INFORMATION_REQUEST
uint16_t result = signaling_responses[0].data; // CONNECTION_REQUEST, COMMAND_REJECT
uint8_t response_code = signaling_responses[0].code;
switch (signaling_responses[0].code){
// remove first item before sending (to avoid sending response mutliple times)
signaling_responses_pending--;
int i;
for (i=0; i < signaling_responses_pending; i++){
memcpy(&signaling_responses[i], &signaling_responses[i+1], sizeof(l2cap_signaling_response_t));
}
switch (response_code){
case CONNECTION_REQUEST:
l2cap_send_signaling_packet(handle, CONNECTION_RESPONSE, sig_id, 0, 0, result, 0);
// also disconnect if result is 0x0003 - security blocked
@ -574,13 +582,6 @@ void l2cap_run(void){
// should not happen
break;
}
// remove first item
signaling_responses_pending--;
int i;
for (i=0; i < signaling_responses_pending; i++){
memcpy(&signaling_responses[i], &signaling_responses[i+1], sizeof(l2cap_signaling_response_t));
}
}
uint8_t config_options[4];
@ -773,7 +774,7 @@ void l2cap_create_channel_internal(void * connection, btstack_packet_handler_t p
l2cap_emit_channel_opened(&dummy_channel, BTSTACK_MEMORY_ALLOC_FAILED);
return;
}
// limit local mtu to max acl packet length
// limit local mtu to max acl packet length - l2cap header
if (mtu > l2cap_max_mtu()) {
mtu = l2cap_max_mtu();
}
@ -1082,7 +1083,7 @@ static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig
channel->remote_sig_id = sig_id;
channel->required_security_level = service->required_security_level;
// limit local mtu to max acl packet length
// limit local mtu to max acl packet length - l2cap header
if (channel->local_mtu > l2cap_max_mtu()) {
channel->local_mtu = l2cap_max_mtu();
}