2015-02-03 15 views
5

Ho un sistema integrato che esegue un server GATT a cui sto cercando di connettermi tramite Android. L'attività è semplice: connettersi al server GATT, navigare caratteristiche e convalidare capacità di lettura/scrittura. Il problema è quando provo a connettermi con un'app Android, esso tenta di accoppiare con una "Passkey" anziché con "Just Works" [https://developer.bluetooth.org/TechnologyOverview/Pages/LE-Security.aspx]. Questo non è accettabile in quanto il mio dispositivo incorporato non ha alcun metodo per visualizzare una chiave per l'utente da utilizzare per l'associazione. Quindi il metodo di connessione deve essere Just Works.Come forzare l'accoppiamento Bluetooth LE "Funziona solo" Pairing in Android

Ho provato numerose app dal Play Store e tutte tentano solo l'accoppiamento con Passkey. Ma questo è l'attuale con cui sto lavorando: https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner

Ho questo funzionamento utilizzando l'applicazione LightBlue (supportato in OS X e iOS). Quindi so che la mia periferica (server GATT) funziona: pubblicità, collegabile, caratteristica accessibile, ecc.

Come impongo ad Android di utilizzare Just Works anziché l'abbinamento Passkey? C'è una configurazione periferica che mi manca?

Grazie

+1

Durante la fase di autenticazione Bluetooth, il dispositivo incorporato deve pubblicizzare una capacità IO appropriata. In particolare dovrebbe probabilmente essere la pubblicità di NoInpiutOutput. Come farlo dipende da ciò che stai utilizzando sul tuo sistema embedded. Se per esempio si usa Linux, l'agente fornito con bluez può essere eseguito così: test-agent -c NoInputNoOutput – kaylum

+0

@kaylum Che cos'è ** test-agent **, è un comando? –

+1

@Igentore test di IgorGanapolsky è il codice agente di esempio fornito con bluez. È stato rinominato 'simple-agent'. Codice sorgente [qui] (https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test/simple-agent) – kaylum

risposta

3

la radice del problema è stata la modalità l'interfaccia di Linux era in. Dispositivi Bluetooth che supportano sia BR/EDR (Classic) e LE di default sono in dual-mode. Cioè, possono funzionare come un dispositivo classico o LE. Non ho informazioni sull'API di Android e non ho tentato di sviluppare un'app Android in grado di rilevare un dispositivo dual-mode e scegliere di connettermi come LE utilizzando l'associazione Just Working. Ma sono stato in grado di disabilitare BR/EDR sull'interfaccia e convalidare Android rilevato durante la scansione come interfaccia solo LE (single-mode). L'app per Android si collegava quindi perfettamente con l'associazione Just Working.

ecco come lo disabile BR/EDR sull'interfaccia:

$ sudo hciconfig hci0 down 
$ sudo ./btmgmt bredr off 
hci0 Set BR/EDR complete, settings: connectable bondable le 
$ sudo hciconfig hci0 up 
$ sudo hciconfig hci0 leadv 

È possibile costruire l'applicazione btmgmt in Linux, scaricando e costruendo Bluez. L'applicazione btmgmt è costruita in modo condizionale sul parametro di configurazione --enable-experimental.

UPDATE: altro approccio è invece di modificare le capacità di interfaccia, basta modificare le funzionalità dell'interfaccia trasmessi. Questo viene fatto attraverso le bandiere pubblicitarie. Modificare i flag per trasmettere che BR/EDR non è supportato. Questo è il bit 2 e creerebbe una flag broadcast di 0x04. (Vedere Bluetooth SIG doc CSS v4: Parte A, Sezione 1.3.2)

+0

Felice che tu abbia funzionato. Ma non sono sicuro che la spiegazione abbia un senso. Perché il classico bluetooth supporta anche Just Works Pairing. Sembra che forse il problema sia stato spostato piuttosto che risolto. – kaylum

+1

Non si tratta di BR/EDR che supporta Just Works. Sto lavorando con le app Android del Play Store che sono predefinite sull'associazione Passkey. L'unico modo per farli funzionare è se l'interfaccia è in modalità singola (solo LE). È probabile che sia possibile controllarlo con l'API di Android poiché non ho gli stessi problemi con le app iOS. Ma sono stato solo incaricato del lato embedded delle cose. E siccome questo sarà un dispositivo LE-only.Ha senso pubblicizzare che BR/EDR non è supportato. – linsek

+0

Con "Modifica dei flag per trasmettere che BR/EDR non è supportato", intendevi modificarli sul dispositivo remoto o su Android? Era questa correzione sul lato Android? – GPS

Problemi correlati