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,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
}
}
}
}

View file

@ -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
}