diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2005-11-01 17:43:22 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2005-11-01 17:43:22 +0000 |
commit | bbf0b522084d22e9fa1ec5ab6e5d850a298d55d6 (patch) | |
tree | 4e329272743ad5f7a82a4a1b55612498a2fe8911 /tools/pskey.c | |
parent | 4b623ab3d9307b4790a5228309b83804bead8777 (diff) |
Add support for different stores
Diffstat (limited to 'tools/pskey.c')
-rw-r--r-- | tools/pskey.c | 72 |
1 files changed, 48 insertions, 24 deletions
diff --git a/tools/pskey.c b/tools/pskey.c index d9bda6a8..f6bc0a7e 100644 --- a/tools/pskey.c +++ b/tools/pskey.c @@ -49,9 +49,7 @@ enum { READ, }; -static int transient = 0; - -static int cmd_list(int dd, int argc, char *argv[]) +static int cmd_list(int dd, uint16_t stores, int argc, char *argv[]) { uint8_t array[8]; uint16_t length, seqnum = 0x0000, pskey = 0x0000; @@ -61,6 +59,8 @@ static int cmd_list(int dd, int argc, char *argv[]) memset(array, 0, sizeof(array)); array[0] = pskey & 0xff; array[1] = pskey >> 8; + array[2] = stores & 0xff; + array[3] = stores >> 8; err = csr_read_varid_complex(dd, seqnum++, CSR_VARID_PS_NEXT, array, sizeof(array)); @@ -74,6 +74,8 @@ static int cmd_list(int dd, int argc, char *argv[]) memset(array, 0, sizeof(array)); array[0] = pskey & 0xff; array[1] = pskey >> 8; + array[2] = stores & 0xff; + array[3] = stores >> 8; err = csr_read_varid_complex(dd, seqnum++, CSR_VARID_PS_SIZE, array, sizeof(array)); @@ -89,7 +91,7 @@ static int cmd_list(int dd, int argc, char *argv[]) return 0; } -static int cmd_read(int dd, int argc, char *argv[]) +static int cmd_read(int dd, uint16_t stores, int argc, char *argv[]) { uint8_t array[256]; uint16_t length, seqnum = 0x0000, pskey = 0x0000; @@ -100,9 +102,11 @@ static int cmd_read(int dd, int argc, char *argv[]) memset(array, 0, sizeof(array)); array[0] = pskey & 0xff; array[1] = pskey >> 8; + array[2] = stores & 0xff; + array[3] = stores >> 8; err = csr_read_varid_complex(dd, seqnum++, - CSR_VARID_PS_NEXT, array, 8); + CSR_VARID_PS_NEXT, array, 8); if (err < 0) break; @@ -113,9 +117,11 @@ static int cmd_read(int dd, int argc, char *argv[]) memset(array, 0, sizeof(array)); array[0] = pskey & 0xff; array[1] = pskey >> 8; + array[2] = stores & 0xff; + array[3] = stores >> 8; err = csr_read_varid_complex(dd, seqnum++, - CSR_VARID_PS_SIZE, array, 8); + CSR_VARID_PS_SIZE, array, 8); if (err < 0) continue; @@ -124,7 +130,7 @@ static int cmd_read(int dd, int argc, char *argv[]) continue; err = csr_read_pskey_complex(dd, seqnum++, pskey, - 0x0000, array, length * 2); + stores, array, length * 2); if (err < 0) continue; @@ -158,7 +164,7 @@ static int pskey_size(uint16_t pskey) } } -static int write_pskey(int dd, uint16_t pskey, int type, int argc, char *argv[]) +static int write_pskey(int dd, uint16_t pskey, uint16_t stores, int type, int argc, char *argv[]) { uint8_t array[64]; uint16_t value; @@ -183,7 +189,7 @@ static int write_pskey(int dd, uint16_t pskey, int type, int argc, char *argv[]) array[i] = atoi(argv[i]); err = csr_write_pskey_complex(dd, 0x4711, pskey, - transient ? 0x0008 : 0x0000, array, size); + stores, array, size); break; case CSR_TYPE_UINT8: @@ -198,8 +204,7 @@ static int write_pskey(int dd, uint16_t pskey, int type, int argc, char *argv[]) else value = atoi(argv[0]); - err = csr_write_pskey_uint16(dd, 0x4711, pskey, - transient ? 0x0008 : 0x0000, value); + err = csr_write_pskey_uint16(dd, 0x4711, pskey, stores, value); break; case CSR_TYPE_UINT32: @@ -213,8 +218,7 @@ static int write_pskey(int dd, uint16_t pskey, int type, int argc, char *argv[]) else val32 = atoi(argv[0]); - err = csr_write_pskey_uint32(dd, 0x4711, pskey, - transient ? 0x0008 : 0x0000, val32); + err = csr_write_pskey_uint32(dd, 0x4711, pskey, stores, val32); break; default: @@ -226,7 +230,7 @@ static int write_pskey(int dd, uint16_t pskey, int type, int argc, char *argv[]) return err; } -static int read_pskey(int dd, uint16_t pskey, int type) +static int read_pskey(int dd, uint16_t pskey, uint16_t stores, int type) { uint8_t array[64]; uint16_t value = 0; @@ -239,7 +243,7 @@ static int read_pskey(int dd, uint16_t pskey, int type) case CSR_TYPE_ARRAY: size = pskey_size(pskey); - err = csr_read_pskey_complex(dd, 0x4711, pskey, 0x0000, array, size); + err = csr_read_pskey_complex(dd, 0x4711, pskey, stores, array, size); if (err < 0) return err; @@ -251,7 +255,7 @@ static int read_pskey(int dd, uint16_t pskey, int type) case CSR_TYPE_UINT8: case CSR_TYPE_UINT16: - err = csr_read_pskey_uint16(dd, 0x4711, pskey, 0x0000, &value); + err = csr_read_pskey_uint16(dd, 0x4711, pskey, stores, &value); if (err < 0) return err; @@ -259,7 +263,7 @@ static int read_pskey(int dd, uint16_t pskey, int type) break; case CSR_TYPE_UINT32: - err = csr_read_pskey_uint32(dd, 0x4711, pskey, 0x0000, &val32); + err = csr_read_pskey_uint32(dd, 0x4711, pskey, stores, &val32); if (err < 0) return err; @@ -308,7 +312,7 @@ 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" + "\tpskey [-i <dev>] [-r] [-s stores] [-t] <key> [value]\n" "\tpskey [-i <dev>] --list\n" "\tpskey [-i <dev>] --read\n\n"); @@ -327,6 +331,7 @@ static void usage(void) static struct option main_options[] = { { "device", 1, 0, 'i' }, { "reset", 0, 0, 'r' }, + { "stores", 1, 0, 's' }, { "transient", 0, 0, 't' }, { "list", 0, 0, 'L' }, { "read", 0, 0, 'R' }, @@ -338,9 +343,10 @@ int main(int argc, char *argv[]) { struct hci_dev_info di; struct hci_version ver; + uint16_t stores = 0x0001; int i, err, dd, opt, dev = 0, reset = 0, mode = NONE; - while ((opt=getopt_long(argc, argv, "+i:rtLRh", main_options, NULL)) != -1) { + while ((opt=getopt_long(argc, argv, "+i:rs:tLRh", main_options, NULL)) != -1) { switch (opt) { case 'i': dev = hci_devid(optarg); @@ -354,8 +360,25 @@ int main(int argc, char *argv[]) reset = 1; break; + case 's': + if (!strcasecmp(optarg, "default")) + stores = 0x0000; + else if (!strcasecmp(optarg, "psi")) + stores = 0x0001; + else if (!strcasecmp(optarg, "psf")) + stores = 0x0002; + else if (!strcasecmp(optarg, "psrom")) + stores = 0x0004; + else if (!strcasecmp(optarg, "psram")) + stores = 0x0008; + else if (!strncasecmp(optarg, "0x", 2)) + stores = strtol(optarg, NULL, 16); + else + stores = atoi(optarg); + break; + case 't': - transient = 1; + stores = 0x0008; break; case 'L': @@ -412,11 +435,11 @@ int main(int argc, char *argv[]) if (mode > 0) { switch (mode) { case LIST: - err = cmd_list(dd, argc, argv); + err = cmd_list(dd, stores, argc, argv); break; case READ: - err = cmd_read(dd, argc, argv); + err = cmd_read(dd, stores, argc, argv); break; default: @@ -434,14 +457,15 @@ int main(int argc, char *argv[]) continue; if (argc > 1) { - err = write_pskey(dd, storage[i].pskey, + err = write_pskey(dd, storage[i].pskey, stores, storage[i].type, argc - 1, argv + 1); if (!err && reset) csr_write_varid_valueless(dd, 0x0000, CSR_VARID_WARM_RESET); } else - err = read_pskey(dd, storage[i].pskey, storage[i].type); + err = read_pskey(dd, storage[i].pskey, + stores, storage[i].type); hci_close_dev(dd); |