Как найти дескрипторы, соответствующие различным UUID устройств BLE
Используя gattool, я могу найти UUID, соответствующие дескрипторам моих умных часов, следующим образом:
Device: MAC address
Name: MS1020
Alias: MS1020
Paired: yes
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: no
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
UUID: Unknown (0000cc00-0000-1000-8000-00805f9b34fb)
UUID: Tencent Holdings Limited (0000fee7-0000-1000-8000-00805f9b34fb)
UUID: Vendor specific (00010203-0405-0607-0809-0a0b0c0d1912)
ManufacturerData Key: 0x0211
ManufacturerData Value:
[LE]> characteristics
handle: 0x0002, char properties: 0x12, char value handle: 0x0003, uuid: 2b120008-0600-072a-0100-050200042a00
handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 0708090a-0b0c-0d2b-1200-080600072a01
handle: 0x0007, char properties: 0x06, char value handle: 0x0008, uuid: 00010203-0405-0607-0809-0a0b0c0d2b12
handle: 0x000b, char properties: 0x08, char value handle: 0x000c, uuid: 0000fec7-0000-1000-8000-00805f9b34fb
handle: 0x000d, char properties: 0x20, char value handle: 0x000e, uuid: 0000fec8-0000-1000-8000-00805f9b34fb
handle: 0x0010, char properties: 0x02, char value handle: 0x0011, uuid: 0000fec9-0000-1000-8000-00805f9b34fb
handle: 0x0012, char properties: 0x32, char value handle: 0x0013, uuid: 0000fea1-0000-1000-8000-00805f9b34fb
handle: 0x0015, char properties: 0x2a, char value handle: 0x0016, uuid: 0000fea2-0000-1000-8000-00805f9b34fb
handle: 0x0019, char properties: 0x0a, char value handle: 0x001a, uuid: 0000cc02-0000-1000-8000-00805f9b34fb
handle: 0x001b, char properties: 0x12, char value handle: 0x001c, uuid: 0000cc03-0000-1000-8000-00805f9b34fb
handle: 0x001e, char properties: 0x12, char value handle: 0x001f, uuid: 0000cc04-0000-1000-8000-00805f9b34fb
handle: 0x0021, char properties: 0x1a, char value handle: 0x0022, uuid: 0000cc05-0000-1000-8000-00805f9b34fb
handle: 0x0024, char properties: 0x08, char value handle: 0x0025, uuid: 0000cc06-0000-1000-8000-00805f9b34fb
[LE]> primary
attr handle: 0x0001, end grp handle: 0x0005 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0006, end grp handle: 0x0009 uuid: 00010203-0405-0607-0809-0a0b0c0d1912
attr handle: 0x000a, end grp handle: 0x0017 uuid: 0000fee7-0000-1000-8000-00805f9b34fb
attr handle: 0x0018, end grp handle: 0x0025 uuid: 0000cc00-0000-1000-8000-00805f9b34fb
[LE]> char-desc
handle: 0x0001, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0002, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0004, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb
handle: 0x0006, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0007, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0008, uuid: 00010203-0405-0607-0809-0a0b0c0d2b12
handle: 0x0009, uuid: 00002901-0000-1000-8000-00805f9b34fb
handle: 0x000a, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x000b, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x000c, uuid: 0000fec7-0000-1000-8000-00805f9b34fb
handle: 0x000d, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x000e, uuid: 0000fec8-0000-1000-8000-00805f9b34fb
handle: 0x000f, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0010, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0011, uuid: 0000fec9-0000-1000-8000-00805f9b34fb
handle: 0x0012, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0013, uuid: 0000fea1-0000-1000-8000-00805f9b34fb
handle: 0x0014, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0015, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0016, uuid: 0000fea2-0000-1000-8000-00805f9b34fb
handle: 0x0017, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0018, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0019, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001a, uuid: 0000cc02-0000-1000-8000-00805f9b34fb
handle: 0x001b, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001c, uuid: 0000cc03-0000-1000-8000-00805f9b34fb
handle: 0x001d, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x001e, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001f, uuid: 0000cc04-0000-1000-8000-00805f9b34fb
handle: 0x0020, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0021, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0022, uuid: 0000cc05-0000-1000-8000-00805f9b34fb
handle: 0x0023, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0024, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0025, uuid: 0000cc06-0000-1000-8000-00805f9b34fb
Однако я запутался, как выяснить, какой дескриптор для какой функции BLE. Например, на странице https://www.bluetooth.com/specifications/gatt/characteristics/ показано, что функция определения уровня заряда батареи имеет значение 0x2A19. Однако я не могу понять, где или как получить UUID, соответствующий 0x2A19 в выводе char-desc выше. Как мне это получить?
Изменить: Спасибо за очень полезные описания в ответах (оба очень хорошие). Я добавил информацию о характеристиках выше. У меня также есть некоторая дополнительная информация, которая может или не может быть полезной.
Методом проб и ошибок я могу установить, что измерение артериального давления (полученное при нажатии кнопки на ремешке для часов) получается из третьей и четвертой записи (в шестнадцатеричном формате) дескриптора уведомления (см. Вывод):
Notification handle = 0x001f value: f3 14 73 4d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Однако когда ничего не делается, то есть ни одна кнопка не нажата, я получаю:
[LE]> char-read-hnd 0x001f
Characteristic value/descriptor: 07 00 04 4e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Тот же дескриптор уведомления дает частоту сердечных сокращений (при нажатии этой кнопки) в 11-й записи:
Notification handle = 0x001f value: 20 00 00 00 00 00 00 00 00 00 63 00 00 00 00 00 00 00 00 00
Однако во всех случаях первая запись также изменилась (и они кажутся уникальными для операции и бездействия).
Интересно, могу ли я получить доступ к информации, а также, например, как запустить измерение АД. Еще раз спасибо!
Пожалуйста, дайте мне знать в комментариях, если мой вопрос не ясен или требуется дополнительная информация. Я рад предоставить дополнительную информацию по мере необходимости. Спасибо за ваше время в чтении и внесении предложений / указателей.
2 ответа
Характеристика уровня заряда батареи не "в 0x2A19", но это UUID 00002A19-0000-1000-8000-00805f9b34fb
, Кажется, на вашем устройстве такой характеристики нет. Примечание. Обслуживание батареи разрешено объявлять как вторичное обслуживание, тогда оно не может быть обнаружено "основной" командой.
Обновить после редактирования:
К сожалению, это устройство использует нестандартную характеристику (дескриптор 0x1e, тип 0000cc04-0000-1000-8000-00805f9b34fb) внутри нестандартного сервиса (дескриптор 0x18, тип 0000cc00-0000-1000-8000-00805f9b34fb) для передачи данных. Если есть способ вызвать измерения, которые вы хотите, это относится к обратному проектированию.
TL; DR
Спецификация Bluetooth предназначалась для того, чтобы позволить специфичным для поставщика функциям GATT сосуществовать со стандартными функциями без необходимости создания глобального каталога. Для этого все в GATT обозначается через идентификаторы, которые представляют собой 128-битные UUID таким образом, что любой может генерировать, не заботясь о коллизиях.
Все набрано UUID, см. 3.G.2.5.1:
Тип атрибута - это UUID, который описывает значение атрибута.
Каждый сервис также имеет тип, см. 3.G.3.1:
Объявление службы - это Атрибут с Типом Атрибута, установленным в UUID для "Первичная служба" или "Вторичная служба". [...] Клиент может игнорировать любое определение сервиса с неизвестным UUID сервиса. UUID неизвестного сервиса - это UUID для неподдерживаемого сервиса.
И каждый признак имеет тип, см. 3.G.3.3.1:
Объявление характеристики - это Атрибут с Типом атрибута, установленным в UUID для "Характеристика", и Значением атрибута, установленным в Свойства характеристики, Дескриптор атрибута значения характеристики и UUID характеристики.
Распределение UUID просто, и у нас есть прекрасная иллюстрация с дампом с вашего устройства выше:
Используйте стандартные определения, придерживайтесь стандартных UUID,
Bluetooth SIG предлагает своим членам получить UUID на основе Bluetooth для оптимизированного использования, поэтому
0000fee7-0000-1000-8000-00805f9b34fb
является совместимым и зависящим от поставщика (выделяется SIG дляTencent Holdings Limited
24.04.2014).Создайте случайный UUID с нуля и используйте его для пользовательских целей.
00010203-0405-0607-0809-0a0b0c0d1912
выглядит послушным, но не выглядит случайным на всех. Кто-то другой может получить то же значение случайно.
OTOH, я не могу найти спецификацию Bluetooth, определяющую 0000cc00-0000-1000-8000-00805f9b34fb
Это выглядит несоответствующим.
Спецификация Bluetooth позаботилась о себе и оптимизировала процесс UUID для использования собственной спецификации двумя способами:
Чтобы их было легко найти, все идентификаторы Bluetooth имеют общую базу, которая
nnnnnnnn-0000-1000-8000-00805f9b34fb
, гдеnnnnnnnn
является 32-битным значением, когда коллизии неприемлемы, поэтому должны строго контролироваться при распределении. См. 3.B.2.5.1:Чтобы уменьшить нагрузку на хранение и передачу 128-битных значений UUID, диапазон значений UUID был предварительно выделен для назначения часто используемым зарегистрированным целям.
Когда вы смотрите на страницу характеристик GATT Service / GATT, вы на самом деле смотрите список UUID на основе Bluetooth, то есть вы должны добавить
-0000-1000-8000-00805f9b34fb
когда вы ищете их в выводе gatttool.В качестве оптимизации протокол GATT позволяет кодировать UUID на основе Bluettoth в виде более коротких вариантов, которые представляют собой "16-битный" и "32-битный" варианты, то есть не повторяющиеся
-0000-1000-8000-00805f9b34fb
, Пример такой вещи см. В таблице 3.4 в 3.G.3.3.1.
Выход из primary
сообщает вам, какие сервисы поддерживает ваше устройство, например: первый сегмент uuid: 00001800-0000-1000-8000-00805f9b34fb
является 00001800
которая является услугой общего доступа (org.bluetooth.service.generic_access, 0x1800).
Выход из primary
не перечисляет службы батареи (org.bluetooth.service.battery_service, 0x180F):
[LE]> primary
attr handle: 0x0001, end grp handle: 0x0005 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0006, end grp handle: 0x0009 uuid: 00010203-0405-0607-0809-0a0b0c0d1912
attr handle: 0x000a, end grp handle: 0x0017 uuid: 0000fee7-0000-1000-8000-00805f9b34fb
attr handle: 0x0018, end grp handle: 0x0025 uuid: 0000cc00-0000-1000-8000-00805f9b34fb
Из-за отсутствия обслуживания батареи вы не найдете никаких характеристик, связанных с обслуживанием батареи, таких как уровень заряда батареи, состояние батареи, состояние батареи и т. Д.
Рекомендации: