Bluetooth

Значок Android Bluetooth HAL

Android предоставляет стек Bluetooth по умолчанию, который поддерживает как классический Bluetooth, так и Bluetooth с низким энергопотреблением. Используя Bluetooth, устройства Android могут создавать личные сети для отправки и получения данных с ближайших устройств Bluetooth.

В Android 4.3 и более поздних версиях стек Android Bluetooth предоставляет возможность реализовать Bluetooth с низким энергопотреблением (BLE). Чтобы в полной мере использовать BLE API, следуйте требованиям Android Bluetooth HCI . Устройства Android с соответствующим набором микросхем могут реализовать либо классический Bluetooth, либо классический Bluetooth и BLE. BLE не имеет обратной совместимости со старыми чипсетами Bluetooth.

В Android 8.0 собственный стек Bluetooth полностью подходит для Bluetooth 5. Чтобы использовать доступные функции Bluetooth 5, устройство должно иметь чипсет, соответствующий стандарту Bluetooth 5.

Android-архитектура

Приложение Bluetooth связывается с процессом Bluetooth через Binder. Процесс Bluetooth использует JNI для связи со стеком Bluetooth и предоставляет разработчикам доступ к различным профилям Bluetooth. На этой диаграмме показана общая структура стека Bluetooth:

Android-архитектура Bluetooth
Рис. 1. Архитектура Android Bluetooth
Каркас приложения
На уровне структуры приложения находится код приложения, который использует API-интерфейсы android.bluetooth для взаимодействия с оборудованием Bluetooth. Внутри этот код вызывает процесс Bluetooth через механизм Binder IPC.
Системная служба Bluetooth
Системная служба Bluetooth, расположенная в packages/apps/Bluetooth , упакована как приложение Android и реализует службы и профили Bluetooth на уровне платформы Android. Это приложение вызывает собственный стек Bluetooth через JNI.
JNI
Код JNI, связанный с android.bluetooth, находится в packages/apps/Bluetooth/jni . Код JNI обращается к стеку Bluetooth при выполнении определенных операций Bluetooth, например при обнаружении устройств.
Стек Bluetooth
Стек Bluetooth по умолчанию предоставляется в AOSP и находится в system/bt . Стек реализует общий Bluetooth HAL и настраивает его с помощью расширений и изменений конфигурации.
Реализация поставщика
Устройства поставщика взаимодействуют со стеком Bluetooth с помощью языка проектирования аппаратного интерфейса (HIDL).

HIDL

HIDL определяет интерфейс между стеком Bluetooth и реализацией поставщика. Чтобы сгенерировать файлы Bluetooth HIDL, передайте файлы интерфейса Bluetooth в инструмент генерации HIDL. Файлы интерфейса находятся в hardware/interfaces/bluetooth .

Разработка стека Bluetooth

Стек Android Bluetooth — это полностью квалифицированный стек Bluetooth. Квалификационный список находится на веб-сайте Bluetooth SIG под номером QDID 169365 .

Основной стек Bluetooth находится в system/bt . Разработка происходит в AOSP, и участие приветствуется.

Android 7.x и более ранняя архитектура

Системная служба Bluetooth взаимодействует со стеком Bluetooth через JNI и с приложениями через Binder IPC. Системный сервис предоставляет разработчикам доступ к различным профилям Bluetooth. На этой диаграмме показана общая структура стека Bluetooth:

Android-архитектура Bluetooth
Рис. 2. Android 7.x и более ранняя архитектура Bluetooth
Каркас приложения
На уровне структуры приложения находится код приложения, который использует API-интерфейсы android.bluetooth для взаимодействия с оборудованием Bluetooth. Внутри этот код вызывает процесс Bluetooth через механизм Binder IPC.
Системная служба Bluetooth
Системная служба Bluetooth, расположенная в packages/apps/Bluetooth , упакована как приложение Android и реализует службу и профили Bluetooth на уровне платформы Android. Это приложение обращается к уровню HAL через JNI.
JNI
Код JNI, связанный с android.bluetooth , находится в packages/apps/Bluetooth/jni . Код JNI обращается к уровню HAL и получает обратные вызовы от HAL при выполнении определенных операций Bluetooth, например при обнаружении устройств.
ХАЛ
Уровень аппаратной абстракции определяет стандартный интерфейс, к которому обращаются API-интерфейсы android.bluetooth и процесс Bluetooth и который необходимо реализовать для правильной работы оборудования Bluetooth. Файл заголовка для HAL Bluetooth — hardware/libhardware/include/hardware/bluetooth.h . Кроме того, просмотрите все hardware/libhardware/include/hardware/bt_*.h .
Стек Bluetooth
Стек Bluetooth по умолчанию предоставляется вам и находится в system/bt . Стек реализует общий Bluetooth HAL и настраивает его с помощью расширений и изменений конфигурации.
Расширения поставщика
Чтобы добавить пользовательские расширения и слой HCI для трассировки, вы можете создать модуль libbt-vendor и указать эти компоненты.

Реализация HAL

Bluetooth HAL находится в /hardware/libhardware/include/hardware/bluetooth.h . Файл bluetooth.h содержит базовый интерфейс для стека Bluetooth, и вы должны реализовать его функции.

Файлы, относящиеся к профилю, находятся в том же каталоге. Дополнительные сведения см. в справочнике по файлам HAL .