Android предоставляет стек Bluetooth по умолчанию, который поддерживает как классический Bluetooth, так и Bluetooth с низким энергопотреблением. Используя 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:
- Платформа приложения
- На уровне платформы приложения находится код приложения, который использует 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:
- Платформа приложения
- На уровне платформы приложения находится код приложения, который использует 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 .