Go to the documentation of this file.
46 #define EX_LSM303AGR_VERSION "1.0.1"
51 #define EX_LSM303AGR_MAJOR 1
56 #define EX_LSM303AGR_MINOR 0
61 #define EX_LSM303AGR_PATCH 1
72 #define LSM303AGR_ACC_NUMBER_OF_AXES 3U
74 #define LSM303AGR_ACC_2G 2.0f
75 #define LSM303AGR_ACC_4G 4.0f
76 #define LSM303AGR_ACC_8G 8.0f
77 #define LSM303AGR_ACC_16G 16.0f
79 #define LSM303AGR_ACC_SENS_2G 0.060f
80 #define LSM303AGR_ACC_SENS_4G 0.120f
81 #define LSM303AGR_ACC_SENS_8G 0.240f
82 #define LSM303AGR_ACC_SENS_16G 0.750f
84 #define LSM303AGR_ACC_BIAS 0.0f
94 #define LSM303AGR_COMP_NUMBER_OF_AXES 3U
96 #define LSM303AGR_COMP_50GA 50.0f
98 #define LSM303AGR_COMP_SENS_50GA 0.00015f
100 #define LSM303AGR_COMP_BIAS 0.0f
107 #define LSM303AGR_DI_MASK 0xFF
108 #define LSM303AGR_DI(n) (1 << n)
109 #define LSM303AGR_AD_MASK 0x7F
110 #define LSM303AGR_AD(n) (1 << n)
111 #define LSM303AGR_MS (1 << 7)
118 #define LSM303AGR_AD_STATUS_REG_AUX_A 0x07
119 #define LSM303AGR_AD_OUT_TEMP_L_A 0x0C
120 #define LSM303AGR_AD_OUT_TEMP_H_A 0x0D
121 #define LSM303AGR_AD_INT_COUNTER_REG_A 0x0E
122 #define LSM303AGR_AD_WHO_AM_I_A 0x0F
123 #define LSM303AGR_AD_TEMP_CFG_REG_A 0x1F
124 #define LSM303AGR_AD_CTRL_REG1_A 0x20
125 #define LSM303AGR_AD_CTRL_REG2_A 0x21
126 #define LSM303AGR_AD_CTRL_REG3_A 0x22
127 #define LSM303AGR_AD_CTRL_REG4_A 0x23
128 #define LSM303AGR_AD_CTRL_REG5_A 0x24
129 #define LSM303AGR_AD_CTRL_REG6_A 0x25
130 #define LSM303AGR_AD_REFERENCE_A 0x26
131 #define LSM303AGR_AD_STATUS_REG_A 0x27
132 #define LSM303AGR_AD_OUT_X_L_A 0x28
133 #define LSM303AGR_AD_OUT_X_H_A 0x29
134 #define LSM303AGR_AD_OUT_Y_L_A 0x2A
135 #define LSM303AGR_AD_OUT_Y_H_A 0x2B
136 #define LSM303AGR_AD_OUT_Z_L_A 0x2C
137 #define LSM303AGR_AD_OUT_Z_H_A 0x2D
138 #define LSM303AGR_AD_FIFO_CTRL_REG_A 0x2E
139 #define LSM303AGR_AD_FIFO_SRC_REG_A 0x2F
140 #define LSM303AGR_AD_INT1_CFG_A 0x30
141 #define LSM303AGR_AD_INT1_SRC_A 0x31
142 #define LSM303AGR_AD_INT1_THS_A 0x32
143 #define LSM303AGR_AD_INT1_DURATION_A 0x33
144 #define LSM303AGR_AD_INT2_CFG_A 0x34
145 #define LSM303AGR_AD_INT2_SRC_A 0x35
146 #define LSM303AGR_AD_INT2_THS_A 0x36
147 #define LSM303AGR_AD_INT2_DURATION_A 0x37
148 #define LSM303AGR_AD_CLICK_CFG_A 0x38
149 #define LSM303AGR_AD_CLICK_SRC_A 0x39
150 #define LSM303AGR_AD_CLICK_THS_A 0x3A
151 #define LSM303AGR_AD_TIME_LIMIT_A 0x3B
152 #define LSM303AGR_AD_TIME_LATENCY_A 0x3C
153 #define LSM303AGR_AD_TIME_WINDOW_A 0x3D
154 #define LSM303AGR_AD_ACT_THS_A 0x3E
155 #define LSM303AGR_AD_ACT_DUR_A 0x3F
156 #define LSM303AGR_AD_OFFSET_X_REG_L_M 0x45
157 #define LSM303AGR_AD_OFFSET_X_REG_H_M 0x46
158 #define LSM303AGR_AD_OFFSET_Y_REG_L_M 0x47
159 #define LSM303AGR_AD_OFFSET_Y_REG_H_M 0x48
160 #define LSM303AGR_AD_OFFSET_Z_REG_L_M 0x49
161 #define LSM303AGR_AD_OFFSET_Z_REG_H_M 0x4A
162 #define LSM303AGR_AD_WHO_AM_I_M 0x4F
163 #define LSM303AGR_AD_CFG_REG_A_M 0x60
164 #define LSM303AGR_AD_CFG_REG_B_M 0x61
165 #define LSM303AGR_AD_CFG_REG_C_M 0x62
166 #define LSM303AGR_AD_INT_CRTL_REG_M 0x63
167 #define LSM303AGR_AD_INT_SOURCE_REG_M 0x64
168 #define LSM303AGR_AD_INT_THS_L_REG_M 0x65
169 #define LSM303AGR_AD_INT_THS_H_REG_M 0x66
170 #define LSM303AGR_AD_STATUS_REG_M 0x67
171 #define LSM303AGR_AD_OUTX_L_REG_M 0x68
172 #define LSM303AGR_AD_OUTX_H_REG_M 0x69
173 #define LSM303AGR_AD_OUTY_L_REG_M 0x6A
174 #define LSM303AGR_AD_OUTY_H_REG_M 0x6B
175 #define LSM303AGR_AD_OUTZ_L_REG_M 0x6C
176 #define LSM303AGR_AD_OUTZ_H_REG_M 0x6D
183 #define LSM303AGR_TEMP_CFG_REG_A_TEMP_EN0 (1 << 0)
184 #define LSM303AGR_TEMP_CFG_REG_A_TEMP_EN1 (1 << 0)
191 #define LSM303AGR_CTRL_REG1_A_XEN (1 << 0)
192 #define LSM303AGR_CTRL_REG1_A_YEN (1 << 1)
193 #define LSM303AGR_CTRL_REG1_A_ZEN (1 << 2)
194 #define LSM303AGR_CTRL_REG1_A_LPEN (1 << 3)
195 #define LSM303AGR_CTRL_REG1_A_ODR0 (1 << 4)
196 #define LSM303AGR_CTRL_REG1_A_ODR1 (1 << 5)
197 #define LSM303AGR_CTRL_REG1_A_ODR2 (1 << 6)
198 #define LSM303AGR_CTRL_REG1_A_ODR3 (1 << 7)
205 #define LSM303AGR_CTRL_REG2_A_HPIS1 (1 << 0)
206 #define LSM303AGR_CTRL_REG2_A_HPIS2 (1 << 1)
207 #define LSM303AGR_CTRL_REG2_A_HPCLICK (1 << 2)
208 #define LSM303AGR_CTRL_REG2_A_FDS (1 << 3)
209 #define LSM303AGR_CTRL_REG2_A_HPCF1 (1 << 4)
210 #define LSM303AGR_CTRL_REG2_A_HPCF2 (1 << 5)
211 #define LSM303AGR_CTRL_REG2_A_HPM0 (1 << 6)
212 #define LSM303AGR_CTRL_REG2_A_HPM1 (1 << 7)
219 #define LSM303AGR_CTRL_REG3_A_I1_OVERRUN (1 << 1)
220 #define LSM303AGR_CTRL_REG3_A_I1_WTM (1 << 2)
221 #define LSM303AGR_CTRL_REG3_A_I1_DRDY2 (1 << 3)
222 #define LSM303AGR_CTRL_REG3_A_I1_DRDY1 (1 << 4)
223 #define LSM303AGR_CTRL_REG3_A_I1_AOI2 (1 << 5)
224 #define LSM303AGR_CTRL_REG3_A_I1_AOI1 (1 << 6)
225 #define LSM303AGR_CTRL_REG3_A_I1_CLICK (1 << 7)
232 #define LSM303AGR_CTRL_REG4_A_SPI_ENABLE (1 << 0)
233 #define LSM303AGR_CTRL_REG4_A_ST0 (1 << 1)
234 #define LSM303AGR_CTRL_REG4_A_ST1 (1 << 2)
235 #define LSM303AGR_CTRL_REG4_A_HR (1 << 3)
236 #define LSM303AGR_CTRL_REG4_A_FS_MASK 0x30
237 #define LSM303AGR_CTRL_REG4_A_FS0 (1 << 4)
238 #define LSM303AGR_CTRL_REG4_A_FS1 (1 << 5)
239 #define LSM303AGR_CTRL_REG4_A_BLE (1 << 6)
240 #define LSM303AGR_CTRL_REG4_A_BDU (1 << 7)
247 #define LSM303AGR_CTRL_REG5_A_D4D_INT2 (1 << 0)
248 #define LSM303AGR_CTRL_REG5_A_LIR_INT2 (1 << 1)
249 #define LSM303AGR_CTRL_REG5_A_D4D_INT1 (1 << 2)
250 #define LSM303AGR_CTRL_REG5_A_LIR_INT1 (1 << 3)
251 #define LSM303AGR_CTRL_REG5_A_FIFO_EN (1 << 6)
252 #define LSM303AGR_CTRL_REG5_A_BOOT (1 << 7)
259 #define LSM303AGR_CTRL_REG6_A_H_LACTIVE (1 << 1)
260 #define LSM303AGR_CTRL_REG6_A_P2_ACT (1 << 3)
261 #define LSM303AGR_CTRL_REG6_A_BOOT_I2 (1 << 4)
262 #define LSM303AGR_CTRL_REG6_A_I2_INT2 (1 << 5)
263 #define LSM303AGR_CTRL_REG6_A_I2_INT1 (1 << 6)
264 #define LSM303AGR_CTRL_REG6_A_I2_CLICKEN (1 << 7)
271 #define LSM303AGR_CFG_REG_A_M_MD0 (1 << 0)
272 #define LSM303AGR_CFG_REG_A_M_MD1 (1 << 1)
273 #define LSM303AGR_CFG_REG_A_M_ODR0 (1 << 2)
274 #define LSM303AGR_CFG_REG_A_M_ODR1 (1 << 3)
275 #define LSM303AGR_CFG_REG_A_M_LP (1 << 4)
276 #define LSM303AGR_CFG_REG_A_M_SOFT_RST (1 << 5)
277 #define LSM303AGR_CFG_REG_A_M_REBOOT (1 << 6)
278 #define LSM303AGR_CFG_REG_A_M_COMP_TEMP_EN (1 << 7)
285 #define LSM303AGR_CFG_REG_B_M_LPF (1 << 0)
286 #define LSM303AGR_CFG_REG_B_M_OFF_CANC (1 << 1)
287 #define LSM303AGR_CFG_REG_B_M_SET_FREQ (1 << 2)
288 #define LSM303AGR_CFG_REG_B_M_INT_ON (1 << 3)
289 #define LSM303AGR_CFG_REG_B_M_OFF_CANC_OS (1 << 4)
296 #define LSM303AGR_CFG_REG_C_M_INT_MAG (1 << 0)
297 #define LSM303AGR_CFG_REG_C_M_SELF_TEST (1 << 1)
298 #define LSM303AGR_CFG_REG_C_M_BLE (1 << 3)
299 #define LSM303AGR_CFG_REG_C_M_BDU (1 << 4)
300 #define LSM303AGR_CFG_REG_C_M_I2C_DIS (1 << 5)
301 #define LSM303AGR_CFG_REG_C_M_INT_MAG_PIN (1 << 6)
317 #if !defined(LSM303AGR_USE_SPI) || defined(__DOXYGEN__)
318 #define LSM303AGR_USE_SPI FALSE
327 #if !defined(LSM303AGR_SHARED_SPI) || defined(__DOXYGEN__)
328 #define LSM303AGR_SHARED_SPI FALSE
336 #if !defined(LSM303AGR_USE_I2C) || defined(__DOXYGEN__)
337 #define LSM303AGR_USE_I2C TRUE
346 #if !defined(LSM303AGR_SHARED_I2C) || defined(__DOXYGEN__)
347 #define LSM303AGR_SHARED_I2C FALSE
355 #if !defined(LSM303AGR_USE_ADVANCED) || defined(__DOXYGEN__)
356 #define LSM303AGR_USE_ADVANCED FALSE
364 #if !(LSM303AGR_USE_SPI ^ LSM303AGR_USE_I2C)
365 #error "LSM303AGR_USE_SPI and LSM303AGR_USE_I2C cannot be both true or both false"
368 #if LSM303AGR_USE_SPI && !HAL_USE_SPI
369 #error "LSM303AGR_USE_SPI requires HAL_USE_SPI"
372 #if LSM303AGR_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION
373 #error "LSM303AGR_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION"
376 #if LSM303AGR_USE_I2C && !HAL_USE_I2C
377 #error "LSM303AGR_USE_I2C requires HAL_USE_I2C"
380 #if LSM303AGR_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION
381 #error "LSM303AGR_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION"
387 #if LSM303AGR_USE_SPI
388 #error "LSM303AGR over SPI still not supported"
543 #if LSM303AGR_USE_ADVANCED || defined(__DOXYGEN__)
569 #if LSM303AGR_USE_ADVANCED || defined(__DOXYGEN__)
584 #define _lsm303agr_methods_alone \
586 msg_t (*acc_set_full_scale)(LSM303AGRDriver *devp, \
587 lsm303agr_acc_fs_t fs);
592 #define _lsm303agr_methods \
593 _base_object_methods \
594 _lsm303agr_methods_alone
608 #define _lsm303agr_data \
611 lsm303agr_state_t state; \
613 const LSM303AGRConfig *config; \
617 float accsensitivity[LSM303AGR_ACC_NUMBER_OF_AXES]; \
619 float accbias[LSM303AGR_ACC_NUMBER_OF_AXES]; \
621 float accfullscale; \
625 float compsensitivity[LSM303AGR_COMP_NUMBER_OF_AXES]; \
627 float compbias[LSM303AGR_COMP_NUMBER_OF_AXES]; \
658 #define lsm303agrAccelerometerGetAxesNumber(devp) \
659 accelerometerGetAxesNumber(&((devp)->acc_if))
679 #define lsm303agrAccelerometerReadRaw(devp, axes) \
680 accelerometerReadRaw(&((devp)->acc_if), axes)
701 #define lsm303agrAccelerometerReadCooked(devp, axes) \
702 accelerometerReadCooked(&((devp)->acc_if), axes)
718 #define lsm303agrAccelerometerSetBias(devp, bp) \
719 accelerometerSetBias(&((devp)->acc_if), bp)
733 #define lsm303agrAccelerometerResetBias(devp) \
734 accelerometerResetBias(&((devp)->acc_if))
750 #define lsm303agrAccelerometerSetSensitivity(devp, sp) \
751 accelerometerSetSensitivity(&((devp)->acc_if), sp)
765 #define lsm303agrAccelerometerResetSensitivity(devp) \
766 accelerometerResetSensitivity(&((devp)->acc_if))
783 #define lsm303agrAccelerometerSetFullScale(devp, fs) \
784 (devp)->vmt->acc_set_full_scale(devp, fs)
795 #define lsm303agrCompassGetAxesNumber(devp) \
796 compassGetAxesNumber(&((devp)->comp_if))
816 #define lsm303agrCompassReadRaw(devp, axes) \
817 compassReadRaw(&((devp)->comp_if), axes)
838 #define lsm303agrCompassReadCooked(devp, axes) \
839 compassReadCooked(&((devp)->comp_if), axes)
855 #define lsm303agrCompassSetBias(devp, bp) \
856 compassSetBias(&((devp)->comp_if), bp)
870 #define lsm303agrCompassResetBias(devp) \
871 compassResetBias(&((devp)->comp_if))
887 #define lsm303agrCompassSetSensitivity(devp, sp) \
888 compassSetSensitivity(&((devp)->comp_if), sp)
902 #define lsm303agrCompassResetSensitivity(devp) \
903 compassResetSensitivity(&((devp)->comp_if))
I2CDriver * i2cp
I2C driver associated to this LSM303AGR.
BaseCompass comp_if
Base compass interface.
void lsm303agrStop(LSM303AGRDriver *devp)
Deactivates the LSM303AGR Complex Driver peripheral.
@ LSM303AGR_COMP_ODR_50HZ
@ LSM303AGR_COMP_ODR_20HZ
@ LSM303AGR_COMP_MODE_IDLE
float * compbias
LSM303AGR compass initial bias.
@ LSM303AGR_ACC_ODR_100Hz
lsm303agr_comp_mode_t compmode
LSM303AGR compass subsystem working mode.
void lsm303agrObjectInit(LSM303AGRDriver *devp)
Initializes an instance.
lsm303agr_acc_end_t
LSM303AGR accelerometer endianness.
float * accbias
LSM303AGR accelerometer subsystem initial bias.
const struct LSM303AGRVMT * vmt
Virtual Methods Table.
lsm303agr_comp_lpow_t complp
LSM303AGR compass subsystem lowpower mode.
lsm303agr_comp_odr_t compoutputdatarate
LSM303AGR compass subsystem output data rate.
lsm303agr_acc_bdu_t accblockdataupdate
LSM303AGR accelerometer subsystem block data update.
@ LSM303AGR_COMP_LPOW_DIS
Base accelerometer class.
Generic accelerometer interface header.
float * compsensitivity
LSM303AGR compass initial sensitivity.
lsm303agr_acc_bdu_t
LSM303AGR accelerometer subsystem block data update.
lsm303agr_acc_fs_t
LSM303AGR accelerometer subsystem full scale.
#define _lsm303agr_methods
LSM303AGR specific methods with inherited ones.
BaseAccelerometer acc_if
Base accelerometer interface.
lsm303agr_state_t
Driver state machine possible states.
LSM303AGR 6-axis accelerometer/compass class.
lsm303agr_acc_mode_t
LSM303AGR accelerometer subsystem operation mode.
lsm303agr_acc_odr_t
LSM303AGR accelerometer subsystem output data rate.
lsm303agr_comp_mode_t
LSM303AGR compass subsystem working mode.
lsm303agr_comp_odr_t
LSM303AGR compass subsystem output data rate.
const I2CConfig * i2ccfg
I2C configuration associated to this LSM303AGR.
void lsm303agrStart(LSM303AGRDriver *devp, const LSM303AGRConfig *config)
Configures and activates LSM303AGR Complex Driver peripheral.
lsm303agr_acc_mode_t accmode
LSM303AGR accelerometer subsystem mode.
LSM303AGR virtual methods table.
lsm303agr_acc_odr_t accoutdatarate
LSM303AGR accelerometer subsystem output data rate.
@ LSM303AGR_COMP_ODR_100HZ
@ LSM303AGR_ACC_ODR_400Hz
float * accsensitivity
LSM303AGR accelerometer subsystem initial sensitivity.
@ LSM303AGR_ACC_ODR_1620Hz
@ LSM303AGR_ACC_BDU_BLOCK
lsm303agr_acc_end_t accendianess
LSM303AGR accelerometer endianness.
@ LSM303AGR_COMP_ODR_10HZ
@ LSM303AGR_COMP_MODE_SINGLE
lsm303agr_comp_lpow_t
LSM303AGR compass subsystem working mode.
Generic compass interface header.
lsm303agr_acc_fs_t accfullscale
LSM303AGR accelerometer subsystem initial full scale.
lsm303agr_acc_ae_t
LSM303AGR accelerometer subsystem axes enabling.
@ LSM303AGR_ACC_MODE_NORM
@ LSM303AGR_ACC_MODE_HRES
@ LSM303AGR_ACC_ODR_1344Hz
@ LSM303AGR_ACC_END_LITTLE
@ LSM303AGR_ACC_MODE_LPOW
@ LSM303AGR_ACC_ODR_200Hz
LSM303AGR configuration structure.
#define _lsm303agr_data
LSM303AGRDriver specific data.
@ LSM303AGR_ACC_AE_DISABLED
@ LSM303AGR_COMP_MODE_NORM