Browse Source

add and activate circuit breaker for gps failure detection

sbg
Thomas Gubler 11 years ago
parent
commit
d4c0dc2ba0
  1. 5
      src/modules/commander/commander.cpp
  2. 14
      src/modules/systemlib/circuit_breaker.c
  3. 1
      src/modules/systemlib/circuit_breaker.h

5
src/modules/commander/commander.cpp

@ -1417,8 +1417,9 @@ int commander_thread_main(int argc, char *argv[]) @@ -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;

14
src/modules/systemlib/circuit_breaker.c

@ -122,6 +122,20 @@ PARAM_DEFINE_INT32(CBRK_FLIGHTTERM, 121212); @@ -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;

1
src/modules/systemlib/circuit_breaker.h

@ -55,6 +55,7 @@ @@ -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>

Loading…
Cancel
Save