Go to the documentation of this file.
45 #define EX_LIS3MDL_VERSION "1.1.2"
50 #define EX_LIS3MDL_MAJOR 1
55 #define EX_LIS3MDL_MINOR 1
60 #define EX_LIS3MDL_PATCH 2
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_USE_ADVANCED) || defined(__DOXYGEN__)
233 #define LIS3MDL_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_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_fs_t
LIS3MDL full scale.
lis3mdl_comp_lp_t complowpowermode
LIS3MDL compass subsystem low power mode configuration.
Structure representing an I2C driver.
@ LIS3MDL_COMP_OMXY_ULTRA
const struct LIS3MDLVMT * vmt
Virtual Methods Table.
lis3mdl_comp_omxy_t compoperationmodexy
LIS3MDL compass subsystem operation mode for X and Y axes.
@ LIS3MDL_COMP_OMZ_MEDIUM
@ LIS3MDL_COMP_ODR_0_625HZ
const I2CConfig * i2ccfg
I2C configuration associated to this LIS3MDL.
lis3mdl_comp_omz_t compoperationmodez
LIS3MDL compass subsystem operation mode for Z axis.
lis3mdl_comp_omz_t
LIS3MDL operation mode for Z axis.
Driver configuration structure.
Structure representing an SPI driver.
lis3mdl_comp_fs_t compfullscale
LIS3MDL compass subsystem full scale.
@ LIS3MDL_COMP_MD_CONTINUOUS
float * compsensitivity
LIS3MDL compass subsystem initial sensitivity.
@ LIS3MDL_COMP_ODR_1_25HZ
const SPIConfig * spicfg
SPI configuration associated to this LIS3MDL.
lis3mdl_comp_md_t compconversionmode
LIS3MDL compass subsystem conversion mode.
SPIDriver * spip
SPI driver associated to this LIS3MDL.
lis3mdl_sad_t slaveaddress
LIS3MDL slave address.
lis3mdl_temp_t
LIS3MDL temperature sensor enabling.
@ LIS3MDL_COMP_LP_DISABLED
lis3mdl_state_t
Driver state machine possible states.
#define _lis3mdl_methods
LIS3MDL specific methods with inherited ones.
lis3mdl_bdu_t
LIS3MDL block data update.
lis3mdl_comp_md_t
LIS3MDL conversion mode.
LIS3MDL configuration structure.
BaseCompass comp_if
Base compass interface.
lis3mdl_comp_odr_t compoutputdatarate
LIS3MDL compass subsystem output data rate.
I2CDriver * i2cp
I2C driver associated to this LIS3MDL.
lis3mdl_bdu_t blockdataupdate
LIS3MDL block data update.
@ LIS3MDL_COMP_LP_ENABLED
lis3mdl_end_t
LIS3MDL endianness.
void lis3mdlStart(LIS3MDLDriver *devp, const LIS3MDLConfig *config)
Configures and activates LIS3MDL Complex Driver peripheral.
LIS3MDL virtual methods table.
lis3mdl_comp_odr_t
LIS3MDL output data rate.
void lis3mdlObjectInit(LIS3MDLDriver *devp)
Initializes an instance.
#define _lis3mdl_data
LIS3MDLDriver specific data.
Generic compass interface header.
float * compbias
LIS3MDL compass subsystem initial bias.
lis3mdl_end_t endianness
LIS3MDL endianness.
@ LIS3MDL_COMP_MD_POWER_DOWN
LIS3MDL 3-axis compass class.
lis3mdl_comp_omxy_t
LIS3MDL operation mode for X and Y axes.
Type of I2C driver configuration structure.
void lis3mdlStop(LIS3MDLDriver *devp)
Deactivates the LIS3MDL Complex Driver peripheral.
@ LIS3MDL_COMP_OMXY_MEDIUM
lis3mdl_comp_lp_t
LIS3MDL low power mode configuration.
lis3mdl_sad_t
LIS3MDL slave address.