API управления Bluetooth
Обзор API
Данная статья описывает формат данных, используемый для связи с ядром с использованием сокетов управления Bluetooth. Эти сокеты доступны, начиная с версии ядра Linux 3.4.
В следующих версиях ядра представлены новые команды, новые события или важные исправления в API управления Bluetooth:
Версия ядра Linux | Версия API управления |
---|---|
v3.4 | 1.0 |
v3.5 | 1.1 |
v3.7 | 1.2 |
v3.9 | 1.3 |
v3.13 | 1.4 |
v3.15 | 1.5 |
v3.16 | 1.6 |
v3.17 | 1.7 |
v3.19 | 1.8 |
v4.1 | 1.9 |
v4.2 | 1.10 |
v4.5 | 1.11 |
v4.6 | 1.12 |
v4.8 | 1.13 |
v4.9 | 1.14 |
v5.5 | 1.15 |
v5.6 | 1.16 |
v5.7 | 1.17 |
v5.8 | 1.18 |
Версия 1.1 вводит команду Set Device ID
.
Версия 1.2 вводит событие Passkey Notify
.
Версия 1.3 не вводит никаких новых команд или событий.
В версии 1.4 введены команды Set Advertising
, Set BR/EDR
, Set Static Address
и Set Scan Parameters
.
Существующая команда Set Discoverable
получила дополнительный параметр
для ограниченного режима обнаружения.
Имя устройства теперь предоставляется в ответных данных сканирования для Low Energy.
В версии 1.5 введены команды Set Secure Connections
, Set Debug Keys
, Set Privacy
и Load Identity Resolving Keys
.
Она также вводит события New Identity Resolving Key
и New Signature Resolving Key
.
В версии 1.6 введена команда Get Connection Information
.
Она также обновляет событие Device Found
, чтобы объединить публичные данные
и данные ответа сканирования в одно событие.
В версии 1.7 введены команды Get Clock Information
, Add Device
, Remove Device
,
Load Connection Parameters
, Read Unconfigured Index List
,
Read Controller Configuration Information
, Set External Configuration
и Set Public Address
.
Она также вводит события Device Added
, Device Removed
, New Connection Parameter
,
Unconfigured Index Added
, Unconfigured Index Removed
и New Configuration Options
.
Существующая команда Set Debug Keys
получила дополнительный параметр
для включения режима отладки SSP.
В версии 1.8 введена команда Start Service Discovery
.
Она также добавляет новые типы долгосрочных ключей для функции безопасного подключения LE.
В версии 1.9 введены команды Read Local Out Of Band Extended
, Data
,
Read Extended Controller Index List
, Read Advertising Features
, Add Advertising
и Remove Advertising
.
Она также вводит события Extended Index Added
, Extended Index Removed
,
Local Out Of Band Extended Data Updated
, Advertising Added
и Advertising Removed
.
Существующая команда Set Advertising
получила дополнительный параметр для включения
ненаправленной подключаемой отправки публичных данных.
Версия обеспечивает поддержку новой настройки статического адреса и позволяет использовать
Set Fast Connectable
при выключенном контроллере.
Версия 1.10 не вводит никаких новых команд или событий. Она расширяет функцию публичных данных для поддержки 5 параллельных экземпляров.
В версии 1.11 введены команды Get Advertising Size Information
и Start Limited Discovery
.
В версии 1.12 представлен новый режим ограниченной конфиденциальности
(значение 0x02
передаётся команде Set Privacy
).
В версии 1.13 представлен новый код причины сбоя аутентификации для события Device Disconnected
.
В версии 1.14 введена команда Read Extended Controller Information
и событие
Extended Controller Information Changed
.
Она также добавляет команду Set Appearance
.
Теперь поддерживаются флаги публичных данных Appearance и Local Name
для добавления информации об ответе на сканирование.
В версии 1.15 введены команды Get PHY Configuration
, Set PHY Configuration
и Load Blocked Keys
.
Версия 1.16 вводит настройку Wideband Speech и соответствующую команду Set Wideband Speech
.
В версии 1.17 введены команды Read Security Information
, Read Experimental Features Information
и Set Experimental Feature
и событие Experimental Feature Changed
.
В версии 1.18 введены команды Read Default System Configuration
, Set Default System Configuration
,
Read Default Runtime Configuration
, Set Default Runtime Configuration
, Get Device Flags
,
Set Device Flags
, Read Advertisement Monitor Features
, Add Advertisement Patterns Monitor
и Remove Advertisement Monitor
и события Default System Configuration Changed
, Default Runtime Configuration Changed
,
Device Flags Changed
, Advertisement Monitor Added
и Advertisement Monitor Removed
.
Пример
Сокеты управления Bluetooth можно создать, задав члену hci_channel
структуры sockaddr_hci
значение HCI_CHANNEL_CONTROL
(3) при создании необработанного сокета HCI.
На языке C необходимый код будет выглядеть примерно так:
int mgmt_create(void)
{
struct sockaddr_hci addr;
int fd;
fd = socket(PF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC | SOCK_NONBLOCK,
BTPROTO_HCI);
if (fd < 0)
return -errno;
memset(&addr, 0, sizeof(addr));
addr.hci_family = AF_BLUETOOTH;
addr.hci_dev = HCI_DEV_NONE;
addr.hci_channel = HCI_CHANNEL_CONTROL;
if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
int err = -errno;
close(fd);
return err;
}
return fd;
}
Процесс создания сокета управления должен иметь возможность CAP_NET_ADMIN
(например, она должна быть у корня).
Структуры пакетов
Команды:
0 4 8 12 16 22 24 28 31 35 39 43 47
+-------------------+--------------------+-------------------+
| Код команды | Индекс контроллера | Длина параметра |
+-------------------+--------------------+-------------------+
| |
События:
0 4 8 12 16 22 24 28 31 35 39 43 47
+-------------------+---------------------+-------------------+
| Event Code | Индекс контроллера | Длина параметра |
+-------------------+---------------------+-------------------+
| |
Все поля имеют порядок байтов от младшего к старшему.
Индекс контроллера может иметь специальное значение <non-controller>, указывающее, что команда или событие не связаны с каким-либо контроллером. Возможные значения:
- <controller id> от
0x0000
до0xFFFE
; - <non-controller>
0xFFFF
.
Коды ошибок
Следующие значения были определены для использования с событиями Command Status
и Command Complete
:
Код | Значение |
---|---|
0x00 |
Success |
0x01 |
Unknown Command |
0x02 |
Not Connected |
0x03 |
Failed |
0x04 |
Connect Failed |
0x05 |
Authentication Failed |
0x06 |
Not Paired |
0x07 |
No Resources |
0x08 |
Timeout |
0x09 |
Already Connected |
0x0A |
Busy |
0x0B |
Rejected |
0x0C |
Not Supported |
0x0D |
Invalid Parameters |
0x0E |
Disconnected |
0x0F |
Not Powered |
0x10 |
Cancelled |
0x11 |
Invalid Index |
0x12 |
RFKilled |
0x13 |
Already Paired |
0x14 |
Permission Denied |
Как правило, все команды генерируют события, как указано ниже, однако недопустимые длины
или неизвестные команды всегда будут генерировать ответ Command Status
(со значением Unknown Command
или Invalid Parameters
).
Отправка команды с недопустимым значением индекса контроллера также всегда будет генерировать
событие Command Status
с кодом статуса Invalid Index
.
Команды
Команда Read Management Version Information
Код команды: | 0x0001 |
Индекс контроллера: | <non-controller> |
Параметры команды: | |
Возвращаемые параметры: | Version (1 октет), Revision (2 октета) |
Команда возвращает версию ревизии и версию API управления. Кроме того, информация может использоваться для определения того, изменилось ли определённое поведение или исправлены ли ошибки при взаимодействии с ядром.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Команда Read Management Supported Commands
Код команды: | 0x0002 |
Индекс контроллера: | <non-controller> |
Параметры команды: | |
Возвращаемые параметры: | Num_Of_Commands (2 октета), Num_Of_Events (2 октета), Command1 (2 октета), Command2 (2 октета), ..., Event1 (2 октета), Event2 (2 октета), ... |
Команда возвращает список поддерживаемых команд и событий управления.
Команды Read Management Version Information
и Read Management Supported Commands
не включены в этот список.
Обе команды всегда поддерживаются и являются обязательными.
События Command Status
и Command Complete
не включены в этот список.
Оба являются неявными и обязательными.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Команда Read Controller Index List
Код команды: | 0x0003 |
Индекс контроллера: | <non-controller> |
Параметры команды: | |
Возвращаемые параметры: | Num_Controllers (2 октета), Controller_Index[i] (2 октета) |
Команда возвращает список контроллеров, известных в данный момент.
Контроллеры, добавленные или удалённые после её вызова, могут мониториться с помощью
событий Index Added
и Index Removed
.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Команда Read Controller Information
Код команды: | 0x0004 |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Address (6 октетов), Bluetooth_Version (1 октет), Manufacturer (2 октета), Supported_Settings (4 октета), Class_Of_Device (3 октета), Name (249 октетов), Short_Name (11 октетов) |
Команда используется для получения текущего состояния и основной информации о контроллере. Обычно она используется сразу после получения ответа на команду Read Controller Index List или события Index Added.
Параметр Address описывает публичный адрес контроллера, и можно ожидать, что он установлен.
Однако в случае однорежимных контроллеров с низким энергопотреблением
он может быть 00:00:00:00:00:00
.
В этом случае для включения контроллера необходимо сначала настроить статический адрес
с помощью команды Set Static Address
.
Если установлен публичный адрес, то он будет использоваться в качестве идентификационного адреса для контроллера. Если публичный адрес недоступен, настроенный статический адрес будет использоваться в качестве идентификационного адреса.
В случае двухрежимного контроллера с публичным адресом, который настроен как устройство только с низким энергопотреблением (BR/EDR отключён), статический адрес используется, если он установлен, иначе используется публичный адрес.
Если короткое имя не задано, параметр Short_Name
будет пустым (начинается с нулевого байта).
Current_Settings
и Supported_Settings
— это битовые маски со следующими доступными битами:
Бит | Значение |
---|---|
0 |
Включение |
1 |
Подключение |
2 |
Быстрое подключение |
3 |
Обнаружение |
4 |
Связывание |
5 |
Безопасность на уровне канала (режим безопасности 3) |
6 |
Безопасное простое сопряжение |
7 |
Базовая скорость/повышенная скорость передачи данных |
8 |
Высокая скорость |
9 |
Низкое энергопотребление |
10 |
Публичные данные |
11 |
Безопасные соединения |
12 |
Ключи отладки |
13 |
Конфиденциальность |
14 |
Конфигурация контроллера |
15 |
Статический адрес |
16 |
Физическая конфигурация |
17 |
Широкополосная речь |
18 |
Отчёт о качестве |
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set Powered
Код команды: | 0x0005 |
Индекс контроллера: | <controller id> |
Параметры команды: | Powered (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения или выключения контроллера.
Допустимые значения параметра Powered
: 0x00
и 0x01
.
Если настройка обнаружения активирована с тайм-аутом, то выключение контроллера завершит этот тайм-аут и отключит обнаружение.
Настройки, запрограммированные с помощью Set Advertising
и Add/Remove Advertising
при выключенном контроллере, будут активированы при включении контроллера.
Выключение контроллера навсегда отменит и удалит все экземпляры публичных данных
с установленным тайм-аутом, т. е. экземпляры публичных данных с ограниченным временем
не запоминаются при каждом цикле включения питания.
События Advertising Removed
будут выпущены соответствующим образом.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Invalid Parameters
,Invalid Index
.
Команда Set Discoverable
Код команды: | 0x0006 |
Индекс контроллера: | <controller id> |
Параметры команды: | Discoverable (1 октет), Timeout (2 октета) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для установки свойства обнаружения контроллера.
Допустимые значения параметра Discoverable: 0x00
, 0x01
и 0x02
.
Все остальные значения вернут ошибку Invalid Parameters
.
Timeout — это время в секундах, и оно имеет смысл только в том случае,
если для параметра Discoverable
установлено значение 0x01
или 0x02
.
Предоставление тайм-аута для 0x00
возвращает ошибку Invalid Parameters
.
Для 0x02
необходимо значение тайм-аута.
Значение 0x00
отключает обнаружение, значение 0x01
включает общее обнаружение,
а значение 0x02
включает ограниченное обнаружение.
Команда доступна только для контроллеров с поддержкой BR/EDR
(например, не для однорежимных контроллеров LE).
В противном случае она вернёт ошибку Not Supported
.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Однако использование тайм-аута, когда контроллер не включён, вернет ошибку Not Powered
.
При включении функции обнаружения и отключении настройки подключения
будет возвращена ошибка Rejected
.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Rejected
,Not Supported
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Set Connectable
Код команды: | 0x0007 |
Индекс контроллера: | <controller id> |
Параметры команды: | Connectable (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для установки свойства подключения контроллера.
Допустимые значения параметра Connectable: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Команда доступна и для однорежимных BR/EDR или LE, и для двухрежимных контроллеров. Для BR/EDR она изменяет настройку сканирования страницы, а для контроллеров LE изменяет тип публичных данных. Для двухрежимных контроллеров она влияет на обе настройки.
Для контроллеров с поддержкой LE подключаемые настройки вступают в силу, когда включены публичные данные (периферийные) или когда получены направленные события публичных данных (центральные).
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
При отключении возможности подключения также отключается настройка обнаружения. Повторное включение возможности подключения не восстановит возможность обнаружения. Она останется выключенной, и её необходимо снова включить вручную.
При отключении возможности подключения истечёт время действия параметра обнаружения с тайм-аутом.
Настройка не влияет на известные устройства из команды Add Device
.
Таким устройствам всегда разрешено подключение.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Fast Connectable
Код команды: | 0x0008 |
Индекс контроллера: | <controller id> |
Параметры команды: | Enable (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для перевода контроллера в состояние подключения, когда параметры сканирования страниц установлены таким образом, чтобы обеспечить более быстрое подключение за счёт более высокого энергопотребления.
Допустимые значения параметра Enable: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Команда доступна только для контроллеров с поддержкой BR/EDR
(например, не для однорежимных контроллеров LE).
В противном случае она вернёт ошибку Not Supported
.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Настройка сохраняется при включении/выключении.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Failed
,Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Bondable
Код команды: | 0x0009 |
Индекс контроллера: | <controller id> |
Параметры команды: | Bondable (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для установки свойства связывания контроллера.
Допустимые значения параметра Bondable: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Включение возможности связывания не приводит к автоматическому переключению контроллера в режим соединения. Это нужно выполнить отдельно.
Настройка сохраняется при включении/выключении.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set Link Security
Код команды: | 0x000A |
Индекс контроллера: | <controller id> |
Параметры команды: | Link_Security (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения или отключения безопасности на уровне канала для контроллера
(также известного как режим безопасности 3).
Допустимые значения параметра Link_Security: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Команда доступна только для контроллеров с поддержкой BR/EDR
(например, не для однорежимных контроллеров LE).
В противном случае она вернёт ошибку Not Supported
.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Secure Simple Pairing
Код команды: | 0x000B |
Индекс контроллера: | <controller id> |
Параметры команды: | Secure_Simple_Pairing (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения/отключения поддержки безопасного простого сопряжения
для контроллера.
Допустимые значения параметра Secure_Simple_Pairing
: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Команда доступна только для контроллеров с поддержкой BR/EDR, поддерживающих основную спецификацию версии 2.1 или выше (например, не для однорежимных контроллеров LE или контроллеров до версии 2.1).
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
В случае, если контроллер не поддерживает безопасное простое сопряжение,
команда не будет выполнена и вызовет ошибку Not Supported
.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set High Speed
Код команды: | 0x000C |
Индекс контроллера: | <controller id> |
Параметры команды: | High_Speed (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения/отключения поддержки высокой скорости Bluetooth для контроллера.
Допустимые значения параметра High_Speed: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Команда доступна только для контроллеров с поддержкой BR/EDR (например, не для однорежимных контроллеров LE).
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Чтобы включить поддержку высокой скорости, необходимо, чтобы сначала была включена поддержка безопасного простого сопряжения. Поддержка высокой скорости невозможна для соединений без безопасного простого сопряжения.
При отключении безопасного простого сопряжения поддержка высокой скорости также будет отключена. Повторное включение безопасного простого сопряжения не приведёт к повторному включению поддержки высокой скорости. Это нужно выполнить отдельно.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Low Energy
Код команды: | 0x000D |
Индекс контроллера: | <controller id> |
Параметры команды: | Low_Energy (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения/выключения поддержки Low Energy для контроллера.
Допустимые значения параметра Low_Energy: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Команда доступна только для контроллеров с поддержкой LE и в противном случае
приведёт к ошибке Not Supported
.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Если подсистема ядра не поддерживает Low Energy или контроллер тоже не поддерживает её, команда завершится ошибкой.
Отключение поддержки LE навсегда отключит и удалит все экземпляры публичных данных,
настроенные с помощью команды Add Advertising
.
События Advertising Removed
будут выпущены соответствующим образом.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Device Class
Код команды: | 0x000E |
Индекс контроллера: | <controller id> |
Параметры команды: | Major_Class (1 октет), Minor_Class (1 октет) |
Возвращаемые параметры: | Class_Of_Device (3 октета) |
Команда используется для установки основного и дополнительного классов устройств для контроллеров с поддержкой BR/EDR.
Команда также неявно отключит кэширование ожидающих обновлений CoD и EIR.
Команда доступна только для контроллеров с поддержкой BR/EDR (например, не для однорежимных контроллеров LE).
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
В случае, если контроллер выключен, для класса параметра устройства будет возвращено 0x000000
.
И после включения новое значение будет объявлено через событие изменения класса устройства.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Local Name
Код команды: | 0x000F |
Индекс контроллера: | <controller id> |
Параметры команды: | Name (249 октетов), Short_Name (11 октетов) |
Возвращаемые параметры: | Name (249 октетов), Short_Name (11 октетов) |
Команда используется для установки локального имени контроллера. Параметры команды также включают короткое имя, которое будет использоваться в случае, если полное имя не помещается в данные EIR/AD.
Параметры имени должны всегда заканчиваться нулевым байтом (в противном случае команда не будет выполнена).
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Значения имени и краткого имени сохранятся при выключении и повторном включении контроллера. Таким образом, имя и краткое имя нужно задать только один раз, когда будет найден новый контроллер, и они останутся такими до тех пор, пока не будут удалены.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Add UUID
Код команды: | 0x0010 |
Индекс контроллера: | <controller id> |
Параметры команды: | UUID (16 октетов), SVC_Hint (1 октет) |
Возвращаемые параметры: | Class_Of_Device (3 октета) |
Команда используется для добавления UUID для публикации в данных EIR. Входящий параметр SVC_Hint используется, чтобы сообщить ядру, нужно ли изменять биты класса обслуживания значения класса устройства из-за данного UUID.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
В случае, если контроллер выключен, для класса параметра устройства будет возвращено 0x000000
.
И после включения новое значение будет объявлено через событие изменения класса устройства.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Invalid Parameters
,Invalid Index
.
Команда Remove UUID
Код команды: | 0x0011 |
Индекс контроллера: | <controller id> |
Параметры команды: | UUID (16 октетов) |
Возвращаемые параметры: | Class_Of_Device (3 октета) |
Команда используется для удаления UUID, ранее добавленного с помощью команды Add UUID.
Когда параметр UUID является пустым UUID (16 x 0x00), все ранее загруженные UUID будут удалены.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
В случае, если контроллер выключен, для класса параметра устройства будет возвращено 0x000000
.
И после включения новое значение будет объявлено через событие изменения класса устройства.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Invalid Parameters
,Invalid Index
.
Команда Load Link Keys
Код команды: | 0x0012 |
Индекс контроллера: | <controller id> |
Параметры команды: | Debug_Keys (1 октет), Key_Count (2 октета), Key1 { Address (6 октетов), Address_Type (1 октет), Key_Type (1 октет), Value (16 октетов), PIN_Length (1 октет) }, Key2 { } ... |
Возвращаемые параметры: |
Команда используется для передачи ядру известных на данный момент ключей ссылок. Команду не нужно вызывать снова после получения событий New Link Key, так как ядро автоматически обновляет свой список.
Параметр Debug_Keys используется, чтобы сообщить ядру, следует ли принимать использование
ключей отладки или нет.
Допустимые значения для этого параметра: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Использование параметра Debug_Keys
устарело и заменено командой Set Debug Keys
.
Установка параметра Debug_Keys с помощью команды Load Link Keys
имеет тот же эффект,
что и его установка с помощью Set Debug Keys
, и применяется ко всем ключам в системе.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Зарезервировано (не используется) |
2 |
Зарезервировано (не используется) |
Публичные и случайные адреса LE недействительны и будут отклонены.
В настоящее время определены следующие значения Key_Type
:
Значение | Комментарий |
---|---|
0x00 |
Комбинированный ключ |
0x01 |
Ключ локального устройства |
0x02 |
Ключ удалённого блока |
0x03 |
Комбинированный ключ отладки |
0x04 |
Неаутентифицированный комбинированный ключ от P-192 |
0x05 |
Аутентифицированный комбинированный ключ от P-192 |
0x06 |
Изменённый комбинированный ключ |
0x07 |
Неаутентифицированный комбинированный ключ от P-256 |
0x08 |
Аутентифицированный комбинированный ключ от P-256 |
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Load Long Term Keys
Код команды: | 0x0013 |
Индекс контроллера: | <controller id> |
Параметры команды: | Key_Count (2 октета), Key1 { Address (6 октетов), Address_Type (1 октет), Key_Type (1 октет), Central (1 октет), Encryption_Size (1 октет), Encryption_Diversifier (2 октета), Random_Number (8 октетов), Value (16 октетов) }, Key2 { } ... |
Возвращаемые параметры: |
Команда используется для подачи в ядро известных на данный момент (SMP) долгосрочных ключей.
Команду не нужно вызывать снова после получения событий New Long Term Key
,
так как ядро автоматически обновляет свой список.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
Зарезервировано (не используется) |
1 |
Публичный LE |
2 |
Случайный LE |
Предоставленные Address
и Address_Type
являются идентификатором устройства.
Так что это либо его публичный адрес, либо статический случайный адрес.
Неразрешимые случайные адреса и разрешимые случайные адреса недействительны и будут отклонены.
В настоящее время определены следующие значения Key_Type
:
Значение | Комментарий |
---|---|
0x00 |
Неаутентифицированный ключ |
0x01 |
Аутентифицированный ключ |
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Disconnect
Код команды: | 0x0014 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для принудительного отключения подключённого в данный момент устройства.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Not Connected
,Busy
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Get Connections
Код команды: | 0x0015 |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Connection_Count (2 октета), Address1 { Address (6 октетов), Address_Type (1 октет) }, Address2 { } ... |
Команда используется для получения списка подключённых в данный момент устройств.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Для устройств, использующих разрешимые случайные адреса с известным ключом разрешения
идентификатора, Address
и Address_Type
будут содержать информацию об идентификаторе.
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Not Powered
,Invalid Index
.
Команда PIN Code Reply
Код команды: | 0x0016 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет), PIN_Length (1 октет), PIN_Code (16 октетов) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для ответа на событие запроса PIN-кода.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Not Connected
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда PIN Code Negative Reply
Код команды: | 0x0017 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для возврата отрицательного ответа на событие запроса PIN-кода.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Not Connected
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Set IO Capability
Код команды: | 0x0018 |
Индекс контроллера: | <controller id> |
Параметры команды: | IO_Capability (1 октет) |
Возвращаемые параметры: |
Команда используется для установки возможности ввода-вывода, используемой для сопряжения. Команда принимает значения как SSP, так и SMP.
Возможные значения параметра IO_Capability
:
Число | Значение |
---|---|
0 |
DisplayOnly |
1 |
DisplayYesNo |
2 |
KeyboardOnly |
3 |
NoInputNoOutput |
4 |
KeyboardDisplay |
Передача значения 4 (KeyboardDisplay) заставит ядро преобразовать его в 1 (DisplayYesNo) в случае соединения BR/EDR (поскольку KeyboardDisplay специфичен для SMP).
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Pair Device
Код команды: | 0x0019 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет), IO_Capability (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для запуска сопряжения с удалённым устройством.
Параметр команды IO_Capability
используется для временного (только для этого события сопряжения)
переопределения глобальных возможности ввода-вывода
(устанавливается с помощью команды Set IO Capability
).
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Возможные значения параметра IO_Capability
:
Число | Значение |
---|---|
0 |
DisplayOnly |
1 |
DisplayYesNo |
2 |
KeyboardOnly |
3 |
NoInputNoOutput |
4 |
KeyboardDisplay |
Передача значения 4 (KeyboardDisplay) заставит ядро преобразовать его в 1 (DisplayYesNo) в случае соединения BR/EDR (поскольку KeyboardDisplay специфичен для SMP).
Address и Address_Type возвращаемых параметров вернут идентификационный адрес, если он известен. В случае, если в качестве параметров команды задан разрешимый случайный адрес, а удалённое устройство предоставляет ключ разрешения идентификации, возвращаемые параметры будут предоставлять разрешённый адрес.
Чтобы разрешить отслеживание того, какой разрешимый случайный адрес изменился на какой идентификационный адрес, событие New Identity Resolving Key будет отправлено перед получением события Command Complete.
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Статус Reject
используется, когда запрошенный транспорт не включён.
Статус Not Supported
используется, если контроллер не поддерживает запрошенный транспорт.
Возможные ошибки:
Rejected
,Not Supported
,Connect Failed
,Busy
,Invalid Parameters
,Not Powered
,Invalid Index
,Already Paired
.
Команда Cancel Pair Device
Код команды: | 0x001A |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Параметры Address и Address_Type должны совпадать с параметрами, указанными в предыдущей команде Pair Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Unpair Device
Код команды: | 0x001B |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет), Disconnect (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Удаляет все ключи, связанные с удалённым устройством.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Параметр Disconnect указывает ядру, следует ли принудительно отключать любые существующие подключения к устройству. На практике он всегда должен быть равен 1, за исключением некоторых специальных квалификационных тестов GAP, где требуется удаление ключа без отключения.
При отключении устройства его ключ связи, долгосрочный ключ и ключ разрешения идентификации, если он предоставлен, будут удалены.
Для устройств, использующих разрешимые случайные адреса, где ключ разрешения идентификации был доступен, после этой команды они больше не будут разрешаться. Устройство, по сути, снова станет частным.
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Not Paired
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда User Confirmation Reply
Код команды: | 0x001C |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для ответа на событие User Confirmation Request.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Not Connected
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда User Confirmation Negative Reply
Код команды: | 0x001D |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для возврата отрицательного ответа на событие User Confirmation Request.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Not Connected
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда User Passkey Reply
Код команды: | 0x001E |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет), Passkey (4 октета) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для ответа на событие User Confirmation Passkey Request.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Not Connected
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда User Passkey Negative Reply
Код команды: | 0x001F |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для возврата отрицательного ответа на событие User Passkey Request.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Not Connected
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Read Local Out Of Band Data
Код команды: | 0x0020 |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Hash_192 (16 октетов), Randomizer_192 (16 октетов), Hash_256 (16 октетов, опционально), Randomizer_256 (16 октетов, опционально) |
Команда используется для чтения локальных данных вне диапазона.
Команду можно использовать, только когда контроллер включён.
Если включена поддержка безопасных соединений, команда вернёт версии хэша и рандомизатора P-192, а также версии обоих P-256.
Значения, возвращаемые этой командой, становятся недействительными при отключении питания контроллера. После каждого выключения питания необходимо снова вызывать эту команду, чтобы получить обновлённые значения.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Not Supported
,Busy
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Add Remote Out Of Band Data
Код команды: | 0x0021 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет), Hash_192 (16 октетов), Randomizer_192 (16 октетов), Hash_256 (16 октетов, опционально), Randomizer_256 (16 октетов, опционально) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для предоставления данных вне диапазона для удалённого устройства.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Данные вне диапазона сохраняются при включении/выключении питания.
Команда также принимает дополнительные версии хэша и рандомизатора P-256. Если они не указаны, то им присваивается нулевое значение.
Версии P-256 также могут предоставляться, когда поддержка безопасных соединений не включена. Однако в этом случае они никогда не будут использованы.
Чтобы предоставить только версии P-256 хэша и рандомизатора, допустимо оставить оба поля P-192 нулевыми. Если Secure Connections отключено, то, конечно, это эквивалентно тому, когда не предоставляются никакие данные.
При предоставлении данных для удалённых устройств LE поля Hash_192 и Randomizer_192 не используются, и будут установлены равными нулю.
Поля Hash_256 и Randomizer_256 можно использовать для безопасных соединений LE с данными вне диапазона. Если предоставлены только данные о безопасных соединениях LE, поля Hash_P192 и Randomizer_P192 могут быть установлены равными нулю. В настоящее время не поддерживается предоставление значения TK Security Manager для устаревшего сопряжения LE.
Если включён режим Secure Connections Only, Hash_P192 и Randomizer_P192 не разрешены. Их необходимо установить равными нулю.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Failed
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Remove Remote Out Of Band Data
Код команды: | 0x0022 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для удаления данных, добавленных с помощью команды Add Remote Out Of Band Data.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Когда параметр Address равен 00:00:00:00:00:00
, все ранее добавленные данные будут удалены.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Start Discovery
Код команды: | 0x0023 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address_Type (1 октет) |
Возвращаемые параметры: | Address_Type (1 октет) |
Команда используется для запуска процесса обнаружения удалённых устройств. Событие Device Found будет отправлено для каждого обнаруженного устройства.
Возможные значения параметра Address_Type
являются побитовыми или состоят из следующих битов:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Возможны следующие комбинации:
Значение | Комментарий |
---|---|
1 |
BR/EDR |
6 |
LE (публичный & случайный) |
7 |
BR/EDR/LE (обнаружение с чередованием) |
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Stop Discovery
Код команды: | 0x0024 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address_Type (1 октет) |
Возвращаемые параметры: | Address_Type (1 октет) |
Команда используется для остановки процесса обнаружения, запущенного с помощью команды Start Discovery.
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Rejected
,Invalid Parameters
,Invalid Index
.
Команда Confirm Name
Код команды: | 0x0025 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет), Name_Known (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда действительна только во время обнаружения устройства и ожидается для каждого события
Device Found
с установленным флагом Confirm Name
.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Параметр Name_Known должен иметь значение 0x01, если пользовательскому пространству известно
название устройства, и 0x00
, если нет.
Если установлено значение 0x00
, ядро выполнит процедуру разрешения имени
для рассматриваемого устройства.
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Failed
,Invalid Parameters
,Invalid Index
.
Команда Block Device
Код команды: | 0x0026 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для добавления устройства в список устройств, подключение которых к локальному контроллеру должно быть заблокировано.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Для устройств с низким энергопотреблением блокировка устройства имеет приоритет над действиями автоматического подключения, предоставляемыми Add Device. Заблокированные устройства не будут автоматически подключаться или даже не будет сообщения об их обнаружении во время фонового сканирования. Если контроллер подключаемый, прямые публичные данные с заблокированных устройств также будет игнорироваться.
Соединения, созданные из публичных данных контроллера, будут сброшены, если устройство заблокировано.
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Failed
,Invalid Parameters
,Invalid Index
.
Команда Unblock Device
Код команды: | 0x0027 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для удаления устройства из списка заблокированных устройств (куда оно было добавлено с помощью команды Block Device).
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Когда параметр Address равен 00:00:00:00:00:00
, все ранее заблокированные устройства
будут разблокированы.
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set Device ID
Код команды: | 0x0028 |
Индекс контроллера: | <controller id> |
Параметры команды: | Source (2 октета), Vendor (2 октета), Product (2 октета), Version (2 октета) |
Возвращаемые параметры: |
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Параметр Source выбирает организацию, которой присвоен параметр Vendor:
Значение | Комментарий |
---|---|
0x0000 |
Идентификатор устройства отключён |
0x0001 |
Bluetooth SIG |
0x0002 |
Форум разработчиков USB |
Информация помещается в данные EIR. Если контроллер не поддерживает EIR или если SSP отключён, команда всё равно будет успешной. Информация сохраняется для последующего использования и сохраняется при включении и выключении SSP.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set Advertising
Код команды: | 0x0029 |
Индекс контроллера: | <controller id> |
Параметры команды: | Advertising (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения публичных данных LE на контроллере, который её поддерживает.
Допустимые значения параметра команды Advertising: 0x00
, 0x01
и 0x02
.
Все остальные значения вернут ошибку Invalid Parameters
.
Значение 0x00
отключает публичные данные, значение 0x01
включает публичные данные
с учётом настройки подключения, а значение 0x02
включает публичные данные в режиме подключения.
Использование значения 0x01
означает, что, когда параметр соединения отключён,
публичные данные отправляются с ненаправленными неподключаемыми пакетами
и используется неразрешимый случайный адрес.
Если параметр подключения включён, то используются ненаправленные пакеты с возможностью подключения
и идентификационный адрес или разрешаемый частный адрес.
Устройства LE, настроенные с помощью команды Add Device с Action 0x01
, не действуют
при использовании значения Advertising 0x01
, поскольку учитывается только параметр подключения.
Чтобы использовать ненаправленные подключаемые публичные данные без изменения
настройки подключения, можно использовать значение 0x02
.
Это позволяет подключать устройство через LE без необходимости подключения к BR/EDR (и/или LE).
Значение 0x02
должно быть предпочтительным режимом работы при реализации периферийного режима.
Использование этой команды временно деактивирует любую конфигурацию,
сделанную командой Add Advertising.
Данная команда имеет приоритет.
После запуска команды Set Advertising со значением 0x00
любые ранее сделанные конфигурации
с помощью Add/Remove Advertising, включая изменения, сделанные во время действия Set Advertising,
будут повторно включены.
Обязательным условием является то, что LE уже включён, в противном случае
команда вернёт ответ Rejected
.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set BR/EDR
Код команды: | 0x002A |
Индекс контроллера: | <controller id> |
Параметры команды: | BR/EDR (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения или отключения поддержки BR/EDR на двухрежимном контроллере.
Допустимые значения параметра команды Advertising: 0x00
, 0x01
и 0x02
.
Все остальные значения вернут ошибку Invalid Parameters
.
Обязательным условием является то, что LE уже включён, в противном случае
команда вернёт ответ Rejected
.
Включить BR/EDR можно как при включённом, так и при выключенном питании, однако отключить его
можно только при выключенном питании (иначе команда снова вернёт Rejected
).
Отключение BR/EDR автоматически отключит все остальные настройки, связанные с BR/EDR.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Static Address
Код команды: | 0x002B |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда позволяет установить статический случайный адрес. Он поддерживается только на контроллерах с поддержкой LE. Предполагается, что статический случайный адрес действителен в течение всего срока службы контроллера или, по крайней мере, до следующего выключения и включения питания. Чтобы обеспечить такое поведение, установка адреса ограничена отключением питания контроллера.
Для отключения статического адреса можно использовать
специальный адрес BDADDR_ANY (00:00:00:00:00:00
).
Когда контроллер имеет публичный адрес (который требуется для всех двухрежимных контроллеров),
этот адрес не используется.
Если двухрежимный контроллер настроен только как устройство с низким энергопотреблением
(BR/EDR отключён), то используется статический адрес.
Только когда информация о контроллере сообщает BDADDR_ANY (00:00:00:00:00:00
),
необходимо сначала настроить статический адрес.
Если режим конфиденциальности включён, а контроллер работает только в одном режиме LE без публичного адреса, в качестве идентификационного адреса используется статический случайный адрес.
Флаг Static Address из текущих настроек также можно использовать для определения того, используется ли настроенный статический адрес или нет.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Scan Parameters
Код команды: | 0x002C |
Индекс контроллера: | <controller id> |
Параметры команды: | Interval (2 октета), Window (2 октета) |
Возвращаемые параметры: |
Команда позволяет установить параметры сканирования с низким энергопотреблением, используемые для установления соединения и пассивного сканирования. Она поддерживается только на контроллерах с поддержкой LE.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Secure Connections
Код команды: | 0x002D |
Индекс контроллера: | <controller id> |
Параметры команды: | Secure_Connections (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения/отключения поддержки безопасных соединений для контроллера.
Допустимые значения параметра Secure_Connections: 0x00
, 0x01
и 0x02
.
Все остальные значения вернут ошибку Invalid Parameters
.
Значение 0x00
отключает безопасные соединения, значение 0x01
включает безопасные соединения,
а значение 0x02
включает режим только безопасных соединений.
Команда доступна только для контроллеров с поддержкой LE, а также для контроллеров, поддерживающих основную спецификацию версии 4.1 или выше.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
В случае, если контроллер не поддерживает безопасные соединения, команда не выполнится
и вернёт ошибку Not Supported
.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Debug Keys
Код команды: | 0x002E |
Индекс контроллера: | <controller id> |
Параметры команды: | Debug_Keys (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется, чтобы сообщить ядру, допускать ли использование ключей отладки или нет.
Допустимые значения для её параметра: 0x00
, 0x01
и 0x02
.
Все остальные значения вернут ошибку Invalid Parameters
.
При значении 0x00
любой сгенерированный ключ отладки будет удалён, как только соединение прервётся.
Со значением 0x01
сгенерированные ключи отладки будут сохранены
и могут использоваться для будущих подключений.
Однако ключи отладки всегда помечаются как непостоянные и не должны храниться.
Это означает, что перезагрузка или изменение значения обратно на 0x00
удалит их.
Со значением 0x02
сгенерированные ключи отладки будут сохранены
и могут использоваться для будущих подключений.
Это имеет тот же эффект, что и значение 0x01
.
Кроме того, это значение также будет входить в режим контроллера для генерации ключей отладки
для каждого нового сопряжения.
Изменение значения обратно на 0x01
или 0x00
отключит режим контроллера
для генерации ключей отладки.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Privacy
Код команды: | 0x002F |
Индекс контроллера: | <controller id> |
Параметры команды: | Privacy (1 октет), Identity_Resolving_Key (16 октетов) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения функции конфиденциальности с низким энергопотреблением с использованием разрешаемых частных адресов.
Значение 0x00
отключает режим конфиденциальности, значения 0x01
и 0x02
включают его.
При значении 0x01
ядро всегда будет использовать режим конфиденциальности.
Это означает, что разрешаемый частный адрес используется, когда контроллер доступен
для обнаружения, а также при инициировании сопряжения.
Со значением 0x02
ядро будет использовать режим ограниченной конфиденциальности
с разрешаемым частным адресом, за исключением случаев, когда контроллер является связанным
и доступным для обнаружения, и в этом случае используется идентификационный адрес.
Раскрытие идентификационного адреса при связывании и обнаружении или во время инициированного сопряжения может быть проблемой конфиденциальности. Для двухрежимного контроллера этим можно пренебречь, так как его публичный адрес в любом случае будет доступен через BR/EDR. Преимущество раскрытия идентификационного адреса для целей сопряжения заключается в том, что в таком случае становится возможным сопоставление устройств с двухрежимной топологией во время обнаружения.
Если используется значение конфиденциальности 0x02
, то база данных GATT также должна раскрывать
характеристику конфиденциальности, чтобы удалённые устройства могли определить,
используется ли функция конфиденциальности или нет.
Когда контроллер имеет публичный адрес (обязательный для двухрежимных контроллеров), он используется как идентификационный адрес. В случае, если контроллер является однорежимнымым LE без публичного адреса, необходимо сначала настроить статический случайный адрес. Режим конфиденциальности можно включить только при наличии идентификационного адреса.
Identity_Resolving_Key — это локальный ключ, назначенный для локального разрешаемого частного адреса.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Load Identity Resolving Keys
Код команды: | 0x0030 |
Индекс контроллера: | <controller id> |
Параметры команды: | Key_Count (2 октета), Key1 { Address (6 октетов), Address_Type (1 октет), Value (16 октетов) }, Key2 { }, ... |
Возвращаемые параметры: |
Команда используется для подачи в ядро известных на данный момент ключей разрешения идентификационных данных. Команду не нужно вызывать снова после получения событий New Identity Resolving Key, так как ядро автоматически обновляет свой список.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
Зарезервировано (не используется) |
1 |
Публичный LE |
2 |
Случайный LE |
Предоставленные Address и Address_Type являются идентификатором устройства. Так что они представляют либо его публичный адрес, либо статический случайный адрес.
Неразрешимые и разрешимые случайные адреса недействительны и будут отклонены.
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Get Connection Information
Код команды: | 0x0031 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет), RSSI (1 октет), TX_Power (1 октет), Max_TX_Power (1 октет) |
Команда используется для получения информации о соединении.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
TX_Power и Max_TX_Power можно установить на 127, если значения недействительны или неизвестны. Значение 127 для RSSI означает, что он недоступен.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
В случае ошибки действительными являются только поля Address и Address_Type,
а значения остальных параметров считаются недействительными и должны игнорироваться.
Возможные ошибки:
Not Connected
,Not Powered
,Invalid Parameters
,Invalid Index
.
Команда Get Clock Information
Код команды: | 0x0032 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет), Local_Clock (4 октета), Piconet_Clock (4 октета), Accuracy (2 октета) |
Команда используется для получения информации о часах локальной сети и пикосети.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Зарезервировано (не используется) |
2 |
Зарезервировано (не используется) |
Accuracy может быть установлена на 0xffff, что означает, что значение неизвестно.
Если для Address установлено значение 00:00:00:00:00:00
, допустимое значение имеет
только поле Local_Clock.
Поля Piconet_Clock и Accuracy недействительны и должны игнорироваться.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
В случае ошибки действительными являются только поля Address и Address_Type,
а значения остальных параметров считаются недействительными и должны игнорироваться.
Возможные ошибки:
Not Connected
,Not Powered
,Invalid Parameters
,Invalid Index
.
Команда Add Device
Код команды: | 0x0033 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет), Action (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для добавления устройства в список действий. Список действий позволяет сканировать устройства и разрешает входящие соединения с известных устройств.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Возможные значения параметра Action
:
Значение | Комментарий |
---|---|
0 |
Фоновое сканирование устройства |
1 |
Разрешено входящее соединение |
2 |
Автоподключение удалённого устройства |
Если Action равно 0, когда устройство будет найдено, будет отправлено новое событие Device Found, указывающее, что это устройство доступно. Это действие допустимо только для типов адресов Публичный LE и Случайный LE.
Если Action равно 1, устройству разрешено подключение. Для типа адреса BR/EDR это означает входящее соединение. Для типов адресов Публичный LE и Случайный LE подключение к устройствам будет установлено с помощью направленных публичных данных. В случае успеха будет отправлено событие Device Connected.
Если Action равно 2, когда устройство будет найдено, оно будет подключено, и в случае успеха будет отправлено событие Device Connected. Это действие допустимо только для типов адресов Публичный LE и Случайный LE.
Когда устройство заблокировано с помощью команды Block Device, можно добавить устройство сюда, но все действия будут игнорироваться до тех пор, пока устройство не будет разблокировано.
Устройства, добавленные с помощью Action 1, могут подключаться, даже если параметр подключения отключён. Это действует как список известных доверенных устройств.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Failed
,Invalid Parameters
,Invalid Index
.
Команда Remove Device
Код команды: | 0x0034 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для удаления устройства из списка действий, ранее добавленного с помощью команды Add Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Когда параметр Address равен 00:00:00:00:00:00
, все ранее добавленные устройства будут удалены.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Load Connection Parameters
Код команды: | 0x0035 |
Индекс контроллера: | <controller id> |
Параметры команды: | Param_Count (2 октета), Param1 { Address (6 октетов), Address_Type (1 октет), Min_Connection_Interval (2 октета), Max_Connection_Interval (2 октета), Connection_Latency (2 октета), Supervision_Timeout (2 октета) }, Param2 { }, ... |
Возвращаемые параметры: |
Команда используется для загрузки параметров соединения с нескольких устройств в ядро. В настоящее время она поддерживается только на контроллерах с поддержкой Low Energy.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
Зарезервировано (не используется) |
1 |
Публичный LE |
2 |
Случайный LE |
Предоставленные Address и Address_Type являются идентификатором устройства. Так что они представляют либо его публичный адрес, либо статический случайный адрес.
Параметры Min_Connection_Interval, Max_Connection_Interval, Connection_Latency и Supervision_Timeout следует настроить, как описано в спецификации Core 4.1, том 2, 7.8.12.
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
,Not Supported
.
Команда Read Unconfigured Controller Index List
Код команды: | 0x0036 |
Индекс контроллера: | <non-controller> |
Параметры команды: | |
Возвращаемые параметры: | Num_Controllers (2 октета), Controller_Index[i] (2 октета) |
Команда возвращает список ненастроенных контроллеров. Ненастроенные контроллеры, добавленные после вызова этой команды, можно отслеживать с помощью события Unconfigured Index Added.
Ненастроенный контроллер может либо перейти в сконфигурированное состояние, указав событие Unconfigured Index Removed, за которым следует событие Index Added; или он может быть удалён из системы, что будет обозначено событием Unconfigured Index Removed.
С помощью команды будут перечислены только контроллеры, требующие настройки. Контроллер, который полностью настроен, не будет указан в списке, даже если он поддерживает изменения конфигурации.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Команда Read Controller Configuration Information
Код команды: | 0x0037 |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Manufacturer (2 октета), Supported_Options (4 октета), Missing_Options (4 октета) |
Команда используется для получения поддерживаемых параметров конфигурации контроллера и отсутствующих параметров конфигурации.
Отсутствующие параметры необходимо настроить до того, как контроллер будет считаться полностью сконфигурированным и готовым к стандартной работе. Команда обычно используется сразу после получения ответа на команду Read Unconfigured Controller Index List или на событие Unconfigured Index Added.
Supported_Options и Missing_Options — это битовая маска со следующими доступными битами:
Значение | Комментарий |
---|---|
0 |
Внешняя конфигурация |
1 |
Конфигурация публичного адреса Bluetooth |
Команду допустимо вызывать на контроллерах, не требующих настройки. Вполне возможно, что полностью сконфигурированный контроллер предлагает дополнительную поддержку для настройки.
Например, контроллер может содержать действительный адрес публичного устройства Bluetooth, но также позволяет настраивать его из стека хоста. В таком случае общая поддержка конфигураций будет указана в настройках конфигурации контроллера. Для контроллеров, у которых нет доступных параметров конфигурации, этот параметр настройки не будет присутствовать.
Когда все настройки будут завершены и в результате маска Missing_Options станет пустой, готовый контроллер будет объявлен через событие Index Added.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set External Configuration
Код команды: | 0x0038 |
Индекс контроллера: | <controller id> |
Параметры команды: | Configuration (1 октет) |
Возвращаемые параметры: | Missing_Options (4 октета) |
Команда позволяет изменить параметр внешней конфигурации, чтобы указать, что контроллер настроен или не настроен.
Значение 0x00
устанавливает ненастроенное состояние, а значение 0x01
устанавливает
сконфигурированное состояние контроллера.
Не обязательно, чтобы этот параметр конфигурации предоставлялся контроллером. Если он предусмотрен, конфигурация должна выполняться извне с использованием канала пользователя или с помощью методов, определённых поставщиком.
Установка данной опции, когда Missing_Options возвращает ноль, означает, что контроллер перейдёт в настроенное состояние и можно ожидать, что это будет объявлено через событие Index Added.
Неправильно настроенные контроллеры могут по-прежнему вызывать ошибку при попытке включить их с помощью команды Set Powered.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Set Public Address
Код команды: | 0x0039 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов) |
Возвращаемые параметры: | Missing_Options (4 октета) |
Команда позволяет настроить публичный адрес. Поскольку требуется специальная процедура поставщика, данная команда может поддерживаться не всеми контроллерами. На самом деле, скорее всего, только несколько встроенных контроллеров будут поддерживать эту команду.
Если в маске поддерживаемых опций указана поддержка конфигурации публичного адреса Bluetooth, эту команду можно использовать для настройки публичного адреса.
Публичный адрес можно настроить только при выключенном контроллере.
Для ненастроенного контроллера, когда Missing_Options возвращает пустую маску, можно ожидать события Index Added для полностью настроенного контроллера.
Для полностью настроенного контроллера текущий индекс контроллера станет недействительным, и будет отправлено событие Unconfigured Index Removed. После успешного изменения адреса будет отправлено событие Index Added. Нет гарантии, что индекс контроллера останется прежним.
Все ранее настроенные параметры и настройки теряются при успешном выполнении этой команды. Контроллер должен рассматриваться как новый. Разработчику следует использовать эту команду для полностью настроенного контроллера, только если он действительно знает, что делает.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Start Service Discovery
Код команды: | 0x003a |
Индекс контроллера: | <controller id> |
Параметры команды: | Address_Type (1 октет), RSSI_Threshold (1 октет), UUID_Count (2 октета), UUID[i] (16 октетов) |
Возвращаемые параметры: | Address_Type (1 октет) |
Команда используется для запуска процесса обнаружения удалённых устройств с определённым UUID. Событие Device Found будет отправлено для каждого обнаруженного устройства.
Возможные значения параметра Address_Type
являются побитовыми или состоят из следующих битов:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Возможны следующие комбинации:
Значение | Комментарий |
---|---|
1 |
BR/EDR |
6 |
LE (публичный & случайный) |
7 |
BR/EDR/LE (обнаружение с чередованием) |
Обнаружение службы использует активное сканирование для сканирования с низким энергопотреблением и будет искать UUID как в публичных данных, так и в данных ответа на сканирование.
О найденных устройствах, значение RSSI которых меньше RSSI_Threshold, не сообщается через событие DeviceFound. Установка значения 127 приведёт к тому, что все устройства будут добавлены в отчёт.
Список UUID идентифицирует логическое ИЛИ. Только один из UUID должен совпадать, чтобы вызвать событие DeviceFound. Предоставление пустого списка UUID с Num_UUID, установленным как 0, означает, что события DeviceFound отправляются для всех устройств выше RSSI_Threshold.
Если для RSSI_Threshold установлено значение 127, а для UUID_Count — 0, команда ведет себя точно так же, как Start Discovery.
Когда процедура обнаружения запускается, событие Discovery уведомляет об этом аналогично Start Discovery.
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Read Local Out Of Band Extended Data
Код команды: | 0x003b |
Индекс контроллера: | <controller id> |
Параметры команды: | Address_Type (1 октет) |
Возвращаемые параметры: | Address_Type (1 октет), EIR_Data_Length (2 октета), EIR_Data (0-65535 октетов) |
Команда используется для чтения локальных данных вне диапазона и предоставления их в закодированном виде в виде расширенной информации ответа на запрос или публичных данных.
Возможные значения параметра Address_Type
являются побитовыми или состоят из следующих битов:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Возможны следующие комбинации:
Значение | Комментарий |
---|---|
1 |
BR/EDR |
6 |
LE (публичный & случайный) |
7 |
BR/EDR/LE (обнаружение с чередованием) |
Для контроллера BR/EDR (Address_Type 1) возвращаемая информация будет содержать следующую информацию:
- класс устройства;
- простой хэш сопряжения C-192 (опционально);
- простой рандомизатор сопряжения R-192 (опционально);
- простой хэш сопряжения C-256 (опционально);
- простой рандомизатор сопряжения R-256 (опционально);
- UUID класса обслуживания (опционально);
- локальное имя Bluetooth (опционально).
Простой хэш сопряжения C-256 и простой рандомизатор сопряжения R-256 включаются только при включении безопасных соединений.
Адрес устройства (BD_ADDR) не включён в EIR_Data и должен быть взят из информации о контроллере.
Для контроллера LE (Address_Type 6) возвращаемая информация будет содержать следующее:
- LE-адрес Bluetooth-устройства;
- LE-роль;
- значение подтверждения безопасных соединений LE (опционально);
- случайное значение безопасных соединений LE (опционально);
- внешний вид (опционально);
- локальное имя (опционально);
- флаги.
Значение подтверждения безопасных соединений LE и случайное значение безопасных соединений LE включаются только в том случае, если безопасные соединения включены.
Команда не может предоставить значение TK диспетчера безопасности из спецификации Bluetooth. Информация вне диапазона здесь предназначена для асимметричных обменов на основе обмена ключами Диффи-Хеллмана. Значение TK менеджера безопасности — это симметричное случайное число, которое должно быть получено и согласовано по-разному.
Возвращаемая информация от типов контроллера BR/EDR и контроллера LE не связана друг с другом. После того, как они были использованы по каналу вне диапазона, должен быть запрошен новый набор информации.
Если включён режим Secure Connections Only, поля для простого хэша сопряжения C-192 и простого рандомизатора сопряжения R-192 не возвращаются. Включены только поля для сопряжения сильно защищённых соединений.
Команду можно использовать, только когда контроллер включён.
Значения, возвращаемые командой, становятся недействительными при отключении питания контроллера. После каждого выключения питания необходимо снова вызывать команду для получения обновлённой информации.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Not Supported
,Busy
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Read Extended Controller Index List
Код команды: | 0x003c |
Индекс контроллера: | <non-controller> |
Параметры команды: | |
Возвращаемые параметры: | Num_Controllers (2 октета), Controller_Index[i] (2 октета), Controller_Type[i] (1 октет), Controller_Bus[i] (1 октет) |
Команда возвращает список известных на данный момент контроллеров. Он включает сконфигурированные, ненастроенные и альтернативные контроллеры.
Контроллеры, добавленные или удалённые после вызова этой команды, можно отслеживать с помощью событий Extended Index Added и Extended Index Removed.
Существующий добавленный индекс, удалённый индекс, добавленный ненастроенный индекс и удалённый ненастроенный индекс больше не отправляются после того, как эта команда была использована хотя бы один раз.
Вместо вызова Read Controller Index List и Read Unconfigured Controller Index List эта команда объединяет всю информацию и может использоваться для получения списка контроллеров.
Параметр Controller_Type имеет следующие значения:
Значение | Комментарий |
---|---|
0x00 |
Первичный контроллер (BR/EDR и/или LE) |
0x01 |
Ненастроенный контроллер (BR/EDR и/или LE) |
0x02 |
Альтернативный контроллер MAC/PHY (AMP) |
Типы 0x00
и 0x01
указывают на первичный контроллер BR/EDR и/или LE.
Разница только в том, нужна ли им дополнительная конфигурация или они полностью настроены.
Контроллеры в настроенном состоянии будут указаны как 0x00
, а контроллеры
в ненастроенном состоянии будут указаны как 0x01.
Контроллер, который полностью настроен и поддерживает изменения конфигурации,
будет указан как 0x00
.
Альтернативные контроллеры MAC/PHY будут перечислены как 0x02. Они не поддерживают разницу между настроенным и ненастроенным состоянием.
Параметр Controller_Bus имеет следующие значения:
Число | Значение |
---|---|
0x00 |
Virtual |
0x01 |
USB |
0x02 |
PCMCIA |
0x03 |
UART |
0x04 |
RS232 |
0x05 |
PCI |
0x06 |
SDIO |
0x07 |
SPI |
0x08 |
I2C |
0x09 |
SMD |
0x0A |
VIRTIO |
Контроллеры, помеченные как работающие только с RAW, пока этой командой не отображаются.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Команда Read Advertising Features
Код команды: | 0x003d |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Supported_Flags (2 октета), Max_Adv_Data_Len (1 октет), Max_Scan_Rsp_Len (1 октет), Max_Instances (1 Octet), Num_Instances (1 октет), Instance[i] (1 октет) |
Команда используется для чтения функций публичных данных, поддерживаемых контроллером и стеком.
С полем Supported_Flags предоставлены возможные значения для поля Flags в команде Add Advertising:
Значение | Комментарий |
---|---|
0 |
Переключиться в режим подключения |
1 |
Публиковать как доступный для обнаружения |
2 |
Публиковать как ограниченно доступный для обнаружения |
3 |
Добавить поле Flags в Adv_Data |
4 |
Добавить поле TX Power в Adv_Data |
5 |
Добавить поле Appearance в Scan_Rsp |
6 |
Добавить Local Name в Scan_Rsp |
7 |
Вторичный канал с LE 1M |
8 |
Вторичный канал с LE 2M |
9 |
Вторичный канал с кодировкой LE |
Бит Flags 0 указывает на поддержку подключаемых публичных данных и на переключение на подключаемые публичные данные независимо от подключаемой глобальной настройки. Если этот флаг не поддерживается, глобальный параметр подключения определяет, используются ли ненаправленные публичные данные с возможностью подключения, ненаправленные сканируемые или ненаправленные публичные данные без подключения. Он также определяет использование неразрешимого случайного адреса по сравнению с идентификационным адресом или разрешимым частным адресом.
Бит Flags 1 указывает на поддержку публичных данных с включённым режимом обнаружения. Пользователи с этим флагом уменьшат Max_Adv_Data_Len на 3 октета. В этом случае флаги публичных данных управляются и добавляются перед предоставленными публичными данными.
Бит Flags 2 указывает на поддержку публичных данных с включённым режимом ограниченного обнаружения. Пользователи с этим флагом уменьшат Max_Adv_Data_Len на 3 октета. В этом случае флаги публичных данных управляются и добавляются перед предоставленными публичными данными.
Бит Flags 3 указывает на поддержку автоматического обновления поля Flags публичных данных. Пользователи с этим флагом уменьшат Max_Adv_Data_Len на 3 октета и должны помнить об этом. Поле Flags будет добавлено перед публичными данными, предоставленными пользователем. Следует обратить внимание, что с битом 1 и битом 2 этот бит будет неявно использоваться, даже если он не помечен как поддерживаемый.
Бит Flags 4 указывает на поддержку автоматического добавления значения TX Power к публичным данным. Пользователи с этим флагом уменьшат Max_Adv_Data_Len на 3 октета. Поле TX Power будет добавлено в конце предоставленных пользователем публичных данных. Если контроллер не поддерживает информацию о TX Power, то этот бит не будет установлен.
Бит Flags 5 указывает на поддержку автоматического добавления значения Appearance к данным ответа на сканирование. Пользователи с этим флагом уменьшат Max_Scan_Rsp_len на 4 октета. Поле Appearance будет добавлено перед данными ответа на сканирование, предоставленными пользователем. Если значение Appearance не поддерживается, то этот бит не будет установлен.
Бит Flags 6 указывает на поддержку автоматического добавления значения Local Name к данным ответа на сканирование. Этот флаг указывает на оппортунистский подход к локальному имени. Если в данных ответа сканирования достаточно места, они будут добавлены. Если место ограничено, будет добавлена краткая версия или не будет информации об имени. Локальное имя будет добавлено в конце данных ответа сканирования.
Бит Flags 7 указывает на поддержку публичных данных во вторичном канале в LE 1M PHY.
Бит Flags 8 указывает на поддержку публичных данных во вторичном канале в LE 2M PHY. Основной канал будет на 1M.
Бит Flags 9 указывает на поддержку публичных данных во вторичном канале в LE CODED PHY.
Допустимый диапазон идентификаторов Instance: 1–254. Значение 0 зарезервировано для внутреннего использования, а значение 255 зарезервировано для будущих расширений. Однако значение Max_Instances для указания количества поддерживаемых экземпляров также может быть равно 0, если контроллер не поддерживает публичные данные.
Max_Adv_Data_Len и Max_Scan_Rsp_Len предоставляют дополнительную информацию о максимальной длине полей данных. На данный момент они всегда будут возвращать значения 31. Однако различные флаги могут уменьшить фактическую доступную длину в этих полях данных.
С помощью Num_Instances и массива Instance можно получить текущие идентификаторы занятых Instance.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Add Advertising
Код команды: | 0x003e |
Индекс контроллера: | <controller id> |
Параметры команды: | Instance (1 октет), Flags (4 октета), Duration (2 октета), Timeout (2 октета), Adv_Data_Len (1 октет), Scan_Rsp_Len (1 октет), Adv_Data (0-255 октетов), Scan_Rsp (0-255 октетов) |
Возвращаемые параметры: | Instance (1 октет) |
Команда используется для настройки экземпляра публичных данных, который можно использовать для переключения контроллера Bluetooth с низким энергопотреблением в режим публичных данных.
Публичная информация, добавленная с помощью этой команды, не будет видна сразу, если публичные данные включены с помощью команды Set Advertising. Использование команды Set Advertising имеет приоритет над этой командой. Информация об Instance сохраняется и будет публиковаться после отключения публичных данных через Set Advertising.
Идентификатор Instance — это значение от 1 до числа поддерживаемых экземпляров. Значение 0 зарезервировано.
С помощью значения Flags контролируется тип публичных данных и определяются следующие флаги:
Значение | Комментарий |
---|---|
0 |
Переключиться в режим подключения |
1 |
Публиковать как доступный для обнаружения |
2 |
Публиковать как ограниченно доступный для обнаружения |
3 |
Добавить поле Flags в Adv_Data |
4 |
Добавить поле TX Power в Adv_Data |
5 |
Добавить поле Appearance в Scan_Rsp |
6 |
Добавить Local Name в Scan_Rsp |
7 |
Вторичный канал с LE 1M |
8 |
Вторичный канал с LE 2M |
9 |
Вторичный канал с кодировкой LE |
Когда флаг подключения установлен, контроллер будет использовать ненаправленные подключаемые публичные данные. Таким образом, значение настройки подключения может быть перезаписано. Это полезно для переключения контроллера в подключаемый режим только для работы LE. Механизм похож на режим 0x02 из команды Set Advertising.
Если флаг возможности подключения не установлен, контроллер будет использовать публичные данные на основе настройки возможности подключения. При использовании неподключаемых или сканируемых публичных данных контроллер будет запрограммирован с неразрешимым случайным адресом. Когда система может быть подключена, будет использоваться идентификационный адрес или разрешимый частный адрес.
Использование флага Connectable полезно для поддержки периферийного режима, когда BR/EDR (и/или LE) контролируется Add Device. Это позволяет сделать периферийное устройство доступным для подключения, не вмешиваясь в глобальную настройку подключения.
Если Scan_Rsp_Len равен нулю, а флаг подключения не установлен и глобальная настройка подключения выключена, то используются неподключаемые публичные данные. Если Scan_Rsp_Len больше нуля, а флаг подключения не установлен и глобальные публичные данные отключены, то используются сканируемые публичные данные. Небольшая разница поддерживается для обеспечения меньшего воздушного трафика для устройств, реализующих роль вещателя.
Флаги вторичного канала можно использовать для публичных данных во вторичном канале с соответствующими PHY. Эти биты флага являются взаимоисключающими, и установка нескольких приведёт к ошибке Invalid Parameter. Выбор LE 1M или LE 2M приведёт к использованию расширенных публичных данных на первичном канале с LE 1M и соответственно LE 1M или LE 2M на вторичном канале. Выбор LE Coded приведёт к использованию расширенных публичных данных на первичных и вторичных каналах с LE Coded. Выбор ни одного из этих флагов приведёт к показу устаревших публичных данных.
Параметр Duration настраивает продолжительность Instance. Значение указывается в секундах.
Значение 0 указывает на то, что для параметра Duration выбрано значение по умолчанию. Оно равно 2 секундам.
Если добавлен только один Instance, то значение Duration будет игнорироваться. Оно применимо только в случае, когда настроено несколько Instance. Тогда каждый экземпляр будет доступен в течение времени Duration, после чего он переключится на следующий. Это простой циклический подход.
Параметр Timeout настраивает время жизни Instance. Если используется значение 0, оно указывает на отсутствие срока действия. Если указано значение тайм-аута, то Instance будет автоматически удалён по истечении тайм-аута. Значение времени ожидания указано в секундах. Выключение контроллера сделает недействительными все Instance, и невозможно добавить новый Instance с тайм-аутом, когда контроллер выключен.
Когда предоставляется Timeout, то Duration вычитается из фактического значения тайм-аута этого Instance. Например, Instance с Timeout 5 и Duration 2 будет запланирован ровно 3 раза, дважды с 2 секундами и один раз с одной секундой. Другие Instance не влияют на Timeout.
Повторное добавление уже существующего экземпляра (т. е. выполнение команды Add Advertising с идентификатором существующего экземпляра) обновит конфигурацию этого экземпляра.
Экземпляр, добавляемый или изменяемый во время объявления другого экземпляра, не будет виден сразу, а только тогда, когда новый/изменённый экземпляр планируется алгоритмом циклического объявления.
Изменения в экземпляре, который в настоящее время объявляется, отменит этот экземпляр и переключится на следующий. Изменения будут видны в следующий раз, когда экземпляр будет запланирован для публичных данных. Если активен один экземпляр, это означает, что изменения будут видны сразу.
Обязательным условием является то, что LE уже включён,
в противном случае эта команда вернёт ошибку Rejected
.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Failed
,Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Remove Advertising
Код команды: | 0x003f |
Индекс контроллера: | <controller id> |
Параметры команды: | Instance (1 октет) |
Возвращаемые параметры: | Instance (1 октет) |
Команда используется для удаления экземпляра, который можно использовать для переключения контроллера Bluetooth с низким энергопотреблением в режим публичных данных.
Когда параметр Instance равен нулю, то все ранее добавленные Instance будут удалены.
Удаление информации с помощью этой команды не будет видно, пока публичные данные включены с помощью команды Set Advertising. Использование команды Set Advertising имеет приоритет над этой командой. Изменения в информации об Instance сохраняются и будут объявлены после отключения публичных данных через Set Advertising.
Удаление экземпляра во время его объявления приведёт к немедленной отмене экземпляра, даже если он был объявлен меньше, чем его настроенное время ожидания или продолжительность.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Get Advertising Size Information
Код команды: | 0x0040 |
Индекс контроллера: | <controller id> |
Параметры команды: | Instance (1 октет), Flags (4 октета) |
Возвращаемые параметры: | Instance (1 октет), Flags (4 октета), Max_Adv_Data_Len (1 октет), Max_Scan_Rsp_Len (1 октет) |
Команда Read Advertising Features возвращает общий максимальный размер публичных данных и полей данных ответа сканирования. Этот размер действителен, когда флаги не используются. Однако при использовании определённых флагов размер может уменьшиться. Эту команду можно использовать для запроса подробной информации о максимально доступном размере.
Определены следующие значения Flags:
Значение | Комментарий |
---|---|
0 |
Переключиться в режим подключения |
1 |
Публиковать как доступный для обнаружения |
2 |
Публиковать как ограниченно доступный для обнаружения |
3 |
Добавить поле Flags в Adv_Data |
4 |
Добавить поле TX Power в Adv_Data |
5 |
Добавить поле Appearance в Scan_Rsp |
6 |
Добавить Local Name в Scan_Rsp |
Чтобы получить точную информацию о доступном размере, те же значения флагов следует использовать с командой Add Advertising.
Поля Max_Adv_Data_Len и Max_Scan_Rsp_Len предоставляют информацию о максимальной длине полей данных для заданных значений флагов. Когда поле Flags равно нулю, эти поля будут содержать те же значения, что и Read Advertising Features.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Start Limited Discovery
Код команды: | 0x0041 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address_Type (1 октет) |
Возвращаемые параметры: | Address_Type (1 октет) |
Команда используется для запуска процесса обнаружения удалённых устройств с использованием процедуры ограниченного обнаружения. Для каждого обнаруженного устройства будет отправлено событие Device Found.
Возможные значения параметра Address_Type
являются побитовыми или состоят из следующих битов:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Возможны следующие комбинации:
Значение | Комментарий |
---|---|
1 |
BR/EDR |
6 |
LE (публичный & случайный) |
7 |
BR/EDR/LE (обнаружение с чередованием) |
Ограниченное обнаружение использует активное сканирование для сканирования с низким энергопотреблением и будет искать устройства с настроенным флагом ограниченной возможности обнаружения. В BR/EDR оно использует LIAC и фильтрует по флагу ограниченной возможности обнаружения класса устройства.
Когда процедура обнаружения запускается, событие Discovery уведомляет об этом аналогично Start Discovery.
Команду можно использовать, только когда контроллер включён.
Команда генерирует событие Command Complete
в случае успеха
или в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Read Extended Controller Information
Код команды: | 0x0042 |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Address (6 октетов), Bluetooth_Version (1 октет), Manufacturer (2 октета), Supported_Settings (4 октета), Current_Settings (4 октета), EIR_Data_Length (2 октета), EIR_Data (0-65535 октета) |
Команда используется для получения текущего состояния и основной информации о контроллере. Обычно она используется сразу после получения ответа на команду Read Controller Index List или событие Index Added (или его расширенные аналоги).
Параметр Address описывает публичный адрес контроллера, и можно ожидать, что он установлен.
Однако в случае однорежимных контроллеров с низким энергопотреблением
он может быть 00:00:00:00:00:00
.
В этом случае для включения контроллера необходимо сначала настроить статический адрес
с помощью команды Set Static Address.
Если установлен публичный адрес, то он будет использоваться в качестве идентификационного адреса для контроллера. Если публичный адрес недоступен, настроенный статический адрес будет использоваться в качестве идентификационного адреса.
В случае двухрежимного контроллера с публичным адресом, который настроен как устройство только с низким энергопотреблением (BR/EDR отключён), статический адрес используется, если он установлен, а публичный адрес – в противном случае.
Current_Settings и Supported_Settings — это битовые маски со следующими доступными битами:
Бит | Значение |
---|---|
0 |
Включение |
1 |
Подключение |
2 |
Быстрое подключение |
3 |
Обнаружение |
4 |
Связывание |
5 |
Безопасность на уровне канала (режим безопасности 3) |
6 |
Безопасное простое сопряжение |
7 |
Базовая скорость/повышенная скорость передачи данных |
8 |
Высокая скорость |
9 |
Низкое энергопотребление |
10 |
Публичные данные |
11 |
Безопасные соединения |
12 |
Ключи отладки |
13 |
Конфиденциальность |
14 |
Конфигурация контроллера |
15 |
Статический адрес |
16 |
Физическая конфигурация |
17 |
Широкополосная речь |
18 |
Отчёт о качестве |
Параметр EIR_Data содержит информацию о классе устройства, локальном имени и других значениях. Не все из них могут присутствовать. Например, устройство только с низким энергопотреблением не содержит информации о классе устройства.
Когда любое из значений в EIR_Data изменяется, для информирования клиентов об обновлённой информации будет использоваться событие Extended Controller Information Changed.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set Appearance
Код команды: | 0x0043 |
Индекс контроллера: | <controller id> |
Параметры команды: | Appearance (2 октета) |
Возвращаемые параметры: |
Команда используется для установки значения для внешнего вида контроллера.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Значение внешнего вида будет запоминаться при выключении и повторном включении контроллера. Таким образом, внешний вид нужно установить только один раз, когда будет найден новый контроллер, и оно останется до тех пор, пока не будет удалено.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Команда доступна только для контроллеров с поддержкой LE.
В противном случае она вернёт ошибку Not Supported
.
Возможные ошибки:
Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Get PHY Configuration
Код команды: | 0x0044 |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Supported_PHYs (4 октета), Configurable_PHYs (4 октета), Selected_PHYs (4 октета) |
Параметры PHY представляют собой битовую маску со следующими доступными битами:
Бит | Значение |
---|---|
0 |
BR 1M 1-Slot |
1 |
BR 1M 3-Slot |
2 |
BR 1M 5-Slot |
3 |
EDR 2M 1-Slot |
4 |
EDR 2M 3-Slot |
5 |
EDR 2M 5-Slot |
6 |
EDR 3M 1-Slot |
7 |
EDR 3M 3-Slot |
8 |
EDR 3M 5-Slot |
9 |
LE 1M TX |
10 |
LE 1M RX |
11 |
LE 2M TX |
12 |
LE 2M RX |
13 |
LE Coded TX |
14 |
LE Coded RX |
Если BR/EDR поддерживается, то BR 1M 1-Slot поддерживается по умолчанию, и его выбор также нельзя отменить. Если LE поддерживается, то LE 1M TX и LE 1M RX поддерживаются по умолчанию.
Полное отключение BR/EDR или, соответственно, LE не влияет на конфигурацию PHY. Оно запоминается во время циклов питания.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set PHY Configuration
Код команды: | 0x0045 |
Индекс контроллера: | <controller id> |
Параметры команды: | Selected_PHYs (4 октета) |
Возвращаемые параметры: |
Команда используется для установки для контроллера PHY по умолчанию.
Оно будут сохранено и использовано для всех последующих операций сканирования и установления соединения.
Список поддерживаемых PHY можно получить с помощью команды Get PHY Configuration. Выбор неподдерживаемых или отмена выбора PHY по умолчанию приведёт к ошибке Invalid Parameter.
Команду можно вызвать в любой момент, чтобы изменить выбранный PHY.
См. команду Get PHY Configuration для параметра PHYs.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Load Blocked Keys
Код команды: | 0x0046 |
Индекс контроллера: | <controller id> |
Параметры команды: | Key_Count (2 октета), Key1 { Key_Type (1 октет), Value (16 октетов) }, Key2 { }, ... |
Возвращаемые параметры: |
Команда используется для передачи ядру списка ключей, о которых известно, что они уязвимы.
Если процедура сопряжения создаёт какой-либо из этих ключей, они будут автоматически удалены, а любая попытка включить шифрование будет отклонена.
В настоящее время определены следующие значения Key_Type
:
Значение | Комментарий |
---|---|
0x00 |
Ключ-ссылка (BR/EDR) |
0x01 |
Долгосрочный ключ (LE) |
0x02 |
Ключ разрешения идентичности (LE) |
Команду можно использовать, когда контроллер не включён.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set PHY Configuration
Код команды: | 0x0047 |
Индекс контроллера: | <controller id> |
Параметры команды: | Wideband_Speech (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения/отключения поддержки широкополосной речи для контроллера.
Допустимые значения параметра Wideband_Speech: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Значение 0x00
отключает широкополосную речь, значение 0x01
включает широкополосную речь.
Команда доступна только для контроллеров с поддержкой BR/EDR и требует специальной поддержки контроллера.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
В случае, если контроллер не поддерживает широкополосную речь, команда не будет выполнена
и вернёт ошибку Not Supported
.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Busy
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Read Controller Capabilities
Код команды: | 0x0048 |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Capabilities_Data_Length (2 октета), Capabilities_Data (0-65535 октетов) |
Команда используется для получения возможностей, поддерживаемых контроллером или стеком хоста.
Параметры Capabilities_Data_Length и Capabilities_Data предоставляют список параметров безопасности, функций и информации. Они используют тот же формат, что и EIR_Data, но с определённым здесь пространством имён.
Тип данных | Название |
---|---|
0x01 |
Flags |
0x02 |
Max Encryption Key Size (BR/EDR) |
0x03 |
Max Encryption Key Size (LE) |
0x04 |
Supported Tx Power (LE) |
Flags (тип данных 0x01):
Бит | Значение |
---|---|
0 |
Удалённая проверка открытого ключа (BR/EDR) |
1 |
Удалённая проверка открытого ключа (LE) |
2 |
Применение размера ключа шифрования (BR/EDR) |
3 |
Применение размера ключа шифрования (LE) |
Max Encryption Key Size (типы данных 0x02
и 0x03
).
Когда поле присутствует, оно предоставляет значение в 1 октет, указывающее максимальный размер ключа шифрования. Если поле отсутствует, то неизвестно, какой максимальный размер ключа шифрования контроллера или хоста используется.
Supported LE Tx Power (тип данных 0x04).
При наличии это 2-байтовое поле предоставляет минимальную и максимальную мощность LE Tx, поддерживаемую контроллером, соответственно, согласно команде LE Read Transmit Power HCI. Если поле недоступно, это означает, что команда LE Read Transmit Power HCI недоступна.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Read Experimental Features Information
Код команды: | 0x0049 |
Индекс контроллера: | <controller id> или <non-controller> |
Параметры команды: | |
Возвращаемые параметры: | Feature_Count (2 октета), Feature1 { UUID (16 октетов), Flags (4 октета) }, Feature2 { }, ... |
Команда используется для получения экспериментальных функций, поддерживаемых стеком хоста.
Значения UUID здесь не определены. Они могут меняться со временем и намеренно не являются стабильными. Созревшие функции в какой-то момент будут удалены. Сопоставление UUID функции с её фактической функциональностью здесь не рассматривается.
Для параметра Flags определены следующие биты:
Бит | Значение |
---|---|
0 |
Функция активна |
1 |
Поддерживаемые настройки изменяются |
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Read Experimental Features Information
Код команды: | 0x004a |
Индекс контроллера: | <controller id> или <non-controller> |
Параметры команды: | UUID (16 октетов), Action (1 октет) |
Возвращаемые параметры: | UUID (16 октетов), Flags (4 октета) |
Команда используется для изменения настройки экспериментальной функции хост-стека.
Значение UUID должно быть поддерживаемым значением, возвращаемым командой Read Experimental Features Information.
Параметр Action специфичен для UUID, но в большинстве случаев это будет просто включение/выключение со следующими значениями:
Значение | Комментарий |
---|---|
0x00 |
Отключить функцию |
0x01 |
Включить функцию |
От функции зависит, можно ли использовать команду, когда контроллер включён.
См. параметр Flags
команды Read Experimental Features Information
, чтобы узнать,
нужно ли сначала отключить питание контроллера.
Для возвращаемого параметра Flags
определены следующие биты:
Бит | Значение |
---|---|
0 |
Функция активна |
1 |
Поддерживаемые настройки изменены |
Когда функция вызывает изменение поддерживаемых настроек, рекомендуется перечитать информацию о контроллере.
Когда параметр UUID является пустым UUID (16 x 0x00), все экспериментальные функции будут деактивированы.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Not Powered
,Invalid Index
.
Команда Read Default System Configuration
Код команды: | 0x004b |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Parameter1 { Parameter_Type (2 октета), Value_Length (1 октет), Value (0-255 октетов) }, Parameter2 { }, ... |
Команда используется для чтения списка параметров контроллера по умолчанию.
Текущие определённые значения Parameter_Type:
Значение | Комментарий |
---|---|
0x0000 |
Тип сканирования страницы BR/EDR |
0x0001 |
Интервал сканирования страницы BR/EDR |
0x0002 |
Окно сканирования страницы BR/EDR |
0x0003 |
Тип сканирования запроса BR/EDR |
0x0004 |
Интервал сканирования запроса BR/EDR |
0x0005 |
Окно сканирования запроса BR/EDR |
0x0006 |
Тайм-аут контроля канала BR/EDR |
0x0007 |
Тайм-аут ожидания страницы BR/EDR |
0x0008 |
Минимальный интервал проверки BR/EDR |
0x0009 |
Максимальный интервал проверки BR/EDR |
0x000a |
Минимальный интервал объявления LE |
0x000b |
Максимальный интервал объявления LE |
0x000c |
Интервал ротации мультиобъявления LE |
0x000d |
Интервал сканирования LE для автоматического подключения |
0x000e |
Окно сканирования LE для автоматического подключения |
0x000f |
Интервал сканирования LE для сценариев пробуждения |
0x0010 |
Окно сканирования LE для сценариев пробуждения |
0x0011 |
Интервал сканирования LE для обнаружения |
0x0012 |
Окно сканирования LE для обнаружения |
0x0013 |
Интервал сканирования LE для мониторинга публичных данных |
0x0014 |
Окно сканирования LE для мониторинга публичных данных |
0x0015 |
Интервал сканирования LE для подключения |
0x0016 |
Окно сканирования LE для подключения |
0x0017 |
Минимальный интервал соединения LE |
0x0018 |
Максимальный интервал соединения LE |
0x0019 |
Задержка подключения LE |
0x001a |
Тайм-аут контроля соединения LE |
0x001b |
Тайм-аут автоподключения LE |
Команду можно использовать в любое время, и она вернёт список поддерживаемых параметров по умолчанию, а также их текущее значение.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set Default System Configuration
Код команды: | 0x004c |
Индекс контроллера: | <controller id> |
Параметры команды: | Parameter1 { Parameter_Type (2 октета), Value_Length (1 октет), Value (0-255 октетов) }, Parameter2 { }, ... |
Возвращаемые параметры: |
Команда используется для установки списка параметров контроллера по умолчанию.
Список поддерживаемых значений Parameter_Type см. в описании команды Read Default System Configuration.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
При предоставлении неподдерживаемых или недопустимых значений никакое значение параметра не будет изменено, а все значения будут отброшены.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Read Default Runtime Configuration
Код команды: | 0x004d |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Parameter1 { Parameter_Type (2 октета), Value_Length (1 октет), Value (0-255 октетов) }, Parameter2 { }, ... |
Команда используется для чтения списка параметров среды выполнения по умолчанию.
В настоящее время значения Parameter_Type не определены, и будет возвращён пустой список.
Команду можно использовать в любое время, и она вернёт список поддерживаемых параметров по умолчанию, а также их текущее значение.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set Default Runtime Configuration
Код команды: | 0x004e |
Индекс контроллера: | <controller id> |
Параметры команды: | Parameter1 { Parameter_Type (2 октета), Value_Length (1 октет), Value (0-255 октетов) }, Parameter2 { }, ... |
Возвращаемые параметры: |
Команда используется для установки списка параметров среды выполнения по умолчанию.
Список поддерживаемых значений Parameter_Type см. в описании команды Read Default Runtime Configuration.
Команду можно использовать в любое время, и она изменит значение по умолчанию во время выполнения. Однако изменения не будут применяться к существующим соединениям или текущим активным операциям.
При предоставлении неподдерживаемых или недопустимых значений никакое значение параметра не будет изменено, а все значения будут отброшены.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Rejected
,Not Supported
,Invalid Parameters
,Invalid Index
.
Команда Get Device Flags
Код команды: | 0x004f |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет), Supported_Flags (4 октета), Current_Flags (4 октета) |
Команда используется для получения дополнительных флагов и настроек для устройств, добавленных с помощью команды Add Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Параметры Flags представляют собой битовую маску со следующими доступными битами:
Значение | Комментарий |
---|---|
0 |
Удалённое пробуждение включено |
1 |
Режим конфиденциальности устройства включён |
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Set Device Flags
Код команды: | 0x0050 |
Индекс контроллера: | <controller id> |
Параметры команды: | Address (6 октетов), Address_Type (1 октет), Current_Flags (4 октета) |
Возвращаемые параметры: | Address (6 октетов), Address_Type (1 октет) |
Команда используется для установки дополнительных флагов и настроек для устройств, добавленных с помощью команды Add Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Список поддерживаемых флагов можно получить с помощью команды Get Device Flags или Device Flags Changed. Выбор неподдерживаемых флагов приведёт к ошибке Invalid Parameter;
Подробное описание параметров флагов см. в описании команды Get Device Flags.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Invalid Parameters
,Invalid Index
.
Команда Read Advertisement Monitor Features
Код команды: | 0x0051 |
Индекс контроллера: | <controller id> |
Параметры команды: | |
Возвращаемые параметры: | Supported_Features (4 октета), Enabled_Features (4 октета), Max_Num_Handles (2 октета), Max_Num_Patterns (1 октет), Num_Handles (2 октета), Handle1 (2 октета), Handle2 (2 октета), ... |
Команда используется для чтения функций монитора публичных данных, поддерживаемых контроллером и стеком. Supported_Features перечисляет все связанные функции, поддерживаемые контроллером, а Enabled_Features перечисляет те, которые в настоящее время используются ядром.
Supported_Features и Enabled_Features — это битовые маски со следующими доступными битами:
Бит | Значение |
---|---|
0 |
Мониторинг содержания рекламы по шаблонам с логическим ИЛИ |
Max_Num_Handles указывает максимальное количество поддерживаемых мониторов. Следует обратить внимание, что фактическое количество поддерживаемых мониторов может быть меньше в зависимости от ограничений контроллера.
Max_Num_Pattern указывает максимальное количество поддерживаемых шаблонов в мониторе. Следует обратить внимание, что фактическое количество поддерживаемых мониторов может быть меньше в зависимости от ограничений контроллера.
Num_Handles указывает количество добавленных мониторов, за которым следует список дескрипторов.
Команду можно использовать, когда контроллер не включён.
Команда Add Advertisement Patterns Monitor
Код команды: | 0x0052 |
Индекс контроллера: | <controller id> |
Параметры команды: | Pattern_Count (1 октет), Pattern1 { AD_Type (1 октет), Offset (1 октет), Length (1 октет), Value (31 октет) }, Pattern2 { }, ... |
Возвращаемые параметры: | Monitor_Handle (2 октета) |
Команда используется для добавления монитора публичных данных, условия фильтрации которого являются шаблонами. Ядро запустит сканирование, если будет добавлен хотя бы один монитор. Если контроллер поддерживает фильтрацию публичных данных, ядро перенесёт фильтрацию контента на контроллер, чтобы снизить энергопотребление; в противном случае ядро игнорирует содержимое монитора. Следует обратить внимание, что если существует более одного шаблона, во время фильтрации между шаблонами будет применяться логика ИЛИ. Другими словами, любые публичные данные, соответствующие хотя бы одному шаблону на данном мониторе, будут считаться совпадением.
Шаблон содержит следующие поля.
- AD_Data_Type
- Тип публичных данных. Возможные значения определены в дополнении к основной спецификации. Offset
- Начальный индекс, с которым должно выполняться сопоставление с образцом в данных. Length
- Длина значения шаблона в байтах. Value
- Значение шаблона в байтах.
Пример шаблона:
{
0x16, // Служебные данные — 16-битный UUID
0x02, // Пропустить часть UUID
0x04,
{0x11, 0x22, 0x33, 0x44},
}
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Возможные ошибки:
Failed
,Busy
,No Resources
,Invalid Parameters
.
Команда Remove Advertisement Monitor
Код команды: | 0x0053 |
Индекс контроллера: | <controller id> |
Параметры команды: | Monitor_Handle (2 октета) |
Возвращаемые параметры: | Monitor_Handle (2 октета) |
Команда используется для удаления мониторов публичных данных. Ядро удалит мониторы с помощью Monitor_Handle и обновит сканирование LE.
Когда Monitor_Handle установлен как ноль, все ранее добавленные дескрипторы будут удалены.
Удаление монитора во время его добавления будет игнорироваться.
Команду можно использовать, когда контроллер не включён, и все настройки будут запрограммированы после включения.
Возможные ошибки:
Failed
,Busy
.
Команда Add Extended Advertising Parameters
Код команды: | 0x0054 |
Индекс контроллера: | <controller id> |
Параметры команды: | Instance (1 октет), Flags (4 октета), Duration (2 октета), Timeout (2 октета), MinInterval (4 октета), MaxInterval (4 октета), TxPower (1 Octet) |
Возвращаемые параметры: | Instance (1 октет), TxPower (1 октет), MaxAdvDataLen (1 октет), MaxScanRspLen (1 октет) |
Команда используется для настройки параметров экземпляра Bluetooth Low Energy. Ожидается, что за этой командой последует команда Add Extended Advertising Data для завершения и включения экземпляра публичных данных.
Добавленная с помощью команды информация не будет видна сразу, если публичные данные включены с помощью команды Set Advertising. Использование команды Set Advertising имеет приоритет над этой командой. Информация об экземпляре сохраняется и будет распространяться после отключения публичных данных через Set Advertising.
Идентификатор экземпляра — это значение от 1 до числа поддерживаемых экземпляров. Значение 0 зарезервировано.
С помощью значения Flags контролируется тип публичных данных и определяются следующие флаги:
Бит | Значение |
---|---|
0 |
Переключиться в режим подключения |
1 |
Публиковать как доступный для обнаружения |
2 |
Публиковать как ограниченно доступный для обнаружения |
3 |
Добавить поле Flags в Adv_Data |
4 |
Добавить поле TX Power в Adv_Data |
5 |
Добавить поле Appearance в Scan_Rsp |
6 |
Добавить Local Name в Scan_Rsp |
7 |
Вторичный канал с LE 1M |
8 |
Вторичный канал с LE 2M |
9 |
Вторичный канал с кодировкой LE |
10 |
Мощность передачи может быть указана |
11 |
HW поддерживает разгрузку публичных данных |
12 |
Следует использовать параметр Duration |
13 |
Следует использовать параметр Timeout |
14 |
Следует использовать параметр Interval |
15 |
Следует использовать параметр Tx Power |
16 |
Публичные данные будут содержать скан-ответ |
Когда флаг подключения установлен, контроллер будет использовать ненаправленные подключаемые публичные данные. Таким образом, значение настройки подключения может быть перезаписано. Это полезно для переключения контроллера в подключаемый режим только для работы LE. Механизм похож на режим 0x02 из команды Set Advertising.
Если флаг возможности подключения не установлен, контроллер будет использовать публичные данные на основе настройки возможности подключения. При использовании неподключаемых или сканируемых публичных данных контроллер будет запрограммирован с неразрешимым случайным адресом. Когда система может быть подключена, будет использоваться идентификационный адрес или разрешимый частный адрес.
Использование флага Connectable полезно для поддержки периферийного режима, когда BR/EDR (и/или LE) контролируется Add Device. Это позволяет сделать периферийное устройство доступным для подключения, не вмешиваясь в глобальную настройку подключения.
Флаги вторичного канала можно использовать для публичных данных во вторичном канале с соответствующими PHY. Эти биты флага являются взаимоисключающими, и установка нескольких приведёт к ошибке Invalid Parameter. Выбор LE 1M или LE 2M приведёт к использованию расширенных публичных данных на первичном канале с LE 1M и соответственно LE 1M или LE 2M на вторичном канале. Выбор LE Coded приведёт к использованию расширенных публичных данных на первичных и вторичных каналах с LE Coded. Выбор ни одного из этих флагов приведёт к показу устаревших публичных данных.
Чтобы позволить будущим параметрам быть необязательно расширенными в этой структуре, элемент Flags использовался для указания того, какие из полей структуры были намеренно установлены вызывающей стороной. Неуказанным параметрам ядро присвоит разумные значения по умолчанию до того, как публичные данные будут зарегистрированы.
Параметр Duration настраивает продолжительность Instance. Значение указывается в секундах.
Значение 0
указывает на то, что для параметра Duration выбрано значение по умолчанию.
Оно равно 2 секундам.
Если добавлен только один Instance, то значение Duration будет игнорироваться. Оно применимо только в случае, когда настроено несколько Instance. Тогда каждый экземпляр будет доступен в течение времени Duration, после чего он переключится на следующий. Это простой циклический подход.
Параметр Timeout настраивает время жизни Instance.
Если используется значение 0
, оно указывает на отсутствие срока действия.
Если указано значение тайм-аута, то Instance будет автоматически удалён по истечении тайм-аута.
Значение времени ожидания указано в секундах.
Выключение контроллера сделает недействительными все Instance, и невозможно добавить новый Instance
с тайм-аутом, когда контроллер выключен.
Когда предоставляется Timeout, то Duration вычитается из фактического значения тайм-аута этого Instance. Например, Instance с Timeout 5 и Duration 2 будет запланирован ровно 3 раза, дважды с 2 секундами и один раз с одной секундой. Другие Instance не влияют на Timeout.
MinInterval и MaxInterval определяют минимальный и максимальный интервалы с единицами измерения,
равными количеству 0,625 мс-слотов публичных данных.
Ожидается, что максимальный интервал будет больше или равен минимальному интервалу, и оба значения
должны находиться в диапазоне [0x000020
, 0xFFFFFF
].
Если одно из условий не выполняется, регистрация невозможна.
Предоставленный параметр Tx Power будет использоваться только в том случае, если контроллер поддерживает его, что можно определить по наличию члена CanSetTxPower команды Read Advertising Features.
Допустимый диапазон для запрашиваемой мощности передатчика определён в спецификации
(Версия 5.2 | Том 4, Часть E, стр. 2585) и составляет [-127
, +20
] дБм, и контроллер выберет
значение мощности вплоть до запрошенного.
Мощность передачи, выбранная контроллером, не обязательно соответствует запрошенной, поэтому ответ
будет содержать мощность, выбранную контроллером.
Если запрошенная Tx Power выходит за пределы допустимого диапазона, регистрация завершится ошибкой.
Когда бит Flags 16 включён, это указывает, что последующий запрос на установку публичных данных будет содержать ответ сканирования, и что параметры должны установить тип PDU, который можно сканировать.
Повторное добавление уже существующего экземпляра (т. е. выполнение команды Add Advertising с идентификатором существующего экземпляра) обновит конфигурацию этого экземпляра. В этом случае, когда новый экземпляр не добавляется, событие Advertising Added не генерируется. Однако если обновление экземпляра завершится ошибкой, экземпляр будет удалён, и будет сгенерировано событие Advertising Removed.
Экземпляр, добавляемый или изменяемый во время объявления другого экземпляра, не будет виден сразу, а только тогда, когда новый/изменённый экземпляр планируется алгоритмом циклического объявления.
Изменения в экземпляре, который в настоящее время объявляется, отменит этот экземпляр и переключится на следующий. Изменения будут видны в следующий раз, когда экземпляр будет запланирован для публичных данных. Если активен один экземпляр, это означает, что изменения будут видны сразу.
Возвращаемый параметр MaxAdvDataLen указывает, насколько велика полезная нагрузка данных в последующей команде Add Extended Advertising Data, поскольку она учитывает данные, необходимые для выбранных флагов. Точно так же возвращаемый параметр MaxScanRspLen указывает, насколько большим может быть ответ сканирования.
Обязательным условием является то, что LE уже включён,
в противном случае эта команда вернёт ошибку Rejected
.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Failed
,Rejected
,Not Supported
,Invalid Parameters
,Busy
.
Команда Add Extended Advertising Data
Код команды: | 0x0055 |
Индекс контроллера: | <controller id> |
Параметры команды: | Instance (1 октет), Advertising Data Length (1 октет), Scan Response Length (1 октет), Advertising Data (0-255 октетов), Scan Response (0-255 октетов) |
Возвращаемые параметры: | Instance (1 октет) |
Команда Add Extended Advertising Data используется для обновления публичных данных существующего экземпляра, известного ядру. Ожидается, что она будет вызываться после команды Add Extended Advertising Parameters в рамках процесса регистрации публичных данных.
Если расширенные публичные данные доступны, этот вызов инициирует команды HCI для установки публичных данных, установки данных ответа на сканирование, а затем включения экземпляра. Если расширенные публичные данные недоступны, в структуре экземпляра, поддерживаемой в ядре, будут обновлены публичные данные и ответ на сканирование, а экземпляр будет либо запланирован немедленно, либо оставлен в очереди для последующего объявления в рамках круговой ротации в программном обеспечении.
Если Scan_Rsp_Len равен нулю, а флаги, определённые в команде Add Extended Advertising Parameters, не имеют установленного флага возможности подключения, и глобальная настройка возможности подключения отключена, то используются неподключаемые публичные данные. Если Scan_Rsp_Len больше нуля, а флаг подключения не установлен и глобальные публичные данные отключены, то используются сканируемые публичные данные. Небольшая разница поддерживается для обеспечения меньшего воздушного трафика для устройств, реализующих роль вещателя.
Если предоставленный экземпляр не соответствует известному экземпляру или если предоставленные
публичные данные или ответ сканирования имеют нераспознанный формат,
будет возвращена ошибка Invalid Parameters
.
Если команда Set LE или Advertising всё ещё выполняется, будет возвращена ошибка Busy
.
Если контроллер не включён, будет возвращена ошибка Rejected
.
Команда генерирует событие Command Complete
в случае успеха
или событие Command Status
в случае ошибки.
Возможные ошибки:
Failed
,Rejected
,Invalid Parameters
,Busy
.
Команда Add Advertisement Patterns Monitor With RSSI Threshold
Код команды: | 0x0056 |
Индекс контроллера: | <controller id> |
Параметры команды: | RSSI_Data { High_Threshold (1 октет), High_Threshold_Timer (2 октета), Low_Threshold (1 октет), Low_Threshold_Timer (2 октета), Sampling_Period (1 октет) }, Pattern_Count (1 октет), Pattern1 { AD_Type (1 октет), Offset (1 октет), Length (1 октет), Value (31 октет) }, Pattern2 { }, ... |
Возвращаемые параметры: | Monitor_Handle (2 октета) |
Команда аналогична команде Add Advertisement Patterns Monitor (0x0052
),
но с дополнительными параметрами RSSI.
Таким образом, если ядро поддерживает фильтрацию публичных данных, данные будут фильтроваться
в соответствии с установленными параметрами RSSI.
В противном случае она будет вести себя точно так же, как и команда
Add Advertisement Patterns Monitor.
Устройства будут считаться «в диапазоне», если RSSI полученных пакетов больше, чем High_Threshold dBm в течение High_Threshold_Timer секунд. Точно так же устройства будут считаться потерянными, если ни одни полученные публичные данные не имеют RSSI выше, чем Low_Threshold dBm в течение Low_Threshold_Timer секунд. Будут распространяться только пакеты устройства «в диапазоне».
Значение Sampling_Period может быть следующим:
Значение | Комментарий |
---|---|
0x00 |
Будут распространяться все пакеты от устройств «в диапазоне» |
0xFF |
Будут распространяться только первые публичные данные устройств «в диапазоне». Если устройство будет потеряно, то первые данные, когда оно будет снова найдено, также будут распространяться. |
Другое | Публичные данные будут сгруппированы по периодам времени 100 мс * N. Данные в одной и той же группе будут сообщаться только один раз, при этом значение RSSI усредняется. |
Возможные ошибки:
Failed
,Busy
,No Resources
,Invalid Parameters
.
Команда Set Quality Report
Код команды: | 0x0057 |
Индекс контроллера: | <controller id> |
Параметры команды: | Quality_Report (1 октет) |
Возвращаемые параметры: | Current_Settings (4 октета) |
Команда используется для включения и отключения функции отчёта о качестве контроллера.
Допустимые значения параметра команды Quality_Report: 0x00
и 0x01
.
Все остальные значения вернут ошибку Invalid Parameters
.
Значение 0x00
отключает отчёт о качестве, а значение 0x01
включает его.
Команда доступна только для контроллеров, поддерживающих либо отчёт о качестве AOSP Bluetooth, либо событие телеметрии Intel. Он поддерживается, если в параметрах Support_Settings указана его поддержка.
Команда требует использования действительного индекса контроллера.
В противном случае будет возвращена ошибка Invalid Index
.
На контроллер отправляется команда для включения/отключения функции отчёта о качестве,
и в случае успеха генерируется событие Command Complete.
Если контроллеру не удалось выполнить действие, будет возвращена ошибка Failed
.
Состояние отчёта о качестве поддерживается ядром в течение цикла питания адаптера. Когда адаптер выключен, функция отчёта о качестве отключается ядром. Когда адаптер включён, она снова включается ядром, если она была включен ранее.
Возможные ошибки:
Failed
,Invalid Index
,Invalid Parameters
,Not Supported
.
Событие Command Complete
Код события: | 0x0001 |
Индекс контроллера: | <controller id> или <non-controller> |
Параметры события: | Command_Opcode (2 октета), Status (1 октет) |
Событие указывает на то, что команда выполнена. Фиксированный набор параметров включает в себя код операции для идентификации завершённой команды, а также значение статуса, указывающее на успех или неудачу. Остальные параметры зависят от команды и описаны в разделе для каждой команды отдельно.
Событие Command Status
Код события: | 0x0002 |
Индекс контроллера: | <controller id> или <non-controller> |
Параметры события: | Command_Opcode (2 октета), Status (1 октет) |
Событие статуса команды используется для указания раннего статуса ожидающей команды. В случае, если статус указывает на сбой (что-либо ещё, кроме статуса успеха), это также означает, что выполнение команды завершено.
Событие Controller Error
Код события: | 0x0003 |
Индекс контроллера: | <controller id> |
Параметры события: | Error_Code (1 октет) |
Событие сопоставляется непосредственно с событием HCI Hardware Error и используется для указания на неисправность оборудования контроллера.
Событие Index Added
Код события: | 0x0004 |
Индекс контроллера: | <controller id> |
Параметры события: |
Событие указывает на добавление в систему нового контроллера. Обычно за ней следует команда чтения информации о контроллере.
После того, как команда Read Extended Controller Index List была использована хотя бы один раз, вместо этого события будет отправлено событие Extended Index Added.
Событие Index Removed
Код события: | 0x0005 |
Индекс контроллера: | <controller id> |
Параметры события: |
Событие указывает на то, что контроллер был удалён из системы.
После того, как команда Read Extended Controller Index List была использована хотя бы один раз, вместо этого события будет отправлено событие Extended Index Removed.
Событие New Settings
Код события: | 0x0006 |
Индекс контроллера: | <controller id> |
Параметры события: | Current_Settings (4 октета) |
Событие указывает на изменение одного или нескольких параметров контроллера.
Событие Class Of Device Changed
Код события: | 0x0007 |
Индекс контроллера: | <controller id> |
Параметры события: | Class_Of_Device (3 октета) |
Событие указывает на то, что значение класса устройства для контроллера изменилось. Когда контроллер выключен, значение класса устройства всегда будет отображаться как ноль.
Событие Local Name Changed
Код события: | 0x0008 |
Индекс контроллера: | <controller id> |
Параметры события: | Name (249 октетов), Short_Name (11 октетов) |
Событие указывает на то, что локальное имя контроллера изменилось.
Событие New Link Key
Код события: | 0x0009 |
Индекс контроллера: | <controller id> |
Параметры события: | Store_Hint (1 октет), Key |
Событие указывает на то, что для удалённого устройства был сгенерирован новый ключ-ссылка.
Параметр Store_Hint указывает, будет ли хост хранить ключ постоянно или нет (например, он не будет установлен, если требованием аутентификации было «без связывания»).
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Зарезервировано (не используется) |
2 |
Зарезервировано (не используется) |
Публичные и случайные адреса LE недействительны и будут отклонены.
В настоящее время определены следующие значения Key_Type
:
Значение | Комментарий |
---|---|
0x00 |
Комбинированный ключ |
0x01 |
Ключ локального устройства |
0x02 |
Ключ удалённого блока |
0x03 |
Комбинированный ключ отладки |
0x04 |
Неаутентифицированный комбинированный ключ от P-192 |
0x05 |
Аутентифицированный комбинированный ключ от P-192 |
0x06 |
Изменённый комбинированный ключ |
0x07 |
Неаутентифицированный комбинированный ключ от P-256 |
0x08 |
Аутентифицированный комбинированный ключ от P-256 |
Получение этого события означает, что процедура сопряжения завершена.
Событие New Long Term Key
Код события: | 0x000A |
Индекс контроллера: | <controller id> |
Параметры события: | Store_Hint (1 октет), Key |
Событие указывает на то, что для удалённого устройства был сгенерирован новый долгосрочный ключ.
Параметр Store_Hint указывает, будет ли хост хранить ключ постоянно или нет (например, он не будет установлен, если требованием аутентификации было «без связывания»).
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
Зарезервировано (не используется) |
1 |
Публичный LE |
2 |
Случайный LE |
Предоставленные Address и Address_Type являются идентификатором устройства. Так что это либо его публичный адрес, либо статический случайный адрес.
Для неразрешаемых случайных адресов и разрешаемых случайных адресов без информации об идентификации и ключа разрешения для Store_Hint будет установлено, что долговременный ключ не хранится.
В настоящее время определены следующие значения Key_Type
:
Значение | Комментарий |
---|---|
0x00 |
Неаутентифицированный устаревший ключ |
0x01 |
Аутентифицированный устаревший ключ |
0x02 |
Неаутентифицированный ключ от P-256 |
0x03 |
Аутентифицированный ключ от P-256 |
0x04 |
Ключ отладки от P-256 |
Получение этого события означает, что процедура сопряжения завершена.
Событие Device Connected
Код события: | 0x000B |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Flags (4 октета), EIR_Data_Length (2 октета), EIR_Data (0-65535 октетов) |
Событие указывает на то, что к удалённому устройству было создано успешное подключение основной полосы частот.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Для устройств, использующих разрешимые случайные адреса с известным ключом разрешения идентификатора, Address и Address_Type будут содержать информацию об идентификаторе.
Возможно, что устройства подключаются через разрешимый случайный адрес и после события New Identity Resolving Key начинают использовать его идентификатор.
Следующие биты определены для параметра Flags:
Значение | Комментарий |
---|---|
0 |
Зарезервировано (не используется) |
1 |
Устаревшее сопряжение |
2 |
Зарезервировано (не используется) |
3 |
Инициированное соединение |
4 |
Зарезервировано (не используется) |
Событие Device Disconnected
Код события: | 0x000C |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Reason (1 октет) |
Событие указывает на то, что соединение основной полосы частот с удалённым устройством было потеряно.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Для устройств, использующих разрешимые случайные адреса с известным ключом разрешения идентификатора, Address и Address_Type будут содержать информацию об идентификаторе.
Возможные значения параметра Reason
:
Значение | Комментарий |
---|---|
0 |
Не указано |
1 |
Тайм-аут соединения |
2 |
Соединение прервано локальным хостом |
3 |
Соединение прервано удаленным хостом |
4 |
Соединение прервано из-за сбоя аутентификации |
5 |
Соединение прервано локальным хостом для приостановки |
Следует обратить внимание, что различие между локальным и удалённым хостом только определяет, какая сторона завершила низкоуровневое соединение, независимо от отключения профилей более высокого уровня.
Иногда это может ввести в заблуждение, и поэтому событие следует использовать с осторожностью. Например, некоторые комбинации оборудования будут сообщать о локальном отключении, даже если пользователь выключил Bluetooth на удалённой стороне.
Событие Connect Failed
Код события: | 0x000D |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Status (1 октет) |
Событие указывает на неудачную попытку подключения к удалённому устройству.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Для устройств, использующих разрешимые случайные адреса с известным ключом разрешения идентификатора, Address и Address_Type будут содержать информацию об идентификаторе.
Событие PIN Code Request
Код события: | 0x000E |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Secure (1 октет) |
Событие используется для запроса ответа на PIN-код из пользовательского пространства. Ответ должен быть возвращён либо с помощью команды PIN Code Reply, либо с помощью команды PIN Code Negative Reply.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Возможные значения параметра Secure
:
Значение | Комментарий |
---|---|
0x00 |
Не требуется безопасный PIN-код |
0x01 |
Требуется безопасный PIN-код |
Событие User Confirmation Request
Код события: | 0x000F |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Confirm_Hint (1 октет), Value (4 октета) |
Событие используется для запроса запроса подтверждения пользователя из пользовательского пространства.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Если значение параметра Confirm_Hint равно 0x01
, это означает, что пользователю должно быть
предоставлено простое подтверждение «Да/Нет» вместо полного числового подтверждения
(в этом случае значение параметра будет 0x00
).
Пространство пользователя должно ответить на эту команду либо с помощью команды User Confirmation Reply, либо с помощью команды User Confirmation Negative Reply.
Событие User Passkey Request
Код события: | 0x0010 |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет) |
Событие используется для запроса пароля из пользовательского пространства. Ответом на это событие должна быть либо команда User Passkey Reply, либо команда User Passkey Negative Reply.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Событие Authentication Failed
Код события: | 0x0011 |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Status (1 октет) |
Событие указывает на сбой проверки подлинности на удалённом устройстве.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Событие Device Found
Код события: | 0x0012 |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), RSSI (1 октет), Flags (4 октета), EIR_Data_Length (2 октета), EIR_Data (0-65535 октетов) |
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Следующие биты определены для параметра Flags:
Значение | Комментарий |
---|---|
0 |
Нужно подтвердить имя |
1 |
Устаревшее сопряжение |
2 |
Не подключается |
3 |
Зарезервировано (не используется) |
4 |
Ошибка запроса имени |
Для поля RSSI значение 127 указывает, что RSSI недоступен. Это может произойти с контроллерами Bluetooth 1.1 и более ранних версий или с плохими условиями радиосвязи.
Флаг «Нужно подтвердить имя» указывает, что ядро хочет знать, знает ли пользовательское пространство имя для этого устройства или нет. Если этот флаг установлен, пользовательское пространство должно ответить на него с помощью команды Confirm Name.
Флаг «Устаревшее сопряжение» указывает на то, что при сопряжении с этим устройством может возникнуть Legacy Pairing. Приложение может использовать эту информацию для оптимизации процесса сопряжения путём локального предварительного создания PIN-кода и, таким образом, устранения риска тайм-аута локального ввода при сопряжении. Следует обратить внимание, что для этого флага существует риск ложных срабатываний, поэтому пользовательское пространство должно иметь возможность обрабатывать получение чего-либо ещё в качестве запроса PIN-кода при сопряжении.
Флаг «Не подключается» указывает, что устройство не будет принимать никаких подключений. Об этом могут свидетельствовать устройства с низким энергопотреблением, выполняющие роль вещателя.
Флаг «Ошибка запроса имени» указывает на то, что процедура разрешения имени завершилась с ошибкой для этого устройства. Пространство пользователя должно использовать эту информацию, чтобы определить, когда лучше повторить процедуру разрешения имён.
Событие Device Found
Код события: | 0x0013 |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Discovering (1 октет) |
Событие указывает на то, что контроллер начал обнаружение устройств. Состояние обнаружения может появляться и исчезать несколько раз между командами Start Discovery и Stop Discovery.
Команда Start Service Discovery также вызовет это событие.
Допустимые значения параметра Discovering: 0x01 (включено) и 0x00 (выключено).
Событие Device Blocked
Код события: | 0x0014 |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет) |
Событие указывает на то, что устройство было заблокировано с помощью команды Block Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие Device Unblocked
Код события: | 0x0015 |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет) |
Событие указывает на то, что устройство было разблокировано с помощью команды Unblock Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие Device Unpaired
Код события: | 0x0016 |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет) |
Событие указывает на то, что устройство было отсоединено (т. е. все его ключи были удалены из ядра) с помощью команды Unpair Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Для устройств, использующих разрешаемые случайные адреса с известным ключом разрешения идентификатора, параметры события будут содержать идентификатор. После получения этого события устройство снова станет практически приватным.
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда Unpair Device.
Событие Passkey Notify
Код события: | 0x0017 |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Passkey (4 октета), Entered (1 октет) |
Событие используется для запроса уведомления пользователя о ключе доступа. В отличие от других событий проверки подлинности, оно не требует ответа на использование какой-либо команды управления.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Параметр Passkey указывает пароль, который будет показан пользователю, тогда как параметр Entered указывает, сколько символов пользователь ввел на удалённой стороне.
Событие New Identity Resolving Key
Код события: | 0x0018 |
Индекс контроллера: | <controller id> |
Параметры события: | Store_Hint (1 октет), Key |
Событие указывает на то, что для удалённого устройства создан новый ключ разрешения идентичности.
Параметр Store_Hint указывает, будет ли хост хранить ключ постоянно или нет.
Random_Address предоставляет разрешаемый случайный адрес, который был преобразован в идентификатор.
Значение 00:00:00:00:00:00
указывает, что ключ разрешения идентификации был предоставлен
для публичного адреса или статического случайного адреса.
Как только это событие будет отправлено для разрешаемого случайного адреса, все дальнейшие события, отображающие это устройство, будут отправляться с использованием информации об идентификационном адресе.
Событие также указывает на то, что теперь для команд следует использовать идентификационный адрес вместо разрешаемого случайного адреса.
Возможно, некоторые устройства разрешают обнаружение через свой идентификационный адрес,
но после сопряжения только с использованием разрешимого частного адреса.
В таком случае Store_Hint будет 0x00
, а Random_Address будет указывать 00:00:00:00:00:00
.
Для этих устройств необходимо проверить характеристику конфиденциальности удалённой базы данных
GATT, чтобы решить, должен ли ключ разрешения идентичности храниться постоянно или нет.
К такому типу устройств относятся устройства, использующие команду Set Privacy с параметром 0x02.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Предоставленные Address и Address_Type являются идентификатором устройства. Так что это либо его публичный адрес, либо статический случайный адрес.
Событие New Signature Resolving Key
Код события: | 0x0019 |
Индекс контроллера: | <controller id> |
Параметры события: | Store_Hint (1 октет), Key |
Событие указывает на то, что для центрального или периферийного устройства был сгенерирован новый ключ разрешения подписи.
Параметр Store_Hint указывает, будет ли хост хранить ключ постоянно или нет.
Параметр Type имеет следующие возможные значения:
Значение | Комментарий |
---|---|
0x00 |
Неаутентифицированный локальный CSRK |
0x01 |
Неаутентифицированный удалённый CSRK |
0x02 |
Аутентифицированный локальный CSRK |
0x03 |
Аутентифицированный удалённый CSRK |
Локальные ключи используются для подписания данных, отправляемых на удалённое устройство, тогда как удалённые ключи используются для проверки подписей, полученных от удалённого устройства.
Локальный ключ разрешения подписи будет генерироваться с каждым запросом на сопряжение. Только после получения этого события с типом, указывающим на локальный ключ, можно использовать процедуры ATT Signed Write.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
Зарезервировано (не используется) |
1 |
Публичный LE |
2 |
Случайный LE |
Предоставленные Address и Address_Type являются идентификатором устройства. Так что это либо его публичный адрес, либо статический случайный адрес.
Событие Device Added
Код события: | 0x001a |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Action (1 октет) |
Событие указывает на то, что устройство было добавлено с помощью команды Add Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие Device Removed
Код события: | 0x001b |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет) |
Событие указывает на то, что устройство было удалено с помощью команды Remove Device.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие New Connection Parameter
Код события: | 0x001c |
Индекс контроллера: | <controller id> |
Параметры события: | Store_Hint (1 октет), Param |
Событие указывает на новый набор параметров подключения от периферийного устройства.
Параметр Store_Hint указывает, должен ли хост хранить эту информацию постоянно или нет.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Параметры Min_Connection_Interval, Max_Connection_Interval, Connection_Latency и Supervision_Timeout кодируются, как описано в спецификации Core 4.1, том 2, 7.7.65.3.
Событие Unconfigured Index Added
Код события: | 0x001d |
Индекс контроллера: | <controller id> |
Параметры события: |
Событие указывает на добавление в систему нового ненастроенного контроллера. Обычно за ней следует команда Read Controller Configuration Information.
Только когда контроллеру требуется дальнейшая настройка, об этом будет объявлено с помощью данного события. Если он поддерживает настройку, но не требует её, то будет использоваться событие Index Added.
После того, как команда Read Extended Controller Index List была использована хотя бы один раз, вместо этого события будет отправлено событие Extended Index Added.
Событие Unconfigured Index Removed
Код события: | 0x001e |
Индекс контроллера: | <controller id> |
Параметры события: |
Событие указывает на то, что ненастроенный контроллер был удалён из системы.
После того, как команда Read Extended Controller Index List была использована хотя бы один раз, вместо этого события будет отправлено событие Extended Index Removed.
Событие New Configuration Options
Код события: | 0x001f |
Индекс контроллера: | <controller id> |
Параметры события: | Missing_Options (4 октета) |
Событие указывает на изменение одного или нескольких параметров конфигурации контроллера.
Событие Extended Index Added
Код события: | 0x0020 |
Индекс контроллера: | <controller id> |
Параметры события: | Controller_Type (1 октет), Controller_Bus (1 октет) |
Событие указывает на добавление в систему нового индекса контроллера.
Событие будет использоваться только после того, как Read Extended Controller Index List была использована хотя бы один раз. Если она не использовалась, вместо него отправляются события Index Added и Unconfigured Index Added.
Событие Extended Index Removed
Код события: | 0x0021 |
Индекс контроллера: | <controller id> |
Параметры события: | Controller_Type (1 октет), Controller_Bus (1 октет) |
Событие указывает на то, что существующий индекс контроллера был удалён из системы.
Событие будет использоваться только после того, как Read Extended Controller Index List была использована хотя бы один раз. Если она не использовалась, вместо него отправляются события Index Removed и Unconfigured Index Removed.
Событие Local Out Of Band Extended Data Updated
Код события: | 0x0022 |
Индекс контроллера: | <controller id> |
Параметры события: | Address_Type (1 октет), EIR_Data_Length (2 октета), EIR_Data (0-65535 октетов) |
Событие используется, когда использовалась команда Read Local Out Of Band Extended Data и какой-либо другой пользователь запросил новый набор локальных внеполосных данных. Это позволяет исходному вызывающему абоненту корректировать данные.
Возможные значения параметра Address_Type
являются побитовыми или состоят из следующих битов:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Возможны следующие комбинации:
Значение | Комментарий |
---|---|
1 |
BR/EDR |
6 |
LE (публичный & случайный) |
7 |
Зарезервировано (не используется) |
Значение для EIR_Data_Length и содержимое для EIR_Data такое же, как описано в команде Read Local Out Of Band Extended Data.
Когда используется LE Privacy и запрашиваются внеполосные данные LE Secure Connections, событие будет генерироваться каждый раз при изменении разрешаемого частного адреса (RPA). Новый RPA будет включён в EIR_Data.
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда. Кроме того, он также будет отправлен только в сокеты, которые использовали команду хотя бы один раз.
Событие Advertising Added
Код события: | 0x0023 |
Индекс контроллера: | <controller id> |
Параметры события: | Instance (1 октет) |
Событие указывает на то, что экземпляр публичных данных был добавлен с помощью команды Add Advertising.
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие Advertising Removed
Код события: | 0x0024 |
Индекс контроллера: | <controller id> |
Параметры события: | Instance (1 октет) |
Событие указывает на то, что экземпляр публичных данных был удалён с помощью команды Remove Advertising.
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие Extended Controller Information Changed
Код события: | 0x0025 |
Индекс контроллера: | <controller id> |
Параметры события: | EIR_Data_Length (2 октета), EIR_Data (0-65535 октетов) |
Событие указывает на то, что информация о контроллере была обновлена и используются новые значения. Сюда входят локальное имя, класс устройства, идентификатор устройства и информация об адресе LE.
Событие будет использоваться только после того, как команда Read Extended Controller Information была использована хотя бы один раз. Если он не использовался, используются устаревшие события.
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие PHY Configuration Changed
Код события: | 0x0026 |
Индекс контроллера: | <controller id> |
Параметры события: | Selected_PHYs (4 октета) |
Событие указывает на то, что значения PHY по умолчанию были обновлены.
Событие будет использоваться только после того, как команда Set PHY Configuration была использована хотя бы один раз.
Событие будет отправлено только в сокеты управления, отличные от того, через который было инициировано изменение.
См. команду Get PHY Configuration для параметра PHYs.
Событие Experimental Feature Changed
Код события: | 0x0027 |
Индекс контроллера: | <controller id> |
Параметры события: | UUID (16 октетов), Flags (4 октета) |
Событие указывает на изменение статуса экспериментальной функции.
Событие будет отправлено только в сокеты управления, отличные от того, через который было инициировано изменение.
См. описание команды Set Experimental Feature для параметра Flags.
Событие Default System Configuration Changed
Код события: | 0x0028 |
Индекс контроллера: | <controller id> |
Параметры события: | Parameter1 { Parameter_Type (2 октета), Value_Length (1 октет), Value (0-255 октетов) }, Parameter2 { }, ... |
Событие указывает на изменение значений системных параметров по умолчанию.
Событие будет отправлено только в сокеты управления, отличные от того, через который было инициировано изменение. Кроме того, он будет отправлен только в сокеты, в которых есть проблемы с командой Read Default System Configuration.
См. описание команды Read Default System Configuration для поддерживаемых значений Parameter_Type.
Событие Default Runtime Configuration Changed
Код события: | 0x0029 |
Индекс контроллера: | <controller id> |
Параметры события: | Parameter1 { Parameter_Type (2 октета), Value_Length (1 октет), Value (0-255 октетов) }, Parameter2 { }, ... |
Событие указывает на изменение значений параметров среды выполнения по умолчанию.
Событие будет отправлено только в сокеты управления, отличные от того, через который было инициировано изменение. Кроме того, он будет отправлен только в сокеты, в которых есть проблемы с командой Read Default Runtime Configuration.
См. описание команды Read Default Runtime Configuration для поддерживаемых значений Parameter_Type.
Событие Device Flags Changed
Код события: | 0x002a |
Индекс контроллера: | <controller id> |
Параметры события: | Address (6 октетов), Address_Type (1 октет), Supported_Flags (4 октета), Current_Flags (4 октета) |
Событие означает, что флаги устройств были изменены с помощью команды Set Device Flags или что новое устройство было добавлено с помощью команды Add Device. В последнем случае оно отправляется сразу после события Device Added.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
BR/EDR |
1 |
Публичный LE |
2 |
Случайный LE |
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Если событие запускается при добавлении устройства, оно отправляется на все сокеты управления.
Событие Advertisement Monitor Added
Код события: | 0x002b |
Индекс контроллера: | <controller id> |
Параметры события: | Monitor_Handle (2 октета) |
Событие указывает на добавление монитора публичных данных с помощью команды Add Advertisement Patterns Monitor.
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие Advertisement Monitor Removed
Код события: | 0x002c |
Индекс контроллера: | <controller id> |
Параметры события: | Monitor_Handle (2 октета) |
Событие указывает на удаление монитора публичных данных с помощью команды Remove Advertisement Monitor.
Событие будет отправлено только в сокеты управления, отличные от того, через который была отправлена команда.
Событие Controller Suspend
Код события: | 0x002d |
Индекс контроллера: | <controller id> |
Параметры события: | Suspend_State (1 октет) |
Событие указывает на то, что контроллер приостановлен из-за использования хоста.
Возможные значения параметра Suspend_State
:
Значение | Комментарий |
---|---|
0 |
Работает (не отключён) |
1 |
Отключён и не сканируется |
2 |
Сканирование страниц и/или пассивное сканирование |
Значение 0 используется для рабочего состояния и может быть отправлено, если контроллер не может быть правильно настроен для приостановки.
Событие будет отправлено на все сокеты управления.
Событие Controller Resume
Код события: | 0x002e |
Индекс контроллера: | <controller id> |
Параметры события: | Wake_Reason (1 октет), Address (6 октетов), Address_Type (1 октет) |
Событие указывает на то, что контроллер вышел из режима ожидания.
Возможные значения параметра Wake_Reason
:
Значение | Комментарий |
---|---|
0 |
Возобновление от источника пробуждения, отличного от Bluetooth |
1 |
Пробуждение из-за непредвиденного события |
2 |
Удалённое пробуждение из-за подключения однорангового устройства |
В настоящее время ожидается, что только одноранговые повторные подключения должны вывести контроллер из приостановленного состояния. Любые другие события, которые произошли, когда система должна была быть приостановлена, приводят к пробуждению из-за непредвиденного события.
Если Wake_Reason — удалённое пробуждение из-за подключения однорангового устройства, адрес однорангового устройства, вызвавшего событие, будет общим в Address и Address_Type. В противном случае Address и Address_Type будут равны нулю.
Событие будет отправлено на все сокеты управления.
Событие Advertisement Monitor Device Found
Код события: | 0x002f |
Индекс контроллера: | <controller id> |
Параметры события: | Monitor_Handle (2 октета), Address (6 октетов), Address_Type (1 октет), RSSI (1 октет), Flags (4 октета), AD_Data_Length (2 октета), AD_Data (0-65535 октетов) |
Событие указывает на то, что контроллер начал отслеживать устройство, соответствующее монитору с дескриптором Monitor_Handle.
Monitor_Handle 0 указывает, что не происходит активное сканирование, и будет отправлен отчёт для уже совпадающего монитора, или поддержка разгрузки контроллера недоступна, поэтому необходимо сообщать обо всех публичных данных для фильтрации на основе программного обеспечения.
Адрес отслеживаемого устройства будет общим для Address и Address_Type.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
Зарезервировано (не используется) |
1 |
Публичный LE |
2 |
Случайный LE |
Для поля RSSI значение 127 указывает, что RSSI недоступен. Это может произойти с контроллерами Bluetooth 1.1 и более ранних версий или с плохими условиями радиосвязи.
Событие будет отправлено на все сокеты управления.
Событие Advertisement Monitor Device Lost
Код события: | 0x0030 |
Индекс контроллера: | <controller id> |
Параметры события: | Monitor_Handle (2 октета), Address (6 октетов), Address_Type (1 октет) |
Событие указывает на то, что контроллер прекратил отслеживание устройства, которое отслеживалось монитором с дескриптором Monitor_Handle.
Адрес отслеживаемого устройства будет общим для Address и Address_Type.
Возможные значения параметра Address_Type
:
Значение | Комментарий |
---|---|
0 |
Зарезервировано (не используется) |
1 |
Публичный LE |
2 |
Случайный LE |
Событие будет отправлено на все сокеты управления.
Событие Quality Report
Код события: | 0x0031 |
Индекс контроллера: | <controller id> |
Параметры события: | Quality_Spec (1 октет), Report_Len (2 октета), Report (0-65535 октетов) |
Событие содержит отчёт о качестве Bluetooth, отправленный контроллером.
Возможные значения параметра Quality_Spec
:
Значение | Комментарий |
---|---|
0 |
Событие отчёта о качестве Bluetooth AOSP |
1 |
Событие телеметрии Intel |
Событие будет отправлено на все сокеты управления.