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.