diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2002-12-15 14:18:03 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2002-12-15 14:18:03 +0000 | 
| commit | 30a4cfe6010a27030f8b89115e5362f01888ec93 (patch) | |
| tree | f96cba2e82625b6c03819a20169cf4f1478fe0dd | |
| parent | 82763bafbedb3393a7d433e8dee7c5e7d01cb769 (diff) | |
Support for voice setting
| -rw-r--r-- | tools/hciconfig.8 | 9 | ||||
| -rw-r--r-- | tools/hciconfig.c | 42 | 
2 files changed, 51 insertions, 0 deletions
| diff --git a/tools/hciconfig.8 b/tools/hciconfig.8 index bf13c2bd..96b503ae 100644 --- a/tools/hciconfig.8 +++ b/tools/hciconfig.8 @@ -106,6 +106,15 @@ class  is a 24-bit hex number describing the class of device, as specified in section  1.2 of the Bluetooth Assigned Numers document.  .TP +.BI voice " [voice]" +With no +.IR voice , +prints voice setting. Otherwise, sets voice setting to +.IR voice . +.I +voice +is a 16-bit hex number describing the voice setting. +.TP  .BI inqparms " [win:int]"  With no  .IR win:int , diff --git a/tools/hciconfig.c b/tools/hciconfig.c index 65512a09..45d9a23d 100644 --- a/tools/hciconfig.c +++ b/tools/hciconfig.c @@ -522,6 +522,47 @@ void cmd_class(int ctl, int hdev, char *opt)  	}  } +void cmd_voice(int ctl, int hdev, char *opt) +{ +	static char *icf[] = { "Linear", "u-Law", "A-Law", "Reserved" }; +	static char *idf[] = { "1's complement", "2's complement", "Sign-Magnitude", "Reserved" }; +	static char *iss[] = { "8 bit", "16 bit" }; +	static char *acf[] = { "CVSD", "u-Law", "A-Law", "Reserved" }; +	int s = hci_open_dev(hdev); + +	if (s < 0) { +		printf("Can't open device hci%d. %s(%d)\n", hdev, strerror(errno), errno); +		exit(1); +	} +	if (opt) { +		uint16_t vs = htobl(strtoul(opt, NULL, 16)); +		if (0 > hci_write_voice_setting(s, vs, 1000)) { +			printf("Can't write voice setting on hci%d. %s(%d)\n", +				hdev, strerror(errno), errno); +			exit(1); +		} +	} else { +		uint16_t vs; +		uint8_t ic; +		if (0 > hci_read_voice_setting(s, &vs, 1000)) { +			printf("Can't read voice setting on hci%d. %s(%d)\n", +				hdev, strerror(errno), errno); +			exit(1); +		} +		ic = (vs & 0x0300) >> 8; +		print_dev_hdr(&di); +		printf("\tVoice setting: 0x%04x%s\n", vs, +			((vs & 0x03fc) == 0x0060) ? " (Default Condition)" : ""); +		printf("\tInput Coding: %s\n", icf[ic]); +		printf("\tInput Data Format: %s\n", idf[(vs & 0xc0) >> 6]); +		if (!ic) { +			printf("\tInput Sample Size: %s\n", iss[(vs & 0x20) >> 5]); +			printf("\t# of bits padding at MSB: %d\n", (vs & 0x1c) >> 2); +		} +		printf("\tAir Coding Format: %s\n", acf[vs & 0x03]); +	} +} +  void cmd_version(int ctl, int hdev, char *opt)  {  	struct hci_version ver; @@ -859,6 +900,7 @@ struct {  	{ "lp",		cmd_lp,		"[policy]",	"Get/Set default link policy" },  	{ "name",	cmd_name,	"[name]",	"Get/Set local name" },  	{ "class",	cmd_class,	"[class]",	"Get/Set class of device" }, +	{ "voice",	cmd_voice,	"[voice]",	"Get/Set voice setting" },  	{ "inqparms",	cmd_inq_parms,	"[win:int]",	"Get/Set inquiry scan window and interval" },  	{ "pageparms",	cmd_page_parms,	"[win:int]",	"Get/Set page scan window and interval" },  	{ "pageto",	cmd_page_to,	"[to]",		"Get/Set page timeout" }, | 
