46 #define EX_LSM303AGR_VERSION "1.0.0" 51 #define EX_LSM303AGR_MAJOR 1 56 #define EX_LSM303AGR_MINOR 0 61 #define EX_LSM303AGR_PATCH 0 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 356 #if !defined(LSM303AGR_ACC_USE_ADVANCED) || defined(__DOXYGEN__) 357 #define LSM303AGR_ACC_USE_ADVANCED FALSE 366 #if !defined(LSM303AGR_COMP_USE_ADVANCED) || defined(__DOXYGEN__) 367 #define LSM303AGR_COMP_USE_ADVANCED FALSE 375 #if !(LSM303AGR_USE_SPI ^ LSM303AGR_USE_I2C) 376 #error "LSM303AGR_USE_SPI and LSM303AGR_USE_I2C cannot be both true or both false" 379 #if LSM303AGR_USE_SPI && !HAL_USE_SPI 380 #error "LSM303AGR_USE_SPI requires HAL_USE_SPI" 383 #if LSM303AGR_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION 384 #error "LSM303AGR_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION" 387 #if LSM303AGR_USE_I2C && !HAL_USE_I2C 388 #error "LSM303AGR_USE_I2C requires HAL_USE_I2C" 391 #if LSM303AGR_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION 392 #error "LSM303AGR_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION" 398 #if LSM303AGR_USE_SPI 399 #error "LSM303AGR over SPI still not supported" 552 #if LSM303AGR_ACC_USE_ADVANCED || defined(__DOXYGEN__) 578 #if LSM303AGR_COMP_USE_ADVANCED || defined(__DOXYGEN__) 593 #define _lsm303agr_methods_alone \ 595 msg_t (*acc_set_full_scale)(LSM303AGRDriver *devp, \ 596 lsm303agr_acc_fs_t fs); 601 #define _lsm303agr_methods \ 602 _base_object_methods \ 603 _lsm303agr_methods_alone 617 #define _lsm303agr_data \ 620 lsm303agr_state_t state; \ 622 const LSM303AGRConfig *config; \ 626 float accsensitivity[LSM303AGR_ACC_NUMBER_OF_AXES]; \ 628 float accbias[LSM303AGR_ACC_NUMBER_OF_AXES]; \ 630 float accfullscale; \ 634 float compsensitivity[LSM303AGR_COMP_NUMBER_OF_AXES]; \ 636 float compbias[LSM303AGR_COMP_NUMBER_OF_AXES]; \ 667 #define lsm303agrAccelerometerGetAxesNumber(devp) \ 668 accelerometerGetAxesNumber(&((devp)->acc_if)) 688 #define lsm303agrAccelerometerReadRaw(devp, axes) \ 689 accelerometerReadRaw(&((devp)->acc_if), axes) 710 #define lsm303agrAccelerometerReadCooked(devp, axes) \ 711 accelerometerReadCooked(&((devp)->acc_if), axes) 727 #define lsm303agrAccelerometerSetBias(devp, bp) \ 728 accelerometerSetBias(&((devp)->acc_if), bp) 742 #define lsm303agrAccelerometerResetBias(devp) \ 743 accelerometerResetBias(&((devp)->acc_if)) 759 #define lsm303agrAccelerometerSetSensitivity(devp, sp) \ 760 accelerometerSetSensitivity(&((devp)->acc_if), sp) 774 #define lsm303agrAccelerometerResetSensitivity(devp) \ 775 accelerometerResetSensitivity(&((devp)->acc_if)) 792 #define lsm303agrAccelerometerSetFullScale(devp, fs) \ 793 (devp)->vmt->acc_set_full_scale(devp, fs) 804 #define lsm303agrCompassGetAxesNumber(devp) \ 805 compassGetAxesNumber(&((devp)->comp_if)) 825 #define lsm303agrCompassReadRaw(devp, axes) \ 826 compassReadRaw(&((devp)->comp_if), axes) 847 #define lsm303agrCompassReadCooked(devp, axes) \ 848 compassReadCooked(&((devp)->comp_if), axes) 864 #define lsm303agrCompassSetBias(devp, bp) \ 865 compassSetBias(&((devp)->comp_if), bp) 879 #define lsm303agrCompassResetBias(devp) \ 880 compassResetBias(&((devp)->comp_if)) 896 #define lsm303agrCompassSetSensitivity(devp, sp) \ 897 compassSetSensitivity(&((devp)->comp_if), sp) 911 #define lsm303agrCompassResetSensitivity(devp) \ 912 compassResetSensitivity(&((devp)->comp_if))
void lsm303agrStop(LSM303AGRDriver *devp)
Deactivates the LSM303AGR Complex Driver peripheral.
const struct LSM303AGRVMT * vmt
Virtual Methods Table.
lsm303agr_acc_end_t
LSM303AGR accelerometer endianness.
lsm303agr_comp_mode_t compmode
LSM303AGR compass subsystem working mode.
float * compbias
LSM303AGR compass initial bias.
void lsm303agrObjectInit(LSM303AGRDriver *devp)
Initializes an instance.
lsm303agr_acc_mode_t
LSM303AGR accelerometer subsystem operation mode.
Type of I2C driver configuration structure.
lsm303agr_comp_lpow_t complp
LSM303AGR compass subsystem lowpower mode.
lsm303agr_comp_odr_t compoutputdatarate
LSM303AGR compass subsystem output data rate.
float * accbias
LSM303AGR accelerometer subsystem initial bias.
lsm303agr_acc_bdu_t accblockdataupdate
LSM303AGR accelerometer subsystem block data update.
float * compsensitivity
LSM303AGR compass initial sensitivity.
lsm303agr_acc_odr_t
LSM303AGR accelerometer subsystem output data rate.
LSM303AGR 6-axis accelerometer/compass class.
lsm303agr_comp_lpow_t
LSM303AGR compass subsystem working mode.
#define _lsm303agr_methods
LSM303AGR specific methods with inherited ones.
lsm303agr_comp_odr_t
LSM303AGR compass subsystem output data rate.
lsm303agr_comp_mode_t
LSM303AGR compass subsystem working mode.
lsm303agr_acc_ae_t
LSM303AGR accelerometer subsystem axes enabling.
BaseAccelerometer acc_if
Base accelerometer interface.
Structure representing an I2C driver.
const I2CConfig * i2ccfg
I2C configuration associated to this LSM303AGR.
LSM303AGR virtual methods table.
lsm303agr_acc_mode_t accmode
LSM303AGR accelerometer subsystem mode.
lsm303agr_acc_odr_t accoutdatarate
LSM303AGR accelerometer subsystem output data rate.
Generic accelerometer interface header.
lsm303agr_acc_fs_t
LSM303AGR accelerometer subsystem full scale.
lsm303agr_acc_bdu_t
LSM303AGR accelerometer subsystem block data update.
float * accsensitivity
LSM303AGR accelerometer subsystem initial sensitivity.
lsm303agr_acc_end_t accendianess
LSM303AGR accelerometer endianness.
Generic compass interface header.
lsm303agr_state_t
Driver state machine possible states.
lsm303agr_acc_fs_t accfullscale
LSM303AGR accelerometer subsystem initial full scale.
LSM303AGR configuration structure.
void lsm303agrStart(LSM303AGRDriver *devp, const LSM303AGRConfig *config)
Configures and activates LSM303AGR Complex Driver peripheral.
#define _lsm303agr_data
LSM303AGRDriver specific data.
BaseCompass comp_if
Base compass interface.
Base accelerometer class.
I2CDriver * i2cp
I2C driver associated to this LSM303AGR.