From 353caec1afe8f2200b56e05de9b3497f847fdbc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=83=C2=BCng?= Date: Wed, 4 Oct 2017 14:41:19 +0200 Subject: [PATCH] temperature_calibration: check if no sensor is found --- src/modules/events/temperature_calibration/common.h | 13 ++++++++----- src/modules/events/temperature_calibration/task.cpp | 8 +++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/modules/events/temperature_calibration/common.h b/src/modules/events/temperature_calibration/common.h index 237c571901..27b566220e 100644 --- a/src/modules/events/temperature_calibration/common.h +++ b/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_COMMUNICATION 112 ///< no sensors found /** * Base class for temperature calibration types with abstract methods (for all different sensor types) @@ -66,6 +67,7 @@ public: * check & update new sensor data. * @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_COMMUNICATION if no sensors found */ virtual int update() = 0; @@ -129,14 +131,15 @@ public: { 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++) { int status = update_sensor_instance(_data[uorb_index], _sensor_subs[uorb_index]); - if (status == -1) { - return -1; - - } else if (status == -TC_ERROR_INITIAL_TEMP_TOO_HIGH) { - return -TC_ERROR_INITIAL_TEMP_TOO_HIGH; + if (status < 0) { + return status; } num_not_complete += status; diff --git a/src/modules/events/temperature_calibration/task.cpp b/src/modules/events/temperature_calibration/task.cpp index 27fe4a41b7..5f91afd320 100644 --- a/src/modules/events/temperature_calibration/task.cpp +++ b/src/modules/events/temperature_calibration/task.cpp @@ -227,7 +227,13 @@ void TemperatureCalibration::task_main() for (int i = 0; i < num_calibrators; ++i) { 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; PX4_ERR("Calibration won't start - sensor temperature too high"); _force_task_exit = true;