Bluetooth subsystem

= Building =

Build samples

$ make -C samples/bluetooth/<app>

= Bluetooth Sample application =

Host Bluetooth controller is connected to the second qemu serial line
through a UNIX socket (qemu option -serial unix:/tmp/bt-server-bredr).
This option is already added to qemu through QEMU_EXTRA_FLAGS in Makefile.

On the host side BlueZ allows to "connect" Bluetooth controller through
a so-called user channel. Use the btproxy tool for that:

$ sudo tools/btproxy -u
Listening on /tmp/bt-server-bredr

Note that before calling btproxy make sure that Bluetooth controller is down.

Now running qemu result connecting second serial line to 'bt-server-bredr'
UNIX socket. When Bluetooth (CONFIG_BLUETOOTH) and Bluetooth HCI UART driver
(CONFIG_BLUETOOTH_H4) are enabled, Bluetooth driver registers to the system.
From now on Bluetooth might be used by the application. To run application in
the qemu run:

$ make qemu

= Bluetooth sanity check =

There is smoke test application in nanokernel and microkernel test
directories which gets run in sanity check script:

$ scripts/sanity_chk/sanitycheck [-P <platform>]

To only run Bluetooth tests use the -t bluetooth switch:

$ scripts/sanity_chk/sanitycheck -t bluetooth

= Summary of available applications =

beacon:
        A simple application demonstrating the BLE Broadcaster role
        functionality by advertising an Eddystone URL (the Zephyr
        website).

central:
        Application demonstrating very basic BLE Central role
        functionality by scanning for other BLE devices and establishing
        a connection to the first one with a strong enough signal.

central_hr:
        Similar to 'central', except that this application specifically
        looks for heart-rate monitors and reports the heart-rate
        readings once connected.

eddystone:
        Application demostrating Eddystone Configuration Service:
        https://github.com/google/eddystone/tree/master/configuration-service

gatt:
        Not an application, but a set of reusable modules for common
        GATT profiles & services.

ipsp:
        Application demonstrating the IPSP (Internet Protocol Support
        Profile) Node role. IPSP is the Bluetooth profile that
        underneath utilizes 6LoWPAN, i.e. gives you IPv6 connectivity
        over BLE.

peripheral:
        Application demonstrating the BLE Peripheral role. It has
        several well-known and vendor-specific GATT services that it
        exposes.

peripheral_csc:
        Similar to 'peripheral', except that this application
        specifically exposes the CSC (Cycling Speed and Cadence)
        GATT Service.

peripheral_dis:
        Similar to 'peripheral', except that this application
        specifically exposes the DIS (Device Information) GATT Service.

peripheral_esp:
        Similar to 'peripheral', except that this application
        specifically exposes the ESP (Environmental Sensing Profile)
        GATT Service.

peripheral_hr:
        Similar to 'peripheral', except that this application
        specifically exposes the HR (Heart Rate) GATT Service. Once a
        device connects it will generate dummy heart-rate values.
