+static __data uint8_t ao_log_monitor_pos;
+__pdata enum ao_flight_state ao_flight_state;
+__pdata int16_t ao_max_height; /* max of ao_height */
+__pdata int16_t sense_d, sense_m;
+__pdata uint8_t ao_igniter_present;
+
+static void
+ao_log_telem_track() {
+ if (ao_monitoring == sizeof (union ao_telemetry_all)) {
+ switch (ao_log_single_write_data.telemetry.generic.type) {
+ case AO_TELEMETRY_SENSOR_TELEMETRUM:
+ case AO_TELEMETRY_SENSOR_TELEMINI:
+ /* fall through ... */
+ case AO_TELEMETRY_SENSOR_TELENANO:
+ if (ao_log_single_write_data.telemetry.generic.type == AO_TELEMETRY_SENSOR_TELENANO) {
+ ao_igniter_present = 0;
+ } else {
+ sense_d = ao_log_single_write_data.telemetry.sensor.sense_d;
+ sense_m = ao_log_single_write_data.telemetry.sensor.sense_m;
+ ao_igniter_present = 1;
+ }
+ if (ao_log_single_write_data.telemetry.sensor.height > ao_max_height) {
+ ao_max_height = ao_log_single_write_data.telemetry.sensor.height;
+ }
+ if (ao_log_single_write_data.telemetry.sensor.state != ao_flight_state) {
+ ao_flight_state = ao_log_single_write_data.telemetry.sensor.state;
+ if (ao_flight_state == ao_flight_pad)
+ ao_max_height = 0;
+ ao_wakeup(DATA_TO_XDATA(&ao_flight_state));
+ }
+ }
+ }
+}
+
+enum ao_igniter_status
+ao_igniter_status(enum ao_igniter igniter)
+{
+ int16_t value;
+
+ switch (igniter) {
+ case ao_igniter_drogue:
+ value = sense_d;
+ break;
+ case ao_igniter_main:
+ value = sense_m;
+ break;
+ default:
+ value = 0;
+ break;
+ }
+ if (value < AO_IGNITER_OPEN)
+ return ao_igniter_open;
+ else if (value > AO_IGNITER_CLOSED)
+ return ao_igniter_ready;
+ else
+ return ao_igniter_unknown;
+}