Browse Source

add param for qnh

sbg
Thomas Gubler 11 years ago
parent
commit
1913ae19f1
  1. 2
      src/drivers/ms5611/ms5611.cpp
  2. 10
      src/modules/sensors/sensor_params.c
  3. 24
      src/modules/sensors/sensors.cpp

2
src/drivers/ms5611/ms5611.cpp

@ -130,7 +130,7 @@ protected: @@ -130,7 +130,7 @@ protected:
float _T;
/* altitude conversion calibration */
unsigned _msl_pressure; /* in kPa */
unsigned _msl_pressure; /* in Pa */
orb_advert_t _baro_topic;

10
src/modules/sensors/sensor_params.c

@ -214,6 +214,16 @@ PARAM_DEFINE_FLOAT(SENS_DPRES_OFF, 0.0f); @@ -214,6 +214,16 @@ PARAM_DEFINE_FLOAT(SENS_DPRES_OFF, 0.0f);
*/
PARAM_DEFINE_FLOAT(SENS_DPRES_ANSC, 0);
/**
* QNH for barometer
*
* @min 500
* @max 1500
* @group Sensor Calibration
* @unit hPa
*/
PARAM_DEFINE_FLOAT(SENS_BARO_QNH, 1013.25f);
/**
* Board rotation

24
src/modules/sensors/sensors.cpp

@ -301,6 +301,8 @@ private: @@ -301,6 +301,8 @@ private:
float battery_voltage_scaling;
float battery_current_scaling;
float baro_qnh;
} _parameters; /**< local copies of interesting parameters */
struct {
@ -357,6 +359,8 @@ private: @@ -357,6 +359,8 @@ private:
param_t board_offset[3];
param_t baro_qnh;
} _parameter_handles; /**< handles for interesting parameters */
@ -617,6 +621,9 @@ Sensors::Sensors() : @@ -617,6 +621,9 @@ Sensors::Sensors() :
_parameter_handles.board_offset[1] = param_find("SENS_BOARD_Y_OFF");
_parameter_handles.board_offset[2] = param_find("SENS_BOARD_Z_OFF");
/* Barometer QNH */
_parameter_handles.baro_qnh = param_find("SENS_BARO_QNH");
/* fetch initial parameter values */
parameters_update();
}
@ -841,6 +848,23 @@ Sensors::parameters_update() @@ -841,6 +848,23 @@ Sensors::parameters_update()
_board_rotation = _board_rotation * board_rotation_offset;
/* update barometer qnh setting */
param_get(_parameter_handles.baro_qnh, &(_parameters.baro_qnh));
int fd;
fd = open(BARO_DEVICE_PATH, 0);
if (fd < 0) {
warn("%s", BARO_DEVICE_PATH);
errx(1, "FATAL: no barometer found");
} else {
warnx("qnh ioctl, %lu", (unsigned long)(_parameters.baro_qnh * 100));
int ret = ioctl(fd, BAROIOCSMSLPRESSURE, (unsigned long)(_parameters.baro_qnh * 100));
if (ret) {
errx(ret, "qnh could not be set");
}
}
close(fd);
return OK;
}

Loading…
Cancel
Save