Bluetooth: hci_raw: Move BT_ISO to common Kconfig and fix ISO buffers
This commit moves the BT_ISO to a common (host and controller) Kconfig and fixes the ISO buffers in hci_raw.c Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
This commit is contained in:
parent
d06b8053b3
commit
25be47e7a4
7 changed files with 86 additions and 85 deletions
|
@ -222,6 +222,64 @@ config BT_DATA_LEN_UPDATE
|
||||||
Enable support for Bluetooth v4.2 LE Data Length Update procedure.
|
Enable support for Bluetooth v4.2 LE Data Length Update procedure.
|
||||||
endif # BT_CONN
|
endif # BT_CONN
|
||||||
|
|
||||||
|
|
||||||
|
config BT_ISO
|
||||||
|
bool "Bluetooth Isochronous Channel Support [EXPERIMENTAL]"
|
||||||
|
help
|
||||||
|
Select this to enable Isochronous Channel support.
|
||||||
|
|
||||||
|
if BT_ISO
|
||||||
|
|
||||||
|
config BT_ISO_MAX_CHAN
|
||||||
|
int "Maximum number of simultaneous ISO channels"
|
||||||
|
depends on BT_ISO
|
||||||
|
default BT_MAX_CONN
|
||||||
|
range 1 64
|
||||||
|
help
|
||||||
|
Maximum number of simultaneous Bluetooth isochronous channels
|
||||||
|
supported.
|
||||||
|
|
||||||
|
config BT_ISO_TX_BUF_COUNT
|
||||||
|
int "Number of Isochronous TX buffers"
|
||||||
|
default 1
|
||||||
|
range 1 255
|
||||||
|
help
|
||||||
|
Number of buffers available for outgoing Isochronous channel SDUs.
|
||||||
|
|
||||||
|
config BT_ISO_TX_FRAG_COUNT
|
||||||
|
int "Number of ISO TX fragment buffers"
|
||||||
|
default 2
|
||||||
|
range 0 255
|
||||||
|
help
|
||||||
|
Number of buffers available for fragments of TX buffers. Warning:
|
||||||
|
setting this to 0 means that the application must ensure that
|
||||||
|
queued TX buffers never need to be fragmented, i.e. that the
|
||||||
|
controller's buffer size is large enough. If this is not ensured,
|
||||||
|
and there are no dedicated fragment buffers, a deadlock may occur.
|
||||||
|
In most cases the default value of 2 is a safe bet.
|
||||||
|
|
||||||
|
config BT_ISO_TX_MTU
|
||||||
|
int "Maximum supported MTU for Isochronous TX buffers"
|
||||||
|
default 251
|
||||||
|
range 23 4095
|
||||||
|
help
|
||||||
|
Maximum MTU for Isochronous channels TX buffers.
|
||||||
|
|
||||||
|
config BT_ISO_RX_BUF_COUNT
|
||||||
|
int "Number of Isochronous RX buffers"
|
||||||
|
default 1
|
||||||
|
range 1 255
|
||||||
|
help
|
||||||
|
Number of buffers available for incoming Isochronous channel SDUs.
|
||||||
|
|
||||||
|
config BT_ISO_RX_MTU
|
||||||
|
int "Maximum supported MTU for Isochronous RX buffers"
|
||||||
|
default 251
|
||||||
|
range 23 4095
|
||||||
|
help
|
||||||
|
Maximum MTU for Isochronous channels RX buffers.
|
||||||
|
endif # BT_ISO
|
||||||
|
|
||||||
# Workaround for not being able to have commas in macro arguments
|
# Workaround for not being able to have commas in macro arguments
|
||||||
DT_CHOSEN_Z_BT_C2H_UART := zephyr,bt-c2h-uart
|
DT_CHOSEN_Z_BT_C2H_UART := zephyr,bt-c2h-uart
|
||||||
|
|
||||||
|
|
|
@ -668,6 +668,12 @@ config BT_DEBUG_CONN
|
||||||
This option enables debug support for Bluetooth
|
This option enables debug support for Bluetooth
|
||||||
connection handling.
|
connection handling.
|
||||||
|
|
||||||
|
config BT_DEBUG_ISO
|
||||||
|
bool "ISO channel debug"
|
||||||
|
help
|
||||||
|
Use this option to enable ISO channels debug logs for the
|
||||||
|
Bluetooth Audio functionality.
|
||||||
|
|
||||||
config BT_DEBUG_KEYS
|
config BT_DEBUG_KEYS
|
||||||
bool "Bluetooth security keys debug"
|
bool "Bluetooth security keys debug"
|
||||||
depends on BT_HCI_HOST
|
depends on BT_HCI_HOST
|
||||||
|
|
|
@ -17,9 +17,6 @@ menuconfig BT_AUDIO
|
||||||
|
|
||||||
if BT_AUDIO
|
if BT_AUDIO
|
||||||
|
|
||||||
config BT_ISO
|
|
||||||
bool
|
|
||||||
|
|
||||||
if BT_CONN
|
if BT_CONN
|
||||||
|
|
||||||
config BT_AUDIO_UNICAST
|
config BT_AUDIO_UNICAST
|
||||||
|
@ -35,58 +32,6 @@ config BT_AUDIO_UNICAST
|
||||||
This option enables support for Bluetooth Unicast Audio using
|
This option enables support for Bluetooth Unicast Audio using
|
||||||
Isochronous channels.
|
Isochronous channels.
|
||||||
|
|
||||||
if BT_AUDIO_UNICAST
|
|
||||||
|
|
||||||
config BT_MAX_ISO_CONN
|
|
||||||
int "Maximum number of simultaneous ISO connections"
|
|
||||||
depends on BT_ISO
|
|
||||||
default BT_MAX_CONN
|
|
||||||
range 1 64
|
|
||||||
help
|
|
||||||
Maximum number of simultaneous Bluetooth isochronous connections
|
|
||||||
supported.
|
|
||||||
|
|
||||||
config BT_ISO_TX_BUF_COUNT
|
|
||||||
int "Numer of Isochronous TX buffers"
|
|
||||||
default 1
|
|
||||||
range 1 255
|
|
||||||
help
|
|
||||||
Number of buffers available for outgoing Isochronous channel packets.
|
|
||||||
|
|
||||||
config BT_ISO_TX_FRAG_COUNT
|
|
||||||
int "Number of ISO TX fragment buffers"
|
|
||||||
default 2
|
|
||||||
range 0 255
|
|
||||||
help
|
|
||||||
Number of buffers available for fragments of TX buffers. Warning:
|
|
||||||
setting this to 0 means that the application must ensure that
|
|
||||||
queued TX buffers never need to be fragmented, i.e. that the
|
|
||||||
controller's buffer size is large enough. If this is not ensured,
|
|
||||||
and there are no dedicated fragment buffers, a deadlock may occur.
|
|
||||||
In most cases the default value of 2 is a safe bet.
|
|
||||||
|
|
||||||
config BT_ISO_TX_MTU
|
|
||||||
int "Maximum supported MTU for Isochronous TX buffers"
|
|
||||||
default 251
|
|
||||||
range 23 2000
|
|
||||||
help
|
|
||||||
Maximum MTU for Isochronous channels TX buffers.
|
|
||||||
|
|
||||||
config BT_ISO_RX_BUF_COUNT
|
|
||||||
int "Numer of Isochronous RX buffers"
|
|
||||||
default 1
|
|
||||||
range 1 255
|
|
||||||
help
|
|
||||||
Number of buffers available for incoming Isochronous channel packets.
|
|
||||||
|
|
||||||
config BT_ISO_RX_MTU
|
|
||||||
int "Maximum supported MTU for Isochronous RX buffers"
|
|
||||||
default 251
|
|
||||||
range 23 2000
|
|
||||||
help
|
|
||||||
Maximum MTU for Isochronous channels RX buffers.
|
|
||||||
|
|
||||||
endif # BT_AUDIO_UNICAST
|
|
||||||
endif # BT_CONN
|
endif # BT_CONN
|
||||||
|
|
||||||
config BT_AUDIO_DEBUG
|
config BT_AUDIO_DEBUG
|
||||||
|
@ -96,13 +41,4 @@ config BT_AUDIO_DEBUG
|
||||||
Use this option to enable debug logs for the Bluetooth
|
Use this option to enable debug logs for the Bluetooth
|
||||||
Audio functionality.
|
Audio functionality.
|
||||||
|
|
||||||
if BT_AUDIO_DEBUG
|
|
||||||
|
|
||||||
config BT_AUDIO_DEBUG_ISO
|
|
||||||
bool "ISO channel debug"
|
|
||||||
help
|
|
||||||
Use this option to enable ISO channels debug logs for the
|
|
||||||
Bluetooth Audio functionality.
|
|
||||||
|
|
||||||
endif # BT_AUDIO_DEBUG
|
|
||||||
endif # BT_AUDIO
|
endif # BT_AUDIO
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include "host/conn_internal.h"
|
#include "host/conn_internal.h"
|
||||||
#include "iso_internal.h"
|
#include "iso_internal.h"
|
||||||
|
|
||||||
#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_AUDIO_DEBUG_ISO)
|
#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_ISO)
|
||||||
#define LOG_MODULE_NAME bt_iso
|
#define LOG_MODULE_NAME bt_iso
|
||||||
#include "common/log.h"
|
#include "common/log.h"
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ NET_BUF_POOL_FIXED_DEFINE(iso_frag_pool, CONFIG_BT_ISO_TX_FRAG_COUNT,
|
||||||
|
|
||||||
/* TODO: Allow more than one server? */
|
/* TODO: Allow more than one server? */
|
||||||
static struct bt_iso_server *iso_server;
|
static struct bt_iso_server *iso_server;
|
||||||
struct bt_conn iso_conns[CONFIG_BT_MAX_ISO_CONN];
|
struct bt_conn iso_conns[CONFIG_BT_ISO_MAX_CHAN];
|
||||||
|
|
||||||
|
|
||||||
struct bt_iso_data_path {
|
struct bt_iso_data_path {
|
||||||
|
@ -257,7 +257,7 @@ void bt_iso_cleanup(struct bt_conn *conn)
|
||||||
conn->iso.acl = NULL;
|
conn->iso.acl = NULL;
|
||||||
|
|
||||||
/* Check if conn is last of CIG */
|
/* Check if conn is last of CIG */
|
||||||
for (i = 0; i < CONFIG_BT_MAX_ISO_CONN; i++) {
|
for (i = 0; i < CONFIG_BT_ISO_MAX_CHAN; i++) {
|
||||||
if (conn == &iso_conns[i]) {
|
if (conn == &iso_conns[i]) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -268,7 +268,7 @@ void bt_iso_cleanup(struct bt_conn *conn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == CONFIG_BT_MAX_ISO_CONN) {
|
if (i == CONFIG_BT_ISO_MAX_CHAN) {
|
||||||
hci_le_remove_cig(conn->iso.cig_id);
|
hci_le_remove_cig(conn->iso.cig_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,7 +417,7 @@ int bt_conn_bind_iso(struct bt_iso_create_param *param)
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!param->num_conns || param->num_conns > CONFIG_BT_MAX_ISO_CONN) {
|
if (!param->num_conns || param->num_conns > CONFIG_BT_ISO_MAX_CHAN) {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ int bt_conn_connect_iso(struct bt_conn **conns, uint8_t num_conns)
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_conns > CONFIG_BT_MAX_ISO_CONN) {
|
if (num_conns > CONFIG_BT_ISO_MAX_CHAN) {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,7 +783,7 @@ int bt_iso_server_register(struct bt_iso_server *server)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_BT_AUDIO_DEBUG_ISO)
|
#if defined(CONFIG_BT_DEBUG_ISO)
|
||||||
const char *bt_iso_chan_state_str(uint8_t state)
|
const char *bt_iso_chan_state_str(uint8_t state)
|
||||||
{
|
{
|
||||||
switch (state) {
|
switch (state) {
|
||||||
|
@ -847,7 +847,7 @@ void bt_iso_chan_set_state(struct bt_iso_chan *chan, uint8_t state)
|
||||||
{
|
{
|
||||||
chan->state = state;
|
chan->state = state;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_AUDIO_DEBUG_ISO */
|
#endif /* CONFIG_BT_DEBUG_ISO */
|
||||||
|
|
||||||
void bt_iso_chan_remove(struct bt_conn *conn, struct bt_iso_chan *chan)
|
void bt_iso_chan_remove(struct bt_conn *conn, struct bt_iso_chan *chan)
|
||||||
{
|
{
|
||||||
|
@ -898,7 +898,7 @@ int bt_iso_chan_bind(struct bt_conn **conns, uint8_t num_conns,
|
||||||
|
|
||||||
int bt_iso_chan_connect(struct bt_iso_chan **chans, uint8_t num_chans)
|
int bt_iso_chan_connect(struct bt_iso_chan **chans, uint8_t num_chans)
|
||||||
{
|
{
|
||||||
struct bt_conn *conns[CONFIG_BT_MAX_ISO_CONN];
|
struct bt_conn *conns[CONFIG_BT_ISO_MAX_CHAN];
|
||||||
int i, err;
|
int i, err;
|
||||||
|
|
||||||
__ASSERT_NO_MSG(chans);
|
__ASSERT_NO_MSG(chans);
|
||||||
|
|
|
@ -28,8 +28,8 @@ struct iso_data {
|
||||||
|
|
||||||
#define iso(buf) ((struct iso_data *)net_buf_user_data(buf))
|
#define iso(buf) ((struct iso_data *)net_buf_user_data(buf))
|
||||||
|
|
||||||
#if defined(CONFIG_BT_MAX_ISO_CONN)
|
#if defined(CONFIG_BT_ISO_MAX_CHAN)
|
||||||
extern struct bt_conn iso_conns[CONFIG_BT_MAX_ISO_CONN];
|
extern struct bt_conn iso_conns[CONFIG_BT_ISO_MAX_CHAN];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Process ISO buffer */
|
/* Process ISO buffer */
|
||||||
|
@ -97,14 +97,14 @@ struct net_buf *bt_iso_create_frag_timeout(size_t reserve, k_timeout_t timeout);
|
||||||
bt_iso_create_frag_timeout(_reserve, K_FOREVER)
|
bt_iso_create_frag_timeout(_reserve, K_FOREVER)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_BT_AUDIO_DEBUG_ISO)
|
#if defined(CONFIG_BT_DEBUG_ISO)
|
||||||
void bt_iso_chan_set_state_debug(struct bt_iso_chan *chan, uint8_t state,
|
void bt_iso_chan_set_state_debug(struct bt_iso_chan *chan, uint8_t state,
|
||||||
const char *func, int line);
|
const char *func, int line);
|
||||||
#define bt_iso_chan_set_state(_chan, _state) \
|
#define bt_iso_chan_set_state(_chan, _state) \
|
||||||
bt_iso_chan_set_state_debug(_chan, _state, __func__, __LINE__)
|
bt_iso_chan_set_state_debug(_chan, _state, __func__, __LINE__)
|
||||||
#else
|
#else
|
||||||
void bt_iso_chan_set_state(struct bt_iso_chan *chan, uint8_t state);
|
void bt_iso_chan_set_state(struct bt_iso_chan *chan, uint8_t state);
|
||||||
#endif /* CONFIG_BT_AUDIO_DEBUG_ISO */
|
#endif /* CONFIG_BT_DEBUG_ISO */
|
||||||
|
|
||||||
/* Process incoming data for a connection */
|
/* Process incoming data for a connection */
|
||||||
void bt_iso_recv(struct bt_conn *conn, struct net_buf *buf, uint8_t flags);
|
void bt_iso_recv(struct bt_conn *conn, struct net_buf *buf, uint8_t flags);
|
||||||
|
|
|
@ -5206,7 +5206,7 @@ static void process_events(struct k_poll_event *ev, int count)
|
||||||
#if defined(CONFIG_BT_CONN)
|
#if defined(CONFIG_BT_CONN)
|
||||||
#if defined(CONFIG_BT_ISO)
|
#if defined(CONFIG_BT_ISO)
|
||||||
/* command FIFO + conn_change signal + MAX_CONN + MAX_ISO_CONN */
|
/* command FIFO + conn_change signal + MAX_CONN + MAX_ISO_CONN */
|
||||||
#define EV_COUNT (2 + CONFIG_BT_MAX_CONN + CONFIG_BT_MAX_ISO_CONN)
|
#define EV_COUNT (2 + CONFIG_BT_MAX_CONN + CONFIG_BT_ISO_MAX_CHAN)
|
||||||
#else
|
#else
|
||||||
/* command FIFO + conn_change signal + MAX_CONN */
|
/* command FIFO + conn_change signal + MAX_CONN */
|
||||||
#define EV_COUNT (2 + CONFIG_BT_MAX_CONN)
|
#define EV_COUNT (2 + CONFIG_BT_MAX_CONN)
|
||||||
|
|
|
@ -43,9 +43,9 @@ NET_BUF_POOL_FIXED_DEFINE(hci_cmd_pool, CONFIG_BT_HCI_CMD_COUNT,
|
||||||
NET_BUF_POOL_FIXED_DEFINE(hci_acl_pool, BT_HCI_ACL_COUNT,
|
NET_BUF_POOL_FIXED_DEFINE(hci_acl_pool, BT_HCI_ACL_COUNT,
|
||||||
BT_BUF_ACL_SIZE, NULL);
|
BT_BUF_ACL_SIZE, NULL);
|
||||||
#if defined(CONFIG_BT_ISO)
|
#if defined(CONFIG_BT_ISO)
|
||||||
NET_BUF_POOL_FIXED_DEFINE(hci_iso_pool, BT_ISO_TX_BUF_COUNT,
|
NET_BUF_POOL_FIXED_DEFINE(hci_iso_pool, CONFIG_BT_ISO_TX_BUF_COUNT,
|
||||||
BT_ISO_TX_MTU, NULL);
|
CONFIG_BT_ISO_TX_MTU, NULL);
|
||||||
#endif
|
#endif /* CONFIG_BT_ISO */
|
||||||
|
|
||||||
struct bt_dev_raw bt_dev;
|
struct bt_dev_raw bt_dev;
|
||||||
struct bt_hci_raw_cmd_ext *cmd_ext;
|
struct bt_hci_raw_cmd_ext *cmd_ext;
|
||||||
|
@ -78,9 +78,10 @@ struct net_buf *bt_buf_get_rx(enum bt_buf_type type, k_timeout_t timeout)
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case BT_BUF_EVT:
|
case BT_BUF_EVT:
|
||||||
case BT_BUF_ACL_IN:
|
case BT_BUF_ACL_IN:
|
||||||
|
case BT_BUF_ISO_IN:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
BT_ERR("Invalid type: %u", type);
|
BT_ERR("Invalid rx type: %u", type);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +113,7 @@ struct net_buf *bt_buf_get_tx(enum bt_buf_type type, k_timeout_t timeout,
|
||||||
case BT_BUF_ISO_OUT:
|
case BT_BUF_ISO_OUT:
|
||||||
pool = &hci_iso_pool;
|
pool = &hci_iso_pool;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* CONFIG_BT_ISO */
|
||||||
case BT_BUF_H4:
|
case BT_BUF_H4:
|
||||||
if (IS_ENABLED(CONFIG_BT_HCI_RAW_H4) &&
|
if (IS_ENABLED(CONFIG_BT_HCI_RAW_H4) &&
|
||||||
raw_mode == BT_HCI_RAW_MODE_H4) {
|
raw_mode == BT_HCI_RAW_MODE_H4) {
|
||||||
|
@ -130,7 +131,7 @@ struct net_buf *bt_buf_get_tx(enum bt_buf_type type, k_timeout_t timeout,
|
||||||
type = BT_BUF_ISO_OUT;
|
type = BT_BUF_ISO_OUT;
|
||||||
pool = &hci_iso_pool;
|
pool = &hci_iso_pool;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* CONFIG_BT_ISO */
|
||||||
default:
|
default:
|
||||||
LOG_ERR("Unknown H4 type %u", type);
|
LOG_ERR("Unknown H4 type %u", type);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -143,7 +144,7 @@ struct net_buf *bt_buf_get_tx(enum bt_buf_type type, k_timeout_t timeout,
|
||||||
}
|
}
|
||||||
__fallthrough;
|
__fallthrough;
|
||||||
default:
|
default:
|
||||||
BT_ERR("Invalid type: %u", type);
|
BT_ERR("Invalid tx type: %u", type);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue