Поделиться через


Определенные корпорацией Майкрософт расширения Bluetooth HCI

Интерфейс Bluetooth Host-Controller (HCI) указывает все взаимодействия между хостом и радиоконтроллером Bluetooth. Спецификации Bluetooth позволяют определяемым поставщиком командам и событиям HCI обеспечить нестандартное взаимодействие между узлами и контроллерами. Корпорация Майкрософт определяет команды и события HCI для конкретного поставщика, используемые Windows. Средства реализации контроллера Bluetooth могут использовать эти расширения для реализации специальных функций.

Требования

Команды Bluetooth HCI определяются 16-разрядным кодом команды. Организация Bluetooth определяет значения в диапазоне 0x0000 через 0xFBFF. Поставщики определяют значения в диапазоне 0xFC00 через 0xFFFF, что позволяет использовать 1024 различные коды команд, назначенных поставщиком.

Поставщик должен выбрать значение определяемого корпорацией Майкрософт кода команды. Корпорация Майкрософт не может выбрать код команды и предположить, что ни один другой поставщик не использует код для конфликтующей цели. Небезопасно использовать команду для конкретного поставщика и полагаться на то, что контроллер отклонит её, если команда непонятна. Контроллер может интерпретировать команду как деструктивную операцию, например обновление встроенного ПО контроллера.

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

Уведомление стеках Windows Bluetooth о специфическом коде команды поставщика

Стек Bluetooth Windows считывает код команды производителя из раздела реестра VsMsftOpCode.

Раздел реестра VsMsftOpCode имеет тип REG_DWORD, а данные ключа — это конкретный код поставщика.

Чтобы указать конкретный код поставщика, используйте директиву AddReg в разделе DDInstall.HW в INF драйвера. Раздел "Добавить реестр" должен содержать следующее:

HKR,,"VsMsftOpCode",0x00010001,<Vendor Specific Opcode>

Пример:

[radio.NTamd64.HW]
AddReg=radio.NTamd64.HW.AddReg
[radio.NTamd64.HW.AddReg]
HKR,,"VsMsftOpCode",0x00010001,<Vendor Specific Opcode>

команды HCI, определяемые корпорацией Майкрософт

Команды HCI Описание
HCI_VS_MSFT_Read_Supported_Features Предоставляет растровое изображение, описывающее, какие функции, определенные корпорацией Майкрософт, поддерживает контроллер, и задает префикс для определенных корпорацией Майкрософт событий, возвращаемых контроллером.
HCI_VS_MSFT_Monitor_Rssi Запрашивается, чтобы контроллер начал мониторинг измеренного RSSI канала для указанного соединения и генерировал событие, когда измеренный RSSI соединения выходит за пределы указанных границ.
HCI_VS_MSFT_Cancel_Monitor_Rssi Отменяет ранее выпущенную команду HCI_VS_MSFT_Monitor_Rssi.
HCI_VS_MSFT_LE_Monitor_Advertisement Запрашивает, что контроллер запускает мониторинг рекламных объявлений, которые входят в указанный диапазон RSSI, а также удовлетворяют другим требованиям.
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Отменяет ранее выданную команду HCI_VS_MSFT_LE_Monitor_Advertisement.
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Задает состояние фильтров рекламы.
HCI_VS_MSFT_Read_Absolute_RSSI Считывает абсолютное значение параметра "Уровень сигнала" (RSSI) для соединения BR/EDR от контроллера.

Команды и подкоманды HCI, определённые компанией Microsoft

Контроллер считает, что существует только одна HCI-команда, специфичная для Microsoft. Набор команд, определенный корпорацией Майкрософт, расширяется с помощью кода opcode. Первый параметр команды, определенной корпорацией Майкрософт, — это опкод, который указывает подкоманду.

Контроллеры должны поддерживать HCI_VS_MSFT_Read_Supported_Features, чтобы поддерживать любые другие подкоманды Microsoft HCI. Поддержка других команд является необязательной и зависит от значений, возвращаемых HCI_VS_MSFT_Read_Supported_Features. Windows не отправляет подкоманды, определенные корпорацией Майкрософт, если контроллер не указывает на поддержку подкоманд через ответ на HCI_VS_MSFT_Read_Supported_Features.

HCI_VS_MSFT_Read_Supported_Features

HCI_VS_MSFT_Read_Supported_Features предоставляет растровое изображение, описывающее, какие функции, определенные корпорацией Майкрософт, поддерживает контроллер, и задает префикс для определенных корпорацией Майкрософт событий, возвращаемых контроллером.

Контроллер всегда должен быстро выполнить эту команду с событием "Завершено командой".

Приказ Код Параметры команды Возвращаемые параметры
HCI_VS_MSFT_Read_Supported_Features Выбранный базовый код Subcommand_opcode Статус
Subcommand_opcode,
Поддерживаемые функции
Microsoft_event_prefix_length,
Microsoft_event_prefix

Параметры команды

Subcommand_opcode (1 октет):

Ценность Описание параметра
0x00 Операционный код субкоманды для HCI_VS_MSFT_Read_Supported_Features.

Параметры_возврата

состояние (1 октет):

Ценность Описание параметра
0x00 Команда завершилась успешно.
0x01 – 0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе Коды ошибок в спецификации Bluetooth Core.

Subcommand_opcode (1 октет):

Ценность Описание параметра
0x00 Код операции подкоманды для HCI_VS_MSFT_Read_Supported_Features.

Supported_features (8 октетов):

Ценность Описание параметра
0x00000000 00000001 Контроллер поддерживает функцию мониторинга RSSI для подключений BR/EDR. Кроме того, контроллер поддерживает HCI_VS_MSFT_Read_Absolute_RSSI для чтения абсолютного значения RSSI подключения BR/EDR.
0x00000000 00000002 Контроллер поддерживает функцию мониторинга RSSI для подключений LE.
0x00000000 00000004 Контроллер поддерживает мониторинг RSSI устаревших объявлений LE.
0x00000000 00000008 Контроллер поддерживает мониторинг рекламы устаревших объявлений LE.
0x00000000 00000010 Контроллер поддерживает проверку допустимости общедоступных координат X и Y в кривой во время процесса связывания "Безопасный простой" для P-192 и P-256.
Дополнительные сведения см. в спецификации Bluetooth Core Erratum 10734.
0x00000000 00000020 Контроллер поддерживает непрерывный мониторинг объявлений LE, выполняемых параллельно с другими действиями радиосвязи, используя HCI_VS_MSFT_LE_Monitor_Advertisement [v1].
0x00000000 00000040 Зарезервировано.
0x00000000 00000080 Контроллер поддерживает разгрузку AVDTP и команды HCI_VS_MSFT_Avdtp_*, описанные в этом документе.
0x00000000 00000100 Зарезервировано.
0x00000000 00000200 Зарезервировано.
0x00000000 00000400 Контроллер поддерживает HCI_VS_MSFT_LE_Monitor_Advertisement [v2]. Кроме того, контроллер поддерживает непрерывный мониторинг рекламы LE, осуществляемый одновременно с другими радиосвязными действиями, используя HCI_VS_MSFT_LE_Monitor_Advertisement [v2].
0xFFFFFFFF FFFFFF00 Биты, зарезервированные для будущего определения. Должно быть равно нулю.

Microsoft_event_prefix_length (1 октет):

Ценность Описание параметра
0x00 до 0x20 Число байтов в поле префикса события Майкрософт, указанное в возвращенном Microsoft_event_prefix. Это число байтов константной информации в начале каждого события HCI, указанного корпорацией Майкрософт.

Microsoft_event_prefix (переменная длина):

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

HCI_VS_MSFT_Monitor_Rssi

HCI_VS_MSFT_Monitor_Rssi запрашивает, чтобы контроллер начал мониторинг силы сигнала (RSSI) для указанного соединения и сгенерировал событие, когда измеренная сила сигнала соединения выходит за пределы указанных границ.

Приказ Код Параметры команды Возвращаемые параметры
HCI_VS_MSFT_Monitor_Rssi Выбранный базовый код Subcommand_opcode,
Connection_Handle,
Порог высокой RSSI (RSSI_threshold_high)
RSSI_threshold_low,
Пороговое значение RSSI для низкого временного интервала
Период выборки RSSI
Статус
Subcommand_opcode

Контроллер должен оповещать хост о значении RSSI с помощью регулярно создаваемого события (на основе RSSI_sampling_period). Измеряемая связь RSSI должна быть абсолютным значением силы сигнала приемника в dBm для подключения BR/EDR.

В ответ на команду HCI_VS_MSFT_Monitor_Rssi контроллер должен создать событие Command Complete с состоянием равно нулю, если контроллер может начать мониторинг или ненулевое состояние в противном случае. Если значение состояния ненулевое, контроллер не должен создавать HCI_VS_MSFT_Rssi_Event в ответ на эту команду.

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

На этой диаграмме состояний показаны состояния перехода на контроллере при мониторинге RSSI подключения.

диаграмма состояния на контроллере, показывающая переходные состояния при контроле RSSI подключения.

Контроллер должен создать HCI_VS_MSFT_Rssi_Event, если уровень полученного RSSI больше или равен заданному RSSI_threshold_high. После создания этого события контроллер не должен создавать новый HCI_VS_MSFT_Rssi_Event, чтобы указать, что RSSI_threshold_high превышен до тех пор, пока он не создаст HCI_VS_MSFT_Rssi_Event, указывающий, что RSSI упал ниже RSSI_threshold_low.

Контроллер должен создать HCI_VS_MSFT_Rssi_Event, если полученный RSSI равен или меньше указанного RSSI_threshold_low по указанному RSSI_threshold_low_time_interval. После создания этого события контроллер не должен создавать новый HCI_VS_MSFT_Rssi_Event, чтобы указать, что RSSI упал под RSSI_threshold_low, пока не будет создано событие HCI_VS_MSFT_Rssi_Event, чтобы указать, что RSSI_threshold_high достигнут или превышен.

Если RSSI_sampling_period находится в диапазоне от 0x01 до 0xFE, контроллер должен регулярно генерировать HCI_VS_MSFT_Rssi_Event каждый RSSI_sampling_period. Это событие должно содержать среднее значение RSSI, рассчитанное за период выборки RSSI_sampling_period. Если RSSI_sampling_period 0x00 или 0xFF, контроллер не должен уведомлять хост периодически с HCI_VS_MSFT_Rssi_Event.

Параметры команды

Подкоманда_opcode (1 октет):

Ценность Описание параметра
0x01 Код операции подкоманды для HCI_VS_MSFT_Monitor_Rssi.

Connection_Handle (2 октета):

Ценность Описание параметра
0xXXXX Идентификатор подключения, RSSI которого необходимо отслеживать.

RSSI_threshold_high (1 октет):

Ценность Описание параметра
0xXX Максимальное ожидаемое значение RSSI. Контроллер создает событие, если наблюдаемый RSSI становится больше или равен этому значению.
Единица: dBm
Диапазон BR/EDR: от -128 до 127 (целое число со знаком)
Диапазон LE: -127 до 20 (целое число со знаком)

RSSI_threshold_low (1 байт):

Ценность Описание параметра
0xXX Минимальное ожидаемое значение RSSI. Контроллер создает событие, если наблюдаемый RSSI становится меньше или равен этому значению.
Единица: dBm
Обязательный диапазон для BR/EDR: от -128 до 127 (целое число со знаком)
Обязательный диапазон LE: от -127 до 20 (целое число со знаком)

RSSI_threshold_low_time_interval (1 байт)

Ценность Описание параметра
0x00 Зарезервированное значение.
N = 0xXXX Время в секундах, в течение которого значение RSSI должно быть ниже RSSI_threshold_low, прежде чем будет создано HCI_VS_MSFT_Rssi_Event.
Период времени = N * 1 секунда
Обязательный диапазон: 0x01 до 0x3C

RSSI_sampling_period (1 октет):

Ценность Описание параметра
0x00 Зарезервированное значение.
N = 0xXXX Интервал выборки в кратных 100 миллисекунд.
Период времени = N * 100 миллисекунд
Обязательный диапазон: 0x01 до 0xFE
0xFF Зарезервированное значение.

Параметры_возврата

Состояние (1 октет):

Ценность Описание параметра
0x00 Команда завершилась успешно.
0x01 до 0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе Коды ошибок в спецификации Bluetooth Core.
0x07 Контроллер должен возвращать Превышение объема памяти, если для обработки команды недостаточно памяти.
Код ошибки Не удалось выполнить команду. Дополнительные сведения см. в разделе Коды ошибок в спецификации Bluetooth Core.

Subcommand_opcode (1 октет):

Ценность Описание параметра
0x01 Код подкоманды для HCI_VS_MSFT_Monitor_Rssi.

События, созданные без маскировки

Контроллер должен незамедлительно создать событие «Завершение команды» при получении команды HCI_VS_MSFT_Monitor_Rssi. Если событие Command Complete возвращает состояние 0, контроллер должен создать HCI_VS_MSFT_Rssi_Event при возникновении одного из следующих условий.

  • Наблюдаемый RSSI для устройства по сравнению с RSSI_threshold_low_time_interval становится равным или меньше заданного значения RSSI_threshold_low.
  • Наблюдаемый RSSI для устройства становится больше или равен указанному значению RSSI_threshold_high.
  • RSSI_sampling_period действителен, и период выборки истекает.

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

HCI_VS_MSFT_Cancel_Monitor_Rssi

HCI_VS_MSFT_Cancel_Monitor_Rssi отменяет ранее выданную команду HCI_VS_MSFT_Monitor_Rssi. Контроллер должен быстро создать событие завершения команды в ответ на эту команду.

Приказ Код Параметры команды Возвращаемые параметры
HCI_VS_MSFT_Cancel_Monitor_Rssi Выбранный базовый код Subcommand_opcode,
Connection_Handle
Статус
Subcommand_opcode

Параметры команды

Subcommand_opcode (1 октет):

Ценность Описание параметра
0x02 Операционный код подкоманды для HCI_VS_MSFT_Cancel_Monitor_Rssi.

Connection_Handle (2 октета):

Ценность Описание параметра
0xXXXX Дескриптор подключения, RSSI которого должен быть отменен.

Параметры_возврата

Состояние (1 октет):

Ценность Описание параметра
0x00 Команда завершилась успешно.
0x01 до 0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе Коды ошибок в спецификации Bluetooth Core.

Подкоманда_опкод (1 октет)

Ценность Описание параметра
0x02 Код операции подкоманды для HCI_VS_MSFT_Cancel_Monitor_Rssi.

События, созданные без маскировки

Контроллер должен создать событие "Завершение команды" при получении команды HCI_VS_MSFT_Cancel_Monitor_RSSI.

Монитор_рекламы_HCI_VS_MSFT_LE

HCI_VS_MSFT_LE_Monitor_Advertisement запрашивает, что контроллер запускает мониторинг рекламных объявлений, которые входят в указанный диапазон RSSI, а также удовлетворяют одному из следующих условий:

  • Указанный шаблон можно сопоставить с полученным пакетом рекламы.
  • Указанный UUID можно сопоставить с полученным пакетом рекламы.
  • Указанный ключ разрешения личности (IRK) можно использовать для разрешения частного адреса устройства, от которого произошел рекламный пакет.
  • Указанный адрес Bluetooth можно сопоставить с полученным пакетом рекламы.

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

Приказ Код Параметры команды Возвращаемые параметры
HCI_VS_MSFT_LE_Monitor_Advertisement [версия 2] Выбранный базовый код Subcommand_opcode_v2,
RSSI_порог_высокий
Пороговое_значение_RSSI_низкий
Порог низкого уровня RSSI_интервал времени
Период выборки RSSI
Параметры_монитора
Настройки фильтрации отчётов о рекламе
Peer_device_address,
Тип_адреса_устройства_партнера
Peer_device_IRK,
Условие_тип
Параметры условий <>
Статус
Subcommand_opcode,
Ручка монитора
HCI_VS_MSFT_LE_Monitor_Advertisement [v1] Выбранный базовый код Subcommand_opcode_v1,
Порог RSSI высокий
Порог_RSSI_низкий (RSSI_threshold_low)
Интервал времени для низкого порога RSSI
RSSI_sampling_period,
Тип_условия
Параметры условий <>
Статус
Subcommand_opcode,
Монитор_Ручка

Контроллер должен создать событие "Завершить команду" в ответ на эту команду. Значение состояния должно быть равно нулю, если контроллер может начать мониторинг или ненулевое состояние в противном случае. Если контроллер не поддерживает мониторинг RSSI для объявлений LE, он должен игнорировать значения параметров RSSI_threshold_high, RSSI_threshold_low, RSSI_threshold_low_time_intervalи RSSI_sampling_period.

На этой диаграмме состояний показаны переходы состояния на контроллере при мониторинге уровня RSSI для рекламного сообщения.

диаграмма состояний , показывающая переходные состояния для HCI_VS_MSFT_LE_Monitor_Advertisement.

Контроллер должен начать мониторинг объявления только в том случае, если полученный RSSI больше или равен RSSI_threshold_high для конкретного устройства, и Monitor_options совпадают (см. ниже). Контроллер должен создать HCI_VS_MSFT_LE_Monitor_Device_Event с Monitor_state, установленным в 1, и Monitor_handle, назначенным как дескриптор для данного состояния, чтобы уведомить узел о том, что контроллер отслеживает это конкретное устройство с учетом состояния. Кроме того, контроллер должен передавать первый отчет об отслеживаемой рекламе на узел только в том случае, если совпадают Advertisement_report_filter_options (см. ниже).

Параметры мониторинга фильтра считаются совпадением согласно следующей логике (в псевдокоде):

MatchesCondition = (PDU Matches Condition Parameters)

IsAdvAMatch = ((Monitor_options bit 0 is set) && ((AdvA == Peer_device_address) && (TxAdd == Peer_device_address_type))) ||
    ((Monitor_options bit 1 is set) && (AdvA resolvable with Peer_device_IRK))

IsDirectedAdvAMatch = (TargetA is permitted based on the Scanning Filter Policy) &&
    (((Monitor_options bit 2 is set) && ((AdvA == Peer_device_address) && (TxAdd == Peer_device_address_type))) ||
        ((Monitor_options bit 3 is set) && (AdvA resolvable with Peer_device_IRK)))

IsDirectedTargetAMatch = (Monitor_options bit 4 is set) &&
    (TargetA is permitted based on the Scanning Filter Policy)

MonitorOptionsMatch = (MatchesCondition && IsAdvAMatch) ||
    IsDirectedAdvAMatch ||
    IsDirectedTargetAMatch ||
    ((Monitor_options bit 5 is set) && MatchesCondition)

В случае отслеживаемого рекламного объявления Advertisement_report_filter_options рассматриваются как совпадение на основе следующей логики (в псевдокоде):

IsDuplicateFilterSatisfied = (Advertisement_report_filter_options bit 0 is NOT set || PDU is not a duplicate)

ShouldGenerateLegacyReport = (Advertisement_report_filter_options bit 1 is set) &&
    (PDU is Legacy) &&
    MonitorOptionsMatch

ShouldGenerateExtendedReport = (Advertisement_report_filter_options bit 2 is set) &&
    (PDU is Extended) &&
    MonitorOptionsMatch

ShouldGenerateDirectedReport = (Advertisement_report_filter_options bit 3 is set) &&
    (PDU is Directed) &&
    MonitorOptionsMatch

AdvertisementReportFilterOptionsMatch = IsDuplicateFilterSatisfied &&
    (ShouldGenerateLegacyReport || ShouldGenerateExtendedReport || ShouldGenerateDirectedReport)

Контроллер должен прекратить мониторинг состояния , если RSSI полученных объявлений равен или меньше RSSI_threshold_low более RSSI_threshold_low_interval для конкретного устройства. Контроллер должен создать HCI_VS_MSFT_LE_Monitor_Device_Event с Monitor_state установлено значение 0, чтобы уведомить узел о том, что контроллер перестал отслеживать конкретное устройство для условия. После указания контроллера HCI_VS_MSFT_LE_Monitor_Device_Event с Monitor_state задано значение 0, контроллер не должен разрешать дальнейшим рекламным пакетам передаваться на хост для устройства, пока контроллер не уведомит хост, что RSSI для конкретного устройства поднялся до или выше RSSI_threshold_high для данного устройства при Условии.

Кроме того, контроллер должен создать HCI_VS_MSFT_LE_Monitor_Device_Event, установив Monitor_state в 0, чтобы уведомить хост о том, что контроллер остановил мониторинг устройства для условия , если указанный RSSI_threshold_low_time_interval истекает без получения рекламных пакетов от устройства. Если контроллер отслеживает устройство для обнаружения определенного состояния, то следующие утверждения являются истинными.

Если контроллер поддерживает мониторинг RSSI для расширенных объявлений LE без выборки, то контроллер должен передавать анонимные рекламные пакеты на узел, если значение RSSI для пакета больше или равно RSSI_threshold_high. Анонимные объявления не должны отслеживаться, и событие HCI_VS_MSFT_LE_Monitor_Device_Event не должно быть создано.

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

Контроллер должен поддерживать не менее 30 одновременных Monitor_handles, не менее 30 одновременных отслеживаемых устройств и не менее 20 одновременных отслеживаемых дублирующихся рекламных сообщений. Контроллер также должен быть способен выполнять непрерывную проверку LE в 10% цикле обязанностей.

Если разрешение адреса включено в контроллере и если узел намерен отслеживать удаленное устройство, при условии что его IRK успешно хранится в списке разрешения контроллера, то узел должен предоставить параметры Peer_Identity_Address и Peer_Identity_Address_Type из записи списка разрешения удаленного устройства в качестве параметров Peer_device_address и Peer_device_address_type соответственно.

RSSI_sampling_period Устаревшие объявления Расширенные объявления (неанонимные) Расширенные объявления (анонимные)
0x00 Контроллер должен распространять все полученные рекламные пакеты на узел для устройства согласно этому условию , если контроллер ранее не получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с Включить установлено на 0x00. Контроллер должен распространять рекламный пакет на хост, даже если полученный RSSI меньше или равен RSSI_threshold_low, пока RSSI_threshold_low_time_interval не истек для конкретного устройства в этом Условии. Значение RSSI этого пакета рекламы должно быть значением RSSI полученного объявления. Если контроллер поддерживает мониторинг RSSI для расширенных объявлений LE без выборки, поведение аналогично столбцу устаревших объявлений, за исключением того, что рекламный пакет определяется как все PDUs в рекламной цепочке. Если контроллер поддерживает мониторинг RSSI расширенных рекламных пакетов LE без выборки, он должен передавать все полученные пакеты на хост устройства при этом условии, если контроллер ранее не получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с параметром Enable, установленным в 0x00.
0x01 - 0xFE Контроллер должен распространять устаревшие рекламные пакеты на хост с периодичностью RSSI_sampling_period, если контроллер ранее не получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с Enable, установленным в 0x00. Значение RSSI, указанное для объявления, должно быть средним значением RSSI, полученным в течение этого интервала выборки. Если контроллер не получает рекламный пакет в течение периода выборки, то он не должен распространять рекламу хосту. Возможно, что RSSI_sampling_period меньше RSSI_threshold_low_time_interval, а все объявления, полученные во время RSSI_sampling_period, имеют RSSI ниже RSSI_threshold_low. Контроллер по-прежнему распространяет объявление со средним значением RSSI, полученным в течение этого интервала выборки. Если контроллер поддерживает мониторинг RSSI расширенных объявлений LE без выборки, контроллер должен вести себя так, как если бы RSSI_sampling_period был 0x00. Если контроллер поддерживает мониторинг RSSI расширенных объявлений LE без выборки, контроллер должен вести себя так, как если бы RSSI_sampling_period был 0x00.
0xFF Контроллер не должен позволять передавать дополнительные пакеты рекламы на хост для устройства в соответствии с условием , пока контроллер не уведомит хост о том, что RSSI конкретного устройства упал ниже RSSI_threshold_low в течение RSSI_threshold_low_time_interval для данного устройства в этом условии . Это уведомление выполняется путем создания HCI_VS_MSFT_LE_Monitor_Device_Event с Monitor_state равным 0. Если контроллер поддерживает мониторинг RSSI для расширенных объявлений LE без выборки, то поведение аналогично поведению в столбце для устаревших объявлений. Если контроллер поддерживает мониторинг RSSI расширенных объявлений LE без выборки, контроллер должен вести себя так, как если бы RSSI_sampling_period был 0x00.

Если контроллер ранее получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с параметром Enable, установленным равным 0x00, таймер выборки не должен быть остановлен. См. пример HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable для получения дополнительных сведений о фильтрах с периодом выборки. Если контроллер получает уникальные пакеты рекламы с одного устройства, он должен сопоставлять каждый пакет на соответствие условиям, хранящимся на контроллере.

Если контроллер получает пакет рекламы от устройства, который соответствует нескольким условиям, то контроллер должен создать HCI_VS_MSFT_LE_Monitor_Device_Event для каждого условия, которое соответствует, с Monitor_handle, установленным для условия, которое соответствует.

Если контроллер не может отслеживать значения RSSI для всех устройств в диапазоне, которые соответствуют условию , он продолжает отслеживать столько устройств, сколько это возможно. Решение о том, какие устройства следует отслеживать, будет зависеть от значений RSSI полученных объявлений. Контроллер должен отслеживать устройства с большей мощностью полученного сигнала.

Если контроллер уведомил узел о конкретном устройстве (A) и он отслеживает устройства с максимальной пропускной способностью оборудования, а если другое устройство (B) входит в диапазон с более высоким значением RSSI, контроллер должен уведомить узел о том, что он остановил мониторинг устройства (A) путем создания HCI_VS_MSFT_LE_Monitor_Device_Event с Monitor_state задано значение 0. Контроллер также должен создать HCI_VS_MSFT_LE_Monitor_Device_Event с Monitor_state установлен в значение 1, чтобы уведомить хост о том, что устройство (B) теперь отслеживается.

Тип условия и параметры условия

Параметр Condition_type указывает, является ли параметр Condition шаблоном, UUID, IRK или BD_ADDR.

Если параметр Condition_type задает шаблон, условие содержит два раздела, которые содержат количество шаблонов, присутствующих в условии, и данные шаблона.

Схема, иллюстрирующая расположение данных об условиях шаблона для HCI_VS_MSFT_LE_Monitor_Advertisement.

число шаблонов указывает количество шаблонов, которые необходимо сопоставить.

Формат данных шаблона следующий.

  • Длина указывает длину этого шаблона, включая тип данных и начальный байт шаблона.
  • тип AD указывает поле типа AD.
  • Начало шаблона указывает начальную позицию байтов шаблона сразу после типа AD.
  • шаблон имеет размер (длина - 0x2) и является шаблоном, который должен совпадать с указанным типом AD в пакете рекламы, начиная с указанного стартового байта.

Если задано несколько шаблонов, контроллер должен убедиться, что по крайней мере один шаблон соответствует полученному объявлению.

Если контроллер поддерживает мониторинг RSSI расширенных объявлений LE без выборки:

  • Контроллер должен искать шаблон в первых 251 октете рекламных данных узла и может искать в любых оставшихся октетах рекламных данных узла. Если раздел AD превышает первые 251 октет данных о рекламе узла, контроллер должен искать паттерн в части раздела AD, которая находится в первых 251 октетах данных о рекламе узла, и может искать в любых оставшихся октетах данных о рекламе узла. Примечание: на основе фрагментации рекламодателем первые 251 октет данных хост-рекламы могут распределяться по AdvData нескольких рекламных PDU. Сканерам следует внимательно ограничивать количество AuxPtrs, чтобы избежать следования чрезмерно длинным цепочкам НДП.

  • Контроллер должен отслеживать на основе адреса каждого устройства для каждого рекламного набора. Контроллер должен распространять HCI_VS_MSFT_LE_Monitor_Device_Event для каждого набора рекламы, соответствующего шаблону, даже если рекламное сообщение поступает с того же адреса устройства.

Если параметр Condition_type указывает на идентификатор UUID, параметр Condition содержит тип UUID и идентификатор UUID. Тип UUID указывает, является ли UUID 16-разрядным, 32-разрядным или 128-разрядным. Контроллер должен проанализировать идентификатор UUID службы в пакете рекламного уведомления для проверки указанного UUID. Если тип UUID определен как 0x01, контроллер должен проанализировать неполный список 16-разрядных идентификаторов службы и полный список 16-разрядных UUID-служб, указанных в типе AD Service UUID. Если тип UUID определен как 0x02, контроллер должен проанализировать неполный список 32-разрядных UUID-служб и полный список 32-разрядных UUID, указанных в типе AD Service UUID. Если указан тип UUID 0x03, контроллер должен проанализировать неполный список 128-разрядных UUID служб и полный список 128-разрядных UUID служб, указанных в типе AD Service UUID.

Если контроллер поддерживает мониторинг RSSI расширенных объявлений LE без выборки:

  • Контроллер должен искать UUID службы в первых 251 октете рекламных данных узла и может искать в любых оставшихся октетах рекламных данных узла. Если раздел AD выходит за рамки первых 251 октета данных рекламы узла, контроллер должен искать идентификатор UUID службы в части раздела AD, который находится в первых 251 октетах данных рекламы узла, и может искать в любых оставшихся октетах данных рекламы узла. Примечание: на основе фрагментации рекламодателем первые 251 октет хостовых рекламных данных может охватывать AdvData нескольких рекламных PDU. Сканеры должны обеспечить ограничение количества AuxPtrs, за которыми они следуют, чтобы избежать чрезмерно длинных цепочек НДП.

  • Контроллер должен отслеживать на основе адреса каждого устройства и каждого рекламного набора. Контроллер должен распространять HCI_VS_MSFT_LE_Monitor_Device_Event для каждого набора объявлений, соответствующего идентификатору UUID службы, даже если это объявление исходит от одного и того же устройства.

Если параметр Condition_type указывает IRK, параметр Condition содержит IRK.

Если параметр Condition_type указывает адрес Bluetooth, параметр условия содержит тип адреса и BD_ADDR.

Контроллер должен продолжать мониторинг в соответствии с условиями, даже если включено сканирование (Активное или Пассивное). Если включено активное сканирование, ответ сканирования на объявление, соответствующее фильтру, должен распространяться на хост.

Если контроллер получает команду HCI_VS_MSFT_LE_Monitor_Advertisement при отключении фильтров (из-за ранее полученной команды HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с Включить задано значение 0x00), контроллер должен принять команду, если это возможно, но задать ему отключенное состояние. Контроллер также может отказаться от команды по другим причинам, таким как исчерпание ресурсов.

Если все биты Monitor_options ясны, контроллер должен вернуть код ошибки недопустимые параметры команды HCI (0x12).

Если установлен бит 1 или бит 3 Monitor_options, и Peer_device_IRK задан как недопустимый IRK, или ни один из битов Monitor_options не установлен, контроллер должен вернуть код ошибки недопустимые параметры команд HCI (0x12).

Если установлен бит 0 или бит 1 или бит 2 или бит 3 параметра Monitor_options и параметр Condition_type имеет значение 0x03 или 0x04, Контроллер должен вернуть код ошибки недопустимые параметры команд HCI (0x12).

Если бит 0 Advertisement_report_filter_options установлен и RSSI_sampling_period принимает любое значение кроме 0x00, контроллер должен вернуть код ошибки Invalid HCI Command Parameters (0x12).

Отсутствующие параметры

Если выдается версия этой команды, которая не включает все параметры, используется следующее:

Параметр Ценность
Опции монитора Бит 5 установлен; все остальные биты сброшены
Параметры_фильтра_отчета_рекламы Биты 1 и 2 установлены; все остальные биты сброшены
Peer_device_IRK 0x0000000000000000 000000000000000000000000
Адрес_устройства_партнера 0x000000000000
Тип_адреса_устройства_партнера 0x00

Параметры_команды

Subcommand_opcode_v1 (1 октет):

Ценность Описание параметра
0x03 Код операции подкоманды для HCI_VS_MSFT_LE_Monitor_Advertisement [v1].

Subcommand_opcode_v2 (1 октет):

Ценность Описание параметра
0x0F Код подкоманды для HCI_VS_MSFT_LE_Monitor_Advertisement [v2].

RSSI_threshold_high (1 октет):

Ценность Описание параметра
0xXX Максимальное ожидаемое значение RSSI. Контроллер создает событие, если наблюдаемый RSSI становится больше или равен этому значению.
Единица: dBm
Обязательный диапазон: -127 до 20 (целое число со знаком)

RSSI_threshold_low (1 октет):

Ценность Описание параметра
0xXX Минимальное ожидаемое значение RSSI. Контроллер создает событие, если наблюдаемый RSSI становится меньше или равен этому значению.
Единица: dBm
Обязательный диапазон: -127 до 20 (целое число со знаком)

RSSI_threshold_low_time_interval (1 октет):

Ценность Описание параметра
0x00 Зарезервированное значение.
N = 0xXXX Время в секундах, в течение которого значение RSSI должно быть ниже RSSI_threshold_low до создания HCI_VS_MSFT_Rssi_Event
Период времени = N * 1 секунда
Обязательный диапазон: от 0x01 до 0x3C.

RSSI_sampling_period (1 октет):

Ценность Описание параметра
0x00 Контроллер должен передавать все полученные объявления хосту.
N = 0xXXX Интервал выборки в кратных 100 миллисекунд.
Период времени = N * 100 миллисекунды.
Обязательный диапазон: 0x01 до 0xFE
0xFF Контроллер не должен распространять какие-либо полученные объявления на хост.

Параметры_монитора (1 байт):

Битовое число Описание параметра
0 Контроллер должен отслеживать рекламные PDU, где AdvA или его разрешенный идентификационный адрес соответствует Peer_device_address и Peer_device_address_type, и где TargetA отсутствует или, если он присутствует, использование TargetA разрешено на основе политики фильтрации при сканировании, если эти PDU соответствуют условию, указанному в Condition_Type.
1 Контроллер должен отслеживать рекламные PDUs, в которых AdvA разрешимо с Peer_device_IRK и где TargetA отсутствует или, если он присутствует, TargetA разрешено на основе политики фильтра сканирования, если эти PDUs соответствуют условию, указанному в Condition_Type. Этот бит не должен быть задан, если в контроллере используется конфиденциальность уровня ссылок.
2 Контроллер должен отслеживать направленные рекламные PDU, где TargetA разрешен на основе политики фильтра сканирования и где AdvA или его разрешенный адрес удостоверения личности соответствует Peer_device_address и Peer_device_address_type. Это независимо от того, соответствует ли PDU условию, указанному в Condition_Type.
3 Контроллер должен отслеживать рекламные ПДУ с направленной рассылкой, где TargetA разрешено на основе политики фильтрации сканирования, и где AdvA может быть разрешено с помощью Peer_device_IRK. Это независимо от того, соответствует ли PDU условию, указанному в Condition_Type. Этот бит не должен быть задан, если в контроллере используется конфиденциальность уровня ссылок.
4 Контроллер должен отслеживать направленные рекламные ПДУ, где TargetA разрешён в соответствии с Политикой фильтрации сканирования, независимо от значения Peer_device_address и Peer_device_address_type или Peer_device_IRK и независимо от того, соответствует ли ПДУ условию, указанному в Condition_Type.
5 Контроллер должен отслеживать рекламные PDUs от любого AdvA, где TargetA отсутствует или, если он присутствует, TargetA разрешен на основе политики сканирования фильтров, если эти PDUs соответствуют условию, указанному в Condition_Type.
Все остальные биты Зарезервировано для дальнейшего использования

Advertisement_report_filtering_options (1 байт):

Битовое число Описание параметра
0 Фильтровать повторяющиеся рекламные PDU. Этот бит должен устанавливаться только в том случае, если период выборки RSSI равен 0x00.
1 Контроллер должен генерировать события HCI_LE_Advertising_Report, HCI_LE_Directed_Advertising_Report или HCI_LE_Extended_Advertising_Report для Legacy рекламных PDUs, если эти PDUs соответствуют указанным Monitor_options.
2 Контроллер должен создавать события HCI_LE_Extended_Advertising_Report для расширенных рекламных ПДУ, если эти ПДУ соответствуют указанным параметрам мониторинга.
3 Контроллер должен генерировать события HCI_LE_Advertising_Report, HCI_LE_Directed_Advertising_Report или HCI_LE_Extended_Advertising_Report для направленных рекламных PDU, если эти PDU соответствуют указанным Monitor_options.
Все остальные биты Зарезервировано для дальнейшего использования

Peer_device_address (6 октетов):

Ценность Описание параметра
0xXXXXXXXXXXXXX Общедоступный адрес устройства или случайный адрес устройства для сопоставления.

Тип_адреса_устройства_партнера (1 октет):

Ценность Описание параметра
0x00 Общедоступный адрес устройства
0x01 Случайный адрес устройства
Все остальные значения Зарезервировано для дальнейшего использования

Peer_device_IRK (16 октетов):

Ценность Описание параметра
0x0000000000000000 000000000000000000000000 Недопустимый IRK. Не должно быть значением, если задан Monitor_options бит 1 или если задано Monitor_options бит 3.
0xXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX IRK устройства для сопоставления. Peer_device_address и Peer_device_address_type должны быть заполнены.

Тип_условия (1 октет)

Ценность Описание параметра
0x01 Условие — это шаблон, который должен соответствовать рекламе.
0x02 Условие — тип UUID и UUID.
0x03 Условие — разрешение IRK. Исключается, если установлено любое из значений битов 0, 1, 2 или 3 в "Monitor_options".
0x04 Условие — это тип Bluetooth-адреса и сам Bluetooth-адрес. Исключается, если установлены биты 0, 1, 2 или 3 в параметрах Monitor_options.

Условие: применимые поля для условия зависят от значения Condition_type. Дополнительные сведения см. в разделе параметров Condition_type и Condition.

Количество_шаблонов (1 октет)

Ценность Описание параметра
0xXX Количество шаблонов, указанных в параметре Pattern_data.

Pattern_data (>3 байта):

Ценность Описание параметра
Длина Длина этого шаблона.
Тип данных Тип данных раздела объявления. Значения перечислены в документе "Назначенные номера Bluetooth".
Начальный байт Начальная позиция шаблона для совпадения с указанным типом данных.
Рисунок Шаблон для сопоставления (размер длины — 0x2 байтов).

UUID_type (1 октет):

Ценность Описание параметра
0x01 UUID — это 16-разрядная служба.
0x02 UUID — это 32-разрядная служба.
0x03 UUID — это 128-разрядная служба.

UUID (2, 4 или 16 октетов):

Ценность Описание параметра
0xXXXX 2 байта, если UUID_type 0x01.
4 байта, если UUID_type 0x02.
16 байт, если UUID_type 0x03.

IRK (16 октетов):

Ценность Описание параметра
0xXXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX IRK, используемый для определения частного адреса.

Тип_адреса (1 октет)

Ценность Описание параметра
0x00 Общедоступный адрес устройства.
0x01 Случайный адрес устройства.
0x02 до 0xFF Зарезервированные значения для дальнейшего использования.

BD_ADDR (6 октетов):

Ценность Описание параметра
0xXXXXXXXXXXXX Адрес Bluetooth устройства, который необходимо отслеживать.

Параметры_возврата

Состояние (1 октет):

Ценность Описание параметра
0x00 Команда выполнилась успешно.
0x07 Контроллер должен возвращать сообщение "Превышена емкость памяти", если у него недостаточно памяти для обработки команды.
Код ошибки Не удалось выполнить команду. Дополнительные сведения см. в разделе Коды ошибок в спецификации Bluetooth Core.

Subcommand_opcode (1 октет):

Ценность Описание параметра
0x03 или 0x0F В зависимости от того, какая команда была отправлена, оператор подкоманды для HCI_VS_MSFT_LE_Monitor_Advertisement [v1] или HCI_VS_MSFT_LE_Monitor_Advertisement [v2].

Monitor_handle (1 октет):

Ценность Описание параметра
от 0x00 до 0xFF Дескриптор этого правила. Этот дескриптор используется в качестве параметра для HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement для отмены мониторинга объявления.
Этот параметр действителен только в том случае, если состояние 0x00.

События, созданные без маскировки

При получении команды HCI_VS_MSFT_LE_Monitor_Advertisement контроллер должен создать событие "Завершить команду".

HCI_VS_MSFT_LE_Отменить_Монитор_Реклама

HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement отменяет ранее выданную команду HCI_VS_MSFT_LE_Monitor_Advertisement.

Приказ Код Параметры команды Возвращаемые параметры
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement Выбранный базовый код Subcommand_opcode,
Дескриптор_монитора
Статус
Subcommand_opcode

Контроллер должен быстро создать событие завершения команды в ответ на эту команду.

Параметры_команды

Subcommand_opcode (1 байт):

Ценность Описание параметра
0x04 Код операции подкоманды для HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Connection_Handle (1 октет):

Ценность Описание параметра
0xXX Дескриптор фильтра, который отменяется.

параметры_возврата

Состояние (1 октет):

Ценность Описание параметра
0x00 Команда завершилась успешно.
0x07 Контроллер будет возвращать сообщение "Превышена емкость памяти," если у него недостаточно памяти для обработки команды.
Код ошибки Не удалось выполнить команду. Дополнительные сведения см. в разделе Коды ошибок в спецификации Bluetooth Core.

Subcommand_opcode (1 октет):

Ценность Описание параметра
0x04 Код операции подкоманды для HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

События, созданные без маскировки

Контроллер должен сгенерировать событие "Command Complete" при получении команды HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable

HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable задает состояние фильтров рекламы.

Приказ Код Параметры команды Возвращаемые параметры
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable Выбранный базовый код Subcommand_opcode,
Включить
Статус
Субкоманда_опкод

Если переключатель установлен в положение 0x00, контроллер должен передавать полученные объявления на хост на основе существующих параметров списка принятых фильтров. Контроллер должен продолжать отслеживать устройства, которые в настоящее время отслеживаются, и создавать HCI_VS_MSFT_LE_Monitor_Device_Event, с значением Monitor_state, установленным в 0, если устройство больше не находится под наблюдением. Контроллер должен создать HCI_VS_MSFT_LE_Monitor_Device_Event с Monitor_state установить значение 1, если отслеживается новое устройство. Ведущий может выдавать HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable, устанавливая параметр Enable на 0x01 для повторного включения всех условий фильтра.

Если Enable установлено в 0x01, эта команда включает все фильтры, которые были заданы с помощью ранее выданной команды HCI_VS_MSFT_LE_Monitor_Advertisement. Контроллер должен отклонить команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable, если она не переключает состояние фильтра:

  • Контроллер должен отклонить команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с Enable установленным на 0x01, если он ранее получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с Enable установленным на 0x01.
  • Контроллер должен отклонить команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с Включить, установленной в 0x00, если ранее он получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с Включить, установленной в 0x00.

Состояние фильтра рекламы по умолчанию отключено. Это состояние эквивалентно контроллеру, ранее получившему команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с Enable, установленным на 0x00. Контроллер должен быстро создать событие завершения команды в ответ на эту команду.

Параметры_команды

Subcommand_opcode (1 октет):

Ценность Описание параметра
0x05 Код операции подкоманды для HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

Включить (1 октет):

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

Return_parameter

Состояние (1 октет):

Ценность Описание параметра
0x00 Команда завершилась успешно.
0x0C Контроллер должен возвращать команду запрещено, если контроллер отклонил команду, потому что ранее он получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с параметром Включить, установленным на то же значение, что и в этой команде.
Код ошибки Не удалось выполнить команду. Дополнительные сведения см. в разделе Коды ошибок в спецификации Bluetooth Core.

Subcommand_opcode (1 октет):

Ценность Описание параметра
0x05 Код операции подкоманды для HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

События, созданные без маскировки

Контроллер должен сгенерировать событие завершения команды при получении команды HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable.

HCI_VS_MSFT_Read_Absolute_RSSI

HCI_VS_MSFT_Read_Absolute_RSSI считывает абсолютное значение показателя уровня полученного сигнала (RSSI) для соединения BR/EDR от контроллера.

Приказ Код Параметры команды Возвращаемые параметры
HCI_VS_MSFT_Read_Absolute_RSSI Выбранный базовый код Subcommand_opcode,
Connection_Handle
Статус
Subcommand_opcode,
Connection_Handle,
RSSI

Дескриптор соединения предоставляется как параметр команды, так и параметр возврата для идентификации соединения ACL, RSSI которого считывается. Метрика RSSI — это абсолютная мощность сигнала приемника в dBm с точностью до ± 6 dB. Если rsSI не удается прочитать, то для метрики RSSI должно быть задано значение 127. Контроллер всегда должен быстро выполнить эту команду с событием "Завершено командой".

Параметры команды

Подкоманда_опкод (1 октет)

Ценность Описание параметра
0x06 Код операции подкоманды для HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 октета):

Ценность Описание параметра
0xXXXX Дескриптор подключения BR/EDR, rsSI которого необходимо считывать.

Параметры_возврата

Состояние (1 октет):

Ценность Описание параметра
0x00 Команда выполнена успешно.
от 0x01 до 0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе Коды ошибок в спецификации Bluetooth Core.

Subcommand_opcode (1 octet)

Ценность Описание параметра
0x06 Код операции подкоманды для HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 октета):

Ценность Описание параметра
0xXXXX Дескриптор подключения BR/EDR, RSSI которого был считыван.

RSSI (1 октет)

Ценность Описание параметра
N = 0xXXX Значение RSSI для подключения BR/EDR.
Единица: dBm
Обязательный диапазон: -128 до 127 (целое число со знаком)

События, созданные без маскировки

Контроллер должен создать событие "Завершение команды" при завершении команды HCI_VS_MSFT_Read_Absolute_RSSI.

События Bluetooth HCI, определенные корпорацией Майкрософт

Все события Bluetooth HCI, определенные корпорацией Майкрософт, являются событиями, определенными поставщиком, и используют код события 0xFF. Данные о событиях Майкрософт всегда начинаются с постоянной строки байтов, чтобы различать события, определенные корпорацией Майкрософт, от других событий, определенных поставщиком. Длина и значение строки константы определяются реализатором контроллера и возвращаются в ответ на HCI_VS_MSFT_Read_Supported_Features.

Событие HCI Описание
HCI_VS_MSFT_Rssi_Event HCI_VS_MSFT_RSSI_Event указывает, что команда HCI_VS_MSFT_Monitor_Rssi завершена.
HCI_VS_MSFT_LE_Monitor_Device_Event HCI_VS_MSFT_LE_Monitor_Device_Event указывает, что контроллер либо начал, либо остановил мониторинг устройства Bluetooth LE.

HCI_VS_MSFT_RSSI_Event

HCI_VS_MSFT_RSSI_Event указывает, что команда HCI_VS_MSFT_Monitor_Rssi завершена. Если параметр состояния равен нулю, команда завершилась, так как значение RSSI для удаленного устройства изменилось на значение за пределами указанного диапазона. Если параметр Status не является ненулевой, команда завершилась, так как значение RSSI подключения больше не может быть отслеживаемо.

Событие Код события Код события Майкрософт Параметры события
HCI_VS_MSFT_RSSI_Event 0xFF 0x01 Event_prefix,
Microsoft_event_code,
Статус
Connection_Handle,
RSSI

Параметры_события

Event_prefix (размер переменной):

Ценность Описание параметра
Префикс события Префикс события, который помечает это событие как определяемое корпорацией Майкрософт. Размер и значение возвращаются командой HCI_VS_MSFT_Read_Supported_Features.

Microsoft_event_code (1 октет):

Ценность Описание параметра
0x01 Код события для HCI_VS_MSFT_RSSI_Event.

Состояние (1 октет):

Ценность Описание параметра
0x00 Успех. Значение RSSI подключения соответствует одному из следующих условий. Значение RSSI достигло или превысило RSSI_threshold_high.
RSSI достиг или опустился ниже RSSI_threshold_low в течение RSSI_threshold_low_time_interval секунд.
Срок действия RSSI_sampling_period истёк, и это событие было создано для уведомления хоста о значении RSSI.
0x01 до 0xFF Неудача. Значение RSSI подключения больше не может отслеживаться. Код ошибки обычно является одним из кодов, описывающих, почему базовое соединение ACL было потеряно.

Connection_Handle (2 октета):

Ценность Описание параметра
0xXXXX Идентификатор соединения, для которого необходимо отслеживать RSSI.

RSSI (1 октет):

Ценность Описание параметра
0xXX Значение RSSI, измеренное для соединения.
Единица: dBm
Диапазон BR/EDR: -128 до 127 (целое число со знаком)
Диапазон LE: -127 до 20 (целое число со знаком)

HCI_VS_MSFT_LE_Monitor_Device_Event

HCI_VS_MSFT_LE_Monitor_Device_Event указывает, что контроллер либо начал, либо остановил мониторинг устройства Bluetooth LE.

Если значение параметра Monitor_state равно 1, контроллер начал отслеживать устройство Bluetooth с указанным BD_ADDR. Если значение параметра Monitor_state равно 0, контроллер перестал отслеживать устройство Bluetooth с указанным BD_ADDR.

Событие Код события Код события Майкрософт Параметры события
HCI_VS_MSFT_LE_Monitor_Device_Event 0xFF 0x02 Event_prefix,
Microsoft_event_code,
Тип_адреса
BD_ADDR,
Monitor_handle,
Состояние_монитора

Контроллер не должен создавать HCI_VS_MSFT_LE_Monitor_Device_Event с параметром Monitor_state значение 0, если он еще не создал HCI_VS_MSFT_LE_Monitor_Device_Event с Monitor_state значение 1.

Параметры_события

Event_prefix (размер переменной):

Ценность Описание параметра
Префикс события Префикс события, который помечает это событие как определяемое корпорацией Майкрософт. Размер и значение возвращаются командой HCI_VS_MSFT_Read_Supported_Features.

Microsoft_event_code (1 байт):

Ценность Описание параметра
0x02 Код события для HCI_VS_MSFT_LE_Monitor_Device_Event.

Тип_адреса (1 октет)

Ценность Описание параметра
0x00 Общедоступный адрес устройства.
0x01 Случайный адрес устройства.
0x02 до 0xFF Зарезервированные значения для дальнейшего использования.

BD_ADDR (6 октетов):

Ценность Описание параметра
0xXXXXXXXXXXXXX Адрес Bluetooth устройства.

Monitor_handle (1 байт):

Ценность Описание параметра
0xXX Дескриптор фильтра, который был указан для команды HCI_VS_MSFT_LE_Monitor_Advertisement.

Состояние_монитора (1 октет):

Ценность Описание параметра
0x00 Контроллер остановил мониторинг устройства, указанного BD_ADDR и Monitor_handle.
0x01 Контроллер начал отслеживать устройство, заданное параметрами BD_ADDR и Monitor_handle.

Заданные корпорацией Майкрософт команды AVDTP HCI

Следующие команды AVDTP HCI обеспечивают поддержку разгрузки звуковой боковой полосы A2DP. Дополнительные сведения см. в разделе Разгрузка аудио боковой полосы A2DP.

Команды HCI AVDTP Описание
HCI_VS_MSFT_Avdtp_Capabilities_Configuration Настраивает интерфейс аудиопередачи и возвращает возможности кодека контроллера Bluetooth, который представляет собой список информационных блоков кодека.
HCI_VS_MSFT_Avdtp_Open Выделяет и настраивает ресурсы разгрузки AVDTP в контроллере.
HCI_VS_MSFT_Avdtp_Start Начинает потоковую передачу звука из аудиотранспорта на передаваемые пакеты мультимедиа AVDTP.
HCI_VS_MSFT_Avdtp_Suspend Останавливает процесс потоковой передачи, инициированный HCI_VS_MSFT_Avdtp_Start.
HCI_VS_MSFT_Avdtp_Close Освобождает ресурсы разгрузки AVDTP, выделенные с помощью HCI_VS_MSFT_Avdtp_Open.

Возможности_Конфигурация_HCI_VS_MSFT_Avdtp

HCI_VS_MSFT_Avdtp_Capabilities_Configuration настраивает интерфейс аудиотранспорта и возвращает возможности кодека контроллера Bluetooth, представленные в виде списка блоков информации кодека. Каждый блок сведений кодека описывает один поддерживаемый кодек.

Ниже приведены массивы структур с переменной длиной, поэтому предполагается, что все эти параметры по-прежнему будут соответствовать одной команде HCI и одному соответствующему событию HCI.

Параметры_команды

External_codec_count (1 октет):

Value описание параметра
0x00-0xFF Количество блоков Codec_capability, идущих следом.

External_codec_capability (переменная длина):

Value описание параметра
Блок возможностей Codec Блок сведений о возможностях кодека, как описано в сведениях о возможностях Codec. В этом разделе описывается один кодек, поддерживаемый устройством, подключенным к звуковому интерфейсу.

Эта структура данных повторяется External_codec_count раз.

Audio_interface_parameter_count (1 октет):

Value описание параметра
0x00-0xFF Количество параметров Audio_interface_parameters, следующих далее.

Audio_interface_parameter (переменная длина)

Value описание параметра
Параметр звукового интерфейса Параметр звукового интерфейса, как описано выше, задается устройством, подключенным к звуковому интерфейсу.

Эта структура данных повторяется Audio_interface_parameter_count раз.

Параметры_возврата

Состояние (1 октет):

Value описание параметра
0x00 Команда завершилась успешно.
0x01-0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе "Коды ошибок" в спецификации Bluetooth Core.

Subcommand_opcode _ (1 октет):

Value описание параметра
0x07 Код подкоманды для HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Internal_codec_count (1 октет):

Value описание параметра
0x00-0xFF Количество блоков Internal_codec_capability, следующих дальше.

Internal_codec_capability (переменная длина):

Value описание параметра
Блок функций кодека Блок информации о возможностях кодека, как описано в разделе — Разгрузка аудиосигнала побочного канала A2DP. В этом разделе описывается один кодек, поддерживаемый контроллером Bluetooth.

Эта структура данных повторяется Internal_codec_count раз.

Количество_параметров_аудиоинтерфейса (1 октет):

Value описание параметра
0x00-0xFF Количество параметров Audio_interface, которые следуют за этим.

Параметр_аудио_интерфейса (переменная длина)

Value описание параметра
Параметр звукового интерфейса Параметр звукового интерфейса, как описано выше. Программное обеспечение узла передает этот параметр устройству, подключенного к звуковому интерфейсу.

Эта структура данных повторяется Audio_interface_parameter_count раз.

HCI_VS_MSFT_Avdtp_Open

Выделяет и настраивает ресурсы разгрузки AVDTP в контроллере.

Ниже приведены массивы структур с переменной длиной, поэтому предполагается, что все эти параметры по-прежнему будут соответствовать одной команде HCI и одному соответствующему событию HCI.

Параметры команды

Connection_handle (2 октета)

Value описание параметра
0xXXXX Идентифицирует канал L2CAP для медиапотока AVDTP, подключенный к удаленному устройству.

L2cap_destination_cid (2 октета)

Value описание параметра
0xXXXX CID назначения L2CAP канала мультимедиа AVDTP

L2cap_mtu (2 октета)

Value описание параметра
0xXXXX MTU канала L2CAP AVDTP для мультимедиа

Настроенная_возможность_кодека (переменная длина):

Value описание параметра
Блок возможностей Codec Блок информации о возможностях кодека, как описано в разделе Выгрузка аудиосигнала A2DP. В этом разделе описывается кодек, настроенный для носителя AVDTP.

Параметр_аудио_интерфейса_количество (1 октет):

Value описание параметра
0x00-0xFF Количество параметров интерфейса аудио, которые следуют.

Параметр_аудиоинтерфейса (переменная длина)

Value описание параметра
Параметр звукового интерфейса Параметр звукового интерфейса, как описано выше. Устройство, подключенное к звуковому интерфейсу, указывает эти параметры для определенного экземпляра потока.

Эта структура данных повторяется Audio_interface_parameter_count раз.

Возвращаемые_параметры

Состояние (1 октет):

Value описание параметра
0x00 Команда завершилась успешно.
0x01-0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе "Коды ошибок" в спецификации Bluetooth Core.

Subcommand_opcode (1 октет):

Value описание параметра
0x08 Код операции подкоманды для HCI_VS_MSFT_Avdtp_Open.

Avdtp_offload_handle (2 октета):

Value описание параметра
0xXXXX Определяет ресурс, выделенный для разгрузки потока.

Количество_параметров_аудиоинтерфейса (1 октет):

Value описание параметра
0x00-0xFF Количество параметров аудио интерфейса, следующих за этим.

Аудио_интерфейс_параметр (переменная длина)

Value описание параметра
Параметр звукового интерфейса Параметр звукового интерфейса, как описано выше. Программное обеспечение хоста передает этот параметр устройству, подключенному к аудиоинтерфейсу для экземпляра потока.

Эта структура данных повторяется Audio_interface_parameter_count раз.

HCI_VS_MSFT_Avdtp_Start

Эта команда начинает потоковую передачу звука из аудиотранспорта на передаваемые пакеты мультимедиа AVDTP. После выполнения этой команды контроллер Bluetooth начинает следующее действие.

  • Получает звуковые данные из аудиопередачи
  • Если кодировщик находится в контроллере Bluetooth, кодирует данные, полученные от звукового транспорта, чтобы создать закодированные кадры.
  • Если кодировщик находится в звуковом DSP, то он извлекает закодированные кадры из транспорта потока аудио данных.
  • Собирает закодированные кадры в мультимедиа-пакеты AVDTP.
  • Создает и передает пакеты мультимедиа AVDTP, содержащие данные мультимедиа

Командные_параметры

Avdtp_offload_handle (2 октета):

Value описание параметра
0xXXXX Определяет ресурс, выделенный для разгрузки потока.

Параметры_возврата

Состояние (1 октет):

Value описание параметра
0x00 Команда завершилась успешно.
0x01-0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе "Коды ошибок" в спецификации Bluetooth Core.

Subcommand_opcode (1 октет):

Value описание параметра
0x09 Код операции подкоманды для HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Останавливает потоковую передачу, инициированную HCI_VS_MSFT_Avdtp_Start.

Параметры_команды

Avdtp_offload_handle (2 октета):

Value описание параметра
0xXXXX Определяет ресурс, выделенный для разгрузки потока.

параметры возврата

Состояние (1 октет):

Value описание параметра
0x00 Команда завершилась успешно.
0x01-0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе "Коды ошибок" в спецификации Bluetooth Core.

Subcommand_opcode (1 октет):

Value описание параметра
0x0A Опкод подкоманды для HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Освобождает ресурсы разгрузки AVDTP, выделенные HCI_VS_MSFT_Avdtp_Open.

Параметры_команды

Avdtp_offload_handle (2 октета):

Value описание параметра
0xXXXX Примечание. Это значение больше не является допустимым после завершения этой команды.

Возврат_параметров

Состояние (1 октет):

Value описание параметра
0x00 Команда завершилась успешно.
0x01-0xFF Не удалось выполнить команду. Дополнительные сведения см. в разделе "Коды ошибок" в спецификации Bluetooth Core.

Код_подкоманды (1 октет):

Value описание параметра
0x0B Операционный код подкоманды для HCI_VS_MSFT_Avdtp_Close.
Ценность Описание параметра
0x00
0x01 Контроллер начал отслеживать устройство, указанное BD_ADDR и Monitor_handle.

Приложение

В этом разделе содержатся примеры и схемы расширения Bluetooth HCI, определенные корпорацией Майкрософт.

Пример: Сопоставление шаблонов для HCI_VS_MSFT_LE_Monitor_Advertisement

В этом примере показана полученная команда HCI_VS_MSFT_LE_Monitor_Advertisement и оценки трех разных пакетов рекламы по параметрам команды.

Контроллер получает команду HCI_VS_MSFT_LE_Monitor_Advertisement, которая содержит следующие параметры из команды HCI_VS_MSFT_LE_Monitor_Advertisement.

Параметр Ценность Примечания.
Subcommand_opcode 0x03 Подкоманда opcode для HCI_VS_MSFT_LE_Monitor_Advertisement
Порог уровня RSSI высокий 0x01 1dB
Порог_RSSI_низкий 0xCE -50dB
RSSI_threshold_low_time_interval 0x05 5 секунд
RSSI_sampling_period 0xFF Выборка отсутствует
Тип_условия 0x01 Состояние
Условие 0x02 Необходимо сопоставить два шаблона.
0x03 Длина первого шаблона, включая тип AD и начальную позицию
0x01 Тип AD
0x00 Начальная позиция после типа AD
0x01 Первый шаблон для сопоставления
0x06 Длина второго шаблона, включая тип AD и начальную позицию
0xFF Тип AD (данные производителя)
0x00 Начальная позиция, следующая за типом AD
0x00 Второй шаблон для сопоставления
0x06
0xFF
0xFF

Затем контроллер получает следующие пакеты рекламы.

  • Пакет рекламы [A]

    0x02 0x01 0x01 0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x05 0xFF 0x00 0x06 0xFF 0xFF

  • Пакет рекламы [B]

    0x02 0x01 0x01 0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x04 0xFF 0x00 0x06 0xFF

  • Пакет рекламы [C]

    0x07 0x09 0x54 0x61 0x62 0x6C 0x65 0x74 0x05 0xFF 0x00 0x06 0xFF 0xFF

  • Пакет рекламы [D]

    0x02 0x01 0x02 0x05 0xFF 0x00 0x06 0xFF 0x01

Оценка соответствия рекламного пакета [A]

Описание Ценность
Тип AD первого шаблона для сопоставления 0x01
Длина первого шаблона для сопоставления 0x03 — 0x02 = байт 0x01
Шаблон, который должен соответствовать на позиции 0x00 для типа AD 0x01 0x01
Байты на позиции 0x00 для типа AD 0x01 0x01 (СОВПАДЕНИЕ!)
Тип AD для сопоставления второго шаблона 0xFF (данные, характерные для производителя)
Длина второго шаблона для сопоставления 0x06 — 0x02 = 0x04 байт
Шаблон, соответствующий позиции 0x00 для типа AD 0xFF 0x00 0x06 0xFF 0xFF
Байты в позиции 0x00 для 0xFF типа AD 0x00 0x06 0xFF 0xFF (СОВПАДЕНИЕ!)

Вердикт: PASS (оба шаблона соответствуют)

Оценка соответствия пакету рекламы [B]

Описание Ценность
Тип AD первого сопоставляемого шаблона 0x01
Длина первого шаблона для сопоставления 0x03 — 0x02 = байт 0x01
Шаблон, соответствующий по позиции 0x00 для типа AD 0x01 0x01
Байты на позиции 0x00 для типа AD 0x01 0x01 (MATCH!)
Тип AD для второго сопоставляемого шаблона 0xFF (специфические данные производителя)
Длина второго шаблона для сопоставления 0x06 — 0x02 = 0x04 байт
Шаблон, соответствующий позиции 0x00 для типа AD с кодом 0xFF 0x00 0x06 0xFF 0xFF
Байты на позиции 0x00 для типа AD 0xFF 0x00 0x06 0xFF (нет совпадения)

Вердикт: PASS (совпадает только первый шаблон)

Оценка совпадения для пакета рекламы [C]

Описание Ценность
Тип AD первого шаблона для сопоставления 0x01
Длина первого шаблона для сопоставления 0x03 — 0x02 = байт 0x01
Шаблон, соответствующий по позиции 0x00 для типа AD 0x01 0x01
Байты на позиции 0x00 для типа AD 0x01 Неопределенный. В объявлении нет данных типа AD 0x01.
Тип AD для сопоставления второго шаблона 0xFF (специфические данные производителя)
Длина второго шаблона для сопоставления 0x06 — 0x02 = 0x04 байт
Шаблон, соответствующий в позиции 0x00 для типа AD 0xFF 0x00 0x06 0xFF 0xFF
Байты на позиции 0x00 для типа AD с кодом 0xFF 0x00 0x06 0xFF 0xFF (MATCH!)

Вердикт: PASS (только второй шаблон совпадает)

Оценка соответствия для пакета рекламы [D]

Описание Ценность
Тип AD первого шаблона, который необходимо сопоставить 0x01
Длина первого шаблона для сопоставления 0x03 — 0x02 = байт 0x01
Шаблон, который должен совпадать с позицией 0x00 для типа AD 0x01 0x01
Байты на позиции 0x00 для типа AD 0x01 0x02 (без соответствия)
Тип AD для сопоставления второго шаблона 0xFF (специфические данные производителя)
Длина второго шаблона для сопоставления 0x06 — 0x02 = 0x04 байт
Шаблон, который соответствует позиции 0x00 для типа AD 0xFF 0x00 0x06 0xFF 0xFF
Байты на позиции 0x00 для типа AD 0xFF 0x00 0x06 0xFF 0x01 (нет совпадения)

Вердикт: FAIL (ни один шаблон не совпадает)

Пример: мониторинг рекламы

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

Время (s) RSSI (индикатор силы принимаемого сигнала) (дБ)
1 -100
2 -90
3 -5
4 -15
5 -30
6 -15
7 -45
8 -20
9 -35
10 -45
11 -70
12 -85
13 -85
14 -85
15 -90
16 -90
17 -70
Параметр Ценность
RSSI_threshold_high -10dB
Порог_RSSI_низкий -80dB
RSSI_threshold_low_time_interval 3 секунды
RSSI_sampling_period 2 секунды

График, показывающий наблюдение за рекламой с использованием значений RSSI в течение времени.

Реклама RSSI больше, чем RSSI_threshold_high за раз 3. Периодический таймер выборки начинается с 3. Каждые 2 секунды срок действия таймера истекает, а среднее значение RSSI полученного объявления распространяется на стек.

Когда срок действия периодического таймера истекает в момент времени 5, среднее значение RSSI объявления, полученное в течение этого времени (-23dB), передается в стек.

Когда периодический таймер истекает в время 13, среднее значение RSSI рекламных сообщений, полученное в течение этого периода, ниже RSSI_threshold_low (-80dB). Среднее значение RSSI рекламы (-85 dB) должно передаваться на хост.

Когда в момент 15 истекает срок действия RSSI_threshold_low_time_interval, реклама распространяется на хост с RSSI -85dB. В этом примере дополнительные объявления больше не отправляются на хост.

Пример. Мониторинг объявлений BAP с устройства

Будучи связанным с акцептором CAP, но не подключенным, узел может отслеживать объявления BAP с этого устройства.

Параметр Ценность
Subcommand_opcode_v2 0x0F
Пороговое значение RSSI (Received Signal Strength Indicator)_высокое -127
Порог_RSSI_низкий -127
пороговое_значение_RSSI_низкий_интервал_времени 0x05
RSSI_период_выборки 0x00
Настройки_монитора Бит 0 установлен; Бит 1 установлен, если устройство выдало IRK
Параметры фильтрации отчётов по рекламе Биты 0, 1 и 2 установлены
Адрес_устройства_партнёра <адрес>
Тип_адреса_устройства_партнёра <типа адреса>
Peer_device_IRK <IRK, если бит 1 установлен>
Тип_условия 0x01
Количество_шаблонов 0x01
Шаблон_данные 0x04 (длина)
0x16 (данные службы — 16-разрядный UUID)
0x00 (начальный байт)
0x4E (низкий байт ASCS UUID)
0x18 (высокий байт UUID ASCS)

Пример. Мониторинг объявлений CAP с устройства

Хотя хост связан с командиром CAP, но не подключён, он может отслеживать объявления CAP с этого устройства.

Параметр Ценность
Subcommand_opcode_v2 0x0F
RSSI_порог_высокий -127
Порог_RSSI_низкий -127
интервал времени низкого порога RSSI 0x05
Период выборки RSSI 0x00
Параметры_монитора Бит 0 установлен; Бит 1 установлен, если устройство распространило IRK
Опции_фильтрации_отчета_о_рекламе Биты 0, 1 и 2 включены
Адрес_устройства_равного_узла <адрес>
Тип_адреса_устройства_партнера <типа адреса>
Peer_device_IRK <IRK, если установлен бит 1>
Тип_условия 0x01
Количество_шаблонов 0x01
Данные_шаблона 0x04 (длина)
0x16 (данные службы — 16-разрядный UUID)
0x00 (начальный байт)
0x53 (низкий байт CAS UUID)
0x18 (высокий байт CAS UUID)

Блок-схема: реклама и фильтрация по белому списку фильтров

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

Контроллер может реализовать эту логику по-другому, если узел уведомляется о объявлении или HCI_VS_MSFT_LE_Monitor_Device_Event, как указано блок-схемой.

блок-схема, в которую показан процесс фильтрации расширений Microsoft HCI.

Схема последовательности: распространение ответа сканирования, связанного с объявлением

Схема последовательности: распространение ответа сканирования, связанного с рекламным объявлением

На этой диаграмме последовательности показан ответ на распространённое сканирование, который связан с рекламой, удовлетворяющей фильтру объявлений при включённом активном сканировании. На этой схеме показана только ожидаемая последовательность событий между контроллером и узлом, а события между контроллером и определенным устройством не отображаются. Предположим, что есть реклама A, которая удовлетворяет фильтру рекламы, и объявление B, которая не удовлетворяет фильтру рекламы.

схема последовательности, показывающая, что HCI распространяет ответ сканирования, связанный с объявлением.