diff options
author | Takanori Watanabe <takawata@FreeBSD.org> | 2020-04-28 16:00:34 +0000 |
---|---|---|
committer | Takanori Watanabe <takawata@FreeBSD.org> | 2020-04-28 16:00:34 +0000 |
commit | 1f5d883dd751de8f2ba1c0c614d1fd7af2117c06 (patch) | |
tree | c1d600930826d99be6c6a5f428be56c507fe37fe /usr.sbin/bluetooth | |
parent | b7eae758071811f308e25ae4f3842ae6051575d5 (diff) | |
download | src-1f5d883dd751de8f2ba1c0c614d1fd7af2117c06.tar.gz src-1f5d883dd751de8f2ba1c0c614d1fd7af2117c06.zip |
Add le_read_buffer_size command and manpage.
It supports both v1 and v2 command.
PR:245964
Submitted by: Marc Veldman <marc@bumblingdork.com>
Notes
Notes:
svn path=/head/; revision=360440
Diffstat (limited to 'usr.sbin/bluetooth')
-rw-r--r-- | usr.sbin/bluetooth/hccontrol/hccontrol.8 | 3 | ||||
-rw-r--r-- | usr.sbin/bluetooth/hccontrol/le.c | 64 |
2 files changed, 66 insertions, 1 deletions
diff --git a/usr.sbin/bluetooth/hccontrol/hccontrol.8 b/usr.sbin/bluetooth/hccontrol/hccontrol.8 index a31118b66895..baa3a6f97241 100644 --- a/usr.sbin/bluetooth/hccontrol/hccontrol.8 +++ b/usr.sbin/bluetooth/hccontrol/hccontrol.8 @@ -25,7 +25,7 @@ .\" $Id: hccontrol.8,v 1.6 2003/08/06 21:26:38 max Exp $ .\" $FreeBSD$ .\" -.Dd April 24, 2020 +.Dd April 27, 2020 .Dt HCCONTROL 8 .Os .Sh NAME @@ -154,6 +154,7 @@ are: .It Cm LE_Set_Scan_Parameters .It Cm LE_Set_Scan_Enable .It Cm LE_Read_Supported_States +.It Cm LE_Read_Buffer_Size .El .Pp The currently supported node commands in diff --git a/usr.sbin/bluetooth/hccontrol/le.c b/usr.sbin/bluetooth/hccontrol/le.c index c099980ce163..1b465585664a 100644 --- a/usr.sbin/bluetooth/hccontrol/le.c +++ b/usr.sbin/bluetooth/hccontrol/le.c @@ -554,6 +554,64 @@ le_set_advertising_data(int s, int argc, char *argv[]) return (OK); } +static int +le_read_buffer_size(int s, int argc, char *argv[]) +{ + union { + ng_hci_le_read_buffer_size_rp v1; + ng_hci_le_read_buffer_size_rp_v2 v2; + } rp; + + int n, ch; + uint8_t v; + uint16_t cmd; + + optreset = 1; + optind = 0; + + /* Default to version 1*/ + v = 1; + cmd = NG_HCI_OCF_LE_READ_BUFFER_SIZE; + + while ((ch = getopt(argc, argv , "v:")) != -1) { + switch(ch) { + case 'v': + v = (uint8_t)strtol(optarg, NULL, 16); + if (v == 2) + cmd = NG_HCI_OCF_LE_READ_BUFFER_SIZE_V2; + else if (v > 2) + return (USAGE); + break; + default: + v = 1; + } + } + + n = sizeof(rp); + if (hci_simple_request(s, NG_HCI_OPCODE(NG_HCI_OGF_LE, cmd), + (void *)&rp, &n) == ERROR) + return (ERROR); + + if (rp.v1.status != 0x00) { + fprintf(stdout, "Status: %s [%#02x]\n", + hci_status2str(rp.v1.status), rp.v1.status); + return (FAILED); + } + + fprintf(stdout, "ACL data packet length: %d\n", + rp.v1.hc_le_data_packet_length); + fprintf(stdout, "Number of ACL data packets: %d\n", + rp.v1.hc_total_num_le_data_packets); + + if (v == 2) { + fprintf(stdout, "ISO data packet length: %d\n", + rp.v2.hc_iso_data_packet_length); + fprintf(stdout, "Number of ISO data packets: %d\n", + rp.v2.hc_total_num_iso_data_packets); + } + + return (OK); +} struct hci_command le_commands[] = { { @@ -621,4 +679,10 @@ struct hci_command le_commands[] = { "set LE device advertising packed data", &le_set_advertising_data }, + { + "le_read_buffer_size", + "le_read_buffer_size [-v 1|2]\n" + "Read the maximum size of ACL and ISO data packets", + &le_read_buffer_size + }, }; |