From c911bbb547bcf7b8dbcfb820e46126d7c45c4469 Mon Sep 17 00:00:00 2001 From: Greg Date: Mon, 28 Oct 2019 11:21:14 -0400 Subject: [PATCH] Move BLE type into ble.go. --- ble.go | 12 ++++++++++++ ble_darwin.go | 53 ++++++++++++++++++++++----------------------------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/ble.go b/ble.go index 121e1ab..df083a4 100644 --- a/ble.go +++ b/ble.go @@ -8,6 +8,18 @@ import ( "git.wow.st/gmp/ble/gatt" ) +type BLE struct { + state bleState + events chan interface{} + peripherals Peripherals + handle bleHandle + + ready, wantScan bool + sync.Mutex + + connections Connections +} + type PeripheralListItem struct { p Peripheral seen time.Time diff --git a/ble_darwin.go b/ble_darwin.go index c9aea34..4c7db40 100644 --- a/ble_darwin.go +++ b/ble_darwin.go @@ -6,7 +6,6 @@ import ( "encoding/binary" "fmt" "runtime" - "sync" "time" "unsafe" @@ -14,17 +13,11 @@ import ( "git.wow.st/gmp/ble/ns" ) -type BLE struct { - state ns.CBManagerState - events chan interface{} - peripherals Peripherals - cd *ns.CBDelegate - cm *ns.CBCentralManager +type bleState ns.CBManagerState - ready, wantScan bool - sync.Mutex - - connections Connections +type bleHandle struct { + cd *ns.CBDelegate + cm *ns.CBCentralManager } var cdLookup map[unsafe.Pointer]*BLE @@ -91,18 +84,18 @@ func newPeripheral(x *ns.CBPeripheral) Peripheral { func (b *BLE) stringState() string { x := b.state - switch x { - case (ns.CBManagerState)(ns.CBManagerStateResetting): + switch (ns.NSInteger)(x) { + case ns.CBManagerStateResetting: return "resetting" - case (ns.CBManagerState)(ns.CBManagerStateUnsupported): + case ns.CBManagerStateUnsupported: return "unsupported" - case (ns.CBManagerState)(ns.CBManagerStateUnauthorized): + case ns.CBManagerStateUnauthorized: return "unauthorized" - case (ns.CBManagerState)(ns.CBManagerStatePoweredOff): + case ns.CBManagerStatePoweredOff: return "powered off" - case (ns.CBManagerState)(ns.CBManagerStatePoweredOn): + case ns.CBManagerStatePoweredOn: return "powered on" - case (ns.CBManagerState)(ns.CBManagerStateUnknown): + case ns.CBManagerStateUnknown: return "unknown" default: return "no state" @@ -110,21 +103,21 @@ func (b *BLE) stringState() string { } func (b *BLE) readyToScan() bool { - return b.state == (ns.CBManagerState)(ns.CBManagerStatePoweredOn) + return b.state == (bleState)(ns.CBManagerStatePoweredOn) } func (b *BLE) scan() { - b.cm.ScanForPeripheralsWithServices(nil, nil) + b.handle.cm.ScanForPeripheralsWithServices(nil, nil) } func (b *BLE) stopScan() { - b.cm.StopScan() + b.handle.cm.StopScan() } func (b *BLE) setState(x ns.CBManagerState) { b.Lock() defer b.Unlock() - b.state = x + b.state = (bleState)(x) if b.ready && b.wantScan { fmt.Printf("Go: Scanning\n") b.scan() @@ -134,7 +127,7 @@ func (b *BLE) setState(x ns.CBManagerState) { func (b *BLE) connectPeripheral(x Peripheral) { fmt.Printf("BLE.Connect(): calling cm.ConnectPeripheral(%p)\n", x.p.Ptr()) - b.cm.ConnectPeripheral(x.p, nil) + b.handle.cm.ConnectPeripheral(x.p, nil) } func CancelConnection(p Peripheral) { @@ -157,12 +150,12 @@ func CancelConnection(p Peripheral) { } func (b *BLE) cancelConnection(p Peripheral) { - b.cm.CancelPeripheralConnection(p.p) + b.handle.cm.CancelPeripheralConnection(p.p) } func (b *BLE) knownPeripheral(p Peripheral) (Peripheral, bool) { fmt.Printf("RetrievePeripheralsWithIdentifiers\n") - ps := b.cm.RetrievePeripheralsWithIdentifiers(ns.NSArrayWithObjects(ns.NSUUIDAlloc().InitWithUUIDString(ns.NSStringWithGoString(p.Identifier)))) + ps := b.handle.cm.RetrievePeripheralsWithIdentifiers(ns.NSArrayWithObjects(ns.NSUUIDAlloc().InitWithUUIDString(ns.NSStringWithGoString(p.Identifier)))) if x := (int)(ps.Count()); x > 0 { fmt.Printf("--found %d\n", x) cbp := ps.ObjectAtIndex(0).CBPeripheral() @@ -185,7 +178,7 @@ func didUpdateState(c *ns.CBCentralManager) { b.connections.Lock() for _, item := range b.connections.items { fmt.Printf("Closing connection to %s\n", item.p.Name) - b.cm.CancelPeripheralConnection(item.p.p) + b.handle.cm.CancelPeripheralConnection(item.p.p) } b.connections.items = b.connections.items[:0] b.connections.Unlock() @@ -218,7 +211,7 @@ func didConnectPeripheral(c *ns.CBCentralManager, p *ns.CBPeripheral) { b := cdLookup[c.Ptr()] // set ourselves up as a peripheral delegate - p.SetDelegate(b.cd) + p.SetDelegate(b.handle.cd) uuidstring := p.Identifier().UUIDString().String() peripheral := newPeripheral(p) @@ -336,7 +329,7 @@ func NewBLE() *BLE { cd.PeripheralDidUpdateValueForCharacteristicCallback(didUpdateValue) - ble.cd = cd + ble.handle.cd = cd if cdLookup == nil { cdLookup = make(map[unsafe.Pointer]*BLE, 0) } @@ -345,8 +338,8 @@ func NewBLE() *BLE { } // We defined our own queue because this won't work on the main queue. - ble.cm = ns.CBCentralManagerAlloc().InitWithDelegateQueue(cd, queue) - cdLookup[ble.cm.Ptr()] = ble + ble.handle.cm = ns.CBCentralManagerAlloc().InitWithDelegateQueue(cd, queue) + cdLookup[ble.handle.cm.Ptr()] = ble // For debugging purposes, run GC every second to make sure things are // not over-released.