summaryrefslogtreecommitdiff
path: root/tools/btgatt-client.c
diff options
context:
space:
mode:
authorArman Uguray <armansito@chromium.org>2014-09-23 13:47:16 -0700
committerJohan Hedberg <johan.hedberg@intel.com>2014-09-24 10:55:26 +0300
commita7d53b96e2fe6a5240ce94948e9d481a2b9bed9c (patch)
tree34e73d8f92b0a3ab098ce1629b3f547ddc563f4b /tools/btgatt-client.c
parent01a0c62890b8475ee7af228bca019920f68da6e8 (diff)
downloadbluez-a7d53b96e2fe6a5240ce94948e9d481a2b9bed9c.tar.gz
tools/btgatt-client: Set service changed handler.
btgatt-client now sets a service changed handler by calling bt_gatt_client_set_service_changed.
Diffstat (limited to 'tools/btgatt-client.c')
-rw-r--r--tools/btgatt-client.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/tools/btgatt-client.c b/tools/btgatt-client.c
index 41b85ad33..d900e08fd 100644
--- a/tools/btgatt-client.c
+++ b/tools/btgatt-client.c
@@ -93,6 +93,8 @@ static void gatt_debug_cb(const char *str, void *user_data)
}
static void ready_cb(bool success, uint8_t att_ecode, void *user_data);
+static void service_changed_cb(uint16_t start_handle, uint16_t end_handle,
+ void *user_data);
static struct client *client_create(int fd, uint16_t mtu)
{
@@ -143,6 +145,8 @@ static struct client *client_create(int fd, uint16_t mtu)
}
bt_gatt_client_set_ready_handler(cli->gatt, ready_cb, cli, NULL);
+ bt_gatt_client_set_service_changed(cli->gatt, service_changed_cb, cli,
+ NULL);
/* bt_gatt_client already holds a reference */
bt_att_unref(att);
@@ -269,6 +273,36 @@ static void ready_cb(bool success, uint8_t att_ecode, void *user_data)
print_prompt();
}
+static void service_changed_cb(uint16_t start_handle, uint16_t end_handle,
+ void *user_data)
+{
+ struct client *cli = user_data;
+ struct bt_gatt_service_iter iter;
+ const bt_gatt_service_t *service;
+
+ if (!bt_gatt_service_iter_init(&iter, cli->gatt)) {
+ PRLOG("Failed to initialize service iterator\n");
+ return;
+ }
+
+ printf("\nService Changed handled - start: 0x%04x end: 0x%04x\n",
+ start_handle, end_handle);
+
+ if (!bt_gatt_service_iter_next_by_handle(&iter, start_handle, &service))
+ return;
+
+ print_service(service);
+
+ while (bt_gatt_service_iter_next(&iter, &service)) {
+ if (service->start_handle >= end_handle)
+ break;
+
+ print_service(service);
+ }
+
+ print_prompt();
+}
+
static void services_usage(void)
{
printf("Usage: services [options]\nOptions:\n"