prepare for sending command_reject on le signaling channel

This commit is contained in:
matthias.ringwald@gmail.com 2014-02-18 21:26:46 +00:00
parent c61af878b4
commit 70efece186
2 changed files with 27 additions and 3 deletions

View File

@ -310,12 +310,31 @@ int l2cap_send_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMAND
uint8_t *acl_buffer = hci_get_outgoing_acl_packet_buffer(); uint8_t *acl_buffer = hci_get_outgoing_acl_packet_buffer();
va_list argptr; va_list argptr;
va_start(argptr, identifier); va_start(argptr, identifier);
uint16_t len = l2cap_create_signaling_internal(acl_buffer, handle, cmd, identifier, argptr); uint16_t len = l2cap_create_signaling_classic(acl_buffer, handle, cmd, identifier, argptr);
va_end(argptr); va_end(argptr);
// log_info("l2cap_send_signaling_packet con %u!\n", handle); // log_info("l2cap_send_signaling_packet con %u!\n", handle);
return hci_send_acl_packet(acl_buffer, len); return hci_send_acl_packet(acl_buffer, len);
} }
#ifdef HAVE_BLE
int l2cap_send_le_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, ...){
if (!hci_can_send_packet_now(HCI_ACL_DATA_PACKET)){
log_info("l2cap_send_signaling_packet, cannot send\n");
return BTSTACK_ACL_BUFFERS_FULL;
}
// log_info("l2cap_send_signaling_packet type %u\n", cmd);
uint8_t *acl_buffer = hci_get_outgoing_acl_packet_buffer();
va_list argptr;
va_start(argptr, identifier);
uint16_t len = l2cap_create_signaling_le(acl_buffer, handle, cmd, identifier, argptr);
va_end(argptr);
// log_info("l2cap_send_signaling_packet con %u!\n", handle);
return hci_send_acl_packet(acl_buffer, len);
}
#endif
uint8_t *l2cap_get_outgoing_buffer(void){ uint8_t *l2cap_get_outgoing_buffer(void){
return hci_get_outgoing_acl_packet_buffer() + COMPLETE_L2CAP_HEADER; // 8 bytes return hci_get_outgoing_acl_packet_buffer() + COMPLETE_L2CAP_HEADER; // 8 bytes
} }
@ -440,7 +459,7 @@ void l2cap_run(void){
if (!hci_can_send_packet_now(HCI_ACL_DATA_PACKET)) break; if (!hci_can_send_packet_now(HCI_ACL_DATA_PACKET)) break;
hci_con_handle_t handle = signaling_responses[0].handle; hci_con_handle_t handle = signaling_responses[0].handle;
uint8_t sig_id = signaling_responses[0].sig_id; uint8_t sig_id = signaling_responses[0].sig_id;
uint16_t infoType = signaling_responses[0].data; // INFORMATION_REQUEST uint16_t infoType = signaling_responses[0].data; // INFORMATION_REQUEST
uint16_t result = signaling_responses[0].data; // CONNECTION_REQUEST, COMMAND_REJECT uint16_t result = signaling_responses[0].data; // CONNECTION_REQUEST, COMMAND_REJECT
@ -481,7 +500,11 @@ void l2cap_run(void){
break; break;
case COMMAND_REJECT: case COMMAND_REJECT:
l2cap_send_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL); l2cap_send_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL);
#ifdef HAVE_BLE
case COMMAND_REJECT_LE:
l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL);
break; break;
#endif
default: default:
// should not happen // should not happen
break; break;

View File

@ -65,7 +65,8 @@ typedef enum {
INFORMATION_REQUEST, INFORMATION_REQUEST,
INFORMATION_RESPONSE, INFORMATION_RESPONSE,
CONNECTION_PARAMETER_UPDATE_REQUEST = 0x12, CONNECTION_PARAMETER_UPDATE_REQUEST = 0x12,
CONNECTION_PARAMETER_UPDATE_RESPONSE CONNECTION_PARAMETER_UPDATE_RESPONSE,
COMMAND_REJECT_LE = 0x14, // internal to BTstack
} L2CAP_SIGNALING_COMMANDS; } L2CAP_SIGNALING_COMMANDS;
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_classic(uint8_t * acl_buffer,hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, va_list argptr);