Compare commits

..

2 Commits

Author SHA1 Message Date
91fbe718e5 Add error handling to connect call 2021-08-21 20:25:09 -07:00
7f19dfb354 Allow configuration of pair timeout 2021-08-21 20:24:56 -07:00

View File

@@ -39,13 +39,14 @@ type Device struct {
var ErrNoDevices = errors.New("no InfiniTime devices found") var ErrNoDevices = errors.New("no InfiniTime devices found")
var ErrNotFound = errors.New("could not find any advertising InfiniTime devices") var ErrNotFound = errors.New("could not find any advertising InfiniTime devices")
type Options struct { type Options struct {
AttemptReconnect bool AttemptReconnect bool
PairTimeout time.Duration
} }
var DefaultOptions = &Options{ var DefaultOptions = &Options{
AttemptReconnect: true, AttemptReconnect: true,
PairTimeout: time.Minute,
} }
// Connect will attempt to connect to a // Connect will attempt to connect to a
@@ -63,7 +64,7 @@ func Connect(opts *Options) (*Device, error) {
// If such device does not exist // If such device does not exist
if errors.Is(err, ErrNoDevices) { if errors.Is(err, ErrNoDevices) {
// Attempt to pair device // Attempt to pair device
dev, err = pair() dev, err = pair(dev.opts.PairTimeout)
} }
if err != nil { if err != nil {
return nil, err return nil, err
@@ -150,7 +151,10 @@ func connectByName() (*Device, error) {
return nil, ErrNoDevices return nil, ErrNoDevices
} }
// Connect to device // Connect to device
out.device.Connect() err = out.device.Connect()
if err != nil {
return nil, err
}
// Resolve characteristics // Resolve characteristics
err = out.resolveChars() err = out.resolveChars()
if err != nil { if err != nil {
@@ -160,7 +164,7 @@ func connectByName() (*Device, error) {
} }
// Pair attempts to discover and pair an InfiniTime device // Pair attempts to discover and pair an InfiniTime device
func pair() (*Device, error) { func pair(timeout time.Duration) (*Device, error) {
// Create new device // Create new device
out := &Device{} out := &Device{}
// Start bluetooth discovery // Start bluetooth discovery
@@ -190,7 +194,7 @@ discoveryLoop:
// Break out of discoveryLoop // Break out of discoveryLoop
break discoveryLoop break discoveryLoop
} }
case <-time.After(5 * time.Second): case <-time.After(timeout):
break discoveryLoop break discoveryLoop
} }
} }