Skip to content

Commit b14b22a

Browse files
committed
drivers: Standardize status and data ready method naming.
1 parent a8d40f7 commit b14b22a

13 files changed

Lines changed: 88 additions & 41 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ lib/<component>/
475475
- **Device identification**: `device_id()` — returns the device/WHO_AM_I register value. All I2C drivers with an ID register must implement this method.
476476
- **Reset methods**: `reset()` for hardware reset (pin toggle), `soft_reset()` for software reset (register write), `reboot()` for memory reboot (reload trimming).
477477
- **Power methods**: `power_on()` / `power_off()`. All drivers must implement both.
478+
- **Status methods**: `status()` returns the raw status register as an int, `data_ready()` returns True when all channels have new data, `<measurement>_ready()` for per-channel readiness (e.g. `temperature_ready()`, `pressure_ready()`).
478479

479480
### Linting
480481

lib/apds9960/apds9960/device.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ def __init__(self, i2c, address=APDS9960_I2C_ADDR, valid_id=APDS9960_DEV_ID):
8282
def device_id(self):
8383
return self.dev_id
8484

85+
def status(self):
86+
return self._read_reg(APDS9960_REG_STATUS)
87+
88+
def data_ready(self):
89+
return self.light_ready() and self.proximity_ready()
90+
8591
def get_mode(self):
8692
return self._read_reg(APDS9960_REG_ENABLE)
8793

@@ -225,15 +231,15 @@ def power_off(self):
225231
# *******************************************************************************
226232

227233
# check if there is new light data available
228-
def is_light_available(self):
234+
def light_ready(self):
229235
val = self._read_reg(APDS9960_REG_STATUS)
230236

231-
# shift and mask out AVALID bit
237+
# mask out AVALID bit
232238
val &= APDS9960_BIT_AVALID
233239

234240
return val == APDS9960_BIT_AVALID
235241

236-
def is_proximity_available(self):
242+
def proximity_ready(self):
237243
val = self._read_reg(APDS9960_REG_STATUS)
238244
return (val & APDS9960_BIT_PVALID) == APDS9960_BIT_PVALID
239245

@@ -242,7 +248,7 @@ def _ensure_light_enabled(self):
242248
if not (enable & (1 << APDS9960_MODE_AMBIENT_LIGHT)) or not (enable & APDS9960_BIT_PON):
243249
self.enable_light_sensor(interrupts=False)
244250
for _ in range(50):
245-
if self.is_light_available():
251+
if self.light_ready():
246252
return
247253
sleep_ms(10)
248254
raise OSError("APDS9960 light data ready timeout")
@@ -252,7 +258,7 @@ def _ensure_proximity_enabled(self):
252258
if not (enable & (1 << APDS9960_MODE_PROXIMITY)) or not (enable & APDS9960_BIT_PON):
253259
self.enable_proximity_sensor(interrupts=False)
254260
for _ in range(50):
255-
if self.is_proximity_available():
261+
if self.proximity_ready():
256262
return
257263
sleep_ms(10)
258264
raise OSError("APDS9960 proximity data ready timeout")

lib/hts221/hts221/device.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ def device_id(self):
6464
def status(self):
6565
return self._read_reg(HTS221_STATUS_REG)
6666

67+
def data_ready(self):
68+
s = self.status()
69+
return bool((s & HTS221_STATUS_T_DA) and (s & HTS221_STATUS_H_DA))
70+
71+
def temperature_ready(self):
72+
return bool(self.status() & HTS221_STATUS_T_DA)
73+
74+
def humidity_ready(self):
75+
return bool(self.status() & HTS221_STATUS_H_DA)
76+
6777
# power control
6878
def power_off(self):
6979
t = self._read_reg(HTS221_CTRL_REG1) & 0x7F

lib/ism330dl/ism330dl/device.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,20 @@ def motion(self):
252252
# --------------------------------------------------
253253

254254
def status(self):
255+
return self._read_u8(REG_STATUS_REG)
256+
257+
def accel_ready(self):
258+
return bool(self.status() & STATUS_XLDA)
259+
260+
def gyro_ready(self):
261+
return bool(self.status() & STATUS_GDA)
262+
263+
def temperature_ready(self):
264+
return bool(self.status() & STATUS_TDA)
265+
266+
def data_ready(self):
255267
s = self._read_u8(REG_STATUS_REG)
256-
return {
257-
"temp_ready": bool(s & STATUS_TDA),
258-
"gyro_ready": bool(s & STATUS_GDA),
259-
"accel_ready": bool(s & STATUS_XLDA),
260-
}
268+
return bool((s & STATUS_XLDA) and (s & STATUS_GDA) and (s & STATUS_TDA))
261269

262270
# --------------------------------------------------
263271
# Power

lib/lis2mdl/examples/magnet_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ def test_reads(dev):
239239
ok &= who == 0x40
240240

241241
# STATUS & DATA READY
242-
st1 = dev.read_status()
242+
st1 = dev.status()
243243
print(f"Initial STATUS=0x{st1:02X}")
244244
# wait a few ms to let a new frame arrive
245245
sleep_ms(50)

lib/lis2mdl/lis2mdl/device.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,13 @@ def read_magnet_raw(self):
182182
"""Reads the raw magnetic field (LSB). Same as read_magnet(), but more explicit."""
183183
return self.read_magnet() # (x,y,z) int16 LSB
184184

185-
def read_status(self) -> int:
185+
def status(self) -> int:
186186
"""Reads STATUS_REG (0x67)."""
187187
return self._read_reg(LIS2MDL_STATUS_REG)
188188

189189
def data_ready(self) -> bool:
190190
"""True if a new XYZ triplet is ready (Zyxda bit)."""
191-
return bool(self.read_status() & (1 << 3))
191+
return bool(self.status() & (1 << 3))
192192

193193
def read_int_source(self) -> int:
194194
"""Reads INT_SOURCE_REG (0x64): source of the interrupt."""
@@ -331,7 +331,7 @@ def read_all(self) -> dict:
331331
mag_ut = self.read_magnet_uT()
332332
cal = self.read_magnet_calibrated_norm()
333333
temp = self.read_temperature_c()
334-
st = self.read_status()
334+
st = self.status()
335335
return {"raw": raw, "uT": mag_ut, "cal_norm": cal, "tempC": temp, "status": st}
336336

337337
##

lib/vl53l1x/vl53l1x/device.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ def start_ranging(self):
147147
def stop_ranging(self):
148148
self._write_reg(0x0087, 0x00)
149149

150-
def _is_data_ready(self):
150+
def data_ready(self):
151151
polarity = self._read_reg(0x0030) & 0x10
152152
ready_val = 1 if polarity == 0 else 0
153153
return (self._read_reg(0x0031) & 0x01) == ready_val
@@ -156,10 +156,10 @@ def _clear_interrupt(self):
156156
self._write_reg(0x0086, 0x01)
157157

158158
def _ensure_data(self):
159-
if not self._is_data_ready():
159+
if not self.data_ready():
160160
self.start_ranging()
161161
for _ in range(100):
162-
if self._is_data_ready():
162+
if self.data_ready():
163163
return
164164
machine.lightsleep(10)
165165
raise OSError("VL53L1X data ready timeout")

lib/wsen-pads/examples/test.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -230,14 +230,14 @@ def test_status_flags(sensor):
230230
sleep(1.5)
231231

232232
status = sensor.status()
233-
p_avail = sensor.pressure_available()
234-
t_avail = sensor.temperature_available()
235-
ready = sensor.is_ready()
233+
p_avail = sensor.pressure_ready()
234+
t_avail = sensor.temperature_ready()
235+
ready = sensor.data_ready()
236236

237237
print("STATUS = 0x{:02X}".format(status))
238-
print("pressure_available() =", p_avail)
239-
print("temperature_available() =", t_avail)
240-
print("is_ready() =", ready)
238+
print("pressure_ready() =", p_avail)
239+
print("temperature_ready() =", t_avail)
240+
print("data_ready() =", ready)
241241

242242
sensor.power_off()
243243

lib/wsen-pads/wsen_pads/device.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,15 @@ def status(self):
159159
"""Return the raw STATUS register value."""
160160
return self._read_reg(REG_STATUS)
161161

162-
def pressure_available(self):
162+
def pressure_ready(self):
163163
"""Return True when new pressure data is available."""
164164
return bool(self.status() & STATUS_P_DA)
165165

166-
def temperature_available(self):
166+
def temperature_ready(self):
167167
"""Return True when new temperature data is available."""
168168
return bool(self.status() & STATUS_T_DA)
169169

170-
def is_ready(self):
170+
def data_ready(self):
171171
"""
172172
Return True when both pressure and temperature data are available.
173173

tests/scenarios/hts221.yaml

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,26 @@ tests:
7979
expect_range: [10.0, 90.0]
8080
mode: [hardware]
8181

82-
- name: "Status register has data ready"
83-
action: call
84-
method: status
85-
expect_not_none: true
86-
mode: [mock, hardware]
82+
- name: "Status register returns int"
83+
action: script
84+
script: |
85+
result = isinstance(dev.status(), int)
86+
expect_true: true
87+
mode: [mock]
88+
89+
- name: "Data ready when both channels ready"
90+
action: script
91+
script: |
92+
result = dev.data_ready()
93+
expect_true: true
94+
mode: [mock]
95+
96+
- name: "Per-channel ready methods work"
97+
action: script
98+
script: |
99+
result = dev.temperature_ready() and dev.humidity_ready()
100+
expect_true: true
101+
mode: [mock]
87102

88103
- name: "Auto-trigger temperature after power_off"
89104
action: call

0 commit comments

Comments
 (0)