Bluetooth: Add convenience macros for common header sizes

The C pre-processor doesn't allow using sizeof() in comparisons such
as "#if FOO < sizeof(bar)". To make it possible to use such
comparisons where the sizes of headers are involved, introduce helper
macros for the headers instead of always having to hard-code magic
numbers into the code.

Change-Id: Iaf654cb4aaa49e83360901f5b01225ba4b952854
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
Johan Hedberg 2017-02-01 12:49:57 +02:00
commit be139268b3
3 changed files with 21 additions and 6 deletions

View file

@ -133,6 +133,7 @@ struct bt_hci_evt_hdr {
uint8_t evt;
uint8_t len;
} __packed;
#define BT_HCI_EVT_HDR_SIZE 2
#define BT_ACL_START_NO_FLUSH 0x00
#define BT_ACL_CONT 0x01
@ -146,11 +147,13 @@ struct bt_hci_acl_hdr {
uint16_t handle;
uint16_t len;
} __packed;
#define BT_HCI_ACL_HDR_SIZE 4
struct bt_hci_cmd_hdr {
uint16_t opcode;
uint8_t param_len;
} __packed;
#define BT_HCI_CMD_HDR_SIZE 3
/* Supported Commands */
#define BT_CMD_TEST(cmd, octet, bit) (cmd[octet] & BIT(bit))

View file

@ -24,6 +24,23 @@ extern "C" {
#include <atomic.h>
#include <bluetooth/buf.h>
#include <bluetooth/conn.h>
#include <bluetooth/hci.h>
/* L2CAP header size, used for buffer size calculations */
#define BT_L2CAP_HDR_SIZE 4
/** @def BT_L2CAP_BUF_SIZE
*
* Helper to calculate needed outgoing buffer size, useful e.g. for
* creating buffer pools.
*
* @param mtu Needed L2CAP MTU.
*
* @return Needed buffer size to match the requested L2CAP MTU.
*/
#define BT_L2CAP_BUF_SIZE(mtu) (CONFIG_BLUETOOTH_HCI_SEND_RESERVE + \
BT_HCI_ACL_HDR_SIZE + BT_L2CAP_HDR_SIZE + \
(mtu))
struct bt_l2cap_chan;

View file

@ -192,13 +192,8 @@ struct bt_l2cap_le_credits {
#define BT_L2CAP_SDU_HDR_LEN 2
/* Helper to calculate needed outgoing buffer size */
#define BT_L2CAP_BUF_SIZE(mtu) (CONFIG_BLUETOOTH_HCI_SEND_RESERVE + \
sizeof(struct bt_hci_acl_hdr) + \
sizeof(struct bt_l2cap_hdr) + (mtu))
#define BT_L2CAP_RX_MTU (CONFIG_BLUETOOTH_RX_BUF_LEN - \
4 /* HCI ACL header */ - 4 /* L2CAP header */)
BT_HCI_ACL_HDR_SIZE - BT_L2CAP_HDR_SIZE)
struct bt_l2cap_fixed_chan {
uint16_t cid;