diff options
| author | Stephen Crane <steve.crane@rococosoft.com> | 2003-11-17 15:30:14 +0000 | 
|---|---|---|
| committer | Stephen Crane <steve.crane@rococosoft.com> | 2003-11-17 15:30:14 +0000 | 
| commit | bfe1cc41a50bda9420bf0ca43b0caabe12955eef (patch) | |
| tree | a1569fb57ab2fae5f7082eb5495b7e3d2d193023 /tools/hciconfig.c | |
| parent | 61011fc68193ff2f1b75a69a83323a41ca6fe5fd (diff) | |
add iac command
Diffstat (limited to 'tools/hciconfig.c')
| -rw-r--r-- | tools/hciconfig.c | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/tools/hciconfig.c b/tools/hciconfig.c index e2acba83..932ec4e7 100644 --- a/tools/hciconfig.c +++ b/tools/hciconfig.c @@ -137,6 +137,50 @@ void cmd_scan(int ctl, int hdev, char *opt)  	}  } +void cmd_iac(int ctl, int hdev, char *opt) +{ +	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) { +		int l = strtoul(opt, 0, 16); +		uint8_t lap[3]; +		if (l < 0x9e8b00 || l > 0x9e8b3f) { +			printf("Invalid access code 0x%x\n", l); +			exit(1); +		} +		lap[0] = (l & 0xff); +		lap[1] = (l >> 8) & 0xff; +		lap[2] = (l >> 16) & 0xff; +		if (hci_write_current_iac_lap(s, 1, lap, 1000) < 0) { +			printf("Failed to set IAC on hci%d: %s\n", hdev, strerror(errno)); +			exit(1); +		} +	} else { +		uint8_t lap[3 * MAX_IAC_LAP]; +		int i, j; +		uint8_t n; +		if (hci_read_current_iac_lap(s, &n, lap, 1000) < 0) { +			printf("Failed to read IAC from hci%d: %s\n", hdev, strerror(errno)); +			exit(1); +		} +		print_dev_hdr(&di); +		printf("\tIAC: "); +		for (i = 0; i < n; i++) { +			printf("0x"); +			for (j = 3; j--; ) +				printf("%02x", lap[j + 3*i]); +			if (i < n-1) +				printf(", "); +		} +		printf("\n"); +	} +	close(s); +} +  void cmd_auth(int ctl, int hdev, char *opt)  {  	struct hci_dev_req dr; @@ -913,6 +957,7 @@ void print_dev_info(int ctl, struct hci_dev_info *di)  		if (hci_test_bit(HCI_UP, &di->flags)) {  			cmd_name(ctl, di->dev_id, NULL);  			cmd_class(ctl, di->dev_id, NULL); +			cmd_iac(ctl, di->dev_id, NULL);  			cmd_version(ctl, di->dev_id, NULL);  		}  	} @@ -952,6 +997,7 @@ struct {  	{ "features",	cmd_features,	0,		"Display device features" },  	{ "version",	cmd_version,	0,		"Display version information" },  	{ "revision",	cmd_revision,	0,		"Display revision information" }, +        { "iac",	cmd_iac,	"[iac]",	"Get/Set inquiry access code" },  	{ NULL, NULL, 0 }  }; | 
