Reduce the pressure on the common RX buffer pool by reusing HCI command buffers also for the Command Status or Command Complete response to them. This also implies removing the existing Kconfig variable for the command buffer sizes since the size is also dependent on maximum Command Complete event sizes. Instead, reuse the RX buffer size also for HCI Command buffers. Change-Id: I006b287d64a0c9ca40de741aa9a424a49a927385 Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
92 lines
2.0 KiB
C
92 lines
2.0 KiB
C
/** @file
|
|
* @brief Bluetooth data buffer API
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 2016 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef __BT_BUF_H
|
|
#define __BT_BUF_H
|
|
|
|
/**
|
|
* @brief Data buffers
|
|
* @defgroup bt_buf Data buffers
|
|
* @ingroup bluetooth
|
|
* @{
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include <net/buf.h>
|
|
#include <bluetooth/hci.h>
|
|
|
|
/** Possible types of buffers passed around the Bluetooth stack */
|
|
enum bt_buf_type {
|
|
/** HCI command */
|
|
BT_BUF_CMD,
|
|
/** HCI event */
|
|
BT_BUF_EVT,
|
|
/** Outgoing ACL data */
|
|
BT_BUF_ACL_OUT,
|
|
/** Incoming ACL data */
|
|
BT_BUF_ACL_IN,
|
|
};
|
|
|
|
/** Minimum amount of user data size for buffers passed to the stack. */
|
|
#define BT_BUF_USER_DATA_MIN 4
|
|
|
|
/** Data size neeed for HCI RX buffers */
|
|
#define BT_BUF_RX_SIZE (CONFIG_BLUETOOTH_HCI_RESERVE + \
|
|
CONFIG_BLUETOOTH_RX_BUF_LEN)
|
|
|
|
/** Allocate a buffer for incoming data
|
|
*
|
|
* This will not set the buffer type so bt_buf_set_type() needs to be called
|
|
* before bt_recv().
|
|
*
|
|
* @param timeout Timeout in milliseconds, or one of the special values
|
|
* K_NO_WAIT and K_FOREVER.
|
|
* @return A new buffer.
|
|
*/
|
|
struct net_buf *bt_buf_get_rx(int32_t timeout);
|
|
|
|
/** Allocate a buffer for an HCI Command Complete/Status Event
|
|
*
|
|
* This will set the buffer type so bt_buf_set_type() does not need to
|
|
* be explicitly called before bt_recv_prio().
|
|
*
|
|
* @param timeout Timeout in milliseconds, or one of the special values
|
|
* K_NO_WAIT and K_FOREVER.
|
|
* @return A new buffer.
|
|
*/
|
|
struct net_buf *bt_buf_get_cmd_complete(int32_t timeout);
|
|
|
|
/** Set the buffer type
|
|
*
|
|
* @param buf Bluetooth buffer
|
|
* @param type The BT_* type to set the buffer to
|
|
*/
|
|
static inline void bt_buf_set_type(struct net_buf *buf, enum bt_buf_type type)
|
|
{
|
|
*(uint8_t *)net_buf_user_data(buf) = type;
|
|
}
|
|
|
|
/** Get the buffer type
|
|
*
|
|
* @param buf Bluetooth buffer
|
|
*
|
|
* @return The BT_* type to of the buffer
|
|
*/
|
|
static inline enum bt_buf_type bt_buf_get_type(struct net_buf *buf)
|
|
{
|
|
return *(uint8_t *)net_buf_user_data(buf);
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* __BT_BUF_H */
|