altos: Signal continuity over radio in pad mode (trac #40)
[fw/altos] / src / core / ao_telemetry.c
index b3ce8ba9325a3573ed93c3b641a6f7c317d5249d..583a6636668fe764c0de48727e29a06056f3562f 100644 (file)
@@ -22,9 +22,6 @@ static __pdata uint16_t ao_telemetry_interval;
 static __pdata uint8_t ao_rdf = 0;
 static __pdata uint16_t ao_rdf_time;
 
-#define AO_RDF_INTERVAL_TICKS  AO_SEC_TO_TICKS(5)
-#define AO_RDF_LENGTH_MS       500
-
 #if defined(MEGAMETRUM)
 #define AO_SEND_MEGA   1
 #endif
@@ -104,6 +101,7 @@ ao_send_mega_sensor(void)
        telemetry.mega_sensor.pres = ao_data_pres(packet);
        telemetry.mega_sensor.temp = ao_data_temp(packet);
 
+#if HAS_MPU6000
        telemetry.mega_sensor.accel_x = packet->mpu6000.accel_x;
        telemetry.mega_sensor.accel_y = packet->mpu6000.accel_y;
        telemetry.mega_sensor.accel_z = packet->mpu6000.accel_z;
@@ -111,10 +109,13 @@ ao_send_mega_sensor(void)
        telemetry.mega_sensor.gyro_x = packet->mpu6000.gyro_x;
        telemetry.mega_sensor.gyro_y = packet->mpu6000.gyro_y;
        telemetry.mega_sensor.gyro_z = packet->mpu6000.gyro_z;
+#endif
 
+#if HAS_HMC5883
        telemetry.mega_sensor.mag_x = packet->hmc5883.x;
        telemetry.mega_sensor.mag_y = packet->hmc5883.y;
        telemetry.mega_sensor.mag_z = packet->hmc5883.z;
+#endif
 
        ao_radio_send(&telemetry, sizeof (telemetry));
 }
@@ -313,8 +314,16 @@ ao_telemetry(void)
                        if (ao_rdf &&
                            (int16_t) (ao_time() - ao_rdf_time) >= 0)
                        {
+#if HAS_IGNITE_REPORT
+                               uint8_t c;
+#endif
                                ao_rdf_time = ao_time() + AO_RDF_INTERVAL_TICKS;
-                               ao_radio_rdf(AO_MS_TO_RDF_LEN(AO_RDF_LENGTH_MS));
+#if HAS_IGNITE_REPORT
+                               if (ao_flight_state == ao_flight_pad && (c = ao_report_igniter()))
+                                       ao_radio_continuity(c);
+                               else
+#endif
+                                       ao_radio_rdf();
                        }
 #endif
                        time += ao_telemetry_interval;
@@ -326,6 +335,7 @@ ao_telemetry(void)
                        }
                        else
                                time = ao_time();
+               bottom: ;
                }
        }
 }