Skip to content

Commit 890aae3

Browse files
committed
lsm6ds3tr: use helper functions, for readability
1 parent 0c7f317 commit 890aae3

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

lsm6ds3tr/lsm6ds3tr.go

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -84,31 +84,20 @@ func (d *Device) doConfigure(cfg Configuration) (err error) {
8484
}
8585

8686
// Configure accelerometer
87-
d.buf[0] = CTRL1_XL
88-
d.buf[1] = uint8(d.accelRange) | uint8(d.accelSampleRate)
87+
d.writeValue(CTRL1_XL, uint8(d.accelRange)|uint8(d.accelSampleRate))
8988
err = d.bus.Tx(d.Address, d.buf[0:2], nil)
9089
if err != nil {
9190
return
9291
}
9392

94-
// Set ODR bit
95-
d.buf[0] = CTRL4_C
96-
err = d.bus.Tx(d.Address, d.buf[0:1], d.buf[1:2])
97-
if err != nil {
98-
return
99-
}
100-
d.buf[0] = CTRL4_C
101-
d.buf[1] = d.buf[1] &^ BW_SCAL_ODR_ENABLED
102-
d.buf[1] |= BW_SCAL_ODR_ENABLED
103-
err = d.bus.Tx(d.Address, d.buf[0:2], nil)
93+
// Enable ODR scaling
94+
err = d.setBits(CTRL4_C, BW_SCAL_ODR_ENABLED)
10495
if err != nil {
10596
return
10697
}
10798

10899
// Configure gyroscope
109-
d.buf[0] = CTRL2_G
110-
d.buf[1] = uint8(d.gyroRange) | uint8(d.gyroSampleRate)
111-
err = d.bus.Tx(d.Address, d.buf[0:2], nil)
100+
err = d.writeValue(CTRL2_G, uint8(d.gyroRange)|uint8(d.gyroSampleRate))
112101
if err != nil {
113102
return
114103
}
@@ -119,8 +108,10 @@ func (d *Device) doConfigure(cfg Configuration) (err error) {
119108
// Connected returns whether a LSM6DS3TR has been found.
120109
// It does a "who am I" request and checks the response.
121110
func (d *Device) Connected() bool {
122-
d.buf[0] = WHO_AM_I
123-
d.bus.Tx(d.Address, d.buf[0:1], d.buf[1:2])
111+
err := d.readValue(WHO_AM_I, 1)
112+
if err != nil {
113+
return false
114+
}
124115
return d.buf[1] == 0x6A
125116
}
126117

@@ -129,8 +120,7 @@ func (d *Device) Connected() bool {
129120
// and the sensor is not moving the returned value will be around 1000000 or
130121
// -1000000.
131122
func (d *Device) ReadAcceleration() (x, y, z int32, err error) {
132-
d.buf[0] = OUTX_L_XL
133-
err = d.bus.Tx(d.Address, d.buf[0:1], d.buf[1:7])
123+
err = d.readValue(OUTX_L_XL, 6)
134124
if err != nil {
135125
return
136126
}
@@ -154,8 +144,7 @@ func (d *Device) ReadAcceleration() (x, y, z int32, err error) {
154144
// rotation along one axis and while doing so integrate all values over time,
155145
// you would get a value close to 360000000.
156146
func (d *Device) ReadRotation() (x, y, z int32, err error) {
157-
d.buf[0] = OUTX_L_G
158-
err = d.bus.Tx(d.Address, d.buf[0:1], d.buf[1:7])
147+
err = d.readValue(OUTX_L_G, 6)
159148
if err != nil {
160149
return
161150
}
@@ -178,8 +167,7 @@ func (d *Device) ReadRotation() (x, y, z int32, err error) {
178167

179168
// ReadTemperature returns the temperature in celsius milli degrees (°C/1000)
180169
func (d *Device) ReadTemperature() (t int32, err error) {
181-
d.buf[0] = OUT_TEMP_L
182-
err = d.bus.Tx(d.Address, d.buf[0:1], d.buf[1:3])
170+
err = d.readValue(OUT_TEMP_L, 2)
183171
if err != nil {
184172
return
185173
}
@@ -188,3 +176,22 @@ func (d *Device) ReadTemperature() (t int32, err error) {
188176
t = 25000 + (int32(int16((int16(d.buf[2])<<8)|int16(d.buf[1])))*125)/32
189177
return
190178
}
179+
180+
func (d *Device) readValue(reg, size uint8) error {
181+
d.buf[0] = reg
182+
return d.bus.Tx(d.Address, d.buf[0:1], d.buf[1:size+1])
183+
}
184+
185+
func (d *Device) writeValue(reg, value uint8) error {
186+
d.buf[0] = reg
187+
d.buf[1] = value
188+
return d.bus.Tx(d.Address, d.buf[0:2], nil)
189+
}
190+
191+
func (d *Device) setBits(reg, bits uint8) (err error) {
192+
err = d.readValue(reg, 1)
193+
if err != nil {
194+
return
195+
}
196+
return d.writeValue(reg, (d.buf[1]&^bits)|bits)
197+
}

0 commit comments

Comments
 (0)