X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_flight.c;h=3f06535ffb3795601b5da8e1ff743225783e5c3a;hb=d55d7c56b81dba7043857a763d0749e93cf7823a;hp=4ffbcf4b43715d2b732898cc94b4f94732819298;hpb=090272ed3d132ae5eafa2f714e447481e2032104;p=fw%2Faltos diff --git a/src/kernel/ao_flight.c b/src/kernel/ao_flight.c index 4ffbcf4b..3f06535f 100644 --- a/src/kernel/ao_flight.c +++ b/src/kernel/ao_flight.c @@ -102,6 +102,13 @@ uint8_t ao_flight_force_idle; #define abs(a) ((a) < 0 ? -(a) : (a)) +static bool accel_plus_g_failed; +static bool accel_minus_g_failed; +static bool accel_plus_failed; +static bool accel_minus_failed; + +static char *btos(bool x) { return x? "true" : "false"; } + void ao_flight(void) { @@ -127,14 +134,22 @@ ao_flight(void) #if HAS_ACCEL if (ao_config.accel_plus_g == 0 || ao_config.accel_minus_g == 0 || - ao_ground_accel < ao_config.accel_plus_g - ACCEL_NOSE_UP || - ao_ground_accel > ao_config.accel_minus_g + ACCEL_NOSE_UP + ao_ground_accel < (accel_t) ao_config.accel_plus_g - ACCEL_NOSE_UP || + ao_ground_accel > (accel_t) ao_config.accel_minus_g + ACCEL_NOSE_UP #if HAS_BARO || ao_ground_height < -1000 || ao_ground_height > 7000 #endif ) { + if (ao_config.accel_plus_g == 0) + accel_plus_g_failed = true; + if (ao_config.accel_minus_g == 0) + accel_minus_g_failed = true; + if (ao_ground_accel < (accel_t) ao_config.accel_plus_g - ACCEL_NOSE_UP) + accel_plus_failed = true; + if (ao_ground_accel > (accel_t) ao_config.accel_minus_g + ACCEL_NOSE_UP) + accel_minus_failed = true; /* Detected an accel value outside -1.5g to 1.5g * (or uncalibrated values), so we go into invalid mode */ @@ -201,10 +216,23 @@ ao_flight(void) break; - case ao_flight_idle: case ao_flight_invalid: + printf("+g? %s -g? %s +? %s -? %s +g %d -g %d ga %d +g-NU %d -g+NU %d\n", + btos(accel_plus_g_failed), + btos(accel_minus_g_failed), + btos(accel_plus_failed), + btos(accel_minus_failed), + ao_config.accel_plus_g, + ao_config.accel_minus_g, + ao_ground_accel, + ao_config.accel_plus_g - ACCEL_NOSE_UP, + ao_config.accel_minus_g + ACCEL_NOSE_UP); + break; +#if 0 + case ao_flight_idle: printf("+g %d ga %d sa %d accel %ld speed %ld\n", ao_config.accel_plus_g, ao_ground_accel, ao_sample_accel, ao_accel, ao_speed); break; +#endif case ao_flight_pad: /* pad to boost: @@ -222,8 +250,8 @@ ao_flight(void) */ if (ao_height > AO_M_TO_HEIGHT(20) #if HAS_ACCEL - || (ao_accel > AO_MSS_TO_ACCEL(20) && - ao_speed > AO_MS_TO_SPEED(5)) + || (ao_accel > AO_MSS_TO_ACCEL(20) + && ao_speed > AO_MS_TO_SPEED(5)) #endif ) {