diff options
author | Max Krasnyansky <maxk@qualcomm.com> | 2002-04-15 16:53:32 +0000 |
---|---|---|
committer | Max Krasnyansky <maxk@qualcomm.com> | 2002-04-15 16:53:32 +0000 |
commit | 8720383cae063462a97c39f7bccdc5340a58594a (patch) | |
tree | b87c14af1455610c12359283f24e1a338a82d8a2 /tools/hcitool.c | |
parent | 386647e4e954416f41107db5438223193e8e9167 (diff) |
Added "info" command
Diffstat (limited to 'tools/hcitool.c')
-rw-r--r-- | tools/hcitool.c | 71 |
1 files changed, 65 insertions, 6 deletions
diff --git a/tools/hcitool.c b/tools/hcitool.c index 70e4b56d..b30d93d1 100644 --- a/tools/hcitool.c +++ b/tools/hcitool.c @@ -296,6 +296,64 @@ static void cmd_scan(int dev_id, char **opt, int nopt) free(info); } +static void cmd_info(int dev_id, char **opt, int nopt) +{ + bdaddr_t bdaddr; + uint16_t handle; + int dd; + char name[248]; + unsigned char features[8]; + struct hci_version version; + + if (nopt < 1) + return; + + baswap(&bdaddr, strtoba(opt[0])); + + if (dev_id < 0) { + dev_id = get_route(&bdaddr); + if (dev_id < 0) { + fprintf(stderr, "Device is not available.\n"); + exit(1); + } + } + + printf("Requesting information ...\n"); + + dd = hci_open_dev(dev_id); + if (dd < 0) { + perror("HCI device open failed"); + exit(1); + } + + printf("\tBD Address: %s\n", opt[0]); + + if (hci_create_connection(dd, &bdaddr, 0x0008 | 0x0010, 0, 0, &handle, 25000) < 0) { + close(dd); + exit(1); + } + + if (hci_remote_name(dd, &bdaddr, sizeof(name), name, 25000) == 0) + printf("\tDevice Name: %s\n", name); + + if (hci_read_remote_version(dd, handle, &version, 20000) == 0) { + printf("\tLMP Version: %s (0x%x) LMP Subversion: 0x%x\n" + "\tManufacturer: %s (%d)\n", + lmp_vertostr(version.lmp_ver), version.lmp_ver, version.lmp_subver, + bt_compidtostr(version.manufacturer), version.manufacturer); + } + + if (hci_read_remote_features(dd, handle, features, 20000) == 0) { + printf("\tFeatures:\n%s\n", + lmp_featurestostr(features, "\t\t", 3)); + } + + hci_disconnect(dd, handle, 0x13, 10000); + + close(dd); + +} + static void cmd_rev(int dev_id, char **opt, int nopt) { if (dev_id < 0) @@ -402,13 +460,14 @@ struct { char *opt; char *doc; } command[] = { - { "dev", cmd_dev, 0, "Display local devices" }, - { "rev", cmd_rev, 0, "Display revison information" }, - { "inq", cmd_inq, "[length] [flush]", "Inquire remote devices" }, - { "scan", cmd_scan, "[length] [flush]", "Scan for remote devices" }, - { "con", cmd_con, 0, "Display active connections" }, + { "dev", cmd_dev, 0, "Display local devices" }, + { "rev", cmd_rev, 0, "Display revison information" }, + { "inq", cmd_inq, "[length] [flush]", "Inquire remote devices" }, + { "scan", cmd_scan, "[length] [flush]", "Scan for remote devices" }, + { "info", cmd_info, "<bdaddr>", "Get information from remote device" }, + { "con", cmd_con, 0, "Display active connections" }, { "cc", cmd_cc, "<bdaddr> [pkt type] [role]", "Create connection to remote device" }, - { "dc", cmd_dc, "<bdaddr>", "Disconnect from remote device" }, + { "dc", cmd_dc, "<bdaddr>", "Disconnect from remote device" }, { NULL, NULL, 0} }; |