diff options
author | Arman Uguray <armansito@chromium.org> | 2014-09-23 13:47:16 -0700 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2014-09-24 10:55:26 +0300 |
commit | a7d53b96e2fe6a5240ce94948e9d481a2b9bed9c (patch) | |
tree | 34e73d8f92b0a3ab098ce1629b3f547ddc563f4b /tools/btgatt-client.c | |
parent | 01a0c62890b8475ee7af228bca019920f68da6e8 (diff) | |
download | bluez-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.c | 34 |
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" |