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_char_desc(attrib, start, end, char_desc_cb, NULL); }
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 cmd_char_desc(int argcp, char **argvp) { int start = 0x0001; int end = 0xffff; if (conn_state != STATE_CONNECTED) { printf("Command failed: disconnected\n"); return; } if (argcp > 1) { start = strtohandle(argvp[1]); if (start < 0) { printf("Invalid start handle: %s\n", argvp[1]); return; } } if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { printf("Invalid end handle: %s\n", argvp[2]); return; } } gatt_find_info(g_connection->attrib, start, end, char_desc_cb, NULL); }
static void cmd_char_desc(int argcp, char **argvp) { int start = 0x0001; int end = 0xffff; if (conn_state != STATE_CONNECTED) { printf("Command failed: disconnected\n"); goto done; } if (argcp > 1) { start = strtohandle(argvp[1]); if (start < 0) { printf("Invalid start handle: %s\n", argvp[1]); goto done; } } if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { printf("Invalid end handle: %s\n", argvp[2]); goto done; } } gatt_find_info(attrib, start, end, char_desc_cb, NULL); return; done: printf("\r%s", get_prompt()); fflush(stdout); }
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 cmd_read_uuid(int argcp, char **argvp) { struct characteristic_data *char_data; int start = 0x0001; int end = 0xffff; bt_uuid_t uuid; if (conn_state != STATE_CONNECTED) { printf("Command failed: disconnected\n"); goto done; } if (argcp < 2) { printf("Missing argument: UUID\n"); goto done; } if (bt_string_to_uuid(&uuid, argvp[1]) < 0) { printf("Invalid UUID\n"); goto done; } if (argcp > 2) { start = strtohandle(argvp[2]); if (start < 0) { printf("Invalid start handle: %s\n", argvp[1]); goto done; } } if (argcp > 3) { end = strtohandle(argvp[3]); if (end < 0) { printf("Invalid end handle: %s\n", argvp[2]); goto done; } } char_data = g_new(struct characteristic_data, 1); char_data->orig_start = start; char_data->start = start; char_data->end = end; char_data->uuid = uuid; gatt_read_char_by_uuid(attrib, start, end, &char_data->uuid, char_read_by_uuid_cb, char_data); done: printf("\r%s", get_prompt()); fflush(stdout); }
static void cmd_read_hnd(int argcp, char **argvp) { int handle; int offset = 0; if (conn_state != STATE_CONNECTED) { printf("Command failed: disconnected\n"); return; } if (argcp < 2) { printf("Missing argument: handle\n"); return; } handle = strtohandle(argvp[1]); if (handle < 0) { printf("Invalid handle: %s\n", argvp[1]); return; } if (argcp > 2) { char *e; errno = 0; offset = strtol(argvp[2], &e, 0); if (errno != 0 || *e != '\0') { printf("Invalid offset: %s\n", argvp[2]); return; } } gatt_read_char(g_connection->attrib, handle, offset, char_read_cb, g_connection->attrib); }
static void cmd_read_hnd(int argcp, char **argvp) { int handle; if (conn_state != STATE_CONNECTED) { resp_error(err_BAD_STATE); return; } if (argcp < 2) { resp_error(err_BAD_PARAM);; return; } handle = strtohandle(argvp[1]); if (handle < 0) { resp_error(err_BAD_PARAM);; return; } if (argcp == 2) { gatt_read_char(attrib, handle, char_read_cb, attrib); } else { char *end; int offset = strtol(argvp[2], &end, 0); if (*end != '\0') { resp_error(err_BAD_PARAM);; return; } gatt_read_char_single(attrib, handle, offset, char_read_single_cb, attrib); } }
static void cmd_char(int argcp, char **argvp) { int start = 0x0001; int end = 0xffff; if (conn_state != STATE_CONNECTED) { printf("Command failed: disconnected\n"); goto done; } if (argcp > 1) { start = strtohandle(argvp[1]); if (start < 0) { printf("Invalid start handle: %s\n", argvp[1]); goto done; } } if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { printf("Invalid end handle: %s\n", argvp[2]); goto done; } } if (argcp > 3) { bt_uuid_t uuid; if (bt_string_to_uuid(&uuid, argvp[3]) < 0) { printf("Invalid UUID\n"); goto done; } g_attrib_ref(attrib); gatt_discover_char(attrib, start, end, &uuid, char_cb, NULL); return; } g_attrib_ref(attrib); gatt_discover_char(attrib, start, end, NULL, char_cb, NULL); return; done: printf("\r%s", get_prompt()); fflush(stdout); }
static void cmd_read_uuid(int argcp, char **argvp) { struct characteristic_data *char_data; int start = 0x0001; int end = 0xffff; bt_uuid_t uuid; if (conn_state != STATE_CONNECTED) { resp_error(err_BAD_STATE); return; } if (argcp < 2 || bt_string_to_uuid(&uuid, argvp[1]) < 0) { resp_error(err_BAD_PARAM); return; } if (argcp > 2) { start = strtohandle(argvp[2]); if (start < 0) { resp_error(err_BAD_PARAM); return; } } if (argcp > 3) { end = strtohandle(argvp[3]); if (end < 0) { resp_error(err_BAD_PARAM); return; } } char_data = g_new(struct characteristic_data, 1); char_data->orig_start = start; char_data->start = start; char_data->end = end; char_data->uuid = uuid; gatt_read_char_by_uuid(attrib, start, end, &char_data->uuid, char_read_by_uuid_cb, char_data); }
static void cmd_read_uuid(int argcp, char **argvp) { int start = 0x0001; int end = 0xffff; bt_uuid_t uuid; if (conn_state != STATE_CONNECTED) { failed("Disconnected\n"); return; } if (argcp < 2) { error("Missing argument: UUID\n"); return; } if (bt_string_to_uuid(&uuid, argvp[1]) < 0) { error("Invalid UUID\n"); return; } if (argcp > 2) { start = strtohandle(argvp[2]); if (start < 0) { error("Invalid start handle: %s\n", argvp[1]); return; } } if (argcp > 3) { end = strtohandle(argvp[3]); if (end < 0) { error("Invalid end handle: %s\n", argvp[2]); return; } } gatt_read_char_by_uuid(attrib, start, end, &uuid, char_read_by_uuid_cb, NULL); }
static void cmd_char(int argcp, char **argvp) { int start = 0x0001; int end = 0xffff; if (conn_state != STATE_CONNECTED) { printf("Command failed: disconnected\n"); return; } if (argcp > 1) { start = strtohandle(argvp[1]); if (start < 0) { printf("Invalid start handle: %s\n", argvp[1]); return; } } if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { printf("Invalid end handle: %s\n", argvp[2]); return; } } if (argcp > 3) { bt_uuid_t uuid; if (bt_string_to_uuid(&uuid, argvp[3]) < 0) { printf("Invalid UUID\n"); return; } gatt_discover_char(g_connection->attrib, start, end, &uuid, char_cb, NULL); return; } gatt_discover_char(g_connection->attrib, start, end, NULL, char_cb, NULL); }
static void cmd_char(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; } } if (argcp > 2) { end = strtohandle(argvp[2]); if (end < 0) { resp_error(err_BAD_PARAM); return; } } if (argcp > 3) { bt_uuid_t uuid; if (bt_string_to_uuid(&uuid, argvp[3]) < 0) { resp_error(err_BAD_PARAM); return; } gatt_discover_char(attrib, start, end, &uuid, char_cb, NULL); return; } gatt_discover_char(attrib, start, end, NULL, char_cb, NULL); }
static int cmd_read_char(gpointer user_data, const char *handle) { GAttrib *attrib = user_data; int hdl, ret; if (get_state() != STATE_CONNECTED) { printf("Device is not connected\n"); return -1; } hdl = strtohandle(handle); if (hdl <= 0) { printf("A valid handle is needed\n"); return -2; } gatt_read_char(attrib, hdl, char_read_cb, attrib); g_main_loop_run(event_loop); return 0; }
static void cmd_char_write_common(int argcp, char **argvp, int with_response) { uint8_t *value; size_t plen; int handle; if (conn_state != STATE_CONNECTED) { resp_error(err_BAD_STATE); return; } if (argcp < 3) { resp_error(err_BAD_PARAM); return; } handle = strtohandle(argvp[1]); if (handle <= 0) { resp_error(err_BAD_PARAM); return; } plen = gatt_attr_data_from_string(argvp[2], &value); if (plen == 0) { resp_error(err_BAD_PARAM); return; } if (with_response) gatt_write_char(attrib, handle, value, plen, char_write_req_cb, NULL); else { gatt_write_char(attrib, handle, value, plen, NULL, NULL); resp_begin(rsp_WRITE); resp_end(); } g_free(value); }
static void cmd_read_hnd(int argcp, char **argvp) { int handle; if (conn_state != STATE_CONNECTED) { resp_error(err_BAD_STATE); return; } if (argcp < 2) { resp_error(err_BAD_PARAM); return; } handle = strtohandle(argvp[1]); if (handle < 0) { resp_error(err_BAD_PARAM); return; } gatt_read_char(attrib, handle, char_read_cb, attrib); }
static void cmd_read_hnd(int argcp, char **argvp) { int handle; if (conn_state != STATE_CONNECTED) { failed("Disconnected\n"); return; } if (argcp < 2) { error("Missing argument: handle\n"); return; } handle = strtohandle(argvp[1]); if (handle < 0) { error("Invalid handle: %s\n", argvp[1]); return; } gatt_read_char(attrib, handle, char_read_cb, attrib); }
static int cmd_char_write(gpointer user_data, const char *handle, const char* data, int type) { GAttrib *attrib = user_data; uint8_t *value; size_t len; int hdl, ret; /* we need to enable notifications very early, as well change mode * when we receive an exception to quit */ if ((get_state() != STATE_DATARCVD) && (get_state() != STATE_CONNECTED)) { printf("Device is not connected\n"); return -1; } hdl = strtohandle(handle); if (hdl <= 0) { printf("A valid handle is needed\n"); return -2; } len = gatt_attr_data_from_string(data, &value); if (len == 0) { printf("Invalid value(s) passed\n"); return -3; } if (type == WRITE_REQUEST) { ret = gatt_write_char(attrib, hdl, value, len, NULL, NULL); } else if (type == WRITE_COMMAND) { ret = gatt_write_cmd(attrib, hdl, value, len, NULL, NULL); } g_free(value); return 0; }
static void cmd_char_write(int argcp, char **argvp) { uint8_t *value; size_t plen; int handle; if (conn_state != STATE_CONNECTED) { failed("Disconnected\n"); return; } if (argcp < 3) { rl_printf("Usage: %s <handle> <new value>\n", argvp[0]); return; } handle = strtohandle(argvp[1]); if (handle <= 0) { error("A valid handle is required\n"); return; } plen = gatt_attr_data_from_string(argvp[2], &value); if (plen == 0) { error("Invalid value\n"); return; } if (g_strcmp0("char-write-req", argvp[0]) == 0) gatt_write_char(attrib, handle, value, plen, char_write_req_cb, NULL); else gatt_write_cmd(attrib, handle, value, plen, NULL, NULL); g_free(value); }