altos: Init BMX160 more carefully
[fw/altos] / src / drivers / ao_bmx160.h
index 265be995d3952fd081e939ff864145f967bf1727..5552b536ffa385ec86a93c58feabe017d4e8fc34 100644 (file)
@@ -19,6 +19,8 @@
 #ifndef _AO_BMX160_H_
 #define _AO_BMX160_H_
 
+#include <math.h>
+
 struct ao_bmx160_sample {
        int16_t         mag_x;
        int16_t         mag_y;
@@ -59,10 +61,12 @@ ao_bmx160_init(void);
 #define   BMX160_PMU_STATUS_GYR_PMU_STATUS_SUSPEND             0
 #define   BMX160_PMU_STATUS_GYR_PMU_STATUS_NORMAL              1
 #define   BMX160_PMU_STATUS_GYR_PMU_STATUS_FAST_START_UP       3
+#define   BMX160_PMU_STATUS_GYR_PMU_STATUS_MASK                        3
 #define  BMX160_PMU_STATUS_ACC_PMU_STATUS      4
 #define   BMX160_PMU_STATUS_ACC_PMU_STATUS_SUSPEND             0
 #define   BMX160_PMU_STATUS_ACC_PMU_STATUS_NORMAL              1
 #define   BMX160_PMU_STATUS_ACC_PMU_STATUS_LOW_POWER           2
+#define   BMX160_PMU_STATUS_ACC_PMU_STATUS_MASK                        3
 #define BMX160_DATA_0                  0x04
 #define BMX160_MAG_X_0_7               0x04
 #define BMX160_MAG_X_8_15              0x05
@@ -128,8 +132,6 @@ ao_bmx160_init(void);
 #define  BMX160_ACC_RANGE_4G                   0x5
 #define  BMX160_ACC_RANGE_8G                   0x8
 #define  BMX160_ACC_RANGE_16G                  0xc
-#define  BMX160_ACC_RANGE_
-#define  BMX160_ACC_RANGE_
 #define BMX160_GYR_CONF                        0x42
 #define  BMX160_GYR_CONF_GYR_ODR               0
 #define   BMX160_GYR_CONF_GYR_ODR_25                   0x6
@@ -250,4 +252,18 @@ ao_bmx160_init(void);
 #define BMM150_REPZ                            0x52
 #define  BMM150_REPZ_VALUE(n)                          ((n) -1)
 
+#define BMX160_GYRO_FULLSCALE  ((float) 2000 * M_PI/180.0)
+
+static inline float
+ao_bmx160_gyro(float sensor) {
+       return sensor * ((float) (BMX160_GYRO_FULLSCALE / 32767.0));
+}
+
+#define BMX160_ACCEL_FULLSCALE 16
+
+static inline float
+ao_bmx160_accel(int16_t sensor) {
+       return (float) sensor * ((float) (BMX160_ACCEL_FULLSCALE * GRAVITY / 32767.0));
+}
+
 #endif /* _BMX160_H_ */