aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2014-09-30 11:20:30 +0200
committerThomas Gubler <thomasgubler@gmail.com>2014-09-30 11:20:30 +0200
commitd4c0dc2ba0271f4d9c8044fd2a3a178cbb9987e3 (patch)
tree207df1dee8933351a7c41aac49baf0e2eaeed48f /src
parent1072a3380c2d6bdea010bb5091c6d0b23fe6f224 (diff)
downloadpx4-firmware-d4c0dc2ba0271f4d9c8044fd2a3a178cbb9987e3.tar.gz
px4-firmware-d4c0dc2ba0271f4d9c8044fd2a3a178cbb9987e3.tar.bz2
px4-firmware-d4c0dc2ba0271f4d9c8044fd2a3a178cbb9987e3.zip
add and activate circuit breaker for gps failure detection
Diffstat (limited to 'src')
-rw-r--r--src/modules/commander/commander.cpp5
-rw-r--r--src/modules/systemlib/circuit_breaker.c14
-rw-r--r--src/modules/systemlib/circuit_breaker.h1
3 files changed, 18 insertions, 2 deletions
diff --git a/src/modules/commander/commander.cpp b/src/modules/commander/commander.cpp
index bf15bbeb6..b86f3678b 100644
--- a/src/modules/commander/commander.cpp
+++ b/src/modules/commander/commander.cpp
@@ -1417,8 +1417,9 @@ int commander_thread_main(int argc, char *argv[])
}
/* 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) {
+ if (circuit_breaker_enabled("CBRK_GPSFAIL", CBRK_GPSFAIL_KEY) ||
+ (gps_position.fix_type >= 3 &&
+ 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;
diff --git a/src/modules/systemlib/circuit_breaker.c b/src/modules/systemlib/circuit_breaker.c
index 83c8344d5..12187d70e 100644
--- a/src/modules/systemlib/circuit_breaker.c
+++ b/src/modules/systemlib/circuit_breaker.c
@@ -122,6 +122,20 @@ PARAM_DEFINE_INT32(CBRK_FLIGHTTERM, 121212);
*/
PARAM_DEFINE_INT32(CBRK_ENGINEFAIL, 284953);
+/**
+ * Circuit breaker for gps failure detection
+ *
+ * Setting this parameter to 240024 will disable the gps failure detection.
+ * If the aircraft is in gps failure mode the gps failure flag will be
+ * set to healthy
+ * WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK
+ *
+ * @min 0
+ * @max 240024
+ * @group Circuit Breaker
+ */
+PARAM_DEFINE_INT32(CBRK_GPSFAIL, 240024);
+
bool circuit_breaker_enabled(const char* breaker, int32_t magic)
{
int32_t val;
diff --git a/src/modules/systemlib/circuit_breaker.h b/src/modules/systemlib/circuit_breaker.h
index 6a55e4948..b3431722f 100644
--- a/src/modules/systemlib/circuit_breaker.h
+++ b/src/modules/systemlib/circuit_breaker.h
@@ -55,6 +55,7 @@
#define CBRK_AIRSPD_CHK_KEY 162128
#define CBRK_FLIGHTTERM_KEY 121212
#define CBRK_ENGINEFAIL_KEY 284953
+#define CBRK_GPSFAIL_KEY 240024
#include <stdbool.h>