diff --git a/android/bas.c b/android/bas.c
index 87402c1..e5e9837 100644
--- a/android/bas.c
+++ b/android/bas.c
free(req);
}
+static void discover_char(struct bt_bas *bas, GAttrib *attrib,
+ uint16_t start, uint16_t end,
+ bt_uuid_t *uuid, gatt_cb_t func,
+ gpointer user_data)
+{
+ struct gatt_request *req;
+ unsigned int id;
+
+ req = create_request(bas, user_data);
+ if (!req)
+ return;
+
+ id = gatt_discover_char(attrib, start, end, uuid, func, req);
+
+ if (set_and_store_gatt_req(bas, req, id))
+ return;
+
+ error("bas: Could not discover characteristic");
+ g_attrib_cancel(attrib, id);
+ free(req);
+}
+
+static void discover_desc(struct bt_bas *bas, GAttrib *attrib,
+ uint16_t start, uint16_t end, bt_uuid_t *uuid,
+ gatt_cb_t func, gpointer user_data)
+{
+ struct gatt_request *req;
+ unsigned int id;
+
+ req = create_request(bas, user_data);
+ if (!req)
+ return;
+
+ id = gatt_discover_desc(attrib, start, end, uuid, func, req);
+ if (set_and_store_gatt_req(bas, req, id))
+ return;
+
+ error("bas: Could not discover descriptor");
+ g_attrib_cancel(attrib, id);
+ free(req);
+}
+
static void value_cb(const guint8 *pdu, guint16 len, gpointer user_data)
{
DBG("Battery Level at %u", pdu[ATT_NOTIFICATION_HEADER_SIZE]);
static void discover_descriptor_cb(uint8_t status, GSList *descs,
void *user_data)
{
- struct bt_bas *bas = user_data;
+ struct gatt_request *req = user_data;
+ struct bt_bas *bas = req->user_data;
struct gatt_desc *desc;
+ destroy_gatt_req(req);
+
if (status != 0) {
error("Discover descriptors failed: %s", att_ecode2str(status));
return;
static void bas_discovered_cb(uint8_t status, GSList *chars, void *user_data)
{
- struct bt_bas *bas = user_data;
+ struct gatt_request *req = user_data;
+ struct bt_bas *bas = req->user_data;
struct gatt_char *chr;
uint16_t start, end;
bt_uuid_t uuid;
+ destroy_gatt_req(req);
+
if (status) {
error("Battery: %s", att_ecode2str(status));
return;
bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID);
- gatt_discover_desc(bas->attrib, start, end, &uuid,
+ discover_desc(bas, bas->attrib, start, end, &uuid,
discover_descriptor_cb, bas);
}
if (bas->handle > 0)
return true;
- gatt_discover_char(bas->attrib, bas->primary->range.start,
+ discover_char(bas, bas->attrib, bas->primary->range.start,
bas->primary->range.end, NULL,
bas_discovered_cb, bas);