From b42e7c67689f7c93e2eb7a54dd677a5c5e23df59 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 1 Aug 2007 08:07:42 +0000 Subject: Add commands for Simple Pairing --- tools/hciconfig.8 | 9 ++++++++ tools/hciconfig.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/hcisecfilter.c | 13 +++++++---- 3 files changed, 82 insertions(+), 5 deletions(-) (limited to 'tools') diff --git a/tools/hciconfig.8 b/tools/hciconfig.8 index da39a40c..fc8d69bf 100644 --- a/tools/hciconfig.8 +++ b/tools/hciconfig.8 @@ -183,6 +183,12 @@ With no prints out the current AFH mode. Otherwise, sets AFH mode to .IR mode . .TP +.BI sspmode " [mode]" +With no +.IR mode , +prints out the current Simple Pairing mode. Otherwise, sets Simple Pairing mode to +.IR mode . +.TP \fBaclmtu\fP \fImtu\fP:\fIpkt\fP Sets ACL MTU to to @@ -208,6 +214,9 @@ This command deletes the stored link key for .I bdaddr from the device. .TP +.BI oobdata +Display local OOB data. +.TP .BI commands Display supported commands. .TP diff --git a/tools/hciconfig.c b/tools/hciconfig.c index 430cd0c3..998b6145 100644 --- a/tools/hciconfig.c +++ b/tools/hciconfig.c @@ -885,6 +885,36 @@ static void cmd_delkey(int ctl, int hdev, char *opt) hci_close_dev(dd); } +static void cmd_oob_data(int ctl, int hdev, char *opt) +{ + uint8_t hash[16], randomizer[16]; + int i, dd; + + dd = hci_open_dev(hdev); + if (dd < 0) { + fprintf(stderr, "Can't open device hci%d: %s (%d)\n", + hdev, strerror(errno), errno); + exit(1); + } + + if (hci_read_local_oob_data(dd, hash, randomizer, 1000) < 0) { + fprintf(stderr, "Can't read local OOB data on hci%d: %s (%d)\n", + hdev, strerror(errno), errno); + exit(1); + } + + print_dev_hdr(&di); + printf("\tOOB Hash: "); + for (i = 0; i < 16; i++) + printf(" %02x", hash[i]); + printf("\n\tRandomizer:"); + for (i = 0; i < 16; i++) + printf(" %02x", randomizer[i]); + printf("\n"); + + hci_close_dev(dd); +} + static void cmd_commands(int ctl, int hdev, char *opt) { uint8_t cmds[64]; @@ -1365,6 +1395,39 @@ static void cmd_afh_mode(int ctl, int hdev, char *opt) } } +static void cmd_ssp_mode(int ctl, int hdev, char *opt) +{ + int dd; + + dd = hci_open_dev(hdev); + if (dd < 0) { + fprintf(stderr, "Can't open device hci%d: %s (%d)\n", + hdev, strerror(errno), errno); + exit(1); + } + + if (opt) { + uint8_t mode = atoi(opt); + + if (hci_write_simple_pairing_mode(dd, mode, 2000) < 0) { + fprintf(stderr, "Can't set Simple Pairing mode on hci%d: %s (%d)\n", + hdev, strerror(errno), errno); + exit(1); + } + } else { + uint8_t mode; + + if (hci_read_simple_pairing_mode(dd, &mode, 1000) < 0) { + fprintf(stderr, "Can't read Simple Pairing mode on hci%d: %s (%d)\n", + hdev, strerror(errno), errno); + exit(1); + } + + print_dev_hdr(&di); + printf("\tSimple Pairing mode: %s\n", mode == 1 ? "Enabled" : "Disabled"); + } +} + static void print_rev_ericsson(int dd) { struct hci_request rq; @@ -1571,10 +1634,12 @@ static struct { { "pageparms", cmd_page_parms, "[win:int]", "Get/Set page scan window and interval" }, { "pageto", cmd_page_to, "[to]", "Get/Set page timeout" }, { "afhmode", cmd_afh_mode, "[mode]", "Get/Set AFH mode" }, + { "sspmode", cmd_ssp_mode, "[mode]", "Get/Set Simple Pairing Mode" }, { "aclmtu", cmd_aclmtu, "", "Set ACL MTU and number of packets" }, { "scomtu", cmd_scomtu, "", "Set SCO MTU and number of packets" }, { "putkey", cmd_putkey, "", "Store link key on the device" }, { "delkey", cmd_delkey, "", "Delete link key from the device" }, + { "oobdata", cmd_oob_data, 0, "Display local OOB data" }, { "commands", cmd_commands, 0, "Display supported commands" }, { "features", cmd_features, 0, "Display device features" }, { "version", cmd_version, 0, "Display version information" }, diff --git a/tools/hcisecfilter.c b/tools/hcisecfilter.c index 6a4f897b..5bab6389 100644 --- a/tools/hcisecfilter.c +++ b/tools/hcisecfilter.c @@ -81,7 +81,7 @@ int main(void) hci_set_bit(OCF_READ_CLOCK_OFFSET, ocf_mask); hci_set_bit(OCF_READ_LMP_HANDLE, ocf_mask); - printf("OGF_LINK_CTL: { 0x%08x, 0x%08x, 0x%06x, 0x%02x }\n", + printf("OGF_LINK_CTL: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", ocf_mask[0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); /* OGF_LINK_POLICY */ @@ -90,7 +90,7 @@ int main(void) hci_set_bit(OCF_READ_LINK_POLICY, ocf_mask); hci_set_bit(OCF_READ_DEFAULT_LINK_POLICY, ocf_mask); - printf("OGF_LINK_POLICY: { 0x%08x, 0x%08x, 0x%06x, 0x%02x }\n", + printf("OGF_LINK_POLICY: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", ocf_mask[0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); /* OGF_HOST_CTL */ @@ -120,8 +120,11 @@ int main(void) hci_set_bit(OCF_READ_PAGE_SCAN_TYPE, ocf_mask); hci_set_bit(OCF_READ_AFH_MODE, ocf_mask); hci_set_bit(OCF_READ_EXT_INQUIRY_RESPONSE, ocf_mask); + hci_set_bit(OCF_READ_SIMPLE_PAIRING_MODE, ocf_mask); + hci_set_bit(OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL, ocf_mask); + hci_set_bit(OCF_READ_DEFAULT_ERROR_DATA_REPORTING, ocf_mask); - printf("OGF_HOST_CTL: { 0x%08x, 0x%08x, 0x%06x, 0x%02x }\n", + printf("OGF_HOST_CTL: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", ocf_mask[0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); /* OGF_INFO_PARAM */ @@ -134,7 +137,7 @@ int main(void) hci_set_bit(OCF_READ_COUNTRY_CODE, ocf_mask); hci_set_bit(OCF_READ_BD_ADDR, ocf_mask); - printf("OGF_INFO_PARAM: { 0x%08x, 0x%08x, 0x%06x, 0x%02x }\n", + printf("OGF_INFO_PARAM: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", ocf_mask[0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); /* OGF_STATUS_PARAM */ @@ -145,7 +148,7 @@ int main(void) hci_set_bit(OCF_READ_AFH_MAP, ocf_mask); hci_set_bit(OCF_READ_CLOCK, ocf_mask); - printf("OGF_STATUS_PARAM: { 0x%08x, 0x%08x, 0x%06x, 0x%02x }\n", + printf("OGF_STATUS_PARAM: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", ocf_mask[0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); return 0; -- cgit