| /* |
| * |
| * BlueZ - Bluetooth protocol stack for Linux |
| * |
| * Copyright (C) 2003-2010 Marcel Holtmann <marcel@holtmann.org> |
| * |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| * |
| */ |
| |
| #ifdef HAVE_CONFIG_H |
| #include <config.h> |
| #endif |
| |
| #include <stdio.h> |
| #include <errno.h> |
| #include <fcntl.h> |
| #include <unistd.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <sys/stat.h> |
| #include <sys/mman.h> |
| #include <sys/socket.h> |
| |
| #include <bluetooth/bluetooth.h> |
| #include <bluetooth/hci.h> |
| #include <bluetooth/hci_lib.h> |
| |
| #include "csr.h" |
| |
| struct psr_data { |
| uint16_t pskey; |
| uint8_t *value; |
| uint8_t size; |
| struct psr_data *next; |
| }; |
| |
| static struct psr_data *head = NULL, *tail = NULL; |
| |
| static struct { |
| uint16_t id; |
| char *str; |
| } csr_map[] = { |
| { 66, "HCI 9.8" }, |
| { 97, "HCI 10.3" }, |
| { 101, "HCI 10.5" }, |
| { 111, "HCI 11.0" }, |
| { 112, "HCI 11.1" }, |
| { 114, "HCI 11.2" }, |
| { 115, "HCI 11.3" }, |
| { 117, "HCI 12.0" }, |
| { 119, "HCI 12.1" }, |
| { 133, "HCI 12.2" }, |
| { 134, "HCI 12.3" }, |
| { 162, "HCI 12.4" }, |
| { 165, "HCI 12.5" }, |
| { 169, "HCI 12.6" }, |
| { 188, "HCI 12.7" }, |
| { 218, "HCI 12.8" }, |
| { 283, "HCI 12.9" }, |
| { 203, "HCI 13.2" }, |
| { 204, "HCI 13.2" }, |
| { 210, "HCI 13.3" }, |
| { 211, "HCI 13.3" }, |
| { 213, "HCI 13.4" }, |
| { 214, "HCI 13.4" }, |
| { 225, "HCI 13.5" }, |
| { 226, "HCI 13.5" }, |
| { 237, "HCI 13.6" }, |
| { 238, "HCI 13.6" }, |
| { 242, "HCI 14.0" }, |
| { 243, "HCI 14.0" }, |
| { 244, "HCI 14.0" }, |
| { 245, "HCI 14.0" }, |
| { 254, "HCI 13.7" }, |
| { 255, "HCI 13.7" }, |
| { 264, "HCI 14.1" }, |
| { 265, "HCI 14.1" }, |
| { 267, "HCI 14.2" }, |
| { 268, "HCI 14.2" }, |
| { 272, "HCI 14.3" }, |
| { 273, "HCI 14.3" }, |
| { 274, "HCI 13.8" }, |
| { 275, "HCI 13.8" }, |
| { 286, "HCI 13.9" }, |
| { 287, "HCI 13.9" }, |
| { 309, "HCI 13.10" }, |
| { 310, "HCI 13.10" }, |
| { 313, "HCI 14.4" }, |
| { 314, "HCI 14.4" }, |
| { 323, "HCI 14.5" }, |
| { 324, "HCI 14.5" }, |
| { 336, "HCI 14.6" }, |
| { 337, "HCI 14.6" }, |
| { 351, "HCI 13.11" }, |
| { 352, "HCI 13.11" }, |
| { 362, "HCI 15.0" }, |
| { 363, "HCI 15.0" }, |
| { 364, "HCI 15.0" }, |
| { 365, "HCI 15.0" }, |
| { 373, "HCI 14.7" }, |
| { 374, "HCI 14.7" }, |
| { 379, "HCI 15.1" }, |
| { 380, "HCI 15.1" }, |
| { 381, "HCI 15.1" }, |
| { 382, "HCI 15.1" }, |
| { 392, "HCI 15.2" }, |
| { 393, "HCI 15.2" }, |
| { 394, "HCI 15.2" }, |
| { 395, "HCI 15.2" }, |
| { 436, "HCI 16.0" }, |
| { 437, "HCI 16.0" }, |
| { 438, "HCI 16.0" }, |
| { 439, "HCI 16.0" }, |
| { 443, "HCI 15.3" }, |
| { 444, "HCI 15.3" }, |
| { 465, "HCI 16.1" }, |
| { 466, "HCI 16.1" }, |
| { 467, "HCI 16.1" }, |
| { 468, "HCI 16.1" }, |
| { 487, "HCI 14.8" }, |
| { 488, "HCI 14.8" }, |
| { 492, "HCI 16.2" }, |
| { 493, "HCI 16.2" }, |
| { 495, "HCI 16.2" }, |
| { 496, "HCI 16.2" }, |
| { 502, "HCI 16.1.1" }, |
| { 503, "HCI 16.1.1" }, |
| { 504, "HCI 16.1.1" }, |
| { 505, "HCI 16.1.1" }, |
| { 506, "HCI 16.1.2" }, |
| { 507, "HCI 16.1.2" }, |
| { 508, "HCI 16.1.2" }, |
| { 509, "HCI 16.1.2" }, |
| { 516, "HCI 16.3" }, |
| { 517, "HCI 16.3" }, |
| { 518, "HCI 16.3" }, |
| { 519, "HCI 16.3" }, |
| { 523, "HCI 16.4" }, |
| { 524, "HCI 16.4" }, |
| { 525, "HCI 16.4" }, |
| { 526, "HCI 16.4" }, |
| { 553, "HCI 15.3" }, |
| { 554, "HCI 15.3" }, |
| { 562, "HCI 16.5" }, |
| { 563, "HCI 16.5" }, |
| { 564, "HCI 16.5" }, |
| { 565, "HCI 16.5" }, |
| { 593, "HCI 17.0" }, |
| { 594, "HCI 17.0" }, |
| { 595, "HCI 17.0" }, |
| { 599, "HCI 17.0" }, |
| { 600, "HCI 17.0" }, |
| { 608, "HCI 13.10.1" }, |
| { 609, "HCI 13.10.1" }, |
| { 613, "HCI 17.1" }, |
| { 614, "HCI 17.1" }, |
| { 615, "HCI 17.1" }, |
| { 616, "HCI 17.1" }, |
| { 618, "HCI 17.1" }, |
| { 624, "HCI 17.2" }, |
| { 625, "HCI 17.2" }, |
| { 626, "HCI 17.2" }, |
| { 627, "HCI 17.2" }, |
| { 637, "HCI 16.6" }, |
| { 638, "HCI 16.6" }, |
| { 639, "HCI 16.6" }, |
| { 640, "HCI 16.6" }, |
| { 642, "HCI 13.10.2" }, |
| { 643, "HCI 13.10.2" }, |
| { 644, "HCI 13.10.3" }, |
| { 645, "HCI 13.10.3" }, |
| { 668, "HCI 13.10.4" }, |
| { 669, "HCI 13.10.4" }, |
| { 681, "HCI 16.7" }, |
| { 682, "HCI 16.7" }, |
| { 683, "HCI 16.7" }, |
| { 684, "HCI 16.7" }, |
| { 704, "HCI 16.8" }, |
| { 718, "HCI 16.4.1" }, |
| { 719, "HCI 16.4.1" }, |
| { 720, "HCI 16.4.1" }, |
| { 721, "HCI 16.4.1" }, |
| { 722, "HCI 16.7.1" }, |
| { 723, "HCI 16.7.1" }, |
| { 724, "HCI 16.7.1" }, |
| { 725, "HCI 16.7.1" }, |
| { 731, "HCI 16.7.2" }, |
| { 732, "HCI 16.7.2" }, |
| { 733, "HCI 16.7.2" }, |
| { 734, "HCI 16.7.2" }, |
| { 735, "HCI 16.4.2" }, |
| { 736, "HCI 16.4.2" }, |
| { 737, "HCI 16.4.2" }, |
| { 738, "HCI 16.4.2" }, |
| { 750, "HCI 16.7.3" }, |
| { 751, "HCI 16.7.3" }, |
| { 752, "HCI 16.7.3" }, |
| { 753, "HCI 16.7.3" }, |
| { 760, "HCI 16.7.4" }, |
| { 761, "HCI 16.7.4" }, |
| { 762, "HCI 16.7.4" }, |
| { 763, "HCI 16.7.4" }, |
| { 770, "HCI 16.9" }, |
| { 771, "HCI 16.9" }, |
| { 772, "HCI 16.9" }, |
| { 773, "HCI 16.9" }, |
| { 774, "HCI 17.3" }, |
| { 775, "HCI 17.3" }, |
| { 776, "HCI 17.3" }, |
| { 777, "HCI 17.3" }, |
| { 781, "HCI 16.7.5" }, |
| { 786, "HCI 16.10" }, |
| { 787, "HCI 16.10" }, |
| { 788, "HCI 16.10" }, |
| { 789, "HCI 16.10" }, |
| { 791, "HCI 16.4.3" }, |
| { 792, "HCI 16.4.3" }, |
| { 793, "HCI 16.4.3" }, |
| { 794, "HCI 16.4.3" }, |
| { 798, "HCI 16.11" }, |
| { 799, "HCI 16.11" }, |
| { 800, "HCI 16.11" }, |
| { 801, "HCI 16.11" }, |
| { 806, "HCI 16.7.5" }, |
| { 807, "HCI 16.12" }, |
| { 808, "HCI 16.12" }, |
| { 809, "HCI 16.12" }, |
| { 810, "HCI 16.12" }, |
| { 817, "HCI 16.13" }, |
| { 818, "HCI 16.13" }, |
| { 819, "HCI 16.13" }, |
| { 820, "HCI 16.13" }, |
| { 823, "HCI 13.10.5" }, |
| { 824, "HCI 13.10.5" }, |
| { 826, "HCI 16.14" }, |
| { 827, "HCI 16.14" }, |
| { 828, "HCI 16.14" }, |
| { 829, "HCI 16.14" }, |
| { 843, "HCI 17.3.1" }, |
| { 856, "HCI 17.3.2" }, |
| { 857, "HCI 17.3.2" }, |
| { 858, "HCI 17.3.2" }, |
| { 1120, "HCI 17.11" }, |
| { 1168, "HCI 18.1" }, |
| { 1169, "HCI 18.1" }, |
| { 1241, "HCI 18.x" }, |
| { 1298, "HCI 18.2" }, |
| { 1354, "HCI 18.2" }, |
| { 1392, "HCI 18.2" }, |
| { 1393, "HCI 18.2" }, |
| { 1501, "HCI 18.2" }, |
| { 1503, "HCI 18.2" }, |
| { 1504, "HCI 18.2" }, |
| { 1505, "HCI 18.2" }, |
| { 1506, "HCI 18.2" }, |
| { 1520, "HCI 18.2" }, |
| { 1586, "HCI 18.2" }, |
| { 1591, "HCI 18.2" }, |
| { 1592, "HCI 18.2" }, |
| { 1593, "HCI 18.2.1" }, |
| { 1733, "HCI 18.3" }, |
| { 1734, "HCI 18.3" }, |
| { 1735, "HCI 18.3" }, |
| { 1737, "HCI 18.3" }, |
| { 1915, "HCI 19.2" }, |
| { 1916, "HCI 19.2" }, |
| { 1958, "HCI 19.2" }, |
| { 1981, "Unified 20a" }, |
| { 1982, "Unified 20a" }, |
| { 1989, "HCI 18.4" }, |
| { 2062, "Unified 20a1" }, |
| { 2063, "Unified 20a1" }, |
| { 2067, "Unified 18f" }, |
| { 2068, "Unified 18f" }, |
| { 2243, "Unified 18e" }, |
| { 2244, "Unified 18e" }, |
| { 2258, "Unified 20d" }, |
| { 2259, "Unified 20d" }, |
| { 2361, "Unified 20e" }, |
| { 2362, "Unified 20e" }, |
| { 2386, "Unified 21a" }, |
| { 2387, "Unified 21a" }, |
| { 2423, "Unified 21a" }, |
| { 2424, "Unified 21a" }, |
| { 2623, "Unified 21c" }, |
| { 2624, "Unified 21c" }, |
| { 2625, "Unified 21c" }, |
| { 2626, "Unified 21c" }, |
| { 2627, "Unified 21c" }, |
| { 2628, "Unified 21c" }, |
| { 2629, "Unified 21c" }, |
| { 2630, "Unified 21c" }, |
| { 2631, "Unified 21c" }, |
| { 2632, "Unified 21c" }, |
| { 2633, "Unified 21c" }, |
| { 2634, "Unified 21c" }, |
| { 2635, "Unified 21c" }, |
| { 2636, "Unified 21c" }, |
| { 2649, "Unified 21c" }, |
| { 2650, "Unified 21c" }, |
| { 2651, "Unified 21c" }, |
| { 2652, "Unified 21c" }, |
| { 2653, "Unified 21c" }, |
| { 2654, "Unified 21c" }, |
| { 2655, "Unified 21c" }, |
| { 2656, "Unified 21c" }, |
| { 2658, "Unified 21c" }, |
| { 3057, "Unified 21d" }, |
| { 3058, "Unified 21d" }, |
| { 3059, "Unified 21d" }, |
| { 3060, "Unified 21d" }, |
| { 3062, "Unified 21d" }, |
| { 3063, "Unified 21d" }, |
| { 3064, "Unified 21d" }, |
| { 3164, "Unified 21e" }, |
| { 3413, "Unified 21f" }, |
| { 3414, "Unified 21f" }, |
| { 3415, "Unified 21f" }, |
| { 3424, "Unified 21f" }, |
| { 3454, "Unified 21f" }, |
| { 3684, "Unified 21f" }, |
| { 3764, "Unified 21f" }, |
| { 4276, "Unified 22b" }, |
| { 4277, "Unified 22b" }, |
| { 4279, "Unified 22b" }, |
| { 4281, "Unified 22b" }, |
| { 4282, "Unified 22b" }, |
| { 4283, "Unified 22b" }, |
| { 4284, "Unified 22b" }, |
| { 4285, "Unified 22b" }, |
| { 4289, "Unified 22b" }, |
| { 4290, "Unified 22b" }, |
| { 4291, "Unified 22b" }, |
| { 4292, "Unified 22b" }, |
| { 4293, "Unified 22b" }, |
| { 4294, "Unified 22b" }, |
| { 4295, "Unified 22b" }, |
| { 4363, "Unified 22c" }, |
| { 4373, "Unified 22c" }, |
| { 4374, "Unified 22c" }, |
| { 4532, "Unified 22d" }, |
| { 4533, "Unified 22d" }, |
| { 4698, "Unified 23c" }, |
| { 4839, "Unified 23c" }, |
| { 4841, "Unified 23c" }, |
| { 4866, "Unified 23c" }, |
| { 4867, "Unified 23c" }, |
| { 4868, "Unified 23c" }, |
| { 4869, "Unified 23c" }, |
| { 4870, "Unified 23c" }, |
| { 4871, "Unified 23c" }, |
| { 4872, "Unified 23c" }, |
| { 4874, "Unified 23c" }, |
| { 4875, "Unified 23c" }, |
| { 4876, "Unified 23c" }, |
| { 4877, "Unified 23c" }, |
| { 2526, "Marcel 1 (2005-09-26)" }, |
| { 2543, "Marcel 2 (2005-09-28)" }, |
| { 2622, "Marcel 3 (2005-10-27)" }, |
| { 3326, "Marcel 4 (2006-06-16)" }, |
| { 3612, "Marcel 5 (2006-10-24)" }, |
| { 4509, "Marcel 6 (2007-06-11)" }, |
| { 5417, "Marcel 7 (2008-08-26)" }, |
| { 195, "Sniff 1 (2001-11-27)" }, |
| { 220, "Sniff 2 (2002-01-03)" }, |
| { 269, "Sniff 3 (2002-02-22)" }, |
| { 270, "Sniff 4 (2002-02-26)" }, |
| { 284, "Sniff 5 (2002-03-12)" }, |
| { 292, "Sniff 6 (2002-03-20)" }, |
| { 305, "Sniff 7 (2002-04-12)" }, |
| { 306, "Sniff 8 (2002-04-12)" }, |
| { 343, "Sniff 9 (2002-05-02)" }, |
| { 346, "Sniff 10 (2002-05-03)" }, |
| { 355, "Sniff 11 (2002-05-16)" }, |
| { 256, "Sniff 11 (2002-05-16)" }, |
| { 390, "Sniff 12 (2002-06-26)" }, |
| { 450, "Sniff 13 (2002-08-16)" }, |
| { 451, "Sniff 13 (2002-08-16)" }, |
| { 533, "Sniff 14 (2002-10-11)" }, |
| { 580, "Sniff 15 (2002-11-14)" }, |
| { 623, "Sniff 16 (2002-12-12)" }, |
| { 678, "Sniff 17 (2003-01-29)" }, |
| { 847, "Sniff 18 (2003-04-17)" }, |
| { 876, "Sniff 19 (2003-06-10)" }, |
| { 997, "Sniff 22 (2003-09-05)" }, |
| { 1027, "Sniff 23 (2003-10-03)" }, |
| { 1029, "Sniff 24 (2003-10-03)" }, |
| { 1112, "Sniff 25 (2003-12-03)" }, |
| { 1113, "Sniff 25 (2003-12-03)" }, |
| { 1133, "Sniff 26 (2003-12-18)" }, |
| { 1134, "Sniff 26 (2003-12-18)" }, |
| { 1223, "Sniff 27 (2004-03-08)" }, |
| { 1224, "Sniff 27 (2004-03-08)" }, |
| { 1319, "Sniff 31 (2004-04-22)" }, |
| { 1320, "Sniff 31 (2004-04-22)" }, |
| { 1427, "Sniff 34 (2004-06-16)" }, |
| { 1508, "Sniff 35 (2004-07-19)" }, |
| { 1509, "Sniff 35 (2004-07-19)" }, |
| { 1587, "Sniff 36 (2004-08-18)" }, |
| { 1588, "Sniff 36 (2004-08-18)" }, |
| { 1641, "Sniff 37 (2004-09-16)" }, |
| { 1642, "Sniff 37 (2004-09-16)" }, |
| { 1699, "Sniff 38 (2004-10-07)" }, |
| { 1700, "Sniff 38 (2004-10-07)" }, |
| { 1752, "Sniff 39 (2004-11-02)" }, |
| { 1753, "Sniff 39 (2004-11-02)" }, |
| { 1759, "Sniff 40 (2004-11-03)" }, |
| { 1760, "Sniff 40 (2004-11-03)" }, |
| { 1761, "Sniff 40 (2004-11-03)" }, |
| { 2009, "Sniff 41 (2005-04-06)" }, |
| { 2010, "Sniff 41 (2005-04-06)" }, |
| { 2011, "Sniff 41 (2005-04-06)" }, |
| { 2016, "Sniff 42 (2005-04-11)" }, |
| { 2017, "Sniff 42 (2005-04-11)" }, |
| { 2018, "Sniff 42 (2005-04-11)" }, |
| { 2023, "Sniff 43 (2005-04-14)" }, |
| { 2024, "Sniff 43 (2005-04-14)" }, |
| { 2025, "Sniff 43 (2005-04-14)" }, |
| { 2032, "Sniff 44 (2005-04-18)" }, |
| { 2033, "Sniff 44 (2005-04-18)" }, |
| { 2034, "Sniff 44 (2005-04-18)" }, |
| { 2288, "Sniff 45 (2005-07-08)" }, |
| { 2289, "Sniff 45 (2005-07-08)" }, |
| { 2290, "Sniff 45 (2005-07-08)" }, |
| { 2388, "Sniff 46 (2005-08-17)" }, |
| { 2389, "Sniff 46 (2005-08-17)" }, |
| { 2390, "Sniff 46 (2005-08-17)" }, |
| { 2869, "Sniff 47 (2006-02-15)" }, |
| { 2870, "Sniff 47 (2006-02-15)" }, |
| { 2871, "Sniff 47 (2006-02-15)" }, |
| { 3214, "Sniff 48 (2006-05-16)" }, |
| { 3215, "Sniff 48 (2006-05-16)" }, |
| { 3216, "Sniff 48 (2006-05-16)" }, |
| { 3356, "Sniff 49 (2006-07-17)" }, |
| { 3529, "Sniff 50 (2006-09-21)" }, |
| { 3546, "Sniff 51 (2006-09-29)" }, |
| { 3683, "Sniff 52 (2006-11-03)" }, |
| { 0, } |
| }; |
| |
| char *csr_builddeftostr(uint16_t def) |
| { |
| switch (def) { |
| case 0x0000: |
| return "NONE"; |
| case 0x0001: |
| return "CHIP_BASE_BC01"; |
| case 0x0002: |
| return "CHIP_BASE_BC02"; |
| case 0x0003: |
| return "CHIP_BC01B"; |
| case 0x0004: |
| return "CHIP_BC02_EXTERNAL"; |
| case 0x0005: |
| return "BUILD_HCI"; |
| case 0x0006: |
| return "BUILD_RFCOMM"; |
| case 0x0007: |
| return "BT_VER_1_1"; |
| case 0x0008: |
| return "TRANSPORT_ALL"; |
| case 0x0009: |
| return "TRANSPORT_BCSP"; |
| case 0x000a: |
| return "TRANSPORT_H4"; |
| case 0x000b: |
| return "TRANSPORT_USB"; |
| case 0x000c: |
| return "MAX_CRYPT_KEY_LEN_56"; |
| case 0x000d: |
| return "MAX_CRYPT_KEY_LEN_128"; |
| case 0x000e: |
| return "TRANSPORT_USER"; |
| case 0x000f: |
| return "CHIP_BC02_KATO"; |
| case 0x0010: |
| return "TRANSPORT_NONE"; |
| case 0x0012: |
| return "REQUIRE_8MBIT"; |
| case 0x0013: |
| return "RADIOTEST"; |
| case 0x0014: |
| return "RADIOTEST_LITE"; |
| case 0x0015: |
| return "INSTALL_FLASH"; |
| case 0x0016: |
| return "INSTALL_EEPROM"; |
| case 0x0017: |
| return "INSTALL_COMBO_DOT11"; |
| case 0x0018: |
| return "LOWPOWER_TX"; |
| case 0x0019: |
| return "TRANSPORT_TWUTL"; |
| case 0x001a: |
| return "COMPILER_GCC"; |
| case 0x001b: |
| return "CHIP_BC02_CLOUSEAU"; |
| case 0x001c: |
| return "CHIP_BC02_TOULOUSE"; |
| case 0x001d: |
| return "CHIP_BASE_BC3"; |
| case 0x001e: |
| return "CHIP_BC3_NICKNACK"; |
| case 0x001f: |
| return "CHIP_BC3_KALIMBA"; |
| case 0x0020: |
| return "INSTALL_HCI_MODULE"; |
| case 0x0021: |
| return "INSTALL_L2CAP_MODULE"; |
| case 0x0022: |
| return "INSTALL_DM_MODULE"; |
| case 0x0023: |
| return "INSTALL_SDP_MODULE"; |
| case 0x0024: |
| return "INSTALL_RFCOMM_MODULE"; |
| case 0x0025: |
| return "INSTALL_HIDIO_MODULE"; |
| case 0x0026: |
| return "INSTALL_PAN_MODULE"; |
| case 0x0027: |
| return "INSTALL_IPV4_MODULE"; |
| case 0x0028: |
| return "INSTALL_IPV6_MODULE"; |
| case 0x0029: |
| return "INSTALL_TCP_MODULE"; |
| case 0x002a: |
| return "BT_VER_1_2"; |
| case 0x002b: |
| return "INSTALL_UDP_MODULE"; |
| case 0x002c: |
| return "REQUIRE_0_WAIT_STATES"; |
| case 0x002d: |
| return "CHIP_BC3_PADDYWACK"; |
| case 0x002e: |
| return "CHIP_BC4_COYOTE"; |
| case 0x002f: |
| return "CHIP_BC4_ODDJOB"; |
| case 0x0030: |
| return "TRANSPORT_H4DS"; |
| case 0x0031: |
| return "CHIP_BASE_BC4"; |
| default: |
| return "UNKNOWN"; |
| } |
| } |
| |
| char *csr_buildidtostr(uint16_t id) |
| { |
| static char str[12]; |
| int i; |
| |
| for (i = 0; csr_map[i].id; i++) |
| if (csr_map[i].id == id) |
| return csr_map[i].str; |
| |
| snprintf(str, 11, "Build %d", id); |
| return str; |
| } |
| |
| char *csr_chipvertostr(uint16_t ver, uint16_t rev) |
| { |
| switch (ver) { |
| case 0x00: |
| return "BlueCore01a"; |
| case 0x01: |
| switch (rev) { |
| case 0x64: |
| return "BlueCore01b (ES)"; |
| case 0x65: |
| default: |
| return "BlueCore01b"; |
| } |
| case 0x02: |
| switch (rev) { |
| case 0x89: |
| return "BlueCore02-External (ES2)"; |
| case 0x8a: |
| return "BlueCore02-External"; |
| case 0x28: |
| return "BlueCore02-ROM/Audio/Flash"; |
| default: |
| return "BlueCore02"; |
| } |
| case 0x03: |
| switch (rev) { |
| case 0x43: |
| return "BlueCore3-MM"; |
| case 0x15: |
| return "BlueCore3-ROM"; |
| case 0xe2: |
| return "BlueCore3-Flash"; |
| case 0x26: |
| return "BlueCore4-External"; |
| case 0x30: |
| return "BlueCore4-ROM"; |
| default: |
| return "BlueCore3 or BlueCore4"; |
| } |
| default: |
| return "Unknown"; |
| } |
| } |
| |
| char *csr_pskeytostr(uint16_t pskey) |
| { |
| switch (pskey) { |
| case CSR_PSKEY_BDADDR: |
| return "Bluetooth address"; |
| case CSR_PSKEY_COUNTRYCODE: |
| return "Country code"; |
| case CSR_PSKEY_CLASSOFDEVICE: |
| return "Class of device"; |
| case CSR_PSKEY_DEVICE_DRIFT: |
| return "Device drift"; |
| case CSR_PSKEY_DEVICE_JITTER: |
| return "Device jitter"; |
| case CSR_PSKEY_MAX_ACLS: |
| return "Maximum ACL links"; |
| case CSR_PSKEY_MAX_SCOS: |
| return "Maximum SCO links"; |
| case CSR_PSKEY_MAX_REMOTE_MASTERS: |
| return "Maximum remote masters"; |
| case CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY: |
| return "Support master and slave roles simultaneously"; |
| case CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN: |
| return "Maximum HCI ACL packet length"; |
| case CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN: |
| return "Maximum HCI SCO packet length"; |
| case CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS: |
| return "Maximum number of HCI ACL packets"; |
| case CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS: |
| return "Maximum number of HCI SCO packets"; |
| case CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK: |
| return "Flow control low water mark"; |
| case CSR_PSKEY_LC_MAX_TX_POWER: |
| return "Maximum transmit power"; |
| case CSR_PSKEY_TX_GAIN_RAMP: |
| return "Transmit gain ramp rate"; |
| case CSR_PSKEY_LC_POWER_TABLE: |
| return "Radio power table"; |
| case CSR_PSKEY_LC_PEER_POWER_PERIOD: |
| return "Peer transmit power control interval"; |
| case CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK: |
| return "Flow control pool low water mark"; |
| case CSR_PSKEY_LC_DEFAULT_TX_POWER: |
| return "Default transmit power"; |
| case CSR_PSKEY_LC_RSSI_GOLDEN_RANGE: |
| return "RSSI at bottom of golden receive range"; |
| case CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK: |
| return "Combo: PIO lines and logic to disable transmit"; |
| case CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK: |
| return "Combo: priority activity PIO lines and logic"; |
| case CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE: |
| return "Combo: 802.11b channel number base PIO line"; |
| case CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS: |
| return "Combo: channels to block either side of 802.11b"; |
| case CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI: |
| return "Maximum transmit power when peer has no RSSI"; |
| case CSR_PSKEY_LC_CONNECTION_RX_WINDOW: |
| return "Receive window size during connections"; |
| case CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE: |
| return "Combo: which TX packets shall we protect"; |
| case CSR_PSKEY_LC_ENHANCED_POWER_TABLE: |
| return "Radio power table"; |
| case CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG: |
| return "RSSI configuration for use with wideband RSSI"; |
| case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD: |
| return "Combo: How much notice will we give the Combo Card"; |
| case CSR_PSKEY_BT_CLOCK_INIT: |
| return "Initial value of Bluetooth clock"; |
| case CSR_PSKEY_TX_MR_MOD_DELAY: |
| return "TX Mod delay"; |
| case CSR_PSKEY_RX_MR_SYNC_TIMING: |
| return "RX MR Sync Timing"; |
| case CSR_PSKEY_RX_MR_SYNC_CONFIG: |
| return "RX MR Sync Configuration"; |
| case CSR_PSKEY_LC_LOST_SYNC_SLOTS: |
| return "Time in ms for lost sync in low power modes"; |
| case CSR_PSKEY_RX_MR_SAMP_CONFIG: |
| return "RX MR Sync Configuration"; |
| case CSR_PSKEY_AGC_HYST_LEVELS: |
| return "AGC hysteresis levels"; |
| case CSR_PSKEY_RX_LEVEL_LOW_SIGNAL: |
| return "ANA_RX_LVL at low signal strengths"; |
| case CSR_PSKEY_AGC_IQ_LVL_VALUES: |
| return "ANA_IQ_LVL values for AGC algorithmn"; |
| case CSR_PSKEY_MR_FTRIM_OFFSET_12DB: |
| return "ANA_RX_FTRIM offset when using 12 dB IF atten "; |
| case CSR_PSKEY_MR_FTRIM_OFFSET_6DB: |
| return "ANA_RX_FTRIM offset when using 6 dB IF atten "; |
| case CSR_PSKEY_NO_CAL_ON_BOOT: |
| return "Do not calibrate radio on boot"; |
| case CSR_PSKEY_RSSI_HI_TARGET: |
| return "RSSI high target"; |
| case CSR_PSKEY_PREFERRED_MIN_ATTENUATION: |
| return "Preferred minimum attenuator setting"; |
| case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE: |
| return "Combo: Treat all packets as high priority"; |
| case CSR_PSKEY_LC_MULTISLOT_HOLDOFF: |
| return "Time till single slot packets are used for resync"; |
| case CSR_PSKEY_FREE_KEY_PIGEON_HOLE: |
| return "Link key store bitfield"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR0: |
| return "Bluetooth address + link key 0"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR1: |
| return "Bluetooth address + link key 1"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR2: |
| return "Bluetooth address + link key 2"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR3: |
| return "Bluetooth address + link key 3"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR4: |
| return "Bluetooth address + link key 4"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR5: |
| return "Bluetooth address + link key 5"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR6: |
| return "Bluetooth address + link key 6"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR7: |
| return "Bluetooth address + link key 7"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR8: |
| return "Bluetooth address + link key 8"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR9: |
| return "Bluetooth address + link key 9"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR10: |
| return "Bluetooth address + link key 10"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR11: |
| return "Bluetooth address + link key 11"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR12: |
| return "Bluetooth address + link key 12"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR13: |
| return "Bluetooth address + link key 13"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR14: |
| return "Bluetooth address + link key 14"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR15: |
| return "Bluetooth address + link key 15"; |
| case CSR_PSKEY_ENC_KEY_LMIN: |
| return "Minimum encryption key length"; |
| case CSR_PSKEY_ENC_KEY_LMAX: |
| return "Maximum encryption key length"; |
| case CSR_PSKEY_LOCAL_SUPPORTED_FEATURES: |
| return "Local supported features block"; |
| case CSR_PSKEY_LM_USE_UNIT_KEY: |
| return "Allow use of unit key for authentication?"; |
| case CSR_PSKEY_HCI_NOP_DISABLE: |
| return "Disable the HCI Command_Status event on boot"; |
| case CSR_PSKEY_LM_MAX_EVENT_FILTERS: |
| return "Maximum number of event filters"; |
| case CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST: |
| return "Allow LM to use enc_mode=2"; |
| case CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE: |
| return "LM sends two LMP_accepted messages in test mode"; |
| case CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME: |
| return "Maximum time we hold a device around page"; |
| case CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME: |
| return "LM period for AFH adaption"; |
| case CSR_PSKEY_AFH_OPTIONS: |
| return "Options to configure AFH"; |
| case CSR_PSKEY_AFH_RSSI_RUN_PERIOD: |
| return "AFH RSSI reading period"; |
| case CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME: |
| return "AFH good channel adding time"; |
| case CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL: |
| return "Complete link if acr barge-in role switch refused"; |
| case CSR_PSKEY_MAX_PRIVATE_KEYS: |
| return "Max private link keys stored"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0: |
| return "Bluetooth address + link key 0"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1: |
| return "Bluetooth address + link key 1"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2: |
| return "Bluetooth address + link key 2"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3: |
| return "Bluetooth address + link key 3"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4: |
| return "Bluetooth address + link key 4"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5: |
| return "Bluetooth address + link key 5"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6: |
| return "Bluetooth address + link key 6"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7: |
| return "Bluetooth address + link key 7"; |
| case CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS: |
| return "Local supported commands"; |
| case CSR_PSKEY_LM_MAX_ABSENCE_INDEX: |
| return "Maximum absence index allowed"; |
| case CSR_PSKEY_DEVICE_NAME: |
| return "Local device's \"user friendly\" name"; |
| case CSR_PSKEY_AFH_RSSI_THRESHOLD: |
| return "AFH RSSI threshold"; |
| case CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL: |
| return "Scan interval in slots for casual scanning"; |
| case CSR_PSKEY_AFH_MIN_MAP_CHANGE: |
| return "The minimum amount to change an AFH map by"; |
| case CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD: |
| return "AFH RSSI reading period when in low power mode"; |
| case CSR_PSKEY_HCI_LMP_LOCAL_VERSION: |
| return "The HCI and LMP version reported locally"; |
| case CSR_PSKEY_LMP_REMOTE_VERSION: |
| return "The LMP version reported remotely"; |
| case CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER: |
| return "Maximum number of queued HCI Hardware Error Events"; |
| case CSR_PSKEY_DFU_ATTRIBUTES: |
| return "DFU attributes"; |
| case CSR_PSKEY_DFU_DETACH_TO: |
| return "DFU detach timeout"; |
| case CSR_PSKEY_DFU_TRANSFER_SIZE: |
| return "DFU transfer size"; |
| case CSR_PSKEY_DFU_ENABLE: |
| return "DFU enable"; |
| case CSR_PSKEY_DFU_LIN_REG_ENABLE: |
| return "Linear Regulator enabled at boot in DFU mode"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB: |
| return "DFU encryption VM application public key MSB"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB: |
| return "DFU encryption VM application public key LSB"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH: |
| return "DFU encryption VM application M dash"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB: |
| return "DFU encryption VM application public key R2N MSB"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB: |
| return "DFU encryption VM application public key R2N LSB"; |
| case CSR_PSKEY_BCSP_LM_PS_BLOCK: |
| return "BCSP link establishment block"; |
| case CSR_PSKEY_HOSTIO_FC_PS_BLOCK: |
| return "HCI flow control block"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO0: |
| return "Host transport channel 0 settings (BCSP ACK)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO1: |
| return "Host transport channel 1 settings (BCSP-LE)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO2: |
| return "Host transport channel 2 settings (BCCMD)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO3: |
| return "Host transport channel 3 settings (HQ)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO4: |
| return "Host transport channel 4 settings (DM)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO5: |
| return "Host transport channel 5 settings (HCI CMD/EVT)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO6: |
| return "Host transport channel 6 settings (HCI ACL)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO7: |
| return "Host transport channel 7 settings (HCI SCO)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO8: |
| return "Host transport channel 8 settings (L2CAP)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO9: |
| return "Host transport channel 9 settings (RFCOMM)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO10: |
| return "Host transport channel 10 settings (SDP)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO11: |
| return "Host transport channel 11 settings (TEST)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO12: |
| return "Host transport channel 12 settings (DFU)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO13: |
| return "Host transport channel 13 settings (VM)"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO14: |
| return "Host transport channel 14 settings"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO15: |
| return "Host transport channel 15 settings"; |
| case CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT: |
| return "UART reset counter timeout"; |
| case CSR_PSKEY_HOSTIO_USE_HCI_EXTN: |
| return "Use hci_extn to route non-hci channels"; |
| case CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC: |
| return "Use command-complete flow control for hci_extn"; |
| case CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE: |
| return "Maximum hci_extn payload size"; |
| case CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT: |
| return "BCSP link establishment conf message count"; |
| case CSR_PSKEY_HOSTIO_MAP_SCO_PCM: |
| return "Map SCO over PCM"; |
| case CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC: |
| return "PCM interface synchronisation is difficult"; |
| case CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD: |
| return "Break poll period (microseconds)"; |
| case CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE: |
| return "Minimum SCO packet size sent to host over UART HCI"; |
| case CSR_PSKEY_HOSTIO_MAP_SCO_CODEC: |
| return "Map SCO over the built-in codec"; |
| case CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST: |
| return "High frequency boost for PCM when transmitting CVSD"; |
| case CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST: |
| return "High frequency boost for PCM when receiving CVSD"; |
| case CSR_PSKEY_PCM_CONFIG32: |
| return "PCM interface settings bitfields"; |
| case CSR_PSKEY_USE_OLD_BCSP_LE: |
| return "Use the old version of BCSP link establishment"; |
| case CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER: |
| return "CVSD uses the new filter if available"; |
| case CSR_PSKEY_PCM_FORMAT: |
| return "PCM data format"; |
| case CSR_PSKEY_CODEC_OUT_GAIN: |
| return "Audio output gain when using built-in codec"; |
| case CSR_PSKEY_CODEC_IN_GAIN: |
| return "Audio input gain when using built-in codec"; |
| case CSR_PSKEY_CODEC_PIO: |
| return "PIO to enable when built-in codec is enabled"; |
| case CSR_PSKEY_PCM_LOW_JITTER_CONFIG: |
| return "PCM interface settings for low jitter master mode"; |
| case CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS: |
| return "Thresholds for SCO PCM buffers"; |
| case CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS: |
| return "Thresholds for SCO HCI buffers"; |
| case CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT: |
| return "Route SCO data to specified slot in pcm frame"; |
| case CSR_PSKEY_UART_BAUDRATE: |
| return "UART Baud rate"; |
| case CSR_PSKEY_UART_CONFIG_BCSP: |
| return "UART configuration when using BCSP"; |
| case CSR_PSKEY_UART_CONFIG_H4: |
| return "UART configuration when using H4"; |
| case CSR_PSKEY_UART_CONFIG_H5: |
| return "UART configuration when using H5"; |
| case CSR_PSKEY_UART_CONFIG_USR: |
| return "UART configuration when under VM control"; |
| case CSR_PSKEY_UART_TX_CRCS: |
| return "Use CRCs for BCSP or H5"; |
| case CSR_PSKEY_UART_ACK_TIMEOUT: |
| return "Acknowledgement timeout for BCSP and H5"; |
| case CSR_PSKEY_UART_TX_MAX_ATTEMPTS: |
| return "Max times to send reliable BCSP or H5 message"; |
| case CSR_PSKEY_UART_TX_WINDOW_SIZE: |
| return "Transmit window size for BCSP and H5"; |
| case CSR_PSKEY_UART_HOST_WAKE: |
| return "UART host wakeup"; |
| case CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT: |
| return "Host interface performance control."; |
| case CSR_PSKEY_PCM_ALWAYS_ENABLE: |
| return "PCM port is always enable when chip is running"; |
| case CSR_PSKEY_UART_HOST_WAKE_SIGNAL: |
| return "Signal to use for uart host wakeup protocol"; |
| case CSR_PSKEY_UART_CONFIG_H4DS: |
| return "UART configuration when using H4DS"; |
| case CSR_PSKEY_H4DS_WAKE_DURATION: |
| return "How long to spend waking the host when using H4DS"; |
| case CSR_PSKEY_H4DS_MAXWU: |
| return "Maximum number of H4DS Wake-Up messages to send"; |
| case CSR_PSKEY_H4DS_LE_TIMER_PERIOD: |
| return "H4DS Link Establishment Tsync and Tconf period"; |
| case CSR_PSKEY_H4DS_TWU_TIMER_PERIOD: |
| return "H4DS Twu timer period"; |
| case CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD: |
| return "H4DS Tuart_idle timer period"; |
| case CSR_PSKEY_ANA_FTRIM: |
| return "Crystal frequency trim"; |
| case CSR_PSKEY_WD_TIMEOUT: |
| return "Watchdog timeout (microseconds)"; |
| case CSR_PSKEY_WD_PERIOD: |
| return "Watchdog period (microseconds)"; |
| case CSR_PSKEY_HOST_INTERFACE: |
| return "Host interface"; |
| case CSR_PSKEY_HQ_HOST_TIMEOUT: |
| return "HQ host command timeout"; |
| case CSR_PSKEY_HQ_ACTIVE: |
| return "Enable host query task?"; |
| case CSR_PSKEY_BCCMD_SECURITY_ACTIVE: |
| return "Enable configuration security"; |
| case CSR_PSKEY_ANA_FREQ: |
| return "Crystal frequency"; |
| case CSR_PSKEY_PIO_PROTECT_MASK: |
| return "Access to PIO pins"; |
| case CSR_PSKEY_PMALLOC_SIZES: |
| return "pmalloc sizes array"; |
| case CSR_PSKEY_UART_BAUD_RATE: |
| return "UART Baud rate (pre 18)"; |
| case CSR_PSKEY_UART_CONFIG: |
| return "UART configuration bitfield"; |
| case CSR_PSKEY_STUB: |
| return "Stub"; |
| case CSR_PSKEY_TXRX_PIO_CONTROL: |
| return "TX and RX PIO control"; |
| case CSR_PSKEY_ANA_RX_LEVEL: |
| return "ANA_RX_LVL register initial value"; |
| case CSR_PSKEY_ANA_RX_FTRIM: |
| return "ANA_RX_FTRIM register initial value"; |
| case CSR_PSKEY_PSBC_DATA_VERSION: |
| return "Persistent store version"; |
| case CSR_PSKEY_PCM0_ATTENUATION: |
| return "Volume control on PCM channel 0"; |
| case CSR_PSKEY_LO_LVL_MAX: |
| return "Maximum value of LO level control register"; |
| case CSR_PSKEY_LO_ADC_AMPL_MIN: |
| return "Minimum value of the LO amplitude measured on the ADC"; |
| case CSR_PSKEY_LO_ADC_AMPL_MAX: |
| return "Maximum value of the LO amplitude measured on the ADC"; |
| case CSR_PSKEY_IQ_TRIM_CHANNEL: |
| return "IQ calibration channel"; |
| case CSR_PSKEY_IQ_TRIM_GAIN: |
| return "IQ calibration gain"; |
| case CSR_PSKEY_IQ_TRIM_ENABLE: |
| return "IQ calibration enable"; |
| case CSR_PSKEY_TX_OFFSET_HALF_MHZ: |
| return "Transmit offset"; |
| case CSR_PSKEY_GBL_MISC_ENABLES: |
| return "Global miscellaneous hardware enables"; |
| case CSR_PSKEY_UART_SLEEP_TIMEOUT: |
| return "Time in ms to deep sleep if nothing received"; |
| case CSR_PSKEY_DEEP_SLEEP_STATE: |
| return "Deep sleep state usage"; |
| case CSR_PSKEY_IQ_ENABLE_PHASE_TRIM: |
| return "IQ phase enable"; |
| case CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD: |
| return "Time for which HCI handle is frozen after link removal"; |
| case CSR_PSKEY_MAX_FROZEN_HCI_HANDLES: |
| return "Maximum number of frozen HCI handles"; |
| case CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY: |
| return "Delay from freezing buf handle to deleting page table"; |
| case CSR_PSKEY_IQ_TRIM_PIO_SETTINGS: |
| return "IQ PIO settings"; |
| case CSR_PSKEY_USE_EXTERNAL_CLOCK: |
| return "Device uses an external clock"; |
| case CSR_PSKEY_DEEP_SLEEP_WAKE_CTS: |
| return "Exit deep sleep on CTS line activity"; |
| case CSR_PSKEY_FC_HC2H_FLUSH_DELAY: |
| return "Delay from disconnect to flushing HC->H FC tokens"; |
| case CSR_PSKEY_RX_HIGHSIDE: |
| return "Disable the HIGHSIDE bit in ANA_CONFIG"; |
| case CSR_PSKEY_TX_PRE_LVL: |
| return "TX pre-amplifier level"; |
| case CSR_PSKEY_RX_SINGLE_ENDED: |
| return "RX single ended"; |
| case CSR_PSKEY_TX_FILTER_CONFIG: |
| return "TX filter configuration"; |
| case CSR_PSKEY_CLOCK_REQUEST_ENABLE: |
| return "External clock request enable"; |
| case CSR_PSKEY_RX_MIN_ATTEN: |
| return "Minimum attenuation allowed for receiver"; |
| case CSR_PSKEY_XTAL_TARGET_AMPLITUDE: |
| return "Crystal target amplitude"; |
| case CSR_PSKEY_PCM_MIN_CPU_CLOCK: |
| return "Minimum CPU clock speed with PCM port running"; |
| case CSR_PSKEY_HOST_INTERFACE_PIO_USB: |
| return "USB host interface selection PIO line"; |
| case CSR_PSKEY_CPU_IDLE_MODE: |
| return "CPU idle mode when radio is active"; |
| case CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS: |
| return "Deep sleep clears the UART RTS line"; |
| case CSR_PSKEY_RF_RESONANCE_TRIM: |
| return "Frequency trim for IQ and LNA resonant circuits"; |
| case CSR_PSKEY_DEEP_SLEEP_PIO_WAKE: |
| return "PIO line to wake the chip from deep sleep"; |
| case CSR_PSKEY_DRAIN_BORE_TIMERS: |
| return "Energy consumption measurement settings"; |
| case CSR_PSKEY_DRAIN_TX_POWER_BASE: |
| return "Energy consumption measurement settings"; |
| case CSR_PSKEY_MODULE_ID: |
| return "Module serial number"; |
| case CSR_PSKEY_MODULE_DESIGN: |
| return "Module design ID"; |
| case CSR_PSKEY_MODULE_SECURITY_CODE: |
| return "Module security code"; |
| case CSR_PSKEY_VM_DISABLE: |
| return "VM disable"; |
| case CSR_PSKEY_MOD_MANUF0: |
| return "Module manufactuer data 0"; |
| case CSR_PSKEY_MOD_MANUF1: |
| return "Module manufactuer data 1"; |
| case CSR_PSKEY_MOD_MANUF2: |
| return "Module manufactuer data 2"; |
| case CSR_PSKEY_MOD_MANUF3: |
| return "Module manufactuer data 3"; |
| case CSR_PSKEY_MOD_MANUF4: |
| return "Module manufactuer data 4"; |
| case CSR_PSKEY_MOD_MANUF5: |
| return "Module manufactuer data 5"; |
| case CSR_PSKEY_MOD_MANUF6: |
| return "Module manufactuer data 6"; |
| case CSR_PSKEY_MOD_MANUF7: |
| return "Module manufactuer data 7"; |
| case CSR_PSKEY_MOD_MANUF8: |
| return "Module manufactuer data 8"; |
| case CSR_PSKEY_MOD_MANUF9: |
| return "Module manufactuer data 9"; |
| case CSR_PSKEY_DUT_VM_DISABLE: |
| return "VM disable when entering radiotest modes"; |
| case CSR_PSKEY_USR0: |
| return "User configuration data 0"; |
| case CSR_PSKEY_USR1: |
| return "User configuration data 1"; |
| case CSR_PSKEY_USR2: |
| return "User configuration data 2"; |
| case CSR_PSKEY_USR3: |
| return "User configuration data 3"; |
| case CSR_PSKEY_USR4: |
| return "User configuration data 4"; |
| case CSR_PSKEY_USR5: |
| return "User configuration data 5"; |
| case CSR_PSKEY_USR6: |
| return "User configuration data 6"; |
| case CSR_PSKEY_USR7: |
| return "User configuration data 7"; |
| case CSR_PSKEY_USR8: |
| return "User configuration data 8"; |
| case CSR_PSKEY_USR9: |
| return "User configuration data 9"; |
| case CSR_PSKEY_USR10: |
| return "User configuration data 10"; |
| case CSR_PSKEY_USR11: |
| return "User configuration data 11"; |
| case CSR_PSKEY_USR12: |
| return "User configuration data 12"; |
| case CSR_PSKEY_USR13: |
| return "User configuration data 13"; |
| case CSR_PSKEY_USR14: |
| return "User configuration data 14"; |
| case CSR_PSKEY_USR15: |
| return "User configuration data 15"; |
| case CSR_PSKEY_USR16: |
| return "User configuration data 16"; |
| case CSR_PSKEY_USR17: |
| return "User configuration data 17"; |
| case CSR_PSKEY_USR18: |
| return "User configuration data 18"; |
| case CSR_PSKEY_USR19: |
| return "User configuration data 19"; |
| case CSR_PSKEY_USR20: |
| return "User configuration data 20"; |
| case CSR_PSKEY_USR21: |
| return "User configuration data 21"; |
| case CSR_PSKEY_USR22: |
| return "User configuration data 22"; |
| case CSR_PSKEY_USR23: |
| return "User configuration data 23"; |
| case CSR_PSKEY_USR24: |
| return "User configuration data 24"; |
| case CSR_PSKEY_USR25: |
| return "User configuration data 25"; |
| case CSR_PSKEY_USR26: |
| return "User configuration data 26"; |
| case CSR_PSKEY_USR27: |
| return "User configuration data 27"; |
| case CSR_PSKEY_USR28: |
| return "User configuration data 28"; |
| case CSR_PSKEY_USR29: |
| return "User configuration data 29"; |
| case CSR_PSKEY_USR30: |
| return "User configuration data 30"; |
| case CSR_PSKEY_USR31: |
| return "User configuration data 31"; |
| case CSR_PSKEY_USR32: |
| return "User configuration data 32"; |
| case CSR_PSKEY_USR33: |
| return "User configuration data 33"; |
| case CSR_PSKEY_USR34: |
| return "User configuration data 34"; |
| case CSR_PSKEY_USR35: |
| return "User configuration data 35"; |
| case CSR_PSKEY_USR36: |
| return "User configuration data 36"; |
| case CSR_PSKEY_USR37: |
| return "User configuration data 37"; |
| case CSR_PSKEY_USR38: |
| return "User configuration data 38"; |
| case CSR_PSKEY_USR39: |
| return "User configuration data 39"; |
| case CSR_PSKEY_USR40: |
| return "User configuration data 40"; |
| case CSR_PSKEY_USR41: |
| return "User configuration data 41"; |
| case CSR_PSKEY_USR42: |
| return "User configuration data 42"; |
| case CSR_PSKEY_USR43: |
| return "User configuration data 43"; |
| case CSR_PSKEY_USR44: |
| return "User configuration data 44"; |
| case CSR_PSKEY_USR45: |
| return "User configuration data 45"; |
| case CSR_PSKEY_USR46: |
| return "User configuration data 46"; |
| case CSR_PSKEY_USR47: |
| return "User configuration data 47"; |
| case CSR_PSKEY_USR48: |
| return "User configuration data 48"; |
| case CSR_PSKEY_USR49: |
| return "User configuration data 49"; |
| case CSR_PSKEY_USB_VERSION: |
| return "USB specification version number"; |
| case CSR_PSKEY_USB_DEVICE_CLASS_CODES: |
| return "USB device class codes"; |
| case CSR_PSKEY_USB_VENDOR_ID: |
| return "USB vendor identifier"; |
| case CSR_PSKEY_USB_PRODUCT_ID: |
| return "USB product identifier"; |
| case CSR_PSKEY_USB_MANUF_STRING: |
| return "USB manufacturer string"; |
| case CSR_PSKEY_USB_PRODUCT_STRING: |
| return "USB product string"; |
| case CSR_PSKEY_USB_SERIAL_NUMBER_STRING: |
| return "USB serial number string"; |
| case CSR_PSKEY_USB_CONFIG_STRING: |
| return "USB configuration string"; |
| case CSR_PSKEY_USB_ATTRIBUTES: |
| return "USB attributes bitmap"; |
| case CSR_PSKEY_USB_MAX_POWER: |
| return "USB device maximum power consumption"; |
| case CSR_PSKEY_USB_BT_IF_CLASS_CODES: |
| return "USB Bluetooth interface class codes"; |
| case CSR_PSKEY_USB_LANGID: |
| return "USB language strings supported"; |
| case CSR_PSKEY_USB_DFU_CLASS_CODES: |
| return "USB DFU class codes block"; |
| case CSR_PSKEY_USB_DFU_PRODUCT_ID: |
| return "USB DFU product ID"; |
| case CSR_PSKEY_USB_PIO_DETACH: |
| return "USB detach/attach PIO line"; |
| case CSR_PSKEY_USB_PIO_WAKEUP: |
| return "USB wakeup PIO line"; |
| case CSR_PSKEY_USB_PIO_PULLUP: |
| return "USB D+ pullup PIO line"; |
| case CSR_PSKEY_USB_PIO_VBUS: |
| return "USB VBus detection PIO Line"; |
| case CSR_PSKEY_USB_PIO_WAKE_TIMEOUT: |
| return "Timeout for assertion of USB PIO wake signal"; |
| case CSR_PSKEY_USB_PIO_RESUME: |
| return "PIO signal used in place of bus resume"; |
| case CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES: |
| return "USB Bluetooth SCO interface class codes"; |
| case CSR_PSKEY_USB_SUSPEND_PIO_LEVEL: |
| return "USB PIO levels to set when suspended"; |
| case CSR_PSKEY_USB_SUSPEND_PIO_DIR: |
| return "USB PIO I/O directions to set when suspended"; |
| case CSR_PSKEY_USB_SUSPEND_PIO_MASK: |
| return "USB PIO lines to be set forcibly in suspend"; |
| case CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE: |
| return "The maxmimum packet size for USB endpoint 0"; |
| case CSR_PSKEY_USB_CONFIG: |
| return "USB config params for new chips (>bc2)"; |
| case CSR_PSKEY_RADIOTEST_ATTEN_INIT: |
| return "Radio test initial attenuator"; |
| case CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME: |
| return "IQ first calibration period in test"; |
| case CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME: |
| return "IQ subsequent calibration period in test"; |
| case CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE: |
| return "LO_LVL calibration enable"; |
| case CSR_PSKEY_RADIOTEST_DISABLE_MODULATION: |
| return "Disable modulation during radiotest transmissions"; |
| case CSR_PSKEY_RFCOMM_FCON_THRESHOLD: |
| return "RFCOMM aggregate flow control on threshold"; |
| case CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD: |
| return "RFCOMM aggregate flow control off threshold"; |
| case CSR_PSKEY_IPV6_STATIC_ADDR: |
| return "Static IPv6 address"; |
| case CSR_PSKEY_IPV4_STATIC_ADDR: |
| return "Static IPv4 address"; |
| case CSR_PSKEY_IPV6_STATIC_PREFIX_LEN: |
| return "Static IPv6 prefix length"; |
| case CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR: |
| return "Static IPv6 router address"; |
| case CSR_PSKEY_IPV4_STATIC_SUBNET_MASK: |
| return "Static IPv4 subnet mask"; |
| case CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR: |
| return "Static IPv4 router address"; |
| case CSR_PSKEY_MDNS_NAME: |
| return "Multicast DNS name"; |
| case CSR_PSKEY_FIXED_PIN: |
| return "Fixed PIN"; |
| case CSR_PSKEY_MDNS_PORT: |
| return "Multicast DNS port"; |
| case CSR_PSKEY_MDNS_TTL: |
| return "Multicast DNS TTL"; |
| case CSR_PSKEY_MDNS_IPV4_ADDR: |
| return "Multicast DNS IPv4 address"; |
| case CSR_PSKEY_ARP_CACHE_TIMEOUT: |
| return "ARP cache timeout"; |
| case CSR_PSKEY_HFP_POWER_TABLE: |
| return "HFP power table"; |
| case CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS: |
| return "Energy consumption estimation timer counters"; |
| case CSR_PSKEY_DRAIN_BORE_COUNTERS: |
| return "Energy consumption estimation counters"; |
| case CSR_PSKEY_LOOP_FILTER_TRIM: |
| return "Trim value to optimise loop filter"; |
| case CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK: |
| return "Energy consumption estimation current peak"; |
| case CSR_PSKEY_VM_E2_CACHE_LIMIT: |
| return "Maximum RAM for caching EEPROM VM application"; |
| case CSR_PSKEY_FORCE_16MHZ_REF_PIO: |
| return "PIO line to force 16 MHz reference to be assumed"; |
| case CSR_PSKEY_CDMA_LO_REF_LIMITS: |
| return "Local oscillator frequency reference limits for CDMA"; |
| case CSR_PSKEY_CDMA_LO_ERROR_LIMITS: |
| return "Local oscillator frequency error limits for CDMA"; |
| case CSR_PSKEY_CLOCK_STARTUP_DELAY: |
| return "Clock startup delay in milliseconds"; |
| case CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR: |
| return "Deep sleep clock correction factor"; |
| case CSR_PSKEY_TEMPERATURE_CALIBRATION: |
| return "Temperature in deg C for a given internal setting"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA: |
| return "Temperature for given internal PA adjustment"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL: |
| return "Temperature for a given TX_PRE_LVL adjustment"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB: |
| return "Temperature for a given TX_BB adjustment"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM: |
| return "Temperature for given crystal trim adjustment"; |
| case CSR_PSKEY_TEST_DELTA_OFFSET: |
| return "Frequency offset applied to synthesiser in test mode"; |
| case CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET: |
| return "Receiver dynamic level offset depending on channel"; |
| case CSR_PSKEY_TEST_FORCE_OFFSET: |
| return "Force use of exact value in PSKEY_TEST_DELTA_OFFSET"; |
| case CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS: |
| return "Trap bad division ratios in radio frequency tables"; |
| case CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS: |
| return "LO frequency reference limits for CDMA in radiotest"; |
| case CSR_PSKEY_INITIAL_BOOTMODE: |
| return "Initial device bootmode"; |
| case CSR_PSKEY_ONCHIP_HCI_CLIENT: |
| return "HCI traffic routed internally"; |
| case CSR_PSKEY_RX_ATTEN_BACKOFF: |
| return "Receiver attenuation back-off"; |
| case CSR_PSKEY_RX_ATTEN_UPDATE_RATE: |
| return "Receiver attenuation update rate"; |
| case CSR_PSKEY_SYNTH_TXRX_THRESHOLDS: |
| return "Local oscillator tuning voltage limits for tx and rx"; |
| case CSR_PSKEY_MIN_WAIT_STATES: |
| return "Flash wait state indicator"; |
| case CSR_PSKEY_RSSI_CORRECTION: |
| return "RSSI correction factor."; |
| case CSR_PSKEY_SCHED_THROTTLE_TIMEOUT: |
| return "Scheduler performance control."; |
| case CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK: |
| return "Deep sleep uses external 32 kHz clock source"; |
| case CSR_PSKEY_TRIM_RADIO_FILTERS: |
| return "Trim rx and tx radio filters if true."; |
| case CSR_PSKEY_TRANSMIT_OFFSET: |
| return "Transmit offset in units of 62.5 kHz"; |
| case CSR_PSKEY_USB_VM_CONTROL: |
| return "VM application will supply USB descriptors"; |
| case CSR_PSKEY_MR_ANA_RX_FTRIM: |
| return "Medium rate value for the ANA_RX_FTRIM register"; |
| case CSR_PSKEY_I2C_CONFIG: |
| return "I2C configuration"; |
| case CSR_PSKEY_IQ_LVL_RX: |
| return "IQ demand level for reception"; |
| case CSR_PSKEY_MR_TX_FILTER_CONFIG: |
| return "TX filter configuration used for enhanced data rate"; |
| case CSR_PSKEY_MR_TX_CONFIG2: |
| return "TX filter configuration used for enhanced data rate"; |
| case CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET: |
| return "Don't reset bootmode if USB host resets"; |
| case CSR_PSKEY_LC_USE_THROTTLING: |
| return "Adjust packet selection on packet error rate"; |
| case CSR_PSKEY_CHARGER_TRIM: |
| return "Trim value for the current charger"; |
| case CSR_PSKEY_CLOCK_REQUEST_FEATURES: |
| return "Clock request is tristated if enabled"; |
| case CSR_PSKEY_TRANSMIT_OFFSET_CLASS1: |
| return "Transmit offset / 62.5 kHz for class 1 radios"; |
| case CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO: |
| return "PIO line asserted in class1 operation to avoid PA"; |
| case CSR_PSKEY_MR_PIO_CONFIG: |
| return "PIO line asserted in class1 operation to avoid PA"; |
| case CSR_PSKEY_UART_CONFIG2: |
| return "The UART Sampling point"; |
| case CSR_PSKEY_CLASS1_IQ_LVL: |
| return "IQ demand level for class 1 power level"; |
| case CSR_PSKEY_CLASS1_TX_CONFIG2: |
| return "TX filter configuration used for class 1 tx power"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1: |
| return "Temperature for given internal PA adjustment"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1: |
| return "Temperature for given internal PA adjustment"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR: |
| return "Temperature adjustment for TX_PRE_LVL in EDR"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER: |
| return "Temperature for a given TX_BB in EDR header"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD: |
| return "Temperature for a given TX_BB in EDR payload"; |
| case CSR_PSKEY_RX_MR_EQ_TAPS: |
| return "Adjust receiver configuration for EDR"; |
| case CSR_PSKEY_TX_PRE_LVL_CLASS1: |
| return "TX pre-amplifier level in class 1 operation"; |
| case CSR_PSKEY_ANALOGUE_ATTENUATOR: |
| return "TX analogue attenuator setting"; |
| case CSR_PSKEY_MR_RX_FILTER_TRIM: |
| return "Trim for receiver used in EDR."; |
| case CSR_PSKEY_MR_RX_FILTER_RESPONSE: |
| return "Filter response for receiver used in EDR."; |
| case CSR_PSKEY_PIO_WAKEUP_STATE: |
| return "PIO deep sleep wake up state "; |
| case CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP: |
| return "TX IF atten off temperature when using EDR."; |
| case CSR_PSKEY_LO_DIV_LATCH_BYPASS: |
| return "Bypass latch for LO dividers"; |
| case CSR_PSKEY_LO_VCO_STANDBY: |
| return "Use standby mode for the LO VCO"; |
| case CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT: |
| return "Slow clock sampling filter constant"; |
| case CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER: |
| return "Slow clock filter fractional threshold"; |
| case CSR_PSKEY_USB_ATTRIBUTES_POWER: |
| return "USB self powered"; |
| case CSR_PSKEY_USB_ATTRIBUTES_WAKEUP: |
| return "USB responds to wake-up"; |
| case CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT: |
| return "DFU manifestation tolerant"; |
| case CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD: |
| return "DFU can upload"; |
| case CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD: |
| return "DFU can download"; |
| case CSR_PSKEY_UART_CONFIG_STOP_BITS: |
| return "UART: stop bits"; |
| case CSR_PSKEY_UART_CONFIG_PARITY_BIT: |
| return "UART: parity bit"; |
| case CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN: |
| return "UART: hardware flow control"; |
| case CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN: |
| return "UART: RTS auto-enabled"; |
| case CSR_PSKEY_UART_CONFIG_RTS: |
| return "UART: RTS asserted"; |
| case CSR_PSKEY_UART_CONFIG_TX_ZERO_EN: |
| return "UART: TX zero enable"; |
| case CSR_PSKEY_UART_CONFIG_NON_BCSP_EN: |
| return "UART: enable BCSP-specific hardware"; |
| case CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY: |
| return "UART: RX rate delay"; |
| case CSR_PSKEY_UART_SEQ_TIMEOUT: |
| return "UART: BCSP ack timeout"; |
| case CSR_PSKEY_UART_SEQ_RETRIES: |
| return "UART: retry limit in sequencing layer"; |
| case CSR_PSKEY_UART_SEQ_WINSIZE: |
| return "UART: BCSP transmit window size"; |
| case CSR_PSKEY_UART_USE_CRC_ON_TX: |
| return "UART: use BCSP CRCs"; |
| case CSR_PSKEY_UART_HOST_INITIAL_STATE: |
| return "UART: initial host state"; |
| case CSR_PSKEY_UART_HOST_ATTENTION_SPAN: |
| return "UART: host attention span"; |
| case CSR_PSKEY_UART_HOST_WAKEUP_TIME: |
| return "UART: host wakeup time"; |
| case CSR_PSKEY_UART_HOST_WAKEUP_WAIT: |
| return "UART: host wakeup wait"; |
| case CSR_PSKEY_BCSP_LM_MODE: |
| return "BCSP link establishment mode"; |
| case CSR_PSKEY_BCSP_LM_SYNC_RETRIES: |
| return "BCSP link establishment sync retries"; |
| case CSR_PSKEY_BCSP_LM_TSHY: |
| return "BCSP link establishment Tshy"; |
| case CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS: |
| return "DFU mode UART: stop bits"; |
| case CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT: |
| return "DFU mode UART: parity bit"; |
| case CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN: |
| return "DFU mode UART: hardware flow control"; |
| case CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN: |
| return "DFU mode UART: RTS auto-enabled"; |
| case CSR_PSKEY_UART_DFU_CONFIG_RTS: |
| return "DFU mode UART: RTS asserted"; |
| case CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN: |
| return "DFU mode UART: TX zero enable"; |
| case CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN: |
| return "DFU mode UART: enable BCSP-specific hardware"; |
| case CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY: |
| return "DFU mode UART: RX rate delay"; |
| case CSR_PSKEY_AMUX_AIO0: |
| return "Multiplexer for AIO 0"; |
| case CSR_PSKEY_AMUX_AIO1: |
| return "Multiplexer for AIO 1"; |
| case CSR_PSKEY_AMUX_AIO2: |
| return "Multiplexer for AIO 2"; |
| case CSR_PSKEY_AMUX_AIO3: |
| return "Multiplexer for AIO 3"; |
| case CSR_PSKEY_LOCAL_NAME_SIMPLIFIED: |
| return "Local Name (simplified)"; |
| case CSR_PSKEY_EXTENDED_STUB: |
| return "Extended stub"; |
| default: |
| return "Unknown"; |
| } |
| } |
| |
| char *csr_pskeytoval(uint16_t pskey) |
| { |
| switch (pskey) { |
| case CSR_PSKEY_BDADDR: |
| return "BDADDR"; |
| case CSR_PSKEY_COUNTRYCODE: |
| return "COUNTRYCODE"; |
| case CSR_PSKEY_CLASSOFDEVICE: |
| return "CLASSOFDEVICE"; |
| case CSR_PSKEY_DEVICE_DRIFT: |
| return "DEVICE_DRIFT"; |
| case CSR_PSKEY_DEVICE_JITTER: |
| return "DEVICE_JITTER"; |
| case CSR_PSKEY_MAX_ACLS: |
| return "MAX_ACLS"; |
| case CSR_PSKEY_MAX_SCOS: |
| return "MAX_SCOS"; |
| case CSR_PSKEY_MAX_REMOTE_MASTERS: |
| return "MAX_REMOTE_MASTERS"; |
| case CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY: |
| return "ENABLE_MASTERY_WITH_SLAVERY"; |
| case CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN: |
| return "H_HC_FC_MAX_ACL_PKT_LEN"; |
| case CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN: |
| return "H_HC_FC_MAX_SCO_PKT_LEN"; |
| case CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS: |
| return "H_HC_FC_MAX_ACL_PKTS"; |
| case CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS: |
| return "H_HC_FC_MAX_SCO_PKTS"; |
| case CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK: |
| return "LC_FC_BUFFER_LOW_WATER_MARK"; |
| case CSR_PSKEY_LC_MAX_TX_POWER: |
| return "LC_MAX_TX_POWER"; |
| case CSR_PSKEY_TX_GAIN_RAMP: |
| return "TX_GAIN_RAMP"; |
| case CSR_PSKEY_LC_POWER_TABLE: |
| return "LC_POWER_TABLE"; |
| case CSR_PSKEY_LC_PEER_POWER_PERIOD: |
| return "LC_PEER_POWER_PERIOD"; |
| case CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK: |
| return "LC_FC_POOLS_LOW_WATER_MARK"; |
| case CSR_PSKEY_LC_DEFAULT_TX_POWER: |
| return "LC_DEFAULT_TX_POWER"; |
| case CSR_PSKEY_LC_RSSI_GOLDEN_RANGE: |
| return "LC_RSSI_GOLDEN_RANGE"; |
| case CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK: |
| return "LC_COMBO_DISABLE_PIO_MASK"; |
| case CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK: |
| return "LC_COMBO_PRIORITY_PIO_MASK"; |
| case CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE: |
| return "LC_COMBO_DOT11_CHANNEL_PIO_BASE"; |
| case CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS: |
| return "LC_COMBO_DOT11_BLOCK_CHANNELS"; |
| case CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI: |
| return "LC_MAX_TX_POWER_NO_RSSI"; |
| case CSR_PSKEY_LC_CONNECTION_RX_WINDOW: |
| return "LC_CONNECTION_RX_WINDOW"; |
| case CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE: |
| return "LC_COMBO_DOT11_TX_PROTECTION_MODE"; |
| case CSR_PSKEY_LC_ENHANCED_POWER_TABLE: |
| return "LC_ENHANCED_POWER_TABLE"; |
| case CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG: |
| return "LC_WIDEBAND_RSSI_CONFIG"; |
| case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD: |
| return "LC_COMBO_DOT11_PRIORITY_LEAD"; |
| case CSR_PSKEY_BT_CLOCK_INIT: |
| return "BT_CLOCK_INIT"; |
| case CSR_PSKEY_TX_MR_MOD_DELAY: |
| return "TX_MR_MOD_DELAY"; |
| case CSR_PSKEY_RX_MR_SYNC_TIMING: |
| return "RX_MR_SYNC_TIMING"; |
| case CSR_PSKEY_RX_MR_SYNC_CONFIG: |
| return "RX_MR_SYNC_CONFIG"; |
| case CSR_PSKEY_LC_LOST_SYNC_SLOTS: |
| return "LC_LOST_SYNC_SLOTS"; |
| case CSR_PSKEY_RX_MR_SAMP_CONFIG: |
| return "RX_MR_SAMP_CONFIG"; |
| case CSR_PSKEY_AGC_HYST_LEVELS: |
| return "AGC_HYST_LEVELS"; |
| case CSR_PSKEY_RX_LEVEL_LOW_SIGNAL: |
| return "RX_LEVEL_LOW_SIGNAL"; |
| case CSR_PSKEY_AGC_IQ_LVL_VALUES: |
| return "AGC_IQ_LVL_VALUES"; |
| case CSR_PSKEY_MR_FTRIM_OFFSET_12DB: |
| return "MR_FTRIM_OFFSET_12DB"; |
| case CSR_PSKEY_MR_FTRIM_OFFSET_6DB: |
| return "MR_FTRIM_OFFSET_6DB"; |
| case CSR_PSKEY_NO_CAL_ON_BOOT: |
| return "NO_CAL_ON_BOOT"; |
| case CSR_PSKEY_RSSI_HI_TARGET: |
| return "RSSI_HI_TARGET"; |
| case CSR_PSKEY_PREFERRED_MIN_ATTENUATION: |
| return "PREFERRED_MIN_ATTENUATION"; |
| case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE: |
| return "LC_COMBO_DOT11_PRIORITY_OVERRIDE"; |
| case CSR_PSKEY_LC_MULTISLOT_HOLDOFF: |
| return "LC_MULTISLOT_HOLDOFF"; |
| case CSR_PSKEY_FREE_KEY_PIGEON_HOLE: |
| return "FREE_KEY_PIGEON_HOLE"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR0: |
| return "LINK_KEY_BD_ADDR0"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR1: |
| return "LINK_KEY_BD_ADDR1"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR2: |
| return "LINK_KEY_BD_ADDR2"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR3: |
| return "LINK_KEY_BD_ADDR3"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR4: |
| return "LINK_KEY_BD_ADDR4"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR5: |
| return "LINK_KEY_BD_ADDR5"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR6: |
| return "LINK_KEY_BD_ADDR6"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR7: |
| return "LINK_KEY_BD_ADDR7"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR8: |
| return "LINK_KEY_BD_ADDR8"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR9: |
| return "LINK_KEY_BD_ADDR9"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR10: |
| return "LINK_KEY_BD_ADDR10"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR11: |
| return "LINK_KEY_BD_ADDR11"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR12: |
| return "LINK_KEY_BD_ADDR12"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR13: |
| return "LINK_KEY_BD_ADDR13"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR14: |
| return "LINK_KEY_BD_ADDR14"; |
| case CSR_PSKEY_LINK_KEY_BD_ADDR15: |
| return "LINK_KEY_BD_ADDR15"; |
| case CSR_PSKEY_ENC_KEY_LMIN: |
| return "ENC_KEY_LMIN"; |
| case CSR_PSKEY_ENC_KEY_LMAX: |
| return "ENC_KEY_LMAX"; |
| case CSR_PSKEY_LOCAL_SUPPORTED_FEATURES: |
| return "LOCAL_SUPPORTED_FEATURES"; |
| case CSR_PSKEY_LM_USE_UNIT_KEY: |
| return "LM_USE_UNIT_KEY"; |
| case CSR_PSKEY_HCI_NOP_DISABLE: |
| return "HCI_NOP_DISABLE"; |
| case CSR_PSKEY_LM_MAX_EVENT_FILTERS: |
| return "LM_MAX_EVENT_FILTERS"; |
| case CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST: |
| return "LM_USE_ENC_MODE_BROADCAST"; |
| case CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE: |
| return "LM_TEST_SEND_ACCEPTED_TWICE"; |
| case CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME: |
| return "LM_MAX_PAGE_HOLD_TIME"; |
| case CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME: |
| return "AFH_ADAPTATION_RESPONSE_TIME"; |
| case CSR_PSKEY_AFH_OPTIONS: |
| return "AFH_OPTIONS"; |
| case CSR_PSKEY_AFH_RSSI_RUN_PERIOD: |
| return "AFH_RSSI_RUN_PERIOD"; |
| case CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME: |
| return "AFH_REENABLE_CHANNEL_TIME"; |
| case CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL: |
| return "NO_DROP_ON_ACR_MS_FAIL"; |
| case CSR_PSKEY_MAX_PRIVATE_KEYS: |
| return "MAX_PRIVATE_KEYS"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0: |
| return "PRIVATE_LINK_KEY_BD_ADDR0"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1: |
| return "PRIVATE_LINK_KEY_BD_ADDR1"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2: |
| return "PRIVATE_LINK_KEY_BD_ADDR2"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3: |
| return "PRIVATE_LINK_KEY_BD_ADDR3"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4: |
| return "PRIVATE_LINK_KEY_BD_ADDR4"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5: |
| return "PRIVATE_LINK_KEY_BD_ADDR5"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6: |
| return "PRIVATE_LINK_KEY_BD_ADDR6"; |
| case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7: |
| return "PRIVATE_LINK_KEY_BD_ADDR7"; |
| case CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS: |
| return "LOCAL_SUPPORTED_COMMANDS"; |
| case CSR_PSKEY_LM_MAX_ABSENCE_INDEX: |
| return "LM_MAX_ABSENCE_INDEX"; |
| case CSR_PSKEY_DEVICE_NAME: |
| return "DEVICE_NAME"; |
| case CSR_PSKEY_AFH_RSSI_THRESHOLD: |
| return "AFH_RSSI_THRESHOLD"; |
| case CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL: |
| return "LM_CASUAL_SCAN_INTERVAL"; |
| case CSR_PSKEY_AFH_MIN_MAP_CHANGE: |
| return "AFH_MIN_MAP_CHANGE"; |
| case CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD: |
| return "AFH_RSSI_LP_RUN_PERIOD"; |
| case CSR_PSKEY_HCI_LMP_LOCAL_VERSION: |
| return "HCI_LMP_LOCAL_VERSION"; |
| case CSR_PSKEY_LMP_REMOTE_VERSION: |
| return "LMP_REMOTE_VERSION"; |
| case CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER: |
| return "HOLD_ERROR_MESSAGE_NUMBER"; |
| case CSR_PSKEY_DFU_ATTRIBUTES: |
| return "DFU_ATTRIBUTES"; |
| case CSR_PSKEY_DFU_DETACH_TO: |
| return "DFU_DETACH_TO"; |
| case CSR_PSKEY_DFU_TRANSFER_SIZE: |
| return "DFU_TRANSFER_SIZE"; |
| case CSR_PSKEY_DFU_ENABLE: |
| return "DFU_ENABLE"; |
| case CSR_PSKEY_DFU_LIN_REG_ENABLE: |
| return "DFU_LIN_REG_ENABLE"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB: |
| return "DFUENC_VMAPP_PK_MODULUS_MSB"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB: |
| return "DFUENC_VMAPP_PK_MODULUS_LSB"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH: |
| return "DFUENC_VMAPP_PK_M_DASH"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB: |
| return "DFUENC_VMAPP_PK_R2N_MSB"; |
| case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB: |
| return "DFUENC_VMAPP_PK_R2N_LSB"; |
| case CSR_PSKEY_BCSP_LM_PS_BLOCK: |
| return "BCSP_LM_PS_BLOCK"; |
| case CSR_PSKEY_HOSTIO_FC_PS_BLOCK: |
| return "HOSTIO_FC_PS_BLOCK"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO0: |
| return "HOSTIO_PROTOCOL_INFO0"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO1: |
| return "HOSTIO_PROTOCOL_INFO1"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO2: |
| return "HOSTIO_PROTOCOL_INFO2"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO3: |
| return "HOSTIO_PROTOCOL_INFO3"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO4: |
| return "HOSTIO_PROTOCOL_INFO4"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO5: |
| return "HOSTIO_PROTOCOL_INFO5"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO6: |
| return "HOSTIO_PROTOCOL_INFO6"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO7: |
| return "HOSTIO_PROTOCOL_INFO7"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO8: |
| return "HOSTIO_PROTOCOL_INFO8"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO9: |
| return "HOSTIO_PROTOCOL_INFO9"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO10: |
| return "HOSTIO_PROTOCOL_INFO10"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO11: |
| return "HOSTIO_PROTOCOL_INFO11"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO12: |
| return "HOSTIO_PROTOCOL_INFO12"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO13: |
| return "HOSTIO_PROTOCOL_INFO13"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO14: |
| return "HOSTIO_PROTOCOL_INFO14"; |
| case CSR_PSKEY_HOSTIO_PROTOCOL_INFO15: |
| return "HOSTIO_PROTOCOL_INFO15"; |
| case CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT: |
| return "HOSTIO_UART_RESET_TIMEOUT"; |
| case CSR_PSKEY_HOSTIO_USE_HCI_EXTN: |
| return "HOSTIO_USE_HCI_EXTN"; |
| case CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC: |
| return "HOSTIO_USE_HCI_EXTN_CCFC"; |
| case CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE: |
| return "HOSTIO_HCI_EXTN_PAYLOAD_SIZE"; |
| case CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT: |
| return "BCSP_LM_CNF_CNT_LIMIT"; |
| case CSR_PSKEY_HOSTIO_MAP_SCO_PCM: |
| return "HOSTIO_MAP_SCO_PCM"; |
| case CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC: |
| return "HOSTIO_AWKWARD_PCM_SYNC"; |
| case CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD: |
| return "HOSTIO_BREAK_POLL_PERIOD"; |
| case CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE: |
| return "HOSTIO_MIN_UART_HCI_SCO_SIZE"; |
| case CSR_PSKEY_HOSTIO_MAP_SCO_CODEC: |
| return "HOSTIO_MAP_SCO_CODEC"; |
| case CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST: |
| return "PCM_CVSD_TX_HI_FREQ_BOOST"; |
| case CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST: |
| return "PCM_CVSD_RX_HI_FREQ_BOOST"; |
| case CSR_PSKEY_PCM_CONFIG32: |
| return "PCM_CONFIG32"; |
| case CSR_PSKEY_USE_OLD_BCSP_LE: |
| return "USE_OLD_BCSP_LE"; |
| case CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER: |
| return "PCM_CVSD_USE_NEW_FILTER"; |
| case CSR_PSKEY_PCM_FORMAT: |
| return "PCM_FORMAT"; |
| case CSR_PSKEY_CODEC_OUT_GAIN: |
| return "CODEC_OUT_GAIN"; |
| case CSR_PSKEY_CODEC_IN_GAIN: |
| return "CODEC_IN_GAIN"; |
| case CSR_PSKEY_CODEC_PIO: |
| return "CODEC_PIO"; |
| case CSR_PSKEY_PCM_LOW_JITTER_CONFIG: |
| return "PCM_LOW_JITTER_CONFIG"; |
| case CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS: |
| return "HOSTIO_SCO_PCM_THRESHOLDS"; |
| case CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS: |
| return "HOSTIO_SCO_HCI_THRESHOLDS"; |
| case CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT: |
| return "HOSTIO_MAP_SCO_PCM_SLOT"; |
| case CSR_PSKEY_UART_BAUDRATE: |
| return "UART_BAUDRATE"; |
| case CSR_PSKEY_UART_CONFIG_BCSP: |
| return "UART_CONFIG_BCSP"; |
| case CSR_PSKEY_UART_CONFIG_H4: |
| return "UART_CONFIG_H4"; |
| case CSR_PSKEY_UART_CONFIG_H5: |
| return "UART_CONFIG_H5"; |
| case CSR_PSKEY_UART_CONFIG_USR: |
| return "UART_CONFIG_USR"; |
| case CSR_PSKEY_UART_TX_CRCS: |
| return "UART_TX_CRCS"; |
| case CSR_PSKEY_UART_ACK_TIMEOUT: |
| return "UART_ACK_TIMEOUT"; |
| case CSR_PSKEY_UART_TX_MAX_ATTEMPTS: |
| return "UART_TX_MAX_ATTEMPTS"; |
| case CSR_PSKEY_UART_TX_WINDOW_SIZE: |
| return "UART_TX_WINDOW_SIZE"; |
| case CSR_PSKEY_UART_HOST_WAKE: |
| return "UART_HOST_WAKE"; |
| case CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT: |
| return "HOSTIO_THROTTLE_TIMEOUT"; |
| case CSR_PSKEY_PCM_ALWAYS_ENABLE: |
| return "PCM_ALWAYS_ENABLE"; |
| case CSR_PSKEY_UART_HOST_WAKE_SIGNAL: |
| return "UART_HOST_WAKE_SIGNAL"; |
| case CSR_PSKEY_UART_CONFIG_H4DS: |
| return "UART_CONFIG_H4DS"; |
| case CSR_PSKEY_H4DS_WAKE_DURATION: |
| return "H4DS_WAKE_DURATION"; |
| case CSR_PSKEY_H4DS_MAXWU: |
| return "H4DS_MAXWU"; |
| case CSR_PSKEY_H4DS_LE_TIMER_PERIOD: |
| return "H4DS_LE_TIMER_PERIOD"; |
| case CSR_PSKEY_H4DS_TWU_TIMER_PERIOD: |
| return "H4DS_TWU_TIMER_PERIOD"; |
| case CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD: |
| return "H4DS_UART_IDLE_TIMER_PERIOD"; |
| case CSR_PSKEY_ANA_FTRIM: |
| return "ANA_FTRIM"; |
| case CSR_PSKEY_WD_TIMEOUT: |
| return "WD_TIMEOUT"; |
| case CSR_PSKEY_WD_PERIOD: |
| return "WD_PERIOD"; |
| case CSR_PSKEY_HOST_INTERFACE: |
| return "HOST_INTERFACE"; |
| case CSR_PSKEY_HQ_HOST_TIMEOUT: |
| return "HQ_HOST_TIMEOUT"; |
| case CSR_PSKEY_HQ_ACTIVE: |
| return "HQ_ACTIVE"; |
| case CSR_PSKEY_BCCMD_SECURITY_ACTIVE: |
| return "BCCMD_SECURITY_ACTIVE"; |
| case CSR_PSKEY_ANA_FREQ: |
| return "ANA_FREQ"; |
| case CSR_PSKEY_PIO_PROTECT_MASK: |
| return "PIO_PROTECT_MASK"; |
| case CSR_PSKEY_PMALLOC_SIZES: |
| return "PMALLOC_SIZES"; |
| case CSR_PSKEY_UART_BAUD_RATE: |
| return "UART_BAUD_RATE"; |
| case CSR_PSKEY_UART_CONFIG: |
| return "UART_CONFIG"; |
| case CSR_PSKEY_STUB: |
| return "STUB"; |
| case CSR_PSKEY_TXRX_PIO_CONTROL: |
| return "TXRX_PIO_CONTROL"; |
| case CSR_PSKEY_ANA_RX_LEVEL: |
| return "ANA_RX_LEVEL"; |
| case CSR_PSKEY_ANA_RX_FTRIM: |
| return "ANA_RX_FTRIM"; |
| case CSR_PSKEY_PSBC_DATA_VERSION: |
| return "PSBC_DATA_VERSION"; |
| case CSR_PSKEY_PCM0_ATTENUATION: |
| return "PCM0_ATTENUATION"; |
| case CSR_PSKEY_LO_LVL_MAX: |
| return "LO_LVL_MAX"; |
| case CSR_PSKEY_LO_ADC_AMPL_MIN: |
| return "LO_ADC_AMPL_MIN"; |
| case CSR_PSKEY_LO_ADC_AMPL_MAX: |
| return "LO_ADC_AMPL_MAX"; |
| case CSR_PSKEY_IQ_TRIM_CHANNEL: |
| return "IQ_TRIM_CHANNEL"; |
| case CSR_PSKEY_IQ_TRIM_GAIN: |
| return "IQ_TRIM_GAIN"; |
| case CSR_PSKEY_IQ_TRIM_ENABLE: |
| return "IQ_TRIM_ENABLE"; |
| case CSR_PSKEY_TX_OFFSET_HALF_MHZ: |
| return "TX_OFFSET_HALF_MHZ"; |
| case CSR_PSKEY_GBL_MISC_ENABLES: |
| return "GBL_MISC_ENABLES"; |
| case CSR_PSKEY_UART_SLEEP_TIMEOUT: |
| return "UART_SLEEP_TIMEOUT"; |
| case CSR_PSKEY_DEEP_SLEEP_STATE: |
| return "DEEP_SLEEP_STATE"; |
| case CSR_PSKEY_IQ_ENABLE_PHASE_TRIM: |
| return "IQ_ENABLE_PHASE_TRIM"; |
| case CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD: |
| return "HCI_HANDLE_FREEZE_PERIOD"; |
| case CSR_PSKEY_MAX_FROZEN_HCI_HANDLES: |
| return "MAX_FROZEN_HCI_HANDLES"; |
| case CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY: |
| return "PAGETABLE_DESTRUCTION_DELAY"; |
| case CSR_PSKEY_IQ_TRIM_PIO_SETTINGS: |
| return "IQ_TRIM_PIO_SETTINGS"; |
| case CSR_PSKEY_USE_EXTERNAL_CLOCK: |
| return "USE_EXTERNAL_CLOCK"; |
| case CSR_PSKEY_DEEP_SLEEP_WAKE_CTS: |
| return "DEEP_SLEEP_WAKE_CTS"; |
| case CSR_PSKEY_FC_HC2H_FLUSH_DELAY: |
| return "FC_HC2H_FLUSH_DELAY"; |
| case CSR_PSKEY_RX_HIGHSIDE: |
| return "RX_HIGHSIDE"; |
| case CSR_PSKEY_TX_PRE_LVL: |
| return "TX_PRE_LVL"; |
| case CSR_PSKEY_RX_SINGLE_ENDED: |
| return "RX_SINGLE_ENDED"; |
| case CSR_PSKEY_TX_FILTER_CONFIG: |
| return "TX_FILTER_CONFIG"; |
| case CSR_PSKEY_CLOCK_REQUEST_ENABLE: |
| return "CLOCK_REQUEST_ENABLE"; |
| case CSR_PSKEY_RX_MIN_ATTEN: |
| return "RX_MIN_ATTEN"; |
| case CSR_PSKEY_XTAL_TARGET_AMPLITUDE: |
| return "XTAL_TARGET_AMPLITUDE"; |
| case CSR_PSKEY_PCM_MIN_CPU_CLOCK: |
| return "PCM_MIN_CPU_CLOCK"; |
| case CSR_PSKEY_HOST_INTERFACE_PIO_USB: |
| return "HOST_INTERFACE_PIO_USB"; |
| case CSR_PSKEY_CPU_IDLE_MODE: |
| return "CPU_IDLE_MODE"; |
| case CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS: |
| return "DEEP_SLEEP_CLEAR_RTS"; |
| case CSR_PSKEY_RF_RESONANCE_TRIM: |
| return "RF_RESONANCE_TRIM"; |
| case CSR_PSKEY_DEEP_SLEEP_PIO_WAKE: |
| return "DEEP_SLEEP_PIO_WAKE"; |
| case CSR_PSKEY_DRAIN_BORE_TIMERS: |
| return "DRAIN_BORE_TIMERS"; |
| case CSR_PSKEY_DRAIN_TX_POWER_BASE: |
| return "DRAIN_TX_POWER_BASE"; |
| case CSR_PSKEY_MODULE_ID: |
| return "MODULE_ID"; |
| case CSR_PSKEY_MODULE_DESIGN: |
| return "MODULE_DESIGN"; |
| case CSR_PSKEY_MODULE_SECURITY_CODE: |
| return "MODULE_SECURITY_CODE"; |
| case CSR_PSKEY_VM_DISABLE: |
| return "VM_DISABLE"; |
| case CSR_PSKEY_MOD_MANUF0: |
| return "MOD_MANUF0"; |
| case CSR_PSKEY_MOD_MANUF1: |
| return "MOD_MANUF1"; |
| case CSR_PSKEY_MOD_MANUF2: |
| return "MOD_MANUF2"; |
| case CSR_PSKEY_MOD_MANUF3: |
| return "MOD_MANUF3"; |
| case CSR_PSKEY_MOD_MANUF4: |
| return "MOD_MANUF4"; |
| case CSR_PSKEY_MOD_MANUF5: |
| return "MOD_MANUF5"; |
| case CSR_PSKEY_MOD_MANUF6: |
| return "MOD_MANUF6"; |
| case CSR_PSKEY_MOD_MANUF7: |
| return "MOD_MANUF7"; |
| case CSR_PSKEY_MOD_MANUF8: |
| return "MOD_MANUF8"; |
| case CSR_PSKEY_MOD_MANUF9: |
| return "MOD_MANUF9"; |
| case CSR_PSKEY_DUT_VM_DISABLE: |
| return "DUT_VM_DISABLE"; |
| case CSR_PSKEY_USR0: |
| return "USR0"; |
| case CSR_PSKEY_USR1: |
| return "USR1"; |
| case CSR_PSKEY_USR2: |
| return "USR2"; |
| case CSR_PSKEY_USR3: |
| return "USR3"; |
| case CSR_PSKEY_USR4: |
| return "USR4"; |
| case CSR_PSKEY_USR5: |
| return "USR5"; |
| case CSR_PSKEY_USR6: |
| return "USR6"; |
| case CSR_PSKEY_USR7: |
| return "USR7"; |
| case CSR_PSKEY_USR8: |
| return "USR8"; |
| case CSR_PSKEY_USR9: |
| return "USR9"; |
| case CSR_PSKEY_USR10: |
| return "USR10"; |
| case CSR_PSKEY_USR11: |
| return "USR11"; |
| case CSR_PSKEY_USR12: |
| return "USR12"; |
| case CSR_PSKEY_USR13: |
| return "USR13"; |
| case CSR_PSKEY_USR14: |
| return "USR14"; |
| case CSR_PSKEY_USR15: |
| return "USR15"; |
| case CSR_PSKEY_USR16: |
| return "USR16"; |
| case CSR_PSKEY_USR17: |
| return "USR17"; |
| case CSR_PSKEY_USR18: |
| return "USR18"; |
| case CSR_PSKEY_USR19: |
| return "USR19"; |
| case CSR_PSKEY_USR20: |
| return "USR20"; |
| case CSR_PSKEY_USR21: |
| return "USR21"; |
| case CSR_PSKEY_USR22: |
| return "USR22"; |
| case CSR_PSKEY_USR23: |
| return "USR23"; |
| case CSR_PSKEY_USR24: |
| return "USR24"; |
| case CSR_PSKEY_USR25: |
| return "USR25"; |
| case CSR_PSKEY_USR26: |
| return "USR26"; |
| case CSR_PSKEY_USR27: |
| return "USR27"; |
| case CSR_PSKEY_USR28: |
| return "USR28"; |
| case CSR_PSKEY_USR29: |
| return "USR29"; |
| case CSR_PSKEY_USR30: |
| return "USR30"; |
| case CSR_PSKEY_USR31: |
| return "USR31"; |
| case CSR_PSKEY_USR32: |
| return "USR32"; |
| case CSR_PSKEY_USR33: |
| return "USR33"; |
| case CSR_PSKEY_USR34: |
| return "USR34"; |
| case CSR_PSKEY_USR35: |
| return "USR35"; |
| case CSR_PSKEY_USR36: |
| return "USR36"; |
| case CSR_PSKEY_USR37: |
| return "USR37"; |
| case CSR_PSKEY_USR38: |
| return "USR38"; |
| case CSR_PSKEY_USR39: |
| return "USR39"; |
| case CSR_PSKEY_USR40: |
| return "USR40"; |
| case CSR_PSKEY_USR41: |
| return "USR41"; |
| case CSR_PSKEY_USR42: |
| return "USR42"; |
| case CSR_PSKEY_USR43: |
| return "USR43"; |
| case CSR_PSKEY_USR44: |
| return "USR44"; |
| case CSR_PSKEY_USR45: |
| return "USR45"; |
| case CSR_PSKEY_USR46: |
| return "USR46"; |
| case CSR_PSKEY_USR47: |
| return "USR47"; |
| case CSR_PSKEY_USR48: |
| return "USR48"; |
| case CSR_PSKEY_USR49: |
| return "USR49"; |
| case CSR_PSKEY_USB_VERSION: |
| return "USB_VERSION"; |
| case CSR_PSKEY_USB_DEVICE_CLASS_CODES: |
| return "USB_DEVICE_CLASS_CODES"; |
| case CSR_PSKEY_USB_VENDOR_ID: |
| return "USB_VENDOR_ID"; |
| case CSR_PSKEY_USB_PRODUCT_ID: |
| return "USB_PRODUCT_ID"; |
| case CSR_PSKEY_USB_MANUF_STRING: |
| return "USB_MANUF_STRING"; |
| case CSR_PSKEY_USB_PRODUCT_STRING: |
| return "USB_PRODUCT_STRING"; |
| case CSR_PSKEY_USB_SERIAL_NUMBER_STRING: |
| return "USB_SERIAL_NUMBER_STRING"; |
| case CSR_PSKEY_USB_CONFIG_STRING: |
| return "USB_CONFIG_STRING"; |
| case CSR_PSKEY_USB_ATTRIBUTES: |
| return "USB_ATTRIBUTES"; |
| case CSR_PSKEY_USB_MAX_POWER: |
| return "USB_MAX_POWER"; |
| case CSR_PSKEY_USB_BT_IF_CLASS_CODES: |
| return "USB_BT_IF_CLASS_CODES"; |
| case CSR_PSKEY_USB_LANGID: |
| return "USB_LANGID"; |
| case CSR_PSKEY_USB_DFU_CLASS_CODES: |
| return "USB_DFU_CLASS_CODES"; |
| case CSR_PSKEY_USB_DFU_PRODUCT_ID: |
| return "USB_DFU_PRODUCT_ID"; |
| case CSR_PSKEY_USB_PIO_DETACH: |
| return "USB_PIO_DETACH"; |
| case CSR_PSKEY_USB_PIO_WAKEUP: |
| return "USB_PIO_WAKEUP"; |
| case CSR_PSKEY_USB_PIO_PULLUP: |
| return "USB_PIO_PULLUP"; |
| case CSR_PSKEY_USB_PIO_VBUS: |
| return "USB_PIO_VBUS"; |
| case CSR_PSKEY_USB_PIO_WAKE_TIMEOUT: |
| return "USB_PIO_WAKE_TIMEOUT"; |
| case CSR_PSKEY_USB_PIO_RESUME: |
| return "USB_PIO_RESUME"; |
| case CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES: |
| return "USB_BT_SCO_IF_CLASS_CODES"; |
| case CSR_PSKEY_USB_SUSPEND_PIO_LEVEL: |
| return "USB_SUSPEND_PIO_LEVEL"; |
| case CSR_PSKEY_USB_SUSPEND_PIO_DIR: |
| return "USB_SUSPEND_PIO_DIR"; |
| case CSR_PSKEY_USB_SUSPEND_PIO_MASK: |
| return "USB_SUSPEND_PIO_MASK"; |
| case CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE: |
| return "USB_ENDPOINT_0_MAX_PACKET_SIZE"; |
| case CSR_PSKEY_USB_CONFIG: |
| return "USB_CONFIG"; |
| case CSR_PSKEY_RADIOTEST_ATTEN_INIT: |
| return "RADIOTEST_ATTEN_INIT"; |
| case CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME: |
| return "RADIOTEST_FIRST_TRIM_TIME"; |
| case CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME: |
| return "RADIOTEST_SUBSEQUENT_TRIM_TIME"; |
| case CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE: |
| return "RADIOTEST_LO_LVL_TRIM_ENABLE"; |
| case CSR_PSKEY_RADIOTEST_DISABLE_MODULATION: |
| return "RADIOTEST_DISABLE_MODULATION"; |
| case CSR_PSKEY_RFCOMM_FCON_THRESHOLD: |
| return "RFCOMM_FCON_THRESHOLD"; |
| case CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD: |
| return "RFCOMM_FCOFF_THRESHOLD"; |
| case CSR_PSKEY_IPV6_STATIC_ADDR: |
| return "IPV6_STATIC_ADDR"; |
| case CSR_PSKEY_IPV4_STATIC_ADDR: |
| return "IPV4_STATIC_ADDR"; |
| case CSR_PSKEY_IPV6_STATIC_PREFIX_LEN: |
| return "IPV6_STATIC_PREFIX_LEN"; |
| case CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR: |
| return "IPV6_STATIC_ROUTER_ADDR"; |
| case CSR_PSKEY_IPV4_STATIC_SUBNET_MASK: |
| return "IPV4_STATIC_SUBNET_MASK"; |
| case CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR: |
| return "IPV4_STATIC_ROUTER_ADDR"; |
| case CSR_PSKEY_MDNS_NAME: |
| return "MDNS_NAME"; |
| case CSR_PSKEY_FIXED_PIN: |
| return "FIXED_PIN"; |
| case CSR_PSKEY_MDNS_PORT: |
| return "MDNS_PORT"; |
| case CSR_PSKEY_MDNS_TTL: |
| return "MDNS_TTL"; |
| case CSR_PSKEY_MDNS_IPV4_ADDR: |
| return "MDNS_IPV4_ADDR"; |
| case CSR_PSKEY_ARP_CACHE_TIMEOUT: |
| return "ARP_CACHE_TIMEOUT"; |
| case CSR_PSKEY_HFP_POWER_TABLE: |
| return "HFP_POWER_TABLE"; |
| case CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS: |
| return "DRAIN_BORE_TIMER_COUNTERS"; |
| case CSR_PSKEY_DRAIN_BORE_COUNTERS: |
| return "DRAIN_BORE_COUNTERS"; |
| case CSR_PSKEY_LOOP_FILTER_TRIM: |
| return "LOOP_FILTER_TRIM"; |
| case CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK: |
| return "DRAIN_BORE_CURRENT_PEAK"; |
| case CSR_PSKEY_VM_E2_CACHE_LIMIT: |
| return "VM_E2_CACHE_LIMIT"; |
| case CSR_PSKEY_FORCE_16MHZ_REF_PIO: |
| return "FORCE_16MHZ_REF_PIO"; |
| case CSR_PSKEY_CDMA_LO_REF_LIMITS: |
| return "CDMA_LO_REF_LIMITS"; |
| case CSR_PSKEY_CDMA_LO_ERROR_LIMITS: |
| return "CDMA_LO_ERROR_LIMITS"; |
| case CSR_PSKEY_CLOCK_STARTUP_DELAY: |
| return "CLOCK_STARTUP_DELAY"; |
| case CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR: |
| return "DEEP_SLEEP_CORRECTION_FACTOR"; |
| case CSR_PSKEY_TEMPERATURE_CALIBRATION: |
| return "TEMPERATURE_CALIBRATION"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA: |
| return "TEMPERATURE_VS_DELTA_INTERNAL_PA"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL: |
| return "TEMPERATURE_VS_DELTA_TX_PRE_LVL"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB: |
| return "TEMPERATURE_VS_DELTA_TX_BB"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM: |
| return "TEMPERATURE_VS_DELTA_ANA_FTRIM"; |
| case CSR_PSKEY_TEST_DELTA_OFFSET: |
| return "TEST_DELTA_OFFSET"; |
| case CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET: |
| return "RX_DYNAMIC_LVL_OFFSET"; |
| case CSR_PSKEY_TEST_FORCE_OFFSET: |
| return "TEST_FORCE_OFFSET"; |
| case CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS: |
| return "RF_TRAP_BAD_DIVISION_RATIOS"; |
| case CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS: |
| return "RADIOTEST_CDMA_LO_REF_LIMITS"; |
| case CSR_PSKEY_INITIAL_BOOTMODE: |
| return "INITIAL_BOOTMODE"; |
| case CSR_PSKEY_ONCHIP_HCI_CLIENT: |
| return "ONCHIP_HCI_CLIENT"; |
| case CSR_PSKEY_RX_ATTEN_BACKOFF: |
| return "RX_ATTEN_BACKOFF"; |
| case CSR_PSKEY_RX_ATTEN_UPDATE_RATE: |
| return "RX_ATTEN_UPDATE_RATE"; |
| case CSR_PSKEY_SYNTH_TXRX_THRESHOLDS: |
| return "SYNTH_TXRX_THRESHOLDS"; |
| case CSR_PSKEY_MIN_WAIT_STATES: |
| return "MIN_WAIT_STATES"; |
| case CSR_PSKEY_RSSI_CORRECTION: |
| return "RSSI_CORRECTION"; |
| case CSR_PSKEY_SCHED_THROTTLE_TIMEOUT: |
| return "SCHED_THROTTLE_TIMEOUT"; |
| case CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK: |
| return "DEEP_SLEEP_USE_EXTERNAL_CLOCK"; |
| case CSR_PSKEY_TRIM_RADIO_FILTERS: |
| return "TRIM_RADIO_FILTERS"; |
| case CSR_PSKEY_TRANSMIT_OFFSET: |
| return "TRANSMIT_OFFSET"; |
| case CSR_PSKEY_USB_VM_CONTROL: |
| return "USB_VM_CONTROL"; |
| case CSR_PSKEY_MR_ANA_RX_FTRIM: |
| return "MR_ANA_RX_FTRIM"; |
| case CSR_PSKEY_I2C_CONFIG: |
| return "I2C_CONFIG"; |
| case CSR_PSKEY_IQ_LVL_RX: |
| return "IQ_LVL_RX"; |
| case CSR_PSKEY_MR_TX_FILTER_CONFIG: |
| return "MR_TX_FILTER_CONFIG"; |
| case CSR_PSKEY_MR_TX_CONFIG2: |
| return "MR_TX_CONFIG2"; |
| case CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET: |
| return "USB_DONT_RESET_BOOTMODE_ON_HOST_RESET"; |
| case CSR_PSKEY_LC_USE_THROTTLING: |
| return "LC_USE_THROTTLING"; |
| case CSR_PSKEY_CHARGER_TRIM: |
| return "CHARGER_TRIM"; |
| case CSR_PSKEY_CLOCK_REQUEST_FEATURES: |
| return "CLOCK_REQUEST_FEATURES"; |
| case CSR_PSKEY_TRANSMIT_OFFSET_CLASS1: |
| return "TRANSMIT_OFFSET_CLASS1"; |
| case CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO: |
| return "TX_AVOID_PA_CLASS1_PIO"; |
| case CSR_PSKEY_MR_PIO_CONFIG: |
| return "MR_PIO_CONFIG"; |
| case CSR_PSKEY_UART_CONFIG2: |
| return "UART_CONFIG2"; |
| case CSR_PSKEY_CLASS1_IQ_LVL: |
| return "CLASS1_IQ_LVL"; |
| case CSR_PSKEY_CLASS1_TX_CONFIG2: |
| return "CLASS1_TX_CONFIG2"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1: |
| return "TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1: |
| return "TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR: |
| return "TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER: |
| return "TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER"; |
| case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD: |
| return "TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD"; |
| case CSR_PSKEY_RX_MR_EQ_TAPS: |
| return "RX_MR_EQ_TAPS"; |
| case CSR_PSKEY_TX_PRE_LVL_CLASS1: |
| return "TX_PRE_LVL_CLASS1"; |
| case CSR_PSKEY_ANALOGUE_ATTENUATOR: |
| return "ANALOGUE_ATTENUATOR"; |
| case CSR_PSKEY_MR_RX_FILTER_TRIM: |
| return "MR_RX_FILTER_TRIM"; |
| case CSR_PSKEY_MR_RX_FILTER_RESPONSE: |
| return "MR_RX_FILTER_RESPONSE"; |
| case CSR_PSKEY_PIO_WAKEUP_STATE: |
| return "PIO_WAKEUP_STATE"; |
| case CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP: |
| return "MR_TX_IF_ATTEN_OFF_TEMP"; |
| case CSR_PSKEY_LO_DIV_LATCH_BYPASS: |
| return "LO_DIV_LATCH_BYPASS"; |
| case CSR_PSKEY_LO_VCO_STANDBY: |
| return "LO_VCO_STANDBY"; |
| case CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT: |
| return "SLOW_CLOCK_FILTER_SHIFT"; |
| case CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER: |
| return "SLOW_CLOCK_FILTER_DIVIDER"; |
| case CSR_PSKEY_USB_ATTRIBUTES_POWER: |
| return "USB_ATTRIBUTES_POWER"; |
| case CSR_PSKEY_USB_ATTRIBUTES_WAKEUP: |
| return "USB_ATTRIBUTES_WAKEUP"; |
| case CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT: |
| return "DFU_ATTRIBUTES_MANIFESTATION_TOLERANT"; |
| case CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD: |
| return "DFU_ATTRIBUTES_CAN_UPLOAD"; |
| case CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD: |
| return "DFU_ATTRIBUTES_CAN_DOWNLOAD"; |
| case CSR_PSKEY_UART_CONFIG_STOP_BITS: |
| return "UART_CONFIG_STOP_BITS"; |
| case CSR_PSKEY_UART_CONFIG_PARITY_BIT: |
| return "UART_CONFIG_PARITY_BIT"; |
| case CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN: |
| return "UART_CONFIG_FLOW_CTRL_EN"; |
| case CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN: |
| return "UART_CONFIG_RTS_AUTO_EN"; |
| case CSR_PSKEY_UART_CONFIG_RTS: |
| return "UART_CONFIG_RTS"; |
| case CSR_PSKEY_UART_CONFIG_TX_ZERO_EN: |
| return "UART_CONFIG_TX_ZERO_EN"; |
| case CSR_PSKEY_UART_CONFIG_NON_BCSP_EN: |
| return "UART_CONFIG_NON_BCSP_EN"; |
| case CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY: |
| return "UART_CONFIG_RX_RATE_DELAY"; |
| case CSR_PSKEY_UART_SEQ_TIMEOUT: |
| return "UART_SEQ_TIMEOUT"; |
| case CSR_PSKEY_UART_SEQ_RETRIES: |
| return "UART_SEQ_RETRIES"; |
| case CSR_PSKEY_UART_SEQ_WINSIZE: |
| return "UART_SEQ_WINSIZE"; |
| case CSR_PSKEY_UART_USE_CRC_ON_TX: |
| return "UART_USE_CRC_ON_TX"; |
| case CSR_PSKEY_UART_HOST_INITIAL_STATE: |
| return "UART_HOST_INITIAL_STATE"; |
| case CSR_PSKEY_UART_HOST_ATTENTION_SPAN: |
| return "UART_HOST_ATTENTION_SPAN"; |
| case CSR_PSKEY_UART_HOST_WAKEUP_TIME: |
| return "UART_HOST_WAKEUP_TIME"; |
| case CSR_PSKEY_UART_HOST_WAKEUP_WAIT: |
| return "UART_HOST_WAKEUP_WAIT"; |
| case CSR_PSKEY_BCSP_LM_MODE: |
| return "BCSP_LM_MODE"; |
| case CSR_PSKEY_BCSP_LM_SYNC_RETRIES: |
| return "BCSP_LM_SYNC_RETRIES"; |
| case CSR_PSKEY_BCSP_LM_TSHY: |
| return "BCSP_LM_TSHY"; |
| case CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS: |
| return "UART_DFU_CONFIG_STOP_BITS"; |
| case CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT: |
| return "UART_DFU_CONFIG_PARITY_BIT"; |
| case CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN: |
| return "UART_DFU_CONFIG_FLOW_CTRL_EN"; |
| case CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN: |
| return "UART_DFU_CONFIG_RTS_AUTO_EN"; |
| case CSR_PSKEY_UART_DFU_CONFIG_RTS: |
| return "UART_DFU_CONFIG_RTS"; |
| case CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN: |
| return "UART_DFU_CONFIG_TX_ZERO_EN"; |
| case CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN: |
| return "UART_DFU_CONFIG_NON_BCSP_EN"; |
| case CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY: |
| return "UART_DFU_CONFIG_RX_RATE_DELAY"; |
| case CSR_PSKEY_AMUX_AIO0: |
| return "AMUX_AIO0"; |
| case CSR_PSKEY_AMUX_AIO1: |
| return "AMUX_AIO1"; |
| case CSR_PSKEY_AMUX_AIO2: |
| return "AMUX_AIO2"; |
| case CSR_PSKEY_AMUX_AIO3: |
| return "AMUX_AIO3"; |
| case CSR_PSKEY_LOCAL_NAME_SIMPLIFIED: |
| return "LOCAL_NAME_SIMPLIFIED"; |
| case CSR_PSKEY_EXTENDED_STUB: |
| return "EXTENDED_STUB"; |
| default: |
| return "UNKNOWN"; |
| } |
| } |
| |
| int csr_write_varid_valueless(int dd, uint16_t seqnum, uint16_t varid) |
| { |
| unsigned char cmd[] = { 0x02, 0x00, 0x09, 0x00, |
| seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; |
| |
| unsigned char cp[254], rp[254]; |
| struct hci_request rq; |
| |
| memset(&cp, 0, sizeof(cp)); |
| cp[0] = 0xc2; |
| memcpy(cp + 1, cmd, sizeof(cmd)); |
| |
| switch (varid) { |
| case CSR_VARID_COLD_RESET: |
| case CSR_VARID_WARM_RESET: |
| case CSR_VARID_COLD_HALT: |
| case CSR_VARID_WARM_HALT: |
| return hci_send_cmd(dd, OGF_VENDOR_CMD, 0x00, sizeof(cmd) + 1, cp); |
| } |
| |
| memset(&rq, 0, sizeof(rq)); |
| rq.ogf = OGF_VENDOR_CMD; |
| rq.ocf = 0x00; |
| rq.event = EVT_VENDOR; |
| rq.cparam = cp; |
| rq.clen = sizeof(cmd) + 1; |
| rq.rparam = rp; |
| rq.rlen = sizeof(rp); |
| |
| if (hci_send_req(dd, &rq, 2000) < 0) |
| return -1; |
| |
| if (rp[0] != 0xc2) { |
| errno = EIO; |
| return -1; |
| } |
| |
| if ((rp[9] + (rp[10] << 8)) != 0) { |
| errno = ENXIO; |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int csr_write_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length) |
| { |
| unsigned char cmd[] = { 0x02, 0x00, ((length / 2) + 5) & 0xff, ((length / 2) + 5) >> 8, |
| seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; |
| |
| unsigned char cp[254], rp[254]; |
| struct hci_request rq; |
| |
| memset(&cp, 0, sizeof(cp)); |
| cp[0] = 0xc2; |
| memcpy(cp + 1, cmd, sizeof(cmd)); |
| memcpy(cp + 11, value, length); |
| |
| memset(&rq, 0, sizeof(rq)); |
| rq.ogf = OGF_VENDOR_CMD; |
| rq.ocf = 0x00; |
| rq.event = EVT_VENDOR; |
| rq.cparam = cp; |
| rq.clen = sizeof(cmd) + length + 1; |
| rq.rparam = rp; |
| rq.rlen = sizeof(rp); |
| |
| if (hci_send_req(dd, &rq, 2000) < 0) |
| return -1; |
| |
| if (rp[0] != 0xc2) { |
| errno = EIO; |
| return -1; |
| } |
| |
| if ((rp[9] + (rp[10] << 8)) != 0) { |
| errno = ENXIO; |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int csr_read_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length) |
| { |
| unsigned char cmd[] = { 0x00, 0x00, ((length / 2) + 5) & 0xff, ((length / 2) + 5) >> 8, |
| seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; |
| |
| unsigned char cp[254], rp[254]; |
| struct hci_request rq; |
| |
| memset(&cp, 0, sizeof(cp)); |
| cp[0] = 0xc2; |
| memcpy(cp + 1, cmd, sizeof(cmd)); |
| memcpy(cp + 11, value, length); |
| |
| memset(&rq, 0, sizeof(rq)); |
| rq.ogf = OGF_VENDOR_CMD; |
| rq.ocf = 0x00; |
| rq.event = EVT_VENDOR; |
| rq.cparam = cp; |
| rq.clen = sizeof(cmd) + length + 1; |
| rq.rparam = rp; |
| rq.rlen = sizeof(rp); |
| |
| if (hci_send_req(dd, &rq, 2000) < 0) |
| return -1; |
| |
| if (rp[0] != 0xc2) { |
| errno = EIO; |
| return -1; |
| } |
| |
| if ((rp[9] + (rp[10] << 8)) != 0) { |
| errno = ENXIO; |
| return -1; |
| } |
| |
| memcpy(value, rp + 11, length); |
| |
| return 0; |
| } |
| |
| int csr_read_varid_uint16(int dd, uint16_t seqnum, uint16_t varid, uint16_t *value) |
| { |
| unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00, |
| seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; |
| |
| unsigned char cp[254], rp[254]; |
| struct hci_request rq; |
| |
| memset(&cp, 0, sizeof(cp)); |
| cp[0] = 0xc2; |
| memcpy(cp + 1, cmd, sizeof(cmd)); |
| |
| memset(&rq, 0, sizeof(rq)); |
| rq.ogf = OGF_VENDOR_CMD; |
| rq.ocf = 0x00; |
| rq.event = EVT_VENDOR; |
| rq.cparam = cp; |
| rq.clen = sizeof(cmd) + 1; |
| rq.rparam = rp; |
| rq.rlen = sizeof(rp); |
| |
| if (hci_send_req(dd, &rq, 2000) < 0) |
| return -1; |
| |
| if (rp[0] != 0xc2) { |
| errno = EIO; |
| return -1; |
| } |
| |
| if ((rp[9] + (rp[10] << 8)) != 0) { |
| errno = ENXIO; |
| return -1; |
| } |
| |
| *value = rp[11] + (rp[12] << 8); |
| |
| return 0; |
| } |
| |
| int csr_read_varid_uint32(int dd, uint16_t seqnum, uint16_t varid, uint32_t *value) |
| { |
| unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00, |
| seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; |
| |
| unsigned char cp[254], rp[254]; |
| struct hci_request rq; |
| |
| memset(&cp, 0, sizeof(cp)); |
| cp[0] = 0xc2; |
| memcpy(cp + 1, cmd, sizeof(cmd)); |
| |
| memset(&rq, 0, sizeof(rq)); |
| rq.ogf = OGF_VENDOR_CMD; |
| rq.ocf = 0x00; |
| rq.event = EVT_VENDOR; |
| rq.cparam = cp; |
| rq.clen = sizeof(cmd) + 1; |
| rq.rparam = rp; |
| rq.rlen = sizeof(rp); |
| |
| if (hci_send_req(dd, &rq, 2000) < 0) |
| return -1; |
| |
| if (rp[0] != 0xc2) { |
| errno = EIO; |
| return -1; |
| } |
| |
| if ((rp[9] + (rp[10] << 8)) != 0) { |
| errno = ENXIO; |
| return -1; |
| } |
| |
| *value = ((rp[11] + (rp[12] << 8)) << 16) + (rp[13] + (rp[14] << 8)); |
| |
| return 0; |
| } |
| |
| int csr_read_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length) |
| { |
| unsigned char cmd[] = { 0x00, 0x00, ((length / 2) + 8) & 0xff, ((length / 2) + 8) >> 8, |
| seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00, |
| pskey & 0xff, pskey >> 8, |
| (length / 2) & 0xff, (length / 2) >> 8, |
| stores & 0xff, stores >> 8, 0x00, 0x00 }; |
| |
| unsigned char cp[254], rp[254]; |
| struct hci_request rq; |
| |
| memset(&cp, 0, sizeof(cp)); |
| cp[0] = 0xc2; |
| memcpy(cp + 1, cmd, sizeof(cmd)); |
| |
| memset(&rq, 0, sizeof(rq)); |
| rq.ogf = OGF_VENDOR_CMD; |
| rq.ocf = 0x00; |
| rq.event = EVT_VENDOR; |
| rq.cparam = cp; |
| rq.clen = sizeof(cmd) + length - 1; |
| rq.rparam = rp; |
| rq.rlen = sizeof(rp); |
| |
| if (hci_send_req(dd, &rq, 2000) < 0) |
| return -1; |
| |
| if (rp[0] != 0xc2) { |
| errno = EIO; |
| return -1; |
| } |
| |
| if ((rp[9] + (rp[10] << 8)) != 0) { |
| errno = ENXIO; |
| return -1; |
| } |
| |
| memcpy(value, rp + 17, length); |
| |
| return 0; |
| } |
| |
| int csr_write_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length) |
| { |
| unsigned char cmd[] = { 0x02, 0x00, ((length / 2) + 8) & 0xff, ((length / 2) + 8) >> 8, |
| seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00, |
| pskey & 0xff, pskey >> 8, |
| (length / 2) & 0xff, (length / 2) >> 8, |
| stores & 0xff, stores >> 8, 0x00, 0x00 }; |
| |
| unsigned char cp[254], rp[254]; |
| struct hci_request rq; |
| |
| memset(&cp, 0, sizeof(cp)); |
| cp[0] = 0xc2; |
| memcpy(cp + 1, cmd, sizeof(cmd)); |
| |
| memcpy(cp + 17, value, length); |
| |
| memset(&rq, 0, sizeof(rq)); |
| rq.ogf = OGF_VENDOR_CMD; |
| rq.ocf = 0x00; |
| rq.event = EVT_VENDOR; |
| rq.cparam = cp; |
| rq.clen = sizeof(cmd) + length - 1; |
| rq.rparam = rp; |
| rq.rlen = sizeof(rp); |
| |
| if (hci_send_req(dd, &rq, 2000) < 0) |
| return -1; |
| |
| if (rp[0] != 0xc2) { |
| errno = EIO; |
| return -1; |
| } |
| |
| if ((rp[9] + (rp[10] << 8)) != 0) { |
| errno = ENXIO; |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int csr_read_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t *value) |
| { |
| uint8_t array[2] = { 0x00, 0x00 }; |
| int err; |
| |
| err = csr_read_pskey_complex(dd, seqnum, pskey, stores, array, 2); |
| |
| *value = array[0] + (array[1] << 8); |
| |
| return err; |
| } |
| |
| int csr_write_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t value) |
| { |
| uint8_t array[2] = { value & 0xff, value >> 8 }; |
| |
| return csr_write_pskey_complex(dd, seqnum, pskey, stores, array, 2); |
| } |
| |
| int csr_read_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t *value) |
| { |
| uint8_t array[4] = { 0x00, 0x00, 0x00, 0x00 }; |
| int err; |
| |
| err = csr_read_pskey_complex(dd, seqnum, pskey, stores, array, 4); |
| |
| *value = ((array[0] + (array[1] << 8)) << 16) + |
| (array[2] + (array[3] << 8)); |
| |
| return err; |
| } |
| |
| int csr_write_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t value) |
| { |
| uint8_t array[4] = { (value & 0xff0000) >> 16, value >> 24, |
| value & 0xff, (value & 0xff00) >> 8 }; |
| |
| return csr_write_pskey_complex(dd, seqnum, pskey, stores, array, 4); |
| } |
| |
| int psr_put(uint16_t pskey, uint8_t *value, uint16_t size) |
| { |
| struct psr_data *item; |
| |
| item = malloc(sizeof(*item)); |
| if (!item) |
| return -ENOMEM; |
| |
| item->pskey = pskey; |
| |
| if (size > 0) { |
| item->value = malloc(size); |
| if (!item->value) { |
| free(item); |
| return -ENOMEM; |
| } |
| |
| memcpy(item->value, value, size); |
| item->size = size; |
| } else { |
| item->value = NULL; |
| item->size = 0; |
| } |
| |
| item->next = NULL; |
| |
| if (!head) |
| head = item; |
| else |
| tail->next = item; |
| |
| tail = item; |
| |
| return 0; |
| } |
| |
| int psr_get(uint16_t *pskey, uint8_t *value, uint16_t *size) |
| { |
| struct psr_data *item = head; |
| |
| if (!head) |
| return -ENOENT; |
| |
| *pskey = item->pskey; |
| |
| if (item->value) { |
| if (value && item->size > 0) |
| memcpy(value, item->value, item->size); |
| free(item->value); |
| *size = item->size; |
| } else |
| *size = 0; |
| |
| if (head == tail) |
| tail = NULL; |
| |
| head = head->next; |
| free(item); |
| |
| return 0; |
| } |
| |
| static int parse_line(char *str) |
| { |
| uint8_t array[256]; |
| uint16_t value, pskey, length = 0; |
| char *off, *end; |
| |
| pskey = strtol(str + 1, NULL, 16); |
| off = strstr(str, "=") + 1; |
| if (!off) |
| return -EIO; |
| |
| while (1) { |
| value = strtol(off, &end, 16); |
| if (value == 0 && off == end) |
| break; |
| |
| array[length++] = value & 0xff; |
| array[length++] = value >> 8; |
| |
| if (*end == '\0') |
| break; |
| |
| off = end + 1; |
| } |
| |
| return psr_put(pskey, array, length); |
| } |
| |
| int psr_read(const char *filename) |
| { |
| struct stat st; |
| char *str, *map, *off, *end; |
| int fd, err = 0; |
| |
| fd = open(filename, O_RDONLY); |
| if (fd < 0) |
| return fd; |
| |
| if (fstat(fd, &st) < 0) { |
| err = -errno; |
| goto close; |
| } |
| |
| map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0); |
| if (!map || map == MAP_FAILED) { |
| err = -errno; |
| goto close; |
| } |
| |
| off = map; |
| |
| while (1) { |
| if (*off == '\r' || *off == '\n') { |
| off++; |
| continue; |
| } |
| |
| end = strpbrk(off, "\r\n"); |
| if (!end) |
| break; |
| |
| str = malloc(end - off + 1); |
| if (!str) |
| break; |
| |
| memset(str, 0, end - off + 1); |
| strncpy(str, off, end - off); |
| if (*str == '&') |
| parse_line(str); |
| |
| free(str); |
| off = end + 1; |
| } |
| |
| munmap(map, st.st_size); |
| |
| close: |
| close(fd); |
| |
| return err; |
| } |
| |
| int psr_print(void) |
| { |
| uint8_t array[256]; |
| uint16_t pskey, length; |
| char *str, val[7]; |
| int i; |
| |
| while (1) { |
| if (psr_get(&pskey, array, &length) < 0) |
| break; |
| |
| str = csr_pskeytoval(pskey); |
| if (!strcasecmp(str, "UNKNOWN")) { |
| sprintf(val, "0x%04x", pskey); |
| str = NULL; |
| } |
| |
| printf("// %s%s\n&%04x =", str ? "PSKEY_" : "", |
| str ? str : val, pskey); |
| for (i = 0; i < length / 2; i++) |
| printf(" %02x%02x", array[i * 2 + 1], array[i * 2]); |
| printf("\n"); |
| } |
| |
| return 0; |
| } |