svn commit: r360440 - in head: sys/netgraph/bluetooth/include usr.sbin/bluetooth/hccontrol

Takanori Watanabe takawata at FreeBSD.org
Tue Apr 28 16:00:35 UTC 2020


Author: takawata
Date: Tue Apr 28 16:00:34 2020
New Revision: 360440
URL: https://svnweb.freebsd.org/changeset/base/360440

Log:
  Add le_read_buffer_size command and manpage.
  It supports both v1 and v2 command.
  
  PR:245964
  Submitted by:	Marc Veldman <marc at bumblingdork.com>

Modified:
  head/sys/netgraph/bluetooth/include/ng_hci.h
  head/usr.sbin/bluetooth/hccontrol/hccontrol.8
  head/usr.sbin/bluetooth/hccontrol/le.c

Modified: head/sys/netgraph/bluetooth/include/ng_hci.h
==============================================================================
--- head/sys/netgraph/bluetooth/include/ng_hci.h	Tue Apr 28 15:44:39 2020	(r360439)
+++ head/sys/netgraph/bluetooth/include/ng_hci.h	Tue Apr 28 16:00:34 2020	(r360440)
@@ -1672,6 +1672,15 @@ typedef struct {
 	u_int16_t connection_handle;
 }__attribute__ ((packed)) ng_hci_le_long_term_key_request_negative_reply_rp;
 
+#define NG_HCI_OCF_LE_READ_BUFFER_SIZE_V2		0x0060
+/*No command parameter */
+typedef struct {
+	u_int8_t	status;
+	u_int16_t 	hc_le_data_packet_length;
+	u_int8_t	hc_total_num_le_data_packets; 
+	u_int16_t 	hc_iso_data_packet_length;
+	u_int8_t	hc_total_num_iso_data_packets; 
+} __attribute__ ((packed)) ng_hci_le_read_buffer_size_rp_v2;
 
 #define NG_HCI_OCF_LE_READ_SUPPORTED_STATES		0x001c
 /*No command parameter*/

Modified: head/usr.sbin/bluetooth/hccontrol/hccontrol.8
==============================================================================
--- head/usr.sbin/bluetooth/hccontrol/hccontrol.8	Tue Apr 28 15:44:39 2020	(r360439)
+++ head/usr.sbin/bluetooth/hccontrol/hccontrol.8	Tue Apr 28 16:00:34 2020	(r360440)
@@ -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

Modified: head/usr.sbin/bluetooth/hccontrol/le.c
==============================================================================
--- head/usr.sbin/bluetooth/hccontrol/le.c	Tue Apr 28 15:44:39 2020	(r360439)
+++ head/usr.sbin/bluetooth/hccontrol/le.c	Tue Apr 28 16:00:34 2020	(r360440)
@@ -554,7 +554,65 @@ 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[] = {
 {
 	"le_enable",
@@ -620,5 +678,11 @@ struct hci_command le_commands[] = {
 	  "le_set_advertising_data -n $name -f $flag -u $uuid16,$uuid16 \n"
 	  "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
   },
 };


More information about the svn-src-all mailing list