
Android proporciona una pila de Bluetooth predeterminada que admite tanto Bluetooth clásico como Bluetooth de bajo consumo. Con Bluetooth, los dispositivos Android pueden crear redes de área personal para enviar y recibir datos con dispositivos Bluetooth cercanos.
En Android 4.3 y versiones posteriores, la pila de Bluetooth de Android proporciona la capacidad de implementar Bluetooth de bajo consumo (BLE). Para usar las APIs de BLE por completo, sigue los Requisitos de HCI de Bluetooth para Android. Los dispositivos Android con un chipset calificado pueden implementar Bluetooth clásico o Bluetooth clásico y BLE. El BLE no es retrocompatible con los chipsets de Bluetooth más antiguos.
En Android 8.0, la pila de Bluetooth está completamente calificada para Bluetooth 5. Para usar las funciones disponibles de Bluetooth 5, el dispositivo debe tener un chipset calificado para Bluetooth 5.
Arquitectura de Android
Una app de Bluetooth se comunica con el proceso de Bluetooth a través de Binder. El proceso de Bluetooth usa JNI para comunicarse con la pila de Bluetooth y proporciona a los desarrolladores acceso a varios perfiles de Bluetooth. En este diagrama, se muestra la estructura general de la pila de Bluetooth:
Figura 1: Arquitectura de Bluetooth de Android
- Marco de trabajo de la app
-
A nivel del framework de la app, se encuentra el código de la app, que usa las APIs de
android.bluetooth
para interactuar con el hardware de Bluetooth. Internamente, este código llama al proceso de Bluetooth a través del mecanismo de IPC de Binder. - App de Bluetooth
-
La app de Bluetooth, ubicada en
packages/modules/Bluetooth/android/app
, se empaqueta como una app para Android y, además, implementa los perfiles de Bluetooth en la capa del framework de Android. Esta app llama a la pila de Bluetooth a través de JNI. - JNI
-
El código JNI asociado con android.bluetooth se encuentra en
packages/modules/Bluetooth/android/app/jni
. El código JNI llama a la pila de Bluetooth cuando se producen ciertas operaciones de Bluetooth, como cuando se detectan dispositivos. - Pila de Bluetooth
-
La pila de Bluetooth predeterminada se proporciona en el AOSP y se encuentra en
packages/modules/Bluetooth/system
. La pila implementa el HAL genérico de Bluetooth y lo personaliza con extensiones y cambios de configuración. - Implementación del proveedor
- Los dispositivos del proveedor interactúan con la pila de Bluetooth a través del lenguaje de diseño de interfaz de hardware (HIDL).
HIDL
HIDL define la interfaz entre la pila de Bluetooth y la implementación del proveedor. Para generar los archivos HIDL de Bluetooth, pasa los archivos de interfaz de Bluetooth a la herramienta de generación de HIDL. Los archivos de interfaz se encuentran en hardware/interfaces/bluetooth
.
Desarrollo de la pila de Bluetooth
La pila Bluetooth de Android es una pila Bluetooth completamente calificada. La lista de calificación se encuentra en el sitio web de Bluetooth SIG en QDID 169365.
La pila de Bluetooth principal reside en
packages/modules/Bluetooth
. El desarrollo se realiza en AOSP y aceptamos contribuciones.
Arquitectura de Android 7.x y versiones anteriores
Un servicio del sistema Bluetooth se comunica con la pila de Bluetooth a través de JNI y con las apps a través de Binder IPC. El servicio del sistema proporciona a los desarrolladores acceso a varios perfiles de Bluetooth. En este diagrama, se muestra la estructura general de la pila de Bluetooth:
Figura 2: Arquitectura de Bluetooth de Android 7.x y versiones anteriores.
- Marco de trabajo de la app
-
A nivel del framework de la app, se encuentra el código de la app, que usa las APIs de
android.bluetooth
para interactuar con el hardware de Bluetooth. Internamente, este código llama al proceso de Bluetooth a través del mecanismo de IPC de Binder. - Servicio del sistema Bluetooth
-
El servicio del sistema Bluetooth, ubicado en
packages/apps/Bluetooth
, se empaqueta como una app para Android y, además, implementa el servicio y los perfiles de Bluetooth en la capa del framework de Android. Esta app llama a la capa HAL a través de JNI. - JNI
-
El código JNI asociado con
android.bluetooth
se encuentra en
packages/apps/Bluetooth/jni
. El código JNI llama a la capa HAL y recibe devoluciones de llamadas de la HAL cuando se producen ciertas operaciones de Bluetooth, como cuando se detectan dispositivos. - HAL
-
La capa de abstracción de hardware define la interfaz estándar a la que llaman las APIs de
android.bluetooth
y el proceso de Bluetooth, y que debes implementar para que tu hardware de Bluetooth
funcione correctamente. El archivo de encabezado del HAL de Bluetooth es
hardware/libhardware/include/hardware/bluetooth.h
. Además, revisa todos los archivoshardware/libhardware/include/hardware/bt_*.h
. - Pila de Bluetooth
-
Se te proporciona la pila de Bluetooth predeterminada, que se encuentra en
system/bt
. La pila implementa el HAL de Bluetooth genérico y lo personaliza con extensiones y cambios de configuración. - extensiones de proveedores
- Para agregar extensiones personalizadas y una capa de HCI para el registro, puedes crear un módulo libbt-vendor y especificar estos componentes.
Implementa el HAL
El HAL de Bluetooth se encuentra en
/hardware/libhardware/include/hardware/bluetooth.h
. El archivo bluetooth.h
contiene la interfaz básica para la pila de Bluetooth, y debes implementar sus funciones.
Los archivos específicos del perfil se encuentran en el mismo directorio. Para obtener más información, consulta la Referencia del archivo HAL.