static void gatts_send_indication_p(int argc, const char *argv[]) { int server_if; int attr_handle; int conn_id; int confirm; char data[200]; int len = 0; RETURN_IF_NULL(if_gatt); VERIFY_SERVER_IF(2, server_if); VERIFY_HANDLE(3, attr_handle); VERIFY_CONN_ID(4, conn_id); /* confirm */ if (argc <= 5) { haltest_error("No transport specified\n"); return; } confirm = atoi(argv[5]); if (argc > 6) { len = strlen(argv[6]); scan_field(argv[6], len, (uint8_t *) data, sizeof(data)); } EXEC(if_gatt->server->send_indication, server_if, attr_handle, conn_id, len, confirm, data); }
static void get_characteristic_p(int argc, const char **argv) { int conn_id; btgatt_srvc_id_t srvc_id; RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); VERIFY_SRVC_ID(3, &srvc_id); EXEC(if_gatt->client->get_characteristic, conn_id, &srvc_id, NULL); }
static void disconnect_p(int argc, const char **argv) { int client_if; bt_bdaddr_t bd_addr; int conn_id; RETURN_IF_NULL(if_gatt); VERIFY_CLIENT_IF(2, client_if); VERIFY_ADDR_ARG(3, &bd_addr); VERIFY_CONN_ID(4, conn_id); EXEC(if_gatt->client->disconnect, client_if, &bd_addr, conn_id); }
static void gatts_disconnect_p(int argc, const char *argv[]) { int server_if; bt_bdaddr_t bd_addr; int conn_id; RETURN_IF_NULL(if_gatt); VERIFY_SERVER_IF(2, server_if); VERIFY_ADDR_ARG(3, &bd_addr); VERIFY_CONN_ID(4, conn_id); EXEC(if_gatt->server->disconnect, server_if, &bd_addr, conn_id); }
static void get_descriptor_p(int argc, const char **argv) { int conn_id; btgatt_srvc_id_t srvc_id; btgatt_gatt_id_t char_id; RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); VERIFY_SRVC_ID(3, &srvc_id); VERIFY_CHAR_ID(4, &char_id); EXEC(if_gatt->client->get_descriptor, conn_id, &srvc_id, &char_id, NULL); }
static void execute_write_p(int argc, const char **argv) { int conn_id; int execute; RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); /* execute */ if (argc <= 3) { haltest_error("No execute specified\n"); return; } execute = atoi(argv[3]); EXEC(if_gatt->client->execute_write, conn_id, execute); }
static void write_descriptor_p(int argc, const char **argv) { int conn_id; btgatt_srvc_id_t srvc_id; btgatt_gatt_id_t char_id; btgatt_descr_id_t descr_id; int write_type; int len; int auth_req = 0; uint8_t value[200] = {0}; RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); VERIFY_SRVC_ID(3, &srvc_id); VERIFY_CHAR_ID(4, &char_id); VERIFY_DESCR_ID(5, &descr_id); /* write type */ if (argc <= 6) { haltest_error("No write type specified\n"); return; } write_type = atoi(argv[6]); /* value */ if (argc <= 7) { haltest_error("No value specified\n"); return; } /* len in chars */ if (strncmp(argv[7], "0X", 2) && strncmp(argv[7], "0x", 2)) { haltest_error("Value must be hex string"); return; } len = fill_buffer(argv[7] + 2, value, sizeof(value)); /* auth_req */ if (argc > 8) auth_req = atoi(argv[8]); EXEC(if_gatt->client->write_descriptor, conn_id, &srvc_id, &char_id, &descr_id, write_type, len, auth_req, (char *) value); }
static void search_service_p(int argc, const char **argv) { int conn_id; RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); /* uuid */ if (argc <= 3) { EXEC(if_gatt->client->search_service, conn_id, NULL); } else { bt_uuid_t filter_uuid; gatt_str2bt_uuid_t(argv[3], -1, &filter_uuid); EXEC(if_gatt->client->search_service, conn_id, &filter_uuid); } }
static void gatts_send_response_p(int argc, const char *argv[]) { int conn_id; int trans_id; int status; btgatt_response_t data; memset(&data, 0, sizeof(data)); RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); VERIFY_TRANS_ID(3, trans_id); VERIFY_STATUS(4, status); VERIFY_HANDLE(5, data.attr_value.handle); VERIFY_OFFSET(6, data.attr_value.offset); data.attr_value.auth_req = 0; data.attr_value.len = 0; if (argc > 7) { const char *str; if (strncmp(argv[7], "0X", 2) && strncmp(argv[7], "0x", 2)) { haltest_error("Value must be hex string"); return; } str = argv[7] + 2; data.attr_value.len = fill_buffer(str, data.attr_value.value, sizeof(data.attr_value.value)); if (data.attr_value.len == 0) { haltest_error("Failed to parse response value"); return; } } haltest_info("conn_id %d, trans_id %d, status %d", conn_id, trans_id, status); EXEC(if_gatt->server->send_response, conn_id, trans_id, status, &data); }
static void write_descriptor_p(int argc, const char **argv) { int conn_id; btgatt_srvc_id_t srvc_id; btgatt_gatt_id_t char_id; btgatt_descr_id_t descr_id; int write_type; int len; int auth_req = 0; uint8_t value[200] = {0}; RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); VERIFY_SRVC_ID(3, &srvc_id); VERIFY_CHAR_ID(4, &char_id); VERIFY_DESCR_ID(5, &descr_id); /* write type */ if (argc <= 6) { haltest_error("No write type specified\n"); return; } write_type = atoi(argv[6]); /* value */ if (argc <= 7) { haltest_error("No value specified\n"); return; } /* len in chars */ len = strlen(argv[7]); scan_field(argv[7], len, value, sizeof(value)); /* len in bytes converted from ascii chars */ len = (len + 1) / 2; /* auth_req */ if (argc > 8) auth_req = atoi(argv[8]); EXEC(if_gatt->client->write_descriptor, conn_id, &srvc_id, &char_id, &descr_id, write_type, len, auth_req, (char *) value); }
static void read_characteristic_p(int argc, const char **argv) { int conn_id; btgatt_srvc_id_t srvc_id; btgatt_gatt_id_t char_id; int auth_req = 0; RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); VERIFY_SRVC_ID(3, &srvc_id); VERIFY_CHAR_ID(4, &char_id); /* auth_req */ if (argc > 5) auth_req = atoi(argv[5]); EXEC(if_gatt->client->read_characteristic, conn_id, &srvc_id, &char_id, auth_req); }
static void read_descriptor_p(int argc, const char **argv) { int conn_id; btgatt_srvc_id_t srvc_id; btgatt_gatt_id_t char_id; btgatt_descr_id_t descr_id; int auth_req = 0; RETURN_IF_NULL(if_gatt); VERIFY_CONN_ID(2, conn_id); VERIFY_SRVC_ID(3, &srvc_id); VERIFY_CHAR_ID(4, &char_id); VERIFY_DESCR_ID(5, &descr_id); /* auth_req */ if (argc > 6) auth_req = atoi(argv[6]); EXEC(if_gatt->client->read_descriptor, conn_id, &srvc_id, &char_id, &descr_id, auth_req); }