fix(bmp388): correct timestamp_sample to integration midpoint (#26920)

The BMP388 pressure measurement is integrated over a configurable
window (e.g. 37ms at 16x oversampling). The previous code used the
read time as timestamp_sample, which is the end of the integration
window. Correct to the midpoint by subtracting half the measurement
time, with a guard against unsigned underflow.
This commit is contained in:
Jacob Dahl 2026-03-31 15:35:36 -08:00 committed by GitHub
parent 0e63f41642
commit 0deb6b33ee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -171,8 +171,12 @@ BMP388::collect()
perf_begin(_sample_perf);
/* this should be fairly close to the end of the conversion, so the best approximation of the time */
const hrt_abstime timestamp_sample = hrt_absolute_time();
/* Correct for measurement integration delay: the pressure was
* integrated over the preceding measurement_time window, so the
* effective sample midpoint is half the measurement time before now. */
const hrt_abstime now = hrt_absolute_time();
const hrt_abstime half_meas = get_measurement_time() / 2;
const hrt_abstime timestamp_sample = (now > half_meas) ? (now - half_meas) : now;
if (!get_sensor_data(sensor_comp, &data)) {
perf_count(_comms_errors);