This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Why all CCCDs have the same UUID?

So apparently, for ble, all CCCDs, regardless of what the UUID of a characteristic is, is

00002902-0000-1000-8000-00805f9b34fb

And to access that, the proper step should be:

Access the service via the unique UUID - >Access the characteristic via the unique UUID -> access the descriptor via the NON-UNIQUE UUID

I don't get it, since a characteristic only has 1, the one and only CCCD, shouldn't we access that CCCD with the target characteristic's UUID?

What's with all the redundancy? What was the consideration in this? Or did I misunderstood everything?

Parents
  • CCCD is Descriptor, it has no meaning on its own, it must be always used in the context of Characteristic (to which it is attached to). Then to be able to decode that this is CCCD and nothing else it must have standard UUID and all standard UUIDs in BT have the same 128-bit base hence CCCD ends up with well known registered 16-bit (2 byte) UUID. Actually thinking it through it cannot be done differently. How would GATT Client know where to enable Indications or Notifications on given Characteristic if it has multiple Descriptors and all of them have proprietary UUIDs?

Reply
  • CCCD is Descriptor, it has no meaning on its own, it must be always used in the context of Characteristic (to which it is attached to). Then to be able to decode that this is CCCD and nothing else it must have standard UUID and all standard UUIDs in BT have the same 128-bit base hence CCCD ends up with well known registered 16-bit (2 byte) UUID. Actually thinking it through it cannot be done differently. How would GATT Client know where to enable Indications or Notifications on given Characteristic if it has multiple Descriptors and all of them have proprietary UUIDs?

Children
No Data
Related