Re: [PATCH BlueZ 1/2] transport: add CIG/CIS/PHY properties, don't show unset QoS properties

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Pauli,

On Wed, Mar 15, 2023 at 10:54 AM Pauli Virtanen <pav@xxxxxx> wrote:
>
> 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.
> ---
>  profiles/audio/transport.c | 67 ++++++++++++++++++++++++++++++++++----
>  1 file 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 },
> @@ -1191,12 +1237,21 @@ static void bap_update_qos(const struct media_transport *transport)
>
>         bap->qos = *qos;
>
> +       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");
> --
> 2.39.2

I'm fine adding these but you could also have used BT_ISO_QOS
socketopt to read it directly from the socket in case you want to use
it on pipewire.

-- 
Luiz Augusto von Dentz




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux