| /* |
| * |
| **************************************************************************** |
| * Copyright (C) 2015 - 2016 Bosch Sensortec GmbH |
| * |
| * File : bma4.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.h |
| \brief Sensor Driver for BMA4 family of sensors */ |
| #ifndef BMA4_H__ |
| #define BMA4_H__ |
| |
| /*********************************************************************/ |
| /* header files */ |
| |
| #include "bma4_defs.h" |
| #ifdef AKM9916 |
| #include "aux_akm9916.h" |
| #endif |
| |
| #ifdef BMM150 |
| #include "aux_bmm150.h" |
| #endif |
| /*********************************************************************/ |
| /* (extern) variable declarations */ |
| |
| /*********************************************************************/ |
| /* function prototype declarations */ |
| /*! |
| * @brief This API is the entry point. |
| * Call this API before using all other APIs. |
| * This API reads the chip-id of the sensor which is the first step to |
| * verify the sensor and also it configures the read mechanism of SPI and |
| * I2C interface. |
| * |
| * @param[in,out] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| * @note |
| * While changing the parameter of the bma4 |
| * consider the following point: |
| * Changing the reference value of the parameter |
| * will changes the local copy or local reference |
| * make sure your changes will not |
| * affect the reference value of the parameter |
| * (Better case don't change the reference value of the parameter) |
| */ |
| uint16_t bma4_init(struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API is used to write the binary configuration in the sensor |
| * |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_write_config_file(struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API checks whether the write operation requested is for |
| * feature config or register write and accordingly writes the data in the |
| * sensor. |
| * |
| * @note user has to disable the advance power save mode in the sensor when |
| * using this API in burst write mode. |
| * bma4_set_advance_power_save(BMA4_DISABLE, dev); |
| * |
| * @param[in] addr : Register address. |
| * @param[in] data : Write data buffer |
| * @param[in] len : No of bytes to write |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| */ |
| uint16_t bma4_write_regs(uint8_t addr, uint8_t *data, uint16_t len, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API checks whether the read operation requested is for |
| * feature or register read and accordingly reads the data from the sensor. |
| * |
| * @param[in] addr : Register address. |
| * @param[in] data : Read data buffer. |
| * @param[in] len : No of bytes to read. |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| */ |
| uint16_t bma4_read_regs(uint8_t addr, uint8_t *data, uint16_t len, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the error status from the sensor. |
| * |
| * Below table mention the types of error which can occur in the sensor |
| *@verbatim |
| ************************************************************************* |
| * Error | Description |
| *************************|*********************************************** |
| * | Fatal Error, chip is not in operational |
| * fatal | state (Boot-, power-system). |
| * | This flag will be reset only by |
| * | power-on-reset or soft reset. |
| *************************|*********************************************** |
| * cmd | Command execution failed. |
| *************************|*********************************************** |
| * | Value Name Description |
| * error_code | 000 no_error no error |
| * | 001 acc_err error in |
| * | ACC_CONF |
| *************************|*********************************************** |
| * | Error in FIFO detected: Input data was |
| * fifo | discarded in stream mode. This flag |
| * | will be reset when read. |
| *************************|*********************************************** |
| * mag | Error in I2C-Master detected. |
| * | This flag will be reset when read. |
| ************************************************************************* |
| *@endverbatim |
| * |
| * @param[in,out] err_reg : Pointer to structure variable which stores the |
| * error status read from the sensor. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| */ |
| uint16_t bma4_get_error_status(struct bma4_err_reg *err_reg, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the sensor status from the dev sensor. |
| * |
| * Below table lists the sensor status flags |
| * Status | Description |
| * ----------------------------|---------------------------------------- |
| * BMA4_MAG_MAN_OP_ONGOING | Manual Mag. interface operation ongoing |
| * BMA4_CMD_RDY | Command decoder is ready. |
| * BMA4_MAG_DATA_RDY | Data ready for Mag. |
| * BMA4_ACC_DATA_RDY | Data ready for Accel. |
| * |
| * @param[in] status : Variable used to store the sensor status flags |
| * which is read from the sensor. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_status(uint8_t *status, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the Accel data for x,y and z axis from the sensor. |
| * The data units is in LSB format. |
| * |
| * @param[in] accel : Variable used to store the Accel data which is read |
| * from the sensor. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @note For setting the Accel configuration use the below function |
| * bma4_set_accel_config |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_read_accel_xyz(struct bma4_accel *accel, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the sensor time of Sensor time gets updated |
| * with every update of data register or FIFO. |
| * |
| * @param[in] sensor_time : Pointer variable which stores sensor time |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_sensor_time(uint32_t *sensor_time, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the chip temperature of sensor. |
| * @note If Accel and Mag are disabled, the temperature value will be set |
| * to invalid. |
| * |
| * @param[out] temp : Pointer variable which stores the temperature value. |
| * @param[in] temp_unit : indicates the unit of temperature |
| * temp_unit | description |
| * ------------|------------------- |
| * BMA4_DEG | degrees Celsius |
| * BMA4_FAHREN | degrees fahrenheit |
| * BMA4_KELVIN | degrees kelvin |
| * |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @note Using a scaling factor of 1000, to obtain integer values, which |
| * at the user end, are used to get accurate temperature value. |
| * BMA4_SCALE_FARHAN = 1.8 * 1000, BMA4_SCALE_KELVIN = 273.15 * 1000 |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_temperature(int32_t *temp, uint8_t temp_unit, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the Output data rate, Bandwidth, perf_mode |
| * and Range of accel. |
| * |
| * @param[in,out] accel : Address of user passed structure which is used |
| * to store the Accel configurations read from the sensor. |
| * |
| * @note Enums and corresponding values for structure parameters like |
| * Odr, Bandwidth and Range are mentioned in the below tables. |
| * |
| * Value | Odr |
| * -----------|------------------------------------ |
| * 1 | BMA4_OUTPUT_DATA_RATE_0_78HZ |
| * 2 | BMA4_OUTPUT_DATA_RATE_1_56HZ |
| * 3 | BMA4_OUTPUT_DATA_RATE_3_12HZ |
| * 4 | BMA4_OUTPUT_DATA_RATE_6_25HZ |
| * 5 | BMA4_OUTPUT_DATA_RATE_12_5HZ |
| * 6 | BMA4_OUTPUT_DATA_RATE_25HZ |
| * 7 | BMA4_OUTPUT_DATA_RATE_50HZ |
| * 8 | BMA4_OUTPUT_DATA_RATE_100HZ |
| * 9 | BMA4_OUTPUT_DATA_RATE_200HZ |
| * 10 | BMA4_OUTPUT_DATA_RATE_400HZ |
| * 11 | BMA4_OUTPUT_DATA_RATE_800HZ |
| * 12 | BMA4_OUTPUT_DATA_RATE_1600HZ |
| * |
| * Value | accel_bw |
| * ------|-------------------------- |
| * 0 | BMA4_ACCEL_OSR4_AVG1 |
| * 1 | BMA4_ACCEL_OSR2_AVG2 |
| * 2 | BMA4_ACCEL_NORMAL_AVG4 |
| * 3 | BMA4_ACCEL_CIC_AVG8 |
| * 4 | BMA4_ACCEL_RES_AVG16 |
| * 5 | BMA4_ACCEL_RES_AVG32 |
| * 6 | BMA4_ACCEL_RES_AVG64 |
| * 7 | BMA4_ACCEL_RES_AVG128 |
| * |
| * Value | g_range |
| * --------|--------------------- |
| * 0x00 | BMA4_ACCEL_RANGE_2G |
| * 0x01 | BMA4_ACCEL_RANGE_4G |
| * 0x02 | BMA4_ACCEL_RANGE_8G |
| * 0x03 | BMA4_ACCEL_RANGE_16G |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_accel_config(struct bma4_accel_config *accel, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the output_data_rate, bandwidth, perf_mode |
| * and range of Accel. |
| * |
| * @param[in] accel : Pointer to structure variable which specifies the |
| * Accel configurations. |
| * |
| * @note Enums and corresponding values for structure parameters like |
| * Odr, Bandwidth and Range are mentioned in the below tables. |
| * Value | ODR |
| * --------|----------------------------------------- |
| * 1 | BMA4_OUTPUT_DATA_RATE_0_78HZ |
| * 2 | BMA4_OUTPUT_DATA_RATE_1_56HZ |
| * 3 | BMA4_OUTPUT_DATA_RATE_3_12HZ |
| * 4 | BMA4_OUTPUT_DATA_RATE_6_25HZ |
| * 5 | BMA4_OUTPUT_DATA_RATE_12_5HZ |
| * 6 | BMA4_OUTPUT_DATA_RATE_25HZ |
| * 7 | BMA4_OUTPUT_DATA_RATE_50HZ |
| * 8 | BMA4_OUTPUT_DATA_RATE_100HZ |
| * 9 | BMA4_OUTPUT_DATA_RATE_200HZ |
| * 10 | BMA4_OUTPUT_DATA_RATE_400HZ |
| * 11 | BMA4_OUTPUT_DATA_RATE_800HZ |
| * 12 | BMA4_OUTPUT_DATA_RATE_1600HZ |
| * |
| * Value | accel_bw |
| * ------|-------------------------- |
| * 0 | BMA4_ACCEL_OSR4_AVG1 |
| * 1 | BMA4_ACCEL_OSR2_AVG2 |
| * 2 | BMA4_ACCEL_NORMAL_AVG4 |
| * 3 | BMA4_ACCEL_CIC_AVG8 |
| * 4 | BMA4_ACCEL_RES_AVG16 |
| * 5 | BMA4_ACCEL_RES_AVG32 |
| * 6 | BMA4_ACCEL_RES_AVG64 |
| * 7 | BMA4_ACCEL_RES_AVG128 |
| * |
| * Value | g_range |
| * --------|--------------------- |
| * 0x00 | BMA4_ACCEL_RANGE_2G |
| * 0x01 | BMA4_ACCEL_RANGE_4G |
| * 0x02 | BMA4_ACCEL_RANGE_8G |
| * 0x03 | BMA4_ACCEL_RANGE_16G |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_accel_config(const struct bma4_accel_config *accel, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the advance power save mode in the sensor. |
| * |
| * @note If advanced power save is enabled and the Accel and/or |
| * magnetometer operate in duty cycling mode, the length of the unlatched |
| * DRDY interrupt pulse is longer than 1/3.2 kHz (312.5 us). |
| * |
| * @param[in] adv_pwr_save : The value of advance power save mode |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_advance_power_save(uint8_t adv_pwr_save, |
| struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the status of advance power save mode |
| * from the sensor. |
| * |
| * @note If the advanced power save is enabled and the Accel and/or |
| * magnetometer operate in duty cycling mode, the length of the unlatched |
| * DRDY interrupt pulse is longer than 1/3.2 kHz (312.5 us). |
| * |
| * @param[out] adv_pwr_save : The value of advance power save mode |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_advance_power_save(uint8_t *adv_pwr_save, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the FIFO self wake up functionality in the sensor. |
| * |
| * @note Functionality related to FIFO self wake up depends upon the |
| * advance power save mode. for more info. refer data sheet. |
| * |
| * @param[in] fifo_self_wakeup : Variable used to enable or disable |
| * FIFO self wake up functionality. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_fifo_self_wakeup(uint8_t fifo_self_wakeup, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API gets the status of FIFO self wake up functionality from |
| * the sensor. |
| * |
| * @note Functionality related to FIFO self wake up depends upon the |
| * advance power save mode. for more info. refer data sheet. |
| * |
| * @param[out] fifo_self_wake_up : Pointer variable used to store the |
| * fifo self wake up status. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_fifo_self_wakeup(uint8_t *fifo_self_wake_up, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API enables or disables the Accel in the sensor. |
| * |
| * @note Before reading Accel data, user should call this API. |
| * |
| * @param[in] accel_en : Variable used to enable or disable the Accel. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_accel_enable(uint8_t accel_en, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API checks whether Accel is enabled or not in the sensor. |
| * |
| * @param[out] accel_en : Pointer variable used to store the Accel enable |
| * status |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_accel_enable(uint8_t *accel_en, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API is used to enable or disable auxiliary Mag |
| * in the sensor. |
| * |
| * @note Before reading Mag data, user should call this API. |
| * |
| * @param[in] mag_en : Variable used to enable or disable the Mag. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_mag_enable(uint8_t mag_en, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API is used to check whether the auxiliary Mag is enabled |
| * or not in the sensor. |
| * |
| * @param[out] mag_en : Pointer variable used to store the enable status of |
| * Mag in the sensor. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_mag_enable(uint8_t *mag_en, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the SPI interface mode which is set for primary |
| * interface. |
| * |
| * @param[out] spi : Pointer variable which stores the SPI mode selection |
| * Value | Description |
| * --------|------------------ |
| * 0 | SPI 4-wire mode |
| * 1 | SPI 3-wire mode |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_spi_interface(uint8_t *spi, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API configures the SPI interface Mode for primary interface |
| * |
| * @param[in] spi : The value of SPI mode selection |
| * Value | Description |
| * --------|------------------ |
| * 0 | SPI 4-wire mode |
| * 1 | SPI 3-wire mode |
| * |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_spi_interface(uint8_t spi, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API writes the available sensor specific commands |
| * to the sensor. |
| * |
| * @param[in] command_reg : The command to write to the command register. |
| *@verbatim |
| * value | Description |
| * --------|------------------------------------------------------ |
| * 0xB6 | Triggers a soft reset |
| * 0xB0 | Clears all data in the FIFO, does not change |
| * | FIFO_CONFIG and FIFO_DOWNS registers |
| * 0xF0 | Reset acceleration data path |
| *@endverbatim |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @note Register will always read as 0x00 |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_command_register(uint8_t command_reg, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the I2C device address of auxiliary sensor |
| * |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_i2c_device_addr(struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the register access on MAG_IF[2], MAG_IF[3], |
| * MAG_IF[4] in the sensor. This implies that the DATA registers are |
| * not updated with Mag values automatically. |
| * |
| * @param[in] mag_manual : Variable used to specify the Mag manual |
| * enable status. |
| * value | mag manual |
| * ---------|-------------------- |
| * 0x01 | BMA4_ENABLE |
| * 0x00 | BMA4_DISABLE |
| * |
| * @param[out] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_mag_manual_enable(uint8_t mag_manual, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API checks whether the Mag access is done manually or |
| * automatically in the sensor. |
| * If the Mag access is done through manual mode then Mag data registers |
| * in sensor are not updated automatically. |
| * |
| * @param[out] mag_manual : Mag manual enable value |
| * value | mag_manual |
| * --------|------------------- |
| * 0x01 | BMA4_ENABLE |
| * 0x00 | BMA4_DISABLE |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_mag_manual_enable(uint8_t *mag_manual, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the I2C interface configuration(if) mode |
| * for auxiliary Mag. |
| * |
| * @param[in] if_mode : The value of interface configuration mode |
| * Value | Description |
| * ------------|------------------------------------------- |
| * 0 | p_auto_s_off Auxiliary interface:off |
| * 1 | p_auto_s_mag Auxiliary interface:on |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_aux_if_mode(uint8_t if_mode, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API gets the address of the register of Aux Mag sensor |
| * where the data to be read. |
| * |
| * @param[out] mag_read_addr : Pointer variable used to store the |
| * mag read address. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_mag_read_addr(uint8_t *mag_read_addr, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the address of the register of Aux Mag sensor |
| * where the data to be read. |
| * |
| * @param[in] mag_read_addr: Value of Mag. read address in order to read |
| * the data from the auxiliary Mag. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_mag_read_addr(uint8_t mag_read_addr, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API gets the Aux Mag write address from the sensor. |
| * Mag write address is where the Mag data will be written. |
| * |
| * @param[out] mag_write_addr: Pointer used to store the Mag write address |
| * which is read from the sensor. |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_mag_write_addr(uint8_t *mag_write_addr, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the Aux Mag write address in the sensor. |
| * Mag write address is where the Mag data will be written. |
| * |
| * @param[in] mag_write_addr: Write address of Mag where the data will |
| * be written. |
| * @param[out] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_mag_write_addr(uint8_t mag_write_addr, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the data from the sensor which is written to the |
| * Mag. |
| * |
| * @param[out] mag_write_data: Pointer variable which stores the |
| * data which is written in Mag through sensor. |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_mag_write_data(uint8_t *mag_write_data, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the data in the sensor which in turn will |
| * be written to Mag. |
| * |
| * @param[in] mag_write_data: variable which specify the data which is to |
| * be written in Mag. |
| * @param[out] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_mag_write_data(uint8_t mag_write_data, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the x,y,z and r axis data from the auxiliary |
| * Mag BMM150/AKM9916 sensor. |
| * |
| * @param[out] mag : Pointer variable to store the auxiliary Mag x,y,z |
| * and r axis data read from the sensor. |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_read_mag_xyzr(struct bma4_mag_xyzr *mag, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the burst data length (1,2,6,8 byte) of auxiliary |
| * Mag sensor. |
| * |
| * @param[in] mag_burst : Variable used to specify the Mag burst read length |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_mag_burst(uint8_t mag_burst, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the burst data length of Mag set in the sensor. |
| * |
| * @param[out] mag_burst : Pointer variable used to store the burst length |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_mag_burst(uint8_t *mag_burst, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the FIFO data of Accel and/or Mag sensor |
| * |
| * @param dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_read_fifo_data(struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the FIFO water mark level which is set |
| * in the sensor. |
| * |
| * @note The FIFO watermark is issued when the FIFO fill level is |
| * equal or above the watermark level. |
| * |
| * @param[out] fifo_wm : Pointer variable to store FIFO water mark level |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_fifo_wm(uint16_t *fifo_wm, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the FIFO watermark level in the sensor. |
| * |
| * @note The FIFO watermark is issued when the FIFO fill level is |
| * equal or above the watermark level. |
| * |
| * @param[in] fifo_wm : Variable used to set the FIFO water mark level |
| * @param[out] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_fifo_wm(uint16_t fifo_wm, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API checks whether the Accel FIFO data is set for filtered |
| * or unfiltered mode. |
| * |
| * @param[out] accel_fifo_filter : Variable used to check whether the Accel |
| * data is filtered or unfiltered. |
| * Value | accel_fifo_filter |
| * ---------|------------------------- |
| * 0x00 | Unfiltered data |
| * 0x01 | Filtered data |
| * @param[in] dev : structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_accel_fifo_filter_data(uint8_t *accel_fifo_filter, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the condition of Accel FIFO data either to |
| * filtered or unfiltered mode. |
| * |
| * @param[in] accel_fifo_filter : Variable used to set the filtered or |
| * unfiltered condition of Accel FIFO data. |
| * value | accel_fifo_filter_data |
| * -----------|------------------------- |
| * 0x00 | Unfiltered data |
| * 0x01 | Filtered data |
| * @param[out] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_accel_fifo_filter_data(uint8_t accel_fifo_filter, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the down sampling rates which is configured |
| * for Accel FIFO data. |
| * |
| * @param[out] fifo_down : Variable used to specify the Accel FIFO |
| * down-sampling rates |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_fifo_down_accel(uint8_t *fifo_down, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the down-sampling rates for Accel FIFO. |
| * |
| * @param[in] fifo_down : Variable used to specify the Accel FIFO |
| * down-sampling rates. |
| * @param[in] dev : structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_fifo_down_accel(uint8_t fifo_down, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the length of FIFO data available in the sensor |
| * in the units of bytes. |
| * |
| * @note This byte counter is updated each time a complete frame was read |
| * or written |
| * |
| * @param[in] fifo_length : Pointer variable used to store the value of |
| * fifo byte counter |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_fifo_length(uint16_t *fifo_length, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API aligns and compensates the Mag data of BMM150/AKM9916 |
| * sensor. |
| * |
| * @param[in] mag_fifo_data: Structure object which stores the Mag x,yand z |
| * axis FIFO data which is to be aligned and/or compensated. |
| * @param[in] mag_second_if: Variable used to select the Mag sensor. |
| * Value | mag_second_if |
| * --------|---------------------- |
| * 1 | BMA4_SEC_IF_BMM150 |
| * 2 | BMA4_SEC_IF_AKM09916 |
| * |
| * @param[out] compensated_mag_data: Pointer variable used to store the |
| * compensated Mag xyz axis data |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_second_if_mag_compensate_xyz(struct bma4_mag_fifo_data mag_fifo_data, |
| uint8_t mag_second_if, |
| struct bma4_mag *compensated_mag_data); |
| |
| /*! |
| * @brief This API reads Mag. x,y and z axis data from either BMM150 or |
| * AKM9916 sensor |
| * |
| * @param[out] mag : Structure pointer used to store the Mag x,y, and z axis |
| * data read from the sensor. |
| * |
| * @param[in] sensor_select : Variable used to select the Mag sensor |
| * Value | Sensor |
| * ---------|---------------------- |
| * 0 | BMA4_SEC_IF_NULL |
| * 1 | BMA4_SEC_IF_BMM150 |
| * 2 | BMA4_SEC_IF_AKM09916 |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_read_mag_xyz(struct bma4_mag *mag, uint8_t sensor_select, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the auxiliary I2C interface configuration which |
| * is set in the sensor. |
| * |
| * @param[out] if_mode : Pointer variable used to store the auxiliary |
| * interface configuration. |
| * Value | Description |
| * ----- |---------------------------------- |
| * 0x00 | auxiliary interface:off |
| * 0x01 | auxiliary interface:on |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_if_mode(uint8_t *if_mode, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the auxiliary interface configuration in the sensor. |
| * |
| * @param[in] if_mode : Variable used to select the auxiliary interface |
| * configuration. |
| * Value | Description |
| * ----- |-------------------------- |
| * 0x00 | auxiliary interface:off |
| * 0x01 | auxiliary interface:on |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_if_mode(uint8_t if_mode, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the data ready status of Accel from the sensor. |
| * @note The status get reset when Accel data register is read. |
| * |
| * @param[out] data_rdy : Pointer variable to store the data ready status |
| * @param[in] dev : structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_accel_data_rdy(uint8_t *data_rdy, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the data ready status of Mag from the sensor. |
| * The status get reset when Mag data register is read. |
| * |
| * @param[out] data_rdy : Pointer variable to store the data ready status |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_mag_data_rdy(uint8_t *data_rdy, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the ASIC status from the sensor. |
| * The status information is mentioned in the below table. |
| * |
| *@verbatim |
| ******************************************************************************* |
| * Status | Description |
| **************************|**************************************************** |
| * sleep | ASIC is in sleep/halt state. |
| * irq_ovrn | Dedicated interrupt is set again before previous |
| * | interrupt was acknowledged. |
| * wc_event | Watchcell event detected (ASIC stopped). |
| * stream_transfer_active | stream transfer has started. |
| ******************************************************************************* |
| *@endverbatim |
| * |
| * @param[out] asic_status : Structure pointer used to store the ASIC |
| * status read from the sensor. |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_asic_status(struct bma4_asic_status *asic_status, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API enables the offset compensation for filtered and |
| * unfiltered Accel data. |
| * |
| * @param[in] offset_en : Variable used to enable or disable offset |
| * compensation |
| * offset_en | Description |
| * ------------|---------------------- |
| * 0 | BMA4_DISABLE |
| * 1 | BMA4_ENABLE |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_offset_comp(uint8_t offset_en, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API gets the status of Accel offset compensation |
| * |
| * @param[out] offset_en : Pointer variable used to store the Accel offset |
| * enable or disable status. |
| * offset_en | Description |
| * ----------|-------------- |
| * 0 | BMA4_DISABLE |
| * 1 | BMA4_ENABLE |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_offset_comp(uint8_t *offset_en, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API parses and extracts the accelerometer frames from |
| * FIFO data read by the "bma4_read_fifo_data" API and stores it in the |
| * "accel_data" structure instance. |
| * |
| * @note The bma4_extract_accel API should be called only after reading |
| * the FIFO data by calling the bma4_read_fifo_data() API |
| * |
| * @param[in,out] accel_data : Structure instance of bma4_accel where |
| * the accelerometer data in FIFO is stored. |
| * @param[in,out] accel_length : Number of accelerometer frames |
| * (x,y,z axes data) |
| * @param[in,out] dev : Structure instance of bma4_dev. |
| * |
| * @note accel_length has the number of accelerometer frames |
| * (1 accel frame = 6 bytes) which the user needs to extract and store is |
| * provided as input parameter by the user and the Number of valid |
| * accelerometer frames extracted and stored is updated in |
| * "accel_length" at the end of execution of this API. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_extract_accel(struct bma4_accel *accel_data, uint16_t *accel_length, const struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API parses and extracts the magnetometer frames from |
| * FIFO data read by the "bma4_read_fifo_data" API and stores it in the |
| * "mag_data" structure instance parameter of this API |
| * |
| * @note The bma4_extract_mag API should be called only after reading |
| * the FIFO data by calling the bma4_read_fifo_data() API |
| * |
| * @param[in,out] mag_data : Structure instance of bma4_mag_xyzr where |
| * the magnetometer data in FIFO is stored. |
| * @param[in,out] mag_length : Number of magnetometer frames (x,y,z,r data) |
| * @param[in,out] dev : Structure instance of bma4_dev. |
| * |
| * @note mag_length has the number of magnetometer frames(x,y,z,r data) |
| * (1 mag frame = 8 bytes) which the user needs to extract and store,It is |
| * provided as input parameter by the user and the number of valid |
| * magnetometer frames extracted and stored is updated in |
| * "mag_length" at the end of execution of this API. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_extract_mag(struct bma4_mag *mag_data, uint16_t *mag_length, const struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API performs Fast Offset Compensation for Accel. |
| * @param[in] accel_g_value : Array which stores the Accel g units |
| * for x,y and z axis. |
| * accel_g_value | Description |
| * --------------------------|--------------------------------------- |
| * accel_g_value[0] | x axis g units |
| * accel_g_value[1] | y axis g units |
| * accel_g_value[2] | z axis g units |
| * |
| * @param[in] dev : structure instance of dev |
| * |
| * @note The g-values to be passed to the parameter should be |
| * multiples of 1000000. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_perform_accel_foc(const int32_t accel_g_value[3], struct bma4_dev *dev); |
| /*! |
| * @brief This API checks whether the self test functionality of the sensor |
| * is working or not |
| * |
| * @param[in] result : Pointer variable used to store the result of self test |
| * operation |
| * result | Description |
| * ---------|-------------------- |
| * 0x00 | BMA4_SELFTEST_PASS |
| * 0x01 | BMA4_SELFTEST_FAIL |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return results of self test |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_perform_accel_selftest(uint8_t *result, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API performs the steps needed for Self test operation |
| * before reading the Accel Self test data. |
| * |
| * @param[in] sign: Variable used to specify the self test sign |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return results of self test |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_selftest_config(uint8_t sign, struct bma4_dev *dev); |
| |
| /*! |
| * @brief API sets the interrupt to either interrupt1 or |
| * interrupt2 pin in the sensor. |
| * |
| * @param[in] int_line: Variable used to select interrupt pin1 or pin2 |
| * int_line | interrupt selection |
| * ---------|------------------- |
| * 0 | BMA4_INTR1_MAP |
| * 1 | BMA4_INTR2_MAP |
| * |
| * @param[in] int_map: Variable used to select a particular interrupt |
| * in the sensor |
| * |
| * @param[in] enable : Variable used to enable or disable the interrupt |
| * Value | Behaviour |
| * ---------|------------------- |
| * 0x01 | BMA4_ENABLE |
| * 0x00 | BMA4_DISABLE |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_map_interrupt(uint8_t int_line, uint16_t int_map, uint8_t enable, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the interrupt mode in the sensor. |
| * |
| * @param[in] mode: Variable used to specify the interrupt mode which |
| * is to be set in the sensor. |
| * Mode | Value |
| * ----------------------- |--------- |
| * BMA4_NON_LATCH_MODE | 0 |
| * BMA4_LATCH_MODE | 1 |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return status of bus communication function |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_interrupt_mode(uint8_t mode, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API gets the interrupt mode which is set in the sensor. |
| * |
| * @param[out] mode: Pointer variable used to store the interrupt mode set in |
| * in the sensor. |
| * Mode | Value |
| * ---------------------|--------------- |
| * BMA4_NON_LATCH_MODE | 0 |
| * BMA4_LATCH_MODE | 1 |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return status of bus communication function |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_interrupt_mode(uint8_t *mode, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the auxiliary Mag(BMM150 or AKM9916) output data |
| * rate and offset. |
| * |
| * @param[in] aux_mag : Pointer to structure variable used to specify |
| * the auxiliary Mag configuration. |
| *@verbatim |
| *------------------------------------------------------------------------------ |
| * Odr | Value |
| *----------------------------------------|--------------------------------- |
| * BMA4_OUTPUT_DATA_RATE_0_78HZ | 0x01 |
| * BMA4_OUTPUT_DATA_RATE_1_56HZ | 0x02 |
| * BMA4_OUTPUT_DATA_RATE_3_12HZ | 0x03 |
| * BMA4_OUTPUT_DATA_RATE_6_25HZ | 0x04 |
| * BMA4_OUTPUT_DATA_RATE_12_5HZ | 0x05 |
| * BMA4_OUTPUT_DATA_RATE_25HZ | 0x06 |
| * BMA4_OUTPUT_DATA_RATE_50HZ | 0x07 |
| * BMA4_OUTPUT_DATA_RATE_100HZ | 0x08 |
| * BMA4_OUTPUT_DATA_RATE_200HZ | 0x09 |
| * BMA4_OUTPUT_DATA_RATE_400HZ | 0x0A |
| * BMA4_OUTPUT_DATA_RATE_800HZ | 0x0B |
| * BMA4_OUTPUT_DATA_RATE_1600HZ | 0x0C |
| *------------------------------------------------------------------------------ |
| * Offset | Value |
| *--------------------------------------------|--------------------------------- |
| * BMA4_MAG_OFFSET_MAX | 0x00 |
| *--------------------------------------------|--------------------------------- |
| @endverbatim |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return status of bus communication function |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_aux_mag_config(const struct bma4_aux_mag_config *aux_mag, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the auxiliary Mag(BMM150 or AKM9916) output data |
| * rate and offset. |
| * @note : Valid output data rates are mentioned in the below table |
| * |
| * @param[out] aux_mag : Pointer to structure variable used to store the |
| * auxiliary Mag configuration read from the sensor |
| *@verbatim |
| *------------------------------------------------------------------------ |
| * Odr | Value |
| *----------------------------------------|------------------------------- |
| * BMA4_OUTPUT_DATA_RATE_0_78HZ | 0x01 |
| * BMA4_OUTPUT_DATA_RATE_1_56HZ | 0x02 |
| * BMA4_OUTPUT_DATA_RATE_3_12HZ | 0x03 |
| * BMA4_OUTPUT_DATA_RATE_6_25HZ | 0x04 |
| * BMA4_OUTPUT_DATA_RATE_12_5HZ | 0x05 |
| * BMA4_OUTPUT_DATA_RATE_25HZ | 0x06 |
| * BMA4_OUTPUT_DATA_RATE_50HZ | 0x07 |
| * BMA4_OUTPUT_DATA_RATE_100HZ | 0x08 |
| * BMA4_OUTPUT_DATA_RATE_200HZ | 0x09 |
| * BMA4_OUTPUT_DATA_RATE_400HZ | 0x0A |
| * BMA4_OUTPUT_DATA_RATE_800HZ | 0x0B |
| * BMA4_OUTPUT_DATA_RATE_1600HZ | 0x0C |
| *------------------------------------------------------------------------- |
| * Offset | Value |
| *----------------------------------------|-------------------------------- |
| * BMA4_MAG_OFFSET_MAX | 0x00 |
| *------------------------------------------------------------------------- |
| @endverbatim |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return status of bus communication function |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_aux_mag_config(struct bma4_aux_mag_config *aux_mag, struct bma4_dev *dev); |
| |
| /*! @brief This API sets the FIFO configuration in the sensor. |
| * |
| * @param[in] config : Enum variable used to specify the FIFO |
| * configurations which are to be enabled or disabled in the sensor. |
| * |
| * @note : User can set either one or more or all FIFO configurations |
| * by ORing the below mentioned enums. |
| * config | Value |
| * ------------------------|--------------------------- |
| * BMA4_FIFO_STOP_ON_FULL | 0x01 |
| * BMA4_FIFO_TIME | 0x02 |
| * BMA4_FIFO_TAG_INTR2 | 0x04 |
| * BMA4_FIFO_TAG_INTR1 | 0x08 |
| * BMA4_FIFO_HEADER | 0x10 |
| * BMA4_FIFO_MAG | 0x20 |
| * BMA4_FIFO_ACCEL | 0x40 |
| * BMA4_FIFO_ALL | 0x7F |
| * |
| * @param[in] enable : Parameter used to enable or disable the above |
| * FIFO configuration |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return status of bus communication result |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_fifo_config(uint8_t config, uint8_t enable, struct bma4_dev *dev); |
| |
| /*! @brief This API reads the FIFO configuration from the sensor. |
| * |
| * @param[in] fifo_config : Enum variable used to get the below fifo |
| * configuration from the sensor. |
| * |
| * @note After calling this function user should do the AND operation with |
| * the enum value populated by this function to know which FIFO |
| * configuration is enabled. |
| * fifo_config | Value |
| * -------------------------|-------------------------- |
| * BMA4_FIFO_STOP_ON_FULL | 0x01 |
| * BMA4_FIFO_TIME | 0x02 |
| * BMA4_FIFO_TAG_INTR2 | 0x04 |
| * BMA4_FIFO_TAG_INTR1 | 0x08 |
| * BMA4_FIFO_HEADER | 0x10 |
| * BMA4_FIFO_MAG | 0x20 |
| * BMA4_FIFO_ACCEL | 0x40 |
| * BMA4_FIFO_ALL | 0x7F |
| * |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return status of bus communication function |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_fifo_config(uint8_t *fifo_config, struct bma4_dev *dev); |
| |
| /*! @brief This function sets the electrical behaviour of interrupt pin1 or |
| * pin2 in the sensor. |
| * |
| * @param[in] int_pin_config : Pointer to structure variable which specifies |
| * the configuration data of either interrupt pin1 or 2. |
| *@verbatim |
| * ************************************************************************ |
| * Structure field members | Macros |
| * ********************************|*************************************** |
| * edge_ctrl | BMA4_LEVEL_TRIGGER(0) |
| * | BMA4_EDGE_TRIGGER(1) |
| * ********************************|*************************************** |
| * lvl | BMA4_ACTIVE_LOW(0) |
| * | BMA4_ACTIVE_HIGH(1) |
| * ********************************|*************************************** |
| * od | BMA4_PUSH_PULL(0) |
| * | BMA4_OPEN_DRAIN(1) |
| * ********************************|*************************************** |
| * output_en | BMA4_OUTPUT_DISABLE(0) |
| * | BMA4_OUTPUT_ENABLE(1) |
| * ********************************|*************************************** |
| * input_en | BMA4_INPUT_DISABLE(0) |
| * | BMA4_INPUT_ENABLE(1) |
| * ************************************************************************ |
| *@endverbatim |
| * @param[in] int_line : Variable used to select the interrupt pin1 or |
| * pin2 for interrupt configuration. |
| * int_line | Value |
| * ----------------|---------------------- |
| * BMA4_INTR1_MAP | 0 |
| * BMA4_INTR2_MAP | 1 |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return status of bus communication function |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| */ |
| uint16_t bma4_set_int_pin_config(const struct bma4_int_pin_config *int_pin_config, uint8_t int_line, |
| struct bma4_dev *dev); |
| |
| /*! @brief This API reads the electrical behavior of interrupt pin1 or pin2 |
| * from the sensor. |
| * |
| * @param[out] int_pin_config : Pointer to structure variable which stores the |
| * configuration data of either interrupt pin1 or pin2 read from the sensor |
| *@verbatim |
| * ************************************************************************ |
| * Structure field members | Macros |
| * ************************|*********************************************** |
| * edge_ctrl | BMA4_LEVEL_TRIGGER(0) |
| * | BMA4_EDGE_TRIGGER(1) |
| * ************************|*********************************************** |
| * lvl | BMA4_ACTIVE_LOW(0) |
| * | BMA4_ACTIVE_HIGH(1) |
| * ************************|*********************************************** |
| * od | BMA4_PUSH_PULL(0) |
| * | BMA4_OPEN_DRAIN(1) |
| * ************************|*********************************************** |
| * output_en | BMA4_OUTPUT_DISABLE(0) |
| * | BMA4_OUTPUT_ENABLE(1) |
| * ************************|*********************************************** |
| * input_en | BMA4_INPUT_DISABLE(0) |
| * | BMA4_INPUT_ENABLE(1) |
| * ************************************************************************ |
| *@endverbatim |
| * @param[in] int_line : Variable used to select the interrupt pin1 or |
| * pin2 for interrupt configuration. |
| * int_line | Value |
| * -------------------|--------------- |
| * BMA4_INTR1_MAP | 0 |
| * BMA4_INTR2_MAP | 1 |
| * |
| * @param[in] dev : Structure instance of bma4_dev |
| * |
| * @return status of bus communication function |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_get_int_pin_config(struct bma4_int_pin_config *int_pin_config, uint8_t int_line, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the Feature and Hardware interrupt status from the sensor. |
| * |
| * @param[out] int_status : Variable used to get the interrupt status. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_read_int_status(uint16_t *int_status, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the Feature interrupt status from the sensor. |
| * |
| * @param[out] int_status_0 : Variable used to get the interrupt status. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_read_int_status_0(uint8_t *int_status_0, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the Hardware interrupt status from the sensor. |
| * |
| * @param[out] int_status_1 : Variable used to get the interrupt status. |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_read_int_status_1(uint8_t *int_status_1, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API initializes the auxiliary interface to access |
| * auxiliary sensor |
| * |
| * @param[in] dev : Structure instance of bma4_dev. |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_aux_interface_init(struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the data from the auxiliary sensor |
| * |
| * @param[in] dev : Structure instance of bma4_dev. |
| * @param[in] len : User specified data length |
| * @param[out] aux_data : Pointer variable to store data read |
| * @param[in] aux_reg_addr : Variable to pass address from where |
| * data is to be read |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_aux_read(uint8_t aux_reg_addr, uint8_t *aux_data, uint16_t len, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API writes the data into the auxiliary sensor |
| * |
| * @param[in] dev : Structure instance of bma4_dev. |
| * @param[in] len : User specified data length |
| * @param[out] aux_data : Pointer variable to store data read |
| * @param[in] aux_reg_addr : Variable to pass address from where |
| * data is to be written |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_aux_write(uint8_t aux_reg_addr, uint8_t *aux_data, uint16_t len, struct bma4_dev *dev); |
| /***************************************************/ |
| /*! |
| * @brief This API initializes the auxiliary Mag BMM150 sensor and reads |
| * its chip-id. |
| * |
| * @param chip_id : Pointer to store chip id of BMM150 sensor which is |
| * read from the sensor. |
| * @param dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_bmm150_mag_interface_init(uint8_t *chip_id, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API enables the BMM150 Mag sensor's power control bit |
| * thereby waking up the sensor from suspend to sleep mode. |
| * |
| * @param dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_bmm150_mag_wakeup(struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API reads the raw Mag data and performs the compensation of |
| * the read data. |
| * |
| * @note Before setting the Mag preset mode make sure BMM150 sensor is |
| * initialized and chip id is verified using the below API. |
| * - bma4_bmm150_mag_interface_init() |
| * |
| * @param mag_comp_xyz: Pointer to structure variable to store the |
| * compensated Mag data. |
| * @param dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_bmm150_mag_compensate_xyz(struct bma4_mag *mag_comp_xyz, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API compensates BMM150-X axis data which is passed by the |
| * user. |
| * |
| * @param mag_data_x : Variable to specify the Mag raw X axis data. |
| * @param data_r : Variable to specify the Mag R data. |
| * |
| * @return Compensated Mag X axis data |
| * |
| */ |
| int32_t bma4_bmm150_mag_compensate_X(int16_t mag_data_x, uint16_t data_r); |
| |
| /*! |
| * @brief This API compensates BMM150-Y axis data which is passed by the |
| * user. |
| * |
| * @param mag_data_y : Variable to specify the Mag raw Y axis data. |
| * @param data_r : Variable to specify the Mag R data. |
| * |
| * @return Compensated Mag Y axis data |
| * |
| */ |
| int32_t bma4_bmm150_mag_compensate_Y(int16_t mag_data_y, uint16_t data_r); |
| |
| /*! |
| * @brief This API compensates BMM150-Z axis data which is passed by the |
| * user. |
| * |
| * @param mag_data_z : Variable to specify the Mag raw Z axis. |
| * @param data_r : Variable to specify the Mag R data. |
| * |
| * @return Compensated Mag. Z axis data |
| * |
| */ |
| int32_t bma4_bmm150_mag_compensate_Z(int16_t mag_data_z, uint16_t data_r); |
| |
| /*! |
| * @brief This API used to set the magnetometer power mode. |
| * @note Before setting the Mag power mode |
| * make sure the following two point are addressed |
| * - Make sure the Mag interface is enabled or not, |
| * by using the bma4_get_if_mode() API. |
| * - If Mag interface is not enabled set the value of 0x02 |
| * to the API bma4_set_if_mode(0x02) |
| * |
| * @param mag_sec_if_pow_mode : The value of Mag power mode |
| * value | mode |
| * ---------|------------ |
| * 0 | BMA4_MAG_FORCE_MODE |
| * 1 | BMA4_MAG_SUSPEND_MODE |
| * @param dev : Structure instance of bma4_dev |
| * |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_bmm150_mag_and_secondary_if_power_mode(uint8_t mag_sec_if_pow_mode, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the pre-set modes of bmm150 sensor. |
| * The pre-set mode setting depends on the output data rate and |
| * x,y,z repetitions |
| * |
| * @note Before setting the Mag preset mode make sure BMM150 sensor is |
| * initialized and chip id is verified using the below API. |
| * - bma4_bmm150_mag_interface_init() |
| * @param mode: Pre-set mode selection value |
| * Value | Pre_set mode |
| * ---------|------------------------------------ |
| * 1 | BMA4_MAG_PRESETMODE_LOWPOWER |
| * 2 | BMA4_MAG_PRESETMODE_REGULAR |
| * 3 | BMA4_MAG_PRESETMODE_HIGHACCURACY |
| * 4 | BMA4_MAG_PRESETMODE_ENHANCED |
| * @param dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| */ |
| uint16_t bma4_set_bmm150_mag_presetmode(uint8_t mode, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the power mode of BMM150 Mag sensor. |
| * |
| * @note Before setting the Mag power mode make sure the Mag sensor is |
| * initialized and chip id is verified by calling the below API. |
| * - bma4_bmm150_mag_interface_init() |
| * |
| * @param mag_pow_mode : Variable used to select the Mag power mode |
| * value | mode |
| * ---------|------------ |
| * 0 | FORCE_MODE |
| * 1 | SUSPEND_MODE |
| * @param dev : structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_bmm150_mag_set_power_mode(uint8_t mag_pow_mode, struct bma4_dev *dev); |
| /***************************************************/ |
| /*! |
| * @brief This API initializes and reads the chip id of the AKM9916 sensor. |
| * |
| * @param[in] akm_i2c_address : Variable used to store the device address |
| * of AKM9916 sensor. |
| * @param[out] akm_chip_id : Pointer variable used to store the chip id |
| * read from the AKM9916 sensor. |
| * AKM sensor| Slave address |
| * ----------|------------------------------- |
| * AKM09916 | BMA4_AUX_AKM09916_I2C_ADDR |
| * |
| * @param dev : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_bst_akm_mag_interface_init(uint8_t akm_i2c_address, uint8_t *akm_chip_id, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API sets the power mode of the auxiliary AKM9916 sensor. |
| * |
| * @note Before setting the power mode, make sure Mag. sensor is |
| * initialized by calling the below API and verify the chip_id. |
| * - bma4_bst_akm_mag_interface_init() |
| * |
| * @param[in] akm_pow_mode : Variable used to specify power mode |
| * value | Description |
| * --------|-------------------- |
| * 0 | AKM_POWER_DOWN_MODE |
| * 1 | AKM_SINGLE_MEAS_MODE |
| * |
| * @param dev[in,out] : Structure instance of bma4_dev |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_bst_akm_set_powermode(uint8_t akm_pow_mode, struct bma4_dev *dev); |
| |
| /*! |
| * @brief This API used to set the interface power mode of the auxiliary |
| * sensor |
| * |
| * @note Before setting the Mag power mode |
| * make sure the following two point are addressed |
| * - Make sure the Mag interface is enabled or not, |
| * by using the bma4_get_if_mode() API. |
| * - If Mag interface is not enabled set the value of 0x10 |
| * to the API bma4_set_if_mode(0x10) |
| * |
| * @param[in] mag_sec_if_pow_mode : The value of secondary_if_power_mode |
| * value | Description |
| * --------|-------------------- |
| * 0 | BMA4_MAG_FORCE_MODE |
| * 1 | BMA4_MAG_SUSPEND_MODE |
| * @param dev[in,out] : structure instance of bma4_dev |
| * |
| * |
| * @return Result of API execution status |
| * @retval 0 -> Success |
| * @retval Any non zero value -> Fail |
| * |
| */ |
| uint16_t bma4_set_bst_akm_and_secondary_if_powermode(uint8_t mag_sec_if_pow_mode, struct bma4_dev *dev); |
| |
| uint16_t bma4_bmm150_mag_compensate_xyz_raw( |
| struct bma4_mag *mag_comp_xyz, struct bma4_mag_xyzr mag_xyzr); |
| |
| #endif |
| /* End of __BMA4_H__ */ |