Zephyr HCI Extensions
*********************


Introduction
============

This document describes a set of vendor specific HCI commands and events for
Zephyr based Bluetooth Classic and Low Energy controllers.


Zephyr Vendor Configuration Parameters
======================================


Zephyr Vendor Supported Commands
================================

The Supported Commands configuration parameter lists which vendor commands the
local Controller supports. It is implied that if a command is listed as
supported, the feature underlying that command is also supported.

The Supported Commands is a 64 octet bit field. If a bit is set to 1, then this
command is supported.

	+-------+------+--------------------------------------------+
	| Octet | Bit  | Command Supported                          |
	+-------+------+--------------------------------------------+
	| 0     | 0    | Read Version Information                   |
	|       | 1    | Read Supported Commands                    |
	|       | 2    | Read Supported Features                    |
	|       | 3    | Set Event Mask                             |
	|       | 4    | Reset                                      |
	|       | 5    | Write BD_ADDR                              |
	|       | 6    | Set Trace Enable                           |
	|       | 7    | Read Build Information                     |
	+-------+------+--------------------------------------------+
	| 1     | 0    | Read Static Addresses                      |
	|       | 1    | Read Key Hierarchy Roots                   |
	|       | 2    | Read Chip Temperature                      |
	|       | 3    | Read Host Stack Commands                   |
	|       | 4    | Set Scan Request Reports                   |
	|       | 5    | Write Tx Power Level (per Role/Connection) |
	|       | 6    | Read Tx Power Level (per Role/Connection)  |
	|       | 7    | Read USB Supported Transport Modes         |
	+-------+------+--------------------------------------------+
	| 2     | 0    | Set USB Transport Mode                     |
	+-------+------+--------------------------------------------+

Only Read_Version_Information and Read_Supported_Commands commands are
mandatory.


Zephyr Vendor Supported Features
================================

The Supported Features configuration parameter lists vendor specific features
that either extend commands or don't have a vendor command. Most features are
indicated by the support its respective vendor command. The Supported Features
are represented as an 8 octet bit mask. For each feature a single bit is
specified which shall be set to 1 if the feature is supported and set to 0
otherwise.

	+-------+------+--------------------------------------------+
	| Octet | Bit  | Feature Supported                          |
	+-------+------+--------------------------------------------+
	| 0     | 0    | Vendor Diagnostic Channel                  |
	|       | 1    | Reserved                                   |
	|       | 2    | Reserved                                   |
	|       | 3    | Reserved                                   |
	|       | 4    | Reserved                                   |
	|       | 5    | Reserved                                   |
	|       | 6    | Reserved                                   |
	|       | 7    | Reserved                                   |
	+-------+------+--------------------------------------------+


Zephyr Vendor Event Mask
========================

The Event Mask configuration parameter lists the events that are indicated by
the controller. By default no vendor events are reported.

	+-------+------+--------------------------------------------+
	| Octet | Bit  | Event                                      |
	+-------+------+--------------------------------------------+
	| 0     | 0    | Reserved                                   |
	|       | 1    | Fatal Error                                |
	|       | 2    | Trace Information Event                    |
	|       | 3    | Scan Request Received Event                |
	|       | 4    | Reserved                                   |
	|       | 5    | Reserved                                   |
	|       | 6    | Reserved                                   |
	|       | 7    | Reserved                                   |
	+-------+------+--------------------------------------------+

The support for Fatal_Error event is mandatory. The default event mask after
bootup and vendor specific Reset command includes the Fatal_Error event.


Zephyr Hardware Platforms
=========================

Hardware platforms are assigned numbers to allow identification of the hardware
manufacturer.

	Hardware_Platform:                             Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x0001             | Intel Corporation                    |
	| 0x0002             | Nordic Semiconductor                 |
	| 0x0003             | NXP Semiconductors                   |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

The Hardware_Platform name is independent from the Manufacture Name provided
by HCI version information. This information identifies the actual chip while
the standard HCI version information identifies the unique implementation of
a Bluetooth Controller.


Zephyr Hardware Variants
========================

Hardware variants are platform specific. They are specified to allow detailed
identification of the hardware running Zephyr.

	Hardware_Variant (Nordic):                     Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x0001             | nRF51x                               |
	| 0x0002             | nRF52x                               |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

The Hardware_Variant value assignment depends on the Hardware_Platform value.
Each hardware platform has its own variant namespace.


Zephyr Trace Information Format
===============================

The trace information used the Trace Information event and in the Diagnostic
Channel are following the same packet format.

0              8             16             24
+--------------+--------------+--------------+--------------+
| Type         | Connection_Handle           | Parameters
+--------------+--------------+--------------+--------------+


Zephyr Vendor Commands
======================

Vendor specific HCI commands use the OGF 0x3F. All defined OCF are listed
below. Undefined OCF are reserved for future use.


Zephyr Read Version Information Command
=======================================

This command reads the values for the vendor version information for the local
Controller.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Version_Information | 0x001 |                    | Status,            |
|                          |       |                    | Hardware_Platform, |
|                          |       |                    | Hardware_Variant,  |
|                          |       |                    | Firmware_Variant,  |
|                          |       |                    | Firmware_Version,  |
|                          |       |                    | Firmware_Revision, |
|                          |       |                    | Firmware_Build     |
+--------------------------+-------+--------------------+--------------------+

The Hardware_Platform information defines the hardware manufacturer
information. The Hardware_Variant is manufacturer specific and defines the
hardware platform from that manufacturer.

The Firmware_Variant defines the type of firmware. It is possible to provide
HCI firmware with limited functionality for example for bootloader operation.
The Firmware_Version and Firmware_Revision define version information of the
Firmware_Variant that is currently active. The Firmware_Build defines an
additional counter for incremental builds.

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Hardware_Platform:                             Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXX             | Assigned hardware manufacturer       |
	+--------------------+--------------------------------------+

	Hardware_Variant:                              Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXX             | Assigned platform specific value     |
	+--------------------+--------------------------------------+

	Firmware_Variant:                               Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Standard Bluetooth controller        |
	| 0x01               | Vendor specific controller           |
	| 0x02               | Firmware loader                      |
	| 0x03               | Rescue image                         |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

	Firmware_Version:                               Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXX               | Implementation specific              |
	+--------------------+--------------------------------------+

	Firmware_Revision:                             Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXX             | Implementation specific              |
	+--------------------+--------------------------------------+

	Firmware_Build:                                Size: 4 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXXXXXX         | Implementation specific              |
	+--------------------+--------------------------------------+

When the Read_Version_Information command has completed, a Command Complete
event shall be generated.


Zephyr Read Supported Commands Command
======================================

This command reads the list of vendor commands supported for the local
Controller.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Supported_Commands  | 0x002 |                    | Status,            |
|                          |       |                    | Supported_Commands |
+--------------------------+-------+--------------------+--------------------+

This command shall return the Supported_Commands configuration parameter. It is
implied that if a command is listed as supported, the feature underlying that
command is also supported.

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Supported_Commands:                           Size: 64 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | Bit mask for each vendor command     |
	|                    |                                      |
	|                    | If a bit is 1, the Controller        |
	|                    | supports the corresponding command   |
	|                    | and the features required for the    |
	|                    | command, unsupported or undefined    |
	|                    | commands shall be set to 0           |
	+--------------------+--------------------------------------+

When the Read_Supported_Commands command has completed, a Command Complete
event shall be generated.


Zephyr Read Supported Features Command
======================================

This command reads the list of vendor features supported by the local Controller.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Supported_Features  | 0x003 |                    | Status,            |
|                          |       |                    | Supported_Features |
+--------------------------+-------+--------------------+--------------------+

This command shall return the Supported_Features configuration parameter. The
features list is only used for features not covered by supported commands.

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Supported_Features:                            Size: 8 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXXXXXXXXXXXXXX | Bit Mask List of vendor features     |
	+--------------------+--------------------------------------+

When the Read_Supported_Features command has completed, a Command Complete
event shall be generated.


Zephyr Set Event Mask Command
=============================

This command is used to control which vendor events are generated by the HCI
for the Host.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Set_Event_Mask           | 0x004 | Event_Mask         | Status             |
+--------------------------+-------+--------------------+--------------------+

If the bit in the Event_Mask is set to a one, then the event associated with
that bit will be enabled. The Host has to deal with each event that is
generated by a Controller. The event mask allows the Host to control which
events will interrupt it.

The vendor specific Reset command shall reset this event mask back to its
default value, but the standard HCI Reset command shall not reset this command
back to its default value.

	Event_Mask:                                    Size: 8 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x0000000000000003 | Default enabled vendor events        |
	| 0xXXXXXXXXXXXXXXXX | Bit Mask List of vendor events       |
	+--------------------+--------------------------------------+

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

When the Set_Event_Mask command has completed, a Command Complete event shall
be generated.


Zephyr Reset Command
====================

This command resets the vendor portion of the local Controller.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Reset                    | 0x005 | Reset_Type         | Status             |
+--------------------------+-------+--------------------+--------------------+

The Host shall not send additional HCI commands before the Command Complete
event related to the Reset command has been received.

The Soft reset and Hard reset both include all actions taken by the standard
HCI Reset command. While the standard HCI Reset command does not reset any
vendor specific settings, this command will reset everything back to defaults.

The Hard reset will cause a full reboot of the hardware.

	Reset_Type:                                     Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Soft reset                           |
	| 0x01               | Hard reset                           |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

When the Reset command has completed, a Command Complete event shall be
generated.


Zephyr Write BD_ADDR Command
============================

This command writes the BD_ADDR (Bluetooth public device address) value
to the volatile memory. It is kept over Reset and can be read out by
Read_BD_ADDR command.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Write_BD_ADDR            | 0x006 | BD_ADDR            | Status             |
+--------------------------+-------+--------------------+--------------------+

To activate this address the standard HCI Reset command is required to be
executed. Until then the current BD_ADDR is still active and reported by
Read_BD_ADDR. The vendor specific Reset command will reset the BD_ADDR to its
non-volatile default if available. Otherwise the BD_ADDR shall be reset to the
invalid / non-existent 00:00:00:00:00:00 address value.

	BD_ADDR:                                       Size: 6 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXXXXXXXXXX     | BD_ADDR of the Device                |
	+--------------------+--------------------------------------+

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

When the Write_BD_ADDR command has completed, a Command Complete event shall
be generated.


Zephyr Set Trace Enable Command
===============================

This command is used to enable or disable the tracing functionality.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Set_Trace_Enable         | 0x007 | Enable,            | Status             |
|                          |       | Type               |                    |
+--------------------------+-------+--------------------+--------------------+

When enabled the Controller will send link layer and link manager tracing
information to the Host.

When Enable is set to 0x00 then Type shall be set to 0x00 as well. The
diagnostic channel type shall only supported when the feature bit is also set.

The support for trace information reporting via HCI events is mandatory to
support when the Set_Trace_Enable command is supported.

	Enable:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Tracing disabled                     |
	| 0x01               | Tracing enabled                      |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

	Type:                                           Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Use HCI events                       |
	| 0x01               | Use Vendor Diagnostic Channel        |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

When the Set_Trace_Enable command has completed, a Command Complete event shall
be generated.


Zephyr Read Build Information Command
=====================================

This commands reads the controller firmware build information string.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Build_Information   | 0x008 |                    | Status,            |
|                          |       |                    | Build_Info         |
+--------------------------+-------+--------------------+--------------------+

This command shall return the build information encoded as an UTF-8 string.

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Build_Info:                                    Size: variable
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | UTF-8 encoded build information      |
	+--------------------+--------------------------------------+

When the Read_Build_Information command has completed, a Command Complete
event shall be generated.


Zephyr Read Static Addresses Command
====================================

This commands reads the controller specific static addresses.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Static_Addresses    | 0x009 |                    | Status,            |
|                          |       |                    | Num_Addresses,     |
|                          |       |                    | Static_Address[i], |
|                          |       |                    | Identity_Root[i]   |
+--------------------------+-------+--------------------+--------------------+

This command shall return the static addresses programmed by the vendor at
manufacturing time.

Each returned static address shall confirm to the Static Device Address
definition. The two most significant bits of the address shall be equal to 1.
At least one bit of the random part of the address shall be 0. At least one bit
of the random part of the address shall be 1.

The Identity_Root parameter may be all zeros to indicate no identity root key
being available for a given static address. The identity root key returned from
Read_Key_Hierarchy_Roots command shall not be returned from this command.

Note: If no public address is provided and a static address is available, then
it is recommended to return an identity root key (if available) from this
command. In case a public address is provided, then it is recommended to use
the Read_Key_Hierarchy_Roots command to return the identity root key (if only
one is available).

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Num_Addresses:                                  Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXX               | Number of static device addresses    |
	+--------------------+--------------------------------------+

	Static_Address[i]:                             Size: 6 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXXXXXXXXXX     | Static device address                |
	+--------------------+--------------------------------------+

	Identity_Root[i]:                             Size: 16 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | Identity root key (IR) for static    |
	|                    | device address                       |
	|                    |                                      |
	|                    | All zero parameter value indicates   |
	|                    | missing identity root key.           |
	+--------------------+--------------------------------------+

When the Read_Static_Addresses command has completed, a Command Complete event
shall be generated.


Zephyr Read Key Hierarchy Roots Command
=======================================

This commands reads the controller specific identify and encryption root keys.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Key_Hierarchy_Roots | 0x00A |                    | Status,            |
|                          |       |                    | Identity_Root,     |
|                          |       |                    | Encryption_Root    |
+--------------------------+-------+--------------------+--------------------+

This command shall return the identity root key and encryption root key
programmed by the vendor at manufacturing time. If a key is set to all zeros,
then the associated key is not available and it should not be used in the key
hierarchy.

The identity root key and encryption root key may be used for the controllers
public device address or a static random address generated by the host. It
shall not be used for static addresses returned by Read_Static_Addresses
command that have its dedicated identity root key assigned.

Note: For addresses returned by Read_Static_Addresses with an all zeros
identity root key, the returned Identity_Root value may be used. It is however
important that it only gets assigned to a single address (either public or
static random).

Note: The Encryption_Root parameter is only useful for Legacy Pairing. In case
of Secure Connections it can not be used. The parameter is provided here for
completeness, but it is encouraged that Controller implementations set this
value to all zeros.

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Identity_Root:                                Size: 16 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | Identity root key (IR)               |
	+--------------------+--------------------------------------+

	Encryption_Root:                              Size: 16 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | Encryption root key (ER)             |
	+--------------------+--------------------------------------+

When the Read_Key_Hierarchy_Roots command has completed, a Command Complete
event shall be generated.


Zephyr Read Chip Temperature Command
====================================

This commands reads the controller chip temperature.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Chip_Temperature    | 0x00B |                    | Status,            |
|                          |       |                    | Temperature        |
+--------------------------+-------+--------------------+--------------------+

This command shall return the current chip temperature in degrees Celsius.

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Temperature:                                    Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | The measured temperature converted   |
	|                    | to degrees Celsius (signed integer)  |
	|                    | Range: -128 ≤ N ≤ 127                |
	+--------------------+--------------------------------------+

When the Read_Chip_Temperature command has completed, a Command Complete event
shall be generated.


Zephyr Read Host Stack Commands Command
=======================================

This command reads the list of host stack operation system defined vendor
commands supported for the local Controller.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Host_Stack_Commands | 0x00C |                    | Status,            |
|                          |       |                    | Num_Commands,      |
|                          |       |                    | Vendor_ID[i],      |
|                          |       |                    | Opcode_Base[i]     |
+--------------------------+-------+--------------------+--------------------+

This command shall return the list of host stack operation defined vendor
commands. They are defined based on a vendor identifier and a base opcode.

With this command it is possible to incorporate external defined HCI commands
designed for host stack operation that extend the standard and vendor specific
Controller commands. See Android [1][2] and Microsoft [3] defined extensions.

The Opcode_Base parameter points to an opcode that will identify the external
command set. Ideally all external commands are multiplexed through that single
opcode and also define a flexible interface for external events.

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Num_Commands:                                   Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXX               | Total number of commands             |
	+--------------------+--------------------------------------+

	Vendor_ID[i]:                                  Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x0001             | Android specific HCI commands        |
	| 0x0002             | Microsoft specific HCI commands      |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

	Opcode_Base[i]:                                Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXX             | Base opcode of command               |
	+--------------------+--------------------------------------+

When the Read_Host_Stack_Commands command has completed, a Command Complete
event shall be generated.


Zephyr Set Scan Request Reports Command
=======================================

This commands configures the report of Scan_Request_Received events.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Set_Scan_Request_Reports | 0x00D | Enable             | Status             |
+--------------------------+-------+--------------------+--------------------+

The Enable parameter indicates with the Controller shall send the
Scan_Request_Received event upon receipt of a scan request PDU that is in an
response to an advertisement from the specified advertising set that contains
its device address and is from a scanner that is allowed by the advertising
filter policy.

Note: In case Extended Advertising configuration is used for setting up
advertising sets, this shall not generate any vendor events.

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Enable:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Scan request reporting disabled      |
	| 0x01               | Scan request reporting enabled       |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

When the Set_Scan_Request_Reports command has completed, a Command Complete
event shall be generated.


Zephyr Write Tx Power Level (per Role/Connection) Command
=========================================================

This command dynamically modifies BLE Tx power level given a handle and a
handle type (advertiser, scanner, connection).

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Write_Tx_Power_Level     | 0x00E | Handle_Type,       | Status,            |
|                          |       | Handle,            | Handle_Type,       |
|                          |       | Tx_Power_Level     | Handle,            |
|                          |       |                    | Selected_Tx_Power  |
+--------------------------+-------+--------------------+--------------------+

The Tx power of the BLE radio interface is modified for any low-level link by
the controller with a high degree of flexibility. The BLE link whose power is
set is identified based on a handle type (advertiser, scanner, connection) and
handle pair.

The role/state defining input parameter is the Handle_Type, whereas its
corresponding handle is provided by the Handle input parameter. Note that
for Advertisements, the Handle input parameter is ignored in the case that
Advertising Extensions are not configured, whereas Advertising Sets are to be
identified by their corresponding Handle in case Advertising Extensions are
enabled.

The desired transmitter power level for the selected link instance is inputted
as Tx_Power_Level. The power setup and control can be performed dynamically
without the need of restarting the advertiser and scanner role/states. In case
of connections, the Tx power changes take effect only if the connections are
in a connected state.

The inputs Handle_Type and Handle are passed through as outputs to aid the
asynchronous service of the command as well. In addition, the command returns
also with the Selected_Tx_Power by the controller which addresses and corrects
the possible mismatches between the desired Tx_Power_Level and the achievable
Tx powers given each individual controller capabilities.

	Handle_Type:                                    Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Handle of type Advertiser (Adv)      |
	| 0x01               | Handle of type Scanner (Scan)        |
	| 0x02               | Handle of type Connection (Conn)     |
	| 0x03-0xFF          | Reserved (HCI command error)         |
	+--------------------+--------------------------------------+

	Handle:                                        Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | Handle of the selected Handle_Type   |
	|                    | that identifies the instance to set  |
	|                    | the power of. See below for a        |
	|                    | description corresponding to each    |
	|                    | Handle_Type                          |
	|                    |                                      |
	|                    | Handle_Type_Adv:                     |
	| 0x0000 - 0xFFFF    |     Legacy Advertisement Handle      |
	|                    |     (Handle value is ignored)        |
	| 0x0000 - 0x00EF    |     Advertisement Extensions (AE)    |
	|                    |     enabled Advertisement set        |
	|                    |     Handle                           |
	|                    |                                      |
	|                    | Handle_Type_Scan:                    |
	| 0x0000 - 0xFFFF    |     Scanner Handle (Handle value is  |
	|                    |     ignored)                         |
	|                    |                                      |
	|                    | Handle_Type_Conn:                    |
	| 0x0000 - 0x0EFF    |     Connection Handle                |
	+--------------------+--------------------------------------+

	Tx_Power_Level:                                 Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| -127 <= N <= 126   | The desired Tx_Power_Level in signed |
	|                    | 1 octet integer format to be set to  |
	|                    | the Handle_Type and Handle pair. The |
	|                    | controller  shall choose a power     |
	|                    | level lower than or equal to the one |
	|                    | specified by the host unless the host|
	|                    | desired power is lower than the      |
	|                    | minimum supported Tx power of the    |
	|                    | controller, in which case the        |
	|                    | controller shall use its minimum Tx  |
	|                    | power.                               |
	|                    | Units: dBm                           |
	|                    |                                      |
	| 127                | No preference for the Tx_Power_Level,|
	|                    | the controller shall revert to using |
	|                    | its default setting for Tx power.    |
	+--------------------+--------------------------------------+

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Selected_Tx_Power:                              Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| -127 <= N <= 126   | The controller selected Tx power to  |
	|                    | set for the given Handle_Type and    |
	|                    | and pair formatted as a 1 octet      |
	|                    | signed integer. The controller shall |
	|                    | not modify this transmit power unless|
	|                    | it is directed to do so by the Host. |
	|                    | Units: dBm                           |
	+--------------------+--------------------------------------+

When the Write_Tx_Power_Level command has completed, a Command Complete
event shall be generated.


Zephyr Read Tx Power Level (per Role/Connection) Command
========================================================

This command reads the BLE Tx power level. In contrast to the standardized HCI
command, i.e. Read_Transmit_Power_Level, which returns the transmitted power
level only for a specified connection handle, this command operates for both
connected and unconnected states. It gets the BLE Tx power level for any given
handle type (advertiser, scanner, connection) and handle.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_Tx_Power_Level      | 0x00F | Handle_Type,       | Status,            |
|                          |       | Handle             | Handle_Type,       |
|                          |       |                    | Handle,            |
|                          |       |                    | Tx_Power_Level     |
+--------------------------+-------+--------------------+--------------------+

The Tx power of the BLE radio interface used for a low-level link identified
by a pair of Handle_Type and Handle is retrieved from the controller.

The role/state defining input parameter is the Handle_Type, whereas its
corresponding handle is provided by the Handle input parameter. Note that
for Advertisements, the Handle input parameter is ignored in the case that
Advertising Extensions are not configured, whereas Advertising Sets are to be
identified by their corresponding Handle in case Advertising Extensions are
enabled.

The command returns with an operational Status, and the replicated Handle_Type
and Handle input parameters supplemented by the current Tx_Power_Level in use
by the controller for the requested Handle_Type and Handle.

	Handle_Type:                                    Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Handle of type Advertiser (Adv)      |
	| 0x01               | Handle of type Scanner (Scan)        |
	| 0x02               | Handle of type Connection (Conn)     |
	| 0x03-0xFF          | Reserved (HCI command error)         |
	+--------------------+--------------------------------------+

	Handle:                                        Size: 2 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | Handle of the selected Handle_Type   |
	|                    | that identifies the instance to read |
	|                    | the power of. See below for a        |
	|                    | description corresponding to each    |
	|                    | Handle_Type                          |
	|                    |                                      |
	|                    | Handle_Type_Adv:                     |
	| 0x0000 - 0xFFFF    |     Legacy Advertisement Handle      |
	|                    |     (Handle value is ignored)        |
	| 0x0000 - 0x00EF    |     Advertisement Extensions (AE)    |
	|                    |     enabled Advertisement set        |
	|                    |     Handle                           |
	|                    |                                      |
	|                    | Handle_Type_Scan:                    |
	| 0x0000 - 0xFFFF    |     Scanner Handle (Handle value is  |
	|                    |     ignored)                         |
	|                    |                                      |
	|                    |                                      |
	|                    | Handle_Type_Conn:                    |
	| 0x0000 - 0x0EFF    |     Connection Handle                |
	+--------------------+--------------------------------------+

	Status:                                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Command succeeded                    |
	| 0x01-0xFF          | Command failed                       |
	+--------------------+--------------------------------------+

	Tx_Power_Level:                                 Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| -127 <= N <= 126   | The current Tx_Power_Level formatted |
	|                    | as a 1 octet signed integer at which |
	|                    | the controller is operating the      |
	|                    | low-level link identified by the     |
	|                    | Handle_Type and Handle pair.         |
	|                    | Units: dBm                           |
	+--------------------+--------------------------------------+

When the Read_Tx_Power_Level command has completed, a Command Complete
event shall be generated.

Zephyr Read Supported USB Transport Modes Command
=================================================

This command read the supported USB transport modes.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Read_USB_Transport_Modes | 0x010 |                    | Status             |
|                          |       |                    | Num_Supported_Modes|
|                          |       |                    | Supported_Mode[i]  |
+--------------------------+-------+--------------------+--------------------+

	Supported_Mode:                                 Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | USB standard (H:2) transport mode.   |
	|                    | Standard mode which use dedicated    |
	|                    | endpoints for commands, events and   |
	|                    | data.                                |
	| 0x01               | Serial (H:4) transport mode.         |
	|                    | Serialize all traffic into bulk      |
	|                    | endpoints.                           |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

When the Read_USB_Transport_Mode command has completed, a Command Complete
event shall be generated.

Zephyr Set USB Transport Mode Command
=====================================

This command set the host transport mode and reset the controller states like
an HCI Reset command.

+--------------------------+-------+--------------------+--------------------+
| Command                  | OCF   | Command            | Return             |
|                          |       | Parameters         | Parameters         |
+--------------------------+-------+--------------------+--------------------+
| Set_USB_Transport_Mode   | 0x011 | Mode               | Status             |
+--------------------------+-------+--------------------+--------------------+

When the Set_USB_Transport_Mode command has completed, a Command Complete
event shall be generated.

Zephyr Vendor Events
====================

The Vendor Event is used to encapsulate all vendor specific events. The event
code of all vendor events shall be 0xFF. The subevent code is the first octet
of the event parameters. The subevent code shall be set to one of the valid
subevent codes from a vendor specific event. All other subevent parameters are
defined in the vendor specific events.


Zephyr Fatal Error
==================

This event reports a fatal non-recoverable error from the local Controller.

+-------------------------------+------------+-------------------------------+
| Event                         | Event Code | Event Parameters              |
+-------------------------------+------------+-------------------------------+
| Fatal_Error                   | 0xFF       | Subevent_Code,                |
|                               |            | Program_Counter,              |
|                               |            | Error_Info                    |
+-------------------------------+------------+-------------------------------+

The Error_Info provides a string representation of the occurred error. It may
include information like file name and line numbers.

	Subevent_Code:                                  Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x02               | Subevent code for Fatal Error event  |
	+--------------------+--------------------------------------+

	Program_Counter:                               Size: 8 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXXXXXXXXXXXXXX | Program counter where the error      |
	|                    | occurred                             |
	+--------------------+--------------------------------------+

	Error_Info:                                    Size: variable
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | UTF-8 encoded error information      |
	+--------------------+--------------------------------------+

The event is reported by default unless masked away by Set_Event_Mask command.


Zephyr Trace Information Event
==============================

This event reports the link manager and link layer trace information.

+-------------------------------+------------+-------------------------------+
| Event                         | Event Code | Event Parameters              |
+-------------------------------+------------+-------------------------------+
| Trace_Information             | 0xFF       | Subevent_Code,                |
|                               |            | Trace_Type,                   |
|                               |            | Trace_Data                    |
+-------------------------------+------------+-------------------------------+

The trace type provides information about the link manager protocol or link
layer control protocol direction information. The trace data is the specific to
the trace type and represents the protocol specific data.

	Subevent_Code:                                  Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x03               | Subevent code for Trace Information  |
	|                    | event                                |
	+--------------------+--------------------------------------+

	Trace_Type:                                     Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x01               | LMP TX                               |
	| 0x02               | LMP RX                               |
	| 0x03               | LLCP TX                              |
	| 0x04               | LLCP RX                              |
	| 0x05               | LE CONN_IND                          |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

	Trace_Data:                                    Size: variable
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	|                    | Trace packet data                    |
	+--------------------+--------------------------------------+

The event is only reported when unmasked by Set_Event_Mask command.


Zephyr Scan Request Received Event
==================================

This event indicates that a SCAN_REQ PDU has been received by an advertiser.

+-------------------------------+------------+-------------------------------+
| Event                         | Event Code | Event Parameters              |
+-------------------------------+------------+-------------------------------+
| Scan_Request_Received         | 0xFF       | Subevent_Code,                |
|                               |            | Address_Type,                 |
|                               |            | Address,                      |
|                               |            | RSSI                          |
+-------------------------------+------------+-------------------------------+

The request contains a device address from a scanner that is allowed by the
advertising filter policy.

Note: In case Extended Advertising configuration is used for setting up
advertising sets, this event shall not be generated.

	Subevent_Code:                                  Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x04               | Subevent code for Scan Request       |
	|                    | Received event                       |
	+--------------------+--------------------------------------+

	Address_Type:                                   Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Public Device Address                |
	| 0x01               | Random Device Address                |
	| 0x02               | Public Identity Address              |
	| 0x03               | Random (static) Identity Address     |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

	Address:                                       Size: 6 Octets
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXXXXXXXXXXXX     | Public Device Address, Random Device |
	|                    | Address, Public Identity Address or  |
	|                    | Random (static) Identity Address of  |
	|                    | the advertising device.              |
	+--------------------+--------------------------------------+

	RSSI:                                           Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| N                  | Size: 1 Octet (signed integer)       |
	|                    | Range: -127 <= N <= +20              |
	|                    | Units: dBm                           |
	+--------------------+--------------------------------------+
	| 127                | RSSI is not available                |
	+--------------------+--------------------------------------+
	| 21 to 126          | Reserved for future use              |
	+--------------------+--------------------------------------+

The event is only reported when unmasked by Set_Event_Mask command.


Zephyr Vendor Diagnostic Channel
================================

The vendor diagnostic channel allows for an independent side channel to provide
extra information from the local Controller to the Host.

0              8             16             24
+--------------+--------------+--------------+--------------+
| Channel Code | Parameter    | Channel Parameters
|              | Total Length |
+--------------+--------------+--------------+--------------+

The diagnostic channel provides multiplexing of diagnostic information based on
a channel code. The channel parameters content depends on the channel code.

	Channel_Code:                                   Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0x00               | Trace Information                    |
	| TBD                | Debug information                    |
	| All other values   | Reserved for future use              |
	+--------------------+--------------------------------------+

	Parameter_Total_Length:                         Size: 1 Octet
	+--------------------+--------------------------------------+
	| Value              | Parameter Description                |
	+--------------------+--------------------------------------+
	| 0xXX               | Length of all of the parameters      |
	|                    | contained in this packet, measured   |
	|                    | in octets                            |
	+--------------------+--------------------------------------+

For UART transport (H:4) the type 0xFF shall be used. For USB transport (H:2)
an extra USB endpoint shall be used.


References
==========

[1] https://source.android.com/devices/Android-5.0-Bluetooth-HCI-Reqs.pdf
[2] https://source.android.com/devices/Android-6.0-Bluetooth-HCI-Reqs.pdf
[3] https://msdn.microsoft.com/en-us/library/windows/hardware/dn917903.aspx
