Поддержка звука в слуховых аппаратах с использованием Bluetooth LE

Слуховые аппараты (HA) могут иметь улучшенную доступность на мобильных устройствах под управлением Android за счет использования ориентированных на соединение каналов L2CAP (CoC) через Bluetooth Low Energy (BLE). CoC использует эластичный буфер из нескольких аудиопакетов для поддержания постоянного потока аудио даже при потере пакетов. Этот буфер обеспечивает качество звука для слуховых аппаратов за счет задержки.

Конструкция CoC ссылается на базовую спецификацию Bluetooth версии 5 (BT). Чтобы соответствовать основным спецификациям, все многобайтовые значения на этой странице должны читаться с прямым порядком байтов.

Терминология

  • Central – Android-устройство, которое сканирует рекламу через Bluetooth.
  • Периферийное устройство — слуховой аппарат, отправляющий рекламные пакеты по Bluetooth.

Топология сети и архитектура системы

При использовании CoC для слуховых аппаратов топология сети предполагает одно центральное устройство и два периферийных устройства, одно левое и одно правое, как показано на рисунке 1 . Аудиосистема Bluetooth рассматривает левое и правое периферийные устройства как единый аудиоприемник. Если периферийное устройство отсутствует из-за монофонической установки или потери соединения, то центральный блок микширует левый и правый аудиоканал и передает звук на оставшееся периферийное устройство. Если центральный модуль теряет соединение с обоими периферийными устройствами, то он считает, что связь с аудиоприемником потеряна. В таких случаях центральный блок направляет звук на другой выход.


Рисунок 1. Топология сопряжения слуховых аппаратов с мобильными устройствами Android с использованием CoC через BLE.

Если центральный компьютер не передает аудиоданные на периферийное устройство и может поддерживать соединение BLE, центральный компьютер не должен отключаться от периферийного устройства. Поддержание соединения обеспечивает передачу данных на сервер GATT, расположенный на периферийном устройстве.

При сопряжении и подключении слуховых аппаратов центральный оператор должен:

  • Следите за новейшими сопряженными левым и правым периферийными устройствами.
  • Предположим, что периферийные устройства используются, если существует допустимое сопряжение. Централ попытается подключиться или повторно подключиться к сопряженному устройству, если соединение потеряно.
  • Предположим, что периферийные устройства больше не используются, если сопряжение удалено.

В приведенных выше случаях под сопряжением понимается действие по регистрации набора слуховых аппаратов с заданным UUID и обозначениями левого/правого в ОС, а не процесс сопряжения Bluetooth.

Системные Требования

Чтобы правильно реализовать CoC и обеспечить удобство работы с пользователем, системы Bluetooth в центральных и периферийных устройствах должны:

  • внедрить совместимый контроллер BT 4.2 или выше. Настоятельно рекомендуется использовать LE Secure Connections.
  • иметь центральную поддержку как минимум двух одновременных каналов LE с параметрами, описанными в разделе «Формат и синхронизация аудиопакета» .
  • иметь периферийную поддержку как минимум 1 канала LE с параметрами, описанными в разделе «Формат и синхронизация аудиопакета» .
  • иметь управление потоком на основе кредитов LE [BT Том 3, Часть A, Раздел 10.1]. Устройства должны поддерживать размер MTU и MPS не менее 167 байт в CoC и иметь возможность буферизовать до 8 пакетов.
  • иметь расширение длины данных LE [BT Vol 6, Part B, Sec 5.1.9] с полезной нагрузкой не менее 167 байт.
  • центральное устройство должно поддерживать команду обновления соединения HCI LE и соответствовать ненулевым параметрам maximum_CE_Length minimum_CE_Length .
  • центральное устройство должно поддерживать пропускную способность для двух подключений LE CoC к двум различным периферийным устройствам с интервалами подключения и размерами полезной нагрузки в формате аудиопакета и времени .
  • периферийное устройство должно установить параметры MaxRxOctets и MaxRxTime в кадрах LL_LENGTH_REQ или LL_LENGTH_RSP как наименьшие требуемые значения, необходимые для этих спецификаций. Это позволяет центральному устройству оптимизировать свой планировщик времени при расчете времени, необходимого для получения кадра.

Настоятельно рекомендуется, чтобы центральное и периферийное устройство поддерживало 2 МБ PHY, как указано в спецификации BT 5.0. Центральный блок должен поддерживать аудиоканалы со скоростью не менее 64 кбит/с на PHY 1M и 2M. PHY дальнего действия BLE не должен использоваться.

CoC использует стандартные механизмы Bluetooth для шифрования канального уровня и скачкообразной перестройки частоты.

Услуги АША ГАТТ

Периферийное устройство должно реализовывать серверную службу GATT потоковой передачи аудио для слуховых аппаратов (ASHA), описанную ниже. Периферийное устройство должно рекламировать эту услугу в режиме общей видимости, чтобы позволить центральному устройству распознавать аудиоприемник. Любые операции потокового аудио LE требуют шифрования. Потоковое аудио BLE имеет следующие характеристики:

Характеристика Характеристики Описание
ReadOnlyProperties Читать См. ReadOnlyProperties .
Аудиоконтролпоинт Пишите и пишите без ответа Точка управления аудиопотоком. См. Аудиоконтролпоинт .
Аудиостатуспоинт Читать/уведомлять Поле отчета о состоянии точки управления звуком. См. AudioStatusPoint .
Объем Пишите без ответа Байт между -128 и 0, указывающий величину ослабления, применяемую к потоковому аудиосигналу, в диапазоне от -48 дБ до 0 дБ. Настройка -128 должна интерпретироваться как полностью отключенный звук, т.е. самый низкий уровень громкости без отключения звука равен -127, что эквивалентно затуханию -47,625 дБ. При настройке 0 передаваемый синусоидальный тон с размахом сигнала будет представлять входной эквивалент 100 дБSPL на слуховом аппарате. Центральное устройство должно осуществлять потоковую передачу в номинальном полном масштабе и использовать эту переменную для установки желаемого уровня представления на периферийном устройстве.
LE_PSM_OUT Читать PSM, который будет использоваться для подключения аудиоканала. Выбирается из динамического диапазона [BT Том 3, Часть A, Раздел 4.22]

UUID, присвоенные услуге и характеристикам:

UUID службы : {0xFDF0}

Характеристика UUID
ReadOnlyProperties {6333651e-c481-4a3e-9169-7c902aad37bb}
Аудиоконтролпоинт {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
Аудиостатус {38663f1a-e711-4cac-b641-326b56404837}
Объем {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

В дополнение к службе ASHA GATT периферийное устройство должно также реализовать службу информации об устройствах, позволяющую центральному устройству определять имена производителей и названия устройств периферийного устройства.

ReadOnlyProperties

ReadOnlyProperties имеет следующие значения:

Байт Описание
0 Версия - должна быть 0x01
1 См. DeviceCapabilities .
2-9 См. HiSyncId .
10 См. Карту объектов .
11-12 Задержка рендеринга. Это время в миллисекундах с момента получения периферийным устройством аудиокадра до момента, когда периферийное устройство визуализирует выходные данные. Эти байты можно использовать для задержки видео для синхронизации со звуком.
13-14 Зарезервировано для будущего использования. Инициализируйте нулями.
15-16 Поддерживаемые идентификаторы кодеков . Это битовая маска поддерживаемых идентификаторов кодеков. 1 в разряде соответствует поддерживаемому кодеку. Например, 0x0002 указывает, что поддерживается G.722 с частотой 16 кГц. Все остальные биты должны быть установлены в 0.

Возможности устройства

Кусочек Описание
0 Сторона устройства (0: левая, 1: правая)
1 Указывает, является ли устройство автономным и получает моноданные или устройство является частью набора (0: монофоническое, 1: бинауральное)
2 Устройство поддерживает CSIS (0: не поддерживается, 1: поддерживается)
3-7 Зарезервировано (установлено в 0)

HiSyncID

Это поле должно быть уникальным для всех бинауральных устройств, но оно должно быть одинаковым для левого и правого набора.

Байт Описание
0-1 Идентификатор производителя. Это идентификаторы компании , присвоенные BTSIG.
2-7 Уникальный идентификатор, идентифицирующий слуховой аппарат. Этот идентификатор должен быть установлен одинаково как на левом, так и на правом периферийном устройстве.

Карта функций

Кусочек Описание
0 Поддерживается потоковая передача звука LE CoC (Да/Нет).
1-7 Зарезервировано (установлено в 0).

Идентификаторы кодеков

Если бит установлен, то этот конкретный кодек поддерживается.

Идентификатор/номер бита Кодек и частота дискретизации Требуемый битрейт Время кадра Обязательно на центральном (C) или периферийном (P)
0 Сдержанный Сдержанный Сдержанный Сдержанный
1 G.722 @ 16 кГц 64 кбит/с Переменная С и П
2-15 зарезервированы.
0 также зарезервирован.

Аудиоконтролпоинт

Эту контрольную точку нельзя использовать, когда LE CoC закрыт. Описание процедуры см. в разделе «Запуск и остановка аудиопотока» .

Код операции Аргументы Подпроцедура ГАТТ Описание
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Напишите ответ и ожидайте дополнительного уведомления о статусе через функцию AudioStatusPoint . Дает указание периферийному устройству сбросить кодек и начать воспроизведение кадра 0. Поле кодека указывает идентификатор кодека, который будет использоваться для этого воспроизведения. Например, поле кодека равно «1» для G.722 при частоте 16 кГц.

Битовое поле типа звука указывает тип(ы) звука, присутствующие в потоке:
  • 0 – неизвестно
  • 1 - Рингтон
  • 2 - Телефонный звонок
  • 3 - СМИ
Полеotherstate указывает, подключена ли другая сторона бинауральных устройств. Значение поля равно 1, если подключено другое периферийное устройство, в противном случае значение равно 0.

Периферийное устройство не должно запрашивать обновления соединения до получения кода операции «Stop» .
2 «Stop» Никто Напишите ответ и ожидайте дополнительного уведомления о статусе через функцию AudioStatusPoint . Указывает периферийному устройству прекратить рендеринг звука. После этой остановки должна быть инициирована новая последовательность настройки звука, чтобы снова воспроизвести звук.
3 «Status»
  • uint8_t connected
Пишите без ответа Информирует подключенное периферийное устройство об обновлении состояния другого периферийного устройства. Связное поле указывает тип обновления:
  • 0 – другое периферийное устройство отключено.
  • 1 – Подключено другое периферийное устройство
  • 2 — Обновление параметров соединения LE произошло в любом соединении.

Аудиостатуспоинт

Поле отчета о состоянии точки управления звуком

Коды операций Описание
0 Статус ОК
-1 Неизвестная команда
-2 Недопустимые параметры

Реклама сервиса ASHA GATT

UUID службы должен быть в рекламном пакете. В объявлении или в кадре ответа на сканирование периферийные устройства должны иметь служебные данные:

Смещение байта Имя Описание
0 Длина AD >= 0x09
1 Тип AD 0x16 (служебные данные — 16-битный UUID)
2-3 UUID службы 0xFDF0 (с прямым порядком байтов)

Примечание. Это временный идентификатор.
4 Версия протокола 0x01
5 Возможность
  • 0 — левая (0) или правая (1) сторона
  • 1 – одиночное (0) или двойное (1) устройство.
  • 2 — устройство поддерживает CSIS (<0: не поддерживается, 1: поддерживается)
  • 3-7 – зарезервировано. Эти биты должны быть равны нулю.
6-9 Усеченный HiSyncID Четыре младших байта HiSyncId . Эти байты должны быть самой случайной частью идентификатора.

Периферийные устройства должны иметь тип данных «Полное локальное имя» , который указывает название слухового аппарата. Это имя будет использоваться в пользовательском интерфейсе мобильного устройства, чтобы пользователь мог выбрать нужное устройство. Имя не должно указывать левый или правый канал, поскольку эта информация предоставляется в DeviceCapabilities .

Если периферийные устройства помещают имя и типы данных службы ASHA в один и тот же тип кадра (ADV или SCAN RESP), то два типа данных («Полное локальное имя» и «Служебные данные для службы ASHA») должны появиться в одном кадре. Это позволяет сканеру мобильного устройства получать оба данных в одном и том же результате сканирования.

Во время первоначального сопряжения важно, чтобы периферийные устройства размещали объявления с достаточно высокой скоростью, чтобы мобильное устройство могло быстро обнаружить периферийные устройства и подключиться к ним.

Синхронизация левого и правого периферийных устройств

Для работы Bluetooth на мобильных устройствах Android за синхронизацию отвечают периферийные устройства. Воспроизведение на левом и правом периферийных устройствах необходимо синхронизировать по времени. Оба периферийных устройства должны одновременно воспроизводить аудиосэмплы из источника.

Периферийные устройства могут синхронизировать свое время, используя порядковый номер, добавляемый к каждому пакету аудиоданных. Центральное устройство гарантирует, что аудиопакеты, которые должны воспроизводиться одновременно на каждом периферийном устройстве, имеют одинаковый порядковый номер. Порядковый номер увеличивается на единицу после каждого аудиопакета. Каждый порядковый номер имеет длину 8 бит, поэтому порядковые номера будут повторяться после 256 аудиопакетов. Поскольку размер каждого аудиопакета и частота дискретизации фиксированы для каждого соединения, два периферийных устройства могут определить относительное время воспроизведения. Дополнительные сведения об аудиопакете см. в разделе Формат и время аудиопакета .

Центральный блок помогает, обеспечивая триггеры для бинауральных устройств, когда может потребоваться синхронизация. Эти триггеры информируют каждое периферийное устройство о состоянии сопряженного периферийного устройства всякий раз, когда происходит операция, которая может повлиять на синхронизацию. Триггерами являются:

  • В рамках команды «Start» AudioControlPoint выдается текущее состояние подключения другой стороны бинауральных устройств.
  • Всякий раз, когда на одном периферийном устройстве происходит соединение, отключение или обновление параметров соединения, команда AudioControlPoint «Status» отправляется на другую сторону бинауральных устройств.

Формат и синхронизация аудиопакета

Упаковка аудиокадров (блоков семплов) в пакеты позволяет слуховому аппарату получать синхронизацию из временных якорей канального уровня. Чтобы упростить реализацию:

  • Звуковой кадр всегда должен соответствовать интервалу соединения по времени. Например, если интервал соединения составляет 20 мс, а частота дискретизации — 16 кГц, то аудиокадр должен содержать 320 выборок.
  • Частота дискретизации в системе ограничена кратностью 8 кГц, чтобы всегда иметь целое число выборок в кадре, независимо от времени кадра или интервала соединения.
  • Байт последовательности должен добавлять аудиокадры в начало. Байт последовательности должен считаться с циклическим циклом и позволять периферийному устройству обнаруживать несоответствие или опустошение буфера.
  • Звуковой кадр всегда должен укладываться в один пакет LE. Звуковой кадр должен быть отправлен как отдельный пакет L2CAP. Размер LE LL PDU должен быть:
    размер аудиоданных + 1 (счетчик последовательностей) + 6 (4 для заголовка L2CAP, 2 для SDU)
  • Событие подключения всегда должно быть достаточно большим, чтобы содержать 2 аудиопакета и 2 пустых пакета для подтверждения, чтобы зарезервировать полосу пропускания для повторной передачи. Обратите внимание, что аудиопакет может быть фрагментирован контроллером Bluetooth центрального устройства. Периферийное устройство должно иметь возможность принимать более двух фрагментированных аудиопакетов за одно событие соединения.

Чтобы обеспечить центральному устройству некоторую гибкость, длина пакета G.722 не указывается. Длина пакета G.722 может меняться в зависимости от интервала соединения, установленного центральным устройством.

Формат выходного октета G.722 ссылается на Rec. ITU-T G.722 (09/2012) раздел 1.4.4 «Мультиплексор»

Для всех кодеков, которые поддерживает периферийное устройство, периферийное устройство должно поддерживать указанные ниже параметры подключения. Это неполный список конфигураций, которые может реализовать центральная система.

Кодек Битрейт Интервал подключения Длина CE (1M/2M PHY) Размер аудиополезной нагрузки
G.722 @ 16 кГц 64 кбит/с 20 мс 5000/3750 сша 160 байт

Запуск и остановка аудиопотока

Перед запуском аудиопотока центральный процессор опрашивает периферийные устройства и устанавливает общий кодек-знаменатель. Затем настройка потока выполняется в следующей последовательности:

  1. Читается PSM и, опционально, RenderDelay. Эти значения могут кэшироваться центральным хранилищем.
  2. Канал CoC L2CAP открыт – периферийное устройство первоначально должно предоставить 8 кредитов.
  3. Выдается обновление соединения для переключения ссылки на параметры, необходимые для выбранного кодека. Централизованное управление может выполнить это обновление соединения до соединения CoC на предыдущем этапе.
  4. И центральный, и периферийный хост ждут события завершения обновления.
  5. Перезапустите аудиокодер и сбросьте счетчик последовательности пакетов на 0. На AudioControlPoint выдается команда «Start» с соответствующими параметрами. Перед потоковой передачей центральное устройство ожидает успешного уведомления о статусе предыдущей команды «Start» от периферийного устройства. Это ожидание дает периферийному устройству время подготовить конвейер воспроизведения звука. Во время потоковой передачи звука реплика должна быть доступна при каждом событии подключения, даже если текущая задержка реплики может быть ненулевой.
  6. Периферийное устройство берет первый аудиопакет из своей внутренней очереди (порядковый номер 0) и воспроизводит его.

Централ выдает команду «Стоп» для закрытия аудиопотока. После этой команды периферийное устройство не обязательно должно быть доступно при каждом событии подключения. Чтобы возобновить потоковую передачу звука, выполните описанную выше последовательность действий, начиная с шага 5. Если центральный компьютер не осуществляет потоковую передачу звука, он все равно должен поддерживать соединение LE для служб GATT.

Периферийное устройство не должно отправлять обновление соединения центральному устройству. Для экономии энергии центральный процессор может выдать обновление подключения периферийному устройству, когда оно не передает потоковое аудио.