46#define EX_LSM303AGR_VERSION "1.0.2"
51#define EX_LSM303AGR_MAJOR 1
56#define EX_LSM303AGR_MINOR 0
61#define EX_LSM303AGR_PATCH 2
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"
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))
Generic accelerometer interface header.
Generic compass interface header.
struct hal_i2c_config I2CConfig
Type of a structure representing an I2C configuration.
struct hal_i2c_driver I2CDriver
Type of a structure representing an I2C driver.
lsm303agr_comp_lpow_t
LSM303AGR compass subsystem working mode.
void lsm303agrObjectInit(LSM303AGRDriver *devp)
Initializes an instance.
lsm303agr_acc_ae_t
LSM303AGR accelerometer subsystem axes enabling.
void lsm303agrStart(LSM303AGRDriver *devp, const LSM303AGRConfig *config)
Configures and activates LSM303AGR Complex Driver peripheral.
void lsm303agrStop(LSM303AGRDriver *devp)
Deactivates the LSM303AGR Complex Driver peripheral.
lsm303agr_state_t
Driver state machine possible states.
lsm303agr_acc_end_t
LSM303AGR accelerometer endianness.
lsm303agr_acc_fs_t
LSM303AGR accelerometer subsystem full scale.
lsm303agr_acc_mode_t
LSM303AGR accelerometer subsystem operation mode.
lsm303agr_acc_odr_t
LSM303AGR accelerometer subsystem output data rate.
#define _lsm303agr_data
LSM303AGRDriver specific data.
lsm303agr_comp_odr_t
LSM303AGR compass subsystem output data rate.
#define _lsm303agr_methods
LSM303AGR specific methods with inherited ones.
lsm303agr_acc_bdu_t
LSM303AGR accelerometer subsystem block data update.
lsm303agr_comp_mode_t
LSM303AGR compass subsystem working mode.
@ LSM303AGR_COMP_LPOW_DIS
@ LSM303AGR_ACC_AE_DISABLED
@ LSM303AGR_ACC_END_LITTLE
@ LSM303AGR_ACC_MODE_NORM
@ LSM303AGR_ACC_MODE_HRES
@ LSM303AGR_ACC_MODE_LPOW
@ LSM303AGR_ACC_ODR_100Hz
@ LSM303AGR_ACC_ODR_200Hz
@ LSM303AGR_ACC_ODR_400Hz
@ LSM303AGR_ACC_ODR_1344Hz
@ LSM303AGR_ACC_ODR_1620Hz
@ LSM303AGR_COMP_ODR_50HZ
@ LSM303AGR_COMP_ODR_10HZ
@ LSM303AGR_COMP_ODR_20HZ
@ LSM303AGR_COMP_ODR_100HZ
@ LSM303AGR_ACC_BDU_BLOCK
@ LSM303AGR_COMP_MODE_SINGLE
@ LSM303AGR_COMP_MODE_IDLE
@ LSM303AGR_COMP_MODE_NORM
Base accelerometer class.
LSM303AGR configuration structure.
lsm303agr_comp_lpow_t complp
LSM303AGR compass subsystem lowpower mode.
lsm303agr_acc_end_t accendianess
LSM303AGR accelerometer endianness.
lsm303agr_acc_mode_t accmode
LSM303AGR accelerometer subsystem mode.
float * accsensitivity
LSM303AGR accelerometer subsystem initial sensitivity.
lsm303agr_acc_odr_t accodr
LSM303AGR accelerometer subsystem output data rate.
float * compsensitivity
LSM303AGR compass initial sensitivity.
lsm303agr_acc_bdu_t accbdu
LSM303AGR accelerometer subsystem block data update.
const I2CConfig * i2ccfg
I2C configuration associated to this LSM303AGR.
I2CDriver * i2cp
I2C driver associated to this LSM303AGR.
lsm303agr_comp_mode_t compmode
LSM303AGR compass subsystem working mode.
float * compbias
LSM303AGR compass initial bias.
float * accbias
LSM303AGR accelerometer subsystem initial bias.
lsm303agr_comp_odr_t compodr
LSM303AGR compass subsystem output data rate.
lsm303agr_acc_fs_t accfullscale
LSM303AGR accelerometer subsystem initial full scale.
LSM303AGR 6-axis accelerometer/compass class.
BaseAccelerometer acc_if
Base accelerometer interface.
BaseCompass comp_if
Base compass interface.
const struct LSM303AGRVMT * vmt
Virtual Methods Table.
LSM303AGR virtual methods table.