/*
*************************************************************************
*
* (C) All rights reserved by ROBERT BOSCH GMBH
*
*************************************************************************/
/* Date: 2014/02/14
* Revision: 1.2
*
*/
/**************************************************************************
* Copyright (C) 2014 Bosch Sensortec GmbH
*
* BMI160.c
*
* Usage: BMI160 Sensor API Driver
*
***************************************************************************/
/**************************************************************************/
/* Disclaimer
*
* Common:
* Bosch Sensortec products are developed for the consumer goods industry.
* They may only be used within the parameters of the respective valid
* product data sheet. Bosch Sensortec products are provided with the
* express understanding that there is no warranty of fitness for a
* particular purpose.They are not fit for use in life-sustaining,
* safety or security sensitive systems or any system or device
* that may lead to bodily harm or property damage if the system
* or device malfunctions. In addition,Bosch Sensortec products are
* not fit for use in products which interact with motor vehicle systems.
* The resale and or use of products are at the purchasers own risk and
* his own responsibility. The examination of fitness for the intended use
* is the sole responsibility of the Purchaser.
*
* The purchaser shall indemnify Bosch Sensortec from all third party
* claims, including any claims for incidental, or consequential damages,
* arising from any product use not covered by the parameters of
* the respective valid product data sheet or not approved by
* Bosch Sensortec and reimburse Bosch Sensortec for all costs in
* connection with such claims.
*
* The purchaser must monitor the market for the purchased products,
* particularly with regard to product safety and inform Bosch Sensortec
* without delay of all security relevant incidents.
*
* Engineering Samples are marked with an asterisk (*) or (e).
* Samples may vary from the valid technical specifications of the product
* series. They are therefore not intended or fit for resale to third
* parties or for use in end products. Their sole purpose is internal
* client testing. The testing of an engineering sample may in no way
* replace the testing of a product series. Bosch Sensortec assumes
* no liability for the use of engineering samples.
* By accepting the engineering samples, the Purchaser agrees to indemnify
* Bosch Sensortec from all claims arising from the use of engineering
* samples.
*
* Special:
* This software module (hereinafter called "Software") and any information
* on application-sheets (hereinafter called "Information") is provided
* free of charge for the sole purpose to support your application work.
* The Software and Information is subject to the following
* terms and conditions:
*
* The Software is specifically designed for the exclusive use for
* Bosch Sensortec products by personnel who have special experience
* and training. Do not use this Software if you do not have the
* proper experience or training.
*
* This Software package is provided `` as is `` and without any expressed
* or implied warranties,including without limitation, the implied warranties
* of merchantability and fitness for a particular purpose.
*
* Bosch Sensortec and their representatives and agents deny any liability
* for the functional impairment
* of this Software in terms of fitness, performance and safety.
* Bosch Sensortec and their representatives and agents shall not be liable
* for any direct or indirect damages or injury, except as
* otherwise stipulated in mandatory applicable law.
*
* The Information provided is believed to be accurate and reliable.
* Bosch Sensortec assumes no responsibility for the consequences of use
* of such Information nor for any infringement of patents or
* other rights of third parties which may result from its use.
* No license is granted by implication or otherwise under any patent or
* patent rights of Bosch. Specifications mentioned in the Information are
* subject to change without notice.
*
* It is not allowed to deliver the source code of the Software
* to any third party without permission of
* Bosch Sensortec.
*/
/*************************************************************************/
/*! file <BMI160 >
brief <Sensor driver for BMI160> */
#include "BMI160.h"
/* user defined code to be added here ... */
static struct bmi160_t *p_bmi160;
/*************************************************************************
* Description: *//**brief
* This function initialises the structure pointer and assigns the
* I2C address.
*
*
*
*
*
* \param bmi160_t *bmi160 structure pointer.
*
*
*
* \return communication results.
*
*
**************************************************************************/
/* Scheduling:
*
*
*
* Usage guide:
*
*
* Remarks:
*
***************************************************************************/
BMI160_RETURN_FUNCTION_TYPE bmi160_init(struct bmi160_t *bmi160)
{
BMI160_RETURN_FUNCTION_TYPE comres = C_BMI160_Zero_U8X;
unsigned char v_data_u8r = C_BMI160_Zero_U8X;
/* assign bmi160 ptr */
p_bmi160 = bmi160;
/* preset bmi160 I2C_addr */
p_bmi160->dev_addr = BMI160_I2C_ADDR;
comres +=
p_bmi160->BMI160_BUS_READ_FUNC(p_bmi160->dev_addr,
BMI160_USER_CHIP_ID__REG,
&v_data_u8r, 1); /* read Chip Id */
p_bmi160->chip_id = v_data_u8r;
return comres;
}
/****************************************************************************
* Description: *//**brief This API gives data to the given register and
* the data is written in the corresponding register
* address
*
*
*
* \param unsigned char addr, unsigned char data, unsigned char len
* addr -> Address of the register
* data -> Data to be written to the register
* len -> Length of the Data
*
*
*
* \return communication results.
*
*
***************************************************************************/
/* Scheduling:
*
*
*
* Usage guide:
*
*
* Remarks:
*
*****************************************************************************/
BMI160_RETURN_FUNCTION_TYPE bmi160_write_reg(unsigned char addr,
unsigned char *data, unsigned char len)
{
BMI160_RETURN_FUNCTION_TYPE comres = C_BMI160_Zero_U8X;
if (p_bmi160 == BMI160_NULL) {
return E_BMI160_NULL_PTR;
} else{
comres +=
p_bmi160->BMI160_BUS_WRITE_FUNC(p_bmi160->dev_addr,
addr, data, len);
}
return comres;
}
/*****************************************************************************
* Description: *//**brief This API reads the data from the given register
* address
*
*
*
*
* \param unsigned char addr, unsigned char *data, unsigned char len
* addr -> Address of the register
* data -> address of the variable, read value will be kept
* len -> Length of the data
*
*
*
*
* \return results of communication routine
*
*
****************************************************************************/
/* Scheduling:
*
*
*
* Usage guide:
*
*
* Remarks:
*
****************************************************************************/
BMI160_RETURN_FUNCTION_TYPE bmi160_read_reg(unsigned char addr,
unsigned char *data, unsigned char len)
{
BMI160_RETURN_FUNCTION_TYPE comres = C_BMI160_Zero_U8X;
if (p_bmi160 == BMI160_NULL) {
return E_BMI160_NULL_PTR;
} else {
comres +=
p_bmi160->BMI160_BUS_READ_FUNC(p_bmi160->dev_addr,
addr, data, len);
}
return comres;
}
/****************************************************************************
* Description: *//**brief This API Reads FOC completed status
*
*
*
*
* \param unsigned char * minor_revision_id :
* Pointer to the minor_revision_id
*
*
*
* \return
*
*
***************************************************************************/
/* Scheduling:
*
*
*
* Usage guide:
*
*
* Re