2015-06-12 15 views
5

Con l'ultima versione di BlueZ (5.30) l'evidenziazione è stata il completamento degli apis GATT D-Bus. Il mio obiettivo è quello di programmazione (in C), come un client BLE:BlueZ 5.30: API GATT D-Bus - Scoperta e connessione semplice a un dispositivo BLE in C

  1. scansione per dispositivi ble (che posso fare con lo strato di HCI)
  2. Connettersi a una pubblicità dispositivo BLE
  3. I UUID
  4. eseguire leggere e scrivere le maniglie

la comunità BlueZ è fortemente suggerendo di utilizzare l'API GATT-dbus per raggiungere questo obiettivo. Dopo ricerche multiple e grattacapo non sono riuscito a trovare un modo corretto o un esempio che avrebbe funzionato attraverso l'API di GATT-DBU. Sembra più complicato di usare direttamente il livello GATT. Sfortunatamente BlueZ ha rimosso l'accesso diretto per effettuare chiamate a gatt.

Sono molto vicino a estrarre i file di origine GATT da Bluez, compilarlo come se fosse una libreria indipendente e utilizzare direttamente il livello GATT e le chiamate per connettere ed eseguire le letture/scritture sul server del dispositivo. So che non è il modo consigliato rispetto all'API DBUS-GATT, ma ho esaurito le opzioni.

Se qualcuno ha qualche input su questo o suggerimento (con qualche codice di esempio) si prega di avvisare.

grazie in anticipo!

risposta

5

Il modo migliore per iniziare con DBUS GATT API è quello di hace uno sguardo al codice sorgente qui: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/

Sotto client cartella è possibile trovare un esempio completo di come utilizzare l'API DBUS GATT. In realtà questa è la fonte dello strumento bluetoothctl.

Si noti che DBUS GATT API è ancora sperimentale ma è possibile abilitarlo eseguendo il servizio bluetoothd con il flag -E.

+0

Accordo sperimentale è per questo che sto discutendo il percorso di estrazione del codice sorgente GATT e chiamando direttamente quel livello invece di passare attraverso la rotta DBUS. – s2c97

+0

In questo caso, tutto ciò che serve è qui: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/attrib –

+0

Da quale versione di BlueZ è stata estratta? – s2c97

2

Avevo un problema simile che è quello di interagire con un dispositivo BLE con un'API GATT C/C++.

Nel mio caso ho dovuto utilizzare Bluez v4.101 - l'ultima versione di Bluez disponibile in Ubuntu 14.04 LTS (read my story). In Bluez v4.x non è presente l'API DBus.
E in realtà, ho recentemente collaborato con Bluez v5 DBus API e ho scoperto che se non si utilizza almeno Bluez v5.39 (da aprile 2016) è probabile che si verifichi un problema con l'API DBus. E come detto prima, l'API DBus è ancora sperimentale.

Quindi per risolvere la mia dipendenza da Bluez v4.x ho dovuto estrarre i file sorgente GATT da Bluez e creare la mia libreria 'gattlib'. Il progetto è Open-Source per incoraggiare feedback e contributi. Sto usando questa libreria nel mio progetto client GATT. Ho scritto alcuni esempi per aiutare le persone a iniziare a usarlo vedere la cartella /examples del progetto.

EDIT Marzo 2017: Ho appena aggiunto il supporto DBus a gattlib (https://github.com/labapart/gattlib/). Da Bluez v5.42, gattlib utilizza automaticamente l'API DBus (il backend gattlib DBus può anche essere forzato quando si costruisce la libreria per usarlo prima della v5.42).

+2

Potresti descrivere il problema riscontrato con la versione 5.39 di BlueZ 5? Ubuntu 16.04 LTS viene spedito con 5.37 ... –

+0

Sei in grado di connetterti simultaneamente a più dispositivi – abhiarora

+2

"Ho appena aggiunto il supporto DBus a gattlib" È fantastico. – abhiarora

1

Per chi fosse interessato, un altro indipendente BlueZ D-Bus GATT del server/libreria per C è appena apparso:

https://github.com/nettlep/gobbledegook

Penso che abbia alcune caratteristiche interessanti che permette di creare servizi piuttosto semplici (full disclosure: Sono l'autore.)

Problemi correlati