diff options
author | Sergej Pupykin | 2021-04-07 22:20:16 +0300 |
---|---|---|
committer | Sergej Pupykin | 2021-04-07 22:20:16 +0300 |
commit | 80f9638dc06dcd6e2b7ab41d7c0b3cf646988636 (patch) | |
tree | 7cb6a21a98c1967dfb91e4d7ea6acccfc6a26f87 | |
parent | cca1c2a3917b72a55c4ff33e12723b49c90573b2 (diff) | |
download | aur-80f9638dc06dcd6e2b7ab41d7c0b3cf646988636.tar.gz |
upd
-rw-r--r-- | .SRCINFO | 20 | ||||
-rw-r--r-- | PKGBUILD | 16 | ||||
-rw-r--r-- | csr.c | 2855 | ||||
-rw-r--r-- | csr.h | 555 | ||||
-rw-r--r-- | hciconfig.1 | 272 | ||||
-rw-r--r-- | hciconfig.c | 2064 | ||||
-rw-r--r-- | textfile.c | 475 | ||||
-rw-r--r-- | textfile.h | 34 | ||||
-rw-r--r-- | util.h | 187 |
9 files changed, 9 insertions, 6469 deletions
@@ -1,27 +1,13 @@ -# Generated by mksrcinfo v8 -# Thu Aug 2 16:23:56 UTC 2018 pkgbase = bluez-hciconfig pkgdesc = deprecated hciconfig tool from bluez - pkgver = 5.50 + pkgver = 5.58 pkgrel = 1 url = http://www.bluez.org/ arch = x86_64 license = GPL2 depends = bluez - source = hciconfig.1 - source = hciconfig.c - source = textfile.c - source = textfile.h - source = csr.h - source = csr.c - source = util.h - sha256sums = c7d50bbdec9d17b6c864834a8a9b6b3579b5b24554cb5440e96498858deb7dee - sha256sums = 149d814df44c9fe851230f4d037f494a49f3dc7e00eecaa6aba73c9ae1d1a128 - sha256sums = 88f2a8db6687de0369266eb96a7ab007496e13fdb969de214f208c3866794e85 - sha256sums = 53317986e699d03f1502ccd03cf487950343769b476f215e67b57b361ae9cf5f - sha256sums = 56c3227d3022c317677e9ebfc7fd4043177fc24b61871304ce988b2b29af9c53 - sha256sums = 44911c2262e1f279c53f910200e72a710fcc1a1d2d411a9c3c1a51fd5dc06611 - sha256sums = f1aa4d8199959d94dc1d08160f06a08c3bbb5208c4a0eda881dada31e2eca46a + source = https://www.kernel.org/pub/linux/bluetooth/bluez-5.58.tar.xz + sha256sums = c8065e75a5eb67236849ef68a354b1700540305a8c88ef0a0fd6288f19daf1f1 pkgname = bluez-hciconfig @@ -2,27 +2,23 @@ # Maintainer: Sergej Pupykin <arch+pub@sergej.pp.ru> pkgname=bluez-hciconfig -pkgver=5.50 +pkgver=5.58 pkgrel=1 pkgdesc="deprecated hciconfig tool from bluez" url="http://www.bluez.org/" arch=('x86_64') license=('GPL2') depends=("bluez") -source=(hciconfig.1 hciconfig.c textfile.c textfile.h csr.h csr.c util.h) -sha256sums=('c7d50bbdec9d17b6c864834a8a9b6b3579b5b24554cb5440e96498858deb7dee' - '149d814df44c9fe851230f4d037f494a49f3dc7e00eecaa6aba73c9ae1d1a128' - '88f2a8db6687de0369266eb96a7ab007496e13fdb969de214f208c3866794e85' - '53317986e699d03f1502ccd03cf487950343769b476f215e67b57b361ae9cf5f' - '56c3227d3022c317677e9ebfc7fd4043177fc24b61871304ce988b2b29af9c53' - '44911c2262e1f279c53f910200e72a710fcc1a1d2d411a9c3c1a51fd5dc06611' - 'f1aa4d8199959d94dc1d08160f06a08c3bbb5208c4a0eda881dada31e2eca46a') +source=(https://www.kernel.org/pub/linux/bluetooth/bluez-${pkgver}.tar.xz) +sha256sums=('c8065e75a5eb67236849ef68a354b1700540305a8c88ef0a0fd6288f19daf1f1') build() { - gcc hciconfig.c csr.c -lbluetooth -o hciconfig -DVERSION=\"$pkgver\" + cd bluez-${pkgver}/tools + gcc hciconfig.c parser/{csr,parser,lmp}.c ../src/textfile.c -lbluetooth -o hciconfig -DVERSION=\"$pkgver\" -I.. } package() { + cd bluez-${pkgver}/tools install -Dm0755 hciconfig "$pkgdir"/usr/bin/hciconfig install -Dm0755 hciconfig.1 "$pkgdir"/usr/share/man/man1/hciconfig.1 } diff --git a/csr.c b/csr.c deleted file mode 100644 index 7eedaca45d63..000000000000 --- a/csr.c +++ /dev/null @@ -1,2855 +0,0 @@ -/* - * - * 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, sizeof(str), "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, "="); - if (!off) - return -EIO; - - off++; - - while (length <= sizeof(array) - 2) { - 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; -} diff --git a/csr.h b/csr.h deleted file mode 100644 index cc245a5506b9..000000000000 --- a/csr.h +++ /dev/null @@ -1,555 +0,0 @@ -/* - * - * 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 - * - */ - -#include <stdint.h> -#include <termios.h> - -#define CSR_VARID_PS_CLR_ALL 0x000b /* valueless */ -#define CSR_VARID_PS_FACTORY_SET 0x000c /* valueless */ -#define CSR_VARID_PS_CLR_ALL_STORES 0x082d /* uint16 */ -#define CSR_VARID_BC01_STATUS 0x2801 /* uint16 */ -#define CSR_VARID_BUILDID 0x2819 /* uint16 */ -#define CSR_VARID_CHIPVER 0x281a /* uint16 */ -#define CSR_VARID_CHIPREV 0x281b /* uint16 */ -#define CSR_VARID_INTERFACE_VERSION 0x2825 /* uint16 */ -#define CSR_VARID_RAND 0x282a /* uint16 */ -#define CSR_VARID_MAX_CRYPT_KEY_LENGTH 0x282c /* uint16 */ -#define CSR_VARID_CHIPANAREV 0x2836 /* uint16 */ -#define CSR_VARID_BUILDID_LOADER 0x2838 /* uint16 */ -#define CSR_VARID_BT_CLOCK 0x2c00 /* uint32 */ -#define CSR_VARID_PS_NEXT 0x3005 /* complex */ -#define CSR_VARID_PS_SIZE 0x3006 /* complex */ -#define CSR_VARID_ADC_RES 0x3007 /* complex */ -#define CSR_VARID_CRYPT_KEY_LENGTH 0x3008 /* complex */ -#define CSR_VARID_PICONET_INSTANCE 0x3009 /* complex */ -#define CSR_VARID_GET_CLR_EVT 0x300a /* complex */ -#define CSR_VARID_GET_NEXT_BUILDDEF 0x300b /* complex */ -#define CSR_VARID_PS_MEMORY_TYPE 0x3012 /* complex */ -#define CSR_VARID_READ_BUILD_NAME 0x301c /* complex */ -#define CSR_VARID_COLD_RESET 0x4001 /* valueless */ -#define CSR_VARID_WARM_RESET 0x4002 /* valueless */ -#define CSR_VARID_COLD_HALT 0x4003 /* valueless */ -#define CSR_VARID_WARM_HALT 0x4004 /* valueless */ -#define CSR_VARID_INIT_BT_STACK 0x4005 /* valueless */ -#define CSR_VARID_ACTIVATE_BT_STACK 0x4006 /* valueless */ -#define CSR_VARID_ENABLE_TX 0x4007 /* valueless */ -#define CSR_VARID_DISABLE_TX 0x4008 /* valueless */ -#define CSR_VARID_RECAL 0x4009 /* valueless */ -#define CSR_VARID_PS_FACTORY_RESTORE 0x400d /* valueless */ -#define CSR_VARID_PS_FACTORY_RESTORE_ALL 0x400e /* valueless */ -#define CSR_VARID_PS_DEFRAG_RESET 0x400f /* valueless */ -#define CSR_VARID_KILL_VM_APPLICATION 0x4010 /* valueless */ -#define CSR_VARID_HOPPING_ON 0x4011 /* valueless */ -#define CSR_VARID_CANCEL_PAGE 0x4012 /* valueless */ -#define CSR_VARID_PS_CLR 0x4818 /* uint16 */ -#define CSR_VARID_MAP_SCO_PCM 0x481c /* uint16 */ -#define CSR_VARID_ADC 0x4829 /* uint16 */ -#define CSR_VARID_SINGLE_CHAN 0x482e /* uint16 */ -#define CSR_VARID_RADIOTEST 0x5004 /* complex */ -#define CSR_VARID_PS_CLR_STORES 0x500c /* complex */ -#define CSR_VARID_NO_VARIABLE 0x6000 /* valueless */ -#define CSR_VARID_CONFIG_UART 0x6802 /* uint16 */ -#define CSR_VARID_PANIC_ARG 0x6805 /* uint16 */ -#define CSR_VARID_FAULT_ARG 0x6806 /* uint16 */ -#define CSR_VARID_MAX_TX_POWER 0x6827 /* int8 */ -#define CSR_VARID_DEFAULT_TX_POWER 0x682b /* int8 */ -#define CSR_VARID_PS 0x7003 /* complex */ - -#define CSR_PSKEY_BDADDR 0x0001 /* bdaddr / uint16[] = { 0x00A5A5, 0x5b, 0x0002 } */ -#define CSR_PSKEY_COUNTRYCODE 0x0002 /* uint16 */ -#define CSR_PSKEY_CLASSOFDEVICE 0x0003 /* bdcod */ -#define CSR_PSKEY_DEVICE_DRIFT 0x0004 /* uint16 */ -#define CSR_PSKEY_DEVICE_JITTER 0x0005 /* uint16 */ -#define CSR_PSKEY_MAX_ACLS 0x000d /* uint16 */ -#define CSR_PSKEY_MAX_SCOS 0x000e /* uint16 */ -#define CSR_PSKEY_MAX_REMOTE_MASTERS 0x000f /* uint16 */ -#define CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY 0x0010 /* bool */ -#define CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN 0x0011 /* uint16 */ -#define CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN 0x0012 /* uint8 */ -#define CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS 0x0013 /* uint16 */ -#define CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS 0x0014 /* uint16 */ -#define CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK 0x0015 /* lc_fc_lwm */ -#define CSR_PSKEY_LC_MAX_TX_POWER 0x0017 /* int16 */ -#define CSR_PSKEY_TX_GAIN_RAMP 0x001d /* uint16 */ -#define CSR_PSKEY_LC_POWER_TABLE 0x001e /* power_setting[] */ -#define CSR_PSKEY_LC_PEER_POWER_PERIOD 0x001f /* TIME */ -#define CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK 0x0020 /* lc_fc_lwm */ -#define CSR_PSKEY_LC_DEFAULT_TX_POWER 0x0021 /* int16 */ -#define CSR_PSKEY_LC_RSSI_GOLDEN_RANGE 0x0022 /* uint8 */ -#define CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK 0x0028 /* uint16[] */ -#define CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK 0x0029 /* uint16[] */ -#define CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE 0x002a /* uint16 */ -#define CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS 0x002b /* uint16 */ -#define CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI 0x002d /* int8 */ -#define CSR_PSKEY_LC_CONNECTION_RX_WINDOW 0x002e /* uint16 */ -#define CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE 0x0030 /* uint16 */ -#define CSR_PSKEY_LC_ENHANCED_POWER_TABLE 0x0031 /* enhanced_power_setting[] */ -#define CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG 0x0032 /* wideband_rssi_config */ -#define CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD 0x0033 /* uint16 */ -#define CSR_PSKEY_BT_CLOCK_INIT 0x0034 /* uint32 */ -#define CSR_PSKEY_TX_MR_MOD_DELAY 0x0038 /* uint8 */ -#define CSR_PSKEY_RX_MR_SYNC_TIMING 0x0039 /* uint16 */ -#define CSR_PSKEY_RX_MR_SYNC_CONFIG 0x003a /* uint16 */ -#define CSR_PSKEY_LC_LOST_SYNC_SLOTS 0x003b /* uint16 */ -#define CSR_PSKEY_RX_MR_SAMP_CONFIG 0x003c /* uint16 */ -#define CSR_PSKEY_AGC_HYST_LEVELS 0x003d /* agc_hyst_config */ -#define CSR_PSKEY_RX_LEVEL_LOW_SIGNAL 0x003e /* uint16 */ -#define CSR_PSKEY_AGC_IQ_LVL_VALUES 0x003f /* IQ_LVL_VAL[] */ -#define CSR_PSKEY_MR_FTRIM_OFFSET_12DB 0x0040 /* uint16 */ -#define CSR_PSKEY_MR_FTRIM_OFFSET_6DB 0x0041 /* uint16 */ -#define CSR_PSKEY_NO_CAL_ON_BOOT 0x0042 /* bool */ -#define CSR_PSKEY_RSSI_HI_TARGET 0x0043 /* uint8 */ -#define CSR_PSKEY_PREFERRED_MIN_ATTENUATION 0x0044 /* uint8 */ -#define CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE 0x0045 /* bool */ -#define CSR_PSKEY_LC_MULTISLOT_HOLDOFF 0x0047 /* TIME */ -#define CSR_PSKEY_FREE_KEY_PIGEON_HOLE 0x00c9 /* uint16 */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR0 0x00ca /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR1 0x00cb /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR2 0x00cc /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR3 0x00cd /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR4 0x00ce /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR5 0x00cf /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR6 0x00d0 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR7 0x00d1 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR8 0x00d2 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR9 0x00d3 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR10 0x00d4 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR11 0x00d5 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR12 0x00d6 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR13 0x00d7 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR14 0x00d8 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LINK_KEY_BD_ADDR15 0x00d9 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_ENC_KEY_LMIN 0x00da /* uint16 */ -#define CSR_PSKEY_ENC_KEY_LMAX 0x00db /* uint16 */ -#define CSR_PSKEY_LOCAL_SUPPORTED_FEATURES 0x00ef /* uint16[] = { 0xffff, 0xfe8f, 0xf99b, 0x8000 }*/ -#define CSR_PSKEY_LM_USE_UNIT_KEY 0x00f0 /* bool */ -#define CSR_PSKEY_HCI_NOP_DISABLE 0x00f2 /* bool */ -#define CSR_PSKEY_LM_MAX_EVENT_FILTERS 0x00f4 /* uint8 */ -#define CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST 0x00f5 /* bool */ -#define CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE 0x00f6 /* bool */ -#define CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME 0x00f7 /* uint16 */ -#define CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME 0x00f8 /* uint16 */ -#define CSR_PSKEY_AFH_OPTIONS 0x00f9 /* uint16 */ -#define CSR_PSKEY_AFH_RSSI_RUN_PERIOD 0x00fa /* uint16 */ -#define CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME 0x00fb /* uint16 */ -#define CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL 0x00fc /* bool */ -#define CSR_PSKEY_MAX_PRIVATE_KEYS 0x00fd /* uint8 */ -#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0 0x00fe /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1 0x00ff /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2 0x0100 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3 0x0101 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4 0x0102 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5 0x0103 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6 0x0104 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7 0x0105 /* LM_LINK_KEY_BD_ADDR_T */ -#define CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS 0x0106 /* uint16[] = { 0xffff, 0x03ff, 0xfffe, 0xffff, 0xffff, 0xffff, 0x0ff3, 0xfff8, 0x003f } */ -#define CSR_PSKEY_LM_MAX_ABSENCE_INDEX 0x0107 /* uint8 */ -#define CSR_PSKEY_DEVICE_NAME 0x0108 /* uint16[] */ -#define CSR_PSKEY_AFH_RSSI_THRESHOLD 0x0109 /* uint16 */ -#define CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL 0x010a /* uint16 */ -#define CSR_PSKEY_AFH_MIN_MAP_CHANGE 0x010b /* uint16[] */ -#define CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD 0x010c /* uint16 */ -#define CSR_PSKEY_HCI_LMP_LOCAL_VERSION 0x010d /* uint16 */ -#define CSR_PSKEY_LMP_REMOTE_VERSION 0x010e /* uint8 */ -#define CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER 0x0113 /* uint16 */ -#define CSR_PSKEY_DFU_ATTRIBUTES 0x0136 /* uint8 */ -#define CSR_PSKEY_DFU_DETACH_TO 0x0137 /* uint16 */ -#define CSR_PSKEY_DFU_TRANSFER_SIZE 0x0138 /* uint16 */ -#define CSR_PSKEY_DFU_ENABLE 0x0139 /* bool */ -#define CSR_PSKEY_DFU_LIN_REG_ENABLE 0x013a /* bool */ -#define CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB 0x015e /* uint16[] */ -#define CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB 0x015f /* uint16[] */ -#define CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH 0x0160 /* uint16 */ -#define CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB 0x0161 /* uint16[] */ -#define CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB 0x0162 /* uint16[] */ -#define CSR_PSKEY_BCSP_LM_PS_BLOCK 0x0192 /* BCSP_LM_PS_BLOCK */ -#define CSR_PSKEY_HOSTIO_FC_PS_BLOCK 0x0193 /* HOSTIO_FC_PS_BLOCK */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO0 0x0194 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO1 0x0195 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO2 0x0196 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO3 0x0197 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO4 0x0198 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO5 0x0199 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO6 0x019a /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO7 0x019b /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO8 0x019c /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO9 0x019d /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO10 0x019e /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO11 0x019f /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO12 0x01a0 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO13 0x01a1 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO14 0x01a2 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO15 0x01a3 /* PROTOCOL_INFO */ -#define CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT 0x01a4 /* TIME */ -#define CSR_PSKEY_HOSTIO_USE_HCI_EXTN 0x01a5 /* bool */ -#define CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC 0x01a6 /* bool */ -#define CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE 0x01a7 /* uint16 */ -#define CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT 0x01aa /* uint16 */ -#define CSR_PSKEY_HOSTIO_MAP_SCO_PCM 0x01ab /* bool */ -#define CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC 0x01ac /* bool */ -#define CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD 0x01ad /* TIME */ -#define CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE 0x01ae /* uint16 */ -#define CSR_PSKEY_HOSTIO_MAP_SCO_CODEC 0x01b0 /* bool */ -#define CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST 0x01b1 /* uint16 */ -#define CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST 0x01b2 /* uint16 */ -#define CSR_PSKEY_PCM_CONFIG32 0x01b3 /* uint32 */ -#define CSR_PSKEY_USE_OLD_BCSP_LE 0x01b4 /* uint16 */ -#define CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER 0x01b5 /* bool */ -#define CSR_PSKEY_PCM_FORMAT 0x01b6 /* uint16 */ -#define CSR_PSKEY_CODEC_OUT_GAIN 0x01b7 /* uint16 */ -#define CSR_PSKEY_CODEC_IN_GAIN 0x01b8 /* uint16 */ -#define CSR_PSKEY_CODEC_PIO 0x01b9 /* uint16 */ -#define CSR_PSKEY_PCM_LOW_JITTER_CONFIG 0x01ba /* uint32 */ -#define CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS 0x01bb /* uint16[] */ -#define CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS 0x01bc /* uint16[] */ -#define CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT 0x01bd /* uint16 */ -#define CSR_PSKEY_UART_BAUDRATE 0x01be /* uint16 */ -#define CSR_PSKEY_UART_CONFIG_BCSP 0x01bf /* uint16 */ -#define CSR_PSKEY_UART_CONFIG_H4 0x01c0 /* uint16 */ -#define CSR_PSKEY_UART_CONFIG_H5 0x01c1 /* uint16 */ -#define CSR_PSKEY_UART_CONFIG_USR 0x01c2 /* uint16 */ -#define CSR_PSKEY_UART_TX_CRCS 0x01c3 /* bool */ -#define CSR_PSKEY_UART_ACK_TIMEOUT 0x01c4 /* uint16 */ -#define CSR_PSKEY_UART_TX_MAX_ATTEMPTS 0x01c5 /* uint16 */ -#define CSR_PSKEY_UART_TX_WINDOW_SIZE 0x01c6 /* uint16 */ -#define CSR_PSKEY_UART_HOST_WAKE 0x01c7 /* uint16[] */ -#define CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT 0x01c8 /* TIME */ -#define CSR_PSKEY_PCM_ALWAYS_ENABLE 0x01c9 /* bool */ -#define CSR_PSKEY_UART_HOST_WAKE_SIGNAL 0x01ca /* uint16 */ -#define CSR_PSKEY_UART_CONFIG_H4DS 0x01cb /* uint16 */ -#define CSR_PSKEY_H4DS_WAKE_DURATION 0x01cc /* uint16 */ -#define CSR_PSKEY_H4DS_MAXWU 0x01cd /* uint16 */ -#define CSR_PSKEY_H4DS_LE_TIMER_PERIOD 0x01cf /* uint16 */ -#define CSR_PSKEY_H4DS_TWU_TIMER_PERIOD 0x01d0 /* uint16 */ -#define CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD 0x01d1 /* uint16 */ -#define CSR_PSKEY_ANA_FTRIM 0x01f6 /* uint16 */ -#define CSR_PSKEY_WD_TIMEOUT 0x01f7 /* TIME */ -#define CSR_PSKEY_WD_PERIOD 0x01f8 /* TIME */ -#define CSR_PSKEY_HOST_INTERFACE 0x01f9 /* phys_bus */ -#define CSR_PSKEY_HQ_HOST_TIMEOUT 0x01fb /* TIME */ -#define CSR_PSKEY_HQ_ACTIVE 0x01fc /* bool */ -#define CSR_PSKEY_BCCMD_SECURITY_ACTIVE 0x01fd /* bool */ -#define CSR_PSKEY_ANA_FREQ 0x01fe /* uint16 */ -#define CSR_PSKEY_PIO_PROTECT_MASK 0x0202 /* uint16 */ -#define CSR_PSKEY_PMALLOC_SIZES 0x0203 /* uint16[] */ -#define CSR_PSKEY_UART_BAUD_RATE 0x0204 /* uint16 */ -#define CSR_PSKEY_UART_CONFIG 0x0205 /* uint16 */ -#define CSR_PSKEY_STUB 0x0207 /* uint16 */ -#define CSR_PSKEY_TXRX_PIO_CONTROL 0x0209 /* uint16 */ -#define CSR_PSKEY_ANA_RX_LEVEL 0x020b /* uint16 */ -#define CSR_PSKEY_ANA_RX_FTRIM 0x020c /* uint16 */ -#define CSR_PSKEY_PSBC_DATA_VERSION 0x020d /* uint16 */ -#define CSR_PSKEY_PCM0_ATTENUATION 0x020f /* uint16 */ -#define CSR_PSKEY_LO_LVL_MAX 0x0211 /* uint16 */ -#define CSR_PSKEY_LO_ADC_AMPL_MIN 0x0212 /* uint16 */ -#define CSR_PSKEY_LO_ADC_AMPL_MAX 0x0213 /* uint16 */ -#define CSR_PSKEY_IQ_TRIM_CHANNEL 0x0214 /* uint16 */ -#define CSR_PSKEY_IQ_TRIM_GAIN 0x0215 /* uint16 */ -#define CSR_PSKEY_IQ_TRIM_ENABLE 0x0216 /* iq_trim_enable_flag */ -#define CSR_PSKEY_TX_OFFSET_HALF_MHZ 0x0217 /* int16 */ -#define CSR_PSKEY_GBL_MISC_ENABLES 0x0221 /* uint16 */ -#define CSR_PSKEY_UART_SLEEP_TIMEOUT 0x0222 /* uint16 */ -#define CSR_PSKEY_DEEP_SLEEP_STATE 0x0229 /* deep_sleep_state */ -#define CSR_PSKEY_IQ_ENABLE_PHASE_TRIM 0x022d /* bool */ -#define CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD 0x0237 /* TIME */ -#define CSR_PSKEY_MAX_FROZEN_HCI_HANDLES 0x0238 /* uint16 */ -#define CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY 0x0239 /* TIME */ -#define CSR_PSKEY_IQ_TRIM_PIO_SETTINGS 0x023a /* uint8 */ -#define CSR_PSKEY_USE_EXTERNAL_CLOCK 0x023b /* bool */ -#define CSR_PSKEY_DEEP_SLEEP_WAKE_CTS 0x023c /* uint16 */ -#define CSR_PSKEY_FC_HC2H_FLUSH_DELAY 0x023d /* TIME */ -#define CSR_PSKEY_RX_HIGHSIDE 0x023e /* bool */ -#define CSR_PSKEY_TX_PRE_LVL 0x0240 /* uint8 */ -#define CSR_PSKEY_RX_SINGLE_ENDED 0x0242 /* bool */ -#define CSR_PSKEY_TX_FILTER_CONFIG 0x0243 /* uint32 */ -#define CSR_PSKEY_CLOCK_REQUEST_ENABLE 0x0246 /* uint16 */ -#define CSR_PSKEY_RX_MIN_ATTEN 0x0249 /* uint16 */ -#define CSR_PSKEY_XTAL_TARGET_AMPLITUDE 0x024b /* uint8 */ -#define CSR_PSKEY_PCM_MIN_CPU_CLOCK 0x024d /* uint16 */ -#define CSR_PSKEY_HOST_INTERFACE_PIO_USB 0x0250 /* uint16 */ -#define CSR_PSKEY_CPU_IDLE_MODE 0x0251 /* cpu_idle_mode */ -#define CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS 0x0252 /* bool */ -#define CSR_PSKEY_RF_RESONANCE_TRIM 0x0254 /* uint16 */ -#define CSR_PSKEY_DEEP_SLEEP_PIO_WAKE 0x0255 /* uint16 */ -#define CSR_PSKEY_DRAIN_BORE_TIMERS 0x0256 /* uint32[] */ -#define CSR_PSKEY_DRAIN_TX_POWER_BASE 0x0257 /* uint16 */ -#define CSR_PSKEY_MODULE_ID 0x0259 /* uint32 */ -#define CSR_PSKEY_MODULE_DESIGN 0x025a /* uint16 */ -#define CSR_PSKEY_MODULE_SECURITY_CODE 0x025c /* uint16[] */ -#define CSR_PSKEY_VM_DISABLE 0x025d /* bool */ -#define CSR_PSKEY_MOD_MANUF0 0x025e /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF1 0x025f /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF2 0x0260 /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF3 0x0261 /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF4 0x0262 /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF5 0x0263 /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF6 0x0264 /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF7 0x0265 /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF8 0x0266 /* uint16[] */ -#define CSR_PSKEY_MOD_MANUF9 0x0267 /* uint16[] */ -#define CSR_PSKEY_DUT_VM_DISABLE 0x0268 /* bool */ -#define CSR_PSKEY_USR0 0x028a /* uint16[] */ -#define CSR_PSKEY_USR1 0x028b /* uint16[] */ -#define CSR_PSKEY_USR2 0x028c /* uint16[] */ -#define CSR_PSKEY_USR3 0x028d /* uint16[] */ -#define CSR_PSKEY_USR4 0x028e /* uint16[] */ -#define CSR_PSKEY_USR5 0x028f /* uint16[] */ -#define CSR_PSKEY_USR6 0x0290 /* uint16[] */ -#define CSR_PSKEY_USR7 0x0291 /* uint16[] */ -#define CSR_PSKEY_USR8 0x0292 /* uint16[] */ -#define CSR_PSKEY_USR9 0x0293 /* uint16[] */ -#define CSR_PSKEY_USR10 0x0294 /* uint16[] */ -#define CSR_PSKEY_USR11 0x0295 /* uint16[] */ -#define CSR_PSKEY_USR12 0x0296 /* uint16[] */ -#define CSR_PSKEY_USR13 0x0297 /* uint16[] */ -#define CSR_PSKEY_USR14 0x0298 /* uint16[] */ -#define CSR_PSKEY_USR15 0x0299 /* uint16[] */ -#define CSR_PSKEY_USR16 0x029a /* uint16[] */ -#define CSR_PSKEY_USR17 0x029b /* uint16[] */ -#define CSR_PSKEY_USR18 0x029c /* uint16[] */ -#define CSR_PSKEY_USR19 0x029d /* uint16[] */ -#define CSR_PSKEY_USR20 0x029e /* uint16[] */ -#define CSR_PSKEY_USR21 0x029f /* uint16[] */ -#define CSR_PSKEY_USR22 0x02a0 /* uint16[] */ -#define CSR_PSKEY_USR23 0x02a1 /* uint16[] */ -#define CSR_PSKEY_USR24 0x02a2 /* uint16[] */ -#define CSR_PSKEY_USR25 0x02a3 /* uint16[] */ -#define CSR_PSKEY_USR26 0x02a4 /* uint16[] */ -#define CSR_PSKEY_USR27 0x02a5 /* uint16[] */ -#define CSR_PSKEY_USR28 0x02a6 /* uint16[] */ -#define CSR_PSKEY_USR29 0x02a7 /* uint16[] */ -#define CSR_PSKEY_USR30 0x02a8 /* uint16[] */ -#define CSR_PSKEY_USR31 0x02a9 /* uint16[] */ -#define CSR_PSKEY_USR32 0x02aa /* uint16[] */ -#define CSR_PSKEY_USR33 0x02ab /* uint16[] */ -#define CSR_PSKEY_USR34 0x02ac /* uint16[] */ -#define CSR_PSKEY_USR35 0x02ad /* uint16[] */ -#define CSR_PSKEY_USR36 0x02ae /* uint16[] */ -#define CSR_PSKEY_USR37 0x02af /* uint16[] */ -#define CSR_PSKEY_USR38 0x02b0 /* uint16[] */ -#define CSR_PSKEY_USR39 0x02b1 /* uint16[] */ -#define CSR_PSKEY_USR40 0x02b2 /* uint16[] */ -#define CSR_PSKEY_USR41 0x02b3 /* uint16[] */ -#define CSR_PSKEY_USR42 0x02b4 /* uint16[] */ -#define CSR_PSKEY_USR43 0x02b5 /* uint16[] */ -#define CSR_PSKEY_USR44 0x02b6 /* uint16[] */ -#define CSR_PSKEY_USR45 0x02b7 /* uint16[] */ -#define CSR_PSKEY_USR46 0x02b8 /* uint16[] */ -#define CSR_PSKEY_USR47 0x02b9 /* uint16[] */ -#define CSR_PSKEY_USR48 0x02ba /* uint16[] */ -#define CSR_PSKEY_USR49 0x02bb /* uint16[] */ -#define CSR_PSKEY_USB_VERSION 0x02bc /* uint16 */ -#define CSR_PSKEY_USB_DEVICE_CLASS_CODES 0x02bd /* usbclass */ -#define CSR_PSKEY_USB_VENDOR_ID 0x02be /* uint16 */ -#define CSR_PSKEY_USB_PRODUCT_ID 0x02bf /* uint16 */ -#define CSR_PSKEY_USB_MANUF_STRING 0x02c1 /* unicodestring */ -#define CSR_PSKEY_USB_PRODUCT_STRING 0x02c2 /* unicodestring */ -#define CSR_PSKEY_USB_SERIAL_NUMBER_STRING 0x02c3 /* unicodestring */ -#define CSR_PSKEY_USB_CONFIG_STRING 0x02c4 /* unicodestring */ -#define CSR_PSKEY_USB_ATTRIBUTES 0x02c5 /* uint8 */ -#define CSR_PSKEY_USB_MAX_POWER 0x02c6 /* uint16 */ -#define CSR_PSKEY_USB_BT_IF_CLASS_CODES 0x02c7 /* usbclass */ -#define CSR_PSKEY_USB_LANGID 0x02c9 /* uint16 */ -#define CSR_PSKEY_USB_DFU_CLASS_CODES 0x02ca /* usbclass */ -#define CSR_PSKEY_USB_DFU_PRODUCT_ID 0x02cb /* uint16 */ -#define CSR_PSKEY_USB_PIO_DETACH 0x02ce /* uint16 */ -#define CSR_PSKEY_USB_PIO_WAKEUP 0x02cf /* uint16 */ -#define CSR_PSKEY_USB_PIO_PULLUP 0x02d0 /* uint16 */ -#define CSR_PSKEY_USB_PIO_VBUS 0x02d1 /* uint16 */ -#define CSR_PSKEY_USB_PIO_WAKE_TIMEOUT 0x02d2 /* uint16 */ -#define CSR_PSKEY_USB_PIO_RESUME 0x02d3 /* uint16 */ -#define CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES 0x02d4 /* usbclass */ -#define CSR_PSKEY_USB_SUSPEND_PIO_LEVEL 0x02d5 /* uint16 */ -#define CSR_PSKEY_USB_SUSPEND_PIO_DIR 0x02d6 /* uint16 */ -#define CSR_PSKEY_USB_SUSPEND_PIO_MASK 0x02d7 /* uint16 */ -#define CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE 0x02d8 /* uint8 */ -#define CSR_PSKEY_USB_CONFIG 0x02d9 /* uint16 */ -#define CSR_PSKEY_RADIOTEST_ATTEN_INIT 0x0320 /* uint16 */ -#define CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME 0x0326 /* TIME */ -#define CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME 0x0327 /* TIME */ -#define CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE 0x0328 /* bool */ -#define CSR_PSKEY_RADIOTEST_DISABLE_MODULATION 0x032c /* bool */ -#define CSR_PSKEY_RFCOMM_FCON_THRESHOLD 0x0352 /* uint16 */ -#define CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD 0x0353 /* uint16 */ -#define CSR_PSKEY_IPV6_STATIC_ADDR 0x0354 /* uint16[] */ -#define CSR_PSKEY_IPV4_STATIC_ADDR 0x0355 /* uint32 */ -#define CSR_PSKEY_IPV6_STATIC_PREFIX_LEN 0x0356 /* uint8 */ -#define CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR 0x0357 /* uint16[] */ -#define CSR_PSKEY_IPV4_STATIC_SUBNET_MASK 0x0358 /* uint32 */ -#define CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR 0x0359 /* uint32 */ -#define CSR_PSKEY_MDNS_NAME 0x035a /* char[] */ -#define CSR_PSKEY_FIXED_PIN 0x035b /* uint8[] */ -#define CSR_PSKEY_MDNS_PORT 0x035c /* uint16 */ -#define CSR_PSKEY_MDNS_TTL 0x035d /* uint8 */ -#define CSR_PSKEY_MDNS_IPV4_ADDR 0x035e /* uint32 */ -#define CSR_PSKEY_ARP_CACHE_TIMEOUT 0x035f /* uint16 */ -#define CSR_PSKEY_HFP_POWER_TABLE 0x0360 /* uint16[] */ -#define CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS 0x03e7 /* uint32[] */ -#define CSR_PSKEY_DRAIN_BORE_COUNTERS 0x03e6 /* uint32[] */ -#define CSR_PSKEY_LOOP_FILTER_TRIM 0x03e4 /* uint16 */ -#define CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK 0x03e3 /* uint32[] */ -#define CSR_PSKEY_VM_E2_CACHE_LIMIT 0x03e2 /* uint16 */ -#define CSR_PSKEY_FORCE_16MHZ_REF_PIO 0x03e1 /* uint16 */ -#define CSR_PSKEY_CDMA_LO_REF_LIMITS 0x03df /* uint16 */ -#define CSR_PSKEY_CDMA_LO_ERROR_LIMITS 0x03de /* uint16 */ -#define CSR_PSKEY_CLOCK_STARTUP_DELAY 0x03dd /* uint16 */ -#define CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR 0x03dc /* int16 */ -#define CSR_PSKEY_TEMPERATURE_CALIBRATION 0x03db /* temperature_calibration */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA 0x03da /* temperature_calibration[] */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL 0x03d9 /* temperature_calibration[] */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB 0x03d8 /* temperature_calibration[] */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM 0x03d7 /* temperature_calibration[] */ -#define CSR_PSKEY_TEST_DELTA_OFFSET 0x03d6 /* uint16 */ -#define CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET 0x03d4 /* uint16 */ -#define CSR_PSKEY_TEST_FORCE_OFFSET 0x03d3 /* bool */ -#define CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS 0x03cf /* uint16 */ -#define CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS 0x03ce /* uint16 */ -#define CSR_PSKEY_INITIAL_BOOTMODE 0x03cd /* int16 */ -#define CSR_PSKEY_ONCHIP_HCI_CLIENT 0x03cc /* bool */ -#define CSR_PSKEY_RX_ATTEN_BACKOFF 0x03ca /* uint16 */ -#define CSR_PSKEY_RX_ATTEN_UPDATE_RATE 0x03c9 /* uint16 */ -#define CSR_PSKEY_SYNTH_TXRX_THRESHOLDS 0x03c7 /* uint16 */ -#define CSR_PSKEY_MIN_WAIT_STATES 0x03c6 /* uint16 */ -#define CSR_PSKEY_RSSI_CORRECTION 0x03c5 /* int8 */ -#define CSR_PSKEY_SCHED_THROTTLE_TIMEOUT 0x03c4 /* TIME */ -#define CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK 0x03c3 /* bool */ -#define CSR_PSKEY_TRIM_RADIO_FILTERS 0x03c2 /* uint16 */ -#define CSR_PSKEY_TRANSMIT_OFFSET 0x03c1 /* int16 */ -#define CSR_PSKEY_USB_VM_CONTROL 0x03c0 /* bool */ -#define CSR_PSKEY_MR_ANA_RX_FTRIM 0x03bf /* uint16 */ -#define CSR_PSKEY_I2C_CONFIG 0x03be /* uint16 */ -#define CSR_PSKEY_IQ_LVL_RX 0x03bd /* uint16 */ -#define CSR_PSKEY_MR_TX_FILTER_CONFIG 0x03bb /* uint32 */ -#define CSR_PSKEY_MR_TX_CONFIG2 0x03ba /* uint16 */ -#define CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET 0x03b9 /* bool */ -#define CSR_PSKEY_LC_USE_THROTTLING 0x03b8 /* bool */ -#define CSR_PSKEY_CHARGER_TRIM 0x03b7 /* uint16 */ -#define CSR_PSKEY_CLOCK_REQUEST_FEATURES 0x03b6 /* uint16 */ -#define CSR_PSKEY_TRANSMIT_OFFSET_CLASS1 0x03b4 /* int16 */ -#define CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO 0x03b3 /* uint16 */ -#define CSR_PSKEY_MR_PIO_CONFIG 0x03b2 /* uint16 */ -#define CSR_PSKEY_UART_CONFIG2 0x03b1 /* uint8 */ -#define CSR_PSKEY_CLASS1_IQ_LVL 0x03b0 /* uint16 */ -#define CSR_PSKEY_CLASS1_TX_CONFIG2 0x03af /* uint16 */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1 0x03ae /* temperature_calibration[] */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1 0x03ad /* temperature_calibration[] */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR 0x03ac /* temperature_calibration[] */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER 0x03ab /* temperature_calibration[] */ -#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD 0x03aa /* temperature_calibration[] */ -#define CSR_PSKEY_RX_MR_EQ_TAPS 0x03a9 /* uint16[] */ -#define CSR_PSKEY_TX_PRE_LVL_CLASS1 0x03a8 /* uint8 */ -#define CSR_PSKEY_ANALOGUE_ATTENUATOR 0x03a7 /* bool */ -#define CSR_PSKEY_MR_RX_FILTER_TRIM 0x03a6 /* uint16 */ -#define CSR_PSKEY_MR_RX_FILTER_RESPONSE 0x03a5 /* int16[] */ -#define CSR_PSKEY_PIO_WAKEUP_STATE 0x039f /* uint16 */ -#define CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP 0x0394 /* int16 */ -#define CSR_PSKEY_LO_DIV_LATCH_BYPASS 0x0393 /* bool */ -#define CSR_PSKEY_LO_VCO_STANDBY 0x0392 /* bool */ -#define CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT 0x0391 /* uint16 */ -#define CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER 0x0390 /* uint16 */ -#define CSR_PSKEY_USB_ATTRIBUTES_POWER 0x03f2 /* bool */ -#define CSR_PSKEY_USB_ATTRIBUTES_WAKEUP 0x03f3 /* bool */ -#define CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT 0x03f4 /* bool */ -#define CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD 0x03f5 /* bool */ -#define CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD 0x03f6 /* bool */ -#define CSR_PSKEY_UART_CONFIG_STOP_BITS 0x03fc /* bool */ -#define CSR_PSKEY_UART_CONFIG_PARITY_BIT 0x03fd /* uint16 */ -#define CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN 0x03fe /* bool */ -#define CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN 0x03ff /* bool */ -#define CSR_PSKEY_UART_CONFIG_RTS 0x0400 /* bool */ -#define CSR_PSKEY_UART_CONFIG_TX_ZERO_EN 0x0401 /* bool */ -#define CSR_PSKEY_UART_CONFIG_NON_BCSP_EN 0x0402 /* bool */ -#define CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY 0x0403 /* uint16 */ -#define CSR_PSKEY_UART_SEQ_TIMEOUT 0x0405 /* uint16 */ -#define CSR_PSKEY_UART_SEQ_RETRIES 0x0406 /* uint16 */ -#define CSR_PSKEY_UART_SEQ_WINSIZE 0x0407 /* uint16 */ -#define CSR_PSKEY_UART_USE_CRC_ON_TX 0x0408 /* bool */ -#define CSR_PSKEY_UART_HOST_INITIAL_STATE 0x0409 /* hwakeup_state */ -#define CSR_PSKEY_UART_HOST_ATTENTION_SPAN 0x040a /* uint16 */ -#define CSR_PSKEY_UART_HOST_WAKEUP_TIME 0x040b /* uint16 */ -#define CSR_PSKEY_UART_HOST_WAKEUP_WAIT 0x040c /* uint16 */ -#define CSR_PSKEY_BCSP_LM_MODE 0x0410 /* uint16 */ -#define CSR_PSKEY_BCSP_LM_SYNC_RETRIES 0x0411 /* uint16 */ -#define CSR_PSKEY_BCSP_LM_TSHY 0x0412 /* uint16 */ -#define CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS 0x0417 /* bool */ -#define CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT 0x0418 /* uint16 */ -#define CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN 0x0419 /* bool */ -#define CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN 0x041a /* bool */ -#define CSR_PSKEY_UART_DFU_CONFIG_RTS 0x041b /* bool */ -#define CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN 0x041c /* bool */ -#define CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN 0x041d /* bool */ -#define CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY 0x041e /* uint16 */ -#define CSR_PSKEY_AMUX_AIO0 0x041f /* ana_amux_sel */ -#define CSR_PSKEY_AMUX_AIO1 0x0420 /* ana_amux_sel */ -#define CSR_PSKEY_AMUX_AIO2 0x0421 /* ana_amux_sel */ -#define CSR_PSKEY_AMUX_AIO3 0x0422 /* ana_amux_sel */ -#define CSR_PSKEY_LOCAL_NAME_SIMPLIFIED 0x0423 /* local_name_complete */ -#define CSR_PSKEY_EXTENDED_STUB 0x2001 /* uint16 */ - -char *csr_builddeftostr(uint16_t def); -char *csr_buildidtostr(uint16_t id); -char *csr_chipvertostr(uint16_t ver, uint16_t rev); -char *csr_pskeytostr(uint16_t pskey); -char *csr_pskeytoval(uint16_t pskey); - -int csr_open_hci(char *device); -int csr_read_hci(uint16_t varid, uint8_t *value, uint16_t length); -int csr_write_hci(uint16_t varid, uint8_t *value, uint16_t length); -void csr_close_hci(void); - -int csr_open_usb(char *device); -int csr_read_usb(uint16_t varid, uint8_t *value, uint16_t length); -int csr_write_usb(uint16_t varid, uint8_t *value, uint16_t length); -void csr_close_usb(void); - -int csr_open_bcsp(char *device, speed_t bcsp_rate); -int csr_read_bcsp(uint16_t varid, uint8_t *value, uint16_t length); -int csr_write_bcsp(uint16_t varid, uint8_t *value, uint16_t length); -void csr_close_bcsp(void); - -int csr_open_h4(char *device); -int csr_read_h4(uint16_t varid, uint8_t *value, uint16_t length); -int csr_write_h4(uint16_t varid, uint8_t *value, uint16_t length); -void csr_close_h4(void); - -int csr_open_3wire(char *device); -int csr_read_3wire(uint16_t varid, uint8_t *value, uint16_t length); -int csr_write_3wire(uint16_t varid, uint8_t *value, uint16_t length); -void csr_close_3wire(void); - -int csr_write_varid_valueless(int dd, uint16_t seqnum, uint16_t varid); -int csr_write_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length); -int csr_read_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length); -int csr_read_varid_uint16(int dd, uint16_t seqnum, uint16_t varid, uint16_t *value); -int csr_read_varid_uint32(int dd, uint16_t seqnum, uint16_t varid, uint32_t *value); -int csr_read_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length); -int csr_write_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length); -int csr_read_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t *value); -int csr_write_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t value); -int csr_read_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t *value); -int csr_write_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t value); - -int psr_put(uint16_t pskey, uint8_t *value, uint16_t size); -int psr_get(uint16_t *pskey, uint8_t *value, uint16_t *size); -int psr_read(const char *filename); -int psr_print(void); diff --git a/hciconfig.1 b/hciconfig.1 deleted file mode 100644 index 633ffa3ff494..000000000000 --- a/hciconfig.1 +++ /dev/null @@ -1,272 +0,0 @@ -.TH HCICONFIG 1 "Nov 11 2002" BlueZ "Linux System Administration" -.SH NAME -hciconfig \- configure Bluetooth devices -.SH SYNOPSIS -.B hciconfig -.B \-h -.br -.B hciconfig -.RB [\| \-a \|] -.br -.B hciconfig -.RB [\| \-a \|] -.B hciX -.RI [\| command -.RI [\| "command parameters" \|]\|] - -.SH DESCRIPTION -.LP -.B hciconfig -is used to configure Bluetooth devices. -.I hciX -is the name of a Bluetooth device installed in the system. If -.I hciX -is not given, -.B hciconfig -prints name and basic information about all the Bluetooth devices installed in -the system. If -.I hciX -is given but no command is given, it prints basic information on device -.I hciX -only. Basic information is -interface type, BD address, ACL MTU, SCO MTU, flags (up, init, running, raw, -page scan enabled, inquiry scan enabled, inquiry, authentication enabled, -encryption enabled). -.SH OPTIONS -.TP -.B \-h, \-\-help -Gives a list of possible commands. -.TP -.B \-a, \-\-all -Other than the basic info, print features, packet type, link policy, link mode, -name, class, version. -.SH COMMANDS -.TP -.B up -Open and initialize HCI device. -.TP -.B down -Close HCI device. -.TP -.B reset -Reset HCI device. -.TP -.B rstat -Reset statistic counters. -.TP -.B auth -Enable authentication (sets device to security mode 3). -.TP -.B noauth -Disable authentication. -.TP -.B encrypt -Enable encryption (sets device to security mode 3). -.TP -.B noencrypt -Disable encryption. -.TP -.B secmgr -Enable security manager (current kernel support is limited). -.TP -.B nosecmgr -Disable security manager. -.TP -.B piscan -Enable page and inquiry scan. -.TP -.B noscan -Disable page and inquiry scan. -.TP -.B iscan -Enable inquiry scan, disable page scan. -.TP -.B pscan -Enable page scan, disable inquiry scan. -.TP -\fBptype\fP [\fItype\fP] -With no -.I type -, displays the current packet types. Otherwise, all the packet types specified -by -.I type -are set. -.I type -is a comma-separated list of packet types, where the possible packet types are -.BR DM1 , -.BR DM3 , -.BR DM5 , -.BR DH1 , -.BR DH3 , -.BR DH5 , -.BR HV1 , -.BR HV2 , -.BR HV3 . -.TP -.BI name " [name]" -With no -.IR name , -prints local name. Otherwise, sets local name to -.IR name . -.TP -.BI class " [class]" -With no -.IR class , -prints class of device. Otherwise, sets class of device to -.IR class . -.I -class -is a 24-bit hex number describing the class of device, as specified in section -1.2 of the Bluetooth Assigned Numers document. -.TP -.BI voice " [voice]" -With no -.IR voice , -prints voice setting. Otherwise, sets voice setting to -.IR voice . -.I voice -is a 16-bit hex number describing the voice setting. -.TP -.BI iac " [iac]" -With no -.IR iac , -prints the current IAC setting. Otherwise, sets the IAC to -.IR iac . -.TP -.BI inqtpl " [level]" -With no -.IR level , -prints out the current inquiry transmit power level. Otherwise, sets -inquiry transmit power level to -.IR level . -.TP -.BI inqmode " [mode]" -With no -.IR mode , -prints out the current inquiry mode. Otherwise, sets inquiry mode to -.IR mode . -.TP -.BI inqdata " [data]" -With no -.IR name , -prints out the current inquiry data. Otherwise, sets inquiry data to -.IR data . -.TP -.BI inqtype " [type]" -With no -.IR type , -prints out the current inquiry scan type. Otherwise, sets inquiry scan type to -.IR type . -.TP -\fBinqparams\fP [\fIwin\fP:\fIint\fP] -With no -.IR win : int , -prints inquiry scan window and interval. Otherwise, sets inquiry scan window -to -.I win -slots and inquiry scan interval to -.I int -slots. -.TP -\fBpageparms\fP [\fIwin\fP:\fIint\fP] -With no -.IR win : int , -prints page scan window and interval. Otherwise, sets page scan window to -.I win -slots and page scan interval to -.I int -slots. -.TP -.BI pageto " [to]" -With no -.IR to , -prints page timeout. Otherwise, sets page timeout -to .I -to -slots. -.TP -.BI afhmode " [mode]" -With no -.IR mode , -prints out the current AFH mode. Otherwise, sets AFH mode to -.IR mode . -.TP -.BI sspmode " [mode]" -With no -.IR mode , -prints out the current Simple Pairing mode. Otherwise, sets Simple Pairing mode to -.IR mode . -.TP -\fBaclmtu\fP \fImtu\fP:\fIpkt\fP -Sets ACL MTU to -to -.I mtu -bytes and ACL buffer size to -.I pkt -packets. -.TP -\fBscomtu\fP \fImtu\fP:\fIpkt\fP -Sets SCO MTU to -.I mtu -bytes and SCO buffer size to -.I pkt -packets. -.TP -.BI delkey " <bdaddr>" -This command deletes the stored link key for -.I bdaddr -from the device. -.TP -.BI oobdata -Get local OOB data (invalidates previously read data). -.TP -.BI commands -Display supported commands. -.TP -.BI features -Display device features. -.TP -.BI version -Display version information. -.TP -.BI revision -Display revision information. -.TP -.BI lm " [mode]" -With no -.I mode -, prints link mode. -.B MASTER -or -.B SLAVE -mean, respectively, to ask to become master or to remain slave when a -connection request comes in. The additional keyword -.B ACCEPT -means that baseband connections will be accepted even if there are no -listening -.I AF_BLUETOOTH -sockets. -.I mode -is -.B NONE -or a comma-separated list of keywords, where possible keywords are -.B MASTER -and -.B "ACCEPT" . -.B NONE -sets link policy to the default behaviour of remaining slave and not accepting -baseband connections when there are no listening -.I AF_BLUETOOTH -sockets. If -.B MASTER -is present, the device will ask to become master if a connection request comes -in. If -.B ACCEPT -is present, the device will accept baseband connections even when there are no -listening -.I AF_BLUETOOTH -sockets. -.SH AUTHORS -Written by Maxim Krasnyansky <maxk@qualcomm.com> and Marcel Holtmann <marcel@holtmann.org> -.PP -man page by Fabrizio Gennari <fabrizio.gennari@philips.com> diff --git a/hciconfig.c b/hciconfig.c deleted file mode 100644 index 12153475a041..000000000000 --- a/hciconfig.c +++ /dev/null @@ -1,2064 +0,0 @@ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2000-2001 Qualcomm Incorporated - * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com> - * Copyright (C) 2002-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 <ctype.h> -#include <unistd.h> -#include <stdlib.h> -#include <string.h> -#include <getopt.h> -#include <sys/param.h> -#include <sys/ioctl.h> -#include <sys/socket.h> -#include <sys/stat.h> - -#include "bluetooth/bluetooth.h" -#include "bluetooth/hci.h" -#include "bluetooth/hci_lib.h" - -#include "textfile.h" -#include "util.h" -#include "csr.h" - -static struct hci_dev_info di; -static int all; - -static void print_dev_hdr(struct hci_dev_info *di); -static void print_dev_info(int ctl, struct hci_dev_info *di); - -static void print_dev_list(int ctl, int flags) -{ - struct hci_dev_list_req *dl; - struct hci_dev_req *dr; - int i; - - if (!(dl = malloc(HCI_MAX_DEV * sizeof(struct hci_dev_req) + - sizeof(uint16_t)))) { - perror("Can't allocate memory"); - exit(1); - } - dl->dev_num = HCI_MAX_DEV; - dr = dl->dev_req; - - if (ioctl(ctl, HCIGETDEVLIST, (void *) dl) < 0) { - perror("Can't get device list"); - free(dl); - exit(1); - } - - for (i = 0; i< dl->dev_num; i++) { - di.dev_id = (dr+i)->dev_id; - if (ioctl(ctl, HCIGETDEVINFO, (void *) &di) < 0) - continue; - print_dev_info(ctl, &di); - } - - free(dl); -} - -static void print_pkt_type(struct hci_dev_info *di) -{ - char *str; - str = hci_ptypetostr(di->pkt_type); - printf("\tPacket type: %s\n", str); - bt_free(str); -} - -static void print_link_policy(struct hci_dev_info *di) -{ - printf("\tLink policy: %s\n", hci_lptostr(di->link_policy)); -} - -static void print_link_mode(struct hci_dev_info *di) -{ - char *str; - str = hci_lmtostr(di->link_mode); - printf("\tLink mode: %s\n", str); - bt_free(str); -} - -static void print_dev_features(struct hci_dev_info *di, int format) -{ - printf("\tFeatures: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " - "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", - di->features[0], di->features[1], di->features[2], - di->features[3], di->features[4], di->features[5], - di->features[6], di->features[7]); - - if (format) { - char *tmp = lmp_featurestostr(di->features, "\t\t", 63); - printf("%s\n", tmp); - bt_free(tmp); - } -} - -static void print_le_states(uint64_t states) -{ - int i; - const char *le_states[] = { - "Non-connectable Advertising State" , - "Scannable Advertising State", - "Connectable Advertising State", - "Directed Advertising State", - "Passive Scanning State", - "Active Scanning State", - "Initiating State/Connection State in Master Role", - "Connection State in the Slave Role", - "Non-connectable Advertising State and Passive Scanning State combination", - "Scannable Advertising State and Passive Scanning State combination", - "Connectable Advertising State and Passive Scanning State combination", - "Directed Advertising State and Passive Scanning State combination", - "Non-connectable Advertising State and Active Scanning State combination", - "Scannable Advertising State and Active Scanning State combination", - "Connectable Advertising State and Active Scanning State combination", - "Directed Advertising State and Active Scanning State combination", - "Non-connectable Advertising State and Initiating State combination", - "Scannable Advertising State and Initiating State combination", - "Non-connectable Advertising State and Master Role combination", - "Scannable Advertising State and Master Role combination", - "Non-connectable Advertising State and Slave Role combination", - "Scannable Advertising State and Slave Role combination", - "Passive Scanning State and Initiating State combination", - "Active Scanning State and Initiating State combination", - "Passive Scanning State and Master Role combination", - "Active Scanning State and Master Role combination", - "Passive Scanning State and Slave Role combination", - "Active Scanning State and Slave Role combination", - "Initiating State and Master Role combination/Master Role and Master Role combination", - NULL - }; - - printf("Supported link layer states:\n"); - for (i = 0; le_states[i]; i++) { - const char *status; - - status = states & (1 << i) ? "YES" : "NO "; - printf("\t%s %s\n", status, le_states[i]); - } -} - -static void cmd_rstat(int ctl, int hdev, char *opt) -{ - /* Reset HCI device stat counters */ - if (ioctl(ctl, HCIDEVRESTAT, hdev) < 0) { - fprintf(stderr, "Can't reset stats counters hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -} - -static void cmd_scan(int ctl, int hdev, char *opt) -{ - struct hci_dev_req dr; - - dr.dev_id = hdev; - dr.dev_opt = SCAN_DISABLED; - if (!strcmp(opt, "iscan")) - dr.dev_opt = SCAN_INQUIRY; - else if (!strcmp(opt, "pscan")) - dr.dev_opt = SCAN_PAGE; - else if (!strcmp(opt, "piscan")) - dr.dev_opt = SCAN_PAGE | SCAN_INQUIRY; - - if (ioctl(ctl, HCISETSCAN, (unsigned long) &dr) < 0) { - fprintf(stderr, "Can't set scan mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -} - -static void cmd_le_addr(int ctl, int hdev, char *opt) -{ - struct hci_request rq; - le_set_random_address_cp cp; - uint8_t status; - int dd, err, ret; - - if (!opt) - return; - - if (hdev < 0) - hdev = hci_get_route(NULL); - - dd = hci_open_dev(hdev); - if (dd < 0) { - err = -errno; - fprintf(stderr, "Could not open device: %s(%d)\n", - strerror(-err), -err); - exit(1); - } - - memset(&cp, 0, sizeof(cp)); - - str2ba(opt, &cp.bdaddr); - - memset(&rq, 0, sizeof(rq)); - rq.ogf = OGF_LE_CTL; - rq.ocf = OCF_LE_SET_RANDOM_ADDRESS; - rq.cparam = &cp; - rq.clen = LE_SET_RANDOM_ADDRESS_CP_SIZE; - rq.rparam = &status; - rq.rlen = 1; - - ret = hci_send_req(dd, &rq, 1000); - if (status || ret < 0) { - err = -errno; - fprintf(stderr, "Can't set random address for hci%d: " - "%s (%d)\n", hdev, strerror(-err), -err); - } - - hci_close_dev(dd); -} - -static void cmd_le_adv(int ctl, int hdev, char *opt) -{ - struct hci_request rq; - le_set_advertise_enable_cp advertise_cp; - le_set_advertising_parameters_cp adv_params_cp; - uint8_t status; - int dd, ret; - - if (hdev < 0) - hdev = hci_get_route(NULL); - - dd = hci_open_dev(hdev); - if (dd < 0) { - perror("Could not open device"); - exit(1); - } - - memset(&adv_params_cp, 0, sizeof(adv_params_cp)); - adv_params_cp.min_interval = htobs(0x0800); - adv_params_cp.max_interval = htobs(0x0800); - if (opt) - adv_params_cp.advtype = atoi(opt); - adv_params_cp.chan_map = 7; - - memset(&rq, 0, sizeof(rq)); - rq.ogf = OGF_LE_CTL; - rq.ocf = OCF_LE_SET_ADVERTISING_PARAMETERS; - rq.cparam = &adv_params_cp; - rq.clen = LE_SET_ADVERTISING_PARAMETERS_CP_SIZE; - rq.rparam = &status; - rq.rlen = 1; - - ret = hci_send_req(dd, &rq, 1000); - if (ret < 0) - goto done; - - memset(&advertise_cp, 0, sizeof(advertise_cp)); - advertise_cp.enable = 0x01; - - memset(&rq, 0, sizeof(rq)); - rq.ogf = OGF_LE_CTL; - rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE; - rq.cparam = &advertise_cp; - rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE; - rq.rparam = &status; - rq.rlen = 1; - - ret = hci_send_req(dd, &rq, 1000); - -done: - hci_close_dev(dd); - - if (ret < 0) { - fprintf(stderr, "Can't set advertise mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (status) { - fprintf(stderr, - "LE set advertise enable on hci%d returned status %d\n", - hdev, status); - exit(1); - } -} - -static void cmd_no_le_adv(int ctl, int hdev, char *opt) -{ - struct hci_request rq; - le_set_advertise_enable_cp advertise_cp; - uint8_t status; - int dd, ret; - - if (hdev < 0) - hdev = hci_get_route(NULL); - - dd = hci_open_dev(hdev); - if (dd < 0) { - perror("Could not open device"); - exit(1); - } - - memset(&advertise_cp, 0, sizeof(advertise_cp)); - - memset(&rq, 0, sizeof(rq)); - rq.ogf = OGF_LE_CTL; - rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE; - rq.cparam = &advertise_cp; - rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE; - rq.rparam = &status; - rq.rlen = 1; - - ret = hci_send_req(dd, &rq, 1000); - - hci_close_dev(dd); - - if (ret < 0) { - fprintf(stderr, "Can't set advertise mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (status) { - fprintf(stderr, "LE set advertise enable on hci%d returned status %d\n", - hdev, status); - exit(1); - } -} - -static void cmd_le_states(int ctl, int hdev, char *opt) -{ - le_read_supported_states_rp rp; - struct hci_request rq; - int err, dd; - - if (hdev < 0) - hdev = hci_get_route(NULL); - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - memset(&rp, 0, sizeof(rp)); - memset(&rq, 0, sizeof(rq)); - - rq.ogf = OGF_LE_CTL; - rq.ocf = OCF_LE_READ_SUPPORTED_STATES; - rq.rparam = &rp; - rq.rlen = LE_READ_SUPPORTED_STATES_RP_SIZE; - - err = hci_send_req(dd, &rq, 1000); - - hci_close_dev(dd); - - if (err < 0) { - fprintf(stderr, "Can't read LE supported states on hci%d:" - " %s(%d)\n", hdev, strerror(errno), errno); - exit(1); - } - - if (rp.status) { - fprintf(stderr, "Read LE supported states on hci%d" - " returned status %d\n", hdev, rp.status); - exit(1); - } - - print_le_states(rp.states); -} - -static void cmd_iac(int ctl, int hdev, char *opt) -{ - int s = hci_open_dev(hdev); - - if (s < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - if (opt) { - int l = strtoul(opt, 0, 16); - uint8_t lap[3]; - if (!strcasecmp(opt, "giac")) { - l = 0x9e8b33; - } else if (!strcasecmp(opt, "liac")) { - l = 0x9e8b00; - } else if (l < 0x9e8b00 || l > 0x9e8b3f) { - printf("Invalid access code 0x%x\n", l); - exit(1); - } - lap[0] = (l & 0xff); - lap[1] = (l >> 8) & 0xff; - lap[2] = (l >> 16) & 0xff; - if (hci_write_current_iac_lap(s, 1, lap, 1000) < 0) { - printf("Failed to set IAC on hci%d: %s\n", hdev, strerror(errno)); - exit(1); - } - } else { - uint8_t lap[3 * MAX_IAC_LAP]; - int i, j; - uint8_t n; - if (hci_read_current_iac_lap(s, &n, lap, 1000) < 0) { - printf("Failed to read IAC from hci%d: %s\n", hdev, strerror(errno)); - exit(1); - } - print_dev_hdr(&di); - printf("\tIAC: "); - for (i = 0; i < n; i++) { - printf("0x"); - for (j = 3; j--; ) - printf("%02x", lap[j + 3 * i]); - if (i < n - 1) - printf(", "); - } - printf("\n"); - } - close(s); -} - -static void cmd_auth(int ctl, int hdev, char *opt) -{ - struct hci_dev_req dr; - - dr.dev_id = hdev; - if (!strcmp(opt, "auth")) - dr.dev_opt = AUTH_ENABLED; - else - dr.dev_opt = AUTH_DISABLED; - - if (ioctl(ctl, HCISETAUTH, (unsigned long) &dr) < 0) { - fprintf(stderr, "Can't set auth on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -} - -static void cmd_encrypt(int ctl, int hdev, char *opt) -{ - struct hci_dev_req dr; - - dr.dev_id = hdev; - if (!strcmp(opt, "encrypt")) - dr.dev_opt = ENCRYPT_P2P; - else - dr.dev_opt = ENCRYPT_DISABLED; - - if (ioctl(ctl, HCISETENCRYPT, (unsigned long) &dr) < 0) { - fprintf(stderr, "Can't set encrypt on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -} - -static void cmd_up(int ctl, int hdev, char *opt) -{ - /* Start HCI device */ - if (ioctl(ctl, HCIDEVUP, hdev) < 0) { - if (errno == EALREADY) - return; - fprintf(stderr, "Can't init device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -} - -static void cmd_down(int ctl, int hdev, char *opt) -{ - /* Stop HCI device */ - if (ioctl(ctl, HCIDEVDOWN, hdev) < 0) { - fprintf(stderr, "Can't down device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -} - -static void cmd_reset(int ctl, int hdev, char *opt) -{ - /* Reset HCI device */ -#if 0 - if (ioctl(ctl, HCIDEVRESET, hdev) < 0 ){ - fprintf(stderr, "Reset failed for device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -#endif - cmd_down(ctl, hdev, "down"); - cmd_up(ctl, hdev, "up"); -} - -static void cmd_ptype(int ctl, int hdev, char *opt) -{ - struct hci_dev_req dr; - - dr.dev_id = hdev; - - if (hci_strtoptype(opt, &dr.dev_opt)) { - if (ioctl(ctl, HCISETPTYPE, (unsigned long) &dr) < 0) { - fprintf(stderr, "Can't set pkttype on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - print_dev_hdr(&di); - print_pkt_type(&di); - } -} - -static void cmd_lp(int ctl, int hdev, char *opt) -{ - struct hci_dev_req dr; - - dr.dev_id = hdev; - - if (hci_strtolp(opt, &dr.dev_opt)) { - if (ioctl(ctl, HCISETLINKPOL, (unsigned long) &dr) < 0) { - fprintf(stderr, "Can't set link policy on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - print_dev_hdr(&di); - print_link_policy(&di); - } -} - -static void cmd_lm(int ctl, int hdev, char *opt) -{ - struct hci_dev_req dr; - - dr.dev_id = hdev; - - if (hci_strtolm(opt, &dr.dev_opt)) { - if (ioctl(ctl, HCISETLINKMODE, (unsigned long) &dr) < 0) { - fprintf(stderr, "Can't set default link mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - print_dev_hdr(&di); - print_link_mode(&di); - } -} - -static void cmd_aclmtu(int ctl, int hdev, char *opt) -{ - struct hci_dev_req dr = { .dev_id = hdev }; - uint16_t mtu, mpkt; - - if (!opt) - return; - - if (sscanf(opt, "%4hu:%4hu", &mtu, &mpkt) != 2) - return; - - dr.dev_opt = htobl(htobs(mpkt) | (htobs(mtu) << 16)); - - if (ioctl(ctl, HCISETACLMTU, (unsigned long) &dr) < 0) { - fprintf(stderr, "Can't set ACL mtu on hci%d: %s(%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -} - -static void cmd_scomtu(int ctl, int hdev, char *opt) -{ - struct hci_dev_req dr = { .dev_id = hdev }; - uint16_t mtu, mpkt; - - if (!opt) - return; - - if (sscanf(opt, "%4hu:%4hu", &mtu, &mpkt) != 2) - return; - - dr.dev_opt = htobl(htobs(mpkt) | (htobs(mtu) << 16)); - - if (ioctl(ctl, HCISETSCOMTU, (unsigned long) &dr) < 0) { - fprintf(stderr, "Can't set SCO mtu on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } -} - -static void cmd_features(int ctl, int hdev, char *opt) -{ - uint8_t features[8], max_page = 0; - char *tmp; - int i, dd; - - if (!(di.features[7] & LMP_EXT_FEAT)) { - print_dev_hdr(&di); - print_dev_features(&di, 1); - return; - } - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (hci_read_local_ext_features(dd, 0, &max_page, features, 1000) < 0) { - fprintf(stderr, "Can't read extended features hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (max_page < 1 && (features[6] & LMP_SIMPLE_PAIR)) - max_page = 1; - - print_dev_hdr(&di); - printf("\tFeatures%s: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " - "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", - (max_page > 0) ? " page 0" : "", - features[0], features[1], features[2], features[3], - features[4], features[5], features[6], features[7]); - - tmp = lmp_featurestostr(di.features, "\t\t", 63); - printf("%s\n", tmp); - bt_free(tmp); - - for (i = 1; i <= max_page; i++) { - if (hci_read_local_ext_features(dd, i, NULL, - features, 1000) < 0) - continue; - - printf("\tFeatures page %d: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " - "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", i, - features[0], features[1], features[2], features[3], - features[4], features[5], features[6], features[7]); - } - - hci_close_dev(dd); -} - -static void cmd_name(int ctl, int hdev, char *opt) -{ - int dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (opt) { - if (hci_write_local_name(dd, opt, 2000) < 0) { - fprintf(stderr, "Can't change local name on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - char name[249]; - int i; - - if (hci_read_local_name(dd, sizeof(name), name, 1000) < 0) { - fprintf(stderr, "Can't read local name on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - for (i = 0; i < 248 && name[i]; i++) { - if ((unsigned char) name[i] < 32 || name[i] == 127) - name[i] = '.'; - } - - name[248] = '\0'; - - print_dev_hdr(&di); - printf("\tName: '%s'\n", name); - } - - hci_close_dev(dd); -} - -/* - * see http://www.bluetooth.org/assigned-numbers/baseband.htm --- all - * strings are reproduced verbatim - */ -static char *get_minor_device_name(int major, int minor) -{ - switch (major) { - case 0: /* misc */ - return ""; - case 1: /* computer */ - switch (minor) { - case 0: - return "Uncategorized"; - case 1: - return "Desktop workstation"; - case 2: - return "Server"; - case 3: - return "Laptop"; - case 4: - return "Handheld"; - case 5: - return "Palm"; - case 6: - return "Wearable"; - } - break; - case 2: /* phone */ - switch (minor) { - case 0: - return "Uncategorized"; - case 1: - return "Cellular"; - case 2: - return "Cordless"; - case 3: - return "Smart phone"; - case 4: - return "Wired modem or voice gateway"; - case 5: - return "Common ISDN Access"; - case 6: - return "Sim Card Reader"; - } - break; - case 3: /* lan access */ - if (minor == 0) - return "Uncategorized"; - switch (minor / 8) { - case 0: - return "Fully available"; - case 1: - return "1-17% utilized"; - case 2: - return "17-33% utilized"; - case 3: - return "33-50% utilized"; - case 4: - return "50-67% utilized"; - case 5: - return "67-83% utilized"; - case 6: - return "83-99% utilized"; - case 7: - return "No service available"; - } - break; - case 4: /* audio/video */ - switch (minor) { - case 0: - return "Uncategorized"; - case 1: - return "Device conforms to the Headset profile"; - case 2: - return "Hands-free"; - /* 3 is reserved */ - case 4: - return "Microphone"; - case 5: - return "Loudspeaker"; - case 6: - return "Headphones"; - case 7: - return "Portable Audio"; - case 8: - return "Car Audio"; - case 9: - return "Set-top box"; - case 10: - return "HiFi Audio Device"; - case 11: - return "VCR"; - case 12: - return "Video Camera"; - case 13: - return "Camcorder"; - case 14: - return "Video Monitor"; - case 15: - return "Video Display and Loudspeaker"; - case 16: - return "Video Conferencing"; - /* 17 is reserved */ - case 18: - return "Gaming/Toy"; - } - break; - case 5: /* peripheral */ { - static char cls_str[48]; - - cls_str[0] = '\0'; - - switch (minor & 48) { - case 16: - strncpy(cls_str, "Keyboard", sizeof(cls_str)); - break; - case 32: - strncpy(cls_str, "Pointing device", sizeof(cls_str)); - break; - case 48: - strncpy(cls_str, "Combo keyboard/pointing device", sizeof(cls_str)); - break; - } - if ((minor & 15) && (strlen(cls_str) > 0)) - strcat(cls_str, "/"); - - switch (minor & 15) { - case 0: - break; - case 1: - strncat(cls_str, "Joystick", - sizeof(cls_str) - strlen(cls_str) - 1); - break; - case 2: - strncat(cls_str, "Gamepad", - sizeof(cls_str) - strlen(cls_str) - 1); - break; - case 3: - strncat(cls_str, "Remote control", - sizeof(cls_str) - strlen(cls_str) - 1); - break; - case 4: - strncat(cls_str, "Sensing device", - sizeof(cls_str) - strlen(cls_str) - 1); - break; - case 5: - strncat(cls_str, "Digitizer tablet", - sizeof(cls_str) - strlen(cls_str) - 1); - break; - case 6: - strncat(cls_str, "Card reader", - sizeof(cls_str) - strlen(cls_str) - 1); - break; - default: - strncat(cls_str, "(reserved)", - sizeof(cls_str) - strlen(cls_str) - 1); - break; - } - if (strlen(cls_str) > 0) - return cls_str; - break; - } - case 6: /* imaging */ - if (minor & 4) - return "Display"; - if (minor & 8) - return "Camera"; - if (minor & 16) - return "Scanner"; - if (minor & 32) - return "Printer"; - break; - case 7: /* wearable */ - switch (minor) { - case 1: - return "Wrist Watch"; - case 2: - return "Pager"; - case 3: - return "Jacket"; - case 4: - return "Helmet"; - case 5: - return "Glasses"; - } - break; - case 8: /* toy */ - switch (minor) { - case 1: - return "Robot"; - case 2: - return "Vehicle"; - case 3: - return "Doll / Action Figure"; - case 4: - return "Controller"; - case 5: - return "Game"; - } - break; - case 63: /* uncategorised */ - return ""; - } - return "Unknown (reserved) minor device class"; -} - -static void cmd_class(int ctl, int hdev, char *opt) -{ - static const char *services[] = { "Positioning", - "Networking", - "Rendering", - "Capturing", - "Object Transfer", - "Audio", - "Telephony", - "Information" }; - static const char *major_devices[] = { "Miscellaneous", - "Computer", - "Phone", - "LAN Access", - "Audio/Video", - "Peripheral", - "Imaging", - "Uncategorized" }; - int s = hci_open_dev(hdev); - - if (s < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - if (opt) { - uint32_t cod = strtoul(opt, NULL, 16); - if (hci_write_class_of_dev(s, cod, 2000) < 0) { - fprintf(stderr, "Can't write local class of device on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint8_t cls[3]; - if (hci_read_class_of_dev(s, cls, 1000) < 0) { - fprintf(stderr, "Can't read class of device on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - print_dev_hdr(&di); - printf("\tClass: 0x%02x%02x%02x\n", cls[2], cls[1], cls[0]); - printf("\tService Classes: "); - if (cls[2]) { - unsigned int i; - int first = 1; - for (i = 0; i < (sizeof(services) / sizeof(*services)); i++) - if (cls[2] & (1 << i)) { - if (!first) - printf(", "); - printf("%s", services[i]); - first = 0; - } - } else - printf("Unspecified"); - printf("\n\tDevice Class: "); - if ((cls[1] & 0x1f) >= sizeof(major_devices) / sizeof(*major_devices)) - printf("Invalid Device Class!\n"); - else - printf("%s, %s\n", major_devices[cls[1] & 0x1f], - get_minor_device_name(cls[1] & 0x1f, cls[0] >> 2)); - } - - hci_close_dev(s); -} - -static void cmd_voice(int ctl, int hdev, char *opt) -{ - static char *icf[] = { "Linear", - "u-Law", - "A-Law", - "Reserved" }; - - static char *idf[] = { "1's complement", - "2's complement", - "Sign-Magnitude", - "Reserved" }; - - static char *iss[] = { "8 bit", - "16 bit" }; - - static char *acf[] = { "CVSD", - "u-Law", - "A-Law", - "Reserved" }; - - int s = hci_open_dev(hdev); - - if (s < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - if (opt) { - uint16_t vs = htobs(strtoul(opt, NULL, 16)); - if (hci_write_voice_setting(s, vs, 2000) < 0) { - fprintf(stderr, "Can't write voice setting on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint16_t vs; - uint8_t ic; - if (hci_read_voice_setting(s, &vs, 1000) < 0) { - fprintf(stderr, "Can't read voice setting on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - vs = htobs(vs); - ic = (vs & 0x0300) >> 8; - print_dev_hdr(&di); - printf("\tVoice setting: 0x%04x%s\n", vs, - ((vs & 0x03fc) == 0x0060) ? " (Default Condition)" : ""); - printf("\tInput Coding: %s\n", icf[ic]); - printf("\tInput Data Format: %s\n", idf[(vs & 0xc0) >> 6]); - - if (!ic) { - printf("\tInput Sample Size: %s\n", - iss[(vs & 0x20) >> 5]); - printf("\t# of bits padding at MSB: %d\n", - (vs & 0x1c) >> 2); - } - printf("\tAir Coding Format: %s\n", acf[vs & 0x03]); - } - - hci_close_dev(s); -} - -static void cmd_delkey(int ctl, int hdev, char *opt) -{ - bdaddr_t bdaddr; - uint8_t all; - int dd; - - if (!opt) - return; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (!strcasecmp(opt, "all")) { - bacpy(&bdaddr, BDADDR_ANY); - all = 1; - } else { - str2ba(opt, &bdaddr); - all = 0; - } - - if (hci_delete_stored_link_key(dd, &bdaddr, all, 1000) < 0) { - fprintf(stderr, "Can't delete stored link key on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - hci_close_dev(dd); -} - -static void cmd_oob_data(int ctl, int hdev, char *opt) -{ - uint8_t hash[16], randomizer[16]; - int i, dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (hci_read_local_oob_data(dd, hash, randomizer, 1000) < 0) { - fprintf(stderr, "Can't read local OOB data on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - print_dev_hdr(&di); - printf("\tOOB Hash: "); - for (i = 0; i < 16; i++) - printf(" %02x", hash[i]); - printf("\n\tRandomizer:"); - for (i = 0; i < 16; i++) - printf(" %02x", randomizer[i]); - printf("\n"); - - hci_close_dev(dd); -} - -static void cmd_commands(int ctl, int hdev, char *opt) -{ - uint8_t cmds[64]; - char *str; - int i, n, dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (hci_read_local_commands(dd, cmds, 1000) < 0) { - fprintf(stderr, "Can't read support commands on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - print_dev_hdr(&di); - for (i = 0; i < 64; i++) { - if (!cmds[i]) - continue; - - printf("%s Octet %-2d = 0x%02x (Bit", - i ? "\t\t ": "\tCommands:", i, cmds[i]); - for (n = 0; n < 8; n++) - if (cmds[i] & (1 << n)) - printf(" %d", n); - printf(")\n"); - } - - str = hci_commandstostr(cmds, "\t", 71); - printf("%s\n", str); - bt_free(str); - - hci_close_dev(dd); -} - -static void cmd_version(int ctl, int hdev, char *opt) -{ - struct hci_version ver; - char *hciver, *lmpver; - int dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (hci_read_local_version(dd, &ver, 1000) < 0) { - fprintf(stderr, "Can't read version info hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - hciver = hci_vertostr(ver.hci_ver); - if (((di.type & 0x30) >> 4) == HCI_PRIMARY) - lmpver = lmp_vertostr(ver.lmp_ver); - else - lmpver = pal_vertostr(ver.lmp_ver); - - print_dev_hdr(&di); - printf("\tHCI Version: %s (0x%x) Revision: 0x%x\n" - "\t%s Version: %s (0x%x) Subversion: 0x%x\n" - "\tManufacturer: %s (%d)\n", - hciver ? hciver : "n/a", ver.hci_ver, ver.hci_rev, - (((di.type & 0x30) >> 4) == HCI_PRIMARY) ? "LMP" : "PAL", - lmpver ? lmpver : "n/a", ver.lmp_ver, ver.lmp_subver, - bt_compidtostr(ver.manufacturer), ver.manufacturer); - - if (hciver) - bt_free(hciver); - if (lmpver) - bt_free(lmpver); - - hci_close_dev(dd); -} - -static void cmd_inq_tpl(int ctl, int hdev, char *opt) -{ - int dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (opt) { - int8_t level = atoi(opt); - - if (hci_write_inquiry_transmit_power_level(dd, level, 2000) < 0) { - fprintf(stderr, "Can't set inquiry transmit power level on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - int8_t level; - - if (hci_read_inq_response_tx_power_level(dd, &level, 1000) < 0) { - fprintf(stderr, "Can't read inquiry transmit power level on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - print_dev_hdr(&di); - printf("\tInquiry transmit power level: %d\n", level); - } - - hci_close_dev(dd); -} - -static void cmd_inq_mode(int ctl, int hdev, char *opt) -{ - int dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (opt) { - uint8_t mode = atoi(opt); - - if (hci_write_inquiry_mode(dd, mode, 2000) < 0) { - fprintf(stderr, "Can't set inquiry mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint8_t mode; - - if (hci_read_inquiry_mode(dd, &mode, 1000) < 0) { - fprintf(stderr, "Can't read inquiry mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - print_dev_hdr(&di); - printf("\tInquiry mode: "); - switch (mode) { - case 0: - printf("Standard Inquiry\n"); - break; - case 1: - printf("Inquiry with RSSI\n"); - break; - case 2: - printf("Inquiry with RSSI or Extended Inquiry\n"); - break; - default: - printf("Unknown (0x%02x)\n", mode); - break; - } - } - - hci_close_dev(dd); -} - -static void cmd_inq_data(int ctl, int hdev, char *opt) -{ - int i, dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (opt) { - uint8_t fec = 0, data[HCI_MAX_EIR_LENGTH]; - char tmp[3]; - int i, size; - - memset(data, 0, sizeof(data)); - - memset(tmp, 0, sizeof(tmp)); - size = (strlen(opt) + 1) / 2; - if (size > HCI_MAX_EIR_LENGTH) - size = HCI_MAX_EIR_LENGTH; - - for (i = 0; i < size; i++) { - memcpy(tmp, opt + (i * 2), 2); - data[i] = strtol(tmp, NULL, 16); - } - - if (hci_write_ext_inquiry_response(dd, fec, data, 2000) < 0) { - fprintf(stderr, "Can't set extended inquiry response on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint8_t fec, data[HCI_MAX_EIR_LENGTH], len, type, *ptr; - char *str; - - if (hci_read_ext_inquiry_response(dd, &fec, data, 1000) < 0) { - fprintf(stderr, "Can't read extended inquiry response on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - print_dev_hdr(&di); - printf("\tFEC %s\n\t\t", fec ? "enabled" : "disabled"); - for (i = 0; i < HCI_MAX_EIR_LENGTH; i++) - printf("%02x%s%s", data[i], (i + 1) % 8 ? "" : " ", - (i + 1) % 16 ? " " : (i < 239 ? "\n\t\t" : "\n")); - - ptr = data; - while (*ptr) { - len = *ptr++; - type = *ptr++; - switch (type) { - case 0x01: - printf("\tFlags:"); - for (i = 0; i < len - 1; i++) - printf(" 0x%2.2x", *((uint8_t *) (ptr + i))); - printf("\n"); - break; - case 0x02: - case 0x03: - printf("\t%s service classes:", - type == 0x02 ? "Shortened" : "Complete"); - for (i = 0; i < (len - 1) / 2; i++) { - uint16_t val = get_le16((ptr + (i * 2))); - printf(" 0x%4.4x", val); - } - printf("\n"); - break; - case 0x08: - case 0x09: - str = malloc(len); - if (str) { - snprintf(str, len, "%s", ptr); - for (i = 0; i < len - 1; i++) { - if ((unsigned char) str[i] < 32 || str[i] == 127) - str[i] = '.'; - } - printf("\t%s local name: \'%s\'\n", - type == 0x08 ? "Shortened" : "Complete", str); - free(str); - } - break; - case 0x0a: - printf("\tTX power level: %d\n", *((int8_t *) ptr)); - break; - case 0x10: - printf("\tDevice ID with %d bytes data\n", - len - 1); - break; - default: - printf("\tUnknown type 0x%02x with %d bytes data\n", - type, len - 1); - break; - } - - ptr += (len - 1); - } - - printf("\n"); - } - - hci_close_dev(dd); -} - -static void cmd_inq_type(int ctl, int hdev, char *opt) -{ - int dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (opt) { - uint8_t type = atoi(opt); - - if (hci_write_inquiry_scan_type(dd, type, 2000) < 0) { - fprintf(stderr, "Can't set inquiry scan type on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint8_t type; - - if (hci_read_inquiry_scan_type(dd, &type, 1000) < 0) { - fprintf(stderr, "Can't read inquiry scan type on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - print_dev_hdr(&di); - printf("\tInquiry scan type: %s\n", - type == 1 ? "Interlaced Inquiry Scan" : "Standard Inquiry Scan"); - } - - hci_close_dev(dd); -} - -static void cmd_inq_parms(int ctl, int hdev, char *opt) -{ - struct hci_request rq; - int s; - - if ((s = hci_open_dev(hdev)) < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - memset(&rq, 0, sizeof(rq)); - - if (opt) { - unsigned int window, interval; - write_inq_activity_cp cp; - - if (sscanf(opt,"%4u:%4u", &window, &interval) != 2) { - printf("Invalid argument format\n"); - exit(1); - } - - rq.ogf = OGF_HOST_CTL; - rq.ocf = OCF_WRITE_INQ_ACTIVITY; - rq.cparam = &cp; - rq.clen = WRITE_INQ_ACTIVITY_CP_SIZE; - - cp.window = htobs((uint16_t) window); - cp.interval = htobs((uint16_t) interval); - - if (window < 0x12 || window > 0x1000) - printf("Warning: inquiry window out of range!\n"); - - if (interval < 0x12 || interval > 0x1000) - printf("Warning: inquiry interval out of range!\n"); - - if (hci_send_req(s, &rq, 2000) < 0) { - fprintf(stderr, "Can't set inquiry parameters name on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint16_t window, interval; - read_inq_activity_rp rp; - - rq.ogf = OGF_HOST_CTL; - rq.ocf = OCF_READ_INQ_ACTIVITY; - rq.rparam = &rp; - rq.rlen = READ_INQ_ACTIVITY_RP_SIZE; - - if (hci_send_req(s, &rq, 1000) < 0) { - fprintf(stderr, "Can't read inquiry parameters on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - if (rp.status) { - printf("Read inquiry parameters on hci%d returned status %d\n", - hdev, rp.status); - exit(1); - } - print_dev_hdr(&di); - - window = btohs(rp.window); - interval = btohs(rp.interval); - printf("\tInquiry interval: %u slots (%.2f ms), window: %u slots (%.2f ms)\n", - interval, (float)interval * 0.625, window, (float)window * 0.625); - } - - hci_close_dev(s); -} - -static void cmd_page_parms(int ctl, int hdev, char *opt) -{ - struct hci_request rq; - int s; - - if ((s = hci_open_dev(hdev)) < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - memset(&rq, 0, sizeof(rq)); - - if (opt) { - unsigned int window, interval; - write_page_activity_cp cp; - - if (sscanf(opt,"%4u:%4u", &window, &interval) != 2) { - printf("Invalid argument format\n"); - exit(1); - } - - rq.ogf = OGF_HOST_CTL; - rq.ocf = OCF_WRITE_PAGE_ACTIVITY; - rq.cparam = &cp; - rq.clen = WRITE_PAGE_ACTIVITY_CP_SIZE; - - cp.window = htobs((uint16_t) window); - cp.interval = htobs((uint16_t) interval); - - if (window < 0x12 || window > 0x1000) - printf("Warning: page window out of range!\n"); - - if (interval < 0x12 || interval > 0x1000) - printf("Warning: page interval out of range!\n"); - - if (hci_send_req(s, &rq, 2000) < 0) { - fprintf(stderr, "Can't set page parameters name on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint16_t window, interval; - read_page_activity_rp rp; - - rq.ogf = OGF_HOST_CTL; - rq.ocf = OCF_READ_PAGE_ACTIVITY; - rq.rparam = &rp; - rq.rlen = READ_PAGE_ACTIVITY_RP_SIZE; - - if (hci_send_req(s, &rq, 1000) < 0) { - fprintf(stderr, "Can't read page parameters on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - if (rp.status) { - printf("Read page parameters on hci%d returned status %d\n", - hdev, rp.status); - exit(1); - } - print_dev_hdr(&di); - - window = btohs(rp.window); - interval = btohs(rp.interval); - printf("\tPage interval: %u slots (%.2f ms), " - "window: %u slots (%.2f ms)\n", - interval, (float)interval * 0.625, - window, (float)window * 0.625); - } - - hci_close_dev(s); -} - -static void cmd_page_to(int ctl, int hdev, char *opt) -{ - struct hci_request rq; - int s; - - if ((s = hci_open_dev(hdev)) < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - memset(&rq, 0, sizeof(rq)); - - if (opt) { - unsigned int timeout; - write_page_timeout_cp cp; - - if (sscanf(opt,"%5u", &timeout) != 1) { - printf("Invalid argument format\n"); - exit(1); - } - - rq.ogf = OGF_HOST_CTL; - rq.ocf = OCF_WRITE_PAGE_TIMEOUT; - rq.cparam = &cp; - rq.clen = WRITE_PAGE_TIMEOUT_CP_SIZE; - - cp.timeout = htobs((uint16_t) timeout); - - if (timeout < 0x01 || timeout > 0xFFFF) - printf("Warning: page timeout out of range!\n"); - - if (hci_send_req(s, &rq, 2000) < 0) { - fprintf(stderr, "Can't set page timeout on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint16_t timeout; - read_page_timeout_rp rp; - - rq.ogf = OGF_HOST_CTL; - rq.ocf = OCF_READ_PAGE_TIMEOUT; - rq.rparam = &rp; - rq.rlen = READ_PAGE_TIMEOUT_RP_SIZE; - - if (hci_send_req(s, &rq, 1000) < 0) { - fprintf(stderr, "Can't read page timeout on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - if (rp.status) { - printf("Read page timeout on hci%d returned status %d\n", - hdev, rp.status); - exit(1); - } - print_dev_hdr(&di); - - timeout = btohs(rp.timeout); - printf("\tPage timeout: %u slots (%.2f ms)\n", - timeout, (float)timeout * 0.625); - } - - hci_close_dev(s); -} - -static void cmd_afh_mode(int ctl, int hdev, char *opt) -{ - int dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (opt) { - uint8_t mode = atoi(opt); - - if (hci_write_afh_mode(dd, mode, 2000) < 0) { - fprintf(stderr, "Can't set AFH mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint8_t mode; - - if (hci_read_afh_mode(dd, &mode, 1000) < 0) { - fprintf(stderr, "Can't read AFH mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - print_dev_hdr(&di); - printf("\tAFH mode: %s\n", mode == 1 ? "Enabled" : "Disabled"); - } - - hci_close_dev(dd); -} - -static void cmd_ssp_mode(int ctl, int hdev, char *opt) -{ - int dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (opt) { - uint8_t mode = atoi(opt); - - if (hci_write_simple_pairing_mode(dd, mode, 2000) < 0) { - fprintf(stderr, "Can't set Simple Pairing mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - } else { - uint8_t mode; - - if (hci_read_simple_pairing_mode(dd, &mode, 1000) < 0) { - fprintf(stderr, "Can't read Simple Pairing mode on hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - print_dev_hdr(&di); - printf("\tSimple Pairing mode: %s\n", - mode == 1 ? "Enabled" : "Disabled"); - } - - hci_close_dev(dd); -} - -static void print_rev_ericsson(int dd) -{ - struct hci_request rq; - unsigned char buf[102]; - - memset(&rq, 0, sizeof(rq)); - rq.ogf = OGF_VENDOR_CMD; - rq.ocf = 0x000f; - rq.cparam = NULL; - rq.clen = 0; - rq.rparam = &buf; - rq.rlen = sizeof(buf); - - if (hci_send_req(dd, &rq, 1000) < 0) { - printf("\nCan't read revision info: %s (%d)\n", - strerror(errno), errno); - return; - } - - printf("\t%s\n", buf + 1); -} - -static void print_rev_csr(int dd, uint16_t rev) -{ - uint16_t buildid, chipver, chiprev, maxkeylen, mapsco; - - if (csr_read_varid_uint16(dd, 0, CSR_VARID_BUILDID, &buildid) < 0) { - printf("\t%s\n", csr_buildidtostr(rev)); - return; - } - - printf("\t%s\n", csr_buildidtostr(buildid)); - - if (!csr_read_varid_uint16(dd, 1, CSR_VARID_CHIPVER, &chipver)) { - if (csr_read_varid_uint16(dd, 2, CSR_VARID_CHIPREV, &chiprev) < 0) - chiprev = 0; - printf("\tChip version: %s\n", csr_chipvertostr(chipver, chiprev)); - } - - if (!csr_read_varid_uint16(dd, 3, CSR_VARID_MAX_CRYPT_KEY_LENGTH, &maxkeylen)) - printf("\tMax key size: %d bit\n", maxkeylen * 8); - - if (!csr_read_pskey_uint16(dd, 4, CSR_PSKEY_HOSTIO_MAP_SCO_PCM, 0x0000, &mapsco)) - printf("\tSCO mapping: %s\n", mapsco ? "PCM" : "HCI"); -} - -static void print_rev_digianswer(int dd) -{ - struct hci_request rq; - unsigned char req[] = { 0x07 }; - unsigned char buf[102]; - - memset(&rq, 0, sizeof(rq)); - rq.ogf = OGF_VENDOR_CMD; - rq.ocf = 0x000e; - rq.cparam = req; - rq.clen = sizeof(req); - rq.rparam = &buf; - rq.rlen = sizeof(buf); - - if (hci_send_req(dd, &rq, 1000) < 0) { - printf("\nCan't read revision info: %s (%d)\n", - strerror(errno), errno); - return; - } - - printf("\t%s\n", buf + 1); -} - -static void print_rev_broadcom(uint16_t hci_rev, uint16_t lmp_subver) -{ - printf("\tFirmware %d.%d / %d\n", - hci_rev & 0xff, lmp_subver >> 8, lmp_subver & 0xff); -} - -static void print_rev_avm(uint16_t hci_rev, uint16_t lmp_subver) -{ - if (lmp_subver == 0x01) - printf("\tFirmware 03.%d.%d\n", hci_rev >> 8, hci_rev & 0xff); - else - printf("\tUnknown type\n"); -} - -static void cmd_revision(int ctl, int hdev, char *opt) -{ - struct hci_version ver; - int dd; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - return; - } - - if (hci_read_local_version(dd, &ver, 1000) < 0) { - fprintf(stderr, "Can't read version info for hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - return; - } - - print_dev_hdr(&di); - switch (ver.manufacturer) { - case 0: - case 37: - case 48: - print_rev_ericsson(dd); - break; - case 10: - print_rev_csr(dd, ver.hci_rev); - break; - case 12: - print_rev_digianswer(dd); - break; - case 15: - print_rev_broadcom(ver.hci_rev, ver.lmp_subver); - break; - case 31: - print_rev_avm(ver.hci_rev, ver.lmp_subver); - break; - default: - printf("\tUnsupported manufacturer\n"); - break; - } - - hci_close_dev(dd); - - return; -} - -static void cmd_block(int ctl, int hdev, char *opt) -{ - bdaddr_t bdaddr; - int dd; - - if (!opt) - return; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - str2ba(opt, &bdaddr); - - if (ioctl(dd, HCIBLOCKADDR, &bdaddr) < 0) { - perror("ioctl(HCIBLOCKADDR)"); - exit(1); - } - - hci_close_dev(dd); -} - -static void cmd_unblock(int ctl, int hdev, char *opt) -{ - bdaddr_t bdaddr; - int dd; - - if (!opt) - return; - - dd = hci_open_dev(hdev); - if (dd < 0) { - fprintf(stderr, "Can't open device hci%d: %s (%d)\n", - hdev, strerror(errno), errno); - exit(1); - } - - if (!strcasecmp(opt, "all")) - bacpy(&bdaddr, BDADDR_ANY); - else - str2ba(opt, &bdaddr); - - if (ioctl(dd, HCIUNBLOCKADDR, &bdaddr) < 0) { - perror("ioctl(HCIUNBLOCKADDR)"); - exit(1); - } - - hci_close_dev(dd); -} - -static void print_dev_hdr(struct hci_dev_info *di) -{ - static int hdr = -1; - char addr[18]; - - if (hdr == di->dev_id) - return; - hdr = di->dev_id; - - ba2str(&di->bdaddr, addr); - - printf("%s:\tType: %s Bus: %s\n", di->name, - hci_typetostr((di->type & 0x30) >> 4), - hci_bustostr(di->type & 0x0f)); - printf("\tBD Address: %s ACL MTU: %d:%d SCO MTU: %d:%d\n", - addr, di->acl_mtu, di->acl_pkts, - di->sco_mtu, di->sco_pkts); -} - -static void print_dev_info(int ctl, struct hci_dev_info *di) -{ - struct hci_dev_stats *st = &di->stat; - char *str; - - print_dev_hdr(di); - - str = hci_dflagstostr(di->flags); - printf("\t%s\n", str); - bt_free(str); - - printf("\tRX bytes:%d acl:%d sco:%d events:%d errors:%d\n", - st->byte_rx, st->acl_rx, st->sco_rx, st->evt_rx, st->err_rx); - - printf("\tTX bytes:%d acl:%d sco:%d commands:%d errors:%d\n", - st->byte_tx, st->acl_tx, st->sco_tx, st->cmd_tx, st->err_tx); - - if (all && !hci_test_bit(HCI_RAW, &di->flags)) { - print_dev_features(di, 0); - - if (((di->type & 0x30) >> 4) == HCI_PRIMARY) { - print_pkt_type(di); - print_link_policy(di); - print_link_mode(di); - - if (hci_test_bit(HCI_UP, &di->flags)) { - cmd_name(ctl, di->dev_id, NULL); - cmd_class(ctl, di->dev_id, NULL); - } - } - - if (hci_test_bit(HCI_UP, &di->flags)) - cmd_version(ctl, di->dev_id, NULL); - } - - printf("\n"); -} - -static struct { - char *cmd; - void (*func)(int ctl, int hdev, char *opt); - char *opt; - char *doc; -} command[] = { - { "up", cmd_up, 0, "Open and initialize HCI device" }, - { "down", cmd_down, 0, "Close HCI device" }, - { "reset", cmd_reset, 0, "Reset HCI device" }, - { "rstat", cmd_rstat, 0, "Reset statistic counters" }, - { "auth", cmd_auth, 0, "Enable Authentication" }, - { "noauth", cmd_auth, 0, "Disable Authentication" }, - { "encrypt", cmd_encrypt, 0, "Enable Encryption" }, - { "noencrypt", cmd_encrypt, 0, "Disable Encryption" }, - { "piscan", cmd_scan, 0, "Enable Page and Inquiry scan" }, - { "noscan", cmd_scan, 0, "Disable scan" }, - { "iscan", cmd_scan, 0, "Enable Inquiry scan" }, - { "pscan", cmd_scan, 0, "Enable Page scan" }, - { "ptype", cmd_ptype, "[type]", "Get/Set default packet type" }, - { "lm", cmd_lm, "[mode]", "Get/Set default link mode" }, - { "lp", cmd_lp, "[policy]", "Get/Set default link policy" }, - { "name", cmd_name, "[name]", "Get/Set local name" }, - { "class", cmd_class, "[class]", "Get/Set class of device" }, - { "voice", cmd_voice, "[voice]", "Get/Set voice setting" }, - { "iac", cmd_iac, "[iac]", "Get/Set inquiry access code" }, - { "inqtpl", cmd_inq_tpl, "[level]", "Get/Set inquiry transmit power level" }, - { "inqmode", cmd_inq_mode, "[mode]", "Get/Set inquiry mode" }, - { "inqdata", cmd_inq_data, "[data]", "Get/Set inquiry data" }, - { "inqtype", cmd_inq_type, "[type]", "Get/Set inquiry scan type" }, - { "inqparms", cmd_inq_parms, "[win:int]", "Get/Set inquiry scan window and interval" }, - { "pageparms", cmd_page_parms, "[win:int]", "Get/Set page scan window and interval" }, - { "pageto", cmd_page_to, "[to]", "Get/Set page timeout" }, - { "afhmode", cmd_afh_mode, "[mode]", "Get/Set AFH mode" }, - { "sspmode", cmd_ssp_mode, "[mode]", "Get/Set Simple Pairing Mode" }, - { "aclmtu", cmd_aclmtu, "<mtu:pkt>", "Set ACL MTU and number of packets" }, - { "scomtu", cmd_scomtu, "<mtu:pkt>", "Set SCO MTU and number of packets" }, - { "delkey", cmd_delkey, "<bdaddr>", "Delete link key from the device" }, - { "oobdata", cmd_oob_data, 0, "Get local OOB data" }, - { "commands", cmd_commands, 0, "Display supported commands" }, - { "features", cmd_features, 0, "Display device features" }, - { "version", cmd_version, 0, "Display version information" }, - { "revision", cmd_revision, 0, "Display revision information" }, - { "block", cmd_block, "<bdaddr>", "Add a device to the blacklist" }, - { "unblock", cmd_unblock, "<bdaddr>", "Remove a device from the blacklist" }, - { "lerandaddr", cmd_le_addr, "<bdaddr>", "Set LE Random Address" }, - { "leadv", cmd_le_adv, "[type]", "Enable LE advertising" - "\n\t\t\t0 - Connectable undirected advertising (default)" - "\n\t\t\t3 - Non connectable undirected advertising"}, - { "noleadv", cmd_no_le_adv, 0, "Disable LE advertising" }, - { "lestates", cmd_le_states, 0, "Display the supported LE states" }, - { NULL, NULL, 0 } -}; - -static void usage(void) -{ - int i; - - printf("hciconfig - HCI device configuration utility\n"); - printf("Usage:\n" - "\thciconfig\n" - "\thciconfig [-a] hciX [command ...]\n"); - printf("Commands:\n"); - for (i = 0; command[i].cmd; i++) - printf("\t%-10s %-8s\t%s\n", command[i].cmd, - command[i].opt ? command[i].opt : " ", - command[i].doc); -} - -static struct option main_options[] = { - { "help", 0, 0, 'h' }, - { "all", 0, 0, 'a' }, - { 0, 0, 0, 0 } -}; - -int main(int argc, char *argv[]) -{ - int opt, ctl, i, cmd = 0; - - while ((opt = getopt_long(argc, argv, "ah", main_options, NULL)) != -1) { - switch (opt) { - case 'a': - all = 1; - break; - - case 'h': - default: - usage(); - exit(0); - } - } - - argc -= optind; - argv += optind; - optind = 0; - - /* Open HCI socket */ - if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0) { - perror("Can't open HCI socket."); - exit(1); - } - - if (argc < 1) { - print_dev_list(ctl, 0); - exit(0); - } - - di.dev_id = atoi(argv[0] + 3); - argc--; argv++; - - if (ioctl(ctl, HCIGETDEVINFO, (void *) &di)) { - perror("Can't get device info"); - exit(1); - } - - while (argc > 0) { - for (i = 0; command[i].cmd; i++) { - if (strncmp(command[i].cmd, - *argv, strlen(command[i].cmd))) - continue; - - if (command[i].opt) { - argc--; argv++; - } - - command[i].func(ctl, di.dev_id, *argv); - cmd = 1; - break; - } - - if (command[i].cmd == 0) - fprintf(stderr, "Warning: unknown command - \"%s\"\n", - *argv); - - argc--; argv++; - } - - if (!cmd) - print_dev_info(ctl, &di); - - close(ctl); - return 0; -} diff --git a/textfile.c b/textfile.c deleted file mode 100644 index 7267f3a773bd..000000000000 --- a/textfile.c +++ /dev/null @@ -1,475 +0,0 @@ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2004-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 <ctype.h> -#include <fcntl.h> -#include <unistd.h> -#include <stdlib.h> -#include <string.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <sys/param.h> - -#include "textfile.h" - -static int create_dirs(const char *filename, const mode_t mode) -{ - struct stat st; - char dir[PATH_MAX + 1], *prev, *next; - int err; - - err = stat(filename, &st); - if (!err && S_ISREG(st.st_mode)) - return 0; - - memset(dir, 0, PATH_MAX + 1); - strcat(dir, "/"); - - prev = strchr(filename, '/'); - - while (prev) { - next = strchr(prev + 1, '/'); - if (!next) - break; - - if (next - prev == 1) { - prev = next; - continue; - } - - strncat(dir, prev + 1, next - prev); - mkdir(dir, mode); - - prev = next; - } - - return 0; -} - -int create_file(const char *filename, const mode_t mode) -{ - int fd; - - create_dirs(filename, S_IRUSR | S_IWUSR | S_IXUSR); - - fd = open(filename, O_RDWR | O_CREAT, mode); - if (fd < 0) - return fd; - - close(fd); - - return 0; -} - -int create_name(char *buf, size_t size, const char *path, const char *address, const char *name) -{ - return snprintf(buf, size, "%s/%s/%s", path, address, name); -} - -static inline char *find_key(char *map, size_t size, const char *key, size_t len, int icase) -{ - char *ptr = map; - size_t ptrlen = size; - - while (ptrlen > len + 1) { - int cmp = (icase) ? strncasecmp(ptr, key, len) : strncmp(ptr, key, len); - if (cmp == 0) { - if (ptr == map && *(ptr + len) == ' ') - return ptr; - - if ((*(ptr - 1) == '\r' || *(ptr - 1) == '\n') && - *(ptr + len) == ' ') - return ptr; - } - - if (icase) { - char *p1 = memchr(ptr + 1, tolower(*key), ptrlen - 1); - char *p2 = memchr(ptr + 1, toupper(*key), ptrlen - 1); - - if (!p1) - ptr = p2; - else if (!p2) - ptr = p1; - else - ptr = (p1 < p2) ? p1 : p2; - } else - ptr = memchr(ptr + 1, *key, ptrlen - 1); - - if (!ptr) - return NULL; - - ptrlen = size - (ptr - map); - } - - return NULL; -} - -static inline int write_key_value(int fd, const char *key, const char *value) -{ - char *str; - size_t size; - int err = 0; - - size = strlen(key) + strlen(value) + 2; - - str = malloc(size + 1); - if (!str) - return ENOMEM; - - sprintf(str, "%s %s\n", key, value); - - if (write(fd, str, size) < 0) - err = -errno; - - free(str); - - return err; -} - -static char *strnpbrk(const char *s, ssize_t len, const char *accept) -{ - const char *p = s; - const char *end; - - end = s + len - 1; - - while (p <= end && *p) { - const char *a = accept; - - while (*a) { - if (*p == *a) - return (char *) p; - a++; - } - - p++; - } - - return NULL; -} - -static int write_key(const char *pathname, const char *key, const char *value, int icase) -{ - struct stat st; - char *map, *off, *end, *str; - off_t size; - size_t base; - int fd, len, err = 0; - - fd = open(pathname, O_RDWR); - if (fd < 0) - return -errno; - - if (flock(fd, LOCK_EX) < 0) { - err = -errno; - goto close; - } - - if (fstat(fd, &st) < 0) { - err = -errno; - goto unlock; - } - - size = st.st_size; - - if (!size) { - if (value) { - lseek(fd, size, SEEK_SET); - err = write_key_value(fd, key, value); - } - goto unlock; - } - - map = mmap(NULL, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_LOCKED, fd, 0); - if (!map || map == MAP_FAILED) { - err = -errno; - goto unlock; - } - - len = strlen(key); - off = find_key(map, size, key, len, icase); - if (!off) { - munmap(map, size); - if (value) { - lseek(fd, size, SEEK_SET); - err = write_key_value(fd, key, value); - } - goto unlock; - } - - base = off - map; - - end = strnpbrk(off, size, "\r\n"); - if (!end) { - err = -EILSEQ; - goto unmap; - } - - if (value && ((ssize_t) strlen(value) == end - off - len - 1) && - !strncmp(off + len + 1, value, end - off - len - 1)) - goto unmap; - - len = strspn(end, "\r\n"); - end += len; - - len = size - (end - map); - if (!len) { - munmap(map, size); - if (ftruncate(fd, base) < 0) { - err = -errno; - goto unlock; - } - lseek(fd, base, SEEK_SET); - if (value) - err = write_key_value(fd, key, value); - - goto unlock; - } - - if (len < 0 || len > size) { - err = -EILSEQ; - goto unmap; - } - - str = malloc(len); - if (!str) { - err = -errno; - goto unmap; - } - - memcpy(str, end, len); - - munmap(map, size); - if (ftruncate(fd, base) < 0) { - err = -errno; - free(str); - goto unlock; - } - lseek(fd, base, SEEK_SET); - if (value) - err = write_key_value(fd, key, value); - - if (write(fd, str, len) < 0) - err = -errno; - - free(str); - - goto unlock; - -unmap: - munmap(map, size); - -unlock: - flock(fd, LOCK_UN); - -close: - fdatasync(fd); - - close(fd); - errno = -err; - - return err; -} - -static char *read_key(const char *pathname, const char *key, int icase) -{ - struct stat st; - char *map, *off, *end, *str = NULL; - off_t size; size_t len; - int fd, err = 0; - - fd = open(pathname, O_RDONLY); - if (fd < 0) - return NULL; - - if (flock(fd, LOCK_SH) < 0) { - err = -errno; - goto close; - } - - if (fstat(fd, &st) < 0) { - err = -errno; - goto unlock; - } - - size = st.st_size; - - map = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); - if (!map || map == MAP_FAILED) { - err = -errno; - goto unlock; - } - - len = strlen(key); - off = find_key(map, size, key, len, icase); - if (!off) { - err = -EILSEQ; - goto unmap; - } - - end = strnpbrk(off, size - (off - map), "\r\n"); - if (!end) { - err = -EILSEQ; - goto unmap; - } - - str = malloc(end - off - len); - if (!str) { - err = -EILSEQ; - goto unmap; - } - - memset(str, 0, end - off - len); - strncpy(str, off + len + 1, end - off - len - 1); - -unmap: - munmap(map, size); - -unlock: - flock(fd, LOCK_UN); - -close: - close(fd); - errno = -err; - - return str; -} - -int textfile_put(const char *pathname, const char *key, const char *value) -{ - return write_key(pathname, key, value, 0); -} - -int textfile_del(const char *pathname, const char *key) -{ - return write_key(pathname, key, NULL, 0); -} - -char *textfile_get(const char *pathname, const char *key) -{ - return read_key(pathname, key, 0); -} - -int textfile_foreach(const char *pathname, textfile_cb func, void *data) -{ - struct stat st; - char *map, *off, *end, *key, *value; - off_t size; size_t len; - int fd, err = 0; - - fd = open(pathname, O_RDONLY); - if (fd < 0) - return -errno; - - if (flock(fd, LOCK_SH) < 0) { - err = -errno; - goto close; - } - - if (fstat(fd, &st) < 0) { - err = -errno; - goto unlock; - } - - size = st.st_size; - - map = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); - if (!map || map == MAP_FAILED) { - err = -errno; - goto unlock; - } - - off = map; - - while (size - (off - map) > 0) { - end = strnpbrk(off, size - (off - map), " "); - if (!end) { - err = -EILSEQ; - break; - } - - len = end - off; - - key = malloc(len + 1); - if (!key) { - err = -errno; - break; - } - - memset(key, 0, len + 1); - memcpy(key, off, len); - - off = end + 1; - - if (size - (off - map) < 0) { - err = -EILSEQ; - free(key); - break; - } - - end = strnpbrk(off, size - (off - map), "\r\n"); - if (!end) { - err = -EILSEQ; - free(key); - break; - } - - len = end - off; - - value = malloc(len + 1); - if (!value) { - err = -errno; - free(key); - break; - } - - memset(value, 0, len + 1); - memcpy(value, off, len); - - func(key, value, data); - - free(key); - free(value); - - off = end + 1; - } - - munmap(map, size); - -unlock: - flock(fd, LOCK_UN); - -close: - close(fd); - errno = -err; - - return 0; -} diff --git a/textfile.h b/textfile.h deleted file mode 100644 index f01629e43ab6..000000000000 --- a/textfile.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2004-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 - * - */ - -int create_file(const char *filename, const mode_t mode); -int create_name(char *buf, size_t size, const char *path, - const char *address, const char *name); - -int textfile_put(const char *pathname, const char *key, const char *value); -int textfile_del(const char *pathname, const char *key); -char *textfile_get(const char *pathname, const char *key); - -typedef void (*textfile_cb) (char *key, char *value, void *data); - -int textfile_foreach(const char *pathname, textfile_cb func, void *data); diff --git a/util.h b/util.h deleted file mode 100644 index 604dc3be461c..000000000000 --- a/util.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * - * BlueZ - Bluetooth protocol stack for Linux - * - * Copyright (C) 2012-2014 Intel Corporation. All rights reserved. - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#include <stdint.h> -#include <stdlib.h> -#include <alloca.h> -#include <byteswap.h> -#include <string.h> - -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define le16_to_cpu(val) (val) -#define le32_to_cpu(val) (val) -#define le64_to_cpu(val) (val) -#define cpu_to_le16(val) (val) -#define cpu_to_le32(val) (val) -#define cpu_to_le64(val) (val) -#define be16_to_cpu(val) bswap_16(val) -#define be32_to_cpu(val) bswap_32(val) -#define be64_to_cpu(val) bswap_64(val) -#define cpu_to_be16(val) bswap_16(val) -#define cpu_to_be32(val) bswap_32(val) -#define cpu_to_be64(val) bswap_64(val) -#elif __BYTE_ORDER == __BIG_ENDIAN -#define le16_to_cpu(val) bswap_16(val) -#define le32_to_cpu(val) bswap_32(val) -#define le64_to_cpu(val) bswap_64(val) -#define cpu_to_le16(val) bswap_16(val) -#define cpu_to_le32(val) bswap_32(val) -#define cpu_to_le64(val) bswap_64(val) -#define be16_to_cpu(val) (val) -#define be32_to_cpu(val) (val) -#define be64_to_cpu(val) (val) -#define cpu_to_be16(val) (val) -#define cpu_to_be32(val) (val) -#define cpu_to_be64(val) (val) -#else -#error "Unknown byte order" -#endif - -#define get_unaligned(ptr) \ -__extension__ ({ \ - struct __attribute__((packed)) { \ - __typeof__(*(ptr)) __v; \ - } *__p = (__typeof__(__p)) (ptr); \ - __p->__v; \ -}) - -#define put_unaligned(val, ptr) \ -do { \ - struct __attribute__((packed)) { \ - __typeof__(*(ptr)) __v; \ - } *__p = (__typeof__(__p)) (ptr); \ - __p->__v = (val); \ -} while (0) - -#define PTR_TO_UINT(p) ((unsigned int) ((uintptr_t) (p))) -#define UINT_TO_PTR(u) ((void *) ((uintptr_t) (u))) - -#define PTR_TO_INT(p) ((int) ((intptr_t) (p))) -#define INT_TO_PTR(u) ((void *) ((intptr_t) (u))) - -#define new0(type, count) \ - (type *) (__extension__ ({ \ - size_t __n = (size_t) (count); \ - size_t __s = sizeof(type); \ - void *__p; \ - __p = btd_malloc(__n * __s); \ - memset(__p, 0, __n * __s); \ - __p; \ - })) - -#define newa(t, n) ((t*) alloca(sizeof(t)*(n))) -#define malloc0(n) (calloc((n), 1)) - -char *strdelimit(char *str, char *del, char c); -int strsuffix(const char *str, const char *suffix); - -void *btd_malloc(size_t size); - -typedef void (*util_debug_func_t)(const char *str, void *user_data); - -void util_debug(util_debug_func_t function, void *user_data, - const char *format, ...) - __attribute__((format(printf, 3, 4))); - -void util_hexdump(const char dir, const unsigned char *buf, size_t len, - util_debug_func_t function, void *user_data); - -unsigned char util_get_dt(const char *parent, const char *name); - -uint8_t util_get_uid(unsigned int *bitmap, uint8_t max); -void util_clear_uid(unsigned int *bitmap, uint8_t id); - -const char *bt_uuid16_to_str(uint16_t uuid); -const char *bt_uuid32_to_str(uint32_t uuid); -const char *bt_uuidstr_to_str(const char *uuid); -const char *bt_appear_to_str(uint16_t appearance); - -static inline int8_t get_s8(const void *ptr) -{ - return *((int8_t *) ptr); -} - -static inline uint8_t get_u8(const void *ptr) -{ - return *((uint8_t *) ptr); -} - -static inline uint16_t get_le16(const void *ptr) -{ - return le16_to_cpu(get_unaligned((const uint16_t *) ptr)); -} - -static inline uint16_t get_be16(const void *ptr) -{ - return be16_to_cpu(get_unaligned((const uint16_t *) ptr)); -} - -static inline uint32_t get_le32(const void *ptr) -{ - return le32_to_cpu(get_unaligned((const uint32_t *) ptr)); -} - -static inline uint32_t get_be32(const void *ptr) -{ - return be32_to_cpu(get_unaligned((const uint32_t *) ptr)); -} - -static inline uint64_t get_le64(const void *ptr) -{ - return le64_to_cpu(get_unaligned((const uint64_t *) ptr)); -} - -static inline uint64_t get_be64(const void *ptr) -{ - return be64_to_cpu(get_unaligned((const uint64_t *) ptr)); -} - -static inline void put_le16(uint16_t val, void *dst) -{ - put_unaligned(cpu_to_le16(val), (uint16_t *) dst); -} - -static inline void put_be16(uint16_t val, const void *ptr) -{ - put_unaligned(cpu_to_be16(val), (uint16_t *) ptr); -} - -static inline void put_le32(uint32_t val, void *dst) -{ - put_unaligned(cpu_to_le32(val), (uint32_t *) dst); -} - -static inline void put_be32(uint32_t val, void *dst) -{ - put_unaligned(cpu_to_be32(val), (uint32_t *) dst); -} - -static inline void put_le64(uint64_t val, void *dst) -{ - put_unaligned(cpu_to_le64(val), (uint64_t *) dst); -} - -static inline void put_be64(uint64_t val, void *dst) -{ - put_unaligned(cpu_to_be64(val), (uint64_t *) dst); -} |