45 #define EX_LIS3MDL_VERSION "1.1.1" 50 #define EX_LIS3MDL_MAJOR 1 55 #define EX_LIS3MDL_MINOR 1 60 #define EX_LIS3MDL_PATCH 1 70 #define LIS3MDL_COMP_NUMBER_OF_AXES 3U 72 #define LIS3MDL_COMP_4GA 4.0f 73 #define LIS3MDL_COMP_8GA 8.0f 74 #define LIS3MDL_COMP_12GA 12.0f 75 #define LIS3MDL_COMP_16GA 16.0f 77 #define LIS3MDL_COMP_SENS_4GA 0.00014615f 78 #define LIS3MDL_COMP_SENS_8GA 0.00029231f 79 #define LIS3MDL_COMP_SENS_12GA 0.0004384f 80 #define LIS3MDL_COMP_SENS_16GA 0.00058445f 82 #define LIS3MDL_COMP_BIAS 0.0f 89 #define LIS3MDL_DI_MASK 0xFF 90 #define LIS3MDL_DI(n) (1 << n) 91 #define LIS3MDL_AD_MASK 0x3F 92 #define LIS3MDL_AD(n) (1 << n) 93 #define LIS3MDL_MS (1 << 6) 94 #define LIS3MDL_RW (1 << 7) 96 #define LIS3MDL_SUB_MS (1 << 7) 103 #define LIS3MDL_AD_WHO_AM_I 0x0F 104 #define LIS3MDL_AD_CTRL_REG1 0x20 105 #define LIS3MDL_AD_CTRL_REG2 0x21 106 #define LIS3MDL_AD_CTRL_REG3 0x22 107 #define LIS3MDL_AD_CTRL_REG4 0x23 108 #define LIS3MDL_AD_CTRL_REG5 0x24 109 #define LIS3MDL_AD_STATUS_REG 0x27 110 #define LIS3MDL_AD_OUT_X_L 0x28 111 #define LIS3MDL_AD_OUT_X_H 0x29 112 #define LIS3MDL_AD_OUT_Y_L 0x2A 113 #define LIS3MDL_AD_OUT_Y_H 0x2B 114 #define LIS3MDL_AD_OUT_Z_L 0x2C 115 #define LIS3MDL_AD_OUT_Z_H 0x2D 116 #define LIS3MDL_AD_TEMP_OUT_L 0x2E 117 #define LIS3MDL_AD_TEMP_OUT_H 0x2F 118 #define LIS3MDL_AD_INT_CFG 0x30 119 #define LIS3MDL_AD_INT_SOURCE 0x31 120 #define LIS3MDL_AD_INT_THS_L 0x32 121 #define LIS3MDL_AD_INT_THS_H 0x33 128 #define LIS3MDL_CTRL_REG1_MASK 0xFF 129 #define LIS3MDL_CTRL_REG1_ST (1 << 0) 130 #define LIS3MDL_CTRL_REG1_FAST_ODR (1 << 1) 131 #define LIS3MDL_CTRL_REG1_DO0 (1 << 2) 132 #define LIS3MDL_CTRL_REG1_DO1 (1 << 3) 133 #define LIS3MDL_CTRL_REG1_DO2 (1 << 4) 134 #define LIS3MDL_CTRL_REG1_OM0 (1 << 5) 135 #define LIS3MDL_CTRL_REG1_OM1 (1 << 6) 136 #define LIS3MDL_CTRL_REG1_TEMP_EN (1 << 7) 143 #define LIS3MDL_CTRL_REG2_MASK 0x6C 144 #define LIS3MDL_CTRL_REG2_SOFT_RST (1 << 2) 145 #define LIS3MDL_CTRL_REG2_REBOOT (1 << 3) 146 #define LIS3MDL_CTRL_REG2_FS_MASK 0x60 147 #define LIS3MDL_CTRL_REG2_FS0 (1 << 5) 148 #define LIS3MDL_CTRL_REG2_FS1 (1 << 6) 155 #define LIS3MDL_CTRL_REG3_MASK 0x27 156 #define LIS3MDL_CTRL_REG3_MD0 (1 << 0) 157 #define LIS3MDL_CTRL_REG3_MD1 (1 << 1) 158 #define LIS3MDL_CTRL_REG3_SIM (1 << 2) 159 #define LIS3MDL_CTRL_REG3_LP (1 << 5) 166 #define LIS3MDL_CTRL_REG4_MASK 0x0E 167 #define LIS3MDL_CTRL_REG4_BLE (1 << 1) 168 #define LIS3MDL_CTRL_REG4_OMZ0 (1 << 2) 169 #define LIS3MDL_CTRL_REG4_OMZ1 (1 << 3) 176 #define LIS3MDL_CTRL_REG5_MASK 0xC0 177 #define LIS3MDL_CTRL_REG5_BDU (1 << 6) 178 #define LIS3MDL_CTRL_REG5_FAST_READ (1 << 7) 194 #if !defined(LIS3MDL_USE_SPI) || defined(__DOXYGEN__) 195 #define LIS3MDL_USE_SPI FALSE 204 #if !defined(LIS3MDL_SHARED_SPI) || defined(__DOXYGEN__) 205 #define LIS3MDL_SHARED_SPI FALSE 213 #if !defined(LIS3MDL_USE_I2C) || defined(__DOXYGEN__) 214 #define LIS3MDL_USE_I2C TRUE 223 #if !defined(LIS3MDL_SHARED_I2C) || defined(__DOXYGEN__) 224 #define LIS3MDL_SHARED_I2C FALSE 232 #if !defined(LIS3MDL_COMP_USE_ADVANCED) || defined(__DOXYGEN__) 233 #define LIS3MDL_COMP_USE_ADVANCED FALSE 241 #if !(LIS3MDL_USE_SPI ^ LIS3MDL_USE_I2C) 242 #error "LIS3MDL_USE_SPI and LIS3MDL_USE_I2C cannot be both true or both false" 245 #if LIS3MDL_USE_SPI && !HAL_USE_SPI 246 #error "LIS3MDL_USE_SPI requires HAL_USE_SPI" 249 #if LIS3MDL_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION 250 #error "LIS3MDL_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION" 253 #if LIS3MDL_USE_I2C && !HAL_USE_I2C 254 #error "LIS3MDL_USE_I2C requires HAL_USE_I2C" 257 #if LIS3MDL_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION 258 #error "LIS3MDL_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION" 265 #error "LIS3MDL over SPI still not supported" 391 #if (LIS3MDL_USE_SPI) || defined(__DOXYGEN__) 401 #if (LIS3MDL_USE_I2C) || defined(__DOXYGEN__) 431 #if LIS3MDL_COMP_USE_ADVANCED || defined(__DOXYGEN__) 462 #define _lis3msl_methods_alone \ 464 msg_t (*comp_set_full_scale)(LIS3MDLDriver *devp, lis3mdl_comp_fs_t fs); 469 #define _lis3mdl_methods \ 470 _base_object_methods \ 471 _lis3msl_methods_alone 485 #define _lis3mdl_data \ 488 lis3mdl_state_t state; \ 490 const LIS3MDLConfig *config; \ 494 float compsensitivity[LIS3MDL_COMP_NUMBER_OF_AXES]; \ 496 float compbias[LIS3MDL_COMP_NUMBER_OF_AXES]; \ 525 #define lis3mdlCompassGetAxesNumber(devp) \ 526 compassGetAxesNumber(&((devp)->comp_if)) 546 #define lis3mdlCompassReadRaw(devp, axes) \ 547 compassReadRaw(&((devp)->comp_if), axes) 568 #define lis3mdlCompassReadCooked(devp, axes) \ 569 compassReadCooked(&((devp)->comp_if), axes) 585 #define lis3mdlCompassSetBias(devp, bp) \ 586 compassSetBias(&((devp)->comp_if), bp) 600 #define lis3mdlCompassResetBias(devp) \ 601 compassResetBias(&((devp)->comp_if)) 617 #define lis3mdlCompassSetSensitivity(devp, sp) \ 618 compassSetSensitivity(&((devp)->comp_if), sp) 632 #define lis3mdlCompassResetSensitivity(devp) \ 633 compassResetSensitivity(&((devp)->comp_if)) 650 #define lis3mdlCompassSetFullScale(devp, fs) \ 651 (devp)->vmt->comp_set_full_scale(devp, fs)
lis3mdl_comp_omxy_t
LIS3MDL operation mode for X and Y axes.
void lis3mdlStop(LIS3MDLDriver *devp)
Deactivates the LIS3MDL Complex Driver peripheral.
void lis3mdlObjectInit(LIS3MDLDriver *devp)
Initializes an instance.
lis3mdl_bdu_t blockdataupdate
LIS3MDL block data update.
lis3mdl_temp_t
LIS3MDL temperature sensor enabling.
lis3mdl_comp_fs_t
LIS3MDL full scale.
Type of I2C driver configuration structure.
#define _lis3mdl_data
LIS3MDLDriver specific data.
lis3mdl_end_t endianness
LIS3MDL endianness.
lis3mdl_comp_omxy_t compoperationmodexy
LIS3MDL compass subsystem operation mode for X and Y axes.
lis3mdl_comp_odr_t compoutputdatarate
LIS3MDL compass subsystem output data rate.
lis3mdl_comp_odr_t
LIS3MDL output data rate.
lis3mdl_comp_fs_t compfullscale
LIS3MDL compass subsystem full scale.
lis3mdl_comp_md_t compconversionmode
LIS3MDL compass subsystem conversion mode.
lis3mdl_comp_lp_t
LIS3MDL low power mode configuration.
lis3mdl_end_t
LIS3MDL endianness.
LIS3MDL configuration structure.
lis3mdl_comp_lp_t complowpowermode
LIS3MDL compass subsystem low power mode configuration.
Structure representing an I2C driver.
float * compbias
LIS3MDL compass subsystem initial bias.
lis3mdl_sad_t
LIS3MDL slave address.
Driver configuration structure.
lis3mdl_bdu_t
LIS3MDL block data update.
#define _lis3mdl_methods
LIS3MDL specific methods with inherited ones.
SPIDriver * spip
SPI driver associated to this LIS3MDL.
lis3mdl_comp_md_t
LIS3MDL conversion mode.
Generic compass interface header.
lis3mdl_state_t
Driver state machine possible states.
const SPIConfig * spicfg
SPI configuration associated to this LIS3MDL.
float * compsensitivity
LIS3MDL compass subsystem initial sensitivity.
void lis3mdlStart(LIS3MDLDriver *devp, const LIS3MDLConfig *config)
Configures and activates LIS3MDL Complex Driver peripheral.
const struct LIS3MDLVMT * vmt
Virtual Methods Table.
const I2CConfig * i2ccfg
I2C configuration associated to this LIS3MDL.
lis3mdl_comp_omz_t compoperationmodez
LIS3MDL compass subsystem operation mode for Z axis.
BaseCompass comp_if
Base compass interface.
lis3mdl_sad_t slaveaddress
LIS3MDL slave address.
lis3mdl_comp_omz_t
LIS3MDL operation mode for Z axis.
LIS3MDL 3-axis compass class.
LIS3MDL virtual methods table.
Structure representing an SPI driver.
I2CDriver * i2cp
I2C driver associated to this LIS3MDL.