altos: Remove *_TO_DATA macros
[fw/altos] / src / test / ao_flight_test.c
index 8e69730ee54e1f73322de422ef677a44d9001cd7..0913e7ba96a3a99f4498f6a0c1820d215e232a1e 100644 (file)
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <getopt.h>
 #include <math.h>
+#define log ao_log_data
 
 #define GRAVITY 9.80665
 
@@ -304,7 +305,7 @@ struct ao_task {
 #define AO_MS_TO_TICKS(ms)     ((ms) / 10)
 #define AO_SEC_TO_TICKS(s)     ((s) * 100)
 
-#define AO_FLIGHT_TEST
+#define AO_FLIGHT_TEST 1
 
 int    ao_flight_debug;
 
@@ -344,8 +345,10 @@ struct ao_cmds {
 #include <ao_ms5607.h>
 struct ao_ms5607_prom  ao_ms5607_prom;
 #include "ao_ms5607_convert.c"
+#if TELEMEGA
 #define AO_PYRO_NUM    4
 #include <ao_pyro.h>
+#endif
 #else
 #include "ao_convert.c"
 #endif
@@ -359,7 +362,7 @@ struct ao_ms5607_prom       ao_ms5607_prom;
 
 struct ao_config ao_config;
 
-#define DATA_TO_XDATA(x) (x)
+#define x (x)
 
 
 extern int16_t ao_ground_accel, ao_flight_accel;
@@ -368,7 +371,7 @@ extern int16_t ao_accel_2g;
 typedef int16_t        accel_t;
 
 uint16_t       ao_serial_number;
-uint16_t       ao_flight_number;
+int16_t                ao_flight_number;
 
 extern uint16_t        ao_sample_tick;
 
@@ -427,15 +430,14 @@ static double     ao_test_landed_time;
 static int     landed_set;
 static double  landed_time;
 static double  landed_height;
+#if AO_PYRO_NUM
+static uint16_t        pyros_fired;
+#endif
 
 #if HAS_MPU6000
 static struct ao_mpu6000_sample        ao_ground_mpu6000;
 #endif
 
-#if HAS_ACCEL
-int ao_error_h_sq_avg;
-#endif
-
 void
 ao_test_exit(void)
 {
@@ -498,7 +500,7 @@ ao_insert(void)
        ao_data_ring[ao_data_head] = ao_data_static;
        if (ao_flight_state != ao_flight_startup) {
 #if HAS_ACCEL
-               double  accel = ((ao_flight_ground_accel - ao_data_accel_cook(&ao_data_static)) * GRAVITY * 2.0) /
+               double  accel = ((ao_flight_ground_accel - ao_data_accel(&ao_data_static)) * GRAVITY * 2.0) /
                        (ao_config.accel_minus_g - ao_config.accel_plus_g);
 #else
                double  accel = 0.0;
@@ -509,7 +511,12 @@ ao_insert(void)
                        tick_offset = -ao_data_static.tick;
                if ((prev_tick - ao_data_static.tick) > 0x400)
                        tick_offset += 65536;
-               simple_speed += accel * (ao_data_static.tick - prev_tick) / 100.0;
+               if (prev_tick) {
+                       int ticks = ao_data_static.tick - prev_tick;
+                       if (ticks < 0)
+                               ticks += 65536;
+                       simple_speed += accel * ticks / 100.0;
+               }
                prev_tick = ao_data_static.tick;
                time = (double) (ao_data_static.tick + tick_offset) / 100;
 
@@ -647,7 +654,7 @@ ao_insert(void)
 
 #if 1
                        printf("%7.2f height %8.2f accel %8.3f accel_speed %8.3f "
-                              "state %-8.8s k_height %8.2f k_speed %8.3f k_accel %8.3f avg_height %5d drogue %4d main %4d error %5d"
+                              "state %d k_height %8.2f k_speed %8.3f k_accel %8.3f avg_height %5d drogue %4d main %4d error %5d"
 #if TELEMEGA
                               " angle %5d "
                               "accel_x %8.3f accel_y %8.3f accel_z %8.3f gyro_x %8.3f gyro_y %8.3f gyro_z %8.3f mag_x %8d mag_y %8d, mag_z %8d mag_angle %4d "
@@ -657,7 +664,7 @@ ao_insert(void)
                               height,
                               accel,
                               simple_speed > -100.0 ? simple_speed : -100.0,
-                              ao_state_names[ao_flight_state],
+                              ao_flight_state * 10,
                               ao_k_height / 65536.0,
                               ao_k_speed / 65536.0 / 16.0,
                               ao_k_accel / 65536.0 / 16.0,
@@ -825,6 +832,10 @@ ao_sleep(void *wchan)
                                                ao_insert();
                                                return;
                                        case AO_LOG_TEMP_VOLT:
+                                               if (pyros_fired != log_mega->u.volt.pyro) {
+                                                       printf("pyro changed %x -> %x\n", pyros_fired, log_mega->u.volt.pyro);
+                                                       pyros_fired = log_mega->u.volt.pyro;
+                                               }
                                                break;
                                        case AO_LOG_GPS_TIME:
                                                ao_gps_prev = ao_gps_static;
@@ -989,7 +1000,7 @@ main (int argc, char **argv)
 #else
        emulator_app="baro";
 #endif
-       while ((c = getopt_long(argc, argv, "sdi:", options, NULL)) != -1) {
+       while ((c = getopt_long(argc, argv, "sdpi:", options, NULL)) != -1) {
                switch (c) {
                case 's':
                        summary = 1;
@@ -997,6 +1008,11 @@ main (int argc, char **argv)
                case 'd':
                        ao_flight_debug = 1;
                        break;
+               case 'p':
+#if PYRO_DBG
+                       pyro_dbg = 1;
+#endif
+                       break;
                case 'i':
                        info = optarg;
                        break;