mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-09-23 04:05:30 +08:00
feat(baro): add PX4Barometer wrapper and migrate barometer drivers (#27580)
* feat(baro): refactor barometer drivers to use PX4Barometer class * fix(baro): incoperated feedback * feat(baro): initialize PX4Barometer with device ID in barometer drivers * fix(baro): set default temperature to 15°C in PX4Barometer constructor * fix(baro): clarify default temperature comment in PX4Barometer constructor --------- Co-authored-by: Claudio Chies <chiesc@chies.com>
This commit is contained in:
co-authored by
Claudio Chies
parent
d5f5c50330
commit
709dfec6ff
@@ -35,6 +35,7 @@
|
||||
|
||||
BMP280::BMP280(const I2CSPIDriverConfig &config, bmp280::IBMP280 *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": sample")),
|
||||
_measure_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": measure")),
|
||||
@@ -176,14 +177,9 @@ BMP280::collect()
|
||||
const float P = (pf * _fcal.p9 + _fcal.p8) * pf + _fcal.p7;
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = P;
|
||||
sensor_baro.temperature = T;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(T);
|
||||
_px4_baro.update(timestamp_sample, P);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "bmp280.h"
|
||||
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <px4_platform_common/px4_config.h>
|
||||
#include <px4_platform_common/i2c_spi_buses.h>
|
||||
#include <px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp>
|
||||
@@ -62,7 +63,7 @@ private:
|
||||
int measure(); //start measure
|
||||
int collect(); //get results and publish
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
bmp280::IBMP280 *_interface;
|
||||
|
||||
|
||||
@@ -42,5 +42,6 @@ px4_add_module(
|
||||
|
||||
bmp280_main.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -40,5 +40,6 @@ px4_add_module(
|
||||
bmp388.cpp
|
||||
bmp388_main.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
|
||||
BMP388::BMP388(const I2CSPIDriverConfig &config, IBMP388 *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_measure_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": measure")),
|
||||
@@ -83,6 +84,9 @@ BMP388::init()
|
||||
this->_item_name = "bmp390";
|
||||
}
|
||||
|
||||
// device type may have been refined above (BMP388 vs BMP390); latch the final device id
|
||||
_px4_baro.set_device_id(_interface->get_device_id());
|
||||
|
||||
if (_interface->get_reg(BMP3_REV_ID_ADDR, &_chip_rev_id) != OK) {
|
||||
PX4_WARN("failed to get chip rev id");
|
||||
return -EIO;
|
||||
@@ -188,14 +192,9 @@ BMP388::collect()
|
||||
float pressure = (float)(data.pressure / 100.0f); // to Pascal
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = pressure;
|
||||
sensor_baro.temperature = temperature;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(temperature);
|
||||
_px4_baro.update(timestamp_sample, pressure);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <math.h>
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <lib/cdev/CDev.hpp>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <perf/perf_counter.h>
|
||||
#include <px4_platform_common/i2c_spi_buses.h>
|
||||
#include <px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp>
|
||||
@@ -330,7 +331,7 @@ private:
|
||||
static constexpr uint8_t odr{BMP3_ODR_50_HZ}; // output data rate (not used)
|
||||
static constexpr uint8_t iir_coef{BMP3_IIR_FILTER_DISABLE}; // IIR coefficient
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
IBMP388 *_interface{nullptr};
|
||||
|
||||
unsigned _measure_interval{0}; // interval in microseconds needed to measure
|
||||
|
||||
@@ -40,5 +40,6 @@ px4_add_module(
|
||||
bmp581.cpp
|
||||
bmp581_main.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
BMP581::BMP581(const I2CSPIDriverConfig &config, IBMP581 *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_measure_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": measure")),
|
||||
@@ -157,14 +158,9 @@ int BMP581::collect()
|
||||
}
|
||||
|
||||
//publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = data.pressure;
|
||||
sensor_baro.temperature = data.temperature;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(data.temperature);
|
||||
_px4_baro.update(timestamp_sample, data.pressure);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <math.h>
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <lib/cdev/CDev.hpp>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <perf/perf_counter.h>
|
||||
#include <px4_platform_common/i2c_spi_buses.h>
|
||||
#include <px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp>
|
||||
@@ -282,7 +283,7 @@ private:
|
||||
static constexpr uint8_t INTERRUPT_POLARITY{BMP5_INT_POL_ACTIVE_HIGH};
|
||||
static constexpr uint8_t INTERRUPT_DRIVE{BMP5_INT_OD_PUSHPULL};
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
IBMP581 *_interface{nullptr};
|
||||
|
||||
unsigned _measure_interval{0}; // interval in microseconds needed to measure
|
||||
|
||||
@@ -41,5 +41,6 @@ px4_add_module(
|
||||
dps310_main.cpp
|
||||
DEPENDS
|
||||
drivers__device
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -48,6 +48,7 @@ static void getTwosComplement(T &raw, uint8_t length)
|
||||
|
||||
DPS310::DPS310(const I2CSPIDriverConfig &config, device::Device *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": comm errors"))
|
||||
@@ -233,14 +234,9 @@ DPS310::RunImpl()
|
||||
const float Tcomp = c0 * 0.5f + c1 * Traw_sc;
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = Pcomp;
|
||||
sensor_baro.temperature = Tcomp;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(Tcomp);
|
||||
_px4_baro.update(timestamp_sample, Pcomp);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <drivers/device/Device.hpp>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
@@ -80,7 +81,7 @@ private:
|
||||
|
||||
static constexpr uint32_t SAMPLE_RATE{32};
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
device::Device *_interface;
|
||||
|
||||
|
||||
@@ -43,5 +43,6 @@ px4_add_module(
|
||||
MODULE_CONFIG
|
||||
parameters.yaml
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
SPA06::SPA06(const I2CSPIDriverConfig &config, spa06::ISPA06 *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": sample")),
|
||||
_measure_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": measure")),
|
||||
@@ -235,14 +236,9 @@ SPA06::collect()
|
||||
float temperature = (float)_cal.c0 * 0.5f + (float)_cal.c1 * ftsc;
|
||||
|
||||
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = fp;
|
||||
sensor_baro.temperature = temperature;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(temperature);
|
||||
_px4_baro.update(timestamp_sample, fp);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <px4_platform_common/i2c_spi_buses.h>
|
||||
#include <px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
|
||||
@@ -63,7 +64,7 @@ private:
|
||||
int collect(); //get results and publish
|
||||
int calibrate();
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
spa06::ISPA06 *_interface;
|
||||
spa06::data_s _data;
|
||||
|
||||
@@ -43,5 +43,6 @@ px4_add_module(
|
||||
MODULE_CONFIG
|
||||
parameters.yaml
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
SPL06::SPL06(const I2CSPIDriverConfig &config, spl06::ISPL06 *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": sample")),
|
||||
_measure_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": measure")),
|
||||
@@ -224,14 +225,9 @@ SPL06::collect()
|
||||
float temperature = (float)_cal.c0 * 0.5f + (float)_cal.c1 * ftsc;
|
||||
|
||||
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = fp;
|
||||
sensor_baro.temperature = temperature;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(temperature);
|
||||
_px4_baro.update(timestamp_sample, fp);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <px4_platform_common/i2c_spi_buses.h>
|
||||
#include <px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
|
||||
@@ -63,7 +64,7 @@ private:
|
||||
int collect(); //get results and publish
|
||||
int calibrate();
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
spl06::ISPL06 *_interface;
|
||||
spl06::data_s _data;
|
||||
|
||||
@@ -41,5 +41,6 @@ px4_add_module(
|
||||
ICP101XX.hpp
|
||||
icp101xx_main.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -37,7 +37,8 @@ using namespace time_literals;
|
||||
|
||||
ICP101XX::ICP101XX(const I2CSPIDriverConfig &config) :
|
||||
I2C(config),
|
||||
I2CSPIDriver(config)
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{get_device_id()}
|
||||
{
|
||||
}
|
||||
|
||||
@@ -237,14 +238,9 @@ ICP101XX::RunImpl()
|
||||
float pressure = _pressure_Pa;
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = now;
|
||||
sensor_baro.device_id = get_device_id();
|
||||
sensor_baro.pressure = pressure;
|
||||
sensor_baro.temperature = temperature;
|
||||
sensor_baro.error_count = perf_event_count(_bad_transfer_perf);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_bad_transfer_perf));
|
||||
_px4_baro.set_temperature(temperature);
|
||||
_px4_baro.update(now, pressure);
|
||||
|
||||
success = true;
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <lib/drivers/device/i2c.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
@@ -70,7 +71,7 @@ private:
|
||||
int send_command(Cmd cmd);
|
||||
int send_command(Cmd cmd, uint8_t *data, uint8_t len);
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
perf_counter_t _reset_perf{perf_alloc(PC_COUNT, MODULE_NAME": reset")};
|
||||
perf_counter_t _sample_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": read")};
|
||||
|
||||
@@ -41,5 +41,6 @@ px4_add_module(
|
||||
ICP201XX.hpp
|
||||
icp201xx_main.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -38,7 +38,8 @@ using namespace time_literals;
|
||||
|
||||
ICP201XX::ICP201XX(const I2CSPIDriverConfig &config) :
|
||||
I2C(config),
|
||||
I2CSPIDriver(config)
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{get_device_id()}
|
||||
{
|
||||
}
|
||||
|
||||
@@ -304,14 +305,9 @@ ICP201XX::RunImpl()
|
||||
perf_end(_sample_perf);
|
||||
perf_begin(_sample_perf);
|
||||
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = now;
|
||||
sensor_baro.device_id = get_device_id();
|
||||
sensor_baro.pressure = pressure;
|
||||
sensor_baro.temperature = temperature;
|
||||
sensor_baro.error_count = perf_event_count(_bad_transfer_perf);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_bad_transfer_perf));
|
||||
_px4_baro.set_temperature(temperature);
|
||||
_px4_baro.update(now, pressure);
|
||||
|
||||
success = true;
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <lib/drivers/device/i2c.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
@@ -72,7 +73,7 @@ private:
|
||||
bool flush_fifo();
|
||||
bool configure();
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
perf_counter_t _reset_perf{perf_alloc(PC_COUNT, MODULE_NAME": reset")};
|
||||
perf_counter_t _sample_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": read")};
|
||||
|
||||
@@ -39,5 +39,6 @@ px4_add_module(
|
||||
LPS22HB_I2C.cpp
|
||||
LPS22HB_SPI.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
|
||||
LPS22HB::LPS22HB(const I2CSPIDriverConfig &config, device::Device *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": comms errors"))
|
||||
@@ -164,14 +165,9 @@ int LPS22HB::collect()
|
||||
float pressure_pa = pressure * 100.f;
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = pressure_pa;
|
||||
sensor_baro.temperature = temperature;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(temperature);
|
||||
_px4_baro.update(timestamp_sample, pressure_pa);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
return PX4_OK;
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <cstring>
|
||||
|
||||
#include <drivers/device/Device.hpp>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
#include <px4_platform_common/i2c_spi_buses.h>
|
||||
#include <px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp>
|
||||
@@ -93,7 +94,7 @@ public:
|
||||
void RunImpl();
|
||||
|
||||
private:
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
device::Device *_interface;
|
||||
|
||||
|
||||
@@ -40,5 +40,6 @@ px4_add_module(
|
||||
lps25h_i2c.cpp
|
||||
lps25h_spi.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
LPS25H::LPS25H(const I2CSPIDriverConfig &config, device::Device *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": comms_errors"))
|
||||
@@ -176,14 +177,9 @@ int LPS25H::collect()
|
||||
float pressure_pa = pressure * 100.f;
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = pressure_pa;
|
||||
sensor_baro.temperature = temperature;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(temperature);
|
||||
_px4_baro.update(timestamp_sample, pressure_pa);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
return PX4_OK;
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "lps25h.h"
|
||||
|
||||
#include <drivers/device/Device.hpp>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
@@ -177,7 +178,7 @@ private:
|
||||
int measure();
|
||||
int collect();
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
device::Device *_interface;
|
||||
|
||||
|
||||
@@ -40,5 +40,6 @@ px4_add_module(
|
||||
lps33hw_spi.cpp
|
||||
lps33hw_main.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -49,6 +49,7 @@ static void getTwosComplement(T &raw, uint8_t length)
|
||||
|
||||
LPS33HW::LPS33HW(const I2CSPIDriverConfig &config, device::Device *interface) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": comm errors")),
|
||||
@@ -179,14 +180,9 @@ LPS33HW::RunImpl()
|
||||
float pressure_pa = pressure_hPa * 100.f;
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = pressure_pa;
|
||||
sensor_baro.temperature = temp;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(temp);
|
||||
_px4_baro.update(timestamp_sample, pressure_pa);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
ScheduleDelayed(1000000 / SAMPLE_RATE);
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <drivers/device/Device.hpp>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
@@ -83,7 +84,7 @@ private:
|
||||
|
||||
static constexpr uint32_t SAMPLE_RATE{75};
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
device::Device *_interface;
|
||||
|
||||
|
||||
@@ -41,5 +41,6 @@ px4_add_module(
|
||||
MPC2520.cpp
|
||||
MPC2520.hpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -44,7 +44,8 @@ static constexpr int32_t combine(uint8_t h, uint8_t m, uint8_t l)
|
||||
|
||||
MPC2520::MPC2520(const I2CSPIDriverConfig &config) :
|
||||
I2C(config),
|
||||
I2CSPIDriver(config)
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{get_device_id()}
|
||||
{
|
||||
//_debug_enabled = true;
|
||||
}
|
||||
@@ -243,14 +244,9 @@ void MPC2520::RunImpl()
|
||||
Traw_sc * Praw_sc * (_prom.c11 + Praw_sc * _prom.c21);
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = now;
|
||||
sensor_baro.device_id = get_device_id();
|
||||
sensor_baro.pressure = Pcomp;
|
||||
sensor_baro.temperature = Tcomp;
|
||||
sensor_baro.error_count = perf_event_count(_bad_transfer_perf) + perf_event_count(_bad_register_perf);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_bad_transfer_perf) + perf_event_count(_bad_register_perf));
|
||||
_px4_baro.set_temperature(Tcomp);
|
||||
_px4_baro.update(now, Pcomp);
|
||||
|
||||
success = true;
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <lib/drivers/device/i2c.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
@@ -77,7 +78,7 @@ private:
|
||||
void RegisterWrite(Register reg, uint8_t value);
|
||||
void RegisterSetAndClearBits(Register reg, uint8_t setbits, uint8_t clearbits);
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
perf_counter_t _bad_register_perf{perf_alloc(PC_COUNT, MODULE_NAME": bad register")};
|
||||
perf_counter_t _bad_transfer_perf{perf_alloc(PC_COUNT, MODULE_NAME": bad transfer")};
|
||||
|
||||
@@ -40,5 +40,6 @@ px4_add_module(
|
||||
MPL3115A2.cpp
|
||||
mpl3115a2_main.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
MPL3115A2::MPL3115A2(const I2CSPIDriverConfig &config) :
|
||||
I2C(config),
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{get_device_id()},
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_measure_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": measure")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": com_err"))
|
||||
@@ -268,14 +269,9 @@ int MPL3115A2::collect()
|
||||
float P = (float)(reading.pressure.q >> 8) + ((float)(reading.pressure.b[0]) / 4.0f);
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = get_device_id();
|
||||
sensor_baro.pressure = P;
|
||||
sensor_baro.temperature = T;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(T);
|
||||
_px4_baro.update(timestamp_sample, P);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <drivers/device/i2c.h>
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <px4_platform_common/px4_config.h>
|
||||
@@ -77,7 +78,7 @@ private:
|
||||
int RegisterRead(uint8_t reg, void *data, unsigned count = 1);
|
||||
int RegisterWrite(uint8_t reg, uint8_t data);
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
bool _collect_phase{false};
|
||||
|
||||
|
||||
@@ -44,5 +44,6 @@ px4_add_module(
|
||||
DEPENDS
|
||||
cdev
|
||||
drivers__device
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <drivers/device/device.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
@@ -115,7 +116,7 @@ public:
|
||||
protected:
|
||||
void print_status() override;
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
device::Device *_interface;
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
|
||||
MS5611::MS5611(device::Device *interface, ms5611::prom_u &prom_buf, const I2CSPIDriverConfig &config) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_prom(prom_buf.s),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
@@ -133,6 +134,9 @@ MS5611::init()
|
||||
break;
|
||||
}
|
||||
|
||||
// device type was just refined (MS5611 vs MS5607); latch the final device id
|
||||
_px4_baro.set_device_id(_interface->get_device_id());
|
||||
|
||||
ret = OK;
|
||||
|
||||
break;
|
||||
@@ -342,14 +346,9 @@ MS5611::collect()
|
||||
|
||||
// publish
|
||||
if (_initialized && PX4_ISFINITE(_last_pressure) && PX4_ISFINITE(_last_temperature)) {
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = P;
|
||||
sensor_baro.temperature = _last_temperature;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(_last_temperature);
|
||||
_px4_baro.update(timestamp_sample, P);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -41,5 +41,6 @@ px4_add_module(
|
||||
MS5837.cpp
|
||||
MS5837.hpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
MS5837::MS5837(const I2CSPIDriverConfig &config) :
|
||||
I2C(config),
|
||||
I2CSPIDriver(config),
|
||||
_px4_baro{get_device_id()},
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_measure_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": measure")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": com_err"))
|
||||
@@ -340,14 +341,9 @@ int MS5837::_collect()
|
||||
int32_t pressure_pascal = ((((raw * _SENS) >> 21) - _OFF) >> 13) * 10;
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = get_device_id();
|
||||
sensor_baro.pressure = pressure_pascal;
|
||||
sensor_baro.temperature = _last_temperature;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(_last_temperature);
|
||||
_px4_baro.update(timestamp_sample, pressure_pascal);
|
||||
}
|
||||
|
||||
/* update the measurement state machine */
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
#include <drivers/device/device.h>
|
||||
#include <drivers/device/i2c.h>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
@@ -80,7 +81,7 @@ public:
|
||||
private:
|
||||
int probe() override;
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
ms5837::prom_u _prom{};
|
||||
|
||||
|
||||
@@ -39,5 +39,6 @@ px4_add_module(
|
||||
tcbp001ta_spi.cpp
|
||||
tcbp001ta_main.cpp
|
||||
DEPENDS
|
||||
drivers_barometer
|
||||
px4_work_queue
|
||||
)
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
|
||||
TCBP001TA::TCBP001TA(tcbp001ta::ITCBP001TA *interface) :
|
||||
ScheduledWorkItem(MODULE_NAME, px4::device_bus_to_wq(interface->get_device_id())),
|
||||
_px4_baro{interface->get_device_id()},
|
||||
_interface(interface),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": sample")),
|
||||
_measure_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": measure")),
|
||||
@@ -251,14 +252,9 @@ TCBP001TA::collect()
|
||||
Praw_sc * Praw_sc * (_fcal.c11 + Praw_sc * _fcal.c21);
|
||||
|
||||
// publish
|
||||
sensor_baro_s sensor_baro{};
|
||||
sensor_baro.timestamp_sample = timestamp_sample;
|
||||
sensor_baro.device_id = _interface->get_device_id();
|
||||
sensor_baro.pressure = P;
|
||||
sensor_baro.temperature = T;
|
||||
sensor_baro.error_count = perf_event_count(_comms_errors);
|
||||
sensor_baro.timestamp = hrt_absolute_time();
|
||||
_sensor_baro_pub.publish(sensor_baro);
|
||||
_px4_baro.set_error_count(perf_event_count(_comms_errors));
|
||||
_px4_baro.set_temperature(T);
|
||||
_px4_baro.update(timestamp_sample, P);
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <px4_platform_common/px4_config.h>
|
||||
#include <px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp>
|
||||
#include <lib/drivers/barometer/PX4Barometer.hpp>
|
||||
#include <uORB/PublicationMulti.hpp>
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <lib/perf/perf_counter.h>
|
||||
@@ -64,7 +65,7 @@ private:
|
||||
int measure(); //start measure
|
||||
int collect(); //get results and publish
|
||||
|
||||
uORB::PublicationMulti<sensor_baro_s> _sensor_baro_pub{ORB_ID(sensor_baro)};
|
||||
PX4Barometer _px4_baro;
|
||||
|
||||
tcbp001ta::ITCBP001TA *_interface;
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
############################################################################
|
||||
|
||||
add_subdirectory(accelerometer)
|
||||
add_subdirectory(barometer)
|
||||
add_subdirectory(device)
|
||||
add_subdirectory(gyroscope)
|
||||
add_subdirectory(led)
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
############################################################################
|
||||
#
|
||||
# Copyright (c) 2026 PX4 Development Team. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name PX4 nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
px4_add_library(drivers_barometer PX4Barometer.cpp)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user