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


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

Интерфейс контроллера узла Bluetooth (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 Description
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

Контроллер понимает, что существует только одна команда HCI, определенная корпорацией Майкрософт. Набор команд, определенный корпорацией Майкрософт, расширяется с помощью кода opcode. Первый параметр команды, определяемой корпорацией Майкрософт, — это код 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,
Supported_features,
Microsoft_event_prefix_length,
Microsoft_event_prefix

Command_parameters

Subcommand_opcode (1 октет):

Значение Описание параметра
0x00 Вложенный код для HCI_VS_MSFT_Read_Supported_Features.

Return_parameters

Состояние (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 связи для указанного соединения и создает событие, когда rsSI измеряемой связи подключения выходит за пределы указанных границ.

Команда Код Параметры команд Возвращаемые параметры
HCI_VS_MSFT_Monitor_Rssi Выбранный базовый код Subcommand_opcode,
Connection_Handle,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period
Статус
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.

Command_parameters

Subcommand_opcode (1 октет):

Значение Описание параметра
0x01 Вложенный код для HCI_VS_MSFT_Monitor_Rssi.

Connection_Handle (2 октета):

Значение Описание параметра
0xXXXXXX Дескриптор подключения, rsSI которого необходимо отслеживать.

RSSI_threshold_high (1 октет):

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

RSSI_threshold_low (1 октет):

Значение Описание параметра
0xXXX Минимальное ожидаемое значение 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 Интервал выборки в миллисекундах.
Период времени = N * 100 миллисекундах
Обязательный диапазон: 0x01 до 0xFE
0xFF Зарезервированное значение.

Return_parameters

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

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

Subcommand_opcode (1 октет):

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

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

Контроллер должен быстро создать событие command Complete при получении команды 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

Command_parameters

Subcommand_opcode (1 октет):

Значение Описание параметра
0x02 Вложенный код для HCI_VS_MSFT_Cancel_Monitor_Rssi.

Connection_Handle (2 октета):

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

Return_parameters

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

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

Subcommand_opcode (1 октет):

Значение Описание параметра
0x02 Вложенный код для HCI_VS_MSFT_Cancel_Monitor_Rssi.

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

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

HCI_VS_MSFT_LE_Monitor_Advertisement

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

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

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

Команда Код Параметры команд Возвращаемые параметры
HCI_VS_MSFT_LE_Monitor_Advertisement [версия 2] Выбранный базовый код Subcommand_opcode_v2,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period,
Monitor_options,
Advertisement_report_filtering_options,
Peer_device_address,
Peer_device_address_type,
Peer_device_IRK,
Condition_type,
<Параметры условия>
Статус
Subcommand_opcode,
Monitor_Handle
HCI_VS_MSFT_LE_Monitor_Advertisement [v1] Выбранный базовый код Subcommand_opcode_v1,
RSSI_threshold_high,
RSSI_threshold_low,
RSSI_threshold_low_time_interval,
RSSI_sampling_period,
Condition_type,
<Параметры условия>
Статус
Subcommand_opcode,
Monitor_Handle

Контроллер должен создать событие "Завершить команду" в ответ на эту команду. Значение состояния должно быть равно нулю, если контроллер может начать мониторинг или ненулевое состояние в противном случае. Если контроллер не поддерживает мониторинг 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 совпадение (см. ниже).

Monitor_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 истекает без получения рекламных пакетов с устройства. Если контроллер отслеживает устройство для определенного условия, следующие инструкции имеют значение true.

Если контроллер поддерживает мониторинг 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 с параметром Enable to 0x00. Контроллер должен распространять рекламный пакет на узел, даже если полученный RSSI меньше или равен RSSI_threshold_low , если RSSI_threshold_low_time_interval не истек срок действия конкретного устройства для этого условия. Значение RSSI этого пакета рекламы должно быть значением RSSI полученного объявления. Если контроллер поддерживает мониторинг RSSI расширенных объявлений LE без выборки, то же поведение, что и столбец устаревших объявлений, за исключением того, что пакет рекламы определяется как все PKU в рекламной цепочке. Если контроллер поддерживает мониторинг RSSI расширенных объявлений LE без выборки, контроллер должен распространять все полученные пакеты объявлений на узел для этого условия, если контроллер ранее не получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с параметром Enable set to 0x00.
0x01 0xFE Контроллер должен распространять устаревшие пакеты объявлений на узел каждый RSSI_sampling_period, если контроллер ранее не получил команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с параметром Enable to 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, контроллер должен уведомить узел о том, что он перестал отслеживать устройство (А), создав 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 нескольких рекламных ЦП. Сканеры должны заботиться об ограничении количества 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 нескольких рекламных ЦП. Сканеры должны заботиться об ограничении количества 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 с параметром Enable to 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, контроллер должен вернуть недопустимые параметры команды HCI (0x12).

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

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

Параметр Значение
Monitor_options Бит 5 набор; все остальные биты очищаются
Advertisement_report_filter_options Биты 1 и 2 набора; все остальные биты очищаются
Peer_device_IRK 0x0000000000000000 000000000000000000000000
Peer_device_address 0x000000000000
Peer_device_address_type 0x00

Command_parameters

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 октет):

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

RSSI_threshold_low (1 октет):

Значение Описание параметра
0xXXX Минимальное ожидаемое значение 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 Интервал выборки в миллисекундах.
Период времени = N * 100 миллисекундах.
Обязательный диапазон: 0x01 до 0xFE
0xFF Контроллер не должен распространять какие-либо полученные объявления на узел.

Monitor_options (1 октет):

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

Advertisement_report_filtering_options (1 октет):

Битовое число Описание параметра
0 Фильтрация повторяющихся рекламных ЦП. Этот бит должен быть задан только в том случае, если RSSI_sampling_period 0x00.
1 Контроллер должен создавать события HCI_LE_Advertising_Report или события HCI_LE_Directed_Advertising_Report или HCI_LE_Extended_Advertising_Report события для устаревших рекламных pdus, если эти PDUS соответствуют указанному Monitor_options.
2 Контроллер должен создавать события HCI_LE_Extended_Advertising_Report для расширенных рекламных ЦП, если эти PKU соответствуют указанному Monitor_options.
3 Контроллер должен создавать события HCI_LE_Advertising_Report или события HCI_LE_Directed_Advertising_Report или HCI_LE_Extended_Advertising_Report события для направленных рекламных ЦП, если эти pdUs соответствуют указанному Monitor_options.
Все остальные биты Зарезервировано для будущего использования

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

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

Peer_device_address_type (1 октет):

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

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

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

Condition_type (1 октет):

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

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

Number_of_patterns (1 октет):

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

Pattern_data (>3 октета):

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

UUID_type (1 октет):

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

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

Значение Описание параметра
0xXXXXXX 2 байта, если UUID_type 0x01.
4 байта, если UUID_type 0x02.
16 байт, если UUID_type 0x03.

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

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

Address_type (1 октет):

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

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

Значение Описание параметра
0xXXXXXXXXXXXXX Отслеживаемый адрес Bluetooth устройства.

Return_parameters

Состояние (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_Cancel_Monitor_Advertisement

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

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

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

Command_parameters

Subcommand_opcode (1 октет):

Значение Описание параметра
0x04 Вложенный код для HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement.

Connection_Handle (1 октет):

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

Return_parameters

Состояние (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,
Включить
Статус
Subcommand_opcode

Если для параметра Enable задано значение 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 с параметром "Включить " для 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 set to 0x01, если она ранее получила команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с параметром Enable для 0x01.
  • Контроллер должен отклонить команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с параметром Enable для 0x00, если она ранее получила команду HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable с параметром Enable для 0x00.

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

Command_parameters

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 с параметром 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. Контроллер всегда должен быстро выполнить эту команду с событием "Завершено командой".

Command_parameters

Subcommand_opcode (1 октет):

Значение Описание параметра
0x06 Вложенный код для HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 октета):

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

Return_parameters

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

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

Subcommand_opcode (1 октет):

Значение Описание параметра
0x06 Вложенный код для HCI_VS_MSFT_Read_Absolute_RSSI.

Connection_Handle (2 октета):

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

RSSI (1 октет):

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

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

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

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

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

Событие HCI Description
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 завершена. Если параметр Status равен нулю, команда завершилась, так как значение RSSI для удаленного устройства изменилось на значение за пределами указанного диапазона. Если параметр Status не является ненулевой, команда завершилась, так как значение RSSI подключения больше не может отслеживаться.

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

Event_parameters

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 октета):

Значение Описание параметра
0xXXXXXX Дескриптор подключения, rsSI которого необходимо отслеживать.

RSSI (1 октет):

Значение Описание параметра
0xXXX Измеряемое значение 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,
Address_type,
BD_ADDR,
Monitor_handle,
Monitor_state

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

Event_parameters

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

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

Microsoft_event_code (1 октет):

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

Address_type (1 октет):

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

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

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

Monitor_handle (1 октет):

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

Monitor_state (1 октет):

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

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

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

Команды HCI AVDTP Description
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_Capabilities_Configuration

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

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

Command_parameters

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 раз.

Return_parameters

Состояние (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 Описание параметра
Блок возможностей Codec Блок сведений о возможностях кодека, как описано в разделе "Разгрузка аудио- боковой полосы A2DP". В этом разделе описывается один кодек, поддерживаемый контроллером Bluetooth.

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

Audio_interface_parameter_count (1 октет):

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

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

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

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

HCI_VS_MSFT_Avdtp_Open

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

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

Command_parameters

Connection_handle (2 октета)

Value Описание параметра
0xXXXXXX IIdentifies канал AVDTP-носителя L2CAP, подключенный к удаленному устройству.

L2cap_destination_cid (2 октета)

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

L2cap_mtu (2 октета)

Value Описание параметра
0xXXXXXX MTU канала мультимедиа L2CAP AVDTP

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

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

Audio_interface_parameter_count (1 октет):

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

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

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

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

Return_parameters

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

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

Subcommand_opcode (1 октет):

Value Описание параметра
0x08 Вложенный код для HCI_VS_MSFT_Avdtp_Open.

Avdtp_offload_handle (2 октета):

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

Audio_interface_parameter_count (1 октет):

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

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

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

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

HCI_VS_MSFT_Avdtp_Start

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

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

Command_parameters

Avdtp_offload_handle (2 октета):

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

Return_parameters

Состояние (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.

Command_parameters

Avdtp_offload_handle (2 октета):

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

Return_parameters

Состояние (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.

Command_parameters

Avdtp_offload_handle (2 октета):

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

Return_parameters

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

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

Subcommand_opcode (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_threshold_high 0x01 1dB
RSSI_threshold_low 0xCE -50dB
RSSI_threshold_low_time_interval 0x05 5 секунд
RSSI_sampling_period 0xFF Выборка отсутствует
Condition_type 0x01 Condition
Условие 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]

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

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

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

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

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

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

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

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

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

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

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

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

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

Время (с) RSSI (dB)
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_threshold_low -80dB
RSSI_threshold_low_time_interval 3 секунды
RSSI_sampling_period 2 секунды

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

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

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

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

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

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

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

Параметр Значение
Subcommand_opcode_v2 0x0F
RSSI_threshold_high -127
RSSI_threshold_low -127
RSSI_threshold_low_time_interval 0x05
RSSI_sampling_period 0x00
Monitor_options Бит 0 набор; Бит 1, если устройство распространило IRK
Advertisement_report_filtering_options Бит 0, 1 и 2 набора
Peer_device_address <address>
Peer_device_address_type <Тип адреса>
Peer_device_IRK <IRK, если задан бит 1>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (длина)
0x16 (данные службы — 16-разрядный UUID)
0x00 (начальный байт)
0x4E (низкий байт ASCS UUID)
0x18 (высокий байт ASCS UUID)

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

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

Параметр Значение
Subcommand_opcode_v2 0x0F
RSSI_threshold_high -127
RSSI_threshold_low -127
RSSI_threshold_low_time_interval 0x05
RSSI_sampling_period 0x00
Monitor_options Бит 0 набор; Бит 1, если устройство распространило IRK
Advertisement_report_filtering_options Бит 0, 1 и 2 набора
Peer_device_address <address>
Peer_device_address_type <Тип адреса>
Peer_device_IRK <IRK, если задан бит 1>
Condition_type 0x01
Number_of_patterns 0x01
Pattern_data 0x04 (длина)
0x16 (данные службы — 16-разрядный UUID)
0x00 (начальный байт)
0x53 (низкий байт CAS UUID)
0x18 (высокий байт CAS UUID)

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

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

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

Блок-схема, демонстрирующая процесс фильтрации расширений Microsoft HCI.

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

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

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

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