3-axis MEMS ultra low power magnetometer
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3
Diff: lis2mdl_reg.h
- Revision:
- 1:8562ae1a0534
- Parent:
- 0:671edf39d961
diff -r 671edf39d961 -r 8562ae1a0534 lis2mdl_reg.h
--- a/lis2mdl_reg.h Tue Mar 05 18:06:37 2019 +0000
+++ b/lis2mdl_reg.h Wed Jul 24 14:18:39 2019 +0000
@@ -39,7 +39,7 @@
#define LIS2MDL_REGS_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -76,24 +76,24 @@
*
*/
-typedef union{
- int16_t i16bit[3];
- uint8_t u8bit[6];
+typedef union {
+ int16_t i16bit[3];
+ uint8_t u8bit[6];
} axis3bit16_t;
-typedef union{
- int16_t i16bit;
- uint8_t u8bit[2];
+typedef union {
+ int16_t i16bit;
+ uint8_t u8bit[2];
} axis1bit16_t;
-typedef union{
- int32_t i32bit[3];
- uint8_t u8bit[12];
+typedef union {
+ int32_t i32bit[3];
+ uint8_t u8bit[12];
} axis3bit32_t;
-typedef union{
- int32_t i32bit;
- uint8_t u8bit[4];
+typedef union {
+ int32_t i32bit;
+ uint8_t u8bit[4];
} axis1bit32_t;
/**
@@ -101,15 +101,15 @@
*
*/
-typedef struct{
- uint8_t bit0 : 1;
- uint8_t bit1 : 1;
- uint8_t bit2 : 1;
- uint8_t bit3 : 1;
- uint8_t bit4 : 1;
- uint8_t bit5 : 1;
- uint8_t bit6 : 1;
- uint8_t bit7 : 1;
+typedef struct {
+ uint8_t bit0 : 1;
+ uint8_t bit1 : 1;
+ uint8_t bit2 : 1;
+ uint8_t bit3 : 1;
+ uint8_t bit4 : 1;
+ uint8_t bit5 : 1;
+ uint8_t bit6 : 1;
+ uint8_t bit7 : 1;
} bitwise_t;
#define PROPERTY_DISABLE (0U)
@@ -122,23 +122,23 @@
*
*/
- /** @addtogroup LIS2MDL_Interfaces_Functions
- * @brief This section provide a set of functions used to read and
- * write a generic register of the device.
- * MANDATORY: return 0 -> no Error.
- * @{
- *
- */
+/** @addtogroup LIS2MDL_Interfaces_Functions
+ * @brief This section provide a set of functions used to read and
+ * write a generic register of the device.
+ * MANDATORY: return 0 -> no Error.
+ * @{
+ *
+ */
-typedef int32_t (*lis2mdl_write_ptr)(void *, uint8_t, uint8_t*, uint16_t);
-typedef int32_t (*lis2mdl_read_ptr) (void *, uint8_t, uint8_t*, uint16_t);
+typedef int32_t (*lis2mdl_write_ptr)(void *, uint8_t, uint8_t *, uint16_t);
+typedef int32_t (*lis2mdl_read_ptr)(void *, uint8_t, uint8_t *, uint16_t);
typedef struct {
- /** Component mandatory fields **/
- lis2mdl_write_ptr write_reg;
- lis2mdl_read_ptr read_reg;
- /** Customizable optional pointer **/
- void *handle;
+ /** Component mandatory fields **/
+ lis2mdl_write_ptr write_reg;
+ lis2mdl_read_ptr read_reg;
+ /** Customizable optional pointer **/
+ void *handle;
} lis2mdl_ctx_t;
/**
@@ -151,7 +151,7 @@
*
*/
- /** I2C Device Address 8 bit format **/
+/** I2C Device Address 8 bit format **/
#define LIS2MDL_I2C_ADD 0x3DU
/** Device Identification (Who am I) **/
@@ -171,70 +171,70 @@
#define LIS2MDL_WHO_AM_I 0x4FU
#define LIS2MDL_CFG_REG_A 0x60U
typedef struct {
- uint8_t md : 2;
- uint8_t odr : 2;
- uint8_t lp : 1;
- uint8_t soft_rst : 1;
- uint8_t reboot : 1;
- uint8_t comp_temp_en : 1;
+ uint8_t md : 2;
+ uint8_t odr : 2;
+ uint8_t lp : 1;
+ uint8_t soft_rst : 1;
+ uint8_t reboot : 1;
+ uint8_t comp_temp_en : 1;
} lis2mdl_cfg_reg_a_t;
#define LIS2MDL_CFG_REG_B 0x61U
typedef struct {
- uint8_t lpf : 1;
- uint8_t set_rst : 2; /* OFF_CANC + Set_FREQ */
- uint8_t int_on_dataoff : 1;
- uint8_t off_canc_one_shot : 1;
- uint8_t not_used_01 : 3;
+ uint8_t lpf : 1;
+ uint8_t set_rst : 2; /* OFF_CANC + Set_FREQ */
+ uint8_t int_on_dataoff : 1;
+ uint8_t off_canc_one_shot : 1;
+ uint8_t not_used_01 : 3;
} lis2mdl_cfg_reg_b_t;
#define LIS2MDL_CFG_REG_C 0x62U
typedef struct {
- uint8_t drdy_on_pin : 1;
- uint8_t self_test : 1;
- uint8_t not_used_01 : 1;
- uint8_t ble : 1;
- uint8_t bdu : 1;
- uint8_t i2c_dis : 1;
- uint8_t int_on_pin : 1;
- uint8_t not_used_02 : 1;
+ uint8_t drdy_on_pin : 1;
+ uint8_t self_test : 1;
+ uint8_t not_used_01 : 1;
+ uint8_t ble : 1;
+ uint8_t bdu : 1;
+ uint8_t i2c_dis : 1;
+ uint8_t int_on_pin : 1;
+ uint8_t not_used_02 : 1;
} lis2mdl_cfg_reg_c_t;
#define LIS2MDL_INT_CRTL_REG 0x63U
typedef struct {
- uint8_t ien : 1;
- uint8_t iel : 1;
- uint8_t iea : 1;
- uint8_t not_used_01 : 2;
- uint8_t zien : 1;
- uint8_t yien : 1;
- uint8_t xien : 1;
+ uint8_t ien : 1;
+ uint8_t iel : 1;
+ uint8_t iea : 1;
+ uint8_t not_used_01 : 2;
+ uint8_t zien : 1;
+ uint8_t yien : 1;
+ uint8_t xien : 1;
} lis2mdl_int_crtl_reg_t;
#define LIS2MDL_INT_SOURCE_REG 0x64U
typedef struct {
- uint8_t _int : 1;
- uint8_t mroi : 1;
- uint8_t n_th_s_z : 1;
- uint8_t n_th_s_y : 1;
- uint8_t n_th_s_x : 1;
- uint8_t p_th_s_z : 1;
- uint8_t p_th_s_y : 1;
- uint8_t p_th_s_x : 1;
+ uint8_t _int : 1;
+ uint8_t mroi : 1;
+ uint8_t n_th_s_z : 1;
+ uint8_t n_th_s_y : 1;
+ uint8_t n_th_s_x : 1;
+ uint8_t p_th_s_z : 1;
+ uint8_t p_th_s_y : 1;
+ uint8_t p_th_s_x : 1;
} lis2mdl_int_source_reg_t;
#define LIS2MDL_INT_THS_L_REG 0x65U
#define LIS2MDL_INT_THS_H_REG 0x66U
#define LIS2MDL_STATUS_REG 0x67U
typedef struct {
- uint8_t xda : 1;
- uint8_t yda : 1;
- uint8_t zda : 1;
- uint8_t zyxda : 1;
- uint8_t xior : 1; //changed as xor is a reserved word in c++
- uint8_t yor : 1;
- uint8_t zor : 1;
- uint8_t zyxor : 1;
+ uint8_t xda : 1;
+ uint8_t yda : 1;
+ uint8_t zda : 1;
+ uint8_t zyxda : 1;
+ uint8_t xior : 1; //changed as xor is a reserved word in c++
+ uint8_t yor : 1;
+ uint8_t zor : 1;
+ uint8_t zyxor : 1;
} lis2mdl_status_reg_t;
#define LIS2MDL_OUTX_L_REG 0x68U
@@ -258,15 +258,15 @@
* @{
*
*/
-typedef union{
- lis2mdl_cfg_reg_a_t cfg_reg_a;
- lis2mdl_cfg_reg_b_t cfg_reg_b;
- lis2mdl_cfg_reg_c_t cfg_reg_c;
- lis2mdl_int_crtl_reg_t int_crtl_reg;
- lis2mdl_int_source_reg_t int_source_reg;
- lis2mdl_status_reg_t status_reg;
- bitwise_t bitwise;
- uint8_t byte;
+typedef union {
+ lis2mdl_cfg_reg_a_t cfg_reg_a;
+ lis2mdl_cfg_reg_b_t cfg_reg_b;
+ lis2mdl_cfg_reg_c_t cfg_reg_c;
+ lis2mdl_int_crtl_reg_t int_crtl_reg;
+ lis2mdl_int_source_reg_t int_source_reg;
+ lis2mdl_status_reg_t status_reg;
+ bitwise_t bitwise;
+ uint8_t byte;
} lis2mdl_reg_t;
/**
@@ -274,11 +274,11 @@
*
*/
-int32_t lis2mdl_read_reg(lis2mdl_ctx_t *ctx, uint8_t reg, uint8_t* data,
+int32_t lis2mdl_read_reg(lis2mdl_ctx_t *ctx, uint8_t reg, uint8_t *data,
uint16_t len);
-int32_t lis2mdl_write_reg(lis2mdl_ctx_t *ctx, uint8_t reg, uint8_t* data,
+int32_t lis2mdl_write_reg(lis2mdl_ctx_t *ctx, uint8_t reg, uint8_t *data,
uint16_t len);
-
+
extern float_t lis2mdl_from_lsb_to_mgauss(int16_t lsb);
extern float_t lis2mdl_from_lsb_to_celsius(int16_t lsb);
@@ -286,25 +286,25 @@
int32_t lis2mdl_mag_user_offset_get(lis2mdl_ctx_t *ctx, uint8_t *buff);
typedef enum {
- LIS2MDL_CONTINUOUS_MODE = 0,
- LIS2MDL_SINGLE_TRIGGER = 1,
- LIS2MDL_POWER_DOWN = 2,
+ LIS2MDL_CONTINUOUS_MODE = 0,
+ LIS2MDL_SINGLE_TRIGGER = 1,
+ LIS2MDL_POWER_DOWN = 2,
} lis2mdl_md_t;
int32_t lis2mdl_operating_mode_set(lis2mdl_ctx_t *ctx, lis2mdl_md_t val);
int32_t lis2mdl_operating_mode_get(lis2mdl_ctx_t *ctx, lis2mdl_md_t *val);
typedef enum {
- LIS2MDL_ODR_10Hz = 0,
- LIS2MDL_ODR_20Hz = 1,
- LIS2MDL_ODR_50Hz = 2,
- LIS2MDL_ODR_100Hz = 3,
+ LIS2MDL_ODR_10Hz = 0,
+ LIS2MDL_ODR_20Hz = 1,
+ LIS2MDL_ODR_50Hz = 2,
+ LIS2MDL_ODR_100Hz = 3,
} lis2mdl_odr_t;
int32_t lis2mdl_data_rate_set(lis2mdl_ctx_t *ctx, lis2mdl_odr_t val);
int32_t lis2mdl_data_rate_get(lis2mdl_ctx_t *ctx, lis2mdl_odr_t *val);
typedef enum {
- LIS2MDL_HIGH_RESOLUTION = 0,
- LIS2MDL_LOW_POWER = 1,
+ LIS2MDL_HIGH_RESOLUTION = 0,
+ LIS2MDL_LOW_POWER = 1,
} lis2mdl_lp_t;
int32_t lis2mdl_power_mode_set(lis2mdl_ctx_t *ctx, lis2mdl_lp_t val);
int32_t lis2mdl_power_mode_get(lis2mdl_ctx_t *ctx, lis2mdl_lp_t *val);
@@ -313,8 +313,8 @@
int32_t lis2mdl_offset_temp_comp_get(lis2mdl_ctx_t *ctx, uint8_t *val);
typedef enum {
- LIS2MDL_ODR_DIV_2 = 0,
- LIS2MDL_ODR_DIV_4 = 1,
+ LIS2MDL_ODR_DIV_2 = 0,
+ LIS2MDL_ODR_DIV_4 = 1,
} lis2mdl_lpf_t;
int32_t lis2mdl_low_pass_bandwidth_set(lis2mdl_ctx_t *ctx,
lis2mdl_lpf_t val);
@@ -322,9 +322,9 @@
lis2mdl_lpf_t *val);
typedef enum {
- LIS2MDL_SET_SENS_ODR_DIV_63 = 0,
- LIS2MDL_SENS_OFF_CANC_EVERY_ODR = 1,
- LIS2MDL_SET_SENS_ONLY_AT_POWER_ON = 2,
+ LIS2MDL_SET_SENS_ODR_DIV_63 = 0,
+ LIS2MDL_SENS_OFF_CANC_EVERY_ODR = 1,
+ LIS2MDL_SET_SENS_ONLY_AT_POWER_ON = 2,
} lis2mdl_set_rst_t;
int32_t lis2mdl_set_rst_mode_set(lis2mdl_ctx_t *ctx,
lis2mdl_set_rst_t val);
@@ -359,8 +359,8 @@
int32_t lis2mdl_self_test_get(lis2mdl_ctx_t *ctx, uint8_t *val);
typedef enum {
- LIS2MDL_LSB_AT_LOW_ADD = 0,
- LIS2MDL_MSB_AT_LOW_ADD = 1,
+ LIS2MDL_LSB_AT_LOW_ADD = 0,
+ LIS2MDL_MSB_AT_LOW_ADD = 1,
} lis2mdl_ble_t;
int32_t lis2mdl_data_format_set(lis2mdl_ctx_t *ctx, lis2mdl_ble_t val);
int32_t lis2mdl_data_format_get(lis2mdl_ctx_t *ctx, lis2mdl_ble_t *val);
@@ -368,8 +368,8 @@
int32_t lis2mdl_status_get(lis2mdl_ctx_t *ctx, lis2mdl_status_reg_t *val);
typedef enum {
- LIS2MDL_CHECK_BEFORE = 0,
- LIS2MDL_CHECK_AFTER = 1,
+ LIS2MDL_CHECK_BEFORE = 0,
+ LIS2MDL_CHECK_AFTER = 1,
} lis2mdl_int_on_dataoff_t;
int32_t lis2mdl_offset_int_conf_set(lis2mdl_ctx_t *ctx,
lis2mdl_int_on_dataoff_t val);
@@ -394,8 +394,8 @@
int32_t lis2mdl_int_gen_treshold_get(lis2mdl_ctx_t *ctx, uint8_t *buff);
typedef enum {
- LIS2MDL_I2C_ENABLE = 0,
- LIS2MDL_I2C_DISABLE = 1,
+ LIS2MDL_I2C_ENABLE = 0,
+ LIS2MDL_I2C_DISABLE = 1,
} lis2mdl_i2c_dis_t;
int32_t lis2mdl_i2c_interface_set(lis2mdl_ctx_t *ctx,
lis2mdl_i2c_dis_t val);