Skip to content

Commit 9e0ced6

Browse files
committed
apds9960: Address Copilot review on auto-enable PR.
1 parent bd8b7f6 commit 9e0ced6

2 files changed

Lines changed: 37 additions & 12 deletions

File tree

lib/apds9960/apds9960/device.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,13 @@ def isLightAvailable(self):
230230

231231
return val == APDS9960_BIT_AVALID
232232

233+
def isProximityAvailable(self):
234+
val = self._read_reg(APDS9960_REG_STATUS)
235+
return (val & APDS9960_BIT_PVALID) == APDS9960_BIT_PVALID
236+
233237
def _ensure_light_enabled(self):
234238
enable = self.getMode()
235-
if not (enable & (1 << APDS9960_MODE_AMBIENT_LIGHT)) or not (enable & 1):
239+
if not (enable & (1 << APDS9960_MODE_AMBIENT_LIGHT)) or not (enable & APDS9960_BIT_PON):
236240
self.enableLightSensor(interrupts=False)
237241
for _ in range(50):
238242
if self.isLightAvailable():
@@ -241,9 +245,12 @@ def _ensure_light_enabled(self):
241245

242246
def _ensure_proximity_enabled(self):
243247
enable = self.getMode()
244-
if not (enable & (1 << APDS9960_MODE_PROXIMITY)) or not (enable & 1):
248+
if not (enable & (1 << APDS9960_MODE_PROXIMITY)) or not (enable & APDS9960_BIT_PON):
245249
self.enableProximitySensor(interrupts=False)
246-
sleep_ms(50)
250+
for _ in range(50):
251+
if self.isProximityAvailable():
252+
return
253+
sleep_ms(10)
247254

248255
# reads the ambient (clear) light level as a 16-bit value
249256
def readAmbientLight(self):

tests/scenarios/apds9960.yaml

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,30 +81,48 @@ tests:
8181

8282
# ----- Auto-enable -----
8383

84-
- name: "Ambient light readable without explicit enable"
84+
- name: "Auto-enable writes ENABLE register for light"
8585
action: script
8686
script: |
8787
dev.disableLightSensor()
88-
val = dev.readAmbientLight()
89-
result = isinstance(val, int)
88+
i2c.clear_write_log()
89+
dev.readAmbientLight()
90+
log = i2c.get_write_log()
91+
wrote_enable = any(reg == 0x80 for reg, data in log)
92+
enable_val = dev.getMode()
93+
has_pon = bool(enable_val & 0x01)
94+
has_aen = bool(enable_val & 0x02)
95+
result = wrote_enable and has_pon and has_aen
9096
expect_true: true
9197
mode: [mock]
9298

93-
- name: "Proximity readable without explicit enable"
99+
- name: "Auto-enable writes ENABLE register for proximity"
94100
action: script
95101
script: |
96102
dev.disableProximitySensor()
97-
val = dev.readProximity()
98-
result = isinstance(val, int)
103+
i2c.clear_write_log()
104+
dev.readProximity()
105+
log = i2c.get_write_log()
106+
wrote_enable = any(reg == 0x80 for reg, data in log)
107+
enable_val = dev.getMode()
108+
has_pon = bool(enable_val & 0x01)
109+
has_pen = bool(enable_val & 0x04)
110+
result = wrote_enable and has_pon and has_pen
99111
expect_true: true
100112
mode: [mock]
101113

102-
- name: "Red light readable after power off"
114+
- name: "Auto-enable restores power for light read"
103115
action: script
104116
script: |
105117
dev.disablePower()
106-
val = dev.readRedLight()
107-
result = isinstance(val, int)
118+
i2c.clear_write_log()
119+
dev.readRedLight()
120+
log = i2c.get_write_log()
121+
wrote_enable = any(reg == 0x80 for reg, data in log)
122+
enable_val = dev.getMode()
123+
has_pon = bool(enable_val & 0x01)
124+
has_aen = bool(enable_val & 0x02)
125+
result = wrote_enable and has_pon and has_aen
108126
expect_true: true
109127
mode: [mock]
110128

0 commit comments

Comments
 (0)