@@ -1058,17 +1058,21 @@ static struct media_transport *pac_bcast_config(struct bt_bap_stream *stream,
struct media_endpoint *endpoint)
{
struct bt_bap *bap = bt_bap_stream_get_session(stream);
- struct btd_adapter *adapter = bt_bap_get_user_data(bap);
+ struct btd_adapter *adapter = endpoint->adapter->btd_adapter;
+ struct btd_device *device;
const char *path;
- if (!adapter) {
- error("Unable to find adapter");
+ if (!adapter)
return NULL;
- }
+
+ if (!strcmp(endpoint->uuid, BCAA_SERVICE_UUID))
+ device = NULL;
+ else
+ device = btd_service_get_device(bt_bap_get_user_data(bap));
path = bt_bap_stream_get_user_data(stream);
- return media_transport_create(NULL, path, cfg->iov_base, cfg->iov_len,
+ return media_transport_create(device, path, cfg->iov_base, cfg->iov_len,
endpoint, stream);
}
@@ -1238,6 +1242,12 @@ static bool endpoint_init_broadcast_source(struct media_endpoint *endpoint,
return endpoint_init_pac(endpoint, BT_BAP_BCAST_SOURCE, err);
}
+static bool endpoint_init_broadcast_sink(struct media_endpoint *endpoint,
+ int *err)
+{
+ return endpoint_init_pac(endpoint, BT_BAP_BCAST_SINK, err);
+}
+
static bool endpoint_properties_exists(const char *uuid,
struct btd_device *dev,
void *user_data)
@@ -1351,6 +1361,17 @@ static bool experimental_broadcaster_ep_supported(struct btd_adapter *adapter)
return g_dbus_get_flags() & G_DBUS_FLAG_ENABLE_EXPERIMENTAL;
}
+static bool experimental_bcast_sink_ep_supported(struct btd_adapter *adapter)
+{
+ if (!btd_adapter_has_exp_feature(adapter, EXP_FEAT_ISO_SOCKET))
+ return false;
+
+ if (!btd_adapter_has_settings(adapter, MGMT_SETTING_ISO_SYNC_RECEIVER))
+ return false;
+
+ return g_dbus_get_flags() & G_DBUS_FLAG_ENABLE_EXPERIMENTAL;
+}
+
static struct media_endpoint_init {
const char *uuid;
bool (*func)(struct media_endpoint *endpoint, int *err);
@@ -1366,6 +1387,8 @@ static struct media_endpoint_init {
experimental_endpoint_supported },
{ BCAA_SERVICE_UUID, endpoint_init_broadcast_source,
experimental_broadcaster_ep_supported },
+ { BAA_SERVICE_UUID, endpoint_init_broadcast_sink,
+ experimental_bcast_sink_ep_supported },
};
static struct media_endpoint *
@@ -3245,3 +3268,12 @@ struct btd_adapter *media_endpoint_get_btd_adapter(
{
return endpoint->adapter->btd_adapter;
}
+
+bool media_endpoint_is_broadcast(struct media_endpoint *endpoint)
+{
+ if (!strcmp(endpoint->uuid, BCAA_SERVICE_UUID)
+ || !strcmp(endpoint->uuid, BAA_SERVICE_UUID))
+ return true;
+
+ return false;
+}
@@ -22,5 +22,6 @@ const char *media_endpoint_get_uuid(struct media_endpoint *endpoint);
uint8_t media_endpoint_get_codec(struct media_endpoint *endpoint);
struct btd_adapter *media_endpoint_get_btd_adapter(
struct media_endpoint *endpoint);
-
+bool media_endpoint_is_broadcast(
+ struct media_endpoint *endpoint);
int8_t media_player_get_device_volume(struct btd_device *device);