Skip to content

Commit 804646e

Browse files
committed
wsen-pads: Auto-trigger one-shot when reading in power-down mode.
1 parent 56127cb commit 804646e

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

lib/wsen-pads/wsen_pads/device.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,18 +210,35 @@ def reboot(self):
210210
# Raw data reading
211211
# ---------------------------------------------------------------------
212212

213+
def _is_power_down(self):
214+
"""Return True if the sensor is in power-down mode (ODR = 000)."""
215+
return (self._read_u8(REG_CTRL_1) & CTRL1_ODR_MASK) == 0
216+
217+
def _ensure_data(self):
218+
"""Trigger a one-shot conversion if the sensor is in power-down mode."""
219+
if self._is_power_down():
220+
self.trigger_one_shot()
221+
213222
def pressure_raw(self):
214223
"""
215224
Read and return raw pressure as a signed 24-bit integer.
225+
226+
If the sensor is in power-down mode, a one-shot conversion is
227+
triggered automatically before reading.
216228
"""
229+
self._ensure_data()
217230
data = self._read(REG_DATA_P_XL, 3)
218231
raw = (data[2] << 16) | (data[1] << 8) | data[0]
219232
return self._to_signed24(raw)
220233

221234
def temperature_raw(self):
222235
"""
223236
Read and return raw temperature as a signed 16-bit integer.
237+
238+
If the sensor is in power-down mode, a one-shot conversion is
239+
triggered automatically before reading.
224240
"""
241+
self._ensure_data()
225242
data = self._read(REG_DATA_T_L, 2)
226243
raw = (data[1] << 8) | data[0]
227244
return self._to_signed16(raw)
@@ -258,11 +275,17 @@ def read(self):
258275
"""
259276
Read and return both pressure and temperature.
260277
278+
A one-shot conversion is triggered to ensure fresh data.
279+
261280
Returns:
262281
tuple: (pressure_hpa, temperature_c)
263282
"""
264283
self.trigger_one_shot()
265-
return self.pressure(), self.temperature()
284+
p_data = self._read(REG_DATA_P_XL, 3)
285+
p_raw = self._to_signed24((p_data[2] << 16) | (p_data[1] << 8) | p_data[0])
286+
t_data = self._read(REG_DATA_T_L, 2)
287+
t_raw = self._to_signed16((t_data[1] << 8) | t_data[0])
288+
return p_raw * PRESSURE_HPA_PER_DIGIT, t_raw * TEMPERATURE_C_PER_DIGIT
266289

267290
# ---------------------------------------------------------------------
268291
# One-shot mode

0 commit comments

Comments
 (0)