[PATCH BlueZ 4/5] gatt: Emit PropertiesChanged("MTU") when MTU is exchanged
From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Date: 2021-09-28 23:55:11
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Luiz Augusto von Dentz <redacted> This notifies client when the ATT MTU changes. --- src/gatt-client.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
diff --git a/src/gatt-client.c b/src/gatt-client.c
index 5b10cbfa0..de18bea97 100644
--- a/src/gatt-client.c
+++ b/src/gatt-client.c@@ -104,6 +104,7 @@ struct characteristic { char *path; unsigned int ready_id; + unsigned int exchange_id; struct sock_io *write_io; struct sock_io *notify_io;
@@ -1707,6 +1708,8 @@ static void remove_client(void *data) static void characteristic_free(void *data) { struct characteristic *chrc = data; + struct bt_gatt_client *gatt = chrc->service->client->gatt; + struct bt_att *att; /* List should be empty here */ queue_destroy(chrc->descs, NULL);
@@ -1723,15 +1726,29 @@ static void characteristic_free(void *data) queue_destroy(chrc->notify_clients, remove_client); + att = bt_gatt_client_get_att(gatt); + if (att) + bt_att_unregister_exchange(att, chrc->exchange_id); + g_free(chrc->path); free(chrc); } +static void att_exchange(uint16_t mtu, void *user_data) +{ + struct characteristic *chrc = user_data; + + g_dbus_emit_property_changed(btd_get_dbus_connection(), chrc->path, + GATT_CHARACTERISTIC_IFACE, "MTU"); +} + static struct characteristic *characteristic_create( struct gatt_db_attribute *attr, struct service *service) { struct characteristic *chrc; + struct bt_gatt_client *gatt = service->client->gatt; + struct bt_att *att; bt_uuid_t uuid; chrc = new0(struct characteristic, 1);
@@ -1770,6 +1787,11 @@ static struct characteristic *characteristic_create( return NULL; } + att = bt_gatt_client_get_att(gatt); + if (att) + chrc->exchange_id = bt_att_register_exchange(att, att_exchange, + chrc, NULL); + DBG("Exported GATT characteristic: %s", chrc->path); return chrc;
--
2.31.1