blob: 67fc7248c7635b9769afaecbd66f118869cf5718 [file] [log] [blame]
.. _bluetooth:
Bluetooth
#########
Zephyr comes integrated with a feature-rich and highly configurable
Bluetooth stack:
* Bluetooth 5.0 compliant (ESR10)
* Bluetooth Low Energy Controller support (LE Link Layer)
* BLE 5.0 compliant
* Unlimited role and connection count, all roles supported
* Concurrent multi-protocol support ready
* Intelligent scheduling of roles to minimize overlap
* Portable design to any open BLE radio, currently supports Nordic
Semiconductor nRF51 and nRF52
* Generic Access Profile (GAP) with all possible LE roles
* Peripheral & Central
* Observer & Broadcaster
* GATT (Generic Attribute Profile)
* Server (to be a sensor)
* Client (to connect to sensors)
* Pairing support, including the Secure Connections feature from Bluetooth 4.2
* IPSP/6LoWPAN for IPv6 connectivity over Bluetooth LE
* IPSP node sample application in ``samples/bluetooth/ipsp``
* Basic Bluetooth BR/EDR (Classic) support
* Generic Access Profile (GAP)
* Logical Link Control and Adaptation Protocol (L2CAP)
* Serial Port emulation (RFCOMM protocol)
* Service Discovery Protocol (SDP)
* Clean HCI driver abstraction
* 3-Wire (H:5) & 5-Wire (H:4) UART
* SPI
* Local controller support as a virtual HCI driver
* Raw HCI interface to run Zephyr as a Controller instead of a full Host stack
* Possible to export HCI over a physical transport
* ``samples/bluetooth/hci_uart`` sample for HCI over UART
* ``samples/bluetooth/hci_usb`` sample for HCI over USB
* Verified with multiple popular controllers
* Highly configurable
* Features, buffer sizes/counts, stack sizes, etc.
Source tree layout
******************
The stack is split up as follows in the source tree:
``subsys/bluetooth/host``
The host stack. This is where the HCI command & event handling
as well as connection tracking happens. The implementation of the
core protocols such as L2CAP, ATT & SMP is also here.
``subsys/bluetooth/controller``
Bluetooth Controller implementation. Implements the controller-side of
HCI, the Link Layer as well as access to the radio transceiver.
``include/bluetooth/``
Public API header files. These are the header files applications need
to include in order to use Bluetooth functionality.
``drivers/bluetooth/``
HCI transport drivers. Every HCI transport needs its own driver. E.g.
the two common types of UART transport protocols (3-Wire & 5-Wire)
have their own drivers.
``samples/bluetooth/``
Sample Bluetooth code. This is a good reference to get started with
Bluetooth application development.
``tests/bluetooth/``
Test applications. These applications are used to verify the
functionality of the Bluetooth stack, but are not necessary the best
source for sample code (see ``samples/bluetooth`` instead).
``doc/subsystems/bluetooth/``
Extra documentation, such as PICS documents.
Further reading
***************
More information on the stack and its usage can be found
:ref:`here <bluetooth_firmware_arduino_101>` and in the following subsections:
.. toctree::
:maxdepth: 1
../../api/bluetooth.rst
devel.rst
qualification.rst