aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/bluetooth
diff options
context:
space:
mode:
authorTakanori Watanabe <takawata@FreeBSD.org>2020-04-28 16:00:34 +0000
committerTakanori Watanabe <takawata@FreeBSD.org>2020-04-28 16:00:34 +0000
commit1f5d883dd751de8f2ba1c0c614d1fd7af2117c06 (patch)
treec1d600930826d99be6c6a5f428be56c507fe37fe /usr.sbin/bluetooth
parentb7eae758071811f308e25ae4f3842ae6051575d5 (diff)
downloadsrc-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.83
-rw-r--r--usr.sbin/bluetooth/hccontrol/le.c64
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
+ },
};