Bluetooth

Icône HAL Bluetooth Android

Android fournit une pile Bluetooth par défaut qui prend en charge à la fois le Bluetooth classique et le Bluetooth Low Energy. Grâce à Bluetooth, les appareils Android peuvent créer des réseaux personnels pour envoyer et recevoir des données avec des appareils Bluetooth à proximité.

Dans Android 4.3 et versions ultérieures, la pile Bluetooth Android offre la possibilité d'implémenter Bluetooth Low Energy (BLE). Pour tirer pleinement parti des API BLE, suivez les exigences Android Bluetooth HCI . Les appareils Android dotés d'un chipset qualifié peuvent implémenter soit Classic Bluetooth, soit Classic Bluetooth et BLE. BLE n'est pas rétrocompatible avec les anciens chipsets Bluetooth.

Sous Android 8.0, la pile Bluetooth native est entièrement qualifiée pour Bluetooth 5. Pour utiliser les fonctionnalités Bluetooth 5 disponibles, l'appareil doit disposer d'un chipset qualifié Bluetooth 5.

Architecture Android

Une application Bluetooth communique avec le processus Bluetooth via Binder. Le processus Bluetooth utilise JNI pour communiquer avec la pile Bluetooth et permet aux développeurs d'accéder à divers profils Bluetooth. Ce schéma montre la structure générale de la pile Bluetooth :

Architecture Bluetooth Android
Figure 1. Architecture Bluetooth Android
Cadre d'application
Au niveau du framework d'application se trouve le code d'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 Binder IPC.
Application Bluetooth
L'application Bluetooth, située dans packages/modules/Bluetooth/android/app , est conditionnée en tant qu'application Android et implémente les profils Bluetooth au niveau de la couche de structure 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écouverts.
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 Bluetooth HAL générique et le personnalise avec des extensions et des modifications de configuration.
Implémentation du fournisseur
Les appareils du fournisseur interagissent avec la pile Bluetooth à l’aide du langage HIDL (Hardware Interface Design Language).

HIDL

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

Développement de pile Bluetooth

La pile Bluetooth Android est une pile Bluetooth pleinement qualifiée. La liste des qualifications se trouve sur le site Web Bluetooth SIG sous le QDID 169365 .

La pile Bluetooth principale réside dans packages/modules/Bluetooth . Le développement se produit dans AOSP et les contributions sont les bienvenues.

Android 7.x et architecture antérieure

Un service système Bluetooth communique avec la pile Bluetooth via JNI et avec les applications via Binder IPC. Le service système permet aux développeurs d'accéder à divers profils Bluetooth. Ce schéma montre la structure générale de la pile Bluetooth :

Architecture Bluetooth Android
Figure 2. Architecture Bluetooth Android 7.x et versions antérieures
Cadre d'application
Au niveau du cadre d'application se trouve le code d'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 Binder IPC.
Service du système Bluetooth
Le service système Bluetooth, situé dans packages/apps/Bluetooth , est présenté sous forme d'application Android et implémente le service et les profils Bluetooth au niveau de la couche de structure 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 part de HAL lorsque certaines opérations Bluetooth se produisent, par exemple lorsque des appareils sont découverts.
HAL
La couche d'abstraction matérielle définit l'interface standard à laquelle les API android.bluetooth et le processus Bluetooth font appel 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 . De plus, examinez tous les fichiers hardware/libhardware/include/hardware/bt_*.h
Pile Bluetooth
La pile Bluetooth par défaut vous est fournie et se trouve dans system/bt . La pile implémente le Bluetooth HAL générique et le personnalise avec des extensions et des modifications de configuration.
Extensions de fournisseur
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émentation du 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 et vous devez implémenter ses fonctions.

Les fichiers spécifiques au profil se trouvent dans le même répertoire. Pour plus de détails, consultez la référence du fichier HAL .