/* * lis2mdl.c * The LIS2MDL is a low power magnetometer, here used as 3 DoF in a 10 DoF * absolute orientation solution. * * Created on: Jan 18, 2021 * Author: Daniel Peter Chokola * * Adapted From: * EM7180_LSM6DSM_LIS2MDL_LPS22HB_Butterfly * by: Kris Winer * 09/23/2017 Copyright Tlera Corporation * * Library may be used freely and without limit with attribution. */ #ifndef LIS2MDL_h #define LIS2MDL_h /* Includes */ #include /* Definitions */ #define LIS2MDL_OK (0) #define LIS2MDL_BAD_ARG (1 << 0) #define LIS2MDL_BAD_COMM (1 << 1) #define MODR_10Hz 0x00 #define MODR_20Hz 0x01 #define MODR_50Hz 0x02 #define MODR_100Hz 0x03 #define MFS_14BITS 0 // 0.6 mG per LSB #define MFS_16BITS 1 // 0.15 mG per LSB /* Data Structures */ typedef int32_t lis2mdl_status_t; typedef struct lis2mdl_init_s { uint8_t m_odr; } lis2mdl_init_t; typedef struct lis2mdl_s { lis2mdl_init_t *init; uint8_t i2c_addr; delay_func_t delay_func; i2c_read_func_t i2c_read_func; i2c_write_func_t i2c_write_func; } lis2mdl_t; /* Function Prototypes */ lis2mdl_status_t lis2mdl_init(lis2mdl_t *lis2mdl, lis2mdl_init_t *init); void lis2mdl_set_delay_cb(lis2mdl_t *lis2mdl, delay_func_t delay_func); void lis2mdl_set_i2c_cbs(lis2mdl_t *lis2mdl, i2c_read_func_t i2c_read_func, i2c_write_func_t i2c_write_func, uint8_t dev_addr); lis2mdl_status_t lis2mdl_config(lis2mdl_t *lis2mdl); #endif