mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-15 00:04:29 +08:00
transport: Set bap_update_links as transport op
This implements bap_update_links as transport op, since broadcast links need to be handled differently for unicast, which only allows one link. For broadcast, the property changed signal should be emitted everytime a new link is added or removed.
This commit is contained in:
parent
5b1dfd2721
commit
3bafab4466
@ -116,6 +116,7 @@ struct media_transport_ops {
|
||||
void *(*get_stream)(struct media_transport *transport);
|
||||
int8_t (*get_volume)(struct media_transport *transport);
|
||||
int (*set_volume)(struct media_transport *transport, int8_t level);
|
||||
void (*update_links)(const struct media_transport *transport);
|
||||
GDestroyNotify destroy;
|
||||
};
|
||||
|
||||
@ -1628,7 +1629,8 @@ static bool match_link_transport(const void *data, const void *user_data)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void bap_update_links(const struct media_transport *transport)
|
||||
static void transport_bap_update_links_uc(
|
||||
const struct media_transport *transport)
|
||||
{
|
||||
struct bap_transport *bap = transport->data;
|
||||
struct queue *links = bt_bap_stream_io_get_links(bap->stream);
|
||||
@ -1651,6 +1653,30 @@ static void bap_update_links(const struct media_transport *transport)
|
||||
DBG("stream %p linked %s", bap->stream, bap->linked ? "true" : "false");
|
||||
}
|
||||
|
||||
static void transport_bap_update_links_bc(
|
||||
const struct media_transport *transport)
|
||||
{
|
||||
struct bap_transport *bap = transport->data;
|
||||
struct queue *links = bt_bap_stream_io_get_links(bap->stream);
|
||||
|
||||
if (!queue_isempty(links))
|
||||
bap->linked = true;
|
||||
else
|
||||
bap->linked = false;
|
||||
|
||||
g_dbus_emit_property_changed(btd_get_dbus_connection(), transport->path,
|
||||
MEDIA_TRANSPORT_INTERFACE,
|
||||
"Links");
|
||||
|
||||
DBG("stream %p linked %s", bap->stream, bap->linked ? "true" : "false");
|
||||
}
|
||||
|
||||
static void bap_update_links(const struct media_transport *transport)
|
||||
{
|
||||
if (transport->ops && transport->ops->update_links)
|
||||
transport->ops->update_links(transport);
|
||||
}
|
||||
|
||||
static void bap_update_qos(const struct media_transport *transport)
|
||||
{
|
||||
struct bap_transport *bap = transport->data;
|
||||
@ -2105,7 +2131,7 @@ static void *transport_asha_init(struct media_transport *transport, void *data)
|
||||
|
||||
#define TRANSPORT_OPS(_uuid, _props, _set_owner, _remove_owner, _init, \
|
||||
_resume, _suspend, _cancel, _set_state, _get_stream, \
|
||||
_get_volume, _set_volume, _destroy) \
|
||||
_get_volume, _set_volume, _update_links, _destroy) \
|
||||
{ \
|
||||
.uuid = _uuid, \
|
||||
.properties = _props, \
|
||||
@ -2119,6 +2145,7 @@ static void *transport_asha_init(struct media_transport *transport, void *data)
|
||||
.get_stream = _get_stream, \
|
||||
.get_volume = _get_volume, \
|
||||
.set_volume = _set_volume, \
|
||||
.update_links = _update_links, \
|
||||
.destroy = _destroy \
|
||||
}
|
||||
|
||||
@ -2127,22 +2154,24 @@ static void *transport_asha_init(struct media_transport *transport, void *data)
|
||||
transport_a2dp_resume, transport_a2dp_suspend, \
|
||||
transport_a2dp_cancel, NULL, \
|
||||
transport_a2dp_get_stream, transport_a2dp_get_volume, \
|
||||
_set_volume, _destroy)
|
||||
_set_volume, NULL, _destroy)
|
||||
|
||||
#define BAP_OPS(_uuid, _props, _set_owner, _remove_owner) \
|
||||
#define BAP_OPS(_uuid, _props, _set_owner, _remove_owner, _update_links) \
|
||||
TRANSPORT_OPS(_uuid, _props, _set_owner, _remove_owner,\
|
||||
transport_bap_init, \
|
||||
transport_bap_resume, transport_bap_suspend, \
|
||||
transport_bap_cancel, transport_bap_set_state, \
|
||||
transport_bap_get_stream, NULL, NULL, \
|
||||
transport_bap_get_stream, NULL, NULL, _update_links, \
|
||||
transport_bap_destroy)
|
||||
|
||||
#define BAP_UC_OPS(_uuid) \
|
||||
BAP_OPS(_uuid, transport_bap_uc_properties, \
|
||||
transport_bap_set_owner, transport_bap_remove_owner)
|
||||
transport_bap_set_owner, transport_bap_remove_owner, \
|
||||
transport_bap_update_links_uc)
|
||||
|
||||
#define BAP_BC_OPS(_uuid) \
|
||||
BAP_OPS(_uuid, transport_bap_bc_properties, NULL, NULL)
|
||||
BAP_OPS(_uuid, transport_bap_bc_properties, NULL, NULL, \
|
||||
transport_bap_update_links_bc)
|
||||
|
||||
#define ASHA_OPS(_uuid) \
|
||||
TRANSPORT_OPS(_uuid, transport_asha_properties, NULL, NULL, \
|
||||
@ -2150,7 +2179,7 @@ static void *transport_asha_init(struct media_transport *transport, void *data)
|
||||
transport_asha_resume, transport_asha_suspend, \
|
||||
transport_asha_cancel, NULL, NULL, \
|
||||
transport_asha_get_volume, transport_asha_set_volume, \
|
||||
NULL)
|
||||
NULL, NULL)
|
||||
|
||||
static const struct media_transport_ops transport_ops[] = {
|
||||
A2DP_OPS(A2DP_SOURCE_UUID, transport_a2dp_src_init,
|
||||
|
Loading…
Reference in New Issue
Block a user