GattLib is a library used to access Generic Attribute Profile (GATT) protocol of BLE (Bluetooth Low Energy) devices. It has been introduced to allow to build applications that could easily communicate with BLE devices.
It supports Bluez v4 and v5.
The latest release can be found here. It contains:
Prebuilt Debian, RPM and ZIP packages for x86_64 and Bluez v5.x
Packages for ARM 32bit and 64bit would have to be built by the developer - see section Package GattLib.
Prebuilt Python packages are available on Pypi repository.
libbluetooth-dev
, libreadline-dev
.sudo apt install libbluetooth-dev libreadline-dev
cd <gattlib-src-root>
mkdir build && cd build
cmake ..
make
mkdir build && cd build
cmake -DBLUEZ_VERSION=5.50 ..
make
-DGATTLIB_FORCE_DBUS=TRUE
:mkdir build && cd build
cmake -DGATTLIB_FORCE_DBUS=TRUE ..
make
To cross-compile GattLib, you must provide the following environment variables:
CROSS_COMPILE
: prefix of your cross-compile toolchainSYSROOT
: an existing system root that contains the libraries and include files required by your applicationExample:
cd <gattlib-src-root>
mkdir build && cd build
export CROSS_COMPILE=~/Toolchains/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
export SYSROOT=~/Distributions/debian-wheezy
cmake ..
make
From the build directory: cpack ..
Note: It generates DEB, RPM and ZIP packages. Ensure you have the expected dependencies
installed on your system (eg: to generate RPM package on Debian-based Linux distribution
you must have rpm
package installed).
Default install directory is defined as /usr by CPack variable CPACK_PACKAGE_INSTALL_DIRECTORY
.
To change the install directory to /usr/local
run: cpack -DCPACK_PACKAGE_INSTALL_DIRECTORY=/usr/local ..
Demonstrate discovering of primary services and characteristics:
./examples/discover/discover 78:A5:04:22:45:4F
Demonstrate characteristic read/write:
./examples/read_write/read_write 78:A5:04:22:45:4F read 00002a29-0000-1000-8000-00805f9b34fb
./examples/read_write/read_write 78:A5:04:22:45:4F write 00002a6b-0000-1000-8000-00805f9b34fb 0x1234
Demonstrate BLE scanning and connection:
./examples/ble_scan/ble_scan
Demonstrate GATT notification using GATT Battery service:
./examples/notification/notification
Demonstrate GATT Write Without Response:
./examples/nordic_uart/nordic_uart
Note 1: The example 'read/write mem' is similar to the example 'read/write' except a GLib loop is used to allows the memory to be freed by Glib. Without this loop, some memory could be locked.
Note 2: examples/gatttool
has been partially ported to gattlib. There are two reasons: the laziness
(some of the GATT functions could be replaced by their gattlib equivalent) and the completeness (there
are still some missing functions in gattlib).
void notification_cb(uint16_t handle, const uint8_t* data, size_t data_length, void* user_data) {
printf("Notification on handle 0x%02x\n", handle);
}
main() {
uint16_t status_handle; // Handle of the 'status' characteristic
uint16_t enable_notification = 0x0001;
// Enable Status Notification
gattlib_write_char_by_handle(connection, status_handle + 1, &enable_notification, sizeof(enable_notification));
// Register notification handler
gattlib_register_notification(connection, notification_cb, NULL);
}
examples/gatttool
port to GattLib to demonstrate the completeness of GattLib.Gattlib with Bluez Legacy support (for Bluez v4) has a GPL v2.0 or later license.
While Gattlib for recent version of Bluez (v5.40+) has a BSD-3-Clause license - except dbus/bluez5/lib/uuid.c
and dbus/bluez5/lib/uuid.h
that have a GPL v2.0 or later license.
Commercial Support can be obtained through Lab A Part. Please contact us: https://labapart.com/about/.