Browse Source

temperature_calibration: check if no sensor is found

sbg
Beat Küng 7 years ago committed by Lorenz Meier
parent
commit
353caec1af
  1. 13
      src/modules/events/temperature_calibration/common.h
  2. 8
      src/modules/events/temperature_calibration/task.cpp

13
src/modules/events/temperature_calibration/common.h

@ -49,6 +49,7 @@
#define TC_ERROR_INITIAL_TEMP_TOO_HIGH 110 ///< starting temperature was above the configured allowed temperature #define TC_ERROR_INITIAL_TEMP_TOO_HIGH 110 ///< starting temperature was above the configured allowed temperature
#define TC_ERROR_COMMUNICATION 112 ///< no sensors found
/** /**
* Base class for temperature calibration types with abstract methods (for all different sensor types) * Base class for temperature calibration types with abstract methods (for all different sensor types)
@ -66,6 +67,7 @@ public:
* check & update new sensor data. * check & update new sensor data.
* @return progress in range [0, 100], 110 when finished, <0 on error, * @return progress in range [0, 100], 110 when finished, <0 on error,
* -TC_ERROR_INITIAL_TEMP_TOO_HIGH if starting temperature is too hot * -TC_ERROR_INITIAL_TEMP_TOO_HIGH if starting temperature is too hot
* -TC_ERROR_COMMUNICATION if no sensors found
*/ */
virtual int update() = 0; virtual int update() = 0;
@ -129,14 +131,15 @@ public:
{ {
int num_not_complete = 0; int num_not_complete = 0;
if (_num_sensor_instances == 0) {
return -TC_ERROR_COMMUNICATION;
}
for (unsigned uorb_index = 0; uorb_index < _num_sensor_instances; uorb_index++) { for (unsigned uorb_index = 0; uorb_index < _num_sensor_instances; uorb_index++) {
int status = update_sensor_instance(_data[uorb_index], _sensor_subs[uorb_index]); int status = update_sensor_instance(_data[uorb_index], _sensor_subs[uorb_index]);
if (status == -1) { if (status < 0) {
return -1; return status;
} else if (status == -TC_ERROR_INITIAL_TEMP_TOO_HIGH) {
return -TC_ERROR_INITIAL_TEMP_TOO_HIGH;
} }
num_not_complete += status; num_not_complete += status;

8
src/modules/events/temperature_calibration/task.cpp

@ -227,7 +227,13 @@ void TemperatureCalibration::task_main()
for (int i = 0; i < num_calibrators; ++i) { for (int i = 0; i < num_calibrators; ++i) {
ret = calibrators[i]->update(); ret = calibrators[i]->update();
if (ret == -TC_ERROR_INITIAL_TEMP_TOO_HIGH) { if (ret == -TC_ERROR_COMMUNICATION) {
abort_calibration = true;
PX4_ERR("Calibration won't start - sensor bad or communication error");
_force_task_exit = true;
break;
} else if (ret == -TC_ERROR_INITIAL_TEMP_TOO_HIGH) {
abort_calibration = true; abort_calibration = true;
PX4_ERR("Calibration won't start - sensor temperature too high"); PX4_ERR("Calibration won't start - sensor temperature too high");
_force_task_exit = true; _force_task_exit = true;

Loading…
Cancel
Save