Søren Rasmussen
07a23c1845
Some checks reported errors
continuous-integration/drone/push Build encountered an error
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
// cmgrdlg.go: Implements the CentralManagerDelegate interface. CoreBluetooth
|
|
// communicates events asynchronously via callbacks. This file implements a
|
|
// synchronous interface by translating these callbacks into channel
|
|
// operations.
|
|
|
|
package darwin
|
|
|
|
import (
|
|
"github.com/JuulLabs-OSS/ble"
|
|
"github.com/JuulLabs-OSS/cbgo"
|
|
)
|
|
|
|
func (d *Device) CentralManagerDidUpdateState(cmgr cbgo.CentralManager) {
|
|
d.evl.stateChanged.RxSignal(struct{}{})
|
|
}
|
|
|
|
func (d *Device) DidDiscoverPeripheral(cmgr cbgo.CentralManager, prph cbgo.Peripheral,
|
|
advFields cbgo.AdvFields, rssi int) {
|
|
|
|
if d.advHandler == nil {
|
|
return
|
|
}
|
|
|
|
a := &adv{
|
|
localName: advFields.LocalName,
|
|
rssi: int(rssi),
|
|
mfgData: advFields.ManufacturerData,
|
|
}
|
|
if advFields.Connectable != nil {
|
|
a.connectable = *advFields.Connectable
|
|
}
|
|
if advFields.TxPowerLevel != nil {
|
|
a.powerLevel = *advFields.TxPowerLevel
|
|
}
|
|
for _, u := range advFields.ServiceUUIDs {
|
|
a.svcUUIDs = append(a.svcUUIDs, ble.UUID(u))
|
|
}
|
|
for _, sd := range advFields.ServiceData {
|
|
a.svcData = append(a.svcData, ble.ServiceData{
|
|
UUID: ble.UUID(sd.UUID),
|
|
Data: sd.Data,
|
|
})
|
|
}
|
|
a.peerUUID = ble.UUID(prph.Identifier())
|
|
|
|
d.advHandler(a)
|
|
}
|
|
|
|
func (d *Device) DidConnectPeripheral(cmgr cbgo.CentralManager, prph cbgo.Peripheral) {
|
|
fail := func(err error) {
|
|
d.evl.connected.RxSignal(&eventConnected{
|
|
err: err,
|
|
})
|
|
}
|
|
|
|
c, err := newCentralConn(d, prph)
|
|
if err != nil {
|
|
fail(err)
|
|
}
|
|
|
|
d.evl.connected.RxSignal(&eventConnected{
|
|
conn: c,
|
|
})
|
|
}
|
|
|
|
func (d *Device) DidDisconnectPeripheral(cmgr cbgo.CentralManager, prph cbgo.Peripheral, err error) {
|
|
c := d.findConn(ble.NewAddr(prph.Identifier().String()))
|
|
if c != nil {
|
|
close(c.done)
|
|
}
|
|
}
|