2010 was a busy year for BlueZ developers. In the first day of the new year I decided to write my first post in the BlueZ blog to provide initial guidance to everyone interested on Low Energy support in BlueZ. The Low Energy support is on heavy development, so feel free to report bugs and contribute.
There are three major pieces:
- BLE controller abstraction
- Attribute protocol
- Security Manager
Our goal is to hide BLE technology details from the applications. BlueZ will expose the same interface for device discovery operations, meaning that the applications do not need to know the hardware capabilities/features. BlueZ will use the same abstraction(D-Bus signals) to report found devices and services. Internally, BlueZ will manage the interleaved BLE scanning and BR/EDR inquiry.
The logic to “create” a device is still the same, an application needs to call StartDiscovery() to find the MAC address and call CreateDevice or CreatePairedDevice to “create” the device representation. bluetoothd identifies the remote type based on the advertising data and triggers the SDP or GATT primary service discovery.
ATT(Attribute Protocol) is a very simple protocol to discover/exchange characteristics. GATT is basically procedures descriptions of how ATT should be used to discover services and read/write characteristics. ATT can be considered transport agnostic, we implemented GATT/ATT first over BR/EDR due the BLE hardware unavailability, extend to BLE was just a minor surgery in the BlueZ code. Nowadays, both are supported, the BlueZ attribute server/client supports both transports, there are some restrictions in the Bluetooth Specification to avoid interoperability problems, some of them are already implemented in BlueZ but minor hacks in the code allows anyone to test ATT/GATT over BR/EDR.
Security Manager: Only Just Works method is supported at the moment. LE kernel is not in the bluetooth-next tree yet.
It is available at: git.infradead.org/users/vcgomes/linux-2.6.git
Issues that still open:
- Random address support
- GATT server API
- Register Application API
- Better connection management
- Characteristic descriptors
More issues can be found in the TODO file(BlueZ source)
What is currently implemented:
- Attribute server example
- gatttool: command line tool to run common GATT procedures
- Generic Attribute Client: over BR/EDR and LE
- General Discovery Procedure: interleaved discovery
- Just works method for Security Manager
Contributions are welcome!
Happy New Year!