This is an old revision of the document!
Table of Contents
Bluetooth
There are two standards in use known as BT classic and BT low energy.
Anything other than BLE is considered obsolete now.
HCI / LMP | Version |
---|---|
0 | 1.0b |
1 | 1.1 |
2 | 1.2 |
3 | 2.0+EDR |
4 | 2.1+EDR |
5 | 3.0+HS |
6 | 4.0 |
7 | 4.1 |
8 | 4.2 |
9 | 5.0 |
10 | 5.1 |
11 | 5.2 |
12 | 5.3 |
BT 3.0+HS utilises WiFi. BT 4.0 onward is BLE, anything prior is BDR/EDR.
See bluetooth for Linux Bluetooth devices and setup.
Services
Development has two services dependencies, dbus and bluetoothd.
DBUS
I normally disable dbus with systemd and here is how to enable this service with `runit' if preferred.
#!/bin/bash sleep 1 #LOG exec 2>&1 ulimit -aH #RUN export TZ="UTC" rm -Rf /var/run/dbus mkdir -p /var/run/dbus exec dbus-daemon --syslog --syslog-only --nofork --config-file=/usr/share/dbus-1/system.conf
BLUETOOTHD
Install bluez and various tools if not already installed
apt install bluez bluez-tools bluez-test-tools bluez-hcidump
I prefer to run Bluetoothd from `runit'
This run file can work but it should wait until dbus is ready before starting.
See the wait method of runit to detect /var/run/dbus/pid.
#!/bin/bash sleep 5 #LOG exec 2>&1 ulimit -aH #RUN export TZ="UTC" exec /usr/sbin/bluetoothd -n
C development
Development in C is mostly about reading the code examples.
Headers
Install dev headers for the current installation of bluez
apt install libbluetooth-dev
Source
Access source code for documentation of how to use bluez
git clone https://github.com/bluez/bluez
bluez source code demonstrates how to access BT devices via dbus in the src directory or the API in the attrib and tools directories.
Build
Build the source to create tools
sudo apt-get install glib2.0-dev libdbus-1-dev libical-dev python3-docutils ./bootstrap ./configure --prefix=/opt/bt --enable-experimental --enable-deprecated
Test
Test BLE device.
./tools/btgatt-client -d 00:80:E1:22:F9:7C Connecting to device... Done [GATT client]# Service Added - UUID: 00001801-0000-1000-8000-00805f9b34fb start: 0x0001 end: 0x0004 [GATT client]# Service Added - UUID: 00001800-0000-1000-8000-00805f9b34fb start: 0x0005 end: 0x000b [GATT client]# Service Added - UUID: 0000fe40-cc7a-482a-984a-7f2ed5b3e58f start: 0x000c end: 0x0011 [GATT client]# GATT discovery procedures complete [GATT client]# service - start: 0x0001, end: 0x0004, type: primary, uuid: 00001801-0000-1000-8000-00805f9b34fb charac - start: 0x0002, value: 0x0003, props: 0x20, ext_props: 0x0000, uuid: 00002a05-0000-1000-8000-00805f9b34fb descr - handle: 0x0004, uuid: 00002902-0000-1000-8000-00805f9b34fb service - start: 0x0005, end: 0x000b, type: primary, uuid: 00001800-0000-1000-8000-00805f9b34fb charac - start: 0x0006, value: 0x0007, props: 0x0a, ext_props: 0x0000, uuid: 00002a00-0000-1000-8000-00805f9b34fb charac - start: 0x0008, value: 0x0009, props: 0x02, ext_props: 0x0000, uuid: 00002a01-0000-1000-8000-00805f9b34fb charac - start: 0x000a, value: 0x000b, props: 0x02, ext_props: 0x0000, uuid: 00002a04-0000-1000-8000-00805f9b34fb service - start: 0x000c, end: 0x0011, type: primary, uuid: 0000fe40-cc7a-482a-984a-7f2ed5b3e58f charac - start: 0x000d, value: 0x000e, props: 0x06, ext_props: 0x0000, uuid: 0000fe41-8e22-4541-9d4c-21edae82ed19 charac - start: 0x000f, value: 0x0010, props: 0x10, ext_props: 0x0000, uuid: 0000fe42-8e22-4541-9d4c-21edae82ed19 descr - handle: 0x0011, uuid: 00002902-0000-1000-8000-00805f9b34fb [GATT client]# ^C Shutting down...
Python
apt install python3-gattlib
This doesn't appear to work with the STM32WB p2pServer demo so no further to make at this time.