блютуз

Значок Android Bluetooth HAL

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

В Android 4.3 и более поздних версиях стек Android Bluetooth обеспечивает возможность реализации Bluetooth с низким энергопотреблением (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/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. Архитектура Bluetooth в Android 7.x и более ранних версиях
Фреймворк приложения
На уровне инфраструктуры приложения находится код приложения, который использует 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, например, при обнаружении устройств.
HAL
Уровень аппаратной абстракции определяет стандартный интерфейс, которыйвызывают 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 .