diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2005-10-24 22:27:08 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2005-10-24 22:27:08 +0000 | 
| commit | 51a4c2e364b3096d945ac4a01e844ca5d1513f4a (patch) | |
| tree | 7eff2e33de9d8c27d6a9ada922cd73053201cf3b | |
| parent | 3705606f41a7b9150a8ac66a9f83c4d534a95507 (diff) | |
Add support for listing all available PS keys
| -rw-r--r-- | tools/pskey.c | 52 | 
1 files changed, 48 insertions, 4 deletions
| diff --git a/tools/pskey.c b/tools/pskey.c index b4a6a3f5..24c0c4f2 100644 --- a/tools/pskey.c +++ b/tools/pskey.c @@ -179,7 +179,8 @@ static void usage(void)  	printf("pskey - Utility for changing CSR persistent storage\n\n");  	printf("Usage:\n" -		"\tpskey [-i <dev>] [-r] [-t] <key> [value]\n\n"); +		"\tpskey [-i <dev>] [-r] [-t] <key> [value]\n" +		"\tpskey [-i <dev>] --list\n\n");  	printf("Keys:\n\t");  	for (i = 0; storage[i].pskey; i++) { @@ -197,6 +198,7 @@ static struct option main_options[] = {  	{ "device",	1, 0, 'i' },  	{ "reset",	0, 0, 'r' },  	{ "transient",	0, 0, 't' }, +	{ "list",	0, 0, 'l' },  	{ "help",	0, 0, 'h' },  	{ 0, 0, 0, 0 }  }; @@ -205,9 +207,9 @@ int main(int argc, char *argv[])  {  	struct hci_dev_info di;  	struct hci_version ver; -	int i, err, dd, opt, dev = 0, reset = 0; +	int i, err, dd, opt, dev = 0, list = 0, reset = 0; -	while ((opt=getopt_long(argc, argv, "+i:rth", main_options, NULL)) != -1) { +	while ((opt=getopt_long(argc, argv, "+i:rtlh", main_options, NULL)) != -1) {  		switch (opt) {  		case 'i':  			dev = hci_devid(optarg); @@ -225,6 +227,10 @@ int main(int argc, char *argv[])  			transient = 1;  			break; +		case 'l': +			list = 1; +			break; +  		case 'h':  		default:  			usage(); @@ -236,7 +242,7 @@ int main(int argc, char *argv[])  	argv += optind;  	optind = 0; -	if (argc < 1) { +	if (!list && argc < 1) {  		usage();  		exit(1);  	} @@ -268,6 +274,44 @@ int main(int argc, char *argv[])  		exit(1);  	} +	if (list) { +		uint8_t array[8]; +		uint16_t length, seqnum = 0x0000, pskey = 0x0000; +		int err; + +		while (1) { +			memset(array, 0, sizeof(array)); +			array[0] = pskey & 0xff; +			array[1] = pskey >> 8; + +			err = csr_read_varid_complex(dd, seqnum++, +					CSR_VARID_PS_NEXT, array, sizeof(array)); +			if (err < 0) +				break; + +			pskey = array[4] + (array[5] << 8); +			if (pskey == 0x0000) +				break; + +			memset(array, 0, sizeof(array)); +			array[0] = pskey & 0xff; +			array[1] = pskey >> 8; + +			err = csr_read_varid_complex(dd, seqnum++, +					CSR_VARID_PS_SIZE, array, sizeof(array)); +			if (err < 0) +				continue; + +			length = array[2] + (array[3] << 8); + +			printf("0x%04x - %s (%d bytes)\n", pskey, +					csr_pskeytostr(pskey), length * 2); +		} + +		hci_close_dev(dd); +		exit(0); +	} +  	for (i = 0; storage[i].pskey; i++) {  		if (strcasecmp(storage[i].str, argv[0]))  			continue; | 
