| /* |
| * |
| **************************************************************************** |
| * 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 !defined(UINT8_C) |
| #define INT8_C(x) x |
| #define UINT8_C(x) x |
| #endif |
| |
| #if !defined(UINT16_C) |
| #define INT16_C(x) x |
| #define UINT16_C(x) x |
| #endif |
| |
| #if !defined(INT32_C) && !defined(UINT32_C) |
| #define INT32_C(x) x |
| #define UINT32_C(x) x |
| #endif |
| |
| #if !defined(INT64_C) && !defined(UINT64_C) |
| #define INT64_C(x) x |
| #define UINT64_C(x) x |
| #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 I2C address of AKM09916 */ |
| /***************************************************/ |
| #define BMA4_AUX_AKM09916_I2C_ADDR (0x0C) |
| |
| /****************************************************/ |
| /**\name AKM09916 DEFINITIONS */ |
| /***************************************************/ |
| #define AKM_POWER_DOWN_MODE_DATA (0x00) |
| #define AKM_POWER_MODE_REG (0x31) |
| #define AKM_SINGLE_MEASUREMENT_MODE (0x01) |
| #define AKM_DATA_REGISTER (0x11) |
| #define AKM_CHIP_ID_REG (0x01) |
| #define AKM_CONTINUOUS_MEASUREMENT_MODE1 (0x02) |
| /**< I2C address of BMM150*/ |
| #define BMA4_AUX_BMM150_I2C_ADDRESS (0x10) |
| |
| /****************************************************/ |
| /**\name BMM150 DEFINITION */ |
| /***************************************************/ |
| #define BMA4_BMM150_SET_POWER_CONTROL (0x01) |
| #define BMA4_BMM150_MAX_RETRY_WAKEUP (5) |
| #define BMA4_BMM150_POWER_ON (0x01) |
| #define BMA4_BMM150_POWER_OFF (0x00) |
| #define BMA4_BMM150_FORCE_MODE (0x02) |
| #define BMA4_BMM150_POWER_ON_SUCCESS (0) |
| #define BMA4_BMM150_POWER_ON_FAIL (-1) |
| #define BMA4_BMM150_DIG_X1 (0) |
| #define BMA4_BMM150_DIG_Y1 (1) |
| #define BMA4_BMM150_DIG_X2 (2) |
| #define BMA4_BMM150_DIG_Y3 (3) |
| #define BMA4_BMM150_DIG_XY1 (4) |
| #define BMA4_BMM150_DIG_XY2 (5) |
| #define BMA4_BMM150_DIG_Z1_LSB (6) |
| #define BMA4_BMM150_DIG_Z1_MSB (7) |
| #define BMA4_BMM150_DIG_Z2_LSB (8) |
| #define BMA4_BMM150_DIG_Z2_MSB (9) |
| #define BMA4_BMM150_DIG_Z3_LSB (10) |
| #define BMA4_BMM150_DIG_Z3_MSB (11) |
| #define BMA4_BMM150_DIG_Z4_LSB (12) |
| #define BMA4_BMM150_DIG_Z4_MSB (13) |
| #define BMA4_BMM150_DIG_XYZ1_LSB (14) |
| #define BMA4_BMM150_DIG_XYZ1_MSB (15) |
| |
| /**************************************************/ |
| /**\name USED FOR MAG OVERFLOW CHECK FOR BMM150 */ |
| /*************************************************/ |
| #define BMA4_MAG_OVERFLOW_OUTPUT (-32768) |
| #define BMA4_MAG_OVERFLOW_OUTPUT_S32 (-2147483647-1) |
| #define BMA4_MAG_NEGATIVE_SATURATION_Z (-32767) |
| #define BMA4_MAG_POSITIVE_SATURATION_Z (32767) |
| #define BMA4_MAG_FLIP_OVERFLOW_ADCVAL (-4096) |
| #define BMA4_MAG_HALL_OVERFLOW_ADCVAL (-16384) |
| |
| /**************************************************/ |
| /**\name BMM150 TRIM DATA DEFINITIONS */ |
| /*************************************************/ |
| #define BMA4_MAG_DIG_X1 (0x5D) |
| #define BMA4_MAG_DIG_Y1 (0x5E) |
| #define BMA4_MAG_DIG_Z4_LSB (0x62) |
| #define BMA4_MAG_DIG_Z4_MSB (0x63) |
| #define BMA4_MAG_DIG_X2 (0x64) |
| #define BMA4_MAG_DIG_Y2 (0x65) |
| #define BMA4_MAG_DIG_Z2_LSB (0x68) |
| #define BMA4_MAG_DIG_Z2_MSB (0x69) |
| #define BMA4_MAG_DIG_Z1_LSB (0x6A) |
| #define BMA4_MAG_DIG_Z1_MSB (0x6B) |
| #define BMA4_MAG_DIG_XYZ1_LSB (0x6C) |
| #define BMA4_MAG_DIG_XYZ1_MSB (0x6D) |
| #define BMA4_MAG_DIG_Z3_LSB (0x6E) |
| #define BMA4_MAG_DIG_Z3_MSB (0x6F) |
| #define BMA4_MAG_DIG_XY2 (0x70) |
| #define BMA4_MAG_DIG_XY1 (0x71) |
| |
| /**************************************************/ |
| /**\name BMM150 REGISTER DEFINITION */ |
| /*************************************************/ |
| #define BMA4_BMM150_CHIP_ID (0x40) |
| #define BMA4_BMM150_POWER_CONTROL_REG (0x4B) |
| #define BMA4_BMM150_POWER_MODE_REG (0x4C) |
| #define BMA4_BMM150_DATA_REG (0x42) |
| #define BMA4_BMM150_XY_REP (0x51) |
| #define BMA4_BMM150_Z_REP (0x52) |
| |
| /**************************************************/ |
| /**\name BMM150 PRE-SET MODE DEFINITIONS */ |
| /*************************************************/ |
| #define BMA4_MAG_PRESETMODE_LOWPOWER (1) |
| #define BMA4_MAG_PRESETMODE_REGULAR (2) |
| #define BMA4_MAG_PRESETMODE_HIGHACCURACY (3) |
| #define BMA4_MAG_PRESETMODE_ENHANCED (4) |
| |
| /**************************************************/ |
| /**\name BMM150 PRESET MODES - DATA RATES */ |
| /*************************************************/ |
| #define BMA4_MAG_LOWPOWER_DR (0x02) |
| #define BMA4_MAG_REGULAR_DR (0x02) |
| #define BMA4_MAG_HIGHACCURACY_DR (0x2A) |
| #define BMA4_MAG_ENHANCED_DR (0x02) |
| |
| /**************************************************/ |
| /**\name BMM150 PRESET MODES - REPETITIONS-XY RATES */ |
| /*************************************************/ |
| #define BMA4_MAG_LOWPOWER_REPXY (1) |
| #define BMA4_MAG_REGULAR_REPXY (4) |
| #define BMA4_MAG_HIGHACCURACY_REPXY (23) |
| #define BMA4_MAG_ENHANCED_REPXY (7) |
| |
| /**************************************************/ |
| /**\name BMM150 PRESET MODES - REPETITIONS-Z RATES */ |
| /*************************************************/ |
| #define BMA4_MAG_LOWPOWER_REPZ (2) |
| #define BMA4_MAG_REGULAR_REPZ (14) |
| #define BMA4_MAG_HIGHACCURACY_REPZ (82) |
| #define BMA4_MAG_ENHANCED_REPZ (26) |
| #define BMA4_MAG_NORMAL_SWITCH_TIMES (5) |
| #define MAG_INTERFACE_PMU_ENABLE (1) |
| #define MAG_INTERFACE_PMU_DISABLE (0) |
| |
| /**\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 s8 (*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 */ |
| int16_t x; |
| /*! BMM150 and AKM09916 Y raw data */ |
| int16_t y; |
| /*! BMM150 and AKM09916 Z raw data */ |
| int16_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; |
| }; |
| /*! |
| * @brief bmm150 mag trim data structure |
| */ |
| struct trim_data_t { |
| int8_t dig_x1;/**<BMM150 trim x1 data*/ |
| int8_t dig_y1;/**<BMM150 trim y1 data*/ |
| int8_t dig_x2;/**<BMM150 trim x2 data*/ |
| int8_t dig_y2;/**<BMM150 trim y2 data*/ |
| uint16_t dig_z1;/**<BMM150 trim z1 data*/ |
| int16_t dig_z2;/**<BMM150 trim z2 data*/ |
| int16_t dig_z3;/**<BMM150 trim z3 data*/ |
| int16_t dig_z4;/**<BMM150 trim z4 data*/ |
| uint8_t dig_xy1;/**<BMM150 trim xy1 data*/ |
| int8_t dig_xy2;/**<BMM150 trim xy2 data*/ |
| uint16_t dig_xyz1;/**<BMM150 trim xyz1 data*/ |
| }; |
| |
| |
| #endif |
| /* End of __BMA4_H__ */ |