From bde3c34fd7ef72ebdacd4b5489fd72cf493a4084 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 16 Oct 2025 15:22:53 -0400 Subject: [PATCH] gatt-database: Add btd_gatt_database_get and btd_gatt_database_get_adapter This adds btd_gatt_database_get and btd_gatt_database_get_adapter that makes it possible to resolve the btd_gatt_database and btd_adapter respectively when only the gatt_db is available. --- src/gatt-database.c | 35 +++++++++++++++++++++++++++++++++++ src/gatt-database.h | 4 ++++ 2 files changed, 39 insertions(+) diff --git a/src/gatt-database.c b/src/gatt-database.c index eea3f600a..ff5fa3bcc 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c @@ -209,6 +209,8 @@ struct device_info { uint8_t bdaddr_type; }; +static struct queue *dbs = NULL; + static void ccc_cb_free(void *data) { struct ccc_cb_data *ccc_cb = data; @@ -4123,6 +4125,11 @@ bredr: if (!database->db_id) goto fail; + if (!dbs) + dbs = queue_new(); + + queue_push_tail(dbs, database); + return database; fail: @@ -4143,6 +4150,34 @@ void btd_gatt_database_destroy(struct btd_gatt_database *database) gatt_database_free(database); } +static bool match_db(const void *data, const void *user_data) +{ + const struct btd_gatt_database *database = data; + const struct gatt_db *db = user_data; + + return database->db == db; +} + +struct btd_gatt_database *btd_gatt_database_get(struct gatt_db *db) +{ + struct btd_gatt_database *database; + + database = queue_find(dbs, match_db, db); + if (!database) + return NULL; + + return database; +} + +struct btd_adapter * +btd_gatt_database_get_adapter(struct btd_gatt_database *database) +{ + if (!database) + return NULL; + + return database->adapter; +} + struct gatt_db *btd_gatt_database_get_db(struct btd_gatt_database *database) { if (!database) diff --git a/src/gatt-database.h b/src/gatt-database.h index 30ae68e7e..998e3c452 100644 --- a/src/gatt-database.h +++ b/src/gatt-database.h @@ -13,7 +13,11 @@ struct btd_gatt_database; struct btd_gatt_database *btd_gatt_database_new(struct btd_adapter *adapter); void btd_gatt_database_destroy(struct btd_gatt_database *database); +struct btd_gatt_database *btd_gatt_database_get(struct gatt_db *db); struct gatt_db *btd_gatt_database_get_db(struct btd_gatt_database *database); +struct btd_adapter * +btd_gatt_database_get_adapter(struct btd_gatt_database *database); + void btd_gatt_database_att_disconnected(struct btd_gatt_database *database, struct btd_device *device); void btd_gatt_database_server_connected(struct btd_gatt_database *database, -- 2.47.3