X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fcore%2Fao_data.h;h=30208dfbdef780852b9df5646e88630ccf23532f;hb=mm-ms5611;hp=3b66ef5d1a598e65e9369d6d7adcb33f10a08eee;hpb=5ed88fb72c3e3ecf3333c700d838667db71cfbdc;p=fw%2Faltos diff --git a/src/core/ao_data.h b/src/core/ao_data.h index 3b66ef5d..30208dfb 100644 --- a/src/core/ao_data.h +++ b/src/core/ao_data.h @@ -28,7 +28,7 @@ #include #define AO_DATA_MS5607 (1 << 1) #else -#define AO_DATA_MS5607 (1 << 1) +#define AO_DATA_MS5607 0 #endif #if HAS_MPU6000 @@ -85,25 +85,22 @@ extern volatile __data uint8_t ao_data_count; /* * Mark a section of data as ready, check for data complete */ -#define AO_DATA_PRESENT(bit) do { \ - if ((ao_data_present |= (bit)) == AO_DATA_ALL) { \ - ao_data_ring[ao_data_head].tick = ao_tick_count; \ - ao_data_head = ao_data_ring_next(ao_data_head); \ - ao_data_present = 0; \ - ao_wakeup((void *) &ao_data_head); \ - } \ - } while (0); +#define AO_DATA_PRESENT(bit) (ao_data_present |= (bit)) /* - * 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 +112,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 +126,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 +137,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; +#if HAS_ACCEL -/* 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)) - -#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 +241,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_ */