X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_bmx160.h;h=c5bf0aff634fcd2ccf9453ba0757448517b81f21;hb=c49bd3cb0c31a51fae79ddc92237cc309be9a242;hp=265be995d3952fd081e939ff864145f967bf1727;hpb=a87698663f8a5ced468755068a0468755d8f2746;p=fw%2Faltos diff --git a/src/drivers/ao_bmx160.h b/src/drivers/ao_bmx160.h index 265be995..c5bf0aff 100644 --- a/src/drivers/ao_bmx160.h +++ b/src/drivers/ao_bmx160.h @@ -19,11 +19,13 @@ #ifndef _AO_BMX160_H_ #define _AO_BMX160_H_ +#include + struct ao_bmx160_sample { int16_t mag_x; int16_t mag_y; int16_t mag_z; - int16_t rhall; + uint16_t rhall; int16_t gyr_x; int16_t gyr_y; int16_t gyr_z; @@ -44,6 +46,20 @@ struct ao_bmx160_offset { uint8_t offset_6; }; +struct ao_bmm150_trim { + int8_t dig_x1; + int8_t dig_y1; + int8_t dig_x2; + int8_t dig_y2; + uint16_t dig_z1; + int16_t dig_z2; + int16_t dig_z3; + int16_t dig_z4; + uint8_t dig_xy1; + int8_t dig_xy2; + uint16_t dig_xyz1; +}; + void ao_bmx160_init(void); @@ -59,10 +75,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 +146,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 @@ -186,6 +202,8 @@ ao_bmx160_init(void); #define BMX160_FOC_CONF 0x69 #define BMX160_CONF 0x6A #define BMX160_IF_CONF 0x6B +#define BMX160_IF_CONF_IF_MODE 4 +#define BMX160_IF_CONF_IF_MODE_AUTO_MAG 0x02 #define BMX160_PMU_TRIGGER 0x6C #define BMX160_SELF_TEST 0x6D #define BMX160_NV_CONF 0x70 @@ -250,4 +268,44 @@ ao_bmx160_init(void); #define BMM150_REPZ 0x52 #define BMM150_REPZ_VALUE(n) ((n) -1) +/* Trim Extended Registers */ +#define BMM150_DIG_X1 0x5D +#define BMM150_DIG_Y1 0x5E +#define BMM150_DIG_Z4_LSB 0x62 +#define BMM150_DIG_Z4_MSB 0x63 +#define BMM150_DIG_X2 0x64 +#define BMM150_DIG_Y2 0x65 +#define BMM150_DIG_Z2_LSB 0x68 +#define BMM150_DIG_Z2_MSB 0x69 +#define BMM150_DIG_Z1_LSB 0x6A +#define BMM150_DIG_Z1_MSB 0x6B +#define BMM150_DIG_XYZ1_LSB 0x6C +#define BMM150_DIG_XYZ1_MSB 0x6D +#define BMM150_DIG_Z3_LSB 0x6E +#define BMM150_DIG_Z3_MSB 0x6F +#define BMM150_DIG_XY2 0x70 +#define BMM150_DIG_XY1 0x71 + +#define BMM150_XYAXES_FLIP_OVERFLOW_ADCVAL -4096 +#define BMM150_ZAXIS_HALL_OVERFLOW_ADCVAL -16384 +#define BMM150_OVERFLOW_OUTPUT -32768 +#define BMM150_NEGATIVE_SATURATION_Z -32767 +#define BMM150_POSITIVE_SATURATION_Z 32767 + +#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)); +} + +#define ao_bmx_accel_to_sample(accel) ((accel_t) (accel) * (32767.0f / (BMX160_ACCEL_FULLSCALE * GRAVITY))) + #endif /* _BMX160_H_ */