|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|