summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--profiles/audio/bap.c2
-rw-r--r--profiles/audio/media.c15
-rw-r--r--src/shared/bap.c12
-rw-r--r--src/shared/bap.h7
4 files changed, 30 insertions, 6 deletions
diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
index d388afe56..67aba3bd7 100644
--- a/profiles/audio/bap.c
+++ b/profiles/audio/bap.c
@@ -555,6 +555,8 @@ static struct bap_ep *ep_register(struct btd_service *service,
return NULL;
}
+ bt_bap_pac_set_user_data(rpac, ep->path);
+
DBG("ep %p lpac %p rpac %p path %s", ep, ep->lpac, ep->rpac, ep->path);
queue_push_tail(queue, ep);
diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index ff3fa197b..85278a6d9 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -889,16 +889,20 @@ done:
data->cb(data->pac, err, caps, metadata, &qos, data->user_data);
}
-static int pac_select(struct bt_bap_pac *pac, struct bt_bap_pac_qos *qos,
- struct iovec *caps, struct iovec *metadata,
+static int pac_select(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac,
+ struct bt_bap_pac_qos *qos,
bt_bap_pac_select_t cb, void *cb_data, void *user_data)
{
struct media_endpoint *endpoint = user_data;
+ struct iovec *caps;
+ struct iovec *metadata;
+ const char *endpoint_path;
struct pac_select_data *data;
DBusMessage *msg;
DBusMessageIter iter, dict;
const char *key = "Capabilities";
+ bt_bap_pac_get_codec(rpac, NULL, &caps, &metadata);
if (!caps)
return -EINVAL;
@@ -911,7 +915,7 @@ static int pac_select(struct bt_bap_pac *pac, struct bt_bap_pac_qos *qos,
}
data = new0(struct pac_select_data, 1);
- data->pac = pac;
+ data->pac = lpac;
data->cb = cb;
data->user_data = cb_data;
@@ -919,6 +923,11 @@ static int pac_select(struct bt_bap_pac *pac, struct bt_bap_pac_qos *qos,
dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "{sv}", &dict);
+ endpoint_path = bt_bap_pac_get_user_data(rpac);
+ if (endpoint_path)
+ g_dbus_dict_append_entry(&dict, "Endpoint",
+ DBUS_TYPE_OBJECT_PATH, &endpoint_path);
+
g_dbus_dict_append_basic_array(&dict, DBUS_TYPE_STRING, &key,
DBUS_TYPE_BYTE, &caps->iov_base,
caps->iov_len);
diff --git a/src/shared/bap.c b/src/shared/bap.c
index 8edc7b72e..150b2116e 100644
--- a/src/shared/bap.c
+++ b/src/shared/bap.c
@@ -3934,6 +3934,16 @@ int bt_bap_pac_get_codec(struct bt_bap_pac *pac, uint8_t *id,
return bt_bap_pac_get_vendor_codec(pac, id, NULL, NULL, data, metadata);
}
+void bt_bap_pac_set_user_data(struct bt_bap_pac *pac, void *user_data)
+{
+ pac->user_data = user_data;
+}
+
+void *bt_bap_pac_get_user_data(struct bt_bap_pac *pac)
+{
+ return pac->user_data;
+}
+
static bool find_ep_unused(const void *data, const void *user_data)
{
const struct bt_bap_endpoint *ep = data;
@@ -4066,7 +4076,7 @@ int bt_bap_select(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac,
if (!lpac->ops || !lpac->ops->select)
return -EOPNOTSUPP;
- lpac->ops->select(lpac, &rpac->qos, rpac->data, rpac->metadata,
+ lpac->ops->select(lpac, rpac, &rpac->qos,
func, user_data, lpac->user_data);
return 0;
diff --git a/src/shared/bap.h b/src/shared/bap.h
index ff4bac330..93b00d771 100644
--- a/src/shared/bap.h
+++ b/src/shared/bap.h
@@ -120,8 +120,8 @@ struct bt_bap_pac *bt_bap_add_pac(struct gatt_db *db, const char *name,
struct iovec *metadata);
struct bt_bap_pac_ops {
- int (*select) (struct bt_bap_pac *pac, struct bt_bap_pac_qos *qos,
- struct iovec *caps, struct iovec *metadata,
+ int (*select)(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac,
+ struct bt_bap_pac_qos *qos,
bt_bap_pac_select_t cb, void *cb_data, void *user_data);
int (*config) (struct bt_bap_stream *stream, struct iovec *cfg,
struct bt_bap_qos *qos, bt_bap_pac_config_t cb,
@@ -186,6 +186,9 @@ int bt_bap_pac_get_vendor_codec(struct bt_bap_pac *pac, uint8_t *id,
int bt_bap_pac_get_codec(struct bt_bap_pac *pac, uint8_t *id,
struct iovec **data, struct iovec **metadata);
+void bt_bap_pac_set_user_data(struct bt_bap_pac *pac, void *user_data);
+void *bt_bap_pac_get_user_data(struct bt_bap_pac *pac);
+
/* Stream related functions */
int bt_bap_select(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac,
bt_bap_pac_select_t func, void *user_data);