Bluetooth

Ikona interfejsu Bluetooth HAL na Androida

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

W Androidzie 4.3 i nowszych pakiet Bluetooth umożliwia implementację Bluetooth Low Energy (BLE). Aby w pełni korzystać z interfejsów BLE API, postępuj zgodnie z wymaganiami HCI dotyczącymi Bluetootha na Androidzie. Urządzenia z Androidem z kwalifikującym się chipsetem mogą stosować klasyczny Bluetooth lub oba standardy: klasyczny Bluetooth i BLE. BLE nie jest zgodny wstecz ze starszymi chipsetami Bluetooth.

W Androidzie 8.0 natywny moduł Bluetooth jest w pełni zgodny z Bluetooth 5. Aby korzystać z dostępnych funkcji Bluetooth 5, urządzenie musi mieć odpowiedni układ Bluetooth 5.

Architektura Androida

Aplikacja Bluetooth komunikuje się z procesem Bluetooth za pomocą Bindera. Proces Bluetooth używa JNI do komunikacji z kompletem Bluetooth i daje deweloperom dostęp do różnych profili Bluetooth. Ten diagram pokazuje ogólną strukturę pakietu Bluetooth:

Architektura Bluetooth w Androidzie
Rysunek 1. Architektura Bluetooth w Androidzie
Platforma aplikacji
Na poziomie frameworku aplikacji znajduje się kod aplikacji, który korzysta z interfejsów API android.bluetooth do interakcji z sprzętem Bluetooth. Wewnętrznie ten kod wywołuje proces Bluetooth za pomocą mechanizmu Binder IPC.
Aplikacja Bluetooth
Aplikacja Bluetooth, która znajduje się w packages/modules/Bluetooth/android/app, jest spakowana jako aplikacja na Androida i implementuje profile Bluetooth na poziomie platformy Androida. Ta aplikacja wywołuje natywny stos Bluetooth za pomocą JNI.
JNI
Kod JNI powiązany z android.bluetooth znajduje się w pliku packages/modules/Bluetooth/android/app/jni. Kod JNI wywołuje stos Bluetooth podczas wykonywania określonych operacji Bluetooth, takich jak wykrywanie urządzeń.
Stos Bluetooth
Domyślny stos Bluetooth jest dostarczany w AOSP i znajduje się w packages/modules/Bluetooth/system. Stos implementuje ogólne interfejsy HAL Bluetooth i dostosowuje je za pomocą rozszerzeń oraz zmian konfiguracji.
Implementacja przez dostawcę
Urządzenia dostawcy komunikują się z kompletem Bluetooth za pomocą języka interfejsu sprzętowego (HIDL).

HIDL

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

Tworzenie stosu Bluetooth

Pakiet Bluetooth w Androidzie to w pełni kwalifikowany pakiet Bluetooth. Informacje o kwalifikacji znajdują się na stronie internetowej Bluetooth SIG pod identyfikatorem QDID 169365.

Główny moduł Bluetooth znajduje się w folderze packages/modules/Bluetooth. Rozwój odbywa się w AOSP, a współpraca jest mile widziana.

Architektura Androida 7.x i starszych

Usługa systemowa Bluetooth komunikuje się z kompletem Bluetooth za pomocą JNI oraz z aplikacjami za pomocą interfejsu Binder IPC. Usługa systemowa zapewnia deweloperom dostęp do różnych profili Bluetooth. Ten diagram pokazuje ogólną strukturę modułu Bluetooth:

Architektura Bluetooth w Androidzie
Rysunek 2. Architektura Bluetooth w Androidzie 7.x i starszych:
Platforma aplikacji
Na poziomie platformy aplikacji znajduje się kod aplikacji, który korzysta z interfejsów API android.bluetooth do interakcji z sprzętem Bluetooth. Wewnętrznie ten kod wywołuje proces Bluetooth za pomocą mechanizmu Binder IPC.
Usługa systemowa Bluetooth
Usługa systemowa Bluetooth znajdująca się w packages/apps/Bluetooth jest spakowana jako aplikacja na Androida i implementuje usługę Bluetooth oraz profile na poziomie platformy Android. 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 od niej wywołania zwrotne, gdy występują określone operacje Bluetooth, np. wykrywanie urządzeń.
HAL
Warstwę abstrakcji sprzętowej definiuje standardowy interfejs, do którego odwołują się interfejsy API android.bluetooth i proces Bluetooth. Musisz go zaimplementować, aby sprzęt Bluetooth działał prawidłowo. Plik nagłówka interfejsu Bluetooth HAL to:hardware/libhardware/include/hardware/bluetooth.h. Dodatkowo sprawdź wszystkie pliki hardware/libhardware/include/hardware/bt_*.h.
Stos Bluetooth
Domyślny moduł Bluetooth jest dostępny w system/bt. Stos implementuje ogólne interfejsy HAL Bluetooth i dostosowuje je za pomocą rozszerzeń oraz zmian konfiguracji.
Rozszerzenia dotyczące dostawców
Aby dodać rozszerzenia niestandardowe i warstwę interfejsu HCI do śledzenia, możesz utworzyć moduł libbt-vendor i określić te komponenty.

Wdrażanie interfejsu HAL

Interfejs HAL Bluetooth znajduje się w folderze /hardware/libhardware/include/hardware/bluetooth.h. Plik bluetooth.h zawiera podstawowy interfejs modułu Bluetooth, którego funkcje musisz zaimplementować.

Pliki dotyczące poszczególnych profili znajdują się w tym samym katalogu. Więcej informacji znajdziesz w  pliku referencyjnym HAL.