Аудио переключатель
Поскольку пользователи все чаще используют несколько устройств-источников звука для выполнения своих повседневных задач, растет спрос на более простое решение для управления использованием гарнитуры на разных устройствах. Переключатель звука плавно переключает соединения гарнитуры между устройствами в зависимости от активности пользователя (например, запуск фильма) и приоритетных событий (например, входящий вызов).
Принципы UX
- Переключение соединения должно быть быстрым и основанным на действиях пользователя.
- Переключение соединений должно быть прозрачным для пользователей, позволяя пользователям контролировать/откатывать, если переключение нежелательно.
- При переключении следует соблюдать конфиденциальность пользователя.
Роли
Audio Switch Seeker : Seeker — это устройство-источник звука (например, телефон или планшет), которое ищет ближайшую гарнитуру для подключения, когда это возможно.
Поставщик аудиопереключателя : обычно поставщиком является гарнитура, сообщающая о своем присутствии и состоянии соединения, чтобы Искатели могли принять решение о переключении.
Обзор требований
Для достижения умного переключения Провайдеры должны соблюдать следующие требования:
Имя | Описание | Требования | Обязательный? |
---|---|---|---|
Сканирование страницы | Принять новый запрос на соединение от другого Искателя при наличии существующего соединения. Для одноточечных провайдеров:
| Для повышения производительности необходим режим сканирования страниц с низкой задержкой (интервал сканирования не должен превышать 640 мс). Чтобы найти компромисс между временем автономной работы и производительностью переключения, Провайдер может иметь режим сканирования страниц по умолчанию для большинства случаев (режим пониженного энергопотребления, интервал сканирования не должен превышать 1280 мс). Но режим с низкой задержкой необходимо использовать в следующих ситуациях:
| Обязательный |
История подключений | Чтобы вернуться к предыдущему соединению и возобновить воспроизведение, если это возможно. Обратное переключение будет инициировано связью через API потока сообщений. Событие приостановки звука должно быть включено в запись для возобновления воспроизведения, если это применимо. | Ведение истории подключений и внедрение API потока сообщений. | Обязательный |
Статус подключения | Искателям необходимо принять решение о переключении соединения. Статус соединения включает в себя:
| Включите статус соединения в рекламу BLE и поток сообщений. | Обязательный |
Изменение возможностей среды выполнения | Переключение звука можно включить путем обновления прошивки поставщика, поэтому возможности необходимо синхронизировать между Seeker и поставщиком во время выполнения. | Внедрите API-интерфейсы потока сообщений для доступа к возможностям среды выполнения. | Обязательный |
Настраиваемые правила переключения | Позвольте Seeker настроить приоритет между существующей активной потоковой передачей звука и новыми запросами потоковой передачи звука через настройки пользовательских предпочтений. Например, переключатель аудиопереключателя Seeker может предоставлять настройки пользовательского интерфейса, позволяющие пользователям включать/отключать автоматическое переключение между потоковой передачей мультимедиа и вызовом. Переключатель звука Seeker установит и получит правило переключения через поток сообщений. | Только многоточечные провайдеры. Внедрите API-интерфейсы потока сообщений, чтобы обеспечить возможность настройки правил переключения между подключенными устройствами. | Необязательный |
Активное переключение устройств | Позвольте Audio Switch Seeker имитировать переключение звука между подключенными устройствами. На стороне Audio Switch Seeker может быть пользовательский интерфейс, позволяющий пользователям легко переключаться между подключенными устройствами. | Только многоточечные провайдеры. Внедрите API-интерфейсы потока сообщений для Audio Switch Seeker, чтобы определить активный источник звука между подключенными устройствами. | Обязательный |
Уведомление о многоточечном переключении | Пусть Искатель переключателя аудио покажет уведомление о переключении. | Только многоточечные провайдеры. Внедрите API-интерфейсы потока сообщений для уведомления подключенных искателей аудиокоммутатора о выполнении многоточечного переключения. | Обязательный |
Рекламная нагрузка
Провайдер должен включить свой текущий статус подключения в рекламу, созданную на основе данных учетной записи Fast Pair, описанных в разделе «Реклама: когда невозможно обнаружить» .
Обратите внимание, что версия таблицы 4.2 — 0x1.
Поле состояния соединения
Октет | Тип данных | Описание | Ценить | Обязательный? |
---|---|---|---|---|
0 | uint8 | Длина и тип поля 0bLLLLTTTT
| 0bLLLL0101
| Обязательный |
1 | uint8 | Состояние соединения 0bHAFRSSSS
| 0bHAFRSSSS
| Обязательный |
2 | uint8 | Пользовательские данные В настоящее время он содержит только тип контента, который используется для описания использования текущего потокового аудио. Искатель отправит его Провайдеру. | Значение отправляется от Искателя текущей активной потоковой передачи Поставщику через поток сообщений. 0, если текущая активная потоковая передача не от Seeker. | Обязательный |
3 - вар | Растровое изображение подключенных устройств Растровое изображение, показывающее, какие устройства в данный момент подключены к поставщику. Все связанные устройства располагаются по порядку: один бит соответствует одному связанному устройству. Длина будет зависеть от количества подключенных устройств Провайдера. | Отображенный бит установлен в 1, если устройство в данный момент подключено к провайдеру, в противном случае — в 0. Подробности см. в разделе Растровое изображение подключенного устройства. | Необязательный |
Таблица 4.1: Необработанные данные поля состояния соединения
Флаги подключения
0bH = при обнаружении головы
- 1, сейчас на голове
- 0, иначе нет на голове или нет датчика OHD
0bA = доступность соединения
- 1, есть доступное соединение
- 0, иначе
0bF = режим фокусировки
- 1, теперь в сфокусированном режиме переключение соединений не разрешено для использования мультимедиа, т. е. нет переключения с A2DP на A2DP.
- 0, иначе
0bR = автоматическое повторное подключение
- 1, если текущее соединение автоматически переподключается провайдером, то есть оно не подключается пользователями (для многоточечного соединения, если одно из существующих соединений переподключается автоматически, ему должно быть присвоено значение 1)
- 0, иначе
Состояние соединения
- 0x0: нет соединения
- 0x1: пейджинг
- 0x2: подключено, но нет передачи данных
- 0x3: Передача неаудиоданных (только при переключении, если нет, с использованием 0xF)
- 0x4: потоковая передача A2DP, AVRCP не применимо.
- 0x5: потоковая передача A2DP и воспроизведение AVRCP.
- 0x6: потоковая передача HFP (телефонный/voip-вызов), включая внутриполосную и внеполосную мелодию звонка.
- 0x7: LE audio — потоковая передача мультимедиа без контроля
- 0x8: LE audio — потоковая передача мультимедиа с управлением
- 0x9: LE audio — потоковая передача вызовов
- 0xA: LE аудио — трансляция
- 0xF: временно отключить переключатель подключения (например, обновление прошивки)
Тип аудиоконтекста LE и состояние подключения
Рекомендуем, чтобы поставщик аудио LE обрабатывал все типы контекста, указанные в Assigned Numbers 6.12.3 (если только поставщик явно не поддерживает данный тип контекста), и сопоставлял тип контекста с состоянием соединения, как показано ниже.
- Разговорный: 0x9
- Медиа: 0x8
- Игра: 0x7
- Инструкция: 0x7
- Голосовые помощники: 0x9
- В прямом эфире: 0x9
- Звуковые эффекты: 0x2
- Уведомления: 0x2
- Рингтон: 0x9
- Оповещения: 0x7
- Аварийная сигнализация: 0x9
Для сценария смешанного типа контекста LE Audio, такого как воспроизведение мультимедиа во время вызова, провайдер должен использовать состояние соединения с наивысшим приоритетом, т. е. использовать 0x9 (вызов) для вышеуказанного сценария вместо 0x8 (медиа).
Растровое изображение подключенного устройства
Чтобы избежать нежелательного переключения соединения, Seeker может потребоваться знать, к какому устройству(ам) в данный момент подключена гарнитура. Например, когда гарнитура подключена к телефону, пользователь не хочет, чтобы его отвлекало переключение соединения, когда кто-то из членов его семьи запускает YouTube на планшете.
Обратите внимание, что это растровое изображение является анонимным, Искатель не может знать, какие другие устройства связаны с Поставщиком. Например, возьмем 5 связанных устройств:
- 0: ноутбук (0bx0000000)
- 1: телефонА (0b0x000000)
- 2: телефонБ (0b00x00000)
- 3: планшет (0b000x0000)
- 4: ТВ (0b0000x000)
Если в настоящее время подключены ноутбук и планшет, значение растрового изображения будет 0b10010000. Изменение порядка приемлемо, если оно неизбежно, например, когда пользователи выполняют сброс настроек гарнитуры до заводских настроек или когда количество подключенных устройств достигает верхнего предела.
Случайная разрешимая реклама
Чтобы избежать отслеживания и обеспечить соблюдение конфиденциальности пользователей, Поставщик должен повернуть и зашифровать поле с помощью ключа учетной записи с использованием AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
где
Ключ получается из используемого ключа учетной записи , который определен в следующем разделе.
Ключ генерируется функцией HKDF, IETF RFC 5869, с использованием хеш-функции SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
Здесь провайдер должен использовать исходный ключ учетной записи, т.е. первый байт ключа равен 0x04 и не включен в шаблон использования.
IV (начальный вектор) — это 2-байтовая соль данных ключа учетной записи с заполнением нулями, т. е. IV — это concat (соль, 14-байтовые НУЛИ).
Необработанные данные о состоянии соединения определены в таблице 4.1 . Если состояние соединения меняется, соль и RPA должны быть повторно созданы в один и тот же период времени объявления.
Это приведет к тому, что поле статуса зашифрованного соединения будет вращаться одновременно с изменением данных ключа учетной записи.
Реклама BLE будет структурирована следующим образом:
Октет | Тип данных | Описание | Ценить | Обязательный? |
---|---|---|---|---|
0 | uint8 | Версия и флаги | 0x10 | Обязательный |
1 - т | Ключевые данные учетной записи | варьируется | Обязательный | |
т+1 - с | Данные батареи | варьируется | Необязательный | |
s+1 - вар | Случайные разрешимые данные | варьируется | Обязательно, если список ключей учетной записи не пуст, в противном случае исключено. |
Таблица 4.2: Объявление BLE со случайными разрешимыми данными
Случайные разрешимые данные содержат:
Октет | Тип данных | Описание | Ценить | Обязательный? |
---|---|---|---|---|
0 | uint8 | Длина и тип поля 0bLLLLTTTT
| 0bLLLL0110
| Обязательный |
1 - вар | Зашифрованные данные | варьируется | Обязательный |
Таблица 4.2.1: Случайные разрешимые данные
Например, если случайные разрешимые данные содержат зашифрованное поле состояния соединения, расшифрованным результатом будет поле состояния соединения .
Чтобы предотвратить несанкционированный доступ, приведенные выше данные ключа учетной записи следует слегка изменить, когда случайные разрешимые данные включены в рекламное объявление. Обычно при построении фильтра ключа учетной записи значение V создается путем объединения фильтра ключа учетной записи с солью. Вместо этого, когда также объявляются случайные разрешимые данные, значение V должно быть построено как:
V = concat(account_key, salt, random_resolvable_data)
Если объявляются как данные батареи, так и случайные разрешимые данные, V следует построить как:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Используется ключ учетной записи
Переключение соединения осуществляется на основе учетной записи, поэтому поставщик должен включить информацию об учетной записи текущего соединения в объявление BLE. Если текущее подключенное устройство является Искателем аудиопереключателя, Поставщик должен иметь возможность получить ключ учетной записи, связанный с этим Искателем, и использовать этот ключ учетной записи для шифрования поля состояния соединения. Если подключенный источник звука не является переключателем Audio Seeker, поставщику следует использовать ключ учетной записи, который использовался последним.
Перед вычислением фильтра ключей учетной записи Поставщик должен изменить первый байт ключей учетной записи, включив в нее один из следующих шаблонов использования:
- 0b00000100
Этот ключ учетной записи не используется.
Это значение по умолчанию (см. Ключ учетной записи ). - 0b00000101
Этот ключ учетной записи является самым последним использованным ключом учетной записи.
Поле статуса подключения шифруется этим ключом учетной записи. Информация о ключе учетной записи о текущем состоянии подключения отсутствует. Это может означать, что устройства не подключены или подключенное устройство не является устройством поиска переключателя аудио. - 0b00000110
Этот ключ учетной записи является используемым ключом учетной записи.
Поле статуса подключения шифруется этим ключом учетной записи, и текущее подключенное устройство связано с этим ключом учетной записи.
Схема полезной нагрузки аудиопереключателя
На рисунке ниже показана схема полезной нагрузки аудиопереключателя.
Сообщения
При подключении Искатель и Поставщик могут использовать поток сообщений для синхронизации возможности переключения аудио, запуска переключения соединения, установки и получения предпочтений переключения, уведомления о состоянии соединения и т. д. Мы создаем группу сообщений и коды сообщений, специфичные для переключателя звука, как показано ниже.
Имя группы сообщений | Ценить |
---|---|
Аудио переключатель | 0x07 |
Дополнительные сведения для каждого кода сообщения приведены в следующих разделах.
Кодовое имя сообщения | Ценить | Только многоточечный | Отправитель | Ответчик | Шифровать | МАК | ПОДТВЕРЖДЕНИЕ |
---|---|---|---|---|---|---|---|
Получите возможность переключателя звука | 0x10 | Н | Оба | Оба, через код 0x11 | Н | Н | Н |
Возможность уведомления о переключателе звука | 0x11 | Н | Оба | Оба | Н | Да | Да |
Установить многоточечное состояние | 0x12 | Да | Искатель | Поставщик | Н | Да | Да |
Установить предпочтения переключения | 0x20 | Да | Искатель | Поставщик | Н | Да | Да |
Получить предпочтения переключения | 0x21 | Да | Искатель | Провайдер, по коду 0x22 | Н | Н | Н |
Уведомить о переключении предпочтений | 0x22 | Да | Поставщик | Искатель | Н | Н | Н |
Переключить активный источник звука (на подключенное устройство) | 0x30 | Да | Искатель | Поставщик | Н | Да | Да |
Переключиться обратно | 0x31 | Н | Искатель | Поставщик | Н | Да | Да |
Уведомить о событии многоточечного переключения | 0x32 | Да | Поставщик | Искатель | Н | Н | Н |
Получить статус подключения | 0x33 | Да | Искатель | Провайдер, через код 0x34 | Н | Н | Н |
Уведомлять о состоянии соединения | 0x34 | Да | Поставщик | Искатель | Да | Н | Н |
Уведомить аудиопереключатель инициировал соединение | 0x40 | Н | Искатель | Поставщик | Н | Да | Да |
Укажите используемый ключ учетной записи | 0x41 | Н | Искатель | Поставщик | Н | Да | Да |
Отправить пользовательские данные | 0x42 | Н | Искатель | Поставщик | Н | Да | Да |
Установить цель отброшенного соединения | 0x43 | Да | Искатель | Поставщик | Н | Да | Да |
Таблица 4.3: Сообщения переключения звука
MAC-адрес аудиопереключателя. Сообщения.
Чтобы обеспечить аутентификацию сообщения, все сообщения переключения аудио с дополнительными данными, отправляемые от Искателя к Поставщику, требуют кода аутентификации сообщения . Когда получено сообщение с MAC, его следует подтвердить , чтобы Искатель знал, отреагировал ли Провайдер на сообщение.
Если аутентификация сообщения прошла успешно, Провайдер должен отправить ACK для сообщения:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Благодарность | 0xFF |
1 | uint8 | ПОДТВЕРЖДЕНИЕ | 0x01 |
2–3 | uint16 | Дополнительная длина данных | варьируется |
4 | uint8 | Аудио переключатель | 0x07 |
5 | uint8 | Код сообщения о переключении звука | варьируется |
6 - с | Дополнительные данные | варьируется |
В случае неудачи Провайдер должен отправить NAK для сообщения:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Благодарность | 0xFF |
1 | uint8 | НАК | 0x02 |
2–3 | uint16 | Дополнительная длина данных | 0x0003 |
4 | uint8 | Причина ошибки | варьируется |
5 | uint8 | Аудио переключатель | 0x07 |
6 | uint8 | Код сообщения о переключении звука | варьируется |
Обратите внимание: если поставщик является отправителем, MAC не требуется.
Получите возможность переключателя звука
И поставщик аудиокоммутатора, и искатель могут проверить, поддерживает ли подключенный искатель/провайдер Fast Pair переключатель аудио или нет, используя следующее сообщение:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Получите возможность переключателя звука | 0x10 |
2–3 | uint16 | Дополнительная длина данных | 0 |
Таблица 4.3.1.0: Получение возможностей переключателя звука
Возможность уведомления о переключателе звука
Получив возможность получения кода сообщения переключателя аудио , искатель/поставщик переключателя аудио ответит одним из следующих флагов:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Возможность уведомления о переключателе звука | 0x11 |
2–3 | uint16 | Дополнительная длина данных | 20, если это отправлено Искателем 4, если это отправлено провайдером |
4–5 | uint16 | Код версии аудиопереключателя | Ненулевое значение означает, что он поддерживает переключатель звука. Код текущей версии (с усилением безопасности) — 0x0102. 0x0000 или отсутствие ответа в течение 1 секунды означает, что переключатель звука не поддерживается на этом устройстве. |
6–7 | флаги | Флаги возможности переключения звука провайдера Если это отправлено Seeker, эти два байта следует игнорировать. | варьируется См. Флаги возможности переключения звука. |
8–15 | Номер сообщения Требуется только тогда, когда это отправлено Искателем | варьируется | |
16 - 23 | Код аутентификации сообщения Требуется только тогда, когда это отправлено Искателем | варьируется |
Таблица 4.3.1.1: Возможность уведомления переключателя звука
Флаги возможности переключения звука
Бит 0 (октет 6, старший бит): состояние переключателя звука.
- 1, если состояние переключателя звука включено
- 0, иначе
Бит 1: возможность многоточечной настройки
- 1, если устройство поддерживает многоточечную связь и его можно включать и выключать.
- 0, в противном случае (не поддерживает многоточечное соединение или многоточечное соединение всегда включено)
Бит 2: текущее состояние многоточечного режима
- 1, если многоточка включена
- 0, иначе
Бит 3: обнаружение попадания на голову
- 1, если это устройство поддерживает обнаружение присутствия на голове (даже если обнаружение присутствия на голове сейчас отключено)
- 0, иначе
Бит 4: текущее состояние обнаружения на головке
- 1, если включено обнаружение присутствия на голове
- 0, в противном случае (не поддерживает обнаружение присутствия или обнаружение присутствия отключено)
Все остальные биты зарезервированы, по умолчанию 0.
Установить многоточечное состояние
В устройствах Audio Switch Seekers мы можем предоставить пользователям возможность включать и выключать функцию многоточечной связи. Искатель установит многоточечное состояние для провайдера, используя следующее сообщение:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Установить многоточечное состояние | 0x12 |
2–3 | uint16 | Дополнительная длина данных | 17 |
4 | uint8 | Многоточечное состояние | 0: отключить многоточечное соединение 1: включить многоточечное соединение |
5–12 | Номер сообщения | варьируется | |
13–20 | Код аутентификации сообщения | варьируется |
Таблица 4.3.1.2: Настройка многоточечного состояния
Установить предпочтения переключения
Переключатель аудио Искатели могут изменить предпочтения переключения многоточечного соединения и установить их для провайдера, используя следующее сообщение:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Установить предпочтения переключения | 0x20 |
2–3 | uint16 | Дополнительная длина данных | 18 |
4 | флаги | Переключение предпочтений | варьируется См. флаг предпочтения многоточечного переключения. |
5 | Расширенные настройки переключения Этот байт зарезервирован, значение по умолчанию — 0. | варьируется | |
6–13 | Номер сообщения | варьируется | |
14 - 21 | Код аутентификации сообщения | варьируется |
Таблица 4.3.2.0: Установка предпочтений переключения
Флаг предпочтения многоточечного переключения
- Бит 0 (старший бит): A2DP против A2DP (по умолчанию 0)
- Бит 1: HFP против HFP (по умолчанию 0)
- Бит 2: A2DP против HFP (по умолчанию 0)
- Бит 3: HFP против A2DP (по умолчанию 1)
- Биты 4–7: зарезервированы.
- Выше представлено как «запрос нового профиля» и «текущий активный профиль».
- 0 для отсутствия переключения
- 1 для переключения
Получить предпочтения переключения
Искатели переключения аудио могут запросить у провайдера предпочтения переключения многоточечного соединения, используя следующее сообщение:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Получить конфигурацию переключения | 0x21 |
2–3 | uint16 | Дополнительная длина данных | 0 |
Таблица 4.3.2.1: Получение предпочтений переключения
Уведомить о переключении предпочтений
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Уведомить о переключении предпочтений | 0x22 |
2–3 | uint16 | Дополнительная длина данных | 2 |
4 | флаги | Переключение флагов предпочтений | варьируется См. флаг предпочтения многоточечного переключения. |
5 | Расширенные настройки переключения Этот байт зарезервирован, значение по умолчанию должно быть 0. | варьируется |
Таблица 4.3.2.2: Предпочтение переключения уведомлений
Переключить активный источник звука (на подключенное устройство)
Переключение аудио Искатели могут запросить многоточечного провайдера переключить активный источник звука между подключенными устройствами, используя следующее сообщение:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Переключить активный источник звука (на подключенное устройство) | 0x30 |
2–3 | uint16 | Дополнительная длина данных | 17 |
4 | флаги | Переключение флагов событий активного источника звука | варьируется См. событие переключения активного источника звука. |
5–12 | Номер сообщения | варьируется | |
13–20 | Код аутентификации сообщения | варьируется |
Таблица 4.3.3.0: Переключение активного источника звука (на подключенное устройство)
Переключение события активного источника звука
- Бит 0 (старший бит): 1 переключение на это устройство, 0 переключение на второе подключенное устройство.
- Бит 1: 1 возобновляет воспроизведение при переключении на устройство после переключения, в противном случае 0. Возобновление воспроизведения означает, что Поставщик отправляет Искателю уведомление PLAY через профиль AVRCP. Если предыдущее состояние (до отключения) не было PLAY, Провайдеру следует игнорировать этот флаг.
- Бит 2: 1 отклонить SCO на выключенном устройстве, 0 в противном случае
- Бит 3: 1 отключает Bluetooth на выключенном устройстве, в противном случае 0.
- Биты 4–7: зарезервированы.
Искатели переключения аудио не всегда могут правильно знать свое состояние, поэтому поставщик может получить сообщение «переключиться на это устройство», когда Искатель уже является активным устройством. В этом случае, чтобы отобразить правильный пользовательский интерфейс на Seeker, поставщик может отправить NAK с причиной ошибки 0x4 — действие резервного устройства.
Для поставщика аудио LE, у которого есть более одного члена набора, поставщик должен отключить всех участников от Seeker, в противном случае стек Bluetooth Seeker повторно подключится к поставщику.
Переключиться обратно (на отключенное устройство)
Если переключение соединения нежелательно, пользователи могут отменить переключение, а в определенных сценариях имеет смысл восстановить аудиосоединение, чтобы свести к минимуму прерывание. Искатель будет использовать приведенное ниже сообщение, чтобы инициировать обратное переключение:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Переключиться обратно (на отключенное устройство) | 0x31 |
2–3 | uint16 | Дополнительная длина данных | 17 |
4 | uint8 | Переключить событие назад | варьируется 0x01: переключиться обратно 0x02: переключиться назад и возобновить воспроизведение. |
5–12 | Номер сообщения | варьируется | |
13–20 | Код аутентификации сообщения | варьируется |
Таблица 4.3.3.1: Переключиться обратно (на отключенное устройство)
Для многоточечных поставщиков, чтобы выполнить переключение соединения, поставщик может разорвать соединение с одним устройством-источником звука и приостановить аудиосеанс на другом источнике звука. Например, предположим, что многоточечная гарнитура подключена к планшету и третьему поддерживаемому устройству переключения звука. Пользователь смотрит видео на планшете, когда на его телефон поступает входящий звонок. Телефон активирует переключатель подключения на гарнитуре, поэтому для подключения к телефону необходимо разорвать соединение третьего устройства, а также приостановить сеанс мультимедиа на планшете, чтобы получить мелодию звонка с телефона. Если пользователь отклоняет вызов, телефон может попросить гарнитуру «переключиться обратно и возобновить воспроизведение». После получения этого запроса гарнитура должна повторно подключиться к третьему устройству и возобновить воспроизведение приостановленного видео на планшете.
Уведомить о событии многоточечного переключения
Чтобы уведомить пользователей о происходящем событии многоточечного переключения, Audio Switch Seeker может отображать пользователям уведомление. Поставщик должен уведомить подключенных Искателей переключения аудио о событии переключения.
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Уведомить о событии многоточечного переключения Поставщик должен отправлять его на каждый коммутатор, включая Искатель переключателя аудио на Искатель, не поддерживающий аудио, Искатель, не поддерживающий аудио, на Искатель переключателя аудио и Искатель переключателя аудио на Искатель переключателя аудио. | 0x32 |
2–3 | uint16 | Дополнительная длина данных | варьируется |
4 | uint8 | Причина переключения Это значение должно определяться на основе состояния соединения . Для случаев использования LE Audio может оказаться полезным изучение сопоставления между типом контекста LE Audio и состоянием соединения . Например, состояние подключения, соответствующее голосовым помощникам, — 0x9 (LE аудио — потоковая передача вызовов). Таким образом, причиной переключения, инициированной голосовыми помощниками, должен быть 0x02. | варьируется 0x00: Не указано 0x01: Медиа (например, потоковая передача A2DP, потоковая передача мультимедиа LEA) 0x02: Вызов (например, потоковая передача HFP, потоковая передача вызовов LEA) |
5 | uint8 | Целевое устройство | варьируется 0x01: это устройство 0x02: другое подключенное устройство |
6 - н | utf8 | Имя целевого устройства если целевым устройством является Искатель аудиопереключателя, используйте имя, которому отправлен Искатель, в противном случае используйте имя BT, если это неприменимо, используя последние 2 байта его адреса. | варьируется |
Таблица 4.3.3.2: Уведомление о событии многоточечного переключения
Получить статус подключения
Искатель может получить текущий статус соединения от Провайдера:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Получить статус подключения | 0x33 |
2–3 | uint16 | Дополнительная длина данных | 0 |
Таблица 4.3.3.3: Получение статуса подключения
При получении этого сообщения Провайдер должен ответить кодом сообщения 0x34, уведомив о состоянии соединения .
Уведомить о состоянии соединения
Как определено в рекламной полезной нагрузке BLE, для многоточечных поставщиков, если статус соединения меняется, за исключением изменения рекламного пакета, поставщик должен также уведомить подключенных искателей, которые используют тот же ключ учетной записи, об изменении. Если Провайдер подключен к Искателю переключателя аудио и Искателю, не являющемуся аудиопереключателем, если Искатель, не являющийся аудиопереключателем, активен, Провайдер также должен уведомить подключенный Искатель переключателя аудио о состоянии соединения (используя ключ учетной записи Искателя).
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Уведомлять о состоянии соединения | 0x34 |
2–3 | uint16 | Дополнительная длина данных | варьируется |
4 | uint8 | Флаг активного устройства | варьируется 0x00: этот Искатель пассивен, и активное устройство использует тот же ключ учетной записи. 0x01: этот Искатель является активным устройством. 0x02: этот искатель является пассивным, а активное устройство не является искателем переключателя аудио. |
5 - н | Статус зашифрованного соединения | варьируется | |
n+1 - n+8 | Номер сообщения | варьируется |
Таблица 4.3.3.4: Уведомление о состоянии соединения
Зашифрованное сообщение о состоянии соединения
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
где:
Ключ извлекается из используемого ключа учетной записи, см. «Случайное разрешаемое объявление» .
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV — concat(Session_nonce, Message_nonce)
Connection_status_raw_data = concat(connection_state, custom_data, linked_devices), который определен в рекламной полезной нагрузке BLE. Обратите внимание, что байт для длины и типа поля не должен включаться, поскольку здесь у нас есть код сообщения и длина данных.
Уведомить аудиопереключатель инициировал соединение
Переключатель звука Поставщикам может потребоваться знать, инициируется ли переключение соединения переключателем звука, чтобы иметь разные реакции, например, отключать наушники для событий переключения звука. Искатель отправляет сообщение, уведомляющее провайдера о том, что это соединение было соединением, инициированным переключателем аудио.
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Уведомить аудиопереключатель инициировал соединение | 0x40 |
2–3 | uint16 | Дополнительная длина данных | 17 |
4 | uint8 | Индикация подключения, инициированного аудиопереключателем | варьируется 0: это соединение не было вызвано переключателем звука. 1: это соединение было инициировано переключателем звука. |
5–12 | Номер сообщения | варьируется | |
13–20 | Код аутентификации сообщения | варьируется |
Таблица 4.3.4.0: Соединение, инициированное переключателем Notify Audio
Укажите используемый ключ учетной записи
Если с Поставщиком связано несколько ключей учетной записи Искателя (например, многопользовательских), Искатель будет использовать приведенное ниже сообщение, чтобы указать, какой ключ учетной записи используется.
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Укажите используемый ключ учетной записи | 0x41 |
2–3 | uint16 | Дополнительная длина данных | 22 |
4–9 | utf8 | Используемая строка | UTF8 («используется») |
10–17 | Номер сообщения | варьируется | |
18–25 | Код аутентификации сообщения | варьируется |
Таблица 4.3.4.1: Укажите используемый ключ учетной записи
Получив это сообщение, Поставщик может узнать, какой ключ учетной записи используется, проверив код аутентификации сообщения.
Отправить пользовательские данные
Активный переключатель Audio Switch Seeker может инкапсулировать информацию (например, об использовании аудио) аудиопотока в пользовательский байт данных и отправлять ее поставщику с помощью следующего сообщения:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Отправить пользовательские данные | 0x42 |
2–3 | uint16 | Дополнительная длина данных | 17 |
4 | uint8 | Пользовательские данные | варьируется |
5–12 | Номер сообщения | варьируется | |
13–20 | Код аутентификации сообщения | варьируется |
Таблица 4.3.4.2: Отправка пользовательских данных
После получения пользовательских данных Поставщик обновит рекламный пакет, включив в него пользовательские данные. Для многоточечного поставщика он также должен уведомить об изменении статуса соединения другой подключенный Искатель, используя тот же ключ учетной записи.
Установить цель отброшенного соединения
В многоточечных гарнитурах, если предпочтительное соединение, которое необходимо отключить, не используется последним, Искатели аудиопереключателя могут сообщить провайдеру, какое устройство следует отключить, используя следующее сообщение:
Октет | Тип данных | Описание | Ценить |
---|---|---|---|
0 | uint8 | Аудио переключатель | 0x07 |
1 | uint8 | Установить цель отброшенного соединения | 0x43 |
2–3 | uint16 | Дополнительная длина данных | 17 |
4 | uint8 | Целевое подключенное устройство, которое необходимо удалить | варьируется 1: это устройство |
5–12 | Номер сообщения | варьируется | |
13–20 | Код аутентификации сообщения | варьируется |
Таблица 4.3.4.3: Установка цели удаленного соединения
Эталонная реализация
См. встроенную библиотеку SDK Nearby для ознакомления с эталонной реализацией.