diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 912f404..4575907 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
struct bt_bap_stream *stream;
unsigned int state_id;
bool linked;
- uint32_t interval;
- uint8_t framing;
- uint8_t phy;
- uint16_t sdu;
- uint8_t rtn;
- uint16_t latency;
- uint32_t delay;
+ struct bt_bap_qos qos;
};
struct media_transport {
struct media_transport *transport = data;
struct bap_transport *bap = transport->data;
- dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &bap->interval);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32,
+ &bap->qos.interval);
return TRUE;
}
{
struct media_transport *transport = data;
struct bap_transport *bap = transport->data;
- dbus_bool_t val = bap->framing;
+ dbus_bool_t val = bap->qos.framing;
dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &val);
struct media_transport *transport = data;
struct bap_transport *bap = transport->data;
- dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &bap->sdu);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &bap->qos.sdu);
return TRUE;
}
struct media_transport *transport = data;
struct bap_transport *bap = transport->data;
- dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &bap->rtn);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &bap->qos.rtn);
return TRUE;
}
struct media_transport *transport = data;
struct bap_transport *bap = transport->data;
- dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &bap->latency);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16,
+ &bap->qos.latency);
return TRUE;
}
struct media_transport *transport = data;
struct bap_transport *bap = transport->data;
- dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &bap->delay);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &bap->qos.delay);
return TRUE;
}
DBG("stream %p linked %s", bap->stream, bap->linked ? "true" : "false");
}
+static void bap_update_qos(const struct media_transport *transport)
+{
+ struct bap_transport *bap = transport->data;
+ struct bt_bap_qos *qos;
+
+ qos = bt_bap_stream_get_qos(bap->stream);
+
+ if (!memcmp(qos, &bap->qos, sizeof(struct bt_bap_qos)))
+ return;
+
+ bap->qos = *qos;
+
+ 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,
+ "SDU");
+ g_dbus_emit_property_changed(btd_get_dbus_connection(),
+ transport->path, MEDIA_TRANSPORT_INTERFACE,
+ "Retransmissions");
+ g_dbus_emit_property_changed(btd_get_dbus_connection(),
+ transport->path, MEDIA_TRANSPORT_INTERFACE,
+ "Latency");
+ g_dbus_emit_property_changed(btd_get_dbus_connection(),
+ transport->path, MEDIA_TRANSPORT_INTERFACE,
+ "Delay");
+}
+
static guint resume_bap(struct media_transport *transport,
struct media_owner *owner)
{
if (owner && owner->pending)
return;
bap_update_links(transport);
+ bap_update_qos(transport);
transport_update_playing(transport, FALSE);
return;
case BT_BAP_STREAM_STATE_DISABLING:
bap = new0(struct bap_transport, 1);
bap->stream = stream;
- bap->interval = qos->interval;
- bap->framing = qos->framing;
- bap->phy = qos->phy;
- bap->rtn = qos->rtn;
- bap->latency = qos->latency;
- bap->delay = qos->delay;
+ bap->qos = *qos;
bap->state_id = bt_bap_state_register(bt_bap_stream_get_session(stream),
bap_state_changed,
bap_connecting,