Bluetooth

Ikona Android Bluetooth HAL

Android udostępnia domyślny stos Bluetooth, który obsługuje zarówno klasyczny Bluetooth, jak i Bluetooth Low Energy. Urządzenia z Androidem mogą tworzyć osobiste sieci bezprzewodowe, aby wysyłać i odbierać dane z urządzeń Bluetooth w pobliżu.

W Androidzie 4.3 i nowszych wersjach stos protokołów Bluetooth w Androidzie umożliwia implementację Bluetooth Low Energy (BLE). Aby w pełni korzystać z interfejsów BLE API, postępuj zgodnie z wymaganiami dotyczącymi interfejsu HCI Bluetootha na Androidzie. Urządzenia z Androidem z odpowiednim chipsetem mogą obsługiwać klasyczną wersję Bluetootha lub obie wersje: klasyczną i BLE. BLE nie jest zgodny wstecznie ze starszymi chipsetami Bluetooth.

W Androidzie 8.0 stos Bluetootha jest w pełni zgodny ze standardem Bluetooth 5. Aby korzystać z dostępnych funkcji Bluetooth 5, urządzenie musi mieć certyfikowany chipset Bluetooth 5.

Architektura Androida

Aplikacja Bluetooth komunikuje się z procesem Bluetooth za pomocą interfejsu Binder. Proces Bluetooth używa JNI do komunikacji ze stosem Bluetooth i zapewnia programistom dostęp do różnych profili Bluetooth. Ten diagram przedstawia ogólną strukturę stosu Bluetooth:

Diagram przedstawiający warstwy stosu Bluetooth w Androidzie.

Rysunek 1. Architektura Bluetootha na Androidzie.

platforma aplikacji
Na poziomie struktury aplikacji znajduje się kod aplikacji, który korzysta z interfejsów API android.bluetooth do interakcji ze sprzętem Bluetooth. Wewnętrznie ten kod wywołuje proces Bluetooth za pomocą mechanizmu IPC Binder.
Aplikacja Bluetooth
Aplikacja Bluetooth, znajdująca się w packages/modules/Bluetooth/android/app, jest pakowana jako aplikacja na Androida i implementuje profile Bluetootha na warstwie frameworka Androida. Ta aplikacja wywołuje stos Bluetooth za pomocą JNI.
JNI
Kod JNI powiązany z android.bluetooth znajduje się w packages/modules/Bluetooth/android/app/jni. Kod JNI wywołuje stos Bluetooth, gdy występują określone operacje Bluetooth, np. gdy wykrywane są urządzenia.
Stos Bluetooth
Domyślny stos Bluetooth jest dostępny w AOSP i znajduje się w packages/modules/Bluetooth/system. Stos implementuje ogólny interfejs HAL Bluetooth i dostosowuje go za pomocą rozszerzeń i zmian konfiguracji.
wdrażanie dostawcy,
Urządzenia dostawcy wchodzą w interakcję ze stosem Bluetooth za pomocą języka HIDL (Hardware Interface Design Language).

HIDL

HIDL definiuje interfejs między stosem Bluetooth a implementacją dostawcy. Aby wygenerować pliki HIDL Bluetooth, przekaż pliki interfejsu Bluetooth do narzędzia do generowania HIDL. Pliki interfejsu znajdują się w lokalizacji hardware/interfaces/bluetooth.

Opracowywanie stosu Bluetooth

Stos Bluetooth w Androidzie jest w pełni kwalifikowanym stosem Bluetooth. Lista kwalifikacji znajduje się na stronie internetowej Bluetooth SIG w sekcji QDID 169365.

Główny stos Bluetootha znajduje się w folderze packages/modules/Bluetooth. Rozwój odbywa się w ramach AOSP, a każde zaangażowanie w ten proces jest mile widziane.

Architektura Androida 7.x i starszych

Usługa systemowa Bluetooth komunikuje się ze stosem Bluetooth za pomocą JNI, a z aplikacjami za pomocą Binder IPC. Usługa systemowa zapewnia deweloperom dostęp do różnych profili Bluetooth. Ten diagram przedstawia ogólną strukturę stosu Bluetooth:

Diagram warstw architektury Bluetootha w Androidzie 7.x i starszych wersjach.

Rysunek 2. Architektura Bluetootha w Androidzie 7.x i starszych wersjach.

platforma aplikacji
Na poziomie struktury aplikacji znajduje się kod aplikacji, który korzysta z interfejsów API android.bluetooth do interakcji ze sprzętem Bluetooth. Wewnętrznie ten kod wywołuje proces Bluetooth za pomocą mechanizmu IPC Binder.
Usługa systemowa Bluetooth
Usługa systemowa Bluetooth, znajdująca się w packages/apps/Bluetooth, jest pakowana jako aplikacja na Androida i implementuje usługę Bluetooth oraz profile na warstwie platformy Androida. Ta aplikacja wywołuje warstwę HAL za pomocą JNI.
JNI
Kod JNI powiązany z  android.bluetooth znajduje się w packages/apps/Bluetooth/jni. Kod JNI wywołuje warstwę HAL i otrzymuje z niej wywołania zwrotne, gdy występują określone operacje Bluetooth, np. gdy wykrywane są urządzenia.
HAL
Warstwa abstrakcji sprzętu definiuje standardowy interfejs, do którego wywołują interfejsy API android.bluetooth i proces Bluetooth. Musisz go wdrożyć, aby sprzęt Bluetooth działał prawidłowo. Plik nagłówkowy interfejsu HAL Bluetooth tohardware/libhardware/include/hardware/bluetooth.h. Dodatkowo sprawdź wszystkie pliki hardware/libhardware/include/hardware/bt_*.h.
Stos Bluetooth
Domyślny stos Bluetooth jest dostępny w lokalizacji system/bt. Stos implementuje ogólną warstwę HAL Bluetooth i dostosowuje ją za pomocą rozszerzeń i zmian konfiguracji.
rozszerzenia dostawcy,
Aby dodać niestandardowe rozszerzenia i warstwę HCI do śledzenia, możesz utworzyć moduł libbt-vendor i określić te komponenty.

Wdrażanie interfejsu HAL

Warstwa HAL Bluetooth znajduje się w /hardware/libhardware/include/hardware/bluetooth.h. Plik bluetooth.h zawiera podstawowy interfejs stosu Bluetooth i musisz zaimplementować jego funkcje.

Pliki specyficzne dla profilu znajdują się w tym samym katalogu. Więcej informacji znajdziesz w  dokumentacji pliku HAL.