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
  • Bluetooth Mesh support
    • Relay, Friend Node, Low-Power Node (LPN) and GATT Proxy features
    • Both Provisioning bearers supported (PB-ADV & PB-GATT)
    • Highly configurable, fits as small as 16k RAM devices
  • 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:

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.
Bluetooth Controller implementation. Implements the controller-side of HCI, the Link Layer as well as access to the radio transceiver.
Public API header files. These are the header files applications need to include in order to use Bluetooth functionality.
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.
Sample Bluetooth code. This is a good reference to get started with Bluetooth application development.
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).
Extra documentation, such as PICS documents.

Further reading

More information on the stack and its usage can be found here and in the following subsections: