Bluetooth: audio: Enable auto ATT MTU Exchange for BASS and unicast client

This enables automatic MTU exchange for services that require MTU size
bigger than default ATT MTU to operate.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
This commit is contained in:
Mariusz Skamra 2022-03-22 11:05:23 +01:00 committed by Carles Cufí
commit 6eafc64855
5 changed files with 24 additions and 87 deletions

View file

@ -226,17 +226,6 @@ static struct bt_bass_client_cb bass_cbs = {
.rem_src = bass_client_rem_src_cb,
};
static void mtu_cb(struct bt_conn *conn, uint8_t err,
struct bt_gatt_exchange_params *params)
{
if (err != 0) {
FAIL("Failed to exchange MTU (%u)\n", err);
return;
}
g_mtu_exchanged = true;
}
static void connected(struct bt_conn *conn, uint8_t err)
{
char addr[BT_ADDR_LE_STR_LEN];
@ -258,6 +247,15 @@ static struct bt_conn_cb conn_callbacks = {
.disconnected = disconnected,
};
static void att_mtu_updated(struct bt_conn *conn, uint16_t tx, uint16_t rx)
{
g_mtu_exchanged = true;
}
static struct bt_gatt_cb gatt_callbacks = {
.att_mtu_updated = att_mtu_updated,
};
static void sync_cb(struct bt_le_per_adv_sync *sync,
struct bt_le_per_adv_sync_synced_info *info)
{
@ -310,18 +308,6 @@ static struct bt_le_per_adv_sync_cb sync_callbacks = {
static void test_exchange_mtu(void)
{
static struct bt_gatt_exchange_params mtu_params = {
.func = mtu_cb,
};
int err;
printk("Exchanging MTU\n");
err = bt_gatt_exchange_mtu(g_conn, &mtu_params);
if (err != 0) {
FAIL("Failed to exchange MTU %d\n", err);
return;
}
WAIT_FOR(g_mtu_exchanged);
printk("MTU exchanged\n");
}
@ -495,6 +481,7 @@ static void test_main(void)
}
bt_conn_cb_register(&conn_callbacks);
bt_gatt_cb_register(&gatt_callbacks);
bt_bass_client_register_cb(&bass_cbs);
bt_le_per_adv_sync_cb_register(&sync_callbacks);

View file

@ -153,18 +153,6 @@ static void discover_sink_cb(struct bt_conn *conn,
}
}
static void gatt_mtu_cb(struct bt_conn *conn, uint8_t err,
struct bt_gatt_exchange_params *params)
{
if (err != 0) {
FAIL("Failed to exchange MTU (%u)\n", err);
return;
}
printk("MTU exchanged\n");
SET_FLAG(flag_mtu_exchanged);
}
static void connected(struct bt_conn *conn, uint8_t err)
{
char addr[BT_ADDR_LE_STR_LEN];
@ -188,6 +176,16 @@ BT_CONN_CB_DEFINE(conn_callbacks) = {
.disconnected = disconnected,
};
static void att_mtu_updated(struct bt_conn *conn, uint16_t tx, uint16_t rx)
{
printk("MTU exchanged\n");
SET_FLAG(flag_mtu_exchanged);
}
static struct bt_gatt_cb gatt_callbacks = {
.att_mtu_updated = att_mtu_updated,
};
static void init(void)
{
int err;
@ -201,6 +199,8 @@ static void init(void)
for (size_t i = 0; i < ARRAY_SIZE(g_streams); i++) {
g_streams[i].ops = &stream_ops;
}
bt_gatt_cb_register(&gatt_callbacks);
}
static void scan_and_connect(void)
@ -219,17 +219,6 @@ static void scan_and_connect(void)
static void exchange_mtu(void)
{
struct bt_gatt_exchange_params mtu_params = {
.func = gatt_mtu_cb
};
int err;
err = bt_gatt_exchange_mtu(default_conn, &mtu_params);
if (err != 0) {
FAIL("Failed to exchange MTU %d\n", err);
return;
}
WAIT_FOR_FLAG(flag_mtu_exchanged);
}