Bluetooth

Symbol für Android Bluetooth HAL

Android bietet einen Standard-Bluetooth-Stack, der sowohl Classic Bluetooth als auch Bluetooth Low Energy unterstützt. Über Bluetooth können Android-Geräte Personal Area Networks erstellen, um Daten mit Bluetooth-Geräten in der Nähe zu senden und zu empfangen.

In Android 4.3 und höher bietet der Android-Bluetooth-Stack die Möglichkeit, Bluetooth Low Energy (BLE) zu implementieren. Wenn Sie die BLE-APIs vollständig nutzen möchten, müssen Sie die Android Bluetooth HCI Requirements (Anforderungen an die Bluetooth-HCI-Schnittstelle von Android) einhalten. Auf Android-Geräten mit einem geeigneten Chipsatz kann entweder Classic Bluetooth oder sowohl Classic Bluetooth als auch BLE implementiert werden. BLE ist nicht mit älteren Bluetooth-Chipsätzen abwärtskompatibel.

In Android 8.0 ist der Bluetooth-Stack vollständig für Bluetooth 5 qualifiziert. Damit die verfügbaren Bluetooth 5-Funktionen genutzt werden können, muss das Gerät einen Bluetooth 5-kompatiblen Chipsatz haben.

Android-Architektur

Eine Bluetooth-App kommuniziert über Binder mit dem Bluetooth-Prozess. Der Bluetooth-Prozess verwendet JNI, um mit dem Bluetooth-Stack zu kommunizieren, und bietet Entwicklern Zugriff auf verschiedene Bluetooth-Profile. Das folgende Diagramm zeigt die allgemeine Struktur des Bluetooth-Stacks:

Diagramm mit den Ebenen des Android-Bluetooth-Stacks.

Abbildung 1: Android-Bluetooth-Architektur.

App-Framework
Auf der Ebene des App-Frameworks befindet sich der App-Code, der die android.bluetooth APIs verwendet, um mit der Bluetooth-Hardware zu interagieren. Intern wird mit diesem Code der Bluetooth-Prozess über den Binder-IPC-Mechanismus aufgerufen.
Bluetooth-App
Die Bluetooth-App, die sich unter packages/modules/Bluetooth/android/app befindet, ist als Android-App verpackt und implementiert die Bluetooth-Profile auf der Android-Framework-Ebene. Diese App ruft den Bluetooth-Stack über JNI auf.
JNI
Der JNI-Code, der mit android.bluetooth verknüpft ist, befindet sich in packages/modules/Bluetooth/android/app/jni. Der JNI-Code ruft den Bluetooth-Stack auf, wenn bestimmte Bluetooth-Vorgänge ausgeführt werden, z. B. wenn Geräte gefunden werden.
Bluetooth-Stack
Der Standard-Bluetooth-Stack ist in AOSP enthalten und befindet sich unter packages/modules/Bluetooth/system. Der Stack implementiert die generische Bluetooth-HAL und passt sie mit Erweiterungen und Konfigurationsänderungen an.
Anbieterimplementierung
Herstellergeräte interagieren über die Hardware Interface Design Language (HIDL) mit dem Bluetooth-Stack.

HIDL

HIDL definiert die Schnittstelle zwischen dem Bluetooth-Stack und der Anbieterimplementierung. Um die Bluetooth-HIDL-Dateien zu generieren, übergeben Sie die Bluetooth-Schnittstellendateien an das HIDL-Generierungstool. Die Schnittstellendateien befinden sich in hardware/interfaces/bluetooth.

Entwicklung des Bluetooth-Stacks

Der Android-Bluetooth-Stack ist ein vollständig qualifizierter Bluetooth-Stack. Die Qualifizierungsliste finden Sie auf der Bluetooth SIG-Website unter QDID 169365.

Der Bluetooth-Kern-Stack befindet sich in packages/modules/Bluetooth. Die Entwicklung erfolgt in AOSP und Beiträge sind willkommen.

Architektur von Android 7.x und niedriger

Ein Bluetooth-Systemdienst kommuniziert über JNI mit dem Bluetooth-Stack und über Binder IPC mit Apps. Der Systemdienst bietet Entwicklern Zugriff auf verschiedene Bluetooth-Profile. Dieses Diagramm zeigt die allgemeine Struktur des Bluetooth-Stacks:

Diagramm der Bluetooth-Architekturschichten für Android 7.x und niedriger.

Abbildung 2: Bluetooth-Architektur unter Android 7.x und niedriger

App-Framework
Auf der Ebene des App-Frameworks befindet sich der App-Code, der die android.bluetooth APIs verwendet, um mit der Bluetooth-Hardware zu interagieren. Intern wird mit diesem Code der Bluetooth-Prozess über den Binder-IPC-Mechanismus aufgerufen.
Bluetooth-Systemdienst
Der Bluetooth-Systemdienst, der sich in packages/apps/Bluetooth befindet, ist als Android-App verpackt und implementiert den Bluetooth-Dienst und die Profile auf der Android-Framework-Ebene. Diese App ruft die HAL-Ebene über JNI auf.
JNI
Der JNI-Code, der mit android.bluetooth verknüpft ist, befindet sich in packages/apps/Bluetooth/jni. Der JNI-Code ruft die HAL-Ebene auf und empfängt Callbacks von der HAL, wenn bestimmte Bluetooth-Vorgänge ausgeführt werden, z. B. wenn Geräte erkannt werden.
HAL
Die Hardwareabstraktionsschicht definiert die Standardschnittstelle, die von den android.bluetooth APIs und dem Bluetooth-Prozess aufgerufen wird und die Sie implementieren müssen, damit Ihre Bluetooth-Hardware ordnungsgemäß funktioniert. Die Headerdatei für die Bluetooth-HAL ist hardware/libhardware/include/hardware/bluetooth.h. Prüfen Sie außerdem alle hardware/libhardware/include/hardware/bt_*.h-Dateien.
Bluetooth-Stack
Der Standard-Bluetooth-Stack ist für Sie verfügbar und befindet sich in system/bt. Der Stack implementiert die generische Bluetooth-HAL und passt sie mit Erweiterungen und Konfigurationsänderungen an.
Anbietererweiterungen
Wenn Sie benutzerdefinierte Erweiterungen und eine HCI-Ebene für die Ablaufverfolgung hinzufügen möchten, können Sie ein libbt-vendor-Modul erstellen und diese Komponenten angeben.

HAL implementieren

Die Bluetooth-HAL befindet sich unter /hardware/libhardware/include/hardware/bluetooth.h. Die Datei bluetooth.h enthält die grundlegende Schnittstelle für den Bluetooth-Stack und Sie müssen ihre Funktionen implementieren.

Profilspezifische Dateien befinden sich im selben Verzeichnis. Weitere Informationen finden Sie in der HAL-Dateireferenz.