altos: Clean up flight data definitions
authorKeith Packard <keithp@keithp.com>
Sun, 9 Sep 2012 20:46:23 +0000 (13:46 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 9 Sep 2012 20:46:23 +0000 (13:46 -0700)
These just shuffle the various definitions of data macros around to
make the include files more sensible looking.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/core/ao_data.h
src/core/ao_sample.c
src/core/ao_sample.h
src/test/ao_flight_test.c

index 5412febeab42142b4a00677d1fd60ec44675fa9f..2b9ef5ace922e5f4e5c4809da63d5524a1cf7305 100644 (file)
@@ -95,15 +95,19 @@ extern volatile __data uint8_t              ao_data_count;
        } while (0);
 
 /*
- * Wait for data to be completed by looking at the
- * indicated bit
+ * Wait until it is time to write a sensor sample; this is
+ * signaled by the timer tick
  */
 #define AO_DATA_WAIT() do {                            \
                ao_sleep((void *) &ao_data_count);      \
        } while (0)
 
+#if !HAS_BARO && HAS_MS5607
 
-#if HAS_MS5607
+/* Either an MS5607 or an MS5611 hooked to a SPI port
+ */
+
+#define HAS_BARO       1
 
 typedef int32_t        pres_t;
 typedef int32_t alt_t;
@@ -115,7 +119,11 @@ typedef int32_t alt_t;
 
 #define pres_to_altitude(p)    ao_pa_to_altitude(p)
 
-#else /* HAS_MS5607 */
+#endif
+
+#if !HAS_BARO && HAS_ADC
+
+#define HAS_BARO       1
 
 typedef int16_t pres_t;
 typedef int16_t alt_t;
@@ -125,7 +133,7 @@ typedef int16_t alt_t;
 #define pres_to_altitude(p)    ao_pres_to_altitude(p)
 #define ao_data_pres_cook(p)
 
-#endif /* else HAS_MS5607 */
+#endif
 
 /*
  * Need a few macros to pull data from the sensors:
@@ -136,17 +144,12 @@ typedef int16_t alt_t;
  * ao_data_accel_invert        - flip rocket ends for positive acceleration
  */
 
-#if HAS_MPU6000 && !HAS_HIGHG_ACCEL
-
-typedef int16_t accel_t;
-
-/* MPU6000 is hooked up so that positive y is positive acceleration */
-#define ao_data_accel(packet)                  ((packet)->mpu6000.accel_y)
-#define ao_data_accel_cook(packet)             (-(packet)->mpu6000.accel_y)
-#define ao_data_set_accel(packet, accel)       ((packet)->mpu6000.accel_y = (accel))
-#define ao_data_accel_invert(a)                        (-(a))
+#if HAS_ACCEL
 
-#else /* HAS_MPU6000 && !HAS_HIGHG_ACCEL */
+/* This section is for an analog accelerometer hooked to one of the ADC pins. As
+ * those are 5V parts, this also requires that the 5V supply be hooked to to anothe ADC
+ * pin so that the both can be measured to correct for changes between the 3.3V and 5V rails
+ */
 
 typedef int16_t accel_t;
 #define ao_data_accel(packet)                  ((packet)->adc.accel)
@@ -245,6 +248,35 @@ typedef int16_t accel_t;
 
 #endif /* HAS_ACCEL_REF */
 
-#endif /* else some other accel sensor */
+#endif /* HAS_ACCEL */
+
+#if !HAS_ACCEL && HAS_MMA655X
+
+#define HAS_ACCEL      1
+
+typedef int16_t accel_t;
+
+/* MMA655X is hooked up so that positive values represent negative acceleration */
+
+#define ao_data_accel(packet)                  ((packet)->mma655x)
+#define ao_data_accel_cook(packet)             ((packet)->mma655x)
+#define ao_data_set_accel(packet, accel)       ((packet)->mma655x = (accel))
+#define ao_data_accel_invert(accel)            (4095 - (accel))
+
+#endif
+
+#if !HAS_ACCEL && HAS_MPU6000
+
+#define HAS_ACCEL      1
+
+typedef int16_t accel_t;
+
+/* MPU6000 is hooked up so that positive y is positive acceleration */
+#define ao_data_accel(packet)                  ((packet)->mpu6000.accel_y)
+#define ao_data_accel_cook(packet)             (-(packet)->mpu6000.accel_y)
+#define ao_data_set_accel(packet, accel)       ((packet)->mpu6000.accel_y = (accel))
+#define ao_data_accel_invert(a)                        (-(a))
+
+#endif
 
 #endif /* _AO_DATA_H_ */
index 6461def06abbb764a6ce5dc4e7ac6ed91dbd50d2..985c094046de9ad9923f0aa7803c6a9f899e3c46 100644 (file)
@@ -134,10 +134,12 @@ ao_sample(void)
                ao_data = (struct ao_data *) &ao_data_ring[ao_sample_data];
                ao_sample_tick = ao_data->tick;
 
+#if HAS_BARO
                ao_data_pres_cook(ao_data);
                ao_sample_pres = ao_data_pres(ao_data);
                ao_sample_alt = pres_to_altitude(ao_sample_pres);
                ao_sample_height = ao_sample_alt - ao_ground_height;
+#endif
 
 #if HAS_ACCEL
                ao_sample_accel = ao_data_accel_cook(ao_data);
index 189b20197d81dfc7c6bf86e20cafcf4a2fb91e25..9336bdf9c8bfda847a2e0cfbe9166ed96baccedf 100644 (file)
 /*
  * Above this height, the baro sensor doesn't work
  */
+#if HAS_MS5607
+#define AO_MAX_BARO_HEIGHT     30000
+#else
 #define AO_MAX_BARO_HEIGHT     12000
+#endif
 
 /*
  * Above this speed, baro measurements are unreliable
 #define AO_MSS_TO_ACCEL(mss)   ((int16_t) ((mss) * 16))
 
 extern __pdata uint16_t        ao_sample_tick;         /* time of last data */
-extern __pdata pres_t  ao_sample_pres;         /* most recent pressure sensor reading */
-extern __pdata alt_t   ao_sample_alt;          /* MSL of ao_sample_pres */
-extern __pdata alt_t   ao_sample_height;       /* AGL of ao_sample_pres */
 extern __data uint8_t  ao_sample_adc;          /* Ring position of last processed sample */
 extern __data uint8_t  ao_sample_data;         /* Ring position of last processed sample */
 
-#if HAS_ACCEL
-extern __pdata accel_t ao_sample_accel;        /* most recent accel sensor reading */
-#endif
-
+#if HAS_BARO
+extern __pdata pres_t  ao_sample_pres;         /* most recent pressure sensor reading */
+extern __pdata alt_t   ao_sample_alt;          /* MSL of ao_sample_pres */
+extern __pdata alt_t   ao_sample_height;       /* AGL of ao_sample_pres */
 extern __pdata pres_t  ao_ground_pres;         /* startup pressure */
 extern __pdata alt_t   ao_ground_height;       /* MSL of ao_ground_pres */
+#endif
 
 #if HAS_ACCEL
+extern __pdata accel_t ao_sample_accel;        /* most recent accel sensor reading */
 extern __pdata accel_t ao_ground_accel;        /* startup acceleration */
 extern __pdata accel_t         ao_accel_2g;            /* factory accel calibration */
 extern __pdata int32_t ao_accel_scale;         /* sensor to m/s² conversion */
index a4ef8dc097c4bb127f6a47f25a9db2fa64c5f177..b9e291cec1c2de71e9d53e52c04ea17cc93b34a8 100644 (file)
@@ -54,6 +54,15 @@ struct ao_adc {
 #define __code
 #define __reentrant
 
+#define HAS_FLIGHT 1
+#define HAS_IGNITE 1
+#define HAS_USB 1
+#define HAS_GPS 1
+#ifndef HAS_ACCEL
+#define HAS_ACCEL 1
+#define HAS_ACCEL_REF 0
+#endif
+
 #include <ao_data.h>
 
 #define to_fix16(x) ((int16_t) ((x) * 65536.0 + 0.5))
@@ -200,24 +209,17 @@ struct ao_config ao_config;
 
 #define DATA_TO_XDATA(x) (x)
 
-#define HAS_FLIGHT 1
-#define HAS_IGNITE 1
-#define HAS_ADC 1
-#define HAS_USB 1
-#define HAS_GPS 1
-#ifndef HAS_ACCEL
-#define HAS_ACCEL 1
-#define HAS_ACCEL_REF 0
-#endif
 
 #define GRAVITY 9.80665
 extern int16_t ao_ground_accel, ao_flight_accel;
 extern int16_t ao_accel_2g;
 
+typedef int16_t        accel_t;
+
 extern uint16_t        ao_sample_tick;
 
 extern int16_t ao_sample_height;
-extern int16_t ao_sample_accel;
+extern accel_t ao_sample_accel;
 extern int32_t ao_accel_scale;
 extern int16_t ao_ground_height;
 extern int16_t ao_sample_alt;