summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.tools17
-rw-r--r--tools/bccmd.1130
-rw-r--r--tools/bccmd.c1248
-rw-r--r--tools/csr.c2856
-rw-r--r--tools/csr.h555
-rw-r--r--tools/csr_3wire.c62
-rw-r--r--tools/csr_bcsp.c257
-rw-r--r--tools/csr_h4.c166
-rw-r--r--tools/csr_hci.c160
-rw-r--r--tools/csr_usb.c308
-rw-r--r--tools/hciconfig.c28
-rw-r--r--tools/ubcsp.c1180
-rw-r--r--tools/ubcsp.h208
13 files changed, 5 insertions, 7170 deletions
diff --git a/Makefile.tools b/Makefile.tools
index 0423293d6..d5fdf2d89 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -176,9 +176,8 @@ tools_userchan_tester_LDADD = lib/libbluetooth-internal.la \
endif
if TOOLS
-bin_PROGRAMS += tools/rctest tools/l2test tools/l2ping tools/bccmd \
- tools/bluemoon tools/hex2hcd tools/mpris-proxy \
- tools/btattach
+bin_PROGRAMS += tools/rctest tools/l2test tools/l2ping tools/bluemoon \
+ tools/hex2hcd tools/mpris-proxy tools/btattach
noinst_PROGRAMS += tools/bdaddr tools/avinfo tools/avtest \
tools/scotest tools/amptest tools/hwdb \
@@ -278,12 +277,6 @@ tools_l2test_LDADD = lib/libbluetooth-internal.la
tools_l2ping_LDADD = lib/libbluetooth-internal.la
-tools_bccmd_SOURCES = tools/bccmd.c tools/csr.h tools/csr.c \
- tools/csr_hci.c tools/csr_usb.c \
- tools/csr_h4.c tools/csr_3wire.c \
- tools/csr_bcsp.c tools/ubcsp.h tools/ubcsp.c
-tools_bccmd_LDADD = lib/libbluetooth-internal.la
-
tools_bluemoon_SOURCES = tools/bluemoon.c monitor/bt.h
tools_bluemoon_LDADD = src/libshared-mainloop.la
@@ -298,7 +291,7 @@ tools_gatt_service_LDADD = $(GLIB_LIBS) $(DBUS_LIBS) gdbus/libgdbus-internal.la
profiles_iap_iapd_SOURCES = profiles/iap/main.c
profiles_iap_iapd_LDADD = gdbus/libgdbus-internal.la $(GLIB_LIBS) $(DBUS_LIBS)
-dist_man_MANS += tools/rctest.1 tools/l2ping.1 tools/bccmd.1 tools/btattach.1
+dist_man_MANS += tools/rctest.1 tools/l2ping.1 tools/btattach.1
EXTRA_DIST += tools/bdaddr.1
@@ -360,7 +353,7 @@ tools_hciattach_SOURCES = tools/hciattach.c tools/hciattach.h \
tools/hciattach_bcm43xx.c
tools_hciattach_LDADD = lib/libbluetooth-internal.la
-tools_hciconfig_SOURCES = tools/hciconfig.c tools/csr.h tools/csr.c
+tools_hciconfig_SOURCES = tools/hciconfig.c
tools_hciconfig_LDADD = lib/libbluetooth-internal.la
tools_hcitool_SOURCES = tools/hcitool.c src/oui.h src/oui.c
@@ -409,7 +402,7 @@ EXTRA_DIST += tools/hciattach.1 tools/hciconfig.1 \
tools/rfcomm.1 tools/sdptool.1 tools/ciptool.1
endif
else
-EXTRA_DIST += tools/rctest.1 tools/l2ping.1 tools/bccmd.1 tools/btattach.1
+EXTRA_DIST += tools/rctest.1 tools/l2ping.1 tools/btattach.1
endif
if HID2HCI
diff --git a/tools/bccmd.1 b/tools/bccmd.1
deleted file mode 100644
index 26c83a6a2..000000000
--- a/tools/bccmd.1
+++ /dev/null
@@ -1,130 +0,0 @@
-.TH BCCMD 1 "Jun 20 2006" BlueZ "Linux System Administration"
-.SH NAME
-bccmd \- Utility for the CSR BCCMD interface
-.SH SYNOPSIS
-.B bccmd
-.br
-.B bccmd [-t <transport>] [-d <device>] <command> [<args>]
-.br
-.B bccmd [-h --help]
-.br
-.SH DESCRIPTION
-.B
-bccmd
-issues BlueCore commands to
-.B
-Cambridge Silicon Radio
-devices. If run without the <command> argument, a short help page will be displayed.
-.SH OPTIONS
-.TP
-.BI -t\ <transport>
-Specify the communication transport. Valid options are:
-.RS
-.TP
-.BI HCI
-Local device with Host Controller Interface (default).
-.TP
-.BI USB
-Direct USB connection.
-.TP
-.BI BCSP
-Blue Core Serial Protocol.
-.TP
-.BI H4
-H4 serial protocol.
-.TP
-.BI 3WIRE
-3WIRE protocol (not implemented).
-.SH
-.TP
-.BI -d\ <dev>
-Specify a particular device to operate on. If not specified, default is the first available HCI device
-or /dev/ttyS0 for serial transports.
-.SH COMMANDS
-.TP
-.BI builddef
-Get build definitions
-.TP
-.BI keylen\ <handle>
-Get current crypt key length
-.TP
-.BI clock
-Get local Bluetooth clock
-.TP
-.BI rand
-Get random number
-.TP
-.BI chiprev
-Get chip revision
-.TP
-.BI buildname
-Get the full build name
-.TP
-.BI panicarg
-Get panic code argument
-.TP
-.BI faultarg
-Get fault code argument
-.TP
-.BI coldreset
-Perform cold reset
-.TP
-.BI warmreset
-Perform warm reset
-.TP
-.BI disabletx
-Disable TX on the device
-.TP
-.BI enabletx
-Enable TX on the device
-.TP
-.BI singlechan\ <channel>
-Lock radio on specific channel
-.TP
-.BI hoppingon
-Revert to channel hopping
-.TP
-.BI rttxdata1\ <decimal\ freq\ MHz>\ <level>
-TXData1 radio test
-.TP
-.BI radiotest\ <decimal\ freq\ MHz>\ <level>\ <id>
-Run radio tests, tests 4, 6 and 7 are transmit tests
-.TP
-.BI memtypes
-Get memory types
-.TP
-.BI psget\ [-r]\ [-s\ <stores>]\ <key>
-Get value for PS key.
--r sends a warm reset afterwards
-.TP
-.BI psset\ [-r]\ [-s\ <stores>]\ <key>\ <value>
-Set value for PS key.
--r sends a warm reset afterwards
-.TP
-.BI psclr\ [-r]\ [-s\ <stores>]\ <key>
-Clear value for PS key.
--r sends a warm reset afterwards
-.TP
-.BI pslist\ [-r]\ [-s\ <stores>]
-List all PS keys.
--r sends a warm reset afterwards
-.TP
-.BI psread\ [-r]\ [-s\ <stores>]
-Read all PS keys.
--r sends a warm reset afterwards
-.TP
-.BI psload\ [-r]\ [-s\ <stores>]\ <file>
-Load all PS keys from PSR file.
--r sends a warm reset afterwards
-.TP
-.BI pscheck\ [-r]\ [-s\ <stores>]\ <file>
-Check syntax of PSR file.
--r sends a warm reset afterwards
-.SH KEYS
-bdaddr country devclass keymin keymax features commands version
-remver hciextn mapsco baudrate hostintf anafreq anaftrim usbvid
-usbpid dfupid bootmode
-.SH AUTHORS
-Written by Marcel Holtmann <marcel@holtmann.org>,
-man page by Adam Laurie <adam@algroup.co.uk>
-.PP
diff --git a/tools/bccmd.c b/tools/bccmd.c
deleted file mode 100644
index 2c215ace7..000000000
--- a/tools/bccmd.c
+++ /dev/null
@@ -1,1248 +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
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <sys/socket.h>
-#include <unistd.h>
-
-#include "lib/bluetooth.h"
-#include "lib/hci.h"
-#include "lib/hci_lib.h"
-
-#include "src/shared/tty.h"
-
-#include "csr.h"
-
-#define CSR_TRANSPORT_UNKNOWN 0
-#define CSR_TRANSPORT_HCI 1
-#define CSR_TRANSPORT_USB 2
-#define CSR_TRANSPORT_BCSP 3
-#define CSR_TRANSPORT_H4 4
-#define CSR_TRANSPORT_3WIRE 5
-
-#define CSR_STORES_PSI (0x0001)
-#define CSR_STORES_PSF (0x0002)
-#define CSR_STORES_PSROM (0x0004)
-#define CSR_STORES_PSRAM (0x0008)
-#define CSR_STORES_DEFAULT (CSR_STORES_PSI | CSR_STORES_PSF)
-
-#define CSR_TYPE_NULL 0
-#define CSR_TYPE_COMPLEX 1
-#define CSR_TYPE_UINT8 2
-#define CSR_TYPE_UINT16 3
-#define CSR_TYPE_UINT32 4
-
-#define CSR_TYPE_ARRAY CSR_TYPE_COMPLEX
-#define CSR_TYPE_BDADDR CSR_TYPE_COMPLEX
-
-static inline int transport_open(int transport, char *device, speed_t bcsp_rate)
-{
- switch (transport) {
- case CSR_TRANSPORT_HCI:
- return csr_open_hci(device);
- case CSR_TRANSPORT_USB:
- return csr_open_usb(device);
- case CSR_TRANSPORT_BCSP:
- return csr_open_bcsp(device, bcsp_rate);
- case CSR_TRANSPORT_H4:
- return csr_open_h4(device);
- case CSR_TRANSPORT_3WIRE:
- return csr_open_3wire(device);
- default:
- fprintf(stderr, "Unsupported transport\n");
- return -1;
- }
-}
-
-static inline int transport_read(int transport, uint16_t varid, uint8_t *value, uint16_t length)
-{
- switch (transport) {
- case CSR_TRANSPORT_HCI:
- return csr_read_hci(varid, value, length);
- case CSR_TRANSPORT_USB:
- return csr_read_usb(varid, value, length);
- case CSR_TRANSPORT_BCSP:
- return csr_read_bcsp(varid, value, length);
- case CSR_TRANSPORT_H4:
- return csr_read_h4(varid, value, length);
- case CSR_TRANSPORT_3WIRE:
- return csr_read_3wire(varid, value, length);
- default:
- errno = EOPNOTSUPP;
- return -1;
- }
-}
-
-static inline int transport_write(int transport, uint16_t varid, uint8_t *value, uint16_t length)
-{
- switch (transport) {
- case CSR_TRANSPORT_HCI:
- return csr_write_hci(varid, value, length);
- case CSR_TRANSPORT_USB:
- return csr_write_usb(varid, value, length);
- case CSR_TRANSPORT_BCSP:
- return csr_write_bcsp(varid, value, length);
- case CSR_TRANSPORT_H4:
- return csr_write_h4(varid, value, length);
- case CSR_TRANSPORT_3WIRE:
- return csr_write_3wire(varid, value, length);
- default:
- errno = EOPNOTSUPP;
- return -1;
- }
-}
-
-static inline void transport_close(int transport)
-{
- switch (transport) {
- case CSR_TRANSPORT_HCI:
- csr_close_hci();
- break;
- case CSR_TRANSPORT_USB:
- csr_close_usb();
- break;
- case CSR_TRANSPORT_BCSP:
- csr_close_bcsp();
- break;
- case CSR_TRANSPORT_H4:
- csr_close_h4();
- break;
- case CSR_TRANSPORT_3WIRE:
- csr_close_3wire();
- break;
- }
-}
-
-static struct {
- uint16_t pskey;
- int type;
- int size;
- char *str;
-} storage[] = {
- { CSR_PSKEY_BDADDR, CSR_TYPE_BDADDR, 8, "bdaddr" },
- { CSR_PSKEY_COUNTRYCODE, CSR_TYPE_UINT16, 0, "country" },
- { CSR_PSKEY_CLASSOFDEVICE, CSR_TYPE_UINT32, 0, "devclass" },
- { CSR_PSKEY_ENC_KEY_LMIN, CSR_TYPE_UINT16, 0, "keymin" },
- { CSR_PSKEY_ENC_KEY_LMAX, CSR_TYPE_UINT16, 0, "keymax" },
- { CSR_PSKEY_LOCAL_SUPPORTED_FEATURES, CSR_TYPE_ARRAY, 8, "features" },
- { CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS, CSR_TYPE_ARRAY, 18, "commands" },
- { CSR_PSKEY_HCI_LMP_LOCAL_VERSION, CSR_TYPE_UINT16, 0, "version" },
- { CSR_PSKEY_LMP_REMOTE_VERSION, CSR_TYPE_UINT8, 0, "remver" },
- { CSR_PSKEY_HOSTIO_USE_HCI_EXTN, CSR_TYPE_UINT16, 0, "hciextn" },
- { CSR_PSKEY_HOSTIO_MAP_SCO_PCM, CSR_TYPE_UINT16, 0, "mapsco" },
- { CSR_PSKEY_UART_BAUDRATE, CSR_TYPE_UINT16, 0, "baudrate" },
- { CSR_PSKEY_HOST_INTERFACE, CSR_TYPE_UINT16, 0, "hostintf" },
- { CSR_PSKEY_ANA_FREQ, CSR_TYPE_UINT16, 0, "anafreq" },
- { CSR_PSKEY_ANA_FTRIM, CSR_TYPE_UINT16, 0, "anaftrim" },
- { CSR_PSKEY_USB_VENDOR_ID, CSR_TYPE_UINT16, 0, "usbvid" },
- { CSR_PSKEY_USB_PRODUCT_ID, CSR_TYPE_UINT16, 0, "usbpid" },
- { CSR_PSKEY_USB_DFU_PRODUCT_ID, CSR_TYPE_UINT16, 0, "dfupid" },
- { CSR_PSKEY_INITIAL_BOOTMODE, CSR_TYPE_UINT16, 0, "bootmode" },
- { 0x0000 },
-};
-
-static char *storestostr(uint16_t stores)
-{
- switch (stores) {
- case 0x0000:
- return "Default";
- case 0x0001:
- return "psi";
- case 0x0002:
- return "psf";
- case 0x0004:
- return "psrom";
- case 0x0008:
- return "psram";
- default:
- return "Unknown";
- }
-}
-
-static char *memorytostr(uint16_t type)
-{
- switch (type) {
- case 0x0000:
- return "Flash memory";
- case 0x0001:
- return "EEPROM";
- case 0x0002:
- return "RAM (transient)";
- case 0x0003:
- return "ROM (or \"read-only\" flash memory)";
- default:
- return "Unknown";
- }
-}
-
-#define OPT_RANGE(min, max) \
- if (argc < (min)) { errno = EINVAL; return -1; } \
- if (argc > (max)) { errno = E2BIG; return -1; }
-
-static struct option help_options[] = {
- { "help", 0, 0, 'h' },
- { 0, 0, 0, 0 }
-};
-
-static int opt_help(int argc, char *argv[], int *help)
-{
- int opt;
-
- while ((opt=getopt_long(argc, argv, "+h", help_options, NULL)) != EOF) {
- switch (opt) {
- case 'h':
- if (help)
- *help = 1;
- break;
- }
- }
-
- return optind;
-}
-
-#define OPT_HELP(range, help) \
- opt_help(argc, argv, (help)); \
- argc -= optind; argv += optind; optind = 0; \
- OPT_RANGE((range), (range))
-
-static int cmd_builddef(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t def = 0x0000, nextdef = 0x0000;
- int err = 0;
-
- OPT_HELP(0, NULL);
-
- printf("Build definitions:\n");
-
- while (1) {
- memset(array, 0, sizeof(array));
- array[0] = def & 0xff;
- array[1] = def >> 8;
-
- err = transport_read(transport, CSR_VARID_GET_NEXT_BUILDDEF, array, 8);
- if (err < 0)
- break;
-
- nextdef = array[2] | (array[3] << 8);
-
- if (nextdef == 0x0000)
- break;
-
- def = nextdef;
-
- printf("0x%04x - %s\n", def, csr_builddeftostr(def));
- }
-
- return err;
-}
-
-static int cmd_keylen(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t handle, keylen;
- int err;
-
- OPT_HELP(1, NULL);
-
- handle = atoi(argv[0]);
-
- memset(array, 0, sizeof(array));
- array[0] = handle & 0xff;
- array[1] = handle >> 8;
-
- err = transport_read(transport, CSR_VARID_CRYPT_KEY_LENGTH, array, 8);
- if (err < 0)
- return -1;
-
- keylen = array[2] | (array[3] << 8);
-
- printf("Crypt key length: %d bit\n", keylen * 8);
-
- return 0;
-}
-
-static int cmd_clock(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint32_t clock;
- int err;
-
- OPT_HELP(0, NULL);
-
- memset(array, 0, sizeof(array));
-
- err = transport_read(transport, CSR_VARID_BT_CLOCK, array, 8);
- if (err < 0)
- return -1;
-
- clock = array[2] | (array[3] << 8) | (array[0] << 16) | (array[1] << 24);
-
- printf("Bluetooth clock: 0x%04x (%d)\n", clock, clock);
-
- return 0;
-}
-
-static int cmd_rand(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t rand;
- int err;
-
- OPT_HELP(0, NULL);
-
- memset(array, 0, sizeof(array));
-
- err = transport_read(transport, CSR_VARID_RAND, array, 8);
- if (err < 0)
- return -1;
-
- rand = array[0] | (array[1] << 8);
-
- printf("Random number: 0x%02x (%d)\n", rand, rand);
-
- return 0;
-}
-
-static int cmd_chiprev(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t rev;
- char *str;
- int err;
-
- OPT_HELP(0, NULL);
-
- memset(array, 0, sizeof(array));
-
- err = transport_read(transport, CSR_VARID_CHIPREV, array, 8);
- if (err < 0)
- return -1;
-
- rev = array[0] | (array[1] << 8);
-
- switch (rev) {
- case 0x64:
- str = "BC1 ES";
- break;
- case 0x65:
- str = "BC1";
- break;
- case 0x89:
- str = "BC2-External A";
- break;
- case 0x8a:
- str = "BC2-External B";
- break;
- case 0x28:
- str = "BC2-ROM";
- break;
- case 0x43:
- str = "BC3-Multimedia";
- break;
- case 0x15:
- str = "BC3-ROM";
- break;
- case 0xe2:
- str = "BC3-Flash";
- break;
- case 0x26:
- str = "BC4-External";
- break;
- case 0x30:
- str = "BC4-ROM";
- break;
- default:
- str = "NA";
- break;
- }
-
- printf("Chip revision: 0x%04x (%s)\n", rev, str);
-
- return 0;
-}
-
-static int cmd_buildname(int transport, int argc, char *argv[])
-{
- uint8_t array[131];
- char name[64];
- unsigned int i;
- int err;
-
- OPT_HELP(0, NULL);
-
- memset(array, 0, sizeof(array));
-
- err = transport_read(transport, CSR_VARID_READ_BUILD_NAME, array, 128);
- if (err < 0)
- return -1;
-
- for (i = 0; i < sizeof(name); i++)
- name[i] = array[(i * 2) + 4];
-
- printf("Build name: %s\n", name);
-
- return 0;
-}
-
-static int cmd_panicarg(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t error;
- int err;
-
- OPT_HELP(0, NULL);
-
- memset(array, 0, sizeof(array));
-
- err = transport_read(transport, CSR_VARID_PANIC_ARG, array, 8);
- if (err < 0)
- return -1;
-
- error = array[0] | (array[1] << 8);
-
- printf("Panic code: 0x%02x (%s)\n", error,
- error < 0x100 ? "valid" : "invalid");
-
- return 0;
-}
-
-static int cmd_faultarg(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t error;
- int err;
-
- OPT_HELP(0, NULL);
-
- memset(array, 0, sizeof(array));
-
- err = transport_read(transport, CSR_VARID_FAULT_ARG, array, 8);
- if (err < 0)
- return -1;
-
- error = array[0] | (array[1] << 8);
-
- printf("Fault code: 0x%02x (%s)\n", error,
- error < 0x100 ? "valid" : "invalid");
-
- return 0;
-}
-
-static int cmd_coldreset(int transport, int argc, char *argv[])
-{
- return transport_write(transport, CSR_VARID_COLD_RESET, NULL, 0);
-}
-
-static int cmd_warmreset(int transport, int argc, char *argv[])
-{
- return transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-}
-
-static int cmd_disabletx(int transport, int argc, char *argv[])
-{
- return transport_write(transport, CSR_VARID_DISABLE_TX, NULL, 0);
-}
-
-static int cmd_enabletx(int transport, int argc, char *argv[])
-{
- return transport_write(transport, CSR_VARID_ENABLE_TX, NULL, 0);
-}
-
-static int cmd_singlechan(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t channel;
-
- OPT_HELP(1, NULL);
-
- channel = atoi(argv[0]);
-
- if (channel > 2401 && channel < 2481)
- channel -= 2402;
-
- if (channel > 78) {
- errno = EINVAL;
- return -1;
- }
-
- memset(array, 0, sizeof(array));
- array[0] = channel & 0xff;
- array[1] = channel >> 8;
-
- return transport_write(transport, CSR_VARID_SINGLE_CHAN, array, 8);
-}
-
-static int cmd_hoppingon(int transport, int argc, char *argv[])
-{
- return transport_write(transport, CSR_VARID_HOPPING_ON, NULL, 0);
-}
-
-static int cmd_rttxdata1(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t freq, level;
-
- OPT_HELP(2, NULL);
-
- freq = atoi(argv[0]);
-
- if (!strncasecmp(argv[1], "0x", 2))
- level = strtol(argv[1], NULL, 16);
- else
- level = atoi(argv[1]);
-
- memset(array, 0, sizeof(array));
- array[0] = 0x04;
- array[1] = 0x00;
- array[2] = freq & 0xff;
- array[3] = freq >> 8;
- array[4] = level & 0xff;
- array[5] = level >> 8;
-
- return transport_write(transport, CSR_VARID_RADIOTEST, array, 8);
-}
-
-static int cmd_radiotest(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t freq, level, test;
-
- OPT_HELP(3, NULL);
-
- freq = atoi(argv[0]);
-
- if (!strncasecmp(argv[1], "0x", 2))
- level = strtol(argv[1], NULL, 16);
- else
- level = atoi(argv[1]);
-
- test = atoi(argv[2]);
-
- memset(array, 0, sizeof(array));
- array[0] = test & 0xff;
- array[1] = test >> 8;
- array[2] = freq & 0xff;
- array[3] = freq >> 8;
- array[4] = level & 0xff;
- array[5] = level >> 8;
-
- return transport_write(transport, CSR_VARID_RADIOTEST, array, 8);
-}
-
-static int cmd_memtypes(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t type, stores[4] = { 0x0001, 0x0002, 0x0004, 0x0008 };
- int i, err;
-
- OPT_HELP(0, NULL);
-
- for (i = 0; i < 4; i++) {
- memset(array, 0, sizeof(array));
- array[0] = stores[i] & 0xff;
- array[1] = stores[i] >> 8;
-
- err = transport_read(transport, CSR_VARID_PS_MEMORY_TYPE, array, 8);
- if (err < 0)
- continue;
-
- type = array[2] + (array[3] << 8);
-
- printf("%s (0x%04x) = %s (%d)\n", storestostr(stores[i]),
- stores[i], memorytostr(type), type);
- }
-
- return 0;
-}
-
-static struct option pskey_options[] = {
- { "stores", 1, 0, 's' },
- { "reset", 0, 0, 'r' },
- { "help", 0, 0, 'h' },
- { 0, 0, 0, 0 }
-};
-
-static int opt_pskey(int argc, char *argv[], uint16_t *stores, int *reset, int *help)
-{
- int opt;
-
- while ((opt=getopt_long(argc, argv, "+s:rh", pskey_options, NULL)) != EOF) {
- switch (opt) {
- case 's':
- if (!stores)
- break;
- if (!strcasecmp(optarg, "default"))
- *stores = 0x0000;
- else if (!strcasecmp(optarg, "implementation"))
- *stores = 0x0001;
- else if (!strcasecmp(optarg, "factory"))
- *stores = 0x0002;
- else if (!strcasecmp(optarg, "rom"))
- *stores = 0x0004;
- else if (!strcasecmp(optarg, "ram"))
- *stores = 0x0008;
- else if (!strcasecmp(optarg, "psi"))
- *stores = 0x0001;
- else if (!strcasecmp(optarg, "psf"))
- *stores = 0x0002;
- else if (!strcasecmp(optarg, "psrom"))
- *stores = 0x0004;
- else if (!strcasecmp(optarg, "psram"))
- *stores = 0x0008;
- else if (!strncasecmp(optarg, "0x", 2))
- *stores = strtol(optarg, NULL, 16);
- else
- *stores = atoi(optarg);
- break;
-
- case 'r':
- if (reset)
- *reset = 1;
- break;
-
- case 'h':
- if (help)
- *help = 1;
- break;
- }
- }
-
- return optind;
-}
-
-#define OPT_PSKEY(min, max, stores, reset, help) \
- opt_pskey(argc, argv, (stores), (reset), (help)); \
- argc -= optind; argv += optind; optind = 0; \
- OPT_RANGE((min), (max))
-
-static int cmd_psget(int transport, int argc, char *argv[])
-{
- uint8_t array[128];
- uint16_t pskey, length, value, stores = CSR_STORES_DEFAULT;
- uint32_t val32;
- int i, err, reset = 0;
-
- memset(array, 0, sizeof(array));
-
- OPT_PSKEY(1, 1, &stores, &reset, NULL);
-
- if (strncasecmp(argv[0], "0x", 2)) {
- pskey = atoi(argv[0]);
-
- for (i = 0; storage[i].pskey; i++) {
- if (strcasecmp(storage[i].str, argv[0]))
- continue;
-
- pskey = storage[i].pskey;
- break;
- }
- } else
- pskey = strtol(argv[0] + 2, NULL, 16);
-
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = stores & 0xff;
- array[3] = stores >> 8;
-
- err = transport_read(transport, CSR_VARID_PS_SIZE, array, 8);
- if (err < 0)
- return err;
-
- length = array[2] + (array[3] << 8);
- if (length + 6 > (int) sizeof(array) / 2)
- return -EIO;
-
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = length & 0xff;
- array[3] = length >> 8;
- array[4] = stores & 0xff;
- array[5] = stores >> 8;
-
- err = transport_read(transport, CSR_VARID_PS, array, (length + 3) * 2);
- if (err < 0)
- return err;
-
- switch (length) {
- case 1:
- value = array[6] | (array[7] << 8);
- printf("%s: 0x%04x (%d)\n", csr_pskeytostr(pskey), value, value);
- break;
-
- case 2:
- val32 = array[8] | (array[9] << 8) | (array[6] << 16) | (array[7] << 24);
- printf("%s: 0x%08x (%d)\n", csr_pskeytostr(pskey), val32, val32);
- break;
-
- default:
- printf("%s:", csr_pskeytostr(pskey));
- for (i = 0; i < length; i++)
- printf(" 0x%02x%02x", array[(i * 2) + 6], array[(i * 2) + 7]);
- printf("\n");
- break;
- }
-
- if (reset)
- transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
- return err;
-}
-
-static int cmd_psset(int transport, int argc, char *argv[])
-{
- uint8_t array[128];
- uint16_t pskey, length, value, stores = CSR_STORES_PSRAM;
- uint32_t val32;
- int i, err, reset = 0;
-
- memset(array, 0, sizeof(array));
-
- OPT_PSKEY(2, 81, &stores, &reset, NULL);
-
- if (strncasecmp(argv[0], "0x", 2)) {
- pskey = atoi(argv[0]);
-
- for (i = 0; storage[i].pskey; i++) {
- if (strcasecmp(storage[i].str, argv[0]))
- continue;
-
- pskey = storage[i].pskey;
- break;
- }
- } else
- pskey = strtol(argv[0] + 2, NULL, 16);
-
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = stores & 0xff;
- array[3] = stores >> 8;
-
- err = transport_read(transport, CSR_VARID_PS_SIZE, array, 8);
- if (err < 0)
- return err;
-
- length = array[2] + (array[3] << 8);
- if (length + 6 > (int) sizeof(array) / 2)
- return -EIO;
-
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = length & 0xff;
- array[3] = length >> 8;
- array[4] = stores & 0xff;
- array[5] = stores >> 8;
-
- argc--;
- argv++;
-
- switch (length) {
- case 1:
- if (argc != 1) {
- errno = E2BIG;
- return -1;
- }
-
- if (!strncasecmp(argv[0], "0x", 2))
- value = strtol(argv[0] + 2, NULL, 16);
- else
- value = atoi(argv[0]);
-
- array[6] = value & 0xff;
- array[7] = value >> 8;
- break;
-
- case 2:
- if (argc != 1) {
- errno = E2BIG;
- return -1;
- }
-
- if (!strncasecmp(argv[0], "0x", 2))
- val32 = strtol(argv[0] + 2, NULL, 16);
- else
- val32 = atoi(argv[0]);
-
- array[6] = (val32 & 0xff0000) >> 16;
- array[7] = val32 >> 24;
- array[8] = val32 & 0xff;
- array[9] = (val32 & 0xff00) >> 8;
- break;
-
- default:
- if (argc != length * 2) {
- errno = EINVAL;
- return -1;
- }
-
- for (i = 0; i < length * 2; i++)
- if (!strncasecmp(argv[0], "0x", 2))
- array[i + 6] = strtol(argv[i] + 2, NULL, 16);
- else
- array[i + 6] = atoi(argv[i]);
- break;
- }
-
- err = transport_write(transport, CSR_VARID_PS, array, (length + 3) * 2);
- if (err < 0)
- return err;
-
- if (reset)
- transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
- return err;
-}
-
-static int cmd_psclr(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t pskey, stores = CSR_STORES_PSRAM;
- int i, err, reset = 0;
-
- OPT_PSKEY(1, 1, &stores, &reset, NULL);
-
- if (strncasecmp(argv[0], "0x", 2)) {
- pskey = atoi(argv[0]);
-
- for (i = 0; storage[i].pskey; i++) {
- if (strcasecmp(storage[i].str, argv[0]))
- continue;
-
- pskey = storage[i].pskey;
- break;
- }
- } else
- pskey = strtol(argv[0] + 2, NULL, 16);
-
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = stores & 0xff;
- array[3] = stores >> 8;
-
- err = transport_write(transport, CSR_VARID_PS_CLR_STORES, array, 8);
- if (err < 0)
- return err;
-
- if (reset)
- transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
- return err;
-}
-
-static int cmd_pslist(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t pskey = 0x0000, length, stores = CSR_STORES_DEFAULT;
- int err, reset = 0;
-
- OPT_PSKEY(0, 0, &stores, &reset, NULL);
-
- while (1) {
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = stores & 0xff;
- array[3] = stores >> 8;
-
- err = transport_read(transport, CSR_VARID_PS_NEXT, array, 8);
- if (err < 0)
- break;
-
- pskey = array[4] + (array[5] << 8);
- if (pskey == 0x0000)
- break;
-
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = stores & 0xff;
- array[3] = stores >> 8;
-
- err = transport_read(transport, CSR_VARID_PS_SIZE, array, 8);
- if (err < 0)
- continue;
-
- length = array[2] + (array[3] << 8);
-
- printf("0x%04x - %s (%d bytes)\n", pskey,
- csr_pskeytostr(pskey), length * 2);
- }
-
- if (reset)
- transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
- return 0;
-}
-
-static int cmd_psread(int transport, int argc, char *argv[])
-{
- uint8_t array[256];
- uint16_t pskey = 0x0000, length, stores = CSR_STORES_DEFAULT;
- char *str, val[7];
- int i, err, reset = 0;
-
- OPT_PSKEY(0, 0, &stores, &reset, NULL);
-
- while (1) {
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = stores & 0xff;
- array[3] = stores >> 8;
-
- err = transport_read(transport, CSR_VARID_PS_NEXT, array, 8);
- if (err < 0)
- break;
-
- pskey = array[4] + (array[5] << 8);
- if (pskey == 0x0000)
- break;
-
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = stores & 0xff;
- array[3] = stores >> 8;
-
- err = transport_read(transport, CSR_VARID_PS_SIZE, array, 8);
- if (err < 0)
- continue;
-
- length = array[2] + (array[3] << 8);
- if (length + 6 > (int) sizeof(array) / 2)
- continue;
-
- memset(array, 0, sizeof(array));
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = length & 0xff;
- array[3] = length >> 8;
- array[4] = stores & 0xff;
- array[5] = stores >> 8;
-
- err = transport_read(transport, CSR_VARID_PS, array, (length + 3) * 2);
- if (err < 0)
- continue;
-
- 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; i++)
- printf(" %02x%02x", array[(i * 2) + 7], array[(i * 2) + 6]);
- printf("\n");
- }
-
- if (reset)
- transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
- return 0;
-}
-
-static int cmd_psload(int transport, int argc, char *argv[])
-{
- uint8_t array[256];
- uint16_t pskey, length, size, stores = CSR_STORES_PSRAM;
- char *str, val[7];
- int err, reset = 0;
-
- OPT_PSKEY(1, 1, &stores, &reset, NULL);
-
- psr_read(argv[0]);
-
- memset(array, 0, sizeof(array));
- size = sizeof(array) - 6;
-
- while (psr_get(&pskey, array + 6, &size) == 0) {
- str = csr_pskeytoval(pskey);
- if (!strcasecmp(str, "UNKNOWN")) {
- sprintf(val, "0x%04x", pskey);
- str = NULL;
- }
-
- printf("Loading %s%s ... ", str ? "PSKEY_" : "",
- str ? str : val);
- fflush(stdout);
-
- length = size / 2;
-
- array[0] = pskey & 0xff;
- array[1] = pskey >> 8;
- array[2] = length & 0xff;
- array[3] = length >> 8;
- array[4] = stores & 0xff;
- array[5] = stores >> 8;
-
- err = transport_write(transport, CSR_VARID_PS, array, size + 6);
-
- printf("%s\n", err < 0 ? "failed" : "done");
-
- memset(array, 0, sizeof(array));
- size = sizeof(array) - 6;
- }
-
- if (reset)
- transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
- return 0;
-}
-
-static int cmd_pscheck(int transport, int argc, char *argv[])
-{
- uint8_t array[256];
- uint16_t pskey, size;
- int i;
-
- OPT_HELP(1, NULL);
-
- psr_read(argv[0]);
-
- while (psr_get(&pskey, array, &size) == 0) {
- printf("0x%04x =", pskey);
- for (i = 0; i < size; i++)
- printf(" 0x%02x", array[i]);
- printf("\n");
- }
-
- return 0;
-}
-
-static int cmd_adc(int transport, int argc, char *argv[])
-{
- uint8_t array[8];
- uint16_t mux, value;
- int err;
-
- OPT_HELP(1, NULL);
-
- if (!strncasecmp(argv[0], "0x", 2))
- mux = strtol(argv[0], NULL, 16);
- else
- mux = atoi(argv[0]);
-
- /* Request an ADC read from a particular mux'ed input */
- memset(array, 0, sizeof(array));
- array[0] = mux & 0xff;
- array[1] = mux >> 8;
-
- err = transport_write(transport, CSR_VARID_ADC, array, 2);
- if (err < 0) {
- errno = -err;
- return -1;
- }
-
- /* have to wait a short while, then read result */
- usleep(50000);
- err = transport_read(transport, CSR_VARID_ADC_RES, array, 8);
- if (err < 0) {
- errno = -err;
- return -1;
- }
-
- mux = array[0] | (array[1] << 8);
- value = array[4] | (array[5] << 8);
-
- printf("ADC value from Mux 0x%02x : 0x%04x (%s)\n", mux, value,
- array[2] == 1 ? "valid" : "invalid");
-
- return 0;
-}
-
-static struct {
- char *str;
- int (*func)(int transport, int argc, char *argv[]);
- char *arg;
- char *doc;
-} commands[] = {
- { "builddef", cmd_builddef, "", "Get build definitions" },
- { "keylen", cmd_keylen, "<handle>", "Get current crypt key length" },
- { "clock", cmd_clock, "", "Get local Bluetooth clock" },
- { "rand", cmd_rand, "", "Get random number" },
- { "chiprev", cmd_chiprev, "", "Get chip revision" },
- { "buildname", cmd_buildname, "", "Get the full build name" },
- { "panicarg", cmd_panicarg, "", "Get panic code argument" },
- { "faultarg", cmd_faultarg, "", "Get fault code argument" },
- { "coldreset", cmd_coldreset, "", "Perform cold reset" },
- { "warmreset", cmd_warmreset, "", "Perform warm reset" },
- { "disabletx", cmd_disabletx, "", "Disable TX on the device" },
- { "enabletx", cmd_enabletx, "", "Enable TX on the device" },
- { "singlechan",cmd_singlechan,"<channel>", "Lock radio on specific channel" },
- { "hoppingon", cmd_hoppingon, "", "Revert to channel hopping" },
- { "rttxdata1", cmd_rttxdata1, "<freq> <level>", "TXData1 radio test" },
- { "radiotest", cmd_radiotest, "<freq> <level> <id>", "Run radio tests" },
- { "memtypes", cmd_memtypes, NULL, "Get memory types" },
- { "psget", cmd_psget, "<key>", "Get value for PS key" },
- { "psset", cmd_psset, "<key> <value>", "Set value for PS key" },
- { "psclr", cmd_psclr, "<key>", "Clear value for PS key" },
- { "pslist", cmd_pslist, NULL, "List all PS keys" },
- { "psread", cmd_psread, NULL, "Read all PS keys" },
- { "psload", cmd_psload, "<file>", "Load all PS keys from PSR file" },
- { "pscheck", cmd_pscheck, "<file>", "Check PSR file" },
- { "adc", cmd_adc, "<mux>", "Read ADC value of <mux> input" },
- { NULL }
-};
-
-static void usage(void)
-{
- int i, pos = 0;
-
- printf("bccmd - Utility for the CSR BCCMD interface\n\n");
- printf("Usage:\n"
- "\tbccmd [options] <command>\n\n");
-
- printf("Options:\n"
- "\t-t <transport> Select the transport\n"
- "\t-d <device> Select the device\n"
- "\t-b <bcsp rate> Select the bcsp transfer rate\n"
- "\t-h, --help Display help\n"
- "\n");
-
- printf("Transports:\n"
- "\tHCI USB BCSP H4 3WIRE\n\n");
-
- printf("Commands:\n");
- for (i = 0; commands[i].str; i++)
- printf("\t%-10s %-20s\t%s\n", commands[i].str,
- commands[i].arg ? commands[i].arg : " ",
- commands[i].doc);
- printf("\n");
-
- printf("Keys:\n\t");
- for (i = 0; storage[i].pskey; i++) {
- printf("%s ", storage[i].str);
- pos += strlen(storage[i].str) + 1;
- if (pos > 60) {
- printf("\n\t");
- pos = 0;
- }
- }
- printf("\n");
-}
-
-static struct option main_options[] = {
- { "transport", 1, 0, 't' },
- { "device", 1, 0, 'd' },
- { "bcsprate", 1, 0, 'b'},
- { "help", 0, 0, 'h' },
- { 0, 0, 0, 0 }
-};
-
-int main(int argc, char *argv[])
-{
- char *device = NULL;
- int i, err, opt, transport = CSR_TRANSPORT_HCI;
- speed_t bcsp_rate = B38400;
-
- while ((opt=getopt_long(argc, argv, "+t:d:i:b:h", main_options, NULL)) != EOF) {
- switch (opt) {
- case 't':
- if (!strcasecmp(optarg, "hci"))
- transport = CSR_TRANSPORT_HCI;
- else if (!strcasecmp(optarg, "usb"))
- transport = CSR_TRANSPORT_USB;
- else if (!strcasecmp(optarg, "bcsp"))
- transport = CSR_TRANSPORT_BCSP;
- else if (!strcasecmp(optarg, "h4"))
- transport = CSR_TRANSPORT_H4;
- else if (!strcasecmp(optarg, "h5"))
- transport = CSR_TRANSPORT_3WIRE;
- else if (!strcasecmp(optarg, "3wire"))
- transport = CSR_TRANSPORT_3WIRE;
- else if (!strcasecmp(optarg, "twutl"))
- transport = CSR_TRANSPORT_3WIRE;
- else
- transport = CSR_TRANSPORT_UNKNOWN;
- break;
-
- case 'd':
- case 'i':
- device = strdup(optarg);
- break;
- case 'b':
- bcsp_rate = tty_get_speed(atoi(optarg));
- if (!bcsp_rate) {
- printf("Unknown BCSP baud rate specified, defaulting to 38400bps\n");
- bcsp_rate = B38400;
- }
- break;
- case 'h':
- default:
- usage();
- exit(0);
- }
- }
-
- argc -= optind;
- argv += optind;
- optind = 0;
-
- if (argc < 1) {
- usage();
- exit(1);
- }
-
- if (transport_open(transport, device, bcsp_rate) < 0)
- exit(1);
-
- free(device);
-
- for (i = 0; commands[i].str; i++) {
- if (strcasecmp(commands[i].str, argv[0]))
- continue;
-
- err = commands[i].func(transport, argc, argv);
-
- transport_close(transport);
-
- if (err < 0) {
- fprintf(stderr, "Can't execute command: %s (%d)\n",
- strerror(errno), errno);
- exit(1);
- }
-
- exit(0);
- }
-
- fprintf(stderr, "Unsupported command\n");
-
- transport_close(transport);
-
- exit(1);
-}
diff --git a/tools/csr.c b/tools/csr.c
deleted file mode 100644
index 61bdaa0cf..000000000
--- a/tools/csr.c
+++ /dev/null
@@ -1,2856 +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
-
-#define _GNU_SOURCE
-#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 "lib/bluetooth.h"
-#include "lib/hci.h"
-#include "lib/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/tools/csr.h b/tools/csr.h
deleted file mode 100644
index cc245a550..000000000
--- a/tools/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/tools/csr_3wire.c b/tools/csr_3wire.c
deleted file mode 100644
index 33fcf389a..000000000
--- a/tools/csr_3wire.c
+++ /dev/null
@@ -1,62 +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 <stdint.h>
-
-#include "csr.h"
-
-static uint16_t seqnum = 0x0000;
-
-int csr_open_3wire(char *device)
-{
- fprintf(stderr, "Transport not implemented\n");
-
- return -1;
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
- errno = EIO;
-
- return -1;
-}
-
-int csr_read_3wire(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_3wire(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_3wire(void)
-{
-}
diff --git a/tools/csr_bcsp.c b/tools/csr_bcsp.c
deleted file mode 100644
index e3eea34df..000000000
--- a/tools/csr_bcsp.c
+++ /dev/null
@@ -1,257 +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
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdint.h>
-#include <termios.h>
-
-#include "csr.h"
-#include "ubcsp.h"
-
-static uint16_t seqnum = 0x0000;
-
-static int fd = -1;
-
-static struct ubcsp_packet send_packet;
-static uint8_t send_buffer[512];
-
-static struct ubcsp_packet receive_packet;
-static uint8_t receive_buffer[512];
-
-int csr_open_bcsp(char *device, speed_t bcsp_rate)
-{
- struct termios ti;
- uint8_t delay, activity = 0x00;
- int timeout = 0;
-
- if (!device)
- device = "/dev/ttyS0";
-
- fd = open(device, O_RDWR | O_NOCTTY);
- if (fd < 0) {
- fprintf(stderr, "Can't open serial port: %s (%d)\n",
- strerror(errno), errno);
- return -1;
- }
-
- tcflush(fd, TCIOFLUSH);
-
- if (tcgetattr(fd, &ti) < 0) {
- fprintf(stderr, "Can't get port settings: %s (%d)\n",
- strerror(errno), errno);
- close(fd);
- return -1;
- }
-
- cfmakeraw(&ti);
-
- ti.c_cflag |= CLOCAL;
- ti.c_cflag &= ~CRTSCTS;
- ti.c_cflag |= PARENB;
- ti.c_cflag &= ~PARODD;
- ti.c_cflag &= ~CSIZE;
- ti.c_cflag |= CS8;
- ti.c_cflag &= ~CSTOPB;
-
- ti.c_cc[VMIN] = 1;
- ti.c_cc[VTIME] = 0;
-
- cfsetospeed(&ti, bcsp_rate);
-
- if (tcsetattr(fd, TCSANOW, &ti) < 0) {
- fprintf(stderr, "Can't change port settings: %s (%d)\n",
- strerror(errno), errno);
- close(fd);
- return -1;
- }
-
- tcflush(fd, TCIOFLUSH);
-
- if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK) < 0) {
- fprintf(stderr, "Can't set non blocking mode: %s (%d)\n",
- strerror(errno), errno);
- close(fd);
- return -1;
- }
-
- memset(&send_packet, 0, sizeof(send_packet));
- memset(&receive_packet, 0, sizeof(receive_packet));
-
- ubcsp_initialize();
-
- send_packet.length = 512;
- send_packet.payload = send_buffer;
-
- receive_packet.length = 512;
- receive_packet.payload = receive_buffer;
-
- ubcsp_receive_packet(&receive_packet);
-
- while (1) {
- delay = ubcsp_poll(&activity);
-
- if (activity & UBCSP_PACKET_SENT)
- break;
-
- if (delay) {
- usleep(delay * 100);
-
- if (timeout++ > 5000) {
- fprintf(stderr, "Initialization timed out\n");
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-void put_uart(uint8_t ch)
-{
- if (write(fd, &ch, 1) < 0)
- fprintf(stderr, "UART write error\n");
-}
-
-uint8_t get_uart(uint8_t *ch)
-{
- int res = read(fd, ch, 1);
- return res > 0 ? res : 0;
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
- unsigned char cp[254], rp[254];
- uint8_t cmd[10];
- uint16_t size;
- uint8_t delay, activity = 0x00;
- int timeout = 0, sent = 0;
-
- size = (length < 8) ? 9 : ((length + 1) / 2) + 5;
-
- cmd[0] = command & 0xff;
- cmd[1] = command >> 8;
- cmd[2] = size & 0xff;
- cmd[3] = size >> 8;
- cmd[4] = seqnum & 0xff;
- cmd[5] = seqnum >> 8;
- cmd[6] = varid & 0xff;
- cmd[7] = varid >> 8;
- cmd[8] = 0x00;
- cmd[9] = 0x00;
-
- memset(cp, 0, sizeof(cp));
- cp[0] = 0x00;
- cp[1] = 0xfc;
- cp[2] = (size * 2) + 1;
- cp[3] = 0xc2;
- memcpy(cp + 4, cmd, sizeof(cmd));
- memcpy(cp + 14, value, length);
-
- receive_packet.length = 512;
- ubcsp_receive_packet(&receive_packet);
-
- send_packet.channel = 5;
- send_packet.reliable = 1;
- send_packet.length = (size * 2) + 4;
- memcpy(send_packet.payload, cp, (size * 2) + 4);
-
- ubcsp_send_packet(&send_packet);
-
- while (1) {
- delay = ubcsp_poll(&activity);
-
- if (activity & UBCSP_PACKET_SENT) {
- switch (varid) {
- case CSR_VARID_COLD_RESET:
- case CSR_VARID_WARM_RESET:
- case CSR_VARID_COLD_HALT:
- case CSR_VARID_WARM_HALT:
- return 0;
- }
-
- sent = 1;
- timeout = 0;
- }
-
- if (activity & UBCSP_PACKET_RECEIVED) {
- if (sent && receive_packet.channel == 5 &&
- receive_packet.payload[0] == 0xff) {
- memcpy(rp, receive_packet.payload,
- receive_packet.length);
- break;
- }
-
- receive_packet.length = 512;
- ubcsp_receive_packet(&receive_packet);
- timeout = 0;
- }
-
- if (delay) {
- usleep(delay * 100);
-
- if (timeout++ > 5000) {
- fprintf(stderr, "Operation timed out\n");
- errno = ETIMEDOUT;
- return -1;
- }
- }
- }
-
- if (rp[0] != 0xff || rp[2] != 0xc2) {
- errno = EIO;
- return -1;
- }
-
- if ((rp[11] + (rp[12] << 8)) != 0) {
- errno = ENXIO;
- return -1;
- }
-
- memcpy(value, rp + 13, length);
-
- return 0;
-}
-
-int csr_read_bcsp(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_bcsp(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_bcsp(void)
-{
- close(fd);
-}
diff --git a/tools/csr_h4.c b/tools/csr_h4.c
deleted file mode 100644
index 2dcaec1e5..000000000
--- a/tools/csr_h4.c
+++ /dev/null
@@ -1,166 +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
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdint.h>
-#include <termios.h>
-
-#include "csr.h"
-
-static uint16_t seqnum = 0x0000;
-
-static int fd = -1;
-
-int csr_open_h4(char *device)
-{
- struct termios ti;
-
- if (!device)
- device = "/dev/ttyS0";
-
- fd = open(device, O_RDWR | O_NOCTTY);
- if (fd < 0) {
- fprintf(stderr, "Can't open serial port: %s (%d)\n",
- strerror(errno), errno);
- return -1;
- }
-
- tcflush(fd, TCIOFLUSH);
-
- if (tcgetattr(fd, &ti) < 0) {
- fprintf(stderr, "Can't get port settings: %s (%d)\n",
- strerror(errno), errno);
- close(fd);
- return -1;
- }
-
- cfmakeraw(&ti);
-
- ti.c_cflag |= CLOCAL;
- ti.c_cflag |= CRTSCTS;
-
- cfsetospeed(&ti, B38400);
-
- if (tcsetattr(fd, TCSANOW, &ti) < 0) {
- fprintf(stderr, "Can't change port settings: %s (%d)\n",
- strerror(errno), errno);
- close(fd);
- return -1;
- }
-
- tcflush(fd, TCIOFLUSH);
-
- return 0;
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
- unsigned char cp[254], rp[254];
- uint8_t cmd[10];
- uint16_t size;
- int len, offset = 3;
-
- size = (length < 8) ? 9 : ((length + 1) / 2) + 5;
-
- cmd[0] = command & 0xff;
- cmd[1] = command >> 8;
- cmd[2] = size & 0xff;
- cmd[3] = size >> 8;
- cmd[4] = seqnum & 0xff;
- cmd[5] = seqnum >> 8;
- cmd[6] = varid & 0xff;
- cmd[7] = varid >> 8;
- cmd[8] = 0x00;
- cmd[9] = 0x00;
-
- memset(cp, 0, sizeof(cp));
- cp[0] = 0x01;
- cp[1] = 0x00;
- cp[2] = 0xfc;
- cp[3] = (size * 2) + 1;
- cp[4] = 0xc2;
- memcpy(cp + 5, cmd, sizeof(cmd));
- memcpy(cp + 15, value, length);
-
- if (write(fd, cp, (size * 2) + 5) < 0)
- return -1;
-
- switch (varid) {
- case CSR_VARID_COLD_RESET:
- case CSR_VARID_WARM_RESET:
- case CSR_VARID_COLD_HALT:
- case CSR_VARID_WARM_HALT:
- return 0;
- }
-
- do {
- if (read(fd, rp, 1) < 1)
- return -1;
- } while (rp[0] != 0x04);
-
- if (read(fd, rp + 1, 2) < 2)
- return -1;
-
- do {
- len = read(fd, rp + offset, sizeof(rp) - offset);
- offset += len;
- } while (offset < rp[2] + 3);
-
- if (rp[0] != 0x04 || rp[1] != 0xff || rp[3] != 0xc2) {
- errno = EIO;
- return -1;
- }
-
- if ((rp[12] + (rp[13] << 8)) != 0) {
- errno = ENXIO;
- return -1;
- }
-
- memcpy(value, rp + 14, length);
-
- return 0;
-}
-
-int csr_read_h4(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_h4(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_h4(void)
-{
- close(fd);
-}
diff --git a/tools/csr_hci.c b/tools/csr_hci.c
deleted file mode 100644
index d2e4ab9c6..000000000
--- a/tools/csr_hci.c
+++ /dev/null
@@ -1,160 +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 <string.h>
-#include <sys/socket.h>
-
-#include "lib/bluetooth.h"
-#include "lib/hci.h"
-#include "lib/hci_lib.h"
-
-#include "csr.h"
-
-static uint16_t seqnum = 0x0000;
-
-static int dd = -1;
-
-int csr_open_hci(char *device)
-{
- struct hci_dev_info di;
- struct hci_version ver;
- int dev = 0;
-
- if (device) {
- dev = hci_devid(device);
- if (dev < 0) {
- fprintf(stderr, "Device not available\n");
- return -1;
- }
- }
-
- dd = hci_open_dev(dev);
- if (dd < 0) {
- fprintf(stderr, "Can't open device hci%d: %s (%d)\n",
- dev, strerror(errno), errno);
- return -1;
- }
-
- if (hci_devinfo(dev, &di) < 0) {
- fprintf(stderr, "Can't get device info for hci%d: %s (%d)\n",
- dev, strerror(errno), errno);
- hci_close_dev(dd);
- return -1;
- }
-
- if (hci_read_local_version(dd, &ver, 1000) < 0) {
- fprintf(stderr, "Can't read version info for hci%d: %s (%d)\n",
- dev, strerror(errno), errno);
- hci_close_dev(dd);
- return -1;
- }
-
- if (ver.manufacturer != 10) {
- fprintf(stderr, "Unsupported manufacturer\n");
- hci_close_dev(dd);
- return -1;
- }
-
- return 0;
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
- unsigned char cp[254], rp[254];
- struct hci_request rq;
- uint8_t cmd[10];
- uint16_t size;
-
- size = (length < 8) ? 9 : ((length + 1) / 2) + 5;
-
- cmd[0] = command & 0xff;
- cmd[1] = command >> 8;
- cmd[2] = size & 0xff;
- cmd[3] = size >> 8;
- cmd[4] = seqnum & 0xff;
- cmd[5] = seqnum >> 8;
- cmd[6] = varid & 0xff;
- cmd[7] = varid >> 8;
- cmd[8] = 0x00;
- cmd[9] = 0x00;
-
- memset(cp, 0, sizeof(cp));
- cp[0] = 0xc2;
- memcpy(cp + 1, cmd, sizeof(cmd));
- memcpy(cp + 11, value, length);
-
- 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, (size * 2) + 1, cp);
- }
-
- memset(&rq, 0, sizeof(rq));
- rq.ogf = OGF_VENDOR_CMD;
- rq.ocf = 0x00;
- rq.event = EVT_VENDOR;
- rq.cparam = cp;
- rq.clen = (size * 2) + 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_hci(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_hci(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_hci(void)
-{
- hci_close_dev(dd);
-}
diff --git a/tools/csr_usb.c b/tools/csr_usb.c
deleted file mode 100644
index 32fdf1f14..000000000
--- a/tools/csr_usb.c
+++ /dev/null
@@ -1,308 +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
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-#include <dirent.h>
-#include <limits.h>
-#include <sys/ioctl.h>
-
-#include "csr.h"
-
-#define USB_TYPE_CLASS (0x01 << 5)
-
-#define USB_RECIP_DEVICE 0x00
-
-#define USB_ENDPOINT_IN 0x80
-#define USB_ENDPOINT_OUT 0x00
-
-struct usbfs_ctrltransfer {
- uint8_t bmRequestType;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
- uint32_t timeout; /* in milliseconds */
- void *data; /* pointer to data */
-};
-
-struct usbfs_bulktransfer {
- unsigned int ep;
- unsigned int len;
- unsigned int timeout; /* in milliseconds */
- void *data; /* pointer to data */
-};
-
-#define USBFS_IOCTL_CONTROL _IOWR('U', 0, struct usbfs_ctrltransfer)
-#define USBFS_IOCTL_BULK _IOWR('U', 2, struct usbfs_bulktransfer)
-#define USBFS_IOCTL_CLAIMINTF _IOR('U', 15, unsigned int)
-#define USBFS_IOCTL_RELEASEINTF _IOR('U', 16, unsigned int)
-
-static int read_value(const char *name, const char *attr, bool hex_number)
-{
- char path[PATH_MAX];
- FILE *file;
- int n, value;
-
- snprintf(path, sizeof(path), "/sys/bus/usb/devices/%s/%s", name, attr);
-
- file = fopen(path, "r");
- if (!file)
- return -1;
-
- n = fscanf(file, hex_number ? "%d" : "%04x", &value);
- if (n != 1) {
- fclose(file);
- return -1;
- }
-
- fclose(file);
- return value;
-}
-
-#define read_hex_value(name, file) read_value((name), (file), true)
-#define read_num_value(name, file) read_value((name), (file), false)
-
-static char *check_device(const char *name)
-{
- char path[PATH_MAX];
- int busnum, devnum, vendor, product;
-
- busnum = read_num_value(name, "busnum");
- if (busnum < 0)
- return NULL;
-
- devnum = read_num_value(name, "devnum");
- if (devnum < 0)
- return NULL;
-
- snprintf(path, sizeof(path), "/dev/bus/usb/%03u/%03u", busnum, devnum);
-
- vendor = read_hex_value(name, "idVendor");
- if (vendor < 0)
- return NULL;
-
- product = read_hex_value(name, "idProduct");
- if (product < 0)
- return NULL;
-
- if (vendor != 0x0a12 || product != 0x0001)
- return NULL;
-
- return strdup(path);
-}
-
-static char *find_device(void)
-{
- char *path = NULL;
- DIR *dir;
-
- dir = opendir("/sys/bus/usb/devices");
- if (!dir)
- return NULL;
-
- while (1) {
- struct dirent *d;
-
- d = readdir(dir);
- if (!d)
- break;
-
- if ((!isdigit(d->d_name[0]) && strncmp(d->d_name, "usb", 3))
- || strchr(d->d_name, ':'))
- continue;
-
- path = check_device(d->d_name);
- if (path)
- break;
- }
-
- closedir(dir);
-
- return path;
-}
-
-static uint16_t seqnum = 0x0000;
-static int handle = -1;
-
-int csr_open_usb(char *device)
-{
- int interface = 0;
- char *path;
-
- path = find_device();
- if (!path) {
- fprintf(stderr, "Device not available\n");
- return -1;
- }
-
- handle = open(path, O_RDWR, O_CLOEXEC | O_NONBLOCK);
-
- free(path);
-
- if (handle < 0) {
- fprintf(stderr, "Can't open device: %s (%d)\n",
- strerror(errno), errno);
- return -1;
- }
-
- if (ioctl(handle, USBFS_IOCTL_CLAIMINTF, &interface) < 0) {
- fprintf(stderr, "Can't claim interface: %s (%d)\n",
- strerror(errno), errno);
- close(handle);
- handle = -1;
- return -1;
- }
-
- return 0;
-}
-
-static int control_write(int fd, void *data, unsigned short size)
-{
- struct usbfs_ctrltransfer transfer;
-
- transfer.bmRequestType = USB_TYPE_CLASS | USB_ENDPOINT_OUT |
- USB_RECIP_DEVICE;
- transfer.bRequest = 0;
- transfer.wValue = 0;
- transfer.wIndex = 0;
- transfer.wLength = size,
- transfer.timeout = 2000;
- transfer.data = data;
-
- if (ioctl(fd, USBFS_IOCTL_CONTROL, &transfer) < 0) {
- fprintf(stderr, "Control transfer failed: %s (%d)\n",
- strerror(errno), errno);
- return -1;
- }
-
- return 0;
-}
-
-static int interrupt_read(int fd, unsigned char endpoint,
- void *data, unsigned short size)
-{
- struct usbfs_bulktransfer transfer;
-
- transfer.ep = endpoint;
- transfer.len = size,
- transfer.timeout = 20;
- transfer.data = data;
-
- return ioctl(fd, USBFS_IOCTL_BULK, &transfer);
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid,
- uint8_t *value, uint16_t length)
-{
- unsigned char cp[254], rp[254];
- uint8_t cmd[10];
- uint16_t size;
- int len, offset = 0;
-
- size = (length < 8) ? 9 : ((length + 1) / 2) + 5;
-
- cmd[0] = command & 0xff;
- cmd[1] = command >> 8;
- cmd[2] = size & 0xff;
- cmd[3] = size >> 8;
- cmd[4] = seqnum & 0xff;
- cmd[5] = seqnum >> 8;
- cmd[6] = varid & 0xff;
- cmd[7] = varid >> 8;
- cmd[8] = 0x00;
- cmd[9] = 0x00;
-
- memset(cp, 0, sizeof(cp));
- cp[0] = 0x00;
- cp[1] = 0xfc;
- cp[2] = (size * 2) + 1;
- cp[3] = 0xc2;
- memcpy(cp + 4, cmd, sizeof(cmd));
- memcpy(cp + 14, value, length);
-
- interrupt_read(handle, USB_ENDPOINT_IN | 0x01, rp, sizeof(rp));
-
- control_write(handle, cp, (size * 2) + 4);
-
- switch (varid) {
- case CSR_VARID_COLD_RESET:
- case CSR_VARID_WARM_RESET:
- case CSR_VARID_COLD_HALT:
- case CSR_VARID_WARM_HALT:
- return 0;
- }
-
- do {
- len = interrupt_read(handle, USB_ENDPOINT_IN | 0x01,
- rp + offset, sizeof(rp) - offset);
- if (len < 0)
- break;
- offset += len;
- } while (len > 0);
-
- if (rp[0] != 0xff || rp[2] != 0xc2) {
- errno = EIO;
- return -1;
- }
-
- if ((rp[11] + (rp[12] << 8)) != 0) {
- errno = ENXIO;
- return -1;
- }
-
- memcpy(value, rp + 13, length);
-
- return 0;
-}
-
-int csr_read_usb(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_usb(uint16_t varid, uint8_t *value, uint16_t length)
-{
- return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_usb(void)
-{
- int interface = 0;
-
- ioctl(handle, USBFS_IOCTL_RELEASEINTF, &interface);
-
- close(handle);
- handle = -1;
-}
diff --git a/tools/hciconfig.c b/tools/hciconfig.c
index ddc17c4b5..a7b0b0a86 100644
--- a/tools/hciconfig.c
+++ b/tools/hciconfig.c
@@ -46,7 +46,6 @@
#include "src/textfile.h"
#include "src/shared/util.h"
-#include "tools/csr.h"
static struct hci_dev_info di;
static int all;
@@ -1703,30 +1702,6 @@ static void print_rev_ericsson(int dd)
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;
@@ -1789,9 +1764,6 @@ static void cmd_revision(int ctl, int hdev, char *opt)
case 48:
print_rev_ericsson(dd);
break;
- case 10:
- print_rev_csr(dd, ver.hci_rev);
- break;
case 12:
print_rev_digianswer(dd);
break;
diff --git a/tools/ubcsp.c b/tools/ubcsp.c
deleted file mode 100644
index b3f883a03..000000000
--- a/tools/ubcsp.c
+++ /dev/null
@@ -1,1180 +0,0 @@
-/*
- *
- * BlueZ - Bluetooth protocol stack for Linux
- *
- * Copyright (C) 2000-2005 CSR Ltd.
- *
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-/** **/
-/** ubcsp,c **/
-/** **/
-/** MicroBCSP - a very low cost implementation of the BCSP protocol **/
-/** **/
-/*****************************************************************************/
-
-#include "ubcsp.h"
-
-#if SHOW_PACKET_ERRORS || SHOW_LE_STATES
-#include <stdio.h>
-#include <windows.h>
-#endif
-
-static uint16 ubcsp_calc_crc (uint8 ch, uint16 crc);
-static uint16 ubcsp_crc_reverse (uint16);
-
-/*****************************************************************************/
-/** **/
-/** Constant Data - ROM **/
-/** **/
-/*****************************************************************************/
-
-/* This is the storage for the link establishment messages */
-
-static const uint8 ubcsp_le_buffer[4][4] =
- {
- { 0xDA, 0xDC, 0xED, 0xED },
- { 0xAC, 0xAF, 0xEF, 0xEE },
- { 0xAD, 0xEF, 0xAC, 0xED },
- { 0xDE, 0xAD, 0xD0, 0xD0 },
- };
-
-/* These are the link establishment headers */
-/* The two version are for the CRC and non-CRC varients */
-
-#if UBCSP_CRC
-static const uint8 ubcsp_send_le_header[4] =
- {
- 0x40, 0x41, 0x00, 0x7E
- };
-#else
-static const uint8 ubcsp_send_le_header[4] =
- {
- 0x00, 0x41, 0x00, 0xBE
- };
-#endif
-
-/*****************************************************************************/
-/** **/
-/** Static Data - RAM **/
-/** **/
-/*****************************************************************************/
-
-/* This is the storage for all state data for ubcsp */
-
-static struct ubcsp_configuration ubcsp_config;
-
-/* This is the ACK packet header - this will be overwritten when
- we create an ack packet */
-
-static uint8 ubcsp_send_ack_header[4] =
- {
- 0x00, 0x00, 0x00, 0x00
- };
-
-/* This is the deslip lookup table */
-
-static const uint8 ubcsp_deslip[2] =
- {
- SLIP_FRAME, SLIP_ESCAPE,
- };
-
-/* This is a state machine table for link establishment */
-
-static uint8 next_le_packet[16] =
- {
- ubcsp_le_sync, // uninit
- ubcsp_le_conf, // init
- ubcsp_le_none, // active
- ubcsp_le_none,
- ubcsp_le_sync_resp, // sync_resp
- ubcsp_le_sync_resp,
- ubcsp_le_none,
- ubcsp_le_none,
- ubcsp_le_none, // conf_resp
- ubcsp_le_conf_resp,
- ubcsp_le_conf_resp,
- ubcsp_le_none,
- };
-
-/* This is the storage required for building send and crc data */
-
-static uint8 ubcsp_send_header[4];
-static uint8 ubcsp_send_crc[2];
-
-/* This is where the receive header is stored before the payload arrives */
-
-static uint8 ubcsp_receive_header[4];
-
-/*****************************************************************************/
-/** **/
-/** Code - ROM or RAM **/
-/** **/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_initialize **/
-/** **/
-/** This initializes the state of the ubcsp engine to a known values **/
-/** **/
-/*****************************************************************************/
-
-void ubcsp_initialize (void)
-{
- ubcsp_config.ack_number = 0;
- ubcsp_config.sequence_number = 0;
- ubcsp_config.send_ptr = 0;
- ubcsp_config.send_size = 0;
- ubcsp_config.receive_index = -4;
-
- ubcsp_config.delay = 0;
-
-#if SHOW_LE_STATES
- printf ("Hello Link Uninitialized\n");
-#endif
-
- ubcsp_config.link_establishment_state = ubcsp_le_uninitialized;
- ubcsp_config.link_establishment_packet = ubcsp_le_sync;
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_send_packet **/
-/** **/
-/** This sends a packet structure for sending to the ubcsp engine **/
-/** This can only be called when the activity indication from ubcsp_poll **/
-/** indicates that a packet can be sent with UBCSP_PACKET_SENT **/
-/** **/
-/*****************************************************************************/
-
-void ubcsp_send_packet (struct ubcsp_packet *send_packet)
-{
- /* Initialize the send data to the packet we want to send */
-
- ubcsp_config.send_packet = send_packet;
-
- /* we cannot send the packet at the moment
- when we can at the moment, just set things to 0 */
-
- ubcsp_config.send_size = 0;
- ubcsp_config.send_ptr = 0;
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_receive_packet **/
-/** **/
-/** This sends a packet structure for receiving to the ubcsp engine **/
-/** This can only be called when the activity indication from ubcsp_poll **/
-/** indicates that a packet can be sent with UBCSP_PACKET_RECEIVED **/
-/** **/
-/*****************************************************************************/
-
-void ubcsp_receive_packet (struct ubcsp_packet *receive_packet)
-{
- /* Initialize the receive data to the packet we want to receive */
-
- ubcsp_config.receive_packet = receive_packet;
-
- /* setup to receive the header first */
-
- ubcsp_config.receive_index = -4;
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_calc_crc **/
-/** **/
-/** Takes the next 8 bit value ch, and updates the crc with this value **/
-/** **/
-/*****************************************************************************/
-
-
-#ifdef UBCSP_CRC
-
-static uint16 ubcsp_calc_crc (uint8 ch, uint16 crc)
-{
- /* Calculate the CRC using the above 16 entry lookup table */
-
- static const uint16 crc_table[] =
- {
- 0x0000, 0x1081, 0x2102, 0x3183,
- 0x4204, 0x5285, 0x6306, 0x7387,
- 0x8408, 0x9489, 0xa50a, 0xb58b,
- 0xc60c, 0xd68d, 0xe70e, 0xf78f
- };
-
- /* Do this four bits at a time - more code, less space */
-
- crc = (crc >> 4) ^ crc_table[(crc ^ ch) & 0x000f];
- crc = (crc >> 4) ^ crc_table[(crc ^ (ch >> 4)) & 0x000f];
-
- return crc;
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_crc_reverse **/
-/** **/
-/** Reserves the bits in crc and returns the new value **/
-/** **/
-/*****************************************************************************/
-
-static uint16 ubcsp_crc_reverse (uint16 crc)
-{
- int32
- b,
- rev;
-
- /* Reserse the bits to compute the actual CRC value */
-
- for (b = 0, rev=0; b < 16; b++)
- {
- rev = rev << 1;
- rev |= (crc & 1);
- crc = crc >> 1;
- }
-
- return rev;
-}
-
-#endif
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_put_slip_uart **/
-/** **/
-/** Outputs a single octet to the uart **/
-/** If the octet needs to be escaped, then output the escape value **/
-/** and then store the second octet to be output later **/
-/** **/
-/*****************************************************************************/
-
-static void ubcsp_put_slip_uart (uint8 ch)
-{
- /* output a single UART octet */
-
- /* If it needs to be escaped, then output the escape octet
- and set the send_slip_escape so that the next time we
- output the second octet for the escape correctly.
- This is done right at the top of ubcsp_poll */
-
- if (ch == SLIP_FRAME)
- {
- put_uart (SLIP_ESCAPE);
- ubcsp_config.send_slip_escape = SLIP_ESCAPE_FRAME;
- }
- else if (ch == SLIP_ESCAPE)
- {
- put_uart (SLIP_ESCAPE);
- ubcsp_config.send_slip_escape = SLIP_ESCAPE_ESCAPE;
- }
- else
- {
- /* Not escaped, so just output octet */
-
- put_uart (ch);
- }
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_which_le_payload **/
-/** **/
-/** Check the payload of this packet, and determine which of the four **/
-/** link establishment packets this was. **/
-/** Can return 5 if it is not a valid link establishment packet **/
-/** **/
-/*****************************************************************************/
-
-static uint32 ubcsp_which_le_payload (const uint8 *payload)
-{
- static int32
- octet,
- loop;
-
- /* Search through the various link establishment payloads to find
- which one we have received */
-
- for (loop = 0; loop < 4; loop ++)
- {
- for (octet = 0; octet < 4; octet ++)
- {
- if (payload[octet] != ubcsp_le_buffer[loop][octet])
- {
- /* Bad match, just to loop again */
- goto bad_match_loop;
- }
- }
-
- /* All the octets matched, return the value */
-
- return loop;
-
- /* Jumps out of octet loop if we got a bad match */
-bad_match_loop:
- {}
- }
-
- /* Non of the link establishment payloads matched - return invalid value */
-
- return 5;
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_recevied_packet **/
-/** **/
-/** This function is called when we have a SLIP END octet and a full **/
-/** packet header and possibly data in the receive packet **/
-/** **/
-/*****************************************************************************/
-
-static uint8 ubcsp_recevied_packet (void)
-{
- static uint8
- receive_crc,
- receive_seq,
- receive_ack,
- activity;
-
-#if UBCSP_CRC
- static int32
- loop;
-
- static uint16
- crc;
-#endif
-
- static uint16
- length;
-
- /* Keep track of what activity this received packet will cause */
-
- activity = 0;
-
- /*** Do all error checks that we can ***/
-
- /* First check the header checksum */
-
- if (((ubcsp_receive_header[0] + ubcsp_receive_header[1] + ubcsp_receive_header[2] + ubcsp_receive_header[3]) & 0xff) != 0xff)
- {
- /* Header Checksum Error */
-
-#if SHOW_PACKET_ERRORS
- printf ("\n######################## Header Checksum Error %02X %02X %02X %02X\n",
- ubcsp_receive_header[0],
- ubcsp_receive_header[1],
- ubcsp_receive_header[2],
- ubcsp_receive_header[3]);
-#endif
-
- /* If we have a header checksum error, send an ack in return
- this gets a packet to be resent as quickly as possible */
-
- ubcsp_config.send_ack = 1;
-
- return activity;
- }
-
- /* Decode the received packets header */
-
- ubcsp_config.receive_packet->reliable = (ubcsp_receive_header[0] & 0x80) >> 7;
-
- receive_crc = (ubcsp_receive_header[0] & 0x40) >> 6;
- receive_ack = (ubcsp_receive_header[0] & 0x38) >> 3;
- receive_seq = (ubcsp_receive_header[0] & 0x07);
-
- ubcsp_config.receive_packet->channel = (ubcsp_receive_header[1] & 0x0f);
-
- length =
- ((ubcsp_receive_header[1] & 0xf0) >> 4) |
- (ubcsp_receive_header[2] << 4);
-
-#if SHOW_PACKET_ERRORS
- if (ubcsp_config.receive_packet->reliable)
- {
- printf (" : %10d Recv SEQ: %d ACK %d\n",
- GetTickCount () % 100000,
- receive_seq,
- receive_ack);
- }
- else if (ubcsp_config.receive_packet->channel != 1)
- {
- printf (" : %10d Recv ACK %d\n",
- GetTickCount () % 100000,
- receive_ack);
- }
-#endif
-
- /* Check for length errors */
-
-#if UBCSP_CRC
- if (receive_crc)
- {
- /* If this packet had a CRC, then the length of the payload
- should be 2 less than the received size of the payload */
-
- if (length + 2 != ubcsp_config.receive_index)
- {
- /* Slip Length Error */
-
-#if SHOW_PACKET_ERRORS
- printf ("\n######################## Slip Length Error (With CRC) %d,%d\n", length, ubcsp_config.receive_index - 2);
-#endif
-
- /* If we have a payload length error, send an ack in return
- this gets a packet to be resent as quickly as possible */
-
- ubcsp_config.send_ack = 1;
- return activity;
- }
-
- /* We have a CRC at the end of this packet */
-
- ubcsp_config.receive_index -= 2;
-
- /* Calculate the packet CRC */
-
- crc = 0xffff;
-
- /* CRC the packet header */
-
- for (loop = 0; loop < 4; loop ++)
- {
- crc = ubcsp_calc_crc (ubcsp_receive_header[loop], crc);
- }
-
- /* CRC the packet payload - without the CRC bytes */
-
- for (loop = 0; loop < ubcsp_config.receive_index; loop ++)
- {
- crc = ubcsp_calc_crc (ubcsp_config.receive_packet->payload[loop], crc);
- }
-
- /* Reverse the CRC */
-
- crc = ubcsp_crc_reverse (crc);
-
- /* Check the CRC is correct */
-
- if
- (
- (((crc & 0xff00) >> 8) != ubcsp_config.receive_packet->payload[ubcsp_config.receive_index]) ||
- ((crc & 0xff) != ubcsp_config.receive_packet->payload[ubcsp_config.receive_index + 1])
- )
- {
-#if SHOW_PACKET_ERRORS
- printf ("\n######################## CRC Error\n");
-#endif
-
- /* If we have a packet crc error, send an ack in return
- this gets a packet to be resent as quickly as possible */
-
- ubcsp_config.send_ack = 1;
- return activity;
- }
- }
- else
- {
-#endif
- /* No CRC present, so just check the length of payload with that received */
-
- if (length != ubcsp_config.receive_index)
- {
- /* Slip Length Error */
-
-#if SHOW_PACKET_ERRORS
- printf ("\n######################## Slip Length Error (No CRC) %d,%d\n", length, ubcsp_config.receive_index);
-#endif
-
- /* If we have a payload length error, send an ack in return
- this gets a packet to be resent as quickly as possible */
-
- ubcsp_config.send_ack = 1;
- return activity;
- }
-#if UBCSP_CRC
- }
-#endif
-
- /*** We have a fully formed packet having passed all data integrity checks ***/
-
- /* Check if we have an ACK for the last packet we sent */
-
- if (receive_ack != ubcsp_config.sequence_number)
- {
- /* Since we only have a window size of 1, if the ACK is not equal to SEQ
- then the packet was sent */
-
- if
- (
- (ubcsp_config.send_packet) &&
- (ubcsp_config.send_packet->reliable)
- )
- {
- /* We had sent a reliable packet, so clear this packet
- Then increament the sequence number for the next packet */
-
- ubcsp_config.send_packet = 0;
- ubcsp_config.sequence_number ++;
- ubcsp_config.delay = 0;
-
- /* Notify the caller that we have SENT a packet */
-
- activity |= UBCSP_PACKET_SENT;
- }
- }
-
- /*** Now we can concentrate of the packet we have received ***/
-
- /* Check for Link Establishment packets */
-
- if (ubcsp_config.receive_packet->channel == 1)
- {
- /* Link Establishment */
-
- ubcsp_config.delay = 0;
-
- /* Find which link establishment packet this payload means
- This could return 5, meaning none */
-
- switch (ubcsp_which_le_payload (ubcsp_config.receive_packet->payload))
- {
- case 0:
- {
- /* SYNC Recv'd */
-
-#if SHOW_LE_STATES
- printf ("Recv SYNC\n");
-#endif
-
- /* If we receive a SYNC, then we respond to it with a SYNC RESP
- but only if we are not active.
- If we are active, then we have a PEER RESET */
-
- if (ubcsp_config.link_establishment_state < ubcsp_le_active)
- {
- ubcsp_config.link_establishment_resp = 1;
- }
- else
- {
- /* Peer reset !!!! */
-
-#if SHOW_LE_STATES
- printf ("\n\n\n\n\nPEER RESET\n\n");
-#endif
-
- /* Reinitialize the link */
-
- ubcsp_initialize ();
-
- /* Tell the host what has happened */
-
- return UBCSP_PEER_RESET;
- }
- break;
- }
-
- case 1:
- {
- /* SYNC RESP Recv'd */
-
-#if SHOW_LE_STATES
- printf ("Recv SYNC RESP\n");
-#endif
-
- /* If we receive a SYNC RESP, push us into the initialized state */
-
- if (ubcsp_config.link_establishment_state < ubcsp_le_initialized)
- {
-#if SHOW_LE_STATES
- printf ("Link Initialized\n");
-#endif
- ubcsp_config.link_establishment_state = ubcsp_le_initialized;
- }
-
- break;
- }
-
- case 2:
- {
- /* CONF Recv'd */
-
-#if SHOW_LE_STATES
- printf ("Recv CONF\n");
-#endif
-
- /* If we receive a CONF, and we are initialized or active
- then respond with a CONF RESP */
-
- if (ubcsp_config.link_establishment_state >= ubcsp_le_initialized)
- {
- ubcsp_config.link_establishment_resp = 2;
- }
-
- break;
- }
-
- case 3:
- {
- /* CONF RESP Recv'd */
-
-#if SHOW_LE_STATES
- printf ("Recv CONF RESP\n");
-#endif
-
- /* If we received a CONF RESP, then push us into the active state */
-
- if (ubcsp_config.link_establishment_state < ubcsp_le_active)
- {
-#if SHOW_LE_STATES
- printf ("Link Active\n");
-#endif
-
- ubcsp_config.link_establishment_state = ubcsp_le_active;
- ubcsp_config.send_size = 0;
-
- return activity | UBCSP_PACKET_SENT;
- }
-
- break;
- }
- }
-
- /* We have finished processing Link Establishment packets */
- }
- else if (ubcsp_config.receive_index)
- {
- /* We have some payload data we need to process
- but only if we are active - otherwise, we just ignore it */
-
- if (ubcsp_config.link_establishment_state == ubcsp_le_active)
- {
- if (ubcsp_config.receive_packet->reliable)
- {
- /* If the packet we've just received was reliable
- then send an ACK */
-
- ubcsp_config.send_ack = 1;
-
- /* We the sequence number we received is the same as
- the last ACK we sent, then we have received a packet in sequence */
-
- if (receive_seq == ubcsp_config.ack_number)
- {
- /* Increase the ACK number - which will be sent in the next ACK
- or normal packet we send */
-
- ubcsp_config.ack_number ++;
-
- /* Set the values in the receive_packet structure, so the caller
- knows how much data we have */
-
- ubcsp_config.receive_packet->length = length;
- ubcsp_config.receive_packet = 0;
-
- /* Tell the caller that we have received a packet, and that it
- will be ACK'ed */
-
- activity |= UBCSP_PACKET_RECEIVED | UBCSP_PACKET_ACK;
- }
- }
- else
- {
- /* Set the values in the receive_packet structure, so the caller
- knows how much data we have */
-
- ubcsp_config.receive_packet->length = length;
- ubcsp_config.receive_packet = 0;
-
- /* Tell the caller that we have received a packet */
-
- activity |= UBCSP_PACKET_RECEIVED;
- }
- }
- }
-
- /* Just return any activity that occurred */
-
- return activity;
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_setup_packet **/
-/** **/
-/** This function is called to setup a packet to be sent **/
-/** This allows just a header, or a header and payload to be sent **/
-/** It also allows the header checksum to be precalcuated **/
-/** or calculated here **/
-/** part1 is always 4 bytes **/
-/** **/
-/*****************************************************************************/
-
-static void ubcsp_setup_packet (uint8 *part1, uint8 calc, uint8 *part2, uint16 len2)
-{
- /* If we need to calculate the checksum, do that now */
-
- if (calc)
- {
- part1[3] =
- ~(part1[0] + part1[1] + part1[2]);
- }
-
- /* Setup the header send pointer and size so we can clock this out */
-
- ubcsp_config.send_ptr = part1;
- ubcsp_config.send_size = 4;
-
- /* Setup the payload send pointer and size */
-
- ubcsp_config.next_send_ptr = part2;
- ubcsp_config.next_send_size = len2;
-
-#if UBCSP_CRC
- /* Initialize the crc as required */
-
- ubcsp_config.send_crc = -1;
-
- ubcsp_config.need_send_crc = 1;
-#endif
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_sent_packet **/
-/** **/
-/** Called when we have finished sending a packet **/
-/** If this packet was unreliable, then notify caller, and clear the data **/
-/** **/
-/*****************************************************************************/
-
-static uint8 ubcsp_sent_packet (void)
-{
- if (ubcsp_config.send_packet)
- {
- if (!ubcsp_config.send_packet->reliable)
- {
- /* We had a packet sent that was unreliable */
-
- /* Forget about this packet */
-
- ubcsp_config.send_packet = 0;
-
- /* Notify caller that they can send another one */
-
- return UBCSP_PACKET_SENT;
- }
- }
-
- /* We didn't have a packet, or it was reliable
- Must wait for ACK before allowing another packet to be sent */
-
- return 0;
-}
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_poll **/
-/** **/
-/** This is the main function for ubcsp **/
-/** It performs a number of tasks **/
-/** **/
-/** 1) Send another octet to the UART - escaping as required **/
-/** 2) Setup the payload to be sent after the header has been sent **/
-/** 3) Send the CRC for the packet if required **/
-/** **/
-/** 4) Calculate the next Link Establishment State **/
-/** 5) Send a Link Establishment packet **/
-/** 6) Send a normal packet if available **/
-/** 7) Send an ACK packet if required **/
-/** **/
-/** 8) Receive octets from UART and deslip them as required **/
-/** 9) Place received octets into receive header or receive payload buffer **/
-/** 10) Process received packet when SLIP_END is received **/
-/** **/
-/** 11) Keep track of ability of caller to delay recalling **/
-/** **/
-/*****************************************************************************/
-
-uint8 ubcsp_poll (uint8 *activity)
-{
- uint8
- delay = UBCSP_POLL_TIME_IMMEDIATE;
-
- uint8
- value;
-
- /* Assume no activity to start with */
-
- *activity = 0;
-
- /* If we don't have to delay, then send something if we can */
-
- if (!ubcsp_config.delay)
- {
- /* Do we have something we are sending to send */
-
- if (ubcsp_config.send_size)
- {
- /* We have something to send so send it */
-
- if (ubcsp_config.send_slip_escape)
- {
- /* Last time we send a SLIP_ESCAPE octet
- this time send the second escape code */
-
- put_uart (ubcsp_config.send_slip_escape);
-
- ubcsp_config.send_slip_escape = 0;
- }
- else
- {
-#if UBCSP_CRC
- /* get the value to send, and calculate CRC as we go */
-
- value = *ubcsp_config.send_ptr ++;
-
- ubcsp_config.send_crc = ubcsp_calc_crc (value, ubcsp_config.send_crc);
-
- /* Output the octet */
-
- ubcsp_put_slip_uart (value);
-#else
- /* Just output the octet*/
-
- ubcsp_put_slip_uart (*ubcsp_config.send_ptr ++);
-#endif
- }
-
- /* If we did output a SLIP_ESCAPE, then don't process the end of a block */
-
- if ((!ubcsp_config.send_slip_escape) && ((ubcsp_config.send_size = ubcsp_config.send_size - 1) == 0))
- {
- /*** We are at the end of a block - either header or payload ***/
-
- /* setup the next block */
-
- ubcsp_config.send_ptr = ubcsp_config.next_send_ptr;
- ubcsp_config.send_size = ubcsp_config.next_send_size;
- ubcsp_config.next_send_ptr = 0;
- ubcsp_config.next_send_size = 0;
-
-#if UBCSP_CRC
- /* If we have no successor block
- then we might need to send the CRC */
-
- if (!ubcsp_config.send_ptr)
- {
- if (ubcsp_config.need_send_crc)
- {
- /* reverse the CRC from what we computed along the way */
-
- ubcsp_config.need_send_crc = 0;
-
- ubcsp_config.send_crc = ubcsp_crc_reverse (ubcsp_config.send_crc);
-
- /* Save in the send_crc buffer */
-
- ubcsp_send_crc[0] = (uint8) (ubcsp_config.send_crc >> 8);
- ubcsp_send_crc[1] = (uint8) ubcsp_config.send_crc;
-
- /* Setup to send this buffer */
-
- ubcsp_config.send_ptr = ubcsp_send_crc;
- ubcsp_config.send_size = 2;
- }
- else
- {
- /* We don't need to send the crc
- either we just have, or this packet doesn't include it */
-
- /* Output the end of FRAME marker */
-
- put_uart (SLIP_FRAME);
-
- /* Check if this is an unreliable packet */
-
- *activity |= ubcsp_sent_packet ();
-
- /* We've sent the packet, so don't need to have be called quickly soon */
-
- delay = UBCSP_POLL_TIME_DELAY;
- }
- }
-#else
- /* If we have no successor block
- then we might need to send the CRC */
-
- if (!ubcsp_config.send_ptr)
- {
- /* Output the end of FRAME marker */
-
- put_uart (SLIP_FRAME);
-
- /* Check if this is an unreliable packet */
-
- *activity |= ubcsp_sent_packet ();
-
- /* We've sent the packet, so don't need to have be called quickly soon */
-
- delay = UBCSP_POLL_TIME_DELAY;
- }
-#endif
- }
- }
- else if (ubcsp_config.link_establishment_packet == ubcsp_le_none)
- {
- /* We didn't have something to send
- AND we have no Link Establishment packet to send */
-
- if (ubcsp_config.link_establishment_resp & 2)
- {
- /* Send the start of FRAME packet */
-
- put_uart (SLIP_FRAME);
-
- /* We did require a RESP packet - so setup the send */
-
- ubcsp_setup_packet ((uint8*) ubcsp_send_le_header, 0, (uint8*) ubcsp_le_buffer[ubcsp_le_conf_resp], 4);
-
- /* We have now "sent" this packet */
-
- ubcsp_config.link_establishment_resp = 0;
- }
- else if (ubcsp_config.send_packet)
- {
- /* There is a packet ready to be sent */
-
- /* Send the start of FRAME packet */
-
- put_uart (SLIP_FRAME);
-
- /* Encode up the packet header using ACK and SEQ numbers */
-
- ubcsp_send_header[0] =
- (ubcsp_config.send_packet->reliable << 7) |
-#if UBCSP_CRC
- 0x40 | /* Always use CRC's */
-#endif
- (ubcsp_config.ack_number << 3) |
- (ubcsp_config.sequence_number);
-
- /* Encode up the packet header's channel and length */
- ubcsp_send_header[1] =
- (ubcsp_config.send_packet->channel & 0x0f) |
- ((ubcsp_config.send_packet->length << 4) & 0xf0);
-
- ubcsp_send_header[2] =
- (ubcsp_config.send_packet->length >> 4) & 0xff;
-
- /* Let the ubcsp_setup_packet function calculate the header checksum */
-
- ubcsp_setup_packet ((uint8*) ubcsp_send_header, 1, ubcsp_config.send_packet->payload, ubcsp_config.send_packet->length);
-
- /* Don't need to send an ACK - we just place on in this packet */
-
- ubcsp_config.send_ack = 0;
-
-#if SHOW_PACKET_ERRORS
- printf (" : %10d Send %d Ack %d\n",
- GetTickCount () % 100000,
- ubcsp_config.sequence_number,
- ubcsp_config.ack_number);
-#endif
- }
- else if (ubcsp_config.send_ack)
- {
- /* Send the start of FRAME packet */
-
- put_uart (SLIP_FRAME);
-
-#if SHOW_PACKET_ERRORS
- printf (" : %10d Send ACK %d\n",
- GetTickCount () % 100000,
- ubcsp_config.ack_number);
-#endif
-
- /* The ack packet is already computed apart from the first octet */
-
- ubcsp_send_ack_header[0] =
-#if UBCSP_CRC
- 0x40 |
-#endif
- (ubcsp_config.ack_number << 3);
-
- /* Let the ubcsp_setup_packet function calculate the header checksum */
-
- ubcsp_setup_packet (ubcsp_send_ack_header, 1, 0, 0);
-
- /* We've now sent the ack */
-
- ubcsp_config.send_ack = 0;
- }
- else
- {
- /* We didn't have a Link Establishment response packet,
- a normal packet or an ACK packet to send */
-
- delay = UBCSP_POLL_TIME_DELAY;
- }
- }
- else
- {
-#if SHOW_PACKET_ERRORS
-// printf (" : %10d Send LE %d\n",
-// GetTickCount () % 100000,
-// ubcsp_config.link_establishment_packet);
-#endif
-
- /* Send A Link Establishment Message */
-
- put_uart (SLIP_FRAME);
-
- /* Send the Link Establishment header followed by the
- Link Establishment packet */
-
- ubcsp_setup_packet ((uint8*) ubcsp_send_le_header, 0, (uint8*) ubcsp_le_buffer[ubcsp_config.link_establishment_packet], 4);
-
- /* start sending immediately */
-
- ubcsp_config.delay = 0;
-
- /* workout what the next link establishment packet should be */
-
- ubcsp_config.link_establishment_packet = next_le_packet[ubcsp_config.link_establishment_state + ubcsp_config.link_establishment_resp * 4];
-
- /* We have now delt with any response packet that we needed */
-
- ubcsp_config.link_establishment_resp = 0;
-
- return 0;
- }
- }
-
- /* We now need to receive any octets from the UART */
-
- while ((ubcsp_config.receive_packet) && (get_uart (&value)))
- {
- /* If the last octet was SLIP_ESCAPE, then special processing is required */
-
- if (ubcsp_config.receive_slip_escape)
- {
- /* WARNING - out of range values are not detected !!!
- This will probably be caught with the checksum or CRC check */
-
- value = ubcsp_deslip[value - SLIP_ESCAPE_FRAME];
-
- ubcsp_config.receive_slip_escape = 0;
- }
- else
- {
- /* Check for the SLIP_FRAME octet - must be start or end of packet */
- if (value == SLIP_FRAME)
- {
- /* If we had a full header then we have a packet */
-
- if (ubcsp_config.receive_index >= 0)
- {
- /* process the received packet */
-
- *activity |= ubcsp_recevied_packet ();
-
- if (*activity & UBCSP_PACKET_ACK)
- {
- /* We need to ACK this packet, then don't delay its sending */
- ubcsp_config.delay = 0;
- }
- }
-
- /* Setup to receive the next packet */
-
- ubcsp_config.receive_index = -4;
-
- /* Ok, next octet */
-
- goto finished_receive;
- }
- else if (value == SLIP_ESCAPE)
- {
- /* If we receive a SLIP_ESCAPE,
- then remember to process the next special octet */
-
- ubcsp_config.receive_slip_escape = 1;
-
- goto finished_receive;
- }
- }
-
- if (ubcsp_config.receive_index < 0)
- {
- /* We are still receiving the header */
-
- ubcsp_receive_header[ubcsp_config.receive_index + 4] = value;
-
- ubcsp_config.receive_index ++;
- }
- else if (ubcsp_config.receive_index < ubcsp_config.receive_packet->length)
- {
- /* We are receiving the payload */
- /* We might stop coming here if we are receiving a
- packet which is longer than the receive_packet->length
- given by the host */
-
- ubcsp_config.receive_packet->payload[ubcsp_config.receive_index] = value;
-
- ubcsp_config.receive_index ++;
- }
-
-finished_receive:
- {
- }
- }
-
- if (ubcsp_config.delay > 0)
- {
- /* We were delayed so delay some more
- this could be cancelled if we received something */
-
- ubcsp_config.delay --;
- }
- else
- {
- /* We had no delay, so use the delay we just decided to us */
-
- ubcsp_config.delay = delay;
- }
-
- /* Report the current delay to the user */
-
- return ubcsp_config.delay;
-}
diff --git a/tools/ubcsp.h b/tools/ubcsp.h
deleted file mode 100644
index 6a74e9a16..000000000
--- a/tools/ubcsp.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- *
- * BlueZ - Bluetooth protocol stack for Linux
- *
- * Copyright (C) 2000-2005 CSR Ltd.
- *
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef UBCSP_INCLUDE_H
-#define UBCSP_INCLUDE_H
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-/** **/
-/** ubcsp.h **/
-/** **/
-/** MicroBCSP - a very low cost implementation of the BCSP protocol **/
-/** **/
-/*****************************************************************************/
-
-/* If we wish to use CRC's, then change 0 to 1 in the next line */
-#define UBCSP_CRC 1
-
-/* Define some basic types - change these for your architecture */
-typedef unsigned char uint8;
-typedef unsigned short uint16;
-typedef unsigned int uint32;
-typedef signed char int8;
-typedef signed short int16;
-typedef signed int int32;
-
-/* The defines below require a printf function to be available */
-
-/* Do we want to show packet errors in debug output */
-#define SHOW_PACKET_ERRORS 0
-
-/* Do we want to show Link Establishment State transitions in debug output */
-#define SHOW_LE_STATES 0
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_packet **/
-/** **/
-/** This is description of a bcsp packet for the upper layer **/
-/** **/
-/*****************************************************************************/
-
-struct ubcsp_packet
-{
- uint8 channel; /* Which Channel this packet is to/from */
- uint8 reliable; /* Is this packet reliable */
- uint8 use_crc; /* Does this packet use CRC data protection */
- uint16 length; /* What is the length of the payload data */
- uint8 *payload; /* The payload data itself - size of length */
-};
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_configuration **/
-/** **/
-/** This is the main configuration of the ubcsp engine **/
-/** All state variables are stored in this structure **/
-/** **/
-/*****************************************************************************/
-
-enum ubcsp_link_establishment_state
-{
- ubcsp_le_uninitialized,
- ubcsp_le_initialized,
- ubcsp_le_active
-};
-
-enum ubcsp_link_establishment_packet
-{
- ubcsp_le_sync,
- ubcsp_le_sync_resp,
- ubcsp_le_conf,
- ubcsp_le_conf_resp,
- ubcsp_le_none
-};
-
-struct ubcsp_configuration
-{
- uint8 link_establishment_state;
- uint8 link_establishment_resp;
- uint8 link_establishment_packet;
-
- uint8 sequence_number:3;
- uint8 ack_number:3;
- uint8 send_ack;
- struct ubcsp_packet *send_packet;
- struct ubcsp_packet *receive_packet;
-
- uint8 receive_header_checksum;
- uint8 receive_slip_escape;
- int32 receive_index;
-
- uint8 send_header_checksum;
-#ifdef UBCSP_CRC
- uint8 need_send_crc;
- uint16 send_crc;
-#endif
- uint8 send_slip_escape;
-
- uint8 *send_ptr;
- int32 send_size;
- uint8 *next_send_ptr;
- int32 next_send_size;
-
- int8 delay;
-};
-
-/*****************************************************************************/
-/** **/
-/** ubcsp_poll sets activity from an OR of these flags **/
-/** **/
-/*****************************************************************************/
-
-#define UBCSP_PACKET_SENT 0x01
-#define UBCSP_PACKET_RECEIVED 0x02
-#define UBCSP_PEER_RESET 0x04
-#define UBCSP_PACKET_ACK 0x08
-
-/*****************************************************************************/
-/** **/
-/** This is the functional interface for ucbsp **/
-/** **/
-/*****************************************************************************/
-
-void ubcsp_initialize (void);
-void ubcsp_send_packet (struct ubcsp_packet *send_packet);
-void ubcsp_receive_packet (struct ubcsp_packet *receive_packet);
-uint8 ubcsp_poll (uint8 *activity);
-
-/*****************************************************************************/
-/** **/
-/** Slip Escape Values **/
-/** **/
-/*****************************************************************************/
-
-#define SLIP_FRAME 0xC0
-#define SLIP_ESCAPE 0xDB
-#define SLIP_ESCAPE_FRAME 0xDC
-#define SLIP_ESCAPE_ESCAPE 0xDD
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/** **/
-/** These functions need to be linked into your system **/
-/** **/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/** **/
-/** put_uart outputs a single octet over the UART Tx line **/
-/** **/
-/*****************************************************************************/
-
-extern void put_uart (uint8);
-
-/*****************************************************************************/
-/** **/
-/** get_uart receives a single octet over the UART Rx line **/
-/** if no octet is available, then this returns 0 **/
-/** if an octet was read, then this is returned in the argument and **/
-/** the function returns 1 **/
-/** **/
-/*****************************************************************************/
-
-extern uint8 get_uart (uint8 *);
-
-/*****************************************************************************/
-/** **/
-/** These defines should be changed to your systems concept of 100ms **/
-/** **/
-/*****************************************************************************/
-
-#define UBCSP_POLL_TIME_IMMEDIATE 0
-#define UBCSP_POLL_TIME_DELAY 25
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-#endif