229 lines
5.5 KiB
C
229 lines
5.5 KiB
C
/**
|
|
******************************************************************************
|
|
* @file iis2mdc.h
|
|
* @author MEMS Software Solutions Team
|
|
* @brief IIS2MDC header driver file
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2019 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
#ifndef IIS2MDC_H
|
|
#define IIS2MDC_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "iis2mdc_reg.h"
|
|
#include <string.h>
|
|
|
|
/** @addtogroup BSP BSP
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup Component Component
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup IIS2MDC IIS2MDC
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup IIS2MDC_Exported_Types IIS2MDC Exported Types
|
|
* @{
|
|
*/
|
|
|
|
typedef int32_t (*IIS2MDC_Init_Func)(void);
|
|
typedef int32_t (*IIS2MDC_DeInit_Func)(void);
|
|
typedef int32_t (*IIS2MDC_GetTick_Func)(void);
|
|
typedef int32_t (*IIS2MDC_WriteReg_Func)(uint16_t, uint16_t, uint8_t *, uint16_t);
|
|
typedef int32_t (*IIS2MDC_ReadReg_Func)(uint16_t, uint16_t, uint8_t *, uint16_t);
|
|
|
|
typedef struct
|
|
{
|
|
IIS2MDC_Init_Func Init;
|
|
IIS2MDC_DeInit_Func DeInit;
|
|
uint32_t BusType; /* 0 means I2C, 1 means SPI-3-Wires */
|
|
uint8_t Address;
|
|
IIS2MDC_WriteReg_Func WriteReg;
|
|
IIS2MDC_ReadReg_Func ReadReg;
|
|
IIS2MDC_GetTick_Func GetTick;
|
|
} IIS2MDC_IO_t;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
int16_t x;
|
|
int16_t y;
|
|
int16_t z;
|
|
} IIS2MDC_AxesRaw_t;
|
|
|
|
typedef struct
|
|
{
|
|
int32_t x;
|
|
int32_t y;
|
|
int32_t z;
|
|
} IIS2MDC_Axes_t;
|
|
|
|
typedef struct
|
|
{
|
|
IIS2MDC_IO_t IO;
|
|
stmdev_ctx_t Ctx;
|
|
uint8_t is_initialized;
|
|
uint8_t mag_is_enabled;
|
|
} IIS2MDC_Object_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint8_t Acc;
|
|
uint8_t Gyro;
|
|
uint8_t Magneto;
|
|
uint8_t LowPower;
|
|
uint32_t GyroMaxFS;
|
|
uint32_t AccMaxFS;
|
|
uint32_t MagMaxFS;
|
|
float GyroMaxOdr;
|
|
float AccMaxOdr;
|
|
float MagMaxOdr;
|
|
} IIS2MDC_Capabilities_t;
|
|
|
|
typedef struct
|
|
{
|
|
int32_t (*Init)(IIS2MDC_Object_t *);
|
|
int32_t (*DeInit)(IIS2MDC_Object_t *);
|
|
int32_t (*ReadID)(IIS2MDC_Object_t *, uint8_t *);
|
|
int32_t (*GetCapabilities)(IIS2MDC_Object_t *, IIS2MDC_Capabilities_t *);
|
|
} IIS2MDC_CommonDrv_t;
|
|
|
|
typedef struct
|
|
{
|
|
int32_t (*Enable)(IIS2MDC_Object_t *);
|
|
int32_t (*Disable)(IIS2MDC_Object_t *);
|
|
int32_t (*GetSensitivity)(IIS2MDC_Object_t *, float *);
|
|
int32_t (*GetOutputDataRate)(IIS2MDC_Object_t *, float *);
|
|
int32_t (*SetOutputDataRate)(IIS2MDC_Object_t *, float);
|
|
int32_t (*GetFullScale)(IIS2MDC_Object_t *, int32_t *);
|
|
int32_t (*SetFullScale)(IIS2MDC_Object_t *, int32_t);
|
|
int32_t (*GetAxes)(IIS2MDC_Object_t *, IIS2MDC_Axes_t *);
|
|
int32_t (*GetAxesRaw)(IIS2MDC_Object_t *, IIS2MDC_AxesRaw_t *);
|
|
} IIS2MDC_MAG_Drv_t;
|
|
|
|
typedef union
|
|
{
|
|
int16_t i16bit[3];
|
|
uint8_t u8bit[6];
|
|
} iis2mdc_axis3bit16_t;
|
|
|
|
typedef union
|
|
{
|
|
int16_t i16bit;
|
|
uint8_t u8bit[2];
|
|
} iis2mdc_axis1bit16_t;
|
|
|
|
typedef union
|
|
{
|
|
int32_t i32bit[3];
|
|
uint8_t u8bit[12];
|
|
} iis2mdc_axis3bit32_t;
|
|
|
|
typedef union
|
|
{
|
|
int32_t i32bit;
|
|
uint8_t u8bit[4];
|
|
} iis2mdc_axis1bit32_t;
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup IIS2MDC_Exported_Constants IIS2MDC Exported Constants
|
|
* @{
|
|
*/
|
|
|
|
#define IIS2MDC_OK 0
|
|
#define IIS2MDC_ERROR -1
|
|
|
|
#define IIS2MDC_I2C_BUS 0U
|
|
#define IIS2MDC_SPI_3WIRES_BUS 1U
|
|
|
|
#define IIS2MDC_MAG_SENSITIVITY_FS_50GAUSS 1.500f /**< Sensitivity value for 50 gauss full scale [mgauss/LSB] */
|
|
|
|
#ifndef UNUSED
|
|
#define UNUSED(X) (void)X
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup IIS2MDC_Exported_Functions IIS2MDC Exported Functions
|
|
* @{
|
|
*/
|
|
|
|
int32_t IIS2MDC_RegisterBusIO(IIS2MDC_Object_t *pObj, IIS2MDC_IO_t *pIO);
|
|
int32_t IIS2MDC_Init(IIS2MDC_Object_t *pObj);
|
|
int32_t IIS2MDC_DeInit(IIS2MDC_Object_t *pObj);
|
|
int32_t IIS2MDC_ReadID(IIS2MDC_Object_t *pObj, uint8_t *id);
|
|
int32_t IIS2MDC_GetCapabilities(IIS2MDC_Object_t *pObj, IIS2MDC_Capabilities_t *Capabilities);
|
|
|
|
int32_t IIS2MDC_MAG_Enable(IIS2MDC_Object_t *pObj);
|
|
int32_t IIS2MDC_MAG_Disable(IIS2MDC_Object_t *pObj);
|
|
int32_t IIS2MDC_MAG_GetSensitivity(IIS2MDC_Object_t *pObj, float *sensitivity);
|
|
int32_t IIS2MDC_MAG_GetOutputDataRate(IIS2MDC_Object_t *pObj, float *odr);
|
|
int32_t IIS2MDC_MAG_SetOutputDataRate(IIS2MDC_Object_t *pObj, float odr);
|
|
int32_t IIS2MDC_MAG_GetFullScale(IIS2MDC_Object_t *pObj, int32_t *fullscale);
|
|
int32_t IIS2MDC_MAG_SetFullScale(IIS2MDC_Object_t *pObj, int32_t fullscale);
|
|
int32_t IIS2MDC_MAG_GetAxes(IIS2MDC_Object_t *pObj, IIS2MDC_Axes_t *magnetic_field);
|
|
int32_t IIS2MDC_MAG_GetAxesRaw(IIS2MDC_Object_t *pObj, IIS2MDC_AxesRaw_t *value);
|
|
|
|
int32_t IIS2MDC_Read_Reg(IIS2MDC_Object_t *pObj, uint8_t reg, uint8_t *data);
|
|
int32_t IIS2MDC_Write_Reg(IIS2MDC_Object_t *pObj, uint8_t reg, uint8_t data);
|
|
|
|
int32_t IIS2MDC_MAG_Get_DRDY_Status(IIS2MDC_Object_t *pObj, uint8_t *status);
|
|
int32_t IIS2MDC_MAG_Get_Init_Status(IIS2MDC_Object_t *pObj, uint8_t *status);
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @addtogroup IIS2MDC_Exported_Variables IIS2MDC Exported Variables
|
|
* @{
|
|
*/
|
|
|
|
extern IIS2MDC_CommonDrv_t IIS2MDC_COMMON_Driver;
|
|
extern IIS2MDC_MAG_Drv_t IIS2MDC_MAG_Driver;
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|