Exposing DelayReporting property on the MediaTransport interface will allow media application to get the information about the delay reporting feature during the SetConfiguration call in a similar way the profile UUID and transport codec are provided. Otherwise, the application would need to check the associated endpoint which might not be convenient. --- doc/org.bluez.MediaTransport.rst | 10 ++++++++-- profiles/audio/transport.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/doc/org.bluez.MediaTransport.rst b/doc/org.bluez.MediaTransport.rst index 4838d69d0..5da13b3b5 100644 --- a/doc/org.bluez.MediaTransport.rst +++ b/doc/org.bluez.MediaTransport.rst @@ -115,11 +115,17 @@ string State [readonly] created by a broadcast sink :"active": streaming and acquired +boolean DelayReporting [readonly] + + Indicates if the endpoint associated with the transport supports Delay + Reporting. + uint16 Delay [readwrite, optional] `````````````````````````````````` - Transport delay in 1/10 of millisecond, this property is only writeable - when the transport was acquired by the sender. + Transport delay in 1/10 of millisecond. + This property is available only if the DelayReporting is true and is + writeable only when the transport was acquired by the sender. uint16 Volume [readwrite, optional] ``````````````````````````````````` diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index 0f7909a94..dd6878427 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -860,6 +860,22 @@ static gboolean get_state(const GDBusPropertyTable *property, return TRUE; } +static gboolean get_delay_reporting(const GDBusPropertyTable *property, + DBusMessageIter *iter, void *data) +{ + struct media_transport *transport = data; + struct avdtp_stream *stream; + + stream = media_transport_get_stream(transport); + if (stream == NULL) + return FALSE; + + gboolean value = avdtp_stream_has_delay_reporting(stream); + dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &value); + + return TRUE; +} + static gboolean delay_reporting_exists(const GDBusPropertyTable *property, void *data) { @@ -873,7 +889,7 @@ static gboolean delay_reporting_exists(const GDBusPropertyTable *property, return avdtp_stream_has_delay_reporting(stream); } -static gboolean get_delay_reporting(const GDBusPropertyTable *property, +static gboolean get_delay_report(const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) { struct media_transport *transport = data; @@ -1019,7 +1035,8 @@ static const GDBusPropertyTable transport_a2dp_properties[] = { { "Codec", "y", get_codec }, { "Configuration", "ay", get_configuration }, { "State", "s", get_state }, - { "Delay", "q", get_delay_reporting, NULL, delay_reporting_exists }, + { "DelayReporting", "b", get_delay_reporting }, + { "Delay", "q", get_delay_report, NULL, delay_reporting_exists }, { "Volume", "q", get_volume, set_volume, volume_exists }, { "Endpoint", "o", get_endpoint, NULL, endpoint_exists, G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, @@ -1359,6 +1376,14 @@ static const GDBusPropertyTable transport_bap_bc_properties[] = { { } }; +static gboolean get_asha_delay_reporting(const GDBusPropertyTable *property, + DBusMessageIter *iter, void *data) +{ + gboolean value = TRUE; + dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &value); + return TRUE; +} + static gboolean get_asha_delay(const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) { @@ -1380,6 +1405,7 @@ static const GDBusPropertyTable transport_asha_properties[] = { { "UUID", "s", get_uuid }, { "Codec", "y", get_codec }, { "State", "s", get_state }, + { "DelayReporting", "b", get_asha_delay_reporting }, { "Delay", "q", get_asha_delay }, { "Volume", "q", get_volume, set_volume, volume_exists }, { } -- 2.39.5