Bluetooth

Ikona Androida HAL Bluetooth

Android udostępnia domyślny stos Bluetooth, który obsługuje zarówno klasyczny Bluetooth, jak i Bluetooth Low Energy. Dzięki technologii Bluetooth urządzenia z systemem Android mogą tworzyć sieci osobiste w celu wysyłania i odbierania danych za pomocą pobliskich urządzeń Bluetooth.

W systemie Android 4.3 i nowszych stos Android Bluetooth umożliwia implementację Bluetooth Low Energy (BLE). Aby w pełni wykorzystać interfejsy API BLE, postępuj zgodnie z wymaganiami Androida Bluetooth HCI . Urządzenia z systemem Android z odpowiednim chipsetem mogą implementować klasyczny Bluetooth lub zarówno klasyczny Bluetooth, jak i BLE. BLE nie jest wstecznie kompatybilny ze starszymi chipsetami Bluetooth.

W systemie Android 8.0 natywny stos Bluetooth jest w pełni zgodny z Bluetooth 5. Aby móc korzystać z dostępnych funkcji Bluetooth 5, urządzenie musi mieć chipset obsługujący technologię Bluetooth 5.

Architektura Androida

Aplikacja Bluetooth komunikuje się z procesem Bluetooth za pośrednictwem Bindera. Proces Bluetooth wykorzystuje JNI do komunikacji ze stosem Bluetooth i zapewnia programistom dostęp do różnych profili Bluetooth. Ten diagram przedstawia ogólną strukturę stosu Bluetooth:

Architektura Androida Bluetooth
Rysunek 1. Architektura Bluetooth w systemie Android
Ramy aplikacji
Na poziomie struktury aplikacji znajduje się kod aplikacji, który wykorzystuje interfejsy API systemu Android.bluetooth do interakcji ze sprzętem Bluetooth. Wewnętrznie ten kod wywołuje proces Bluetooth poprzez mechanizm Binder IPC.
Usługa systemu Bluetooth
Usługa systemowa Bluetooth, zlokalizowana w packages/modules/Bluetooth/android/app , jest spakowana jako aplikacja na Androida i implementuje usługi i profile Bluetooth w warstwie frameworka Android. Ta aplikacja wywołuje natywny stos Bluetooth za pośrednictwem 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ąpią określone operacje Bluetooth, na przykład gdy zostaną wykryte urządzenia.
Stos Bluetooth
Domyślny stos Bluetooth jest dostępny w AOSP i znajduje się w packages/modules/Bluetooth . Stos implementuje ogólną warstwę Bluetooth HAL i dostosowuje ją za pomocą rozszerzeń i zmian konfiguracyjnych.
Implementacja dostawcy
Urządzenia dostawców komunikują się ze stosem Bluetooth przy użyciu języka projektowania interfejsu sprzętowego (HIDL).

HIDL

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

Rozwój stosu Bluetooth

Stos Bluetooth systemu Android to w pełni kwalifikowany stos Bluetooth. Lista kwalifikacji znajduje się na stronie internetowej Bluetooth SIG pod numerem QDID 169365 .

Rdzeń stosu Bluetooth znajduje się w packages/modules/Bluetooth . Rozwój odbywa się w AOSP, a wkład jest mile widziany.

Architektura Androida 7.x i wcześniejszych

Usługa systemowa Bluetooth komunikuje się ze stosem Bluetooth za pośrednictwem JNI i z aplikacjami za pośrednictwem Binder IPC. Usługa systemowa zapewnia programistom dostęp do różnych profili Bluetooth. Ten diagram przedstawia ogólną strukturę stosu Bluetooth:

Architektura Androida Bluetooth
Rysunek 2. Architektura Bluetooth w systemie Android 7.xi wcześniejszym
Ramy aplikacji
Na poziomie struktury aplikacji znajduje się kod aplikacji, który wykorzystuje interfejsy API systemu Android.bluetooth do interakcji ze sprzętem Bluetooth. Wewnętrznie ten kod wywołuje proces Bluetooth poprzez mechanizm Binder IPC.
Usługa systemu Bluetooth
Usługa systemowa Bluetooth, zlokalizowana w packages/apps/Bluetooth , jest spakowana jako aplikacja na Androida i implementuje usługę i profile Bluetooth w warstwie frameworka Android. Ta aplikacja wywołuje warstwę HAL za pośrednictwem JNI.
JNI
Kod JNI powiązany z android.bluetooth znajduje się w packages/apps/Bluetooth/jni . Kod JNI wywołuje warstwę HAL i odbiera wywołania zwrotne z warstwy HAL, gdy wystąpią określone operacje Bluetooth, na przykład gdy zostaną wykryte urządzenia.
HAL
Warstwa abstrakcji sprzętu definiuje standardowy interfejs, z którego korzystają interfejsy API systemu Android.bluetooth i proces Bluetooth, i który należy zaimplementować, aby sprzęt Bluetooth działał prawidłowo. Plik nagłówkowy warstwy HAL Bluetooth to hardware/libhardware/include/hardware/bluetooth.h . Dodatkowo przejrzyj wszystkie pliki hardware/libhardware/include/hardware/bt_*.h .
Stos Bluetooth
Domyślny stos Bluetooth jest dostępny i znajduje się w system/bt . Stos implementuje ogólną warstwę Bluetooth HAL i dostosowuje ją za pomocą rozszerzeń i zmian konfiguracyjnych.
Rozszerzenia dostawcy
Aby dodać niestandardowe rozszerzenia i warstwę HCI do śledzenia, możesz utworzyć moduł libbbt-vendor i określić te komponenty.

Implementacja HAL-a

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

Pliki specyficzne dla profilu znajdują się w tym samym katalogu. Aby uzyskać szczegółowe informacje, zobacz Dokumentacja pliku HAL .