Skip to content

Commit

Permalink
Implement discovery timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
andig committed May 18, 2020
1 parent c875c36 commit 9c06bd4
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 22 deletions.
43 changes: 23 additions & 20 deletions charger/nrgble/nrg_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@ import (
"errors"
"fmt"
"strings"
"time"

"github.com/muka/go-bluetooth/api"
"github.com/muka/go-bluetooth/bluez/profile/adapter"
"github.com/muka/go-bluetooth/bluez/profile/agent"
"github.com/muka/go-bluetooth/bluez/profile/device"
)

func FindDevice(a *adapter.Adapter1, hwaddr string) (*device.Device1, error) {
dev, err := Discover(a, hwaddr)
func FindDevice(a *adapter.Adapter1, hwaddr string, timeout time.Duration) (*device.Device1, error) {
dev, err := Discover(a, hwaddr, timeout)
if err != nil {
return nil, err
}
Expand All @@ -23,7 +24,7 @@ func FindDevice(a *adapter.Adapter1, hwaddr string) (*device.Device1, error) {
return dev, nil
}

func Discover(a *adapter.Adapter1, hwaddr string) (*device.Device1, error) {
func Discover(a *adapter.Adapter1, hwaddr string, timeout time.Duration) (*device.Device1, error) {
err := a.FlushDevices()
if err != nil {
return nil, err
Expand All @@ -34,28 +35,30 @@ func Discover(a *adapter.Adapter1, hwaddr string) (*device.Device1, error) {
return nil, err
}

defer cancel()
timer := time.NewTimer(timeout)

for ev := range discovery {
dev, err1 := device.NewDevice1(ev.Path)
if err != nil {
return nil, err1
}

if dev == nil || dev.Properties == nil {
continue
}
for {
select {
case ev := <-discovery:
dev, err := device.NewDevice1(ev.Path)
if err != nil {
return nil, err
}
if dev == nil || dev.Properties == nil {
continue
}

p := dev.Properties
p := dev.Properties
if p.Address != hwaddr {
continue
}

if p.Address != hwaddr {
continue
return dev, nil
case <-timer.C:
cancel()
return nil, errors.New("discovery timeout exceeded")
}

return dev, nil
}

return nil, nil
}

func Connect(dev *device.Device1, ag *agent.SimpleAgent, adapterID string) error {
Expand Down
6 changes: 4 additions & 2 deletions charger/nrgble_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import (
"github.com/muka/go-bluetooth/hw"
)

const nrgTimeout = 30 * time.Second

// NRGKickBLE charger implementation
type NRGKickBLE struct {
log *util.Logger
Expand Down Expand Up @@ -109,9 +111,9 @@ func NewNRGKickBLE(device, macaddress string, pin int) *NRGKickBLE {
}

func (nrg *NRGKickBLE) connect() (*device.Device1, error) {
dev, err := nrgble.FindDevice(nrg.adapter, nrg.macaddress)
dev, err := nrgble.FindDevice(nrg.adapter, nrg.macaddress, nrgTimeout)
if err != nil {
return nil, fmt.Errorf("findDevice: %s", err)
return nil, fmt.Errorf("find device: %s", err)
}

err = nrgble.Connect(dev, nrg.agent, nrg.device)
Expand Down

0 comments on commit 9c06bd4

Please sign in to comment.