From ce37779c6488e3ae6ac77eea03bac8a89a651d88 Mon Sep 17 00:00:00 2001 From: Georg Wechslberger Date: Sun, 7 Jun 2026 11:58:26 +0000 Subject: [PATCH] fix: ensure that a CCCD is only create once for a characteristic --- linux/att/db.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/linux/att/db.go b/linux/att/db.go index bee9750a..fcbbb8b2 100644 --- a/linux/att/db.go +++ b/linux/att/db.go @@ -116,8 +116,18 @@ func genCharAttr(c *ble.Characteristic, h uint16) (uint16, []*attr) { c.Handle = h c.ValueHandle = vh if c.NotifyHandler != nil || c.IndicateHandler != nil { - c.CCCD = newCCCD(c) - c.Descriptors = append(c.Descriptors, c.CCCD) + // Generate a CCCD, if it does not exist yet. + hasCCCD := false + for _, descriptor := range c.Descriptors { + if descriptor.UUID.Equal(ble.ClientCharacteristicConfigUUID) { + hasCCCD = true + break + } + } + if !hasCCCD { + c.CCCD = newCCCD(c) + c.Descriptors = append(c.Descriptors, c.CCCD) + } } h += 2