diff --git a/android/dis.c b/android/dis.c
index 3237c03..ce6e063 100644
--- a/android/dis.c
+++ b/android/dis.c
struct bt_dis {
int ref_count;
+ uint16_t handle;
uint8_t source;
uint16_t vendor;
uint16_t product;
uint16_t version;
GAttrib *attrib; /* GATT connection */
struct gatt_primary *primary; /* Primary details */
- GSList *chars; /* Characteristics */
bt_dis_notify notify;
void *notify_data;
};
if (dis->attrib)
g_attrib_unref(dis->attrib);
- g_slist_free_full(dis->chars, g_free);
-
g_free(dis->primary);
g_free(dis);
}
static void read_pnpid_cb(guint8 status, const guint8 *pdu, guint16 len,
gpointer user_data)
{
- struct characteristic *ch = user_data;
- struct bt_dis *dis = ch->d;
+ struct bt_dis *dis = user_data;
uint8_t value[PNP_ID_SIZE];
ssize_t vlen;
dis->version, dis->notify_data);
}
-static void process_deviceinfo_char(struct characteristic *ch)
-{
- if (g_strcmp0(ch->attr.uuid, PNPID_UUID) == 0)
- gatt_read_char(ch->d->attrib, ch->attr.value_handle,
- read_pnpid_cb, ch);
-}
-
static void configure_deviceinfo_cb(uint8_t status, GSList *characteristics,
void *user_data)
{
for (l = characteristics; l; l = l->next) {
struct gatt_char *c = l->data;
- struct characteristic *ch;
-
- ch = g_new0(struct characteristic, 1);
- ch->attr.handle = c->handle;
- ch->attr.properties = c->properties;
- ch->attr.value_handle = c->value_handle;
- memcpy(ch->attr.uuid, c->uuid, MAX_LEN_UUID_STR + 1);
- ch->d = d;
-
- d->chars = g_slist_append(d->chars, ch);
- process_deviceinfo_char(ch);
+ if (strcmp(c->uuid, PNPID_UUID) == 0) {
+ d->handle = c->value_handle;
+ gatt_read_char(d->attrib, d->handle, read_pnpid_cb, d);
+ break;
+ }
}
}
dis->attrib = g_attrib_ref(attrib);
- gatt_discover_char(dis->attrib, primary->range.start,
+ if (!dis->handle)
+ gatt_discover_char(dis->attrib, primary->range.start,
primary->range.end, NULL,
configure_deviceinfo_cb, dis);