diff --git a/android/scpp.c b/android/scpp.c
index 751d3f2..81d698b 100644
--- a/android/scpp.c
+++ b/android/scpp.c
refresh_value_cb, scan, NULL);
}
+static void write_ccc(GAttrib *attrib, uint16_t handle, void *user_data)
+{
+ uint8_t value[2];
+
+ put_le16(GATT_CLIENT_CHARAC_CFG_NOTIF_BIT, value);
+
+ gatt_write_char(attrib, handle, value, sizeof(value), ccc_written_cb,
+ user_data);
+}
+
static void discover_descriptor_cb(uint8_t status, GSList *descs,
void *user_data)
{
struct bt_scpp *scan = user_data;
struct gatt_desc *desc;
- uint8_t value[2];
+
if (status != 0) {
error("Discover descriptors failed: %s", att_ecode2str(status));
/* There will be only one descriptor on list and it will be CCC */
desc = descs->data;
- put_le16(GATT_CLIENT_CHARAC_CFG_NOTIF_BIT, value);
- gatt_write_char(scan->attrib, desc->handle, value, sizeof(value),
- ccc_written_cb, user_data);
+ write_ccc(scan->attrib, desc->handle, scan);
}
static void refresh_discovered_cb(uint8_t status, GSList *chars,
scan->attrib = g_attrib_ref(attrib);
- if (scan->iwhandle) {
+ if (scan->iwhandle)
write_scan_params(scan->attrib, scan->iwhandle, scan->interval,
scan->window);
- return true;
+ else {
+ bt_uuid16_create(&iwin_uuid, SCAN_INTERVAL_WIN_UUID);
+ gatt_discover_char(scan->attrib, scan->primary->range.start,
+ scan->primary->range.end, &iwin_uuid,
+ iwin_discovered_cb, scan);
}
- bt_uuid16_create(&iwin_uuid, SCAN_INTERVAL_WIN_UUID);
- bt_uuid16_create(&refresh_uuid, SCAN_REFRESH_UUID);
-
- gatt_discover_char(scan->attrib, scan->primary->range.start,
- scan->primary->range.end, &iwin_uuid,
- iwin_discovered_cb, scan);
-
- gatt_discover_char(scan->attrib, scan->primary->range.start,
- scan->primary->range.end, &refresh_uuid,
- refresh_discovered_cb, scan);
+ if (scan->refresh_handle)
+ scan->refresh_cb_id = g_attrib_register(scan->attrib,
+ ATT_OP_HANDLE_NOTIFY, scan->refresh_handle,
+ refresh_value_cb, scan, NULL);
+ else {
+ bt_uuid16_create(&refresh_uuid, SCAN_REFRESH_UUID);
+ gatt_discover_char(scan->attrib, scan->primary->range.start,
+ scan->primary->range.end, &refresh_uuid,
+ refresh_discovered_cb, scan);
+ }
return true;
}