mirror of https://github.com/labapart/gattlib
71 lines
2.5 KiB
Markdown
71 lines
2.5 KiB
Markdown
|
GattLib is a library used to access Generic Attribute Profile (GATT) protocol of BLE (Bluetooth Low Energy) devices.
|
||
|
|
||
|
It is based on Bluez 4.101 GATT code (prior to Bluez D-BUS API).
|
||
|
|
||
|
It has been introduced to allow to build applications hosted on platform with a version of Bluez prior to v5.x that could easily communicate with BLE devices.
|
||
|
|
||
|
Potentially, D-BUS API could also be added to GattLib to provide an abstraction layer between different versions of BlueZ.
|
||
|
|
||
|
Build GattLib
|
||
|
=============
|
||
|
|
||
|
```
|
||
|
cd <gattlib-src-root>
|
||
|
mkdir build && cd build
|
||
|
cmake ..
|
||
|
make
|
||
|
```
|
||
|
|
||
|
Package GattLib
|
||
|
===============
|
||
|
|
||
|
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 ..`
|
||
|
|
||
|
Examples
|
||
|
========
|
||
|
|
||
|
* 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
|
||
|
|
||
|
**Note:** `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).
|
||
|
|
||
|
* Notification is also supported. Example:
|
||
|
|
||
|
```
|
||
|
void notification_cb(uint16_t handle, const uint8_t* data, size_t data_length) {
|
||
|
printf("Notification on handle 0x%02x : ", 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(notification_cb);
|
||
|
}
|
||
|
```
|
||
|
|
||
|
TODO List
|
||
|
=========
|
||
|
|
||
|
- Complete `examples/gatttool` port to GattLib to demonstrate the completeness of GattLib.
|
||
|
- Support Bluez v5.x GATT D-BUS API in addition to the current Bluez v4.101 support.
|
||
|
- Remove GLib dependencies to GattLib (mainly replacing GLib IO Channels by Unix Domain Socket).
|