From 7feef72b3411d819b9bc9995cec587b558976908 Mon Sep 17 00:00:00 2001 From: Peter Barker Date: Fri, 22 Sep 2017 13:31:44 +1000 Subject: [PATCH] Plane: improve failsafe notifications --- ArduPlane/Plane.h | 1 + ArduPlane/events.cpp | 13 ++++++++++--- ArduPlane/system.cpp | 4 ++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ArduPlane/Plane.h b/ArduPlane/Plane.h index 3144a1fb47..0114bd7f4a 100644 --- a/ArduPlane/Plane.h +++ b/ArduPlane/Plane.h @@ -901,6 +901,7 @@ private: void failsafe_short_on_event(enum failsafe_state fstype, mode_reason_t reason); void failsafe_long_on_event(enum failsafe_state fstype, mode_reason_t reason); void failsafe_short_off_event(mode_reason_t reason); + void failsafe_long_off_event(mode_reason_t reason); void low_battery_event(void); void update_events(void); uint8_t max_fencepoints(void); diff --git a/ArduPlane/events.cpp b/ArduPlane/events.cpp index badf86ac51..49505b51f3 100644 --- a/ArduPlane/events.cpp +++ b/ArduPlane/events.cpp @@ -5,7 +5,7 @@ void Plane::failsafe_short_on_event(enum failsafe_state fstype, mode_reason_t re // This is how to handle a short loss of control signal failsafe. failsafe.state = fstype; failsafe.ch3_timer_ms = millis(); - gcs().send_text(MAV_SEVERITY_WARNING, "Failsafe. Short event on, "); + gcs().send_text(MAV_SEVERITY_WARNING, "Failsafe. Short event on: type=%u/reason=%u", fstype, reason); switch(control_mode) { case MANUAL: @@ -61,7 +61,7 @@ void Plane::failsafe_short_on_event(enum failsafe_state fstype, mode_reason_t re void Plane::failsafe_long_on_event(enum failsafe_state fstype, mode_reason_t reason) { // This is how to handle a long loss of control signal failsafe. - gcs().send_text(MAV_SEVERITY_WARNING, "Failsafe. Long event on, "); + gcs().send_text(MAV_SEVERITY_WARNING, "Failsafe. Long event on: type=%u/reason=%u", fstype, reason); // If the GCS is locked up we allow control to revert to RC hal.rcin->clear_overrides(); failsafe.state = fstype; @@ -123,7 +123,7 @@ void Plane::failsafe_long_on_event(enum failsafe_state fstype, mode_reason_t rea void Plane::failsafe_short_off_event(mode_reason_t reason) { // We're back in radio contact - gcs().send_text(MAV_SEVERITY_WARNING, "Failsafe. Short event off"); + gcs().send_text(MAV_SEVERITY_WARNING, "Failsafe. Short event off: reason=%u", reason); failsafe.state = FAILSAFE_NONE; // re-read the switch so we can return to our preferred mode @@ -134,6 +134,13 @@ void Plane::failsafe_short_off_event(mode_reason_t reason) } } +void Plane::failsafe_long_off_event(mode_reason_t reason) +{ + // We're back in radio contact + gcs().send_text(MAV_SEVERITY_WARNING, "Failsafe. Long event off: reason=%u", reason); + failsafe.state = FAILSAFE_NONE; +} + void Plane::low_battery_event(void) { if (failsafe.low_battery) { diff --git a/ArduPlane/system.cpp b/ArduPlane/system.cpp index 5c4008a1af..a6b0342413 100644 --- a/ArduPlane/system.cpp +++ b/ArduPlane/system.cpp @@ -509,10 +509,10 @@ void Plane::check_long_failsafe() // We do not change state but allow for user to change mode if (failsafe.state == FAILSAFE_GCS && (tnow - failsafe.last_heartbeat_ms) < timeout_seconds*1000) { - failsafe.state = FAILSAFE_NONE; + failsafe_long_off_event(MODE_REASON_GCS_FAILSAFE); } else if (failsafe.state == FAILSAFE_LONG && !failsafe.ch3_failsafe) { - failsafe.state = FAILSAFE_NONE; + failsafe_long_off_event(MODE_REASON_RADIO_FAILSAFE); } } }