From 3c9cf83de205feda5c8a63ed4a0f599289a1b7a7 Mon Sep 17 00:00:00 2001 From: Baden Parr <1badenparr@gmail.com> Date: Tue, 6 Jun 2023 16:30:20 +1200 Subject: [PATCH] macos: enable support for duplicate chars by moving from a map to a slice --- gap_darwin.go | 17 +++++++++++------ gattc_darwin.go | 6 +++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/gap_darwin.go b/gap_darwin.go index c397320..f0d5d11 100644 --- a/gap_darwin.go +++ b/gap_darwin.go @@ -195,14 +195,19 @@ func (pd *peripheralDelegate) DidUpdateValueForCharacteristic(prph cbgo.Peripher svcuuid, _ := ParseUUID(chr.Service().UUID().String()) if svc, ok := pd.d.services[svcuuid]; ok { - if char, ok := svc.characteristics[uuid]; ok { - if err == nil && char.callback != nil { - go char.callback(chr.Value()) + for _, char := range svc.characteristics { + + if char.characteristic == chr && uuid == char.UUID() { // compare pointers + if err == nil && char.callback != nil { + go char.callback(chr.Value()) + } + + if char.readChan != nil { + char.readChan <- err + } } - if char.readChan != nil { - char.readChan <- err - } } + } } diff --git a/gattc_darwin.go b/gattc_darwin.go index e4b10a3..4fb1f30 100644 --- a/gattc_darwin.go +++ b/gattc_darwin.go @@ -72,7 +72,7 @@ type deviceService struct { device *Device service cbgo.Service - characteristics map[UUID]DeviceCharacteristic + characteristics []DeviceCharacteristic } // UUID returns the UUID for this DeviceService. @@ -95,7 +95,7 @@ func (s *DeviceService) DiscoverCharacteristics(uuids []UUID) ([]DeviceCharacter s.device.prph.DiscoverCharacteristics(cbuuids, s.service) // clear cache of characteristics - s.characteristics = make(map[UUID]DeviceCharacteristic) + s.characteristics = make([]DeviceCharacteristic, 0) // wait on channel for characteristic discovery select { @@ -150,7 +150,7 @@ func (s *DeviceService) makeCharacteristic(uuid UUID, dchar cbgo.Characteristic) characteristic: dchar, }, } - s.characteristics[char.uuidWrapper] = char + s.characteristics = append(s.characteristics, char) return char }