Skip to content

Commit 43cd795

Browse files
authored
tlv493d: Auto-reset TLV493D on error (#52)
1 parent a6bfa87 commit 43cd795

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

tlv493d/tlv493d.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package tlv493d
77
import (
88
"errors"
99
"fmt"
10+
"log"
1011
"sync"
1112
"time"
1213

@@ -185,7 +186,7 @@ func New(i i2c.Bus, opts *Opts) (*Dev, error) {
185186
temperatureOffsetCompensation: opts.TemperatureOffsetCompensation,
186187
registersBuffer: make([]byte, numberOfReadRegisters),
187188
}
188-
if err := d.initialize(opts); err != nil {
189+
if err := d.initialize(opts.Reset); err != nil {
189190
return nil, err
190191
}
191192
return d, nil
@@ -204,7 +205,7 @@ func (d *Dev) Halt() error {
204205
return d.SetMode(PowerDownMode)
205206
}
206207

207-
func (d *Dev) initialize(opts *Opts) error {
208+
func (d *Dev) initialize(reset bool) error {
208209
d.mu.Lock()
209210
defer d.mu.Unlock()
210211

@@ -215,7 +216,7 @@ func (d *Dev) initialize(opts *Opts) error {
215216
return err
216217
}
217218

218-
if opts.Reset {
219+
if reset {
219220
// Reset I2C address
220221
var resetAddress byte = 0x00
221222
if d.i2c.Addr == I2CAddr1 {
@@ -403,7 +404,14 @@ func (d *Dev) ReadContinuous(frequency physic.Frequency, precision Precision) (<
403404
case <-t.C:
404405
value, err := d.Read(precision)
405406
if err != nil {
406-
// In continuous mode, we'll ignore errors silently.
407+
// Try resetting the sensor to recover from errors
408+
if err := d.initialize(true); err == nil {
409+
if err := d.SetMode(newMode); err != nil {
410+
log.Println("Unable to reset TLV493D mode:", err)
411+
} else {
412+
log.Println("Sensor reset successfully")
413+
}
414+
}
407415
continue
408416
}
409417
reading <- value

0 commit comments

Comments
 (0)