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