altos: don't beep igniter continuity for telenano
authorKeith Packard <keithp@keithp.com>
Mon, 29 Aug 2011 00:03:26 +0000 (17:03 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 29 Aug 2011 00:03:26 +0000 (17:03 -0700)
Without any igniters, it's not nice to annoy people.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/core/ao.h
src/core/ao_log_telem.c
src/core/ao_report.c

index f2e40fc6ceae467094f7cb2ea41eb8b1e12ea183..a541d8acad0f73b822034db9c179063d9f68d05f 100644 (file)
@@ -1436,6 +1436,8 @@ extern __xdata struct ao_ignition ao_ignition[2];
 enum ao_igniter_status
 ao_igniter_status(enum ao_igniter igniter);
 
+extern __pdata uint8_t ao_igniter_present;
+
 void
 ao_ignite_set_pins(void);
 
index 193c11f300826ba99bda40e8c232a7efda83d111..096ad9191e6255d930bb5596d2ef953d32daa518 100644 (file)
@@ -23,6 +23,7 @@ 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() {
@@ -30,10 +31,15 @@ ao_log_telem_track() {
                switch (ao_log_single_write_data.telemetry.generic.type) {
                case AO_TELEMETRY_SENSOR_TELEMETRUM:
                case AO_TELEMETRY_SENSOR_TELEMINI:
-                       sense_d = ao_log_single_write_data.telemetry.sensor.sense_d;
-                       sense_m = ao_log_single_write_data.telemetry.sensor.sense_m;
                        /* 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;
                        }
index e0355d96b75cde650c54f0974084ab0fbda63910..70f0b49d1174058fbbb9401b8ca582cbc145f3d9 100644 (file)
@@ -119,7 +119,13 @@ ao_report_igniter_ready(enum ao_igniter igniter)
 static void
 ao_report_continuity(void) __reentrant
 {
-       uint8_t c = (ao_report_igniter_ready(ao_igniter_drogue) |
+       uint8_t c;
+
+#if !HAS_IGNITE
+       if (!ao_igniter_present)
+               return;
+#endif
+       c = (ao_report_igniter_ready(ao_igniter_drogue) |
                     (ao_report_igniter_ready(ao_igniter_main) << 1));
        if (c) {
                while (c--) {
@@ -145,9 +151,6 @@ ao_report_continuity(void) __reentrant
                }
        }
 #endif
-       c = 50;
-       while (c-- && ao_flight_state == ao_flight_pad)
-               pause(AO_MS_TO_TICKS(100));
 }
 #endif
 
@@ -162,8 +165,13 @@ ao_report(void)
 #if HAS_IGNITE_REPORT
                if (ao_flight_state == ao_flight_idle)
                        ao_report_continuity();
-               while (ao_flight_state == ao_flight_pad)
+               while (ao_flight_state == ao_flight_pad) {
+                       uint8_t c;
                        ao_report_continuity();
+                       c = 50;
+                       while (c-- && ao_flight_state == ao_flight_pad)
+                               pause(AO_MS_TO_TICKS(100));
+               }
 #endif
                __critical {
                        while (ao_report_state == ao_flight_state)