zephyr/samples/bluetooth
Johan Hedberg c3e08c8fea net: buf: Redesigned pool & buffer allocation API
Until now it has been necessary to separately define a k_fifo and
an array of buffers when creating net_buf pools. This has been a bit
of an inconvenience as well as blurred the line of what exactly
constitutes the "pool".

This patch removes the NET_BUF_POOL() macro and replaces it with a
NET_BUF_POOL_DEFINE() macro that internally expands into the buffer
array and new net_buf_pool struct with a given name:

	NET_BUF_POOL_DEFINE(pool_name, ...);

Having a dedicated context struct for the pool has the added benefit
that we can start moving there net_buf members that have the same
value for all buffers from the same pool. The first such member that
gets moved is the destroy callback, thus shrinking net_buf by four
bytes. Another potential candidate is the user_data_size, however
right not that's left out since it would just leave 2 bytes of padding
in net_buf (i.e. not influence its size). Another common value is
buf->size, however that one is also used by net_buf_simple and can
therefore not be moved.

This patch also splits getting buffers from a FIFO and allocating a
new buffer from a pool into two separate APIs: net_buf_get and
net_buf_alloc, thus simplifying the APIs and their usage. There is no
separate 'reserve_head' parameter anymore when allocating, rather the
user is expected to call net_buf_reserve() afterwards if something
else than 0 headroom is desired.

Change-Id: Id91b1e5c2be2deb1274dde47f5edebfe29af383a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-12-13 21:41:53 +00:00
..
beacon Bluetooth: Kconfig: Restructure for a more logical hierarchy 2016-11-11 07:59:15 +02:00
central Bluetooth: Kconfig: Restructure for a more logical hierarchy 2016-11-11 07:59:15 +02:00
central_hr Bluetooth: samples: Fix use of deprecated sleep API 2016-11-11 07:59:15 +02:00
eddystone Bluetooth: Use convenience macros for timeout durations 2016-11-18 07:47:50 +02:00
gatt Bluetooth: GATT: Pass CCC attribute to changed callback 2016-10-21 07:47:31 +03:00
handsfree Bluetooth: samples: Fix use of deprecated sleep API 2016-11-11 07:59:15 +02:00
hci_uart net: buf: Redesigned pool & buffer allocation API 2016-12-13 21:41:53 +00:00
hci_usb net: buf: Redesigned pool & buffer allocation API 2016-12-13 21:41:53 +00:00
ipsp net: Remove legacy Contiki based uIP stack 2016-12-02 12:41:17 +02:00
peripheral Bluetooth: samples: Fix use of deprecated sleep API 2016-11-11 07:59:15 +02:00
peripheral_csc Bluetooth: samples: Fix use of deprecated sleep API 2016-11-11 07:59:15 +02:00
peripheral_dis Bluetooth: Kconfig: Restructure for a more logical hierarchy 2016-11-11 07:59:15 +02:00
peripheral_esp Bluetooth: samples: Fix use of deprecated sleep API 2016-11-11 07:59:15 +02:00
peripheral_hids Bluetooth: Kconfig: Restructure for a more logical hierarchy 2016-11-11 07:59:15 +02:00
peripheral_hr Bluetooth: samples: Fix use of deprecated sleep API 2016-11-11 07:59:15 +02:00
peripheral_sc_only Bluetooth: Kconfig: Restructure for a more logical hierarchy 2016-11-11 07:59:15 +02:00
README Bluetooth: samples: Use consistent naming for HCI apps 2016-11-09 08:57:52 +02:00

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 tests directory 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.

hci_uart:
	Expose Zephyr Bluetooth Controller support over UART to another
	device/CPU using the H:4 HCI transport protocol (requires HW
	flow control from the UART).

hci_usb:
	Make a USB Bluetooth dongle out of Zephyr. Requires USB device
	support from the board it runs on (e.g. Arduino 101 has this).

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.

peripheral_hids:
        Similar to 'peripheral', except that this application
        specifically exposes the HID GATT Service. The report map used
	is for a generic mouse.