aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2014-07-27 00:55:43 +0200
committerThomas Gubler <thomasgubler@gmail.com>2014-07-27 00:55:43 +0200
commitdb5d668439be63e4c8fd7dab49b81c5e162ee095 (patch)
tree32857bbbd0ec8185e4904d8b12162dc3fede7fd1
parentc5b97fdb1f1add64b4b83623a790e1a83baffcd4 (diff)
downloadpx4-firmware-db5d668439be63e4c8fd7dab49b81c5e162ee095.tar.gz
px4-firmware-db5d668439be63e4c8fd7dab49b81c5e162ee095.tar.bz2
px4-firmware-db5d668439be63e4c8fd7dab49b81c5e162ee095.zip
add simplistic gps failure detection
-rw-r--r--src/modules/commander/commander.cpp16
-rw-r--r--src/modules/uORB/topics/vehicle_status.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/src/modules/commander/commander.cpp b/src/modules/commander/commander.cpp
index fe1974c88..50beb5da8 100644
--- a/src/modules/commander/commander.cpp
+++ b/src/modules/commander/commander.cpp
@@ -1135,6 +1135,22 @@ int commander_thread_main(int argc, char *argv[])
check_valid(global_position.timestamp, POSITION_TIMEOUT, eph_epv_good, &(status.condition_global_position_valid), &status_changed);
/* check if GPS fix is ok */
+ if (gps_position.fix_type >= 3 && //XXX check eph and epv ?
+ hrt_elapsed_time(&gps_position.timestamp_position) < FAILSAFE_DEFAULT_TIMEOUT) {
+ /* handle the case where gps was regained */
+ if (status.gps_failure) {
+ status.gps_failure = false;
+ status_changed = true;
+ mavlink_log_critical(mavlink_fd, "gps regained");
+ }
+ } else {
+ if (!status.gps_failure) {
+ status.gps_failure = true;
+ status_changed = true;
+ mavlink_log_critical(mavlink_fd, "gps fix lost");
+ }
+ }
+
/* update home position */
if (!status.condition_home_position_valid && status.condition_global_position_valid && !armed.armed &&
diff --git a/src/modules/uORB/topics/vehicle_status.h b/src/modules/uORB/topics/vehicle_status.h
index 707abb545..0751b57fe 100644
--- a/src/modules/uORB/topics/vehicle_status.h
+++ b/src/modules/uORB/topics/vehicle_status.h
@@ -206,6 +206,7 @@ struct vehicle_status_s {
uint8_t data_link_lost_counter; /**< counts unique data link lost events */
bool engine_failure; /** Set to true if an engine failure is detected */
+ bool gps_failure; /** Set to true if a gps failure is detected */
bool offboard_control_signal_found_once;
bool offboard_control_signal_lost;