/******************** (C) COPYRIGHT 2016 STMicroelectronics ********************
* File Name : LSM6DS3_ACC_GYRO_driver.c
* Author : MEMS Application Team
* Version : v2.0
* Date : 27 June 2016
* Description : EKSTM32 main file
*
********************************************************************************
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* THIS SOFTWARE IS SPECIFICALLY DESIGNED FOR EXCLUSIVE USE WITH ST PARTS.
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "LSM6DS3_ACC_GYRO_driver.h"
#include "i2C_mems.h" //[Example]
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/************** Generic Function *******************/
/*******************************************************************************
* Function Name : LSM6DS3_ACC_GYRO_WriteReg
* Description : Generic Writing function. It must be fullfilled with either
* : I2C or SPI writing function
* Input : Register Address, ptr to buffer to be written,
* length of buffer
* Output : None
* Return : None
*******************************************************************************/
status_t LSM6DS3_ACC_GYRO_WriteReg(void *handle, u8_t Reg, u8_t *Bufp, u16_t len)
{
//To be completed with either I2c or SPI writing function
//i.e.: SPI_Mems_Write_Reg(Reg, Data);
//I2Cx_Write(Bufp, LSM6DS3_ACC_GYRO_I2C_ADDRESS, Reg, len); //[Example]
return MEMS_SUCCESS;
}
/*******************************************************************************
* Function Name : LSM6DS3_ACC_GYRO_ReadReg
* Description : Generic Reading function. It must be fullfilled with either
* : I2C or SPI writing function
* Input : Register Address, ptr to buffer to be read,
* length of buffer
* Output : None
* Return : None
*******************************************************************************/
status_t LSM6DS3_ACC_GYRO_ReadReg(void *handle, u8_t Reg, u8_t *Bufp, u16_t len)
{
//To be completed with either I2c or SPI writing function
//i.e.: SPI_Mems_Write_Reg(Reg, Data);
//I2Cx_Read(Bufp, LSM6DS3_ACC_GYRO_I2C_ADDRESS, Reg, len); //[Example]
return MEMS_SUCCESS;
}
/**************** Base Function *******************/
/*******************************************************************************
* Function Name : LSM6DS3_ACC_GYRO_R_WHO_AM_I
* Description : Read WHO_AM_I_BIT
* Input : Pointer to u8_t
* Output : Status of WHO_AM_I_BIT
* Return : Status [MEMS_ERROR, MEMS_SUCCESS]
*******************************************************************************/
status_t LSM6DS3_ACC_GYRO_R_WHO_AM_I(void *handle, u8_t *value)
{
if( !LSM6DS3_ACC_GYRO_ReadReg(handle, LSM6DS3_ACC_GYRO_WHO_AM_I_REG, (u8_t *)value, 1) )
return MEMS_ERROR;
*value &= LSM6DS3_ACC_GYRO_WHO_AM_I_BIT_MASK; //coerce
*value = *value >> LSM6DS3_ACC_GYRO_WHO_AM_I_BIT_POSITION; //mask
return MEMS_SUCCESS;
}
/*******************************************************************************
* Function Name : LSM6DS3_ACC_GYRO_W_BDU
* Description : Write BDU
* Input : LSM6DS3_ACC_GYRO_BDU_t
* Output : None
* Return : Status [MEMS_ERROR, MEMS_SUCCESS]
*******************************************************************************/
status_t LSM6DS3_ACC_GYRO_W_BDU(void *handle, LSM6DS3_ACC_GYRO_BDU_t newValue)
{
u8_t value;
if( !LSM6DS3_ACC_GYRO_ReadReg(handle, LSM6DS3_ACC_GYRO_CTRL3_C, &value, 1) )
return MEMS_ERROR;
value &= ~LSM6DS3_ACC_GYRO_BDU_MASK;
value |= newValue;
if( !LSM6DS3_ACC_GYRO_WriteReg(handle, LSM6DS3_ACC_GYRO_CTRL3_C, &value, 1) )
return MEMS_ERROR;
return MEMS_SUCCESS;
}
/*******************************************************************************
* Function Name : LSM6DS3_ACC_GYRO_R_BDU
* Description : Read BDU
* Input : Pointer to LSM6DS3_ACC_GYRO_BDU_t
* Output : Status of BDU see LSM6DS3_ACC_GYRO_BDU_t
* Return : Status [MEMS_ERROR, MEMS_SUCCESS]
*******************************************************************************/
status_t LSM6DS3_ACC_GYRO_R_BDU(void *handle, LSM6DS3_ACC_GYRO_BDU_t *value)
{
if( !LSM6DS3_ACC_GYRO_ReadReg(handle, LSM6DS3_ACC_GYRO_CTRL3_C, (u8_t *)value, 1) )
return MEMS_ERROR;
*value &= LSM6DS3_ACC_GYRO_BDU_MASK; //mask
return MEMS_SUCCESS;
}
/*******************************************************************************
* Function Name : LSM6DS3_ACC_GYRO_W_FS_XL
* Description : Write FS_XL
* Input : LSM6DS3_ACC_GYRO_FS_XL_t
* Output : None
* Return : Status [MEMS_ERROR, MEMS_SUCCESS]
*******************************************************************************/
status_t LSM6DS3_ACC_GYRO_W_FS_XL(void *handle, LSM6DS3_ACC_GYRO_FS_XL_t newValue)
{
u8_t value;
if( !LSM6DS3_ACC_GYRO_ReadReg(handle, LSM6DS3_ACC_GYRO_CTRL1_XL, &value, 1) )
return MEMS_ERROR;
value &= ~LSM6DS3_ACC_GYRO_FS_XL_MASK;
value |= newValue;
if( !LSM6DS3_ACC_GYRO_WriteReg(handle, LSM6DS3_ACC_GYRO_CTRL1_XL, &value, 1) )
return MEMS_ERROR;
return MEMS_SUCCESS;
}
/*******************************************************************************
* Function Name : LSM6DS3_ACC_GYRO_R_FS_XL
* Description : Read FS_XL
* Input : Pointer to LSM6DS3_ACC_GYRO_FS_XL_t
* Output : Status of FS_XL see LSM6DS3_ACC_GYRO_FS_XL_t
* Return : Status [MEMS_ERROR, MEMS_SUCCESS]
*******************************************************************************/
status_t LSM6DS3_ACC_GYRO_R_FS_XL(void *handle, LSM6DS3_ACC_GYRO_FS_XL_t *value)
{
if( !LSM6DS3_ACC_GYRO_ReadReg(handle, LSM6DS3_ACC_GYRO_CTRL1_XL, (u8_t *)value, 1) )
return MEMS_ERROR;
*value &= LSM6DS3_ACC_GYRO_FS_XL_MASK; //mask
return MEMS_SUCCESS;
}
/*******************************************************************************
* Function Name : status_t LSM6DS3_ACC_GYRO_GetRawAccData(u8_t *buff)
* Description : Read GetAccData output register
* Input : pointer to [u8_t]
* Output : GetAccData buffer u8_t
* Return : Status [MEMS_ERROR, MEMS_SUCCESS]
*******************************************************************************/
status_t LSM6DS3_ACC_GYRO_GetRawAccData(void *handle, u8_t *buff)
{
u8_t i, j, k;
u8_t numberOfByteForDimension;
numberOfByteForDimension=6/3;
k=0;
for (i=0; i<3;i++ )
{
for (j=0; j<numberOfByteForDimension;j++ )
{
if( !LSM6DS3_ACC_GYRO_ReadReg(handle, LSM6DS3_ACC_GYRO_OUTX_L_XL+k, &buff[k], 1))
return MEMS_ERROR;
k++;
}
}
return MEMS_SUCCESS;
}
/*******************************************************************************
* Function Name : status_t LSM6DS3_ACC_Get_Acceleration(void *handle, int *buff, u8_t from_fifo)
* Description : Read GetAccData output register
* Input : pointer to [u8_t]
* O
评论0