Instead of re-writing the acceleration data in the ring to adjust for
pad orientation, just leave it alone and flip it each time it is
fetched. Much simpler this way.
Signed-off-by: Keith Packard <keithp@keithp.com>
void
ao_data_get(struct ao_data *packet)
{
void
ao_data_get(struct ao_data *packet)
{
-#if HAS_FLIGHT
- uint8_t i = ao_data_ring_prev(ao_sample_data);
-#else
uint8_t i = ao_data_ring_prev(ao_data_head);
uint8_t i = ao_data_ring_prev(ao_data_head);
memcpy(packet, (void *) &ao_data_ring[i], sizeof (struct ao_data));
}
#endif
memcpy(packet, (void *) &ao_data_ring[i], sizeof (struct ao_data));
}
#endif
+
+#if HAS_ACCEL
+accel_t
+ao_data_accel(volatile struct ao_data *packet) {
+ accel_t raw;
+ raw = ao_data_accel_raw(packet);
+ if (ao_config.pad_orientation != AO_PAD_ORIENTATION_ANTENNA_UP)
+ raw = ao_data_accel_invert(raw);
+ return raw;
+}
+#endif
/*
* Need a few macros to pull data from the sensors:
*
/*
* Need a few macros to pull data from the sensors:
*
- * ao_data_accel_sample - pull raw sensor and convert to normalized values
- * ao_data_accel - pull normalized value (lives in the same memory)
- * ao_data_set_accel - store normalized value back in the sensor location
+ * ao_data_accel_raw - pull raw sensor
* ao_data_accel_invert - flip rocket ends for positive acceleration
*/
* ao_data_accel_invert - flip rocket ends for positive acceleration
*/
*/
typedef int16_t accel_t;
*/
typedef int16_t accel_t;
-#define ao_data_accel(packet) ((packet)->adc.accel)
-#define ao_data_set_accel(packet, a) ((packet)->adc.accel = (a))
+#define ao_data_accel_raw(packet) ((packet)->adc.accel)
#define ao_data_accel_invert(a) (0x7fff -(a))
/*
#define ao_data_accel_invert(a) (0x7fff -(a))
/*
-#define ao_data_accel_cook(packet) \
+#define ao_data_accel_raw(packet) \
((uint16_t) ((((uint32_t) (packet)->adc.accel << 16) / ((packet)->adc.accel_ref << 1))) >> 1)
#else
((uint16_t) ((((uint32_t) (packet)->adc.accel << 16) / ((packet)->adc.accel_ref << 1))) >> 1)
#else
-#define ao_data_accel_cook(packet) ((packet)->adc.accel)
+#define ao_data_accel_raw(packet) ((packet)->adc.accel)
#endif /* HAS_ACCEL_REF */
#endif /* HAS_ACCEL_REF */
#error AO_MMA655X_INVERT not defined
#endif
#error AO_MMA655X_INVERT not defined
#endif
-#define ao_data_accel(packet) ((packet)->mma655x)
-#define ao_data_accel_cook(packet) (AO_ACCEL_INVERT - (packet)->mma655x)
+#define ao_data_accel_raw(packet) (AO_ACCEL_INVERT - (packet)->mma655x)
-#define ao_data_accel_cook(packet) ((packet)->mma655x)
+#define ao_data_accel_raw(packet) ((packet)->mma655x)
-#define ao_data_set_accel(packet, accel) ((packet)->mma655x = (accel))
#define ao_data_accel_invert(accel) (AO_ACCEL_INVERT - (accel))
#endif
#define ao_data_accel_invert(accel) (AO_ACCEL_INVERT - (accel))
#endif
#error AO_ADXL375_INVERT not defined
#endif
#error AO_ADXL375_INVERT not defined
#endif
-#define ao_data_accel(packet) ((packet)->adxl375.AO_ADXL375_AXIS)
-#define ao_data_accel_cook(packet) (-ao_data_accel(packet))
+#define ao_data_accel_raw(packet) (-(packet)->adxl375.AO_ADXL375_AXIS)
-#define ao_data_accel_cook(packet) ao_data_accel(packet)
+#define ao_data_accel_raw(packet) ((packet)->adxl375.AO_ADXL375_AXIS)
-#define ao_data_set_accel(packet, accel) (ao_data_accel(packet) = (accel))
#define ao_data_accel_invert(accel) (-(accel))
#endif /* HAS_ADXL375 */
#define ao_data_accel_invert(accel) (-(accel))
#endif /* HAS_ADXL375 */
typedef int16_t accel_t;
/* MPU6000 is hooked up so that positive y is positive acceleration */
typedef int16_t accel_t;
/* MPU6000 is hooked up so that positive y is positive acceleration */
-#define ao_data_accel(packet) ((packet)->z_accel)
-#define ao_data_accel_cook(packet) (-(packet)->mpu6000.accel_y)
-#define ao_data_set_accel(packet, accel) ((packet)->z_accel = (accel))
+#define ao_data_accel_raw(packet) (-(packet)->mpu6000.accel_y)
#define ao_data_accel_invert(a) (-(a))
#endif
#define ao_data_accel_invert(a) (-(a))
#endif
typedef int16_t accel_t;
/* MPU9250 is hooked up so that positive y is positive acceleration */
typedef int16_t accel_t;
/* MPU9250 is hooked up so that positive y is positive acceleration */
-#define ao_data_accel(packet) ((packet)->z_accel)
-#define ao_data_accel_cook(packet) (-(packet)->mpu9250.accel_y)
-#define ao_data_set_accel(packet, accel) ((packet)->z_accel = (accel))
+#define ao_data_accel_raw(packet) (-(packet)->mpu9250.accel_y)
#define ao_data_accel_invert(a) (-(a))
#endif
#define ao_data_accel_invert(a) (-(a))
#endif
-#define ao_data_accel(packet) ((packet)->z_accel)
-#define ao_data_set_accel(packet, accel) ((packet)->z_accel = (accel))
+#define ao_data_accel_raw(packet) -ao_data_along(packet)
#define ao_data_accel_invert(a) (-(a))
#define ao_data_accel_invert(a) (-(a))
#define ao_data_accel_to_sample(accel) ao_bmx_accel_to_sample(accel)
#endif
#define ao_data_accel_to_sample(accel) ao_bmx_accel_to_sample(accel)
#endif
+#if HAS_ACCEL
+accel_t
+ao_data_accel(volatile struct ao_data *packet);
+#endif
+
- ao_sample_accel = ao_data_accel_cook(ao_data);
- if (ao_config.pad_orientation != AO_PAD_ORIENTATION_ANTENNA_UP)
- ao_sample_accel = ao_data_accel_invert(ao_sample_accel);
- ao_data_set_accel(ao_data, ao_sample_accel);
+ ao_sample_accel = ao_data_accel(ao_data);
#endif
#if HAS_GYRO
ao_sample_accel_along = ao_data_along(ao_data);
#endif
#if HAS_GYRO
ao_sample_accel_along = ao_data_along(ao_data);