Bluetooth

Icône HAL Bluetooth Android

Android fournit une pile Bluetooth par défaut compatible avec le Bluetooth classique et le Bluetooth à basse consommation. Grâce au Bluetooth, les appareils Android peuvent créer des réseaux personnels pour envoyer et recevoir des données avec des appareils Bluetooth à proximité.

Sous Android 4.3 et versions ultérieures, la pile Bluetooth Android permet d'implémenter la technologie Bluetooth à basse consommation (BLE). Pour exploiter pleinement les API BLE, suivez les exigences Android Bluetooth HCI. Les appareils Android équipés d'un chipset qualifié peuvent implémenter le Bluetooth Classic ou les deux : Bluetooth Classic et BLE. La technologie BLE n'est pas rétrocompatible avec les anciens chipsets Bluetooth.

Sous Android 8.0, la pile Bluetooth native est entièrement compatible avec le Bluetooth 5. Pour utiliser les fonctionnalités Bluetooth 5 disponibles, l'appareil doit être équipé d'un chipset compatible avec la version 5 du Bluetooth.

Architecture Android

Une application Bluetooth communique avec le processus Bluetooth via Binder. Le processus Bluetooth utilise JNI pour communiquer avec la pile Bluetooth et fournit aux développeurs un accès à divers profils Bluetooth. Ce diagramme présente la structure générale de la pile Bluetooth:

Architecture Bluetooth Android
Figure 1. Architecture Bluetooth Android
Framework d'application
Au niveau du framework d'application se trouve le code de l'application, qui utilise les API android.bluetooth pour interagir avec le matériel Bluetooth. En interne, ce code appelle le processus Bluetooth via le mécanisme d'IPC Binder.
Application Bluetooth
L'application Bluetooth, située dans packages/modules/Bluetooth/android/app, est empaquetée en tant qu'application Android et implémente les profils Bluetooth au niveau de la couche du framework Android. Cette application appelle la pile Bluetooth native via JNI.
JNI
Le code JNI associé à android.bluetooth se trouve dans packages/modules/Bluetooth/android/app/jni. Le code JNI appelle la pile Bluetooth lorsque certaines opérations Bluetooth se produisent, par exemple lorsque des appareils sont détectés.
Pile Bluetooth
La pile Bluetooth par défaut est fournie dans AOSP et se trouve dans packages/modules/Bluetooth/system. La pile implémente le HAL Bluetooth générique et le personnalise avec des extensions et des modifications de configuration.
Implémentation par le fournisseur
Les appareils du fournisseur interagissent avec la pile Bluetooth à l'aide du langage de conception d'interface matérielle (HIDL).

HIDL

HIDL définit l'interface entre la pile Bluetooth et l'implémentation du fournisseur. Pour générer les fichiers HIDL Bluetooth, transmettez les fichiers d'interface Bluetooth à l'outil de génération HIDL. Les fichiers d'interface se trouvent dans hardware/interfaces/bluetooth.

Développement de la pile Bluetooth

La pile Bluetooth Android est une pile Bluetooth entièrement qualifiée. La liste de qualification est disponible sur le site Web de Bluetooth SIG sous le QDID 169365.

La pile Bluetooth principale se trouve dans packages/modules/Bluetooth. Le développement se fait dans AOSP, et les contributions sont les bienvenues.

Architecture Android 7.x et versions antérieures

Un service système Bluetooth communique avec la pile Bluetooth via JNI et avec les applications via l'IPC Binder. Le service système permet aux développeurs d'accéder à différents profils Bluetooth. Ce diagramme présente la structure générale de la pile Bluetooth:

Architecture Bluetooth Android
Figure 2. Architecture Bluetooth Android 7.x et versions antérieures
Framework d'application
Au niveau du framework d'application se trouve le code de l'application, qui utilise les API android.bluetooth pour interagir avec le matériel Bluetooth. En interne, ce code appelle le processus Bluetooth via le mécanisme d'IPC Binder.
Service système Bluetooth
Le service système Bluetooth, situé dans packages/apps/Bluetooth, est empaqueté en tant qu'application Android et implémente le service et les profils Bluetooth au niveau de la couche de framework Android. Cette application appelle la couche HAL via JNI.
JNI
Le code JNI associé à Android.Bluetooth se trouve dans packages/apps/Bluetooth/jni. Le code JNI appelle la couche HAL et reçoit des rappels de la HAL lorsque certaines opérations Bluetooth se produisent, par exemple lorsque des appareils sont détectés.
HAL
La couche d'abstraction matérielle définit l'interface standard que les API Android.Bluetooth et le processus Bluetooth appellent et que vous devez implémenter pour que votre matériel Bluetooth fonctionne correctement. Le fichier d'en-tête du HAL Bluetooth est hardware/libhardware/include/hardware/bluetooth.h. Examinez également tous les fichiers hardware/libhardware/include/hardware/bt_*.h.
Pile Bluetooth
La pile Bluetooth par défaut est fournie et se trouve dans system/bt. La pile implémente le HAL Bluetooth générique et le personnalise avec des extensions et des modifications de configuration.
Extensions de fournisseurs
Pour ajouter des extensions personnalisées et une couche HCI pour le traçage, vous pouvez créer un module libbt-vendor et spécifier ces composants.

Implémenter le HAL

Le HAL Bluetooth se trouve dans /hardware/libhardware/include/hardware/bluetooth.h. Le fichier bluetooth.h contient l'interface de base de la pile Bluetooth. Vous devez implémenter ses fonctions.

Les fichiers spécifiques au profil se trouvent dans le même répertoire. Pour en savoir plus, consultez la documentation de référence des fichiers HAL.