temperature_calibration: check if no sensor is found

This commit is contained in:
Beat Küng
2017-10-04 14:41:19 +02:00
committed by Lorenz Meier
parent 6b97470106
commit 353caec1af
2 changed files with 15 additions and 6 deletions
@@ -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;
@@ -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;