static void cmd_included(int argcp, char **argvp) { int start = 0x0001; int end = 0xffff; 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; } end = start; } if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { resp_error(err_BAD_PARAM); return; } } gatt_find_included(attrib, start, end, included_cb, NULL); }
static void cmd_included(int argcp, char **argvp) { int start = 0x0001; int end = 0xffff; 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; } end = start; } if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { error("Invalid end handle: %s\n", argvp[2]); return; } } gatt_find_included(attrib, start, end, included_cb, NULL); }
static void primary_cb(uint8_t status, GSList *services, void *user_data) { struct bt_hog *hog = user_data; struct gatt_primary *primary; GSList *l; DBG(""); if (status) { const char *str = att_ecode2str(status); DBG("Discover primary failed: %s", str); return; } if (!services) { DBG("No primary service found"); return; } for (l = services; l; l = l->next) { primary = l->data; if (strcmp(primary->uuid, SCAN_PARAMETERS_UUID) == 0) { hog_attach_scpp(hog, primary); continue; } if (strcmp(primary->uuid, DEVICE_INFORMATION_UUID) == 0) { hog_attach_dis(hog, primary); continue; } if (strcmp(primary->uuid, BATTERY_UUID) == 0) { hog_attach_bas(hog, primary); continue; } if (strcmp(primary->uuid, HOG_UUID) == 0) hog_attach_hog(hog, primary); } if (hog->primary) return; for (l = services; l; l = l->next) { primary = l->data; gatt_find_included(hog->attrib, primary->range.start, primary->range.end, find_included_cb, hog); } }
static void find_included_cb(uint8_t status, GSList *services, void *user_data) { struct bt_hog *hog = user_data; struct gatt_included *include; GSList *l; DBG(""); if (hog->primary) return; if (status) { const char *str = att_ecode2str(status); DBG("Find included failed: %s", str); return; } if (!services) { DBG("No included service found"); return; } for (l = services; l; l = l->next) { include = l->data; if (strcmp(include->uuid, HOG_UUID) == 0) break; } if (!l) { for (l = services; l; l = l->next) { include = l->data; gatt_find_included(hog->attrib, include->range.start, include->range.end, find_included_cb, hog); } return; } hog->primary = g_new0(struct gatt_primary, 1); memcpy(hog->primary->uuid, include->uuid, sizeof(include->uuid)); memcpy(&hog->primary->range, &include->range, sizeof(include->range)); gatt_discover_char(hog->attrib, hog->primary->range.start, hog->primary->range.end, NULL, char_discovered_cb, hog); }