__pdata uint16_t ao_boost_tick; /* time of launch detect */
__pdata uint16_t ao_motor_number; /* number of motors burned so far */
+#if HAS_SENSOR_ERRORS
+/* Any sensor can set this to mark the flight computer as 'broken' */
+__xdata uint8_t ao_sensor_errors;
+#endif
+
/*
* track min/max data over a long interval to detect
* resting
#endif
} else {
/* Set idle mode */
- ao_flight_state = ao_flight_idle;
+ ao_flight_state = ao_flight_idle;
+#if HAS_SENSOR_ERRORS
+ if (ao_sensor_errors)
+ ao_flight_state = ao_flight_invalid;
+#endif
#if HAS_ACCEL && HAS_RADIO && PACKET_HAS_SLAVE
/* Turn on packet system in idle mode on TeleMetrum */
ao_interval_end = ao_sample_tick + AO_INTERVAL_TICKS;
}
break;
+#if HAS_FLIGHT_DEBUG
+ case ao_flight_test:
+#if HAS_GYRO
+ printf ("angle %4d pitch %7d yaw %7d roll %7d\n",
+ ao_sample_orient,
+ ((ao_sample_pitch << 9) - ao_ground_pitch) >> 9,
+ ((ao_sample_yaw << 9) - ao_ground_yaw) >> 9,
+ ((ao_sample_roll << 9) - ao_ground_roll) >> 9);
+#endif
+ flush();
+ break;
+#endif /* HAS_FLIGHT_DEBUG */
default:
break;
}
#if HAS_ACCEL
int16_t accel;
- accel = ((ao_ground_accel - ao_sample_accel) * ao_accel_scale) >> 16;
+ accel = ((ao_config.accel_plus_g - ao_sample_accel) * ao_accel_scale) >> 16;
#endif
printf ("sample:\n");
printf (" error_avg %d\n", ao_error_h_sq_avg);
}
+static void
+ao_gyro_test(void)
+{
+ ao_flight_state = ao_flight_test;
+ ao_getchar();
+ ao_flight_state = ao_flight_idle;
+}
+
+uint8_t ao_orient_test;
+
+static void
+ao_orient_test_select(void)
+{
+ ao_orient_test = !ao_orient_test;
+}
+
__code struct ao_cmds ao_flight_cmds[] = {
{ ao_flight_dump, "F\0Dump flight status" },
+ { ao_gyro_test, "G\0Test gyro code" },
+ { ao_orient_test_select,"O\0Test orientation code" },
{ 0, NULL },
};
#endif