Bluetooth

Значок Android Bluetooth HAL

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

В Android 4.3 и более поздних версиях стек Android Bluetooth обеспечивает возможность реализации Bluetooth Low Energy (BLE). Чтобы в полной мере использовать API BLE, следуйте требованиям 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/modules/Bluetooth/android/app , упаковано как приложение Android и реализует профили Bluetooth на уровне фреймворка Android. Это приложение вызывает собственный стек Bluetooth через JNI.
JNI
Код JNI, связанный с android.bluetooth, находится в packages/modules/Bluetooth/android/app/jni . Код JNI вызывает стек Bluetooth, когда происходят определенные операции Bluetooth, например, когда обнаруживаются устройства.
Bluetooth-стек
Стек Bluetooth по умолчанию предоставляется в AOSP и находится в packages/modules/Bluetooth/system . Стек реализует общий Bluetooth HAL и настраивает его с помощью расширений и изменений конфигурации.
Реализация поставщика
Устройства поставщиков взаимодействуют со стеком Bluetooth с помощью языка проектирования аппаратного интерфейса (HIDL).

ХИДЛ

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

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

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

Основной стек Bluetooth находится в packages/modules/Bluetooth . Разработка ведется в 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. Заголовочный файл для Bluetooth HAL — 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 .