
Android fornisce uno stack Bluetooth predefinito che supporta sia Bluetooth Classic che Bluetooth Low Energy. Utilizzando il Bluetooth, i dispositivi Android possono creare reti personali per inviare e ricevere dati con i dispositivi Bluetooth nelle vicinanze.
In Android 4.3 e versioni successive, lo stack Bluetooth Android offre la possibilità di implementare Bluetooth Low Energy (BLE). Per utilizzare completamente le API BLE, segui i requisiti HCI Bluetooth di Android. I dispositivi Android con un chipset qualificato possono implementare Bluetooth Classic o sia Bluetooth Classic che BLE. BLE non è compatibile con i chipset Bluetooth precedenti.
In Android 8.0, lo stack Bluetooth è 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'app 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:
Figura 1. Architettura Bluetooth di Android.
- framework dell'app
-
A livello di framework dell'app si trova il codice dell'app, che utilizza le
android.bluetooth
API per interagire con l'hardware Bluetooth. Internamente, questo codice chiama il processo Bluetooth tramite il meccanismo IPC Binder. - App Bluetooth
-
L'app Bluetooth, che si trova in
packages/modules/Bluetooth/android/app
, è inclusa come app per Android e implementa i profili Bluetooth a livello di framework Android. Questa app chiama lo stack Bluetooth tramite JNI. - JNI
-
Il codice JNI associato ad android.bluetooth si trova in
packages/modules/Bluetooth/android/app/jni
. Il codice JNI chiama lo stack Bluetooth quando si verificano determinate operazioni Bluetooth, ad esempio quando vengono rilevati i dispositivi. - Stack 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 Hardware Interface Design Language (HIDL).
HIDL
HIDL definisce l'interfaccia tra lo
stack Bluetooth e l'implementazione del fornitore. Per generare i file HIDL Bluetooth, passa i file
dell'interfaccia Bluetooth allo strumento di generazione HIDL. I file dell'interfaccia si trovano in
hardware/interfaces/bluetooth
.
Sviluppo dello stack Bluetooth
Lo stack Bluetooth Android è uno stack Bluetooth completamente qualificato. L'elenco delle qualifiche è disponibile sul sito web di Bluetooth SIG nella sezione QDID 169365.
Lo stack Bluetooth principale si trova in
packages/modules/Bluetooth
. Lo sviluppo avviene in AOSP e i contributi sono ben accetti.
Architettura di Android 7.x e versioni precedenti
Un servizio di sistema Bluetooth comunica con lo stack Bluetooth tramite JNI e con le app 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:
Figura 2. Architettura Bluetooth di Android 7.x e versioni precedenti.
- framework dell'app
-
A livello di framework dell'app si trova il codice dell'app, che utilizza le
android.bluetooth
API per interagire con l'hardware Bluetooth. Internamente, questo codice chiama il processo Bluetooth tramite il meccanismo IPC Binder. - Servizio di sistema Bluetooth
-
Il servizio di sistema Bluetooth, che si trova in
packages/apps/Bluetooth
, è incluso come app per Android e implementa il servizio e i profili Bluetooth a livello di framework Android. Questa app chiama il livello HAL tramite JNI. - JNI
-
Il codice JNI associato a
android.bluetooth
si trova in
packages/apps/Bluetooth/jni
. Il codice JNI chiama il livello HAL e riceve callback da HAL quando si verificano determinate operazioni Bluetooth, ad esempio quando vengono rilevati dispositivi. - HAL
-
L'HAL (Hardware Abstraction Layer) definisce l'interfaccia standard che le API
android.bluetooth
e la chiamata di procedura Bluetooth utilizzano e che devi implementare per il corretto funzionamento dell'hardware Bluetooth. Il file di intestazione per l'HAL Bluetooth è
hardware/libhardware/include/hardware/bluetooth.h
. Inoltre, rivedi tutti i filehardware/libhardware/include/hardware/bt_*.h
. - Stack 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 fornitore
- Per aggiungere estensioni personalizzate e un livello HCI per la tracciabilità, puoi creare un modulo libbt-vendor e specificare questi componenti.
Implementare l'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 e devi
implementarne le funzioni.
I file specifici del profilo si trovano nella stessa directory. Per maggiori dettagli, consulta il Riferimento al file HAL.