Запутался в адресации характеристик / дескрипторов и UUID - PullRequest
0 голосов
/ 05 сентября 2018

Я всегда предполагал, что для каждой характеристики / услуги / дескриптора на периферии BLE существует уникальный UUID. Я полагал, что UUID не только описал то, что он предоставил, но также предоставил уникальный дескриптор для этого. По сути, я думал, что транспортный уровень использует это для идентификации конкретного экземпляра между периферийным и центральным.

Но, работая с Android, я обнаружил, что для характеристики, требующей уведомления, нужно не только использовать setCharacteristicNotification API, но и запросить характеристику для конкретного дескриптора при канонизированном UUID (00002902-0000-1000-8000-00805f9b34fb ), а затем установите значение этого дескриптора, чтобы разрешить соответствующее уведомление / указание.

Что я не понимаю, так это то, что это означает, что для каждой уведомляемой характеристики, которую имеет мое устройство, у него есть дескриптор, связанный с этим конкретным UUID. Если у меня будет 5 характеристик для уведомления, у меня будет 5 разных дескрипторов, но все с одинаковым UUID. Итак, когда устройство Android записывает один из этих дескрипторов, какой адрес он использует для указания похожих по внешнему виду дескрипторов? Это все волшебным образом управляется под капотом?

1 Ответ

0 голосов
/ 05 сентября 2018

UUID просто описывает что это за услуга / характеристика / дескриптор.

База данных (G) ATT построена на списке кортежей (handle, uuid, value), называемых атрибутами. Дескриптор - это 16-битный уникальный идентификатор, используемый на транспортном уровне для идентификации атрибута.

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

Вы просматриваете дескриптор конфигурации характеристики клиента по uuid, сгруппированному по интересующему вас признаку, и записываете в него 0x0001. Внутренне клиент GATT Android ищет дескриптор и отправляет запрос на запись. Ваше приложение не имеет доступа к ручкам; только характерные объекты высокого уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...