47#define DRV_LITTLE_ENDIAN 1234
48#define DRV_BIG_ENDIAN 4321
54#define DRV_BYTE_ORDER DRV_LITTLE_ENDIAN
58#define DRV_LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
59#define DRV_BIG_ENDIAN __ORDER_BIG_ENDIAN__
60#define DRV_BYTE_ORDER __BYTE_ORDER__
75#ifndef MEMS_SHARED_TYPES
76#define MEMS_SHARED_TYPES
80#if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
89#elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
101#define PROPERTY_DISABLE (0U)
102#define PROPERTY_ENABLE (1U)
134#ifndef MEMS_UCF_SHARED_TYPES
135#define MEMS_UCF_SHARED_TYPES
172#define LIS2MDL_I2C_ADD 0x3DU
175#define LIS2MDL_ID 0x40U
182#define LIS2MDL_OFFSET_X_REG_L 0x45U
183#define LIS2MDL_OFFSET_X_REG_H 0x46U
184#define LIS2MDL_OFFSET_Y_REG_L 0x47U
185#define LIS2MDL_OFFSET_Y_REG_H 0x48U
186#define LIS2MDL_OFFSET_Z_REG_L 0x49U
187#define LIS2MDL_OFFSET_Z_REG_H 0x4AU
188#define LIS2MDL_WHO_AM_I 0x4FU
189#define LIS2MDL_CFG_REG_A 0x60U
192#if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
199#elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
200 uint8_t comp_temp_en : 1;
202 uint8_t soft_rst : 1;
209#define LIS2MDL_CFG_REG_B 0x61U
212#if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
218#elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
219 uint8_t not_used_01 : 3;
220 uint8_t off_canc_one_shot : 1;
221 uint8_t int_on_dataoff : 1;
227#define LIS2MDL_CFG_REG_C 0x62U
230#if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
239#elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
240 uint8_t not_used_02 : 1;
241 uint8_t int_on_pin : 1;
246 uint8_t self_test : 1;
247 uint8_t drdy_on_pin : 1;
251#define LIS2MDL_INT_CRTL_REG 0x63U
254#if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
262#elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
266 uint8_t not_used_01 : 2;
273#define LIS2MDL_INT_SOURCE_REG 0x64U
276#if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
285#elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
286 uint8_t p_th_s_x : 1;
287 uint8_t p_th_s_y : 1;
288 uint8_t p_th_s_z : 1;
289 uint8_t n_th_s_x : 1;
290 uint8_t n_th_s_y : 1;
291 uint8_t n_th_s_z : 1;
297#define LIS2MDL_INT_THS_L_REG 0x65U
298#define LIS2MDL_INT_THS_H_REG 0x66U
299#define LIS2MDL_STATUS_REG 0x67U
302#if DRV_BYTE_ORDER == DRV_LITTLE_ENDIAN
311#elif DRV_BYTE_ORDER == DRV_BIG_ENDIAN
323#define LIS2MDL_OUTX_L_REG 0x68U
324#define LIS2MDL_OUTX_H_REG 0x69U
325#define LIS2MDL_OUTY_L_REG 0x6AU
326#define LIS2MDL_OUTY_H_REG 0x6BU
327#define LIS2MDL_OUTZ_L_REG 0x6CU
328#define LIS2MDL_OUTZ_H_REG 0x6DU
329#define LIS2MDL_TEMP_OUT_L_REG 0x6EU
330#define LIS2MDL_TEMP_OUT_H_REG 0x6FU
362#define __weak __attribute__((weak))
void(* stmdev_mdelay_ptr)(uint32_t millisec)
int32_t(* stmdev_read_ptr)(void *, uint8_t, uint8_t *, uint16_t)
int32_t(* stmdev_write_ptr)(void *, uint8_t, const uint8_t *, uint16_t)
int32_t lis2mdl_offset_temp_comp_get(const stmdev_ctx_t *ctx, uint8_t *val)
Enables the magnetometer temperature compensation.[get].
int32_t lis2mdl_int_gen_threshold_set(const stmdev_ctx_t *ctx, uint16_t val)
User-defined threshold value for xl interrupt event on generator. Data format is the same of output d...
int32_t lis2mdl_mag_user_offset_get(const stmdev_ctx_t *ctx, int16_t *val)
These registers comprise a 3 group of 16-bit number and represent hard-iron offset in order to compen...
int32_t lis2mdl_int_on_pin_set(const stmdev_ctx_t *ctx, uint8_t val)
Interrupt signal on INT_DRDY pin.[set].
int32_t lis2mdl_set_rst_mode_set(const stmdev_ctx_t *ctx, lis2mdl_set_rst_t val)
Reset mode.[set].
int32_t lis2mdl_low_pass_bandwidth_set(const stmdev_ctx_t *ctx, lis2mdl_lpf_t val)
Low-pass bandwidth selection.[set].
int32_t lis2mdl_set_rst_sensor_single_get(const stmdev_ctx_t *ctx, uint8_t *val)
Enables offset cancellation in single measurement mode. The OFF_CANC bit must be set to 1 when enabli...
int32_t lis2mdl_self_test_set(const stmdev_ctx_t *ctx, uint8_t val)
Selftest.[set].
int32_t lis2mdl_init_2(stmdev_ctx_t *ctx)
int32_t lis2mdl_int_gen_threshold_get(const stmdev_ctx_t *ctx, uint16_t *val)
User-defined threshold value for xl interrupt event on generator. Data format is the same of output d...
int32_t lis2mdl_data_format_set(const stmdev_ctx_t *ctx, lis2mdl_ble_t val)
Big/Little Endian data selection.[set].
int32_t lis2mdl_drdy_on_pin_get(const stmdev_ctx_t *ctx, uint8_t *val)
Data-ready signal on INT_DRDY pin.[get].
int32_t lis2mdl_block_data_update_get(const stmdev_ctx_t *ctx, uint8_t *val)
Blockdataupdate.[get].
int32_t lis2mdl_status_get(const stmdev_ctx_t *ctx, lis2mdl_status_reg_t *val)
Info about device status.[get].
int32_t lis2mdl_operating_mode_set(const stmdev_ctx_t *ctx, lis2mdl_md_t val)
Operating mode selection.[set].
int32_t lis2mdl_self_test_get(const stmdev_ctx_t *ctx, uint8_t *val)
Selftest.[get].
int32_t lis2mdl_offset_temp_comp_set(const stmdev_ctx_t *ctx, uint8_t val)
Enables the magnetometer temperature compensation.[set].
int32_t lis2mdl_int_gen_conf_set(const stmdev_ctx_t *ctx, lis2mdl_int_crtl_reg_t *val)
Interrupt generator configuration register.[set].
int32_t lis2mdl_i2c_interface_set(const stmdev_ctx_t *ctx, lis2mdl_i2c_dis_t val)
Enable/Disable I2C interface.[set].
int32_t lis2mdl_i2c_interface_get(const stmdev_ctx_t *ctx, lis2mdl_i2c_dis_t *val)
Enable/Disable I2C interface.[get].
int32_t lis2mdl_data_rate_set(const stmdev_ctx_t *ctx, lis2mdl_odr_t val)
Output data rate selection.[set].
int32_t lis2mdl_int_on_pin_get(const stmdev_ctx_t *ctx, uint8_t *val)
Interrupt signal on INT_DRDY pin.[get].
float_t lis2mdl_from_lsb_to_nanotesla(int16_t lsb)
Converts raw magnetic data to nanotesla (nT). Sensitivity: 1 LSB = 1.5 mG = 150 nT.
float_t lis2mdl_from_lsb_to_celsius(int16_t lsb)
int32_t lis2mdl_low_pass_bandwidth_get(const stmdev_ctx_t *ctx, lis2mdl_lpf_t *val)
Low-pass bandwidth selection.[get].
int32_t lis2mdl_set_rst_mode_get(const stmdev_ctx_t *ctx, lis2mdl_set_rst_t *val)
Reset mode.[get].
int32_t lis2mdl_block_data_update_set(const stmdev_ctx_t *ctx, uint8_t val)
Blockdataupdate.[set].
int32_t lis2mdl_spi_mode_set(const stmdev_ctx_t *ctx, lis2mdl_sim_t val)
SPI Serial Interface Mode selection.[set].
int32_t lis2mdl_int_gen_conf_get(const stmdev_ctx_t *ctx, lis2mdl_int_crtl_reg_t *val)
Interrupt generator configuration register.[get].
int32_t lis2mdl_mag_data_ready_get(const stmdev_ctx_t *ctx, uint8_t *val)
Magnetic set of data available.[get].
int32_t lis2mdl_read_reg(const stmdev_ctx_t *ctx, uint8_t reg, uint8_t *data, uint16_t len)
Read generic device register.
int32_t lis2mdl_power_mode_set(const stmdev_ctx_t *ctx, lis2mdl_lp_t val)
Enables high-resolution/low-power mode.[set].
int32_t lis2mdl_data_format_get(const stmdev_ctx_t *ctx, lis2mdl_ble_t *val)
Big/Little Endian data selection.[get].
int32_t lis2mdl_magnetic_raw_get(const stmdev_ctx_t *ctx, int16_t *val)
Magnetic output value.[get].
int32_t lis2mdl_power_mode_get(const stmdev_ctx_t *ctx, lis2mdl_lp_t *val)
Enables high-resolution/low-power mode.[get].
int32_t lis2mdl_write_reg(const stmdev_ctx_t *ctx, uint8_t reg, uint8_t *data, uint16_t len)
Write generic device register.
int32_t lis2mdl_mag_data_ovr_get(const stmdev_ctx_t *ctx, uint8_t *val)
Magnetic set of data overrun.[get].
int32_t lis2mdl_init(stmdev_ctx_t *ctx)
Initialize the LIS2MDL sensor.
int32_t lis2mdl_spi_mode_get(const stmdev_ctx_t *ctx, lis2mdl_sim_t *val)
SPI Serial Interface Mode selection.[get].
int32_t lis2mdl_boot_get(const stmdev_ctx_t *ctx, uint8_t *val)
Reboot memory content. Reload the calibration parameters.[get].
int32_t lis2mdl_offset_int_conf_set(const stmdev_ctx_t *ctx, lis2mdl_int_on_dataoff_t val)
The interrupt block recognition checks data after/before the hard-iron correction to discover the int...
int32_t lis2mdl_reset_get(const stmdev_ctx_t *ctx, uint8_t *val)
Software reset. Restore the default values in user registers.[get].
int32_t lis2mdl_reset_set(const stmdev_ctx_t *ctx, uint8_t val)
Software reset. Restore the default values in user registers.[set].
int32_t lis2mdl_drdy_on_pin_set(const stmdev_ctx_t *ctx, uint8_t val)
Data-ready signal on INT_DRDY pin.[set].
int32_t lis2mdl_offset_int_conf_get(const stmdev_ctx_t *ctx, lis2mdl_int_on_dataoff_t *val)
The interrupt block recognition checks data after/before the hard-iron correction to discover the int...
int32_t lis2mdl_set_rst_sensor_single_set(const stmdev_ctx_t *ctx, uint8_t val)
Enables offset cancellation in single measurement mode. The OFF_CANC bit must be set to 1 when enabli...
int32_t lis2mdl_device_id_get(const stmdev_ctx_t *ctx, uint8_t *buff)
DeviceWhoamI.[get].
int32_t lis2mdl_operating_mode_get(const stmdev_ctx_t *ctx, lis2mdl_md_t *val)
Operating mode selection.[get].
int32_t lis2mdl_mag_user_offset_set(const stmdev_ctx_t *ctx, int16_t *val)
These registers comprise a 3 group of 16-bit number and represent hard-iron offset in order to compen...
float_t lis2mdl_from_lsb_to_mgauss(int16_t lsb)
int32_t lis2mdl_temperature_raw_get(const stmdev_ctx_t *ctx, int16_t *val)
Temperature output value.[get].
int32_t lis2mdl_data_rate_get(const stmdev_ctx_t *ctx, lis2mdl_odr_t *val)
Output data rate selection.[get].
int32_t lis2mdl_boot_set(const stmdev_ctx_t *ctx, uint8_t val)
Reboot memory content. Reload the calibration parameters.[set].
int32_t lis2mdl_int_gen_source_get(const stmdev_ctx_t *ctx, lis2mdl_int_source_reg_t *val)
Interrupt generator source register.[get].
@ LIS2MDL_SET_SENS_ODR_DIV_63
@ LIS2MDL_SET_SENS_ONLY_AT_POWER_ON
@ LIS2MDL_SENS_OFF_CANC_EVERY_ODR
@ LIS2MDL_HIGH_RESOLUTION
@ LIS2MDL_CONTINUOUS_MODE
uint8_t off_canc_one_shot
stmdev_write_ptr write_reg
lis2mdl_cfg_reg_c_t cfg_reg_c
lis2mdl_int_source_reg_t int_source_reg
lis2mdl_status_reg_t status_reg
lis2mdl_int_crtl_reg_t int_crtl_reg
lis2mdl_cfg_reg_a_t cfg_reg_a
lis2mdl_cfg_reg_b_t cfg_reg_b