diff --git a/android/gatt.c b/android/gatt.c
index a13f964..3fd88fa 100644
--- a/android/gatt.c
+++ b/android/gatt.c
gatt_db_service_set_active(gatt_db, srvc_handle, true);
}
-static void gatt_srvc_change_register_cb(uint16_t handle, uint16_t offset,
+static void gatt_srvc_change_write_cb(uint16_t handle, uint16_t offset,
const uint8_t *val, size_t len,
uint8_t att_opcode,
bdaddr_t *bdaddr,
bt_store_gatt_ccc(bdaddr, *val);
}
+static void gatt_srvc_change_read_cb(uint16_t handle, uint16_t offset,
+ uint8_t att_opcode, bdaddr_t *bdaddr,
+ void *user_data)
+{
+ struct pending_request *entry;
+ struct gatt_device *dev;
+ uint16_t ccc = 0;
+
+ dev = find_device_by_addr(bdaddr);
+ if (!dev) {
+ error("gatt: Could not find device ?!");
+ return;
+ }
+
+ entry = queue_find(dev->pending_requests, match_dev_request_by_handle,
+ UINT_TO_PTR(handle));
+ if (!entry)
+ return;
+
+ ccc = bt_get_gatt_ccc(&dev->bdaddr);
+ entry->state = REQUEST_DONE;
+
+ entry->value = (uint8_t *) new0(uint16_t, 1);
+ if (!entry->value) {
+ entry->error = ATT_ECODE_INSUFF_RESOURCES;
+
+ return;
+ }
+
+ entry->length = sizeof(uint16_t);
+ memcpy(entry->value, &ccc, sizeof(ccc));
+}
+
static void register_gatt_service(void)
{
bt_uuid_t uuid;
bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID);
gatt_db_add_char_descriptor(gatt_db, srvc_handle, &uuid,
- GATT_PERM_WRITE, NULL,
- gatt_srvc_change_register_cb, NULL);
+ GATT_PERM_READ | GATT_PERM_WRITE,
+ gatt_srvc_change_read_cb,
+ gatt_srvc_change_write_cb, NULL);
gatt_db_service_set_active(gatt_db, srvc_handle, true);
}