mirror of https://github.com/arendst/Tasmota.git
961 lines
31 KiB
C
961 lines
31 KiB
C
|
/*
|
||
|
*
|
||
|
****************************************************************************
|
||
|
* Copyright (C) 2017 - 2018 Bosch Sensortec GmbH
|
||
|
*
|
||
|
* File : bma4_defs.h
|
||
|
*
|
||
|
* Date: 12 Oct 2017
|
||
|
*
|
||
|
* Revision: 2.1.9 $
|
||
|
*
|
||
|
* Usage: Sensor Driver for BMA4 family of sensors
|
||
|
*
|
||
|
****************************************************************************
|
||
|
*
|
||
|
* 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.
|
||
|
**************************************************************************/
|
||
|
/*! \file bma4_defs.h
|
||
|
\brief Sensor Driver for BMA4 family of sensors */
|
||
|
#ifndef BMA4_DEFS_H__
|
||
|
#define BMA4_DEFS_H__
|
||
|
/*********************************************************************/
|
||
|
/**\ header files */
|
||
|
#ifdef __KERNEL__
|
||
|
#include <linux/types.h>
|
||
|
#else
|
||
|
#include <stdint.h>
|
||
|
#include <stddef.h>
|
||
|
#include <math.h>
|
||
|
#endif
|
||
|
|
||
|
/*********************************************************************/
|
||
|
/* macro definitions */
|
||
|
|
||
|
/*
|
||
|
#if (LONG_MAX) > 0x7fffffff
|
||
|
#define __have_long64 1
|
||
|
#elif (LONG_MAX) == 0x7fffffff
|
||
|
#define __have_long32 1
|
||
|
#endif
|
||
|
*/
|
||
|
|
||
|
#if !defined(UINT8_C)
|
||
|
#define INT8_C(x) x
|
||
|
#if (INT_MAX) > 0x7f
|
||
|
#define UINT8_C(x) x
|
||
|
#else
|
||
|
#define UINT8_C(x) x##U
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if !defined(UINT16_C)
|
||
|
#define INT16_C(x) x
|
||
|
#if (INT_MAX) > 0x7fff
|
||
|
#define UINT16_C(x) x
|
||
|
#else
|
||
|
#define UINT16_C(x) x##U
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if !defined(INT32_C) && !defined(UINT32_C)
|
||
|
#if __have_long32
|
||
|
#define INT32_C(x) x##L
|
||
|
#define UINT32_C(x) x##UL
|
||
|
#else
|
||
|
#define INT32_C(x) x
|
||
|
#define UINT32_C(x) x##U
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if !defined(INT64_C) && !defined(UINT64_C)
|
||
|
#if __have_long64
|
||
|
#define INT64_C(x) x##L
|
||
|
#define UINT64_C(x) x##UL
|
||
|
#else
|
||
|
#define INT64_C(x) x##LL
|
||
|
#define UINT64_C(x) x##ULL
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/**\name CHIP ID ADDRESS*/
|
||
|
#define BMA4_CHIP_ID_ADDR UINT8_C(0x00)
|
||
|
|
||
|
/**\name ERROR STATUS*/
|
||
|
#define BMA4_ERROR_ADDR UINT8_C(0X02)
|
||
|
|
||
|
/**\name STATUS REGISTER FOR SENSOR STATUS FLAG*/
|
||
|
#define BMA4_STATUS_ADDR UINT8_C(0X03)
|
||
|
|
||
|
/**\name AUX/ACCEL DATA BASE ADDRESS REGISTERS*/
|
||
|
#define BMA4_DATA_0_ADDR UINT8_C(0X0A)
|
||
|
#define BMA4_DATA_8_ADDR UINT8_C(0X12)
|
||
|
|
||
|
/**\name SENSOR TIME REGISTERS*/
|
||
|
#define BMA4_SENSORTIME_0_ADDR UINT8_C(0X18)
|
||
|
|
||
|
/**\name INTERRUPT/FEATURE STATUS REGISTERS*/
|
||
|
#define BMA4_INT_STAT_0_ADDR UINT8_C(0X1C)
|
||
|
|
||
|
/**\name INTERRUPT/FEATURE STATUS REGISTERS*/
|
||
|
#define BMA4_INT_STAT_1_ADDR UINT8_C(0X1D)
|
||
|
|
||
|
/**\name TEMPERATURE REGISTERS*/
|
||
|
#define BMA4_TEMPERATURE_ADDR UINT8_C(0X22)
|
||
|
|
||
|
/**\name FIFO REGISTERS*/
|
||
|
#define BMA4_FIFO_LENGTH_0_ADDR UINT8_C(0X24)
|
||
|
#define BMA4_FIFO_DATA_ADDR UINT8_C(0X26)
|
||
|
|
||
|
/**\name ACCEL CONFIG REGISTERS*/
|
||
|
#define BMA4_ACCEL_CONFIG_ADDR UINT8_C(0X40)
|
||
|
|
||
|
/**\name ACCEL RANGE ADDRESS*/
|
||
|
#define BMA4_ACCEL_RANGE_ADDR UINT8_C(0X41)
|
||
|
|
||
|
/**\name AUX CONFIG REGISTERS*/
|
||
|
#define BMA4_AUX_CONFIG_ADDR UINT8_C(0X44)
|
||
|
|
||
|
/**\name FIFO DOWN SAMPLING REGISTER ADDRESS FOR ACCEL*/
|
||
|
#define BMA4_FIFO_DOWN_ADDR UINT8_C(0X45)
|
||
|
|
||
|
/**\name FIFO WATERMARK REGISTER ADDRESS*/
|
||
|
#define BMA4_FIFO_WTM_0_ADDR UINT8_C(0X46)
|
||
|
|
||
|
/**\name FIFO CONFIG REGISTERS*/
|
||
|
#define BMA4_FIFO_CONFIG_0_ADDR UINT8_C(0X48)
|
||
|
#define BMA4_FIFO_CONFIG_1_ADDR UINT8_C(0X49)
|
||
|
|
||
|
/**\name MAG INTERFACE REGISTERS*/
|
||
|
#define BMA4_AUX_DEV_ID_ADDR UINT8_C(0X4B)
|
||
|
#define BMA4_AUX_IF_CONF_ADDR UINT8_C(0X4C)
|
||
|
#define BMA4_AUX_RD_ADDR UINT8_C(0X4D)
|
||
|
#define BMA4_AUX_WR_ADDR UINT8_C(0X4E)
|
||
|
#define BMA4_AUX_WR_DATA_ADDR UINT8_C(0X4F)
|
||
|
|
||
|
/**\name INTERRUPT ENABLE REGISTERS*/
|
||
|
#define BMA4_INT1_IO_CTRL_ADDR UINT8_C(0X53)
|
||
|
#define BMA4_INT2_IO_CTRL_ADDR UINT8_C(0X54)
|
||
|
|
||
|
/**\name LATCH DURATION REGISTERS*/
|
||
|
#define BMA4_INTR_LATCH_ADDR UINT8_C(0X55)
|
||
|
|
||
|
/**\name MAP INTERRUPT 1 and 2 REGISTERS*/
|
||
|
#define BMA4_INT_MAP_1_ADDR UINT8_C(0X56)
|
||
|
#define BMA4_INT_MAP_2_ADDR UINT8_C(0X57)
|
||
|
#define BMA4_INT_MAP_DATA_ADDR UINT8_C(0x58)
|
||
|
#define BMA4_INIT_CTRL_ADDR UINT8_C(0x59)
|
||
|
|
||
|
/**\name FEATURE CONFIG RELATED */
|
||
|
#define BMA4_RESERVED_REG_5B_ADDR UINT8_C(0x5B)
|
||
|
#define BMA4_RESERVED_REG_5C_ADDR UINT8_C(0x5C)
|
||
|
#define BMA4_FEATURE_CONFIG_ADDR UINT8_C(0x5E)
|
||
|
#define BMA4_INTERNAL_ERROR UINT8_C(0x5F)
|
||
|
|
||
|
/**\name SERIAL INTERFACE SETTINGS REGISTER*/
|
||
|
#define BMA4_IF_CONFIG_ADDR UINT8_C(0X6B)
|
||
|
|
||
|
/**\name SELF_TEST REGISTER*/
|
||
|
#define BMA4_ACC_SELF_TEST_ADDR UINT8_C(0X6D)
|
||
|
|
||
|
/**\name SPI,I2C SELECTION REGISTER*/
|
||
|
#define BMA4_NV_CONFIG_ADDR UINT8_C(0x70)
|
||
|
|
||
|
/**\name ACCEL OFFSET REGISTERS*/
|
||
|
#define BMA4_OFFSET_0_ADDR UINT8_C(0X71)
|
||
|
#define BMA4_OFFSET_1_ADDR UINT8_C(0X72)
|
||
|
#define BMA4_OFFSET_2_ADDR UINT8_C(0X73)
|
||
|
|
||
|
/**\name POWER_CTRL REGISTER*/
|
||
|
#define BMA4_POWER_CONF_ADDR UINT8_C(0x7C)
|
||
|
#define BMA4_POWER_CTRL_ADDR UINT8_C(0x7D)
|
||
|
|
||
|
/**\name COMMAND REGISTER*/
|
||
|
#define BMA4_CMD_ADDR UINT8_C(0X7E)
|
||
|
|
||
|
/**\name GPIO REGISTERS*/
|
||
|
#define BMA4_STEP_CNT_OUT_0_ADDR UINT8_C(0x1E)
|
||
|
#define BMA4_HIGH_G_OUT_ADDR UINT8_C(0x1F)
|
||
|
#define BMA4_ACTIVITY_OUT_ADDR UINT8_C(0x27)
|
||
|
#define BMA4_ORIENTATION_OUT_ADDR UINT8_C(0x28)
|
||
|
#define BMA4_INTERNAL_STAT UINT8_C(0x2A)
|
||
|
|
||
|
/*!
|
||
|
* @brief Block size for config write */
|
||
|
#define BMA4_BLOCK_SIZE UINT8_C(32)
|
||
|
|
||
|
/**\name I2C slave address */
|
||
|
#define BMA4_I2C_ADDR_PRIMARY UINT8_C(0x18)
|
||
|
#define BMA4_I2C_ADDR_SECONDARY UINT8_C(0x19)
|
||
|
#define BMA4_I2C_BMM150_ADDR UINT8_C(0x10)
|
||
|
|
||
|
/**\name Interface selection macro */
|
||
|
#define BMA4_SPI_INTERFACE UINT8_C(1)
|
||
|
#define BMA4_I2C_INTERFACE UINT8_C(2)
|
||
|
|
||
|
/**\name Interface selection macro */
|
||
|
#define BMA4_SPI_WR_MASK UINT8_C(0x7F)
|
||
|
#define BMA4_SPI_RD_MASK UINT8_C(0x80)
|
||
|
|
||
|
/**\name Chip ID macros */
|
||
|
#define BMA4_CHIP_ID_MIN UINT8_C(0x10)
|
||
|
#define BMA4_CHIP_ID_MAX UINT8_C(0x15)
|
||
|
|
||
|
/**\name Auxiliary sensor selection macro */
|
||
|
#define BMM150_SENSOR UINT8_C(1)
|
||
|
#define AKM9916_SENSOR UINT8_C(2)
|
||
|
#define BMA4_ASIC_INITIALIZED UINT8_C(0x01)
|
||
|
|
||
|
/**\name Auxiliary sensor chip id macros */
|
||
|
#define BMM150_CHIP_ID UINT8_C(0x32)
|
||
|
|
||
|
/**\name Auxiliary sensor other macros */
|
||
|
#define BMM150_POWER_CONTROL_REG UINT8_C(0x4B)
|
||
|
#define BMM150_POWER_MODE_REG UINT8_C(0x4C)
|
||
|
|
||
|
/**\name CONSTANTS */
|
||
|
#define BMA4_FIFO_CONFIG_LENGTH UINT8_C(2)
|
||
|
#define BMA4_ACCEL_CONFIG_LENGTH UINT8_C(2)
|
||
|
#define BMA4_FIFO_WM_LENGTH UINT8_C(2)
|
||
|
#define BMA4_CONFIG_STREAM_SIZE UINT16_C(6144)
|
||
|
#define BMA4_NON_LATCH_MODE UINT8_C(0)
|
||
|
#define BMA4_LATCH_MODE UINT8_C(1)
|
||
|
#define BMA4_OPEN_DRAIN UINT8_C(1)
|
||
|
#define BMA4_PUSH_PULL UINT8_C(0)
|
||
|
#define BMA4_ACTIVE_HIGH UINT8_C(1)
|
||
|
#define BMA4_ACTIVE_LOW UINT8_C(0)
|
||
|
#define BMA4_EDGE_TRIGGER UINT8_C(1)
|
||
|
#define BMA4_LEVEL_TRIGGER UINT8_C(0)
|
||
|
#define BMA4_OUTPUT_ENABLE UINT8_C(1)
|
||
|
#define BMA4_OUTPUT_DISABLE UINT8_C(0)
|
||
|
#define BMA4_INPUT_ENABLE UINT8_C(1)
|
||
|
#define BMA4_INPUT_DISABLE UINT8_C(0)
|
||
|
|
||
|
/**\name ACCEL RANGE CHECK*/
|
||
|
#define BMA4_ACCEL_RANGE_2G UINT8_C(0)
|
||
|
#define BMA4_ACCEL_RANGE_4G UINT8_C(1)
|
||
|
#define BMA4_ACCEL_RANGE_8G UINT8_C(2)
|
||
|
#define BMA4_ACCEL_RANGE_16G UINT8_C(3)
|
||
|
|
||
|
/**\name CONDITION CHECK FOR READING AND WRTING DATA*/
|
||
|
#define BMA4_MAX_VALUE_FIFO_FILTER UINT8_C(1)
|
||
|
#define BMA4_MAX_VALUE_SPI3 UINT8_C(1)
|
||
|
#define BMA4_MAX_VALUE_SELFTEST_AMP UINT8_C(1)
|
||
|
#define BMA4_MAX_IF_MODE UINT8_C(3)
|
||
|
#define BMA4_MAX_VALUE_SELFTEST_SIGN UINT8_C(1)
|
||
|
|
||
|
/**\name BUS READ AND WRITE LENGTH FOR MAG & ACCEL*/
|
||
|
#define BMA4_MAG_TRIM_DATA_SIZE UINT8_C(16)
|
||
|
#define BMA4_MAG_XYZ_DATA_LENGTH UINT8_C(6)
|
||
|
#define BMA4_MAG_XYZR_DATA_LENGTH UINT8_C(8)
|
||
|
#define BMA4_ACCEL_DATA_LENGTH UINT8_C(6)
|
||
|
#define BMA4_FIFO_DATA_LENGTH UINT8_C(2)
|
||
|
#define BMA4_TEMP_DATA_SIZE UINT8_C(1)
|
||
|
|
||
|
/**\name TEMPERATURE CONSTANT */
|
||
|
#define BMA4_OFFSET_TEMP UINT8_C(23)
|
||
|
#define BMA4_DEG UINT8_C(1)
|
||
|
#define BMA4_FAHREN UINT8_C(2)
|
||
|
#define BMA4_KELVIN UINT8_C(3)
|
||
|
|
||
|
/**\name DELAY DEFINITION IN MSEC*/
|
||
|
#define BMA4_AUX_IF_DELAY UINT8_C(5)
|
||
|
#define BMA4_BMM150_WAKEUP_DELAY1 UINT8_C(2)
|
||
|
#define BMA4_BMM150_WAKEUP_DELAY2 UINT8_C(3)
|
||
|
#define BMA4_BMM150_WAKEUP_DELAY3 UINT8_C(1)
|
||
|
#define BMA4_GEN_READ_WRITE_DELAY UINT8_C(1)
|
||
|
#define BMA4_AUX_COM_DELAY UINT8_C(10)
|
||
|
|
||
|
/**\name ARRAY PARAMETER DEFINITIONS*/
|
||
|
#define BMA4_SENSOR_TIME_MSB_BYTE UINT8_C(2)
|
||
|
#define BMA4_SENSOR_TIME_XLSB_BYTE UINT8_C(1)
|
||
|
#define BMA4_SENSOR_TIME_LSB_BYTE UINT8_C(0)
|
||
|
#define BMA4_MAG_X_LSB_BYTE UINT8_C(0)
|
||
|
#define BMA4_MAG_X_MSB_BYTE UINT8_C(1)
|
||
|
#define BMA4_MAG_Y_LSB_BYTE UINT8_C(2)
|
||
|
#define BMA4_MAG_Y_MSB_BYTE UINT8_C(3)
|
||
|
#define BMA4_MAG_Z_LSB_BYTE UINT8_C(4)
|
||
|
#define BMA4_MAG_Z_MSB_BYTE UINT8_C(5)
|
||
|
#define BMA4_MAG_R_LSB_BYTE UINT8_C(6)
|
||
|
#define BMA4_MAG_R_MSB_BYTE UINT8_C(7)
|
||
|
#define BMA4_TEMP_BYTE UINT8_C(0)
|
||
|
#define BMA4_FIFO_LENGTH_MSB_BYTE UINT8_C(1)
|
||
|
|
||
|
/**\name ERROR CODES */
|
||
|
#define BMA4_OK UINT16_C(0)
|
||
|
#define BMA4_E_NULL_PTR UINT16_C(1)
|
||
|
#define BMA4_E_OUT_OF_RANGE UINT16_C(1 << 1)
|
||
|
#define BMA4_E_INVALID_SENSOR UINT16_C(1 << 2)
|
||
|
#define BMA4_E_CONFIG_STREAM_ERROR UINT16_C(1 << 3)
|
||
|
#define BMA4_E_SELF_TEST_FAIL UINT16_C(1 << 4)
|
||
|
#define BMA4_E_FOC_FAIL UINT16_C(1 << 5)
|
||
|
#define BMA4_E_FAIL UINT16_C(1 << 6)
|
||
|
#define BMA4_E_INT_LINE_INVALID UINT16_C(1 << 7)
|
||
|
#define BMA4_E_RD_WR_LENGTH_INVALID UINT16_C(1 << 8)
|
||
|
#define BMA4_E_AUX_CONFIG_FAIL UINT16_C(1 << 9)
|
||
|
#define BMA4_E_SC_FIFO_HEADER_ERR UINT16_C(1 << 10)
|
||
|
#define BMA4_E_SC_FIFO_CONFIG_ERR UINT16_C(1 << 11)
|
||
|
|
||
|
/**\name UTILITY MACROS */
|
||
|
#define BMA4_SET_LOW_BYTE UINT16_C(0x00FF)
|
||
|
#define BMA4_SET_HIGH_BYTE UINT16_C(0xFF00)
|
||
|
#define BMA4_SET_LOW_NIBBLE UINT8_C(0x0F)
|
||
|
|
||
|
/**\name FOC RELATED MACROS */
|
||
|
#define BMA4_ACCEL_CONFIG_FOC UINT8_C(0xB7)
|
||
|
|
||
|
/* Macros used for Self test */
|
||
|
/* Self-test: Resulting minimum difference signal in mg for BMA42x */
|
||
|
#define BMA42X_ST_ACC_X_AXIS_SIGNAL_DIFF UINT16_C(400)
|
||
|
#define BMA42X_ST_ACC_Y_AXIS_SIGNAL_DIFF UINT16_C(800)
|
||
|
#define BMA42X_ST_ACC_Z_AXIS_SIGNAL_DIFF UINT16_C(400)
|
||
|
|
||
|
/* Self-test: Resulting minimum difference signal in mg for BMA45x */
|
||
|
#define BMA45X_ST_ACC_X_AXIS_SIGNAL_DIFF UINT16_C(1800)
|
||
|
#define BMA45X_ST_ACC_Y_AXIS_SIGNAL_DIFF UINT16_C(1800)
|
||
|
#define BMA45X_ST_ACC_Z_AXIS_SIGNAL_DIFF UINT16_C(1800)
|
||
|
|
||
|
/**\name BOOLEAN TYPES*/
|
||
|
#ifndef TRUE
|
||
|
#define TRUE UINT8_C(0x01)
|
||
|
#endif
|
||
|
|
||
|
#ifndef FALSE
|
||
|
#define FALSE UINT8_C(0x00)
|
||
|
#endif
|
||
|
|
||
|
#ifndef NULL
|
||
|
#define NULL UINT8_C(0x00)
|
||
|
#endif
|
||
|
|
||
|
/**\name ERROR STATUS POSITION AND MASK*/
|
||
|
#define BMA4_FATAL_ERR_MSK UINT8_C(0x01)
|
||
|
#define BMA4_CMD_ERR_POS UINT8_C(1)
|
||
|
#define BMA4_CMD_ERR_MSK UINT8_C(0x02)
|
||
|
#define BMA4_ERR_CODE_POS UINT8_C(2)
|
||
|
#define BMA4_ERR_CODE_MSK UINT8_C(0x1C)
|
||
|
#define BMA4_FIFO_ERR_POS UINT8_C(6)
|
||
|
#define BMA4_FIFO_ERR_MSK UINT8_C(0x40)
|
||
|
#define BMA4_AUX_ERR_POS UINT8_C(7)
|
||
|
#define BMA4_AUX_ERR_MSK UINT8_C(0x80)
|
||
|
|
||
|
/**\name Maximum number of bytes to be read from the sensor */
|
||
|
#define BMA4_MAX_BUFFER_SIZE UINT8_C(81)
|
||
|
|
||
|
/**\name NV_CONFIG POSITION AND MASK*/
|
||
|
/* NV_CONF Description - Reg Addr --> (0x70), Bit --> 3 */
|
||
|
#define BMA4_NV_ACCEL_OFFSET_POS UINT8_C(3)
|
||
|
#define BMA4_NV_ACCEL_OFFSET_MSK UINT8_C(0x08)
|
||
|
|
||
|
/**\name MAG DATA XYZ POSITION AND MASK*/
|
||
|
#define BMA4_DATA_MAG_X_LSB_POS UINT8_C(3)
|
||
|
#define BMA4_DATA_MAG_X_LSB_MSK UINT8_C(0xF8)
|
||
|
#define BMA4_DATA_MAG_Y_LSB_POS UINT8_C(3)
|
||
|
#define BMA4_DATA_MAG_Y_LSB_MSK UINT8_C(0xF8)
|
||
|
#define BMA4_DATA_MAG_Z_LSB_POS UINT8_C(1)
|
||
|
#define BMA4_DATA_MAG_Z_LSB_MSK UINT8_C(0xFE)
|
||
|
#define BMA4_DATA_MAG_R_LSB_POS UINT8_C(2)
|
||
|
#define BMA4_DATA_MAG_R_LSB_MSK UINT8_C(0xFC)
|
||
|
|
||
|
/**\name ACCEL DATA READY POSITION AND MASK*/
|
||
|
#define BMA4_STAT_DATA_RDY_ACCEL_POS UINT8_C(7)
|
||
|
#define BMA4_STAT_DATA_RDY_ACCEL_MSK UINT8_C(0x80)
|
||
|
|
||
|
/**\name MAG DATA READY POSITION AND MASK*/
|
||
|
#define BMA4_STAT_DATA_RDY_MAG_POS UINT8_C(5)
|
||
|
#define BMA4_STAT_DATA_RDY_MAG_MSK UINT8_C(0x20)
|
||
|
|
||
|
/**\name ADVANCE POWER SAVE POSITION AND MASK*/
|
||
|
#define BMA4_ADVANCE_POWER_SAVE_MSK UINT8_C(0x01)
|
||
|
|
||
|
/**\name ACCELEROMETER ENABLE POSITION AND MASK*/
|
||
|
#define BMA4_ACCEL_ENABLE_POS UINT8_C(2)
|
||
|
#define BMA4_ACCEL_ENABLE_MSK UINT8_C(0x04)
|
||
|
|
||
|
/**\name MAGNETOMETER ENABLE POSITION AND MASK*/
|
||
|
#define BMA4_MAG_ENABLE_MSK UINT8_C(0x01)
|
||
|
|
||
|
/**\name ACCEL CONFIGURATION POSITION AND MASK*/
|
||
|
#define BMA4_ACCEL_ODR_MSK UINT8_C(0x0F)
|
||
|
#define BMA4_ACCEL_BW_POS UINT8_C(4)
|
||
|
#define BMA4_ACCEL_BW_MSK UINT8_C(0x70)
|
||
|
#define BMA4_ACCEL_RANGE_MSK UINT8_C(0x03)
|
||
|
#define BMA4_ACCEL_PERFMODE_POS UINT8_C(7)
|
||
|
#define BMA4_ACCEL_PERFMODE_MSK UINT8_C(0x80)
|
||
|
|
||
|
/**\name MAG CONFIGURATION POSITION AND MASK*/
|
||
|
#define BMA4_MAG_CONFIG_OFFSET_POS UINT8_C(4)
|
||
|
#define BMA4_MAG_CONFIG_OFFSET_LEN UINT8_C(4)
|
||
|
#define BMA4_MAG_CONFIG_OFFSET_MSK UINT8_C(0xF0)
|
||
|
#define BMA4_MAG_CONFIG_OFFSET_REG (BMA4_AUX_CONFIG_ADDR)
|
||
|
|
||
|
/**\name FIFO SELF WAKE UP POSITION AND MASK*/
|
||
|
#define BMA4_FIFO_SELF_WAKE_UP_POS UINT8_C(1)
|
||
|
#define BMA4_FIFO_SELF_WAKE_UP_MSK UINT8_C(0x02)
|
||
|
|
||
|
/**\name FIFO BYTE COUNTER POSITION AND MASK*/
|
||
|
#define BMA4_FIFO_BYTE_COUNTER_MSB_MSK UINT8_C(0x3F)
|
||
|
|
||
|
/**\name FIFO DATA POSITION AND MASK*/
|
||
|
#define BMA4_FIFO_DATA_POS UINT8_C(0)
|
||
|
#define BMA4_FIFO_DATA_MSK UINT8_C(0xFF)
|
||
|
|
||
|
/**\name FIFO FILTER FOR ACCEL POSITION AND MASK*/
|
||
|
#define BMA4_FIFO_DOWN_ACCEL_POS UINT8_C(4)
|
||
|
#define BMA4_FIFO_DOWN_ACCEL_MSK UINT8_C(0x70)
|
||
|
#define BMA4_FIFO_FILTER_ACCEL_POS UINT8_C(7)
|
||
|
#define BMA4_FIFO_FILTER_ACCEL_MSK UINT8_C(0x80)
|
||
|
|
||
|
/**\name FIFO HEADER DATA DEFINITIONS */
|
||
|
#define FIFO_HEAD_A UINT8_C(0x84)
|
||
|
#define FIFO_HEAD_M UINT8_C(0x90)
|
||
|
#define FIFO_HEAD_M_A UINT8_C(0x94)
|
||
|
#define FIFO_HEAD_SENSOR_TIME UINT8_C(0x44)
|
||
|
#define FIFO_HEAD_INPUT_CONFIG UINT8_C(0x48)
|
||
|
#define FIFO_HEAD_SKIP_FRAME UINT8_C(0x40)
|
||
|
#define FIFO_HEAD_OVER_READ_MSB UINT8_C(0x80)
|
||
|
#define FIFO_HEAD_SAMPLE_DROP UINT8_C(0x50)
|
||
|
|
||
|
/**\name FIFO HEADERLESS MODE DATA ENABLE DEFINITIONS */
|
||
|
#define BMA4_FIFO_M_A_ENABLE UINT8_C(0x60)
|
||
|
#define BMA4_FIFO_A_ENABLE UINT8_C(0x40)
|
||
|
#define BMA4_FIFO_M_ENABLE UINT8_C(0x20)
|
||
|
|
||
|
/**\name FIFO CONFIGURATION SELECTION */
|
||
|
#define BMA4_FIFO_STOP_ON_FULL UINT8_C(0x01)
|
||
|
#define BMA4_FIFO_TIME UINT8_C(0x02)
|
||
|
#define BMA4_FIFO_TAG_INTR2 UINT8_C(0x04)
|
||
|
#define BMA4_FIFO_TAG_INTR1 UINT8_C(0x08)
|
||
|
#define BMA4_FIFO_HEADER UINT8_C(0x10)
|
||
|
#define BMA4_FIFO_MAG UINT8_C(0x20)
|
||
|
#define BMA4_FIFO_ACCEL UINT8_C(0x40)
|
||
|
#define BMA4_FIFO_ALL UINT8_C(0x7F)
|
||
|
#define BMA4_FIFO_CONFIG_0_MASK UINT8_C(0x03)
|
||
|
#define BMA4_FIFO_CONFIG_1_MASK UINT8_C(0xFC)
|
||
|
|
||
|
/**\name FIFO FRAME COUNT DEFINITION */
|
||
|
#define FIFO_LSB_CONFIG_CHECK UINT8_C(0x00)
|
||
|
#define FIFO_MSB_CONFIG_CHECK UINT8_C(0x80)
|
||
|
#define BMA4_FIFO_TAG_INTR_MASK UINT8_C(0xFC)
|
||
|
|
||
|
/**\name FIFO DROPPED FRAME DEFINITION */
|
||
|
#define AUX_FIFO_DROP UINT8_C(0x04)
|
||
|
#define ACCEL_AUX_FIFO_DROP UINT8_C(0x05)
|
||
|
#define ACCEL_FIFO_DROP UINT8_C(0x01)
|
||
|
|
||
|
/**\name FIFO MAG DEFINITION*/
|
||
|
#define BMA4_MA_FIFO_A_X_LSB UINT8_C(8)
|
||
|
|
||
|
/**\name FIFO sensor time length definitions*/
|
||
|
#define BMA4_SENSOR_TIME_LENGTH UINT8_C(3)
|
||
|
|
||
|
/**\name FIFO LENGTH DEFINITION*/
|
||
|
#define BMA4_FIFO_A_LENGTH UINT8_C(6)
|
||
|
#define BMA4_FIFO_M_LENGTH UINT8_C(8)
|
||
|
#define BMA4_FIFO_MA_LENGTH UINT8_C(14)
|
||
|
|
||
|
/**\name MAG I2C ADDRESS SELECTION POSITION AND MASK*/
|
||
|
#define BMA4_I2C_DEVICE_ADDR_POS UINT8_C(1)
|
||
|
#define BMA4_I2C_DEVICE_ADDR_MSK UINT8_C(0xFE)
|
||
|
|
||
|
/**\name MAG CONFIGURATION FOR SECONDARY INTERFACE POSITION AND MASK*/
|
||
|
#define BMA4_MAG_BURST_MSK UINT8_C(0x03)
|
||
|
#define BMA4_MAG_MANUAL_ENABLE_POS UINT8_C(7)
|
||
|
#define BMA4_MAG_MANUAL_ENABLE_MSK UINT8_C(0x80)
|
||
|
#define BMA4_READ_ADDR_MSK UINT8_C(0xFF)
|
||
|
#define BMA4_WRITE_ADDR_MSK UINT8_C(0xFF)
|
||
|
#define BMA4_WRITE_DATA_MSK UINT8_C(0xFF)
|
||
|
|
||
|
/**\name OUTPUT TYPE ENABLE POSITION AND MASK*/
|
||
|
#define BMA4_INT_EDGE_CTRL_MASK UINT8_C(0x01)
|
||
|
#define BMA4_INT_EDGE_CTRL_POS UINT8_C(0x00)
|
||
|
#define BMA4_INT_LEVEL_MASK UINT8_C(0x02)
|
||
|
#define BMA4_INT_LEVEL_POS UINT8_C(0x01)
|
||
|
#define BMA4_INT_OPEN_DRAIN_MASK UINT8_C(0x04)
|
||
|
#define BMA4_INT_OPEN_DRAIN_POS UINT8_C(0x02)
|
||
|
#define BMA4_INT_OUTPUT_EN_MASK UINT8_C(0x08)
|
||
|
#define BMA4_INT_OUTPUT_EN_POS UINT8_C(0x03)
|
||
|
#define BMA4_INT_INPUT_EN_MASK UINT8_C(0x10)
|
||
|
#define BMA4_INT_INPUT_EN_POS UINT8_C(0x04)
|
||
|
|
||
|
/**\name IF CONFIG POSITION AND MASK*/
|
||
|
#define BMA4_CONFIG_SPI3_MSK UINT8_C(0x01)
|
||
|
#define BMA4_IF_CONFIG_IF_MODE_POS UINT8_C(4)
|
||
|
#define BMA4_IF_CONFIG_IF_MODE_MSK UINT8_C(0x10)
|
||
|
|
||
|
/**\name ACCEL SELF TEST POSITION AND MASK*/
|
||
|
#define BMA4_ACCEL_SELFTEST_ENABLE_MSK UINT8_C(0x01)
|
||
|
#define BMA4_ACCEL_SELFTEST_SIGN_POS UINT8_C(2)
|
||
|
#define BMA4_ACCEL_SELFTEST_SIGN_MSK UINT8_C(0x04)
|
||
|
#define BMA4_SELFTEST_AMP_POS UINT8_C(3)
|
||
|
#define BMA4_SELFTEST_AMP_MSK UINT8_C(0x08)
|
||
|
|
||
|
/**\name ACCEL ODR */
|
||
|
#define BMA4_OUTPUT_DATA_RATE_0_78HZ UINT8_C(0x01)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_1_56HZ UINT8_C(0x02)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_3_12HZ UINT8_C(0x03)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_6_25HZ UINT8_C(0x04)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_12_5HZ UINT8_C(0x05)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_25HZ UINT8_C(0x06)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_50HZ UINT8_C(0x07)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_100HZ UINT8_C(0x08)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_200HZ UINT8_C(0x09)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_400HZ UINT8_C(0x0A)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_800HZ UINT8_C(0x0B)
|
||
|
#define BMA4_OUTPUT_DATA_RATE_1600HZ UINT8_C(0x0C)
|
||
|
|
||
|
/**\name ACCEL BANDWIDTH PARAMETER */
|
||
|
#define BMA4_ACCEL_OSR4_AVG1 UINT8_C(0)
|
||
|
#define BMA4_ACCEL_OSR2_AVG2 UINT8_C(1)
|
||
|
#define BMA4_ACCEL_NORMAL_AVG4 UINT8_C(2)
|
||
|
#define BMA4_ACCEL_CIC_AVG8 UINT8_C(3)
|
||
|
#define BMA4_ACCEL_RES_AVG16 UINT8_C(4)
|
||
|
#define BMA4_ACCEL_RES_AVG32 UINT8_C(5)
|
||
|
#define BMA4_ACCEL_RES_AVG64 UINT8_C(6)
|
||
|
#define BMA4_ACCEL_RES_AVG128 UINT8_C(7)
|
||
|
|
||
|
/**\name ACCEL PERFMODE PARAMETER */
|
||
|
#define BMA4_CIC_AVG_MODE UINT8_C(0)
|
||
|
#define BMA4_CONTINUOUS_MODE UINT8_C(1)
|
||
|
|
||
|
/**\name MAG OFFSET */
|
||
|
#define BMA4_MAG_OFFSET_MAX UINT8_C(0x00)
|
||
|
|
||
|
/**\name ENABLE/DISABLE SELECTIONS */
|
||
|
#define BMA4_X_AXIS UINT8_C(0)
|
||
|
#define BMA4_Y_AXIS UINT8_C(1)
|
||
|
#define BMA4_Z_AXIS UINT8_C(2)
|
||
|
|
||
|
/**\name SELF TEST*/
|
||
|
#define BMA4_SELFTEST_PASS UINT8_C(0)
|
||
|
#define BMA4_SELFTEST_FAIL UINT8_C(1)
|
||
|
|
||
|
/**\name INTERRUPT MAPS */
|
||
|
#define BMA4_INTR1_MAP UINT8_C(0)
|
||
|
#define BMA4_INTR2_MAP UINT8_C(1)
|
||
|
|
||
|
/**\name INTERRUPT MASKS */
|
||
|
#define BMA4_FIFO_FULL_INT UINT16_C(0x0100)
|
||
|
#define BMA4_FIFO_WM_INT UINT16_C(0x0200)
|
||
|
#define BMA4_DATA_RDY_INT UINT16_C(0x0400)
|
||
|
#define BMA4_MAG_DATA_RDY_INT UINT16_C(0x2000)
|
||
|
#define BMA4_ACCEL_DATA_RDY_INT UINT16_C(0x8000)
|
||
|
|
||
|
|
||
|
/**\name AKM POWER MODE SELECTION */
|
||
|
#define AKM_POWER_DOWN_MODE UINT8_C(0)
|
||
|
#define AKM_SINGLE_MEAS_MODE UINT8_C(1)
|
||
|
|
||
|
/**\name SECONDARY_MAG POWER MODE SELECTION */
|
||
|
#define BMA4_MAG_FORCE_MODE UINT8_C(0)
|
||
|
#define BMA4_MAG_SUSPEND_MODE UINT8_C(1)
|
||
|
|
||
|
/**\name MAG POWER MODE SELECTION */
|
||
|
#define FORCE_MODE UINT8_C(0)
|
||
|
#define SUSPEND_MODE UINT8_C(1)
|
||
|
|
||
|
/**\name ACCEL POWER MODE */
|
||
|
#define ACCEL_MODE_NORMAL UINT8_C(0x11)
|
||
|
|
||
|
/**\name MAG POWER MODE */
|
||
|
#define MAG_MODE_SUSPEND UINT8_C(0x18)
|
||
|
|
||
|
/**\name ENABLE/DISABLE BIT VALUES */
|
||
|
#define BMA4_ENABLE UINT8_C(0x01)
|
||
|
#define BMA4_DISABLE UINT8_C(0x00)
|
||
|
|
||
|
/**\name DEFINITION USED FOR DIFFERENT WRITE */
|
||
|
#define BMA4_MANUAL_DISABLE UINT8_C(0x00)
|
||
|
#define BMA4_MANUAL_ENABLE UINT8_C(0x01)
|
||
|
#define BMA4_ENABLE_MAG_IF_MODE UINT8_C(0x01)
|
||
|
#define BMA4_MAG_DATA_READ_REG UINT8_C(0x0A)
|
||
|
#define BMA4_BMM_POWER_MODE_REG UINT8_C(0x06)
|
||
|
#define BMA4_SEC_IF_NULL UINT8_C(0)
|
||
|
#define BMA4_SEC_IF_BMM150 UINT8_C(1)
|
||
|
#define BMA4_SEC_IF_AKM09916 UINT8_C(2)
|
||
|
#define BMA4_ENABLE_AUX_IF_MODE UINT8_C(0x01)
|
||
|
|
||
|
/**\name SENSOR RESOLUTION */
|
||
|
#define BMA4_12_BIT_RESOLUTION UINT8_C(12)
|
||
|
#define BMA4_14_BIT_RESOLUTION UINT8_C(14)
|
||
|
#define BMA4_16_BIT_RESOLUTION UINT8_C(16)
|
||
|
|
||
|
/**\name MULTIPLIER */
|
||
|
/*! for handling micro-g values */
|
||
|
#define BMA4XY_MULTIPLIER UINT32_C(1000000)
|
||
|
/*! for handling float temperature values */
|
||
|
#define BMA4_SCALE_TEMP INT32_C(1000)
|
||
|
/* BMA4_FAHREN_SCALED = 1.8 * 1000 */
|
||
|
#define BMA4_FAHREN_SCALED INT32_C(1800)
|
||
|
/* BMA4_KELVIN_SCALED = 273.15 * 1000 */
|
||
|
#define BMA4_KELVIN_SCALED INT32_C(273150)
|
||
|
|
||
|
|
||
|
/**\name MAP BURST READ LENGTHS */
|
||
|
#define BMA4_AUX_READ_LEN_0 0
|
||
|
#define BMA4_AUX_READ_LEN_1 1
|
||
|
#define BMA4_AUX_READ_LEN_2 2
|
||
|
#define BMA4_AUX_READ_LEN_3 3
|
||
|
|
||
|
#ifndef ABS
|
||
|
#define ABS(a) ((a) > 0 ? (a) : -(a)) /*!< Absolute value */
|
||
|
#endif
|
||
|
|
||
|
/**\name BIT SLICE GET AND SET FUNCTIONS */
|
||
|
#define BMA4_GET_BITSLICE(regvar, bitname)\
|
||
|
((regvar & bitname##_MSK) >> bitname##_POS)
|
||
|
#define BMA4_SET_BITSLICE(regvar, bitname, val)\
|
||
|
((regvar & ~bitname##_MSK) | \
|
||
|
((val<<bitname##_POS)&bitname##_MSK))
|
||
|
#define BMA4_GET_DIFF(x, y) ((x) - (y))
|
||
|
|
||
|
#define BMA4_GET_LSB(var) (uint8_t)(var & BMA4_SET_LOW_BYTE)
|
||
|
#define BMA4_GET_MSB(var) (uint8_t)((var & BMA4_SET_HIGH_BYTE) >> 8)
|
||
|
|
||
|
#define BMA4_SET_BIT_VAL_0(reg_data, bitname) (reg_data & ~(bitname##_MSK))
|
||
|
|
||
|
#define BMA4_SET_BITS_POS_0(reg_data, bitname, data) \
|
||
|
((reg_data & ~(bitname##_MSK)) | \
|
||
|
(data & bitname##_MSK))
|
||
|
|
||
|
#define BMA4_GET_BITS_POS_0(reg_data, bitname) (reg_data & (bitname##_MSK))
|
||
|
|
||
|
/**\name TYPEDEF DEFINITIONS */
|
||
|
/*!
|
||
|
* @brief Bus communication function pointer which should be mapped to
|
||
|
* the platform specific read and write functions of the user
|
||
|
*/
|
||
|
typedef uint16_t (*bma4_com_fptr_t)(uint8_t dev_addr, uint8_t reg_addr, uint8_t *read_data, uint16_t len);
|
||
|
|
||
|
/*! delay function pointer */
|
||
|
typedef void (*bma4_delay_fptr_t)(uint32_t);
|
||
|
|
||
|
/******************************************************************************/
|
||
|
/*! @name Enum Declarations */
|
||
|
/******************************************************************************/
|
||
|
|
||
|
/*! @name Enum to define BMA4 variants */
|
||
|
enum bma4_variant {
|
||
|
BMA42X_VARIANT = 1,
|
||
|
BMA45X_VARIANT
|
||
|
};
|
||
|
|
||
|
/**\name STRUCTURE DEFINITIONS*/
|
||
|
|
||
|
/*!
|
||
|
* @brief
|
||
|
* This structure holds asic info. for feature configuration.
|
||
|
*/
|
||
|
struct bma4_asic_data {
|
||
|
/* Feature config start addr (0-3 bits)*/
|
||
|
uint8_t asic_lsb;
|
||
|
/* Feature config start addr (4-11 bits)*/
|
||
|
uint8_t asic_msb;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief Auxiliary configuration structure for user settings
|
||
|
*/
|
||
|
struct bma4_aux_config {
|
||
|
/*! Device address of auxiliary sensor */
|
||
|
uint8_t aux_dev_addr;
|
||
|
/*! To enable manual or auto mode */
|
||
|
uint8_t manual_enable;
|
||
|
/*! No of bytes to be read at a time */
|
||
|
uint8_t burst_read_length;
|
||
|
/*! Variable to set the auxiliary interface */
|
||
|
uint8_t if_mode;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief
|
||
|
* This structure holds all relevant information about BMA4
|
||
|
*/
|
||
|
struct bma4_dev {
|
||
|
/*! Chip id of BMA4 */
|
||
|
uint8_t chip_id;
|
||
|
/*! Chip id of auxiliary sensor */
|
||
|
uint8_t aux_chip_id;
|
||
|
/*! Device address of BMA4 */
|
||
|
uint8_t dev_addr;
|
||
|
/*! Interface detail */
|
||
|
uint8_t interface;
|
||
|
/*! Auxiliary sensor information */
|
||
|
uint8_t aux_sensor;
|
||
|
/*! Decide SPI or I2C read mechanism */
|
||
|
uint8_t dummy_byte;
|
||
|
/*! Resolution for FOC */
|
||
|
uint8_t resolution;
|
||
|
/*! Define the BMA4 variant BMA42X or BMA45X */
|
||
|
enum bma4_variant variant;
|
||
|
/* ! Used to check mag manual/auto mode status
|
||
|
int8_t mag_manual_enable;*/
|
||
|
/*! FIFO related configurations */
|
||
|
struct bma4_fifo_frame *fifo;
|
||
|
/*! Config stream data buffer address will be assigned*/
|
||
|
const uint8_t *config_file_ptr;
|
||
|
/*! Max read/write length (maximum supported length is 32).
|
||
|
To be set by the user */
|
||
|
uint8_t read_write_len;
|
||
|
/*! Feature len */
|
||
|
uint8_t feature_len;
|
||
|
/*! Contains asic information */
|
||
|
struct bma4_asic_data asic_data;
|
||
|
/*! Contains aux configuration settings */
|
||
|
struct bma4_aux_config aux_config;
|
||
|
/*! Bus read function pointer */
|
||
|
bma4_com_fptr_t bus_read;
|
||
|
/*! Bus write function pointer */
|
||
|
bma4_com_fptr_t bus_write;
|
||
|
/*! delay(in ms) function pointer */
|
||
|
bma4_delay_fptr_t delay;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief This structure holds the information for usage of
|
||
|
* FIFO by the user.
|
||
|
*/
|
||
|
struct bma4_fifo_frame {
|
||
|
/*! Data buffer of user defined length is to be mapped here */
|
||
|
uint8_t *data;
|
||
|
/*! Number of bytes of FIFO to be read as specified by the user */
|
||
|
uint16_t length;
|
||
|
/*! Enabling of the FIFO header to stream in header mode */
|
||
|
uint8_t fifo_header_enable;
|
||
|
/*! Streaming of the Accelerometer, Auxiliary
|
||
|
* sensor data or both in FIFO */
|
||
|
uint8_t fifo_data_enable;
|
||
|
/*! Will be equal to length when no more frames are there to parse */
|
||
|
uint16_t accel_byte_start_idx;
|
||
|
/*! Will be equal to length when no more frames are there to parse */
|
||
|
uint16_t mag_byte_start_idx;
|
||
|
/*! Will be equal to length when no more frames are there to parse */
|
||
|
uint16_t sc_frame_byte_start_idx;
|
||
|
/*! Value of FIFO sensor time time */
|
||
|
uint32_t sensor_time;
|
||
|
/*! Value of Skipped frame counts */
|
||
|
uint8_t skipped_frame_count;
|
||
|
/*! Value of accel dropped frame count */
|
||
|
uint8_t accel_dropped_frame_count;
|
||
|
/*! Value of mag dropped frame count */
|
||
|
uint8_t mag_dropped_frame_count;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief Error Status structure
|
||
|
*/
|
||
|
struct bma4_err_reg {
|
||
|
/*! Indicates fatal error */
|
||
|
uint8_t fatal_err;
|
||
|
/*! Indicates command error */
|
||
|
uint8_t cmd_err;
|
||
|
/*! Indicates error code */
|
||
|
uint8_t err_code;
|
||
|
/*! Indicates fifo error */
|
||
|
uint8_t fifo_err;
|
||
|
/*! Indicates mag error */
|
||
|
uint8_t aux_err;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief Asic Status structure
|
||
|
*/
|
||
|
struct bma4_asic_status {
|
||
|
/*! Asic is in sleep/halt state */
|
||
|
uint8_t sleep;
|
||
|
/*! Dedicated interrupt is set again before previous interrupt
|
||
|
was acknowledged */
|
||
|
uint8_t irq_ovrn;
|
||
|
/*! Watchcell event detected (asic stopped) */
|
||
|
uint8_t wc_event;
|
||
|
/*! Stream transfer has started and transactions are ongoing */
|
||
|
uint8_t stream_transfer_active;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief Interrupt Pin Configuration structure
|
||
|
*/
|
||
|
struct bma4_int_pin_config {
|
||
|
/*! Trigger condition of interrupt pin */
|
||
|
uint8_t edge_ctrl;
|
||
|
/*! Level of interrupt pin */
|
||
|
uint8_t lvl;
|
||
|
/*! Behaviour of interrupt pin to open drain */
|
||
|
uint8_t od;
|
||
|
/*! Output enable for interrupt pin */
|
||
|
uint8_t output_en;
|
||
|
/*! Input enable for interrupt pin */
|
||
|
uint8_t input_en;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief Accelerometer configuration structure */
|
||
|
struct bma4_accel_config {
|
||
|
/*! Output data rate in Hz */
|
||
|
uint8_t odr;
|
||
|
/*! Bandwidth parameter, determines filter configuration */
|
||
|
uint8_t bandwidth;
|
||
|
/*! Filter performance mode */
|
||
|
uint8_t perf_mode;
|
||
|
/*! G-range */
|
||
|
uint8_t range;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief Auxiliary magnetometer configuration structure
|
||
|
*/
|
||
|
struct bma4_aux_mag_config {
|
||
|
/*! Poll rate for the sensor attached to the Magnetometer interface */
|
||
|
uint8_t odr;
|
||
|
/*! Trigger-readout offset in units of 2.5 ms.
|
||
|
If set to zero, the offset is maximum, i.e. after readout a trigger
|
||
|
is issued immediately */
|
||
|
uint8_t offset;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief ASIC Config structure
|
||
|
*/
|
||
|
struct bma4_asic_config {
|
||
|
/*! Enable/Disable ASIC Wake Up */
|
||
|
uint8_t asic_en;
|
||
|
/*! Configure stream_transfer/FIFO mode */
|
||
|
uint8_t fifo_mode_en;
|
||
|
/*! Mapping of instance RAM1 */
|
||
|
uint8_t mem_conf_ram1;
|
||
|
/*! Mapping of instance RAM2 */
|
||
|
uint8_t mem_conf_ram2;
|
||
|
/*! Mapping of instance RAM3 */
|
||
|
uint8_t mem_conf_ram3;
|
||
|
};
|
||
|
/*!
|
||
|
* @brief bmm150 or akm09916
|
||
|
* magnetometer values structure
|
||
|
*/
|
||
|
struct bma4_mag {
|
||
|
/*! BMM150 and AKM09916 X raw data */
|
||
|
int32_t x;
|
||
|
/*! BMM150 and AKM09916 Y raw data */
|
||
|
int32_t y;
|
||
|
/*! BMM150 and AKM09916 Z raw data */
|
||
|
int32_t z;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief bmm150 xyz data structure
|
||
|
*/
|
||
|
struct bma4_mag_xyzr {
|
||
|
/*! BMM150 X raw data */
|
||
|
int16_t x;
|
||
|
/*! BMM150 Y raw data */
|
||
|
int16_t y;
|
||
|
/*! BMM150 Z raw data */
|
||
|
int16_t z;
|
||
|
/*! BMM150 R raw data */
|
||
|
uint16_t r;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief Accel xyz data structure
|
||
|
*/
|
||
|
struct bma4_accel {
|
||
|
/*! Accel X data */
|
||
|
int16_t x;
|
||
|
/*! Accel Y data */
|
||
|
int16_t y;
|
||
|
/*! Accel Z data */
|
||
|
int16_t z;
|
||
|
};
|
||
|
|
||
|
/*!
|
||
|
* @brief FIFO mag data structure
|
||
|
*/
|
||
|
struct bma4_mag_fifo_data {
|
||
|
/*! The value of mag x LSB data */
|
||
|
uint8_t mag_x_lsb;
|
||
|
/*! The value of mag x MSB data */
|
||
|
uint8_t mag_x_msb;
|
||
|
/*! The value of mag y LSB data */
|
||
|
uint8_t mag_y_lsb;
|
||
|
/*! The value of mag y MSB data */
|
||
|
uint8_t mag_y_msb;
|
||
|
/*! The value of mag z LSB data */
|
||
|
uint8_t mag_z_lsb;
|
||
|
/*! The value of mag z MSB data */
|
||
|
uint8_t mag_z_msb;
|
||
|
/*! The value of mag r for BMM150 Y2 for YAMAHA LSB data */
|
||
|
uint8_t mag_r_y2_lsb;
|
||
|
/*! The value of mag r for BMM150 Y2 for YAMAHA MSB data */
|
||
|
uint8_t mag_r_y2_msb;
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
/* End of __BMA4_H__ */
|