macos: enable support for duplicate chars by moving from a map to a slice

This commit is contained in:
Baden Parr 2023-06-06 16:30:20 +12:00 committed by Ron Evans
parent 4d067bc2b3
commit 3c9cf83de2
2 changed files with 14 additions and 9 deletions

View file

@ -195,7 +195,9 @@ func (pd *peripheralDelegate) DidUpdateValueForCharacteristic(prph cbgo.Peripher
svcuuid, _ := ParseUUID(chr.Service().UUID().String()) svcuuid, _ := ParseUUID(chr.Service().UUID().String())
if svc, ok := pd.d.services[svcuuid]; ok { if svc, ok := pd.d.services[svcuuid]; ok {
if char, ok := svc.characteristics[uuid]; ok { for _, char := range svc.characteristics {
if char.characteristic == chr && uuid == char.UUID() { // compare pointers
if err == nil && char.callback != nil { if err == nil && char.callback != nil {
go char.callback(chr.Value()) go char.callback(chr.Value())
} }
@ -204,5 +206,8 @@ func (pd *peripheralDelegate) DidUpdateValueForCharacteristic(prph cbgo.Peripher
char.readChan <- err char.readChan <- err
} }
} }
}
} }
} }

View file

@ -72,7 +72,7 @@ type deviceService struct {
device *Device device *Device
service cbgo.Service service cbgo.Service
characteristics map[UUID]DeviceCharacteristic characteristics []DeviceCharacteristic
} }
// UUID returns the UUID for this DeviceService. // 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) s.device.prph.DiscoverCharacteristics(cbuuids, s.service)
// clear cache of characteristics // clear cache of characteristics
s.characteristics = make(map[UUID]DeviceCharacteristic) s.characteristics = make([]DeviceCharacteristic, 0)
// wait on channel for characteristic discovery // wait on channel for characteristic discovery
select { select {
@ -150,7 +150,7 @@ func (s *DeviceService) makeCharacteristic(uuid UUID, dchar cbgo.Characteristic)
characteristic: dchar, characteristic: dchar,
}, },
} }
s.characteristics[char.uuidWrapper] = char s.characteristics = append(s.characteristics, char)
return char return char
} }