diff --git a/tools/btmgmt.c b/tools/btmgmt.c
index bcfcb5b..1bc97aa 100644
--- a/tools/btmgmt.c
+++ b/tools/btmgmt.c
noninteractive_quit(EXIT_SUCCESS);
}
+static void cmd_usage(char *cmd);
+
static void cmd_version(struct mgmt *mgmt, uint16_t index, int argc,
char **argv)
{
struct mgmt_cp_set_discoverable cp;
if (argc < 2) {
- print("Usage: %s <yes/no/limited> [timeout]", argv[0]);
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
uint8_t class[2];
if (argc < 3) {
- print("Usage: %s <major> <minor>", argv[0]);
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void disconnect_usage(void)
-{
- print("Usage: disconnect [-t type] <remote address>");
-}
-
static struct option disconnect_options[] = {
{ "help", 0, 0, 'h' },
{ "type", 1, 0, 't' },
struct mgmt_cp_disconnect cp;
uint8_t type = BDADDR_BREDR;
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+t:h", disconnect_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- disconnect_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- disconnect_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- disconnect_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
discovery = true;
}
-static void find_service_usage(void)
-{
- print("Usage: find-service [-u UUID] [-r RSSI_Threshold] [-l|-b]");
-}
-
static struct option find_service_options[] = {
{ "help", no_argument, 0, 'h' },
{ "le-only", no_argument, 0, 'l' },
int8_t rssi;
uint16_t count;
int opt;
+ char *cmd = argv[0];
if (index == MGMT_INDEX_NONE)
index = 0;
count = 0;
if (argc == 1) {
- find_service_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
rssi = atoi(optarg);
break;
case 'h':
- find_service_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- find_service_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc > 0) {
- find_service_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
discovery = true;
}
-static void find_usage(void)
-{
- print("Usage: find [-l|-b] [-L]");
-}
-
static struct option find_options[] = {
{ "help", 0, 0, 'h' },
{ "le-only", 1, 0, 'l' },
uint8_t op = MGMT_OP_START_DISCOVERY;
uint8_t type = SCAN_TYPE_DUAL;
int opt;
+ char *cmd = argv[0];
if (index == MGMT_INDEX_NONE)
index = 0;
op = MGMT_OP_START_LIMITED_DISCOVERY;
break;
case 'h':
- find_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- find_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void stop_find_usage(void)
-{
- print("Usage: stop-find [-l|-b]");
-}
-
static struct option stop_find_options[] = {
{ "help", 0, 0, 'h' },
{ "le-only", 1, 0, 'l' },
struct mgmt_cp_stop_discovery cp;
uint8_t type = SCAN_TYPE_DUAL;
int opt;
+ char *cmd = argv[0];
if (index == MGMT_INDEX_NONE)
index = 0;
break;
case 'h':
default:
- stop_find_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
}
struct mgmt_cp_set_local_name cp;
if (argc < 2) {
- print("Usage: %s <name> [shortname]", argv[0]);
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void pair_usage(void)
-{
- print("Usage: pair [-c cap] [-t type] <remote address>");
-}
-
static struct option pair_options[] = {
{ "help", 0, 0, 'h' },
{ "capability", 1, 0, 'c' },
uint8_t type = BDADDR_BREDR;
char addr[18];
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+c:t:h", pair_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- pair_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- pair_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- pair_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void cancel_pair_usage(void)
-{
- print("Usage: cancelpair [-t type] <remote address>");
-}
-
static struct option cancel_pair_options[] = {
{ "help", 0, 0, 'h' },
{ "type", 1, 0, 't' },
struct mgmt_addr_info cp;
uint8_t type = BDADDR_BREDR;
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+t:h", cancel_pair_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- cancel_pair_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- cancel_pair_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- cancel_pair_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void unpair_usage(void)
-{
- print("Usage: unpair [-t type] <remote address>");
-}
-
static struct option unpair_options[] = {
{ "help", 0, 0, 'h' },
{ "type", 1, 0, 't' },
struct mgmt_cp_unpair_device cp;
uint8_t type = BDADDR_BREDR;
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+t:h", unpair_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- unpair_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- unpair_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- unpair_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void irks_usage(void)
-{
- print("Usage: irks [--local <index>] [--file <file path>]");
-}
-
static struct option irks_options[] = {
{ "help", 0, 0, 'h' },
{ "local", 1, 0, 'l' },
uint16_t count, local_index;
char path[PATH_MAX];
int opt;
+ char *cmd = argv[0];
if (index == MGMT_INDEX_NONE)
index = 0;
count++;
break;
case 'h':
- irks_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- irks_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc > 0) {
- irks_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void block_usage(void)
-{
- print("Usage: block [-t type] <remote address>");
-}
-
static struct option block_options[] = {
{ "help", 0, 0, 'h' },
{ "type", 1, 0, 't' },
struct mgmt_cp_block_device cp;
uint8_t type = BDADDR_BREDR;
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+t:h", block_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- block_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- block_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- block_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
}
}
-static void unblock_usage(void)
-{
- print("Usage: unblock [-t type] <remote address>");
-}
-
static void cmd_unblock(struct mgmt *mgmt, uint16_t index, int argc,
char **argv)
{
struct mgmt_cp_unblock_device cp;
uint8_t type = BDADDR_BREDR;
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+t:h", block_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- unblock_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- unblock_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- unblock_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
print("Remote OOB data added for %s (%u)", addr, rp->type);
}
-static void remote_oob_usage(void)
-{
- print("Usage: remote-oob [-t <addr_type>] "
- "[-r <rand192>] [-h <hash192>] [-R <rand256>] [-H <hash256>] "
- "<addr>");
-}
-
static struct option remote_oob_opt[] = {
{ "help", 0, 0, '?' },
{ "type", 1, 0, 't' },
{
struct mgmt_cp_add_remote_oob_data cp;
int opt;
+ char *cmd = argv[0];
memset(&cp, 0, sizeof(cp));
cp.addr.type = BDADDR_BREDR;
hex2bin(optarg, cp.hash256, 16);
break;
default:
- remote_oob_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- remote_oob_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
static void did_usage(void)
{
- print("Usage: did <source>:<vendor>:<product>:<version>");
+ cmd_usage("did");
print(" possible source values: bluetooth, usb");
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void static_addr_usage(void)
-{
- print("Usage: static-addr <address>");
-}
-
static void cmd_static_addr(struct mgmt *mgmt, uint16_t index,
int argc, char **argv)
{
struct mgmt_cp_set_static_address cp;
if (argc < 2) {
- static_addr_usage();
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
struct mgmt_cp_set_public_address cp;
if (argc < 2) {
- print("Usage: public-addr <address>");
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void conn_info_usage(void)
-{
- print("Usage: conn-info [-t type] <remote address>");
-}
-
static struct option conn_info_options[] = {
{ "help", 0, 0, 'h' },
{ "type", 1, 0, 't' },
struct mgmt_cp_get_conn_info cp;
uint8_t type = BDADDR_BREDR;
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+t:h", conn_info_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- conn_info_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- conn_info_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- conn_info_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void io_cap_usage(void)
-{
- print("Usage: io-cap <cap>");
-}
-
static void cmd_io_cap(struct mgmt *mgmt, uint16_t index,
int argc, char **argv)
{
uint8_t cap;
if (argc < 2) {
- io_cap_usage();
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void scan_params_usage(void)
-{
- print("Usage: scan-params <interval> <window>");
-}
-
static void cmd_scan_params(struct mgmt *mgmt, uint16_t index,
int argc, char **argv)
{
struct mgmt_cp_set_scan_params cp;
if (argc < 3) {
- scan_params_usage();
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void add_device_usage(void)
-{
- print("Usage: add-device [-a action] [-t type] <address>");
-}
-
static struct option add_device_options[] = {
{ "help", 0, 0, 'h' },
{ "action", 1, 0, 'a' },
uint8_t type = BDADDR_BREDR;
char addr[18];
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+a:t:h", add_device_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- add_device_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- add_device_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- add_device_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
noninteractive_quit(EXIT_SUCCESS);
}
-static void del_device_usage(void)
-{
- print("Usage: del-device [-t type] <address>");
-}
-
static struct option del_device_options[] = {
{ "help", 0, 0, 'h' },
{ "type", 1, 0, 't' },
uint8_t type = BDADDR_BREDR;
char addr[18];
int opt;
+ char *cmd = argv[0];
while ((opt = getopt_long(argc, argv, "+t:h", del_device_options,
NULL)) != -1) {
type = strtol(optarg, NULL, 0);
break;
case 'h':
- del_device_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_SUCCESS);
default:
- del_device_usage();
+ cmd_usage(cmd);
optind = 0;
return noninteractive_quit(EXIT_FAILURE);
}
optind = 0;
if (argc < 1) {
- del_device_usage();
+ cmd_usage(cmd);
return noninteractive_quit(EXIT_FAILURE);
}
static void advsize_usage(void)
{
- print("Usage: advsize [options] <instance_id>\nOptions:\n"
+ cmd_usage("advsize");
+ print("Options:\n"
"\t -c, --connectable \"connectable\" flag\n"
"\t -g, --general-discov \"general-discoverable\" flag\n"
"\t -l, --limited-discov \"limited-discoverable\" flag\n"
static void add_adv_usage(void)
{
- print("Usage: add-adv [options] <instance_id>\nOptions:\n"
+ cmd_usage("add-adv");
+ print("Options:\n"
"\t -u, --uuid <uuid> Service UUID\n"
"\t -d, --adv-data <data> Advertising Data bytes\n"
"\t -s, --scan-rsp <data> Scan Response Data bytes\n"
return noninteractive_quit(EXIT_SUCCESS);
}
-static void rm_adv_usage(void)
-{
- print("Usage: rm-adv <instance_id>");
-}
-
static void cmd_rm_adv(struct mgmt *mgmt, uint16_t index, int argc, char **argv)
{
struct mgmt_cp_remove_advertising cp;
uint8_t instance;
if (argc != 2) {
- rm_adv_usage();
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
struct mgmt_cp_set_appearance cp;
if (argc < 2) {
- print("Usage: appearance <appearance>");
+ cmd_usage(argv[0]);
return noninteractive_quit(EXIT_FAILURE);
}
return NULL;
}
+static void cmd_usage(char *cmd)
+{
+ struct cmd_info *c;
+
+ if (!cmd)
+ return;
+
+ c = find_cmd(cmd, all_cmd, NELEM(all_cmd));
+ if (!c)
+ return;
+
+ print("Usage: %s %s", cmd, c->arg ? : "");
+
+}
+
static void rl_handler(char *input)
{
struct cmd_info *c;