Module Name:    src
Committed By:   plunky
Date:           Mon Aug 24 20:43:35 UTC 2009

Modified Files:
        src/usr.sbin/btconfig: btconfig.8 btconfig.c

Log Message:
add "imode" parameter to allow setting the Inquiry Mode. This supercedes
the "rssi" parameter (which remains for compatibility)

imode takes an argument: "std", "rssi" or "ext"


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/btconfig/btconfig.8
cvs rdiff -u -r1.14 -r1.15 src/usr.sbin/btconfig/btconfig.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/btconfig/btconfig.8
diff -u src/usr.sbin/btconfig/btconfig.8:1.11 src/usr.sbin/btconfig/btconfig.8:1.12
--- src/usr.sbin/btconfig/btconfig.8:1.11	Thu Aug 20 21:40:59 2009
+++ src/usr.sbin/btconfig/btconfig.8	Mon Aug 24 20:43:35 2009
@@ -1,4 +1,4 @@
-.\" $NetBSD: btconfig.8,v 1.11 2009/08/20 21:40:59 plunky Exp $
+.\" $NetBSD: btconfig.8,v 1.12 2009/08/24 20:43:35 plunky Exp $
 .\"
 .\" Copyright (c) 2006 Itronix Inc.
 .\" All rights reserved.
@@ -138,12 +138,26 @@
 Set variable pin type.
 .It Cm inquiry
 Perform device Discovery from the specified device and print details.
-.It Cm rssi
+.It Cm imode Ar type
+Set inquiry mode type to control which event formats are generated during
+a device inquiry.
+The
+.Ar type
+can be:
+.Bl -tag -width xxxxxx
+.It std
+Standard Inquiry Result Event format.
+.It rssi
 Enable Remote Signal Strength Indicator (RSSI) in inquiry results.
 This will only work if the device features indicate
 .Aq RSSI with inquiry result .
-.It Cm -rssi
-Disable Remote Signal Strength Indicator (RSSI) in inquiry results.
+.It ext
+Inquiry Result with RSSI format or Extended Inquiry Result fomat.
+This will only work where the device features indicate
+.Aq extended inquiry ,
+and the Extended Inquiry Result will only occur when the remote device
+provides the extended information.
+.El
 .It Cm reset
 Perform a hard reset on the device and re-initialise system state.
 .It Cm voice

Index: src/usr.sbin/btconfig/btconfig.c
diff -u src/usr.sbin/btconfig/btconfig.c:1.14 src/usr.sbin/btconfig/btconfig.c:1.15
--- src/usr.sbin/btconfig/btconfig.c:1.14	Thu Aug 20 21:40:59 2009
+++ src/usr.sbin/btconfig/btconfig.c	Mon Aug 24 20:43:35 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: btconfig.c,v 1.14 2009/08/20 21:40:59 plunky Exp $ */
+/* $NetBSD: btconfig.c,v 1.15 2009/08/24 20:43:35 plunky Exp $ */
 
 /*-
  * Copyright (c) 2006 Itronix Inc.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 __COPYRIGHT("@(#) Copyright (c) 2006 Itronix, Inc.  All rights reserved.");
-__RCSID("$NetBSD: btconfig.c,v 1.14 2009/08/20 21:40:59 plunky Exp $");
+__RCSID("$NetBSD: btconfig.c,v 1.15 2009/08/24 20:43:35 plunky Exp $");
 
 #include <sys/ioctl.h>
 #include <sys/param.h>
@@ -60,9 +60,11 @@
 int main(int, char *[]);
 void badarg(const char *);
 void badparam(const char *);
+void badval(const char *, const char *);
 void usage(void);
 int set_unit(unsigned long);
 void config_unit(void);
+void print_val(const char *, const char **, int);
 void print_info(int);
 void print_stats(void);
 void print_class(const char *);
@@ -144,10 +146,12 @@
 int opt_pin = 0;
 
 /* Inquiry */
-int opt_rssi = 0;			/* inquiry_with_rssi (flag) */
+int opt_rssi = 0;			/* inquiry_with_rssi (obsolete flag) */
+int opt_imode = 0;			/* inquiry mode */
 int opt_inquiry = 0;
 #define INQUIRY_LENGTH		10	/* about 12 seconds */
 #define INQUIRY_MAX_RESPONSES	10
+const char *imodes[] = { "std", "rssi", "ext", NULL };
 
 /* Voice Settings */
 int opt_voice = 0;
@@ -163,7 +167,7 @@
 
 struct parameter {
 	const char	*name;
-	enum { P_SET, P_CLR, P_STR, P_HEX, P_NUM } type;
+	enum { P_SET, P_CLR, P_STR, P_HEX, P_NUM, P_VAL } type;
 	int		*opt;
 	void		*val;
 } parameters[] = {
@@ -196,6 +200,7 @@
 	{ "variable",	P_CLR,	&opt_pin,	NULL	},
 	{ "inq",	P_SET,	&opt_inquiry,	NULL	},
 	{ "inquiry",	P_SET,	&opt_inquiry,	NULL	},
+	{ "imode",	P_VAL,	&opt_imode,	imodes	},
 	{ "rssi",	P_SET,	&opt_rssi,	NULL	},
 	{ "-rssi",	P_CLR,	&opt_rssi,	NULL	},
 	{ "reset",	P_SET,	&opt_reset,	NULL	},
@@ -299,6 +304,17 @@
 				*(uint32_t *)(p->val) = strtoul(*++av, NULL, 10);
 				*(p->opt) = 1;
 				break;
+
+			case P_VAL:
+				if (--ac < 1) badarg(p->name);
+				++av;
+				ch = 0;
+				do {
+					if (((char **)(p->val))[ch] == NULL)
+						badval(p->name, *av);
+				} while (strcmp(((char **)(p->val))[ch++], *av));
+				*(p->opt) = ch;
+				break;
 			}
 
 			av++, ac--;
@@ -331,6 +347,14 @@
 }
 
 void
+badval(const char *param, const char *value)
+{
+
+	fprintf(stderr, "bad value '%s' for parameter '%s'\n", value, param);
+	exit(EXIT_FAILURE);
+}
+
+void
 usage(void)
 {
 
@@ -615,14 +639,31 @@
 		}
 	}
 
-	if (opt_rssi) {
+	if (opt_imode | opt_rssi) {
 		uint8_t val = (opt_rssi > 0 ? 1 : 0);
 
+		if (opt_imode)
+			val = opt_imode - 1;
+
 		save_value(HCI_CMD_WRITE_INQUIRY_MODE, &val, sizeof(val));
 	}
 }
 
 /*
+ * print value from NULL terminated array given index
+ */
+void
+print_val(const char *hdr, const char **argv, int idx)
+{
+	int i = 0;
+
+	while (i < idx && *argv != NULL)
+		i++, argv++;
+
+	printf("\t%s: %s\n", hdr, *argv == NULL ? "unknown" : *argv);
+}
+
+/*
  * Print info for Bluetooth Device with varying verbosity levels
  */
 void
@@ -682,6 +723,12 @@
 	load_value(HCI_CMD_READ_PIN_TYPE, &val, sizeof(val));
 	printf("\tpin: %s\n", val ? "fixed" : "variable");
 
+	val = 0;
+	if (version >= HCI_SPEC_V12)
+		load_value(HCI_CMD_READ_INQUIRY_MODE, &val, sizeof(val));
+
+	print_val("inquiry mode", imodes, val);
+
 	width = printf("\toptions:");
 
 	load_value(HCI_CMD_READ_SCAN_ENABLE, &val, sizeof(val));
@@ -709,13 +756,6 @@
 	if (val & HCI_LINK_POLICY_ENABLE_PARK_MODE)	tag("park");
 	else if (level > 0)				tag("-park");
 
-	val = 0;
-	if (version >= HCI_SPEC_V12)
-		load_value(HCI_CMD_READ_INQUIRY_MODE, &val, sizeof(val));
-
-	if (val)				tag("rssi");
-	else if (level > 0)			tag("-rssi");
-
 	tag(NULL);
 
 	if (level-- < 1)

Reply via email to