2012-07-05 3 views
7
  • Stiamo cercando di rilevare un evento in C/C++.
  • Usiamo Bluez su Linux come libreria Bluetooth.
  • Il nostro obiettivo è eseguire uno script esterno quando viene attivato quell'evento.
  • In particolare, abbiamo un auricolare Motorola H730, con un pulsante su di esso, e stiamo cercando di rilevare la pressione di tale pulsante.
  • Abbiamo associato il dispositivo bluetooth (hcitool) e ci possiamo connettere ad esso (bluez-test-audio), ma saremmo interessati a migrare tale approccio a C/C++.
  • L'uscita hcidump quando il dispositivo è collegato e viene premuto il pulsante è:Bluetooth: Rileva evento utilizzando Bluez

    HCI ventosa - Bluetooth analizzatore di pacchetti ver 2.2
    dispositivo: hci0 snap_len 1028 filtro: 0xffffffff

    HCI evento: Cambia modalità (0x14) plen 6
    stato 0x00 gestiscono 21 modalità intervallo 0x00 0
    modo: attivo dati
    ACL: gestire 21 bandiere 0x02 dlen 17
    L2CAP (d): cid 0x0041 len 13 [PSM 0]
    < ACL dati: maniglia 21 flags 0x00 dlen 14
    L2CAP (d): cid 0x0047 len 10 [PSM 0]
    < ACL dati: maniglia 21 flags 0x00 dlen 22
    L2CAP (d): cid 0x0047 len 18 [PSM 0] dati
    < ACL: ansa 21 flags 0x00 dlen 22
    L2CAP (d): cid 0x0047 len 18 [PSM 0]
    HCI evento : Numero di pacchetti completati (0x13) plen 5
    handle 21 pacchetti 1
    dati 10 ACL: ansa 21 flags 0x02 dlen 18
    L2CAP (d): cid 0x0041 len 14 [PSM 0]
    < ACL dati: maniglia 21 flags 0x00 dlen 14
    L2CAP (d): cid 0x0047 len 10 [psm 0]
    HCI evento: numero di pacchetti completata (0x13) plen 5
    maniglia 21 pacchetti 1
    HCI evento: Numero di pacchetti completati (0x13) Plen 5
    impugnatura 21 pacchetti 1
    HCI evento: Numero Completato pacchetti (0x13) Plen 5
    maniglia 21 pacchetti 1
    HCI evento: Cambia modalità (0x14) plen 6
    stato 0x00 gestiscono 21 modalità intervallo 0x02 Modo 2048
    : Sniff

  • Abbiamo cercato la documentazione bluetooth e non hanno avuto molto successo.
    Come possiamo rilevare un evento bluetooth in C/C++ usando Bluez?
+0

Hai avuto successo? – Schrieveslaach

risposta

0

hcidump come raccolti sono i registri tra l'host del dispositivo e il controller. Gli eventi sono quelli che il controller ha inviato all'host del dispositivo e i comandi sono le richieste/risposte invia all'host del dispositivo.

Bluez guida di programmazione: http://people.csail.mit.edu/albert/bluez-intro/

1

ho fatto qualcosa di simile l'anno scorso. L'approccio che ho scelto è stato quello di utilizzare libdbus-c++ per generare oggetti/classi proxy C++ per comunicare con bluez via dbus.

  • Determinare le interfacce Bluetooth implementate dall'auricolare. Ho usato d-feet e ho esplorato il dispositivo quando è stato collegato. È possibile controllare manualmente e leggere lo stato dall'auricolare qui, questo è stato utile per il debug.
  • Generare, trovare o creare le descrizioni dbus xml delle interfacce richieste. L'ho fatto manualmente traducendo le specifiche API da bluez api documentation a xml, ma credo che potresti anche crearle con dbus introspection.
  • Usa dbusxx-xml2cpp per generare proxy di oggetti
  • Determinare il callback che viene chiamata quando viene premuto il pulsante
  • Integrare gli oggetti nel vostro codice proxy come richiesto

Sarà necessario collegare il codice per libdbus- C++ e installarlo anche sul target.

È possibile utilizzare gli oggetti proxy generati per accedere a tutte le funzionalità dell'auricolare, potrebbe rivelarsi utile per molto più di una semplice pressione di un pulsante!