diff --git a/src/service.c b/src/service.c
index 7a480d6..afe592b 100644
--- a/src/service.c
+++ b/src/service.c
void *user_data;
btd_service_state_t state;
int err;
+ uint16_t start_handle;
+ uint16_t end_handle;
};
struct service_state_callback {
return service;
}
+struct btd_service *service_create_gatt(struct btd_device *device,
+ struct btd_profile *profile,
+ uint16_t start_handle,
+ uint16_t end_handle)
+{
+ struct btd_service *service;
+
+ if (!start_handle || !end_handle || start_handle > end_handle)
+ return NULL;
+
+ service = service_create(device, profile);
+ if (!service)
+ return NULL;
+
+ service->start_handle = start_handle;
+ service->end_handle = end_handle;
+
+ return service;
+}
+
int service_probe(struct btd_service *service)
{
char addr[18];
return service->err;
}
+bool btd_service_get_gatt_handles(const struct btd_service *service,
+ uint16_t *start_handle,
+ uint16_t *end_handle)
+{
+ if (!service || !service->start_handle || !service->end_handle)
+ return false;
+
+ if (start_handle)
+ *start_handle = service->start_handle;
+
+ if (end_handle)
+ *end_handle = service->end_handle;
+
+ return true;
+}
+
unsigned int btd_service_add_state_cb(btd_service_state_cb cb, void *user_data)
{
struct service_state_callback *state_cb;
diff --git a/src/service.h b/src/service.h
index 5230115..857e688 100644
--- a/src/service.h
+++ b/src/service.h
/* Service management functions used by the core */
struct btd_service *service_create(struct btd_device *device,
struct btd_profile *profile);
+struct btd_service *service_create_gatt(struct btd_device *device,
+ struct btd_profile *profile,
+ uint16_t start_handle,
+ uint16_t end_handle);
int service_probe(struct btd_service *service);
void service_remove(struct btd_service *service);
struct btd_profile *btd_service_get_profile(const struct btd_service *service);
btd_service_state_t btd_service_get_state(const struct btd_service *service);
int btd_service_get_error(const struct btd_service *service);
+bool btd_service_get_gatt_handles(const struct btd_service *service,
+ uint16_t *start_handle,
+ uint16_t *end_handle);
unsigned int btd_service_add_state_cb(btd_service_state_cb cb,
void *user_data);