Bluetooth

Ícono de HAL de Bluetooth de Android

Android proporciona una pila de Bluetooth predeterminada que admite Bluetooth clásico y 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 aprovechar al máximo las APIs de BLE, 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 conjuntos de chips Bluetooth más antiguos.

En Android 8.0, la pila Bluetooth nativa 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 les proporciona a los desarrolladores acceso a varios perfiles de Bluetooth. En este diagrama, se muestra la estructura general de la pila de Bluetooth:

Arquitectura de Bluetooth de Android
Figura 1: Arquitectura de Bluetooth de Android
Framework de la app
En el 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. De forma interna, este código llama al proceso de Bluetooth a través del mecanismo de IPC de Binder.
App de Bluetooth
La app de Bluetooth, que se encuentra 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 nativa 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 de JNI llama a la pila de Bluetooth cuando se producen ciertas operaciones de Bluetooth, como cuando se descubren dispositivos.
Pila Bluetooth
La pila Bluetooth predeterminada se proporciona en 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 mediante el 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 de Bluetooth de Android es una pila de Bluetooth completamente calificada. La lista de calificaciones se encuentra en el sitio web de Bluetooth SIG, en QDID 169365.

La pila principal de Bluetooth reside en packages/modules/Bluetooth. El desarrollo se realiza en AOSP, y se aceptan 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 IPC de Binder. El servicio del sistema les brinda a los desarrolladores acceso a varios perfiles de Bluetooth. En este diagrama, se muestra la estructura general de la pila de Bluetooth:

Arquitectura de Bluetooth de Android
Figura 2: Arquitectura de Bluetooth de Android 7.x y versiones anteriores
Framework de la app
En el 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. De forma interna, este código llama al proceso de Bluetooth a través del mecanismo de IPC de Binder.
Servicio de sistema Bluetooth
El servicio del sistema Bluetooth, ubicado en packages/apps/Bluetooth, se empaqueta como una app para Android y, luego, 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 de HAL y recibe devoluciones de llamadas de HAL cuando se producen ciertas operaciones de Bluetooth, como cuando se descubren 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 el 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 archivos hardware/libhardware/include/hardware/bt_*.h.
Pila Bluetooth
Se te proporciona la pila de Bluetooth predeterminada, que se encuentra en system/bt. La pila implementa el HAL genérico de Bluetooth y lo personaliza con extensiones y cambios de configuración.
Extensiones de proveedores
Para agregar extensiones personalizadas y una capa de HCI para el seguimiento, 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 de 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.