summaryrefslogtreecommitdiff
path: root/profiles
diff options
context:
space:
mode:
authorPauli Virtanen <pav@iki.fi>2023-03-15 22:16:38 +0000
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-03-17 09:36:01 -0700
commit28422cd231196037ae7d52f8803ff282482c607e (patch)
tree7e8d4db78990de4379ec57398a9aa35b525e801d /profiles
parent306a8083ad19459136cb46b7ec7fb27b070fb118 (diff)
downloadbluez-28422cd231196037ae7d52f8803ff282482c607e.tar.gz
transport: add CIG/CIS/PHY properties, don't show unset QoS properties
Add CIG, CIS, and PHY properties to BAP transport. The other QoS properties are there, and these may also be useful to clients, e.g. to manage CIG/CIS allocation as client. Hide transport QoS properties when they are not configured.
Diffstat (limited to 'profiles')
-rw-r--r--profiles/audio/transport.c67
1 files changed, 61 insertions, 6 deletions
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 457590746..53bf13175 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -811,6 +811,38 @@ static const GDBusPropertyTable a2dp_properties[] = {
{ }
};
+static gboolean qos_exists(const GDBusPropertyTable *property, void *data)
+{
+ struct media_transport *transport = data;
+ struct bap_transport *bap = transport->data;
+
+ return bap->qos.phy != 0x00;
+}
+
+static gboolean get_cig(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ struct media_transport *transport = data;
+ struct bap_transport *bap = transport->data;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE,
+ &bap->qos.cig_id);
+
+ return TRUE;
+}
+
+static gboolean get_cis(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ struct media_transport *transport = data;
+ struct bap_transport *bap = transport->data;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE,
+ &bap->qos.cis_id);
+
+ return TRUE;
+}
+
static gboolean get_interval(const GDBusPropertyTable *property,
DBusMessageIter *iter, void *data)
{
@@ -835,6 +867,17 @@ static gboolean get_framing(const GDBusPropertyTable *property,
return TRUE;
}
+static gboolean get_phy(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ struct media_transport *transport = data;
+ struct bap_transport *bap = transport->data;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &bap->qos.phy);
+
+ return TRUE;
+}
+
static gboolean get_sdu(const GDBusPropertyTable *property,
DBusMessageIter *iter, void *data)
{
@@ -962,12 +1005,15 @@ static const GDBusPropertyTable bap_properties[] = {
{ "Codec", "y", get_codec },
{ "Configuration", "ay", get_configuration },
{ "State", "s", get_state },
- { "Interval", "u", get_interval },
- { "Framing", "b", get_framing },
- { "SDU", "q", get_sdu },
- { "Retransmissions", "y", get_retransmissions },
- { "Latency", "q", get_latency },
- { "Delay", "u", get_delay },
+ { "CIG", "y", get_cig, NULL, qos_exists },
+ { "CIS", "y", get_cis, NULL, qos_exists },
+ { "Interval", "u", get_interval, NULL, qos_exists },
+ { "Framing", "b", get_framing, NULL, qos_exists },
+ { "PHY", "y", get_phy, NULL, qos_exists },
+ { "SDU", "q", get_sdu, NULL, qos_exists },
+ { "Retransmissions", "y", get_retransmissions, NULL, qos_exists },
+ { "Latency", "q", get_latency, NULL, qos_exists },
+ { "Delay", "u", get_delay, NULL, qos_exists },
{ "Endpoint", "o", get_endpoint, NULL, endpoint_exists },
{ "Location", "u", get_location },
{ "Metadata", "ay", get_metadata },
@@ -1193,12 +1239,21 @@ static void bap_update_qos(const struct media_transport *transport)
g_dbus_emit_property_changed(btd_get_dbus_connection(),
transport->path, MEDIA_TRANSPORT_INTERFACE,
+ "CIG");
+ g_dbus_emit_property_changed(btd_get_dbus_connection(),
+ transport->path, MEDIA_TRANSPORT_INTERFACE,
+ "CIS");
+ g_dbus_emit_property_changed(btd_get_dbus_connection(),
+ transport->path, MEDIA_TRANSPORT_INTERFACE,
"Interval");
g_dbus_emit_property_changed(btd_get_dbus_connection(),
transport->path, MEDIA_TRANSPORT_INTERFACE,
"Framing");
g_dbus_emit_property_changed(btd_get_dbus_connection(),
transport->path, MEDIA_TRANSPORT_INTERFACE,
+ "PHY");
+ g_dbus_emit_property_changed(btd_get_dbus_connection(),
+ transport->path, MEDIA_TRANSPORT_INTERFACE,
"SDU");
g_dbus_emit_property_changed(btd_get_dbus_connection(),
transport->path, MEDIA_TRANSPORT_INTERFACE,