Android fornisce uno stack Bluetooth predefinito che supporta sia Bluetooth classico che Bluetooth Low Energy. Utilizzando il Bluetooth, i dispositivi Android possono creare reti personali per inviare e ricevere dati con i dispositivi Bluetooth vicini.
In Android 4.3 e versioni successive, lo stack Bluetooth Android offre la possibilità di implementare Bluetooth Low Energy (BLE). Per sfruttare appieno le API BLE, seguire i requisiti HCI Bluetooth Android . I dispositivi Android con un chipset qualificato possono implementare il Bluetooth classico o sia il Bluetooth classico che BLE. BLE non è retrocompatibile con i vecchi chipset Bluetooth.
In Android 8.0, lo stack Bluetooth nativo è completamente qualificato per Bluetooth 5. Per utilizzare le funzionalità Bluetooth 5 disponibili, il dispositivo deve disporre di un chipset qualificato Bluetooth 5.
Architettura Android
Un'applicazione Bluetooth comunica con il processo Bluetooth tramite Binder. Il processo Bluetooth utilizza JNI per comunicare con lo stack Bluetooth e fornisce agli sviluppatori l'accesso a vari profili Bluetooth. Questo diagramma mostra la struttura generale dello stack Bluetooth:
- Quadro applicativo
- A livello del framework dell'applicazione c'è il codice dell'applicazione, che utilizza le API android.bluetooth per interagire con l'hardware Bluetooth. Internamente, questo codice chiama il processo Bluetooth tramite il meccanismo Binder IPC.
- Applicazione Bluetooth
- L'applicazione Bluetooth, situata in
packages/modules/Bluetooth/android/app
, è confezionata come un'app Android e implementa i profili Bluetooth a livello del framework Android. Questa app effettua chiamate allo stack Bluetooth nativo tramite JNI. - JNI
- Il codice JNI associato ad android.bluetooth si trova in
packages/modules/Bluetooth/android/app/jni
. Il codice JNI effettua chiamate nello stack Bluetooth quando si verificano determinate operazioni Bluetooth, ad esempio quando vengono rilevati i dispositivi. - Pila Bluetooth
- Lo stack Bluetooth predefinito è fornito in AOSP e si trova in
packages/modules/Bluetooth/system
. Lo stack implementa l'HAL Bluetooth generico e lo personalizza con estensioni e modifiche alla configurazione. - Implementazione del fornitore
- I dispositivi del fornitore interagiscono con lo stack Bluetooth utilizzando l'HIDL (Hardware Interface Design Language).
HIDL
HIDL definisce l'interfaccia tra lo stack Bluetooth e l'implementazione del fornitore. Per generare i file HIDL Bluetooth, passare i file dell'interfaccia Bluetooth allo strumento di generazione HIDL. I file di interfaccia si trovano in hardware/interfaces/bluetooth
.
Sviluppo dello stack Bluetooth
Lo stack Bluetooth Android è uno stack Bluetooth completo. L'elenco delle qualifiche si trova sul sito Web Bluetooth SIG sotto QDID 169365 .
Lo stack Bluetooth principale risiede in packages/modules/Bluetooth
. Lo sviluppo avviene in AOSP e i contributi sono benvenuti.
Android 7.x e architettura precedente
Un servizio di sistema Bluetooth comunica con lo stack Bluetooth tramite JNI e con le applicazioni tramite Binder IPC. Il servizio di sistema fornisce agli sviluppatori l'accesso a vari profili Bluetooth. Questo diagramma mostra la struttura generale dello stack Bluetooth:
- Quadro applicativo
- A livello del framework dell'applicazione c'è il codice dell'applicazione, che utilizza le API android.bluetooth per interagire con l'hardware Bluetooth. Internamente, questo codice richiama il processo Bluetooth tramite il meccanismo Binder IPC.
- Servizio di sistema Bluetooth
- Il servizio di sistema Bluetooth, situato in
packages/apps/Bluetooth
, è confezionato come un'app Android e implementa il servizio e i profili Bluetooth a livello del framework Android. Questa app richiama il livello HAL tramite JNI. - JNI
- Il codice JNI associato ad android.bluetooth si trova in
packages/apps/Bluetooth/jni
. Il codice JNI effettua chiamate al livello HAL e riceve richiamate dall'HAL quando si verificano determinate operazioni Bluetooth, ad esempio quando vengono rilevati i dispositivi. - HAL
- Il livello di astrazione hardware definisce l'interfaccia standard a cui chiamano le API android.bluetooth e il processo Bluetooth e che devi implementare per far funzionare correttamente l'hardware Bluetooth. Il file di intestazione per l'HAL Bluetooth è
hardware/libhardware/include/hardware/bluetooth.h
. Inoltre, rivedere tutti i filehardware/libhardware/include/hardware/bt_*.h
. - Pila Bluetooth
- Lo stack Bluetooth predefinito viene fornito e si trova in
system/bt
. Lo stack implementa l'HAL Bluetooth generico e lo personalizza con estensioni e modifiche alla configurazione. - Estensioni del fornitore
- Per aggiungere estensioni personalizzate e un livello HCI per la traccia, puoi creare un modulo libbt-vendor e specificare questi componenti.
Implementazione dell'HAL
L'HAL Bluetooth si trova in /hardware/libhardware/include/hardware/bluetooth.h
. Il file bluetooth.h
contiene l'interfaccia di base per lo stack Bluetooth ed è necessario implementarne le funzioni.
I file specifici del profilo si trovano nella stessa directory. Per i dettagli, vedere il riferimento al file HAL .