l2cap: inline l2cap_create_signaling_classic and l2cap_create_signaling_le

This commit is contained in:
Matthias Ringwald 2021-10-27 16:13:11 +02:00
parent 06a2657984
commit d5a98629e6
3 changed files with 18 additions and 27 deletions

View File

@ -1287,14 +1287,13 @@ static int l2cap_send_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_
return BTSTACK_ACL_BUFFERS_FULL;
}
// log_info("l2cap_send_signaling_packet type %u", cmd);
hci_reserve_packet_buffer();
uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
va_list argptr;
va_start(argptr, identifier);
uint16_t len = l2cap_create_signaling_classic(acl_buffer, handle, cmd, identifier, argptr);
uint8_t pb_flags = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
uint16_t len = l2cap_create_signaling_packet(acl_buffer, handle, pb_flags, L2CAP_CID_SIGNALING, cmd, identifier, argptr);
va_end(argptr);
// log_info("l2cap_send_signaling_packet con %u!", handle);
return hci_send_acl_packet_buffer(len);
}
@ -1393,20 +1392,18 @@ static inline void channelStateVarClearFlag(l2cap_channel_t *channel, uint16_t f
#ifdef ENABLE_BLE
static int l2cap_send_le_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){
if (!hci_can_send_acl_packet_now(handle)){
log_info("l2cap_send_le_signaling_packet, cannot send");
return BTSTACK_ACL_BUFFERS_FULL;
}
// log_info("l2cap_send_le_signaling_packet type %u", cmd);
hci_reserve_packet_buffer();
uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
va_list argptr;
va_start(argptr, identifier);
uint16_t len = l2cap_create_signaling_le(acl_buffer, handle, cmd, identifier, argptr);
uint8_t pb_flags = 0x00; // First non-automatically-flushable packet of a higher layer message
uint16_t len = l2cap_create_signaling_packet(acl_buffer, handle, pb_flags, L2CAP_CID_SIGNALING_LE, cmd, identifier, argptr);
va_end(argptr);
// log_info("l2cap_send_le_signaling_packet con %u!", handle);
return hci_send_acl_packet_buffer(len);
}
#endif

View File

@ -39,8 +39,6 @@
/*
* l2cap_signaling.h
*
* Created by Matthias Ringwald on 7/23/09.
*/
#include "l2cap_signaling.h"
@ -50,7 +48,7 @@
#include <string.h>
static uint16_t l2cap_create_signaling_internal(uint8_t * acl_buffer, hci_con_handle_t handle, uint8_t pb_flags, uint16_t cid, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, va_list argptr){
uint16_t l2cap_create_signaling_packet(uint8_t * acl_buffer, hci_con_handle_t handle, uint8_t pb_flags, uint16_t cid, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, va_list argptr){
static const char *l2cap_signaling_commands_format[] = {
"2D", // 0x01 command reject: reason {cmd not understood (0), sig MTU exceeded (2:max sig MTU), invalid CID (4:req CID)}, data len, data
@ -90,7 +88,7 @@ static uint16_t l2cap_create_signaling_internal(uint8_t * acl_buffer, hci_con_ha
format = l2cap_signaling_commands_format[cmd-1u];
}
if (!format){
log_error("l2cap_create_signaling_internal: invalid command id 0x%02x", cmd);
log_error("l2cap_create_signaling_packet: invalid command id 0x%02x", cmd);
return 0;
}
@ -150,17 +148,3 @@ static uint16_t l2cap_create_signaling_internal(uint8_t * acl_buffer, hci_con_ha
return pos;
}
#ifdef ENABLE_CLASSIC
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){
uint8_t pb_flags = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
return l2cap_create_signaling_internal(acl_buffer, handle, pb_flags, L2CAP_CID_SIGNALING, cmd, identifier, argptr);
}
#endif
#ifdef ENABLE_BLE
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){
uint8_t pb_flags = 0x00; // First non-automatically-flushable packet of a higher layer message
return l2cap_create_signaling_internal(acl_buffer, handle, pb_flags, L2CAP_CID_SIGNALING_LE, cmd, identifier, argptr);
}
#endif

View File

@ -90,8 +90,18 @@ typedef enum {
L2CAP_CHANNEL_MODE_STREAMING_MODE = 4,
} l2cap_channel_mode_t;
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);
/**
* @brief Create L2CAP signaling packet based on template and va_args
* @param acl_buffer to create packet
* @param handle
* @param pb_flags
* @param cid
* @param cmd
* @param identifier
* @param argptr
* @return
*/
uint16_t l2cap_create_signaling_packet(uint8_t * acl_buffer, hci_con_handle_t handle, uint8_t pb_flags, uint16_t cid, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, va_list argptr);
#if defined __cplusplus
}