@@ -163,7 +163,9 @@ find_transport_by_bap_stream(const struct bt_bap_stream *stream)
struct bap_transport *bap;
if (strcasecmp(uuid, PAC_SINK_UUID) &&
- strcasecmp(uuid, PAC_SOURCE_UUID))
+ strcasecmp(uuid, PAC_SOURCE_UUID) &&
+ strcasecmp(uuid, BCAA_SERVICE_UUID) &&
+ strcasecmp(uuid, BAA_SERVICE_UUID))
continue;
bap = transport->data;
@@ -312,8 +314,9 @@ static void media_transport_remove_owner(struct media_transport *transport)
media_request_reply(owner->pending, EIO);
transport->owner = NULL;
+
if (bap->linked)
- queue_foreach(bt_bap_stream_io_get_links(bap->stream),
+ bt_bap_stream_foreach_link(bap->stream,
linked_transport_remove_owner, owner);
if (owner->watch)
@@ -497,7 +500,7 @@ static void media_transport_set_owner(struct media_transport *transport,
transport->owner = owner;
if (bap->linked)
- queue_foreach(bt_bap_stream_io_get_links(bap->stream),
+ bt_bap_stream_foreach_link(bap->stream,
linked_transport_set_owner, owner);
owner->transport = transport;
@@ -641,6 +644,7 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
const char *sender;
struct media_request *req;
guint id;
+ const char *uuid;
sender = dbus_message_get_sender(msg);
@@ -669,9 +673,12 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
req = media_request_create(msg, id);
media_owner_add(owner, req);
- if (bt_bap_stream_get_type(bap->stream) ==
- BT_BAP_STREAM_TYPE_BCAST) {
- bap_disable_complete(bap->stream, 0x00, 0x00, owner);
+ uuid = media_endpoint_get_uuid(transport->endpoint);
+ if (!strcasecmp(uuid, BCAA_SERVICE_UUID) ||
+ !strcasecmp(uuid, BAA_SERVICE_UUID)) {
+ if (bt_bap_stream_get_type(bap->stream) ==
+ BT_BAP_STREAM_TYPE_BCAST)
+ bap_disable_complete(bap->stream, 0x00, 0x00, owner);
}
return NULL;
@@ -686,7 +693,11 @@ static gboolean get_device(const GDBusPropertyTable *property,
if (transport->device)
path = device_get_path(transport->device);
else
- path = adapter_get_path(transport->adapter);
+ /*
+ *Use remote endpoint path as fake device path
+ *for broadcast source transport
+ */
+ path = transport->remote_endpoint;
dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &path);
@@ -1282,6 +1293,10 @@ static void bap_update_links(const struct media_transport *transport)
struct bap_transport *bap = transport->data;
struct queue *links = bt_bap_stream_io_get_links(bap->stream);
+ if (bt_bap_stream_get_type(bap->stream) !=
+ BT_BAP_STREAM_TYPE_UCAST)
+ return;
+
if (bap->linked == !queue_isempty(links))
return;
@@ -1491,9 +1506,10 @@ static void bap_state_changed(struct bt_bap_stream *stream, uint8_t old_state,
/* If a request is pending wait it to complete */
if (owner && owner->pending)
return;
- bap_update_links(transport);
- if (!media_endpoint_is_broadcast(transport->endpoint))
+ if (!media_endpoint_is_broadcast(transport->endpoint)) {
+ bap_update_links(transport);
bap_update_qos(transport);
+ }
else if (bt_bap_stream_io_dir(stream) != BT_BAP_BCAST_SOURCE)
bap_update_bcast_qos(transport);
transport_update_playing(transport, FALSE);
@@ -1510,7 +1526,7 @@ static void bap_state_changed(struct bt_bap_stream *stream, uint8_t old_state,
bap_update_bcast_qos(transport);
break;
case BT_BAP_STREAM_STATE_RELEASING:
- if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SINK)
+ if (!bt_bap_stream_io_dir(stream))
return;
break;
}