nuttx/drivers/sensors
Felipe Moura efc4c773d6 drivers/sensors/sensor: pace POLLIN at the requested interval
A fetch() only lower half is always ready, so a subscriber that asked for
a rate with SNIOC_SET_INTERVAL got no pacing from poll(): the descriptor
reported POLLIN on every pass and the application had to sleep out the
period itself. That does not compose. An application polling several
topics reads them sequentially from one thread, so per read sleeps
serialize: three topics at 10 Hz sleeping 100 ms each yield 3.3 Hz per
topic rather than 10.

Pace it where poll() can act on it instead. A subscriber that never
requested a rate stays always ready, and one that did becomes ready once
per its own interval, driven by a watchdog armed in sensor_poll(). This
is the fetch() side of what sensor_is_updated() already does for a
pushing lower half, so both models now honor a requested rate the same
way.

The wdog_s lives in sensor_user_s rather than in the device, so each
subscriber is paced at its own interval instead of at the minimum across
all of them, and the timer only runs while somebody is polling. The
expiry runs in timer context and takes no lock: poll_notify() is safe
from an interrupt handler, and a teardown that raced it has already
cleared fds, which makes both the notify and the re-arm no-ops. Teardown
therefore just cancels the watchdog where it clears fds, and a watchdog
keeps this off the work queue entirely, which a fetch() only sensor
exists to avoid.

sensor_close() needs nothing of its own: poll_setup() holds a reference
on the file for the duration of the poll, so file_close() cannot run
until poll_teardown() has called sensor_poll() with setup false, and that
already cancelled the watchdog.

Assisted-by: Claude:claude-sonnet-5

Signed-off-by: Felipe Moura <moura.fmo@gmail.com>
2026-08-05 12:50:12 +02:00
..
adt7320.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
adt7320.h drivers/sensors/adt7320 : migrate license to ASF 2024-11-06 19:46:13 +08:00
adxl345.h drivers: migrate to SPDX identifier 2024-11-06 18:02:25 +08:00
adxl345_base.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
adxl345_i2c.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
adxl345_spi.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
adxl362_uorb.c sensors/adxl362_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
adxl372.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
adxl372_uorb.c drivers/sensors/adxl372_uorb.c: fix compilation error 2026-06-10 08:49:14 -03:00
aht10.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
ak09912.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
amg88xx.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
apds9922.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
apds9960.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
as726x.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
as5048a.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
as5048b.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
bh1749nuc.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
bh1749nuc_base.c drivers/sensors: fix various coding style issues 2025-05-23 11:29:58 -03:00
bh1749nuc_base.h include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
bh1749nuc_uorb.c sensors/bh1749nuc_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
bh1750fvi.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
bme680_uorb.c sensors/bme680_uorb.c: always allow temperature topic registration 2026-06-10 09:52:00 +08:00
bme688_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
bmg160.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
bmi088.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
bmi088_base.c drivers/sensors: fix various coding style issues 2025-05-23 11:29:58 -03:00
bmi088_base.h include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
bmi088_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
bmi160.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
bmi160_base.c drivers/sensors: fix misplaced endif in bmi160_base.c 2026-04-15 17:47:46 +02:00
bmi160_base.h include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
bmi160_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
bmi270.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
bmi270_base.c drivers: migrate to SPDX identifier 2024-11-06 18:02:25 +08:00
bmi270_base.h include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
bmi270_uorb.c sensors/bmi270_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
bmm150_uorb.c sensors/bmm150_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
bmp180.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
bmp180_base.c sensors/bmp180_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
bmp180_base.h sensors/bmp180_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
bmp180_uorb.c sensors/bmp180_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
bmp280_uorb.c sensors/bmp280_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
CMakeLists.txt drivers/sensors: add LIS3DSH accelerometer uORB driver 2026-07-25 14:45:40 +02:00
cxd5602pwbimu.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
dhtxx.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
ds18b20_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
fakesensor_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
fs3000_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
fxos8700cq.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
gnss_uorb.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
goldfish_gnss_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
goldfish_sensor_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
hall3ph.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
hc_sr04.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
hdc1008.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
hts221.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
hyt271_uorb.c sensors/hyt271_uorb: support for fixed-point data 2026-05-02 00:56:42 +08:00
ina219.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
ina226.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
ina3221.c drivers/: Multiple Drivers Are Registered With World Writable Part 3 2026-07-16 09:49:07 -03:00
isl29023.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
Kconfig drivers/sensors/l3gd20: always deliver samples with push_event 2026-08-05 12:50:12 +02:00
kxtj9.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
l3gd20_uorb.c drivers/sensors/l3gd20: always deliver samples with push_event 2026-08-05 12:50:12 +02:00
l86xxx_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
lis2dh.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lis2mdl_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
lis3dh.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lis3dsh.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lis3dsh_uorb.c drivers/sensors: add LIS3DSH accelerometer uORB driver 2026-07-25 14:45:40 +02:00
lis3mdl.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lis331dl.c drivers/sensors: Legacy sensor warning 2026-03-01 16:37:20 -03:00
lm75.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lm92.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lps25h.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lsm6dsl.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lsm6dso32_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
lsm9ds1.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lsm9ds1_base.c drivers/sensors: fix various coding style issues 2025-05-23 11:29:58 -03:00
lsm9ds1_base.h include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
lsm9ds1_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
lsm303agr.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
lsm330_spi.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
ltc4151.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
ltr308_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
Make.defs drivers/sensors: add LIS3DSH accelerometer uORB driver 2026-07-25 14:45:40 +02:00
max6675.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
max31855.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
max31865.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
max44009.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mb7040.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mcp9600_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
mcp9844.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mlx90393.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mlx90614.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mpl115a.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mpu60x0.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mpu6050_uorb.c drivers/sensors/mpu6050: deliver samples from the data ready interrupt 2026-08-04 17:40:28 -03:00
mpu9250_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
ms56xx_uorb.c !nuttx: drop redundant casts on tv_sec/tv_nsec and fix printf formats 2026-05-19 16:21:28 +08:00
ms58xx.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
msa301.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
mt6816.c drivers/sensors: Add support to MT6816 2026-05-03 07:56:38 -03:00
nau7802.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
qencoder.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
qmi8658_uorb.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
scd30.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
scd41.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
sensor.c drivers/sensors/sensor: pace POLLIN at the requested interval 2026-08-05 12:50:12 +02:00
sensor_monitor.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
sensor_rpmsg.c !include/fcntl.h: align open flags with Linux values 2026-06-30 13:43:44 +08:00
sgp30.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
sht3x.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
sht4x_uorb.c !nuttx: drop redundant casts on tv_sec/tv_nsec and fix printf formats 2026-05-19 16:21:28 +08:00
sht21.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
sps30.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
t67xx.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
tmp112.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
usensor.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
veml6070.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
vl53l1x.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
wtgahrs2_uorb.c drivers/sensors: add initial support for fixed-point data for sensors 2026-05-02 00:56:42 +08:00
xen1210.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00
xen1210.h drivers: migrate to SPDX identifier 2024-11-06 18:02:25 +08:00
zerocross.c drivers/: Multiple Drivers Are Registered With World Writable - Part 2 2026-07-15 15:27:28 +08:00