From ba07a8bfc07a744081b3d7df51803cad9062aa8c Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 8 May 2017 13:46:30 +0300 Subject: [PATCH] shared/gatt-db: Add gatt_db_get_service This adds gatt_db_get_service which can be used to lookup service by handle. --- src/shared/gatt-db.c | 21 ++++++++++++++++++--- src/shared/gatt-db.h | 3 +++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c index 8ef6f3bca..efd61f955 100644 --- a/src/shared/gatt-db.c +++ b/src/shared/gatt-db.c @@ -1316,20 +1316,35 @@ static bool find_service_for_handle(const void *data, const void *user_data) return (start <= handle) && (handle <= end); } -struct gatt_db_attribute *gatt_db_get_attribute(struct gatt_db *db, +struct gatt_db_attribute *gatt_db_get_service(struct gatt_db *db, uint16_t handle) { struct gatt_db_service *service; - int i; if (!db || !handle) return NULL; service = queue_find(db->services, find_service_for_handle, - UINT_TO_PTR(handle)); + UINT_TO_PTR(handle)); if (!service) return NULL; + return service->attributes[0]; +} + +struct gatt_db_attribute *gatt_db_get_attribute(struct gatt_db *db, + uint16_t handle) +{ + struct gatt_db_attribute *attrib; + struct gatt_db_service *service; + int i; + + attrib = gatt_db_get_service(db, handle); + if (!attrib) + return NULL; + + service = attrib->service; + for (i = 0; i < service->num_handles; i++) { if (!service->attributes[i]) continue; diff --git a/src/shared/gatt-db.h b/src/shared/gatt-db.h index 134ec632b..f8277fd70 100644 --- a/src/shared/gatt-db.h +++ b/src/shared/gatt-db.h @@ -170,6 +170,9 @@ unsigned int gatt_db_register(struct gatt_db *db, gatt_db_destroy_func_t destroy); bool gatt_db_unregister(struct gatt_db *db, unsigned int id); +struct gatt_db_attribute *gatt_db_get_service(struct gatt_db *db, + uint16_t handle); + struct gatt_db_attribute *gatt_db_get_attribute(struct gatt_db *db, uint16_t handle); -- 2.47.3