tlv493d: Auto-reset TLV493D on error (#52)

pull/53/head
bezineb5 4 years ago committed by GitHub
parent a6bfa877b6
commit 43cd79527c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,6 +7,7 @@ package tlv493d
import ( import (
"errors" "errors"
"fmt" "fmt"
"log"
"sync" "sync"
"time" "time"
@ -185,7 +186,7 @@ func New(i i2c.Bus, opts *Opts) (*Dev, error) {
temperatureOffsetCompensation: opts.TemperatureOffsetCompensation, temperatureOffsetCompensation: opts.TemperatureOffsetCompensation,
registersBuffer: make([]byte, numberOfReadRegisters), registersBuffer: make([]byte, numberOfReadRegisters),
} }
if err := d.initialize(opts); err != nil { if err := d.initialize(opts.Reset); err != nil {
return nil, err return nil, err
} }
return d, nil return d, nil
@ -204,7 +205,7 @@ func (d *Dev) Halt() error {
return d.SetMode(PowerDownMode) return d.SetMode(PowerDownMode)
} }
func (d *Dev) initialize(opts *Opts) error { func (d *Dev) initialize(reset bool) error {
d.mu.Lock() d.mu.Lock()
defer d.mu.Unlock() defer d.mu.Unlock()
@ -215,7 +216,7 @@ func (d *Dev) initialize(opts *Opts) error {
return err return err
} }
if opts.Reset { if reset {
// Reset I2C address // Reset I2C address
var resetAddress byte = 0x00 var resetAddress byte = 0x00
if d.i2c.Addr == I2CAddr1 { if d.i2c.Addr == I2CAddr1 {
@ -403,7 +404,14 @@ func (d *Dev) ReadContinuous(frequency physic.Frequency, precision Precision) (<
case <-t.C: case <-t.C:
value, err := d.Read(precision) value, err := d.Read(precision)
if err != nil { if err != nil {
// In continuous mode, we'll ignore errors silently. // Try resetting the sensor to recover from errors
if err := d.initialize(true); err == nil {
if err := d.SetMode(newMode); err != nil {
log.Println("Unable to reset TLV493D mode:", err)
} else {
log.Println("Sensor reset successfully")
}
}
continue continue
} }
reading <- value reading <- value

Loading…
Cancel
Save