summaryrefslogtreecommitdiff
path: root/src/kernel/ao_data.h
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-12-02 15:32:38 -0600
committerKeith Packard <keithp@keithp.com>2017-12-02 15:52:43 -0600
commitf0068719b17019c5cd7ed318364a0581caf64e1a (patch)
treeaed3ba2002e6337d4148887ecc3cb5ab5422965e /src/kernel/ao_data.h
parentc31744299e5a4342bbe26d3735ee2d8f09192ae9 (diff)
altos/kernel: MPU9250 support
Use MPU9250 for accel, gyro and mag data in logging, telemetry and flight status computations. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/kernel/ao_data.h')
-rw-r--r--src/kernel/ao_data.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/kernel/ao_data.h b/src/kernel/ao_data.h
index 9a3b389c..88d0e916 100644
--- a/src/kernel/ao_data.h
+++ b/src/kernel/ao_data.h
@@ -330,6 +330,47 @@ typedef int16_t angle_t; /* in degrees */
#define ao_data_pitch(packet) ((packet)->mpu6000.gyro_x)
#define ao_data_yaw(packet) ((packet)->mpu6000.gyro_z)
+static inline float ao_convert_gyro(float sensor)
+{
+ return ao_mpu6000_gyro(sensor);
+}
+
+static inline float ao_convert_accel(int16_t sensor)
+{
+ return ao_mpu6000_accel(sensor);
+}
+
+#endif
+
+#if !HAS_GYRO && HAS_MPU9250
+
+#define HAS_GYRO 1
+
+typedef int16_t gyro_t; /* in raw sample units */
+typedef int16_t angle_t; /* in degrees */
+
+/* Y axis is aligned with the direction of motion (along) */
+/* X axis is aligned in the other board axis (across) */
+/* Z axis is aligned perpendicular to the board (through) */
+
+#define ao_data_along(packet) ((packet)->mpu9250.accel_y)
+#define ao_data_across(packet) ((packet)->mpu9250.accel_x)
+#define ao_data_through(packet) ((packet)->mpu9250.accel_z)
+
+#define ao_data_roll(packet) ((packet)->mpu9250.gyro_y)
+#define ao_data_pitch(packet) ((packet)->mpu9250.gyro_x)
+#define ao_data_yaw(packet) ((packet)->mpu9250.gyro_z)
+
+static inline float ao_convert_gyro(float sensor)
+{
+ return ao_mpu9250_gyro(sensor);
+}
+
+static inline float ao_convert_accel(int16_t sensor)
+{
+ return ao_mpu9250_accel(sensor);
+}
+
#endif
#if !HAS_MAG && HAS_HMC5883
@@ -344,4 +385,21 @@ typedef int16_t ao_mag_t; /* in raw sample units */
#endif
+#if !HAS_MAG && HAS_MPU9250
+
+#define HAS_MAG 1
+
+typedef int16_t ao_mag_t; /* in raw sample units */
+
+/* Note that this order is different from the accel and gyro. For some
+ * reason, the mag sensor axes aren't the same as the other two
+ * sensors. Also, the Z axis is flipped in sign.
+ */
+
+#define ao_data_mag_along(packet) ((packet)->mpu9250.mag_x)
+#define ao_data_mag_across(packet) ((packet)->mpu9250.mag_y)
+#define ao_data_mag_through(packet) ((packet)->mpu9250.mag_z)
+
+#endif
+
#endif /* _AO_DATA_H_ */