Bluetooth

Bluetooth обеспечивает обмен данными между двумя устройствами на небольшом расстоянии. В ОС Аврора используются компоненты Bluetooth с открытым исходным кодом, такие как BlueZ и ObexD. BlueZ и Obexd запускаются в качестве демона, библиотека интерфейса фреймворка Bluetooth используется для доступа приложений к BlueZ или ObexD через интерфейс D-bus.

Распределение звука Bluetooth управляется через PulseAudio.

Ниже на рисунке представлена архитектура Bluetooth на ОС Аврора.

Bluetooth

Фреймворк Bluetooth позволяет взаимодействовать с пользователем. Он контролирует демоны BlueZ, ObexD и PulseAudio. Bluetooth обеспечивает стандартный интерфейс между чипом и точкой доступа Bluetooth, называемой HCI (Host Controller Interface, интерфейс хост-контроллер). HCI может быть реализован на USB, UART, SDIO, но для мобильной среды UART используется чаще. В зависимости от производителя чипа активация интерфейса HCI может быть разной. Поставщик обеспечивает конфигурацию HCI и первичные скрипты. Например, Broadcom и Spreadtrum обеспечивают прошивки и инструмент загрузки. ОС Аврора поддерживает Bluetooth версии 4.х. Фреймворк Bluetooth в ОС Аврора основан на проекте BlueZ с открытым исходным кодом. BlueZ предоставляет API D-Bus.

Следующие компоненты необходимы для работы с Bluetooth:

  • приложение, контролирующее демоны BlueZ, ObexD и PulseAudio;
  • ObexD, который является демоном передачи объектами;
  • BluetoothD, который является центральным демоном Bluetooth;
  • подсистема Bluetooth, предоставляющая unix-сокет Bluetooth. Доступ к каждому протоколу обеспечивается соответствующим сокетом;
  • драйвер Bluetooth, который является чипом драйвера. В случае UART ядро Linux обеспечивает интерфейс. Конфигурация GPIO (general-purpose input/output, интерфейс ввода/вывода общего назначения), rfkill (управление радиочастотой) и управление энергопотреблением могут быть обработаны поставщиком и инженером портирования.

В ОС Аврора поддерживаются следующие профили:

  • A2DP 1.2 (Advanced Audio Distribution Profile, расширенный профиль распространения аудио) —  позволяет передавать музыку с устройства на базе ОС Аврора на аксессуары Bluetooth, такие как беспроводные наушники, динамики и автомобильные аудиосистемы. ОС Аврора поддерживает кодек SBC, но не кодеки MP3 или APTХ;
  • HFP 1.5 (Hands-Free Protocol, протокол Hands-Free) —  обеспечивает передачу звука с телефонного звонка на аксессуар Bluetooth или на автомобильную аудиосистему;
  • HSP 1.2 (Headset Profile, профиль гарнитуры) —  позволяет использовать Bluetooth-гарнитуры с устройства на базе ОС Аврора;
  • AVCTP 1.3 (Audio/Video Control Transport Protocol, транспортный протокол управлением аудио/видео);
  • AVDTP 1.2 (Audio/Video Distribution Transport Protocol, транспортный протокол распределения аудио/видео);
  • AVRCP 1.0 (Audio/Video Remote Control Profile, профиль дистанционного управления аудио/видео) —  позволяет использовать устройство на базе ОС Аврора в качестве простого дистанционного управления к другим устройствам Bluetooth: команды для устройств «воспроизведение, стоп, пауза» и т. д. ОС Аврора не поддерживает метаданные мультимедиа;
  • GAVDP 1.2 (General Audio/Video Distribution Profile, общий профиль распространения аудио/видео) —  предоставляет возможность совместного использования аудио и видео через Bluetooth с другими устройствами;
  • OPP 1.1 (Object Push Profile, профиль для пересылки объектов) —  позволяет инициировать передачу по Bluetooth c устройства на базе ОС Аврора без устройства-получателя;
  • SPP 1.1 (Serial Port Profile, профиль серийного порта) —  исключает необходимость в наличии физического разъема серии RS-232 на устройстве;
  • PBAP 1.0 (Phone Book Access Profile, профиль доступа к телефонной книге) —  позволяет просматривать телефонную книгу с другого устройства, например на приборной панели автомобиля;
  • HID 1.0 (Human Interface Device, устройство взаимодействия с человеком) — позволяет использовать HID устройства, например клавиатуры и мыши.

Адаптация BlueZ под ОС Аврора доступна по ссылке. При разработке приложений для ОС Аврора доступ к функциям BlueZ можно упростить, воспользовавшись libbluez-qt, предоставляющей модуль QML и API Qt.