ardupilot/libraries/AP_Baro/AP_Baro.h

71 lines
2.1 KiB
C
Raw Normal View History

/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
#ifndef __AP_BARO_H__
#define __AP_BARO_H__
#include <AP_Param.h>
#include <Filter.h>
#include <DerivativeFilter.h>
#include "../AP_PeriodicProcess/AP_PeriodicProcess.h"
class AP_Baro
{
2012-08-17 03:09:24 -03:00
public:
bool healthy;
AP_Baro() {
}
virtual bool init(AP_PeriodicProcess *scheduler)=0;
virtual uint8_t read() = 0;
virtual float get_pressure() = 0;
virtual float get_temperature() = 0;
virtual int32_t get_raw_pressure() = 0;
virtual int32_t get_raw_temp() = 0;
// calibrate the barometer. This must be called on startup if the
// altitude/climb_rate/acceleration interfaces are ever used
// the callback is a delay() like routine
2012-08-17 03:09:24 -03:00
void calibrate(void (*callback)(unsigned long t));
// get current altitude in meters relative to altitude at the time
// of the last calibrate() call
2012-08-17 03:09:24 -03:00
float get_altitude(void);
// return how many pressure samples were used to obtain
// the last pressure reading
2012-08-17 03:09:24 -03:00
uint8_t get_pressure_samples(void) {
return _pressure_samples;
}
// get current climb rate in meters/s. A positive number means
// going up
2012-08-17 03:09:24 -03:00
float get_climb_rate(void);
// the ground values are only valid after calibration
2012-08-17 03:09:24 -03:00
float get_ground_temperature(void) {
return _ground_temperature.get();
}
float get_ground_pressure(void) {
return _ground_pressure.get();
}
2012-08-17 03:09:24 -03:00
static const struct AP_Param::GroupInfo var_info[];
protected:
2012-08-17 03:09:24 -03:00
uint32_t _last_update;
uint8_t _pressure_samples;
private:
2012-08-17 03:09:24 -03:00
AP_Float _ground_temperature;
AP_Float _ground_pressure;
float _altitude;
uint32_t _last_altitude_t;
DerivativeFilterFloat_Size7 _climb_rate_filter;
};
#include "AP_Baro_MS5611.h"
#include "AP_Baro_BMP085.h"
#include "AP_Baro_BMP085_hil.h"
#endif // __AP_BARO_H__