From a1a10692ec23cba36f7de50d5f7527d001427b9f Mon Sep 17 00:00:00 2001 From: Farhang <46557204+farhangnaderi@users.noreply.github.com> Date: Thu, 19 Mar 2026 18:48:38 -0400 Subject: [PATCH] fix(bmp581): add pressure range validation (#26373) Reject pressure readings outside the sensor's operating range (30-125 kPa) to detect I2C data corruption. When I2C transfers complete successfully but return corrupted data, this check prevents invalid samples from being published. Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com> --- src/drivers/barometer/bmp581/bmp581.cpp | 4 ++++ src/drivers/barometer/bmp581/bmp581.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/drivers/barometer/bmp581/bmp581.cpp b/src/drivers/barometer/bmp581/bmp581.cpp index 9f05e0519e..69d30ecfd3 100644 --- a/src/drivers/barometer/bmp581/bmp581.cpp +++ b/src/drivers/barometer/bmp581/bmp581.cpp @@ -710,6 +710,10 @@ int BMP581::get_sensor_data(bmp5_sensor_data *sensor_data) /* Division by 2^6(whose equivalent value is 64) is performed to get pressure data in Pa */ sensor_data->pressure = (float)(raw_data_p / 64.0); + if (sensor_data->pressure < BMP5_PRESSURE_MIN_PA || sensor_data->pressure > BMP5_PRESSURE_MAX_PA) { + return PX4_ERROR; + } + } else { sensor_data->pressure = 0.0; } diff --git a/src/drivers/barometer/bmp581/bmp581.h b/src/drivers/barometer/bmp581/bmp581.h index 00d149b950..47e336a605 100644 --- a/src/drivers/barometer/bmp581/bmp581.h +++ b/src/drivers/barometer/bmp581/bmp581.h @@ -101,6 +101,10 @@ #define BMP5_DEEP_ENABLED (0) #define BMP5_DEEP_DISABLED (1) +/* Pressure operating range (Pa) */ +#define BMP5_PRESSURE_MIN_PA (30000.0f) +#define BMP5_PRESSURE_MAX_PA (125000.0f) + /* ODR settings */ #define BMP5_ODR_50_HZ (0x0F) #define BMP5_ODR_05_HZ (0x18)