static void cmd_char_desc(int argcp, char **argvp) { if (conn_state != STATE_CONNECTED) { resp_error(err_BAD_STATE); return; } if (argcp > 1) { start = strtohandle(argvp[1]); if (start < 0) { resp_error(err_BAD_PARAM);; return; } } else start = 0x0001; if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { resp_error(err_BAD_PARAM);; return; } } else end = 0xffff; gatt_discover_desc(attrib, start, end, NULL, char_desc_cb, NULL); }
static void cmd_char_desc(int argcp, char **argvp) { if (conn_state != STATE_CONNECTED) { failed("Disconnected\n"); return; } if (argcp > 1) { start = strtohandle(argvp[1]); if (start < 0) { error("Invalid start handle: %s\n", argvp[1]); return; } } else start = 0x0001; if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { error("Invalid end handle: %s\n", argvp[2]); return; } } else end = 0xffff; gatt_discover_desc(attrib, start, end, NULL, char_desc_cb, NULL); }
static void refresh_discovered_cb(uint8_t status, GSList *chars, void *user_data) { struct scan *scan = user_data; struct gatt_char *chr; uint16_t start, end; bt_uuid_t uuid; if (status) { error("Scan Refresh %s", att_ecode2str(status)); return; } if (!chars) { DBG("Scan Refresh not supported"); return; } chr = chars->data; DBG("Scan Refresh handle: 0x%04x", chr->value_handle); start = chr->value_handle + 1; end = scan->range.end; if (start > end) return; scan->refresh_handle = chr->value_handle; bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID); gatt_discover_desc(scan->attrib, start, end, &uuid, discover_descriptor_cb, user_data); }
static void discover_desc(struct csc *csc, struct gatt_char *c, struct gatt_char *c_next) { struct characteristic *ch; uint16_t start, end; bt_uuid_t uuid; start = c->value_handle + 1; if (c_next != NULL) { if (start == c_next->handle) return; end = c_next->handle - 1; } else if (c->value_handle != csc->svc_range->end) { end = csc->svc_range->end; } else { return; } ch = g_new0(struct characteristic, 1); ch->csc = csc; memcpy(ch->uuid, c->uuid, sizeof(c->uuid)); bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID); gatt_discover_desc(csc->attrib, start, end, &uuid, discover_desc_cb, ch); }
static void discover_descriptor(GAttrib *attrib, uint16_t start, uint16_t end, gpointer user_data) { if (start > end) return; gatt_discover_desc(attrib, start, end, NULL, discover_descriptor_cb, user_data); }
static void discover_desc(struct bt_scpp *scpp, GAttrib *attrib, uint16_t start, uint16_t end, bt_uuid_t *uuid, gatt_cb_t func, gpointer user_data) { unsigned int id; id = gatt_discover_desc(attrib, start, end, uuid, func, user_data); queue_push_head(scpp->gatt_op, UINT_TO_PTR(id)); }
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); id = gatt_discover_desc(attrib, start, end, uuid, func, req); set_and_store_gatt_req(bas, req, id); }
static void discover_external(GAttrib *attrib, uint16_t start, uint16_t end, gpointer user_data) { bt_uuid_t uuid; if (start > end) return; bt_uuid16_create(&uuid, GATT_EXTERNAL_REPORT_REFERENCE); gatt_discover_desc(attrib, start, end, NULL, discover_external_cb, user_data); }
static void discover_desc(struct bt_scpp *scpp, GAttrib *attrib, uint16_t start, uint16_t end, bt_uuid_t *uuid, gatt_cb_t func, gpointer user_data) { unsigned int id; id = gatt_discover_desc(attrib, start, end, uuid, func, user_data); if (queue_push_head(scpp->gatt_op, UINT_TO_PTR(id))) return; error("scpp: Could not discover descriptor"); g_attrib_cancel(attrib, id); }
static void discover_desc(struct bt_scpp *scpp, 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(scpp, user_data); if (!req) return; id = gatt_discover_desc(attrib, start, end, uuid, func, req); if (set_and_store_gatt_req(scpp, req, id)) return; error("scpp: Could not discover descriptor"); g_attrib_cancel(attrib, id); free(req); }
static void discover_measurement_ccc(struct heartrate *hr, struct gatt_char *c, struct gatt_char *c_next) { uint16_t start, end; bt_uuid_t uuid; start = c->value_handle + 1; if (c_next != NULL) { if (start == c_next->handle) return; end = c_next->handle - 1; } else if (c->value_handle != hr->svc_range->end) { end = hr->svc_range->end; } else { return; } bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID); gatt_discover_desc(hr->attrib, start, end, &uuid, discover_ccc_cb, hr); }