From: "Frédéric Danis" <frederic.danis@collabora.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH BlueZ v2 5/8] client/btpclient: Add BTP_OP_BAP_SEND support
Date: Tue, 8 Sep 2026 19:06:30 +0200 [thread overview]
Message-ID: <20260908170633.510244-6-frederic.danis@collabora.com> (raw)
In-Reply-To: <20260908170633.510244-1-frederic.danis@collabora.com>
---
v1->v2: Fix incremental build
client/btpclient/bap.c | 49 ++++++++++++++++++++++++++++++++++++
client/btpclient/btpclient.h | 3 +++
src/shared/btp.h | 13 ++++++++++
3 files changed, 65 insertions(+)
diff --git a/client/btpclient/bap.c b/client/btpclient/bap.c
index d30d931f1..548b5e8ed 100644
--- a/client/btpclient/bap.c
+++ b/client/btpclient/bap.c
@@ -31,6 +31,7 @@ static void btp_bap_read_commands(uint8_t index, const void *param,
const uint8_t supported_commands[] = {
BTP_OP_BAP_READ_SUPPORTED_COMMANDS,
BTP_OP_BAP_DISCOVER,
+ BTP_OP_BAP_SEND,
};
uint8_t *commands = NULL;
size_t commands_len = 0;
@@ -104,6 +105,51 @@ failed:
btp_send_error(btp, BTP_BAP_SERVICE, index, status);
}
+static bool match_ase(const void *entry, const void *data)
+{
+ const struct btp_ase *ase = entry;
+ uint8_t id = L_PTR_TO_UINT(data);
+
+ return ase->ase_id == id;
+}
+
+static void btp_bap_send(uint8_t index, const void *param, uint16_t length,
+ void *user_data)
+{
+ const struct btp_bap_send_cp *cp = param;
+ struct btp_adapter *adapter = find_adapter_by_index(index);
+ uint8_t status = BTP_ERROR_FAIL;
+ struct btp_device *dev;
+ struct btp_ase *ase;
+ ssize_t bytes_written;
+ struct btp_bap_send_rp rp;
+
+ if (!adapter) {
+ status = BTP_ERROR_INVALID_INDEX;
+ goto failed;
+ }
+
+ dev = find_device_by_address(adapter, &cp->address, cp->address_type);
+ ase = l_queue_find(dev->ases, match_ase, L_UINT_TO_PTR(cp->ase_id));
+ if (!ase || !ase->io)
+ goto failed;
+
+ bytes_written = write(l_io_get_fd(ase->io), cp->data,
+ cp->data_len <= ase->tx_mtu ? cp->data_len : ase->tx_mtu);
+ if (bytes_written < 0) {
+ l_error("Failed to write (%d)", errno);
+ goto failed;
+ }
+ rp.data_len = bytes_written;
+
+ btp_send(btp, BTP_BAP_SERVICE, BTP_OP_BAP_SEND, index, sizeof(rp), &rp);
+
+ return;
+
+failed:
+ btp_send_error(btp, BTP_BAP_SERVICE, index, status);
+}
+
static void bap_charac_read_setup(struct l_dbus_message *message,
void *user_data)
{
@@ -304,6 +350,9 @@ bool bap_register_service(struct btp *btp_, struct l_dbus *dbus_,
btp_register(btp, BTP_BAP_SERVICE, BTP_OP_BAP_DISCOVER,
btp_bap_discover, NULL, NULL);
+ btp_register(btp, BTP_BAP_SERVICE, BTP_OP_BAP_SEND,
+ btp_bap_send, NULL, NULL);
+
bap_service_registered = true;
return true;
diff --git a/client/btpclient/btpclient.h b/client/btpclient/btpclient.h
index 2ba612ade..9996df506 100644
--- a/client/btpclient/btpclient.h
+++ b/client/btpclient/btpclient.h
@@ -42,6 +42,9 @@ struct btp_ase {
uint8_t dir;
uint8_t ase_id;
struct l_dbus_proxy *ep_proxy;
+ struct l_io *io;
+ uint16_t rx_mtu;
+ uint16_t tx_mtu;
};
struct btp_agent {
diff --git a/src/shared/btp.h b/src/shared/btp.h
index 8ad57f48f..fe93158aa 100644
--- a/src/shared/btp.h
+++ b/src/shared/btp.h
@@ -481,6 +481,19 @@ struct btp_bap_discover_cp {
bdaddr_t address;
} __packed;
+#define BTP_OP_BAP_SEND 0x03
+struct btp_bap_send_cp {
+ uint8_t address_type;
+ bdaddr_t address;
+ uint8_t ase_id;
+ uint8_t data_len;
+ uint8_t data[];
+} __packed;
+
+struct btp_bap_send_rp {
+ uint8_t data_len;
+} __packed;
+
#define BTP_EV_BAP_DISCOVERY_COMPLETED 0x80
struct btp_bap_discovery_completed_ev {
uint8_t address_type;
--
2.43.0
next prev parent reply other threads:[~2026-09-08 17:06 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 17:06 [PATCH BlueZ v2 0/8] client/btpclient: Add BAP/ASCS/PACS support for auto-pts BAP tests Frédéric Danis
2026-09-08 17:06 ` [PATCH BlueZ v2 1/8] client/btpclient: Add BTP_EV_BAP_ASE_FOUND support Frédéric Danis
2026-09-08 17:59 ` client/btpclient: Add BAP/ASCS/PACS support for auto-pts BAP tests bluez.test.bot
2026-09-08 17:06 ` [PATCH BlueZ v2 2/8] client/btpclient: Get Codec capabilities on ASE reply Frédéric Danis
2026-09-08 17:06 ` [PATCH BlueZ v2 3/8] client/btpclient: Add ASCS BTP support Frédéric Danis
2026-09-08 17:06 ` [PATCH BlueZ v2 4/8] client/btpclient: Add BTP_OP_PACS_SET_LOCATION support Frédéric Danis
2026-09-08 17:06 ` Frédéric Danis [this message]
2026-09-08 17:06 ` [PATCH BlueZ v2 6/8] client/btpclient: Add ASCS support for BAP/UCL/STR/* tests Frédéric Danis
2026-09-08 17:06 ` [PATCH BlueZ v2 7/8] client/btpclient: Defer CIG/CIS assignment based on Client/Server role Frédéric Danis
2026-09-08 17:06 ` [PATCH BlueZ v2 8/8] client/btpclient: Add stream auto acquire for BAP/USR/STR/* tests Frédéric Danis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260908170633.510244-6-frederic.danis@collabora.com \
--to=frederic.danis@collabora.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.