Watchy/src/bma423.h

816 lines
29 KiB
C

/*
*
****************************************************************************
* Copyright (C) 2017 - 2018 Bosch Sensortec GmbH
*
* File : bma423.h
*
* Date: 12 Oct 2017
*
* Revision : 1.1.4 $
*
* Usage: Sensor Driver for BMA423 sensor
*
****************************************************************************
*
* 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 bma423.h
\brief Sensor Driver for BMA423 sensor */
#ifndef BMA423_H
#define BMA423_H
#ifdef __cplusplus
extern "C" {
#endif
#include "bma4.h"
/**\name Chip ID of BMA423 sensor */
#define BMA423_CHIP_ID UINT8_C(0x13)
/**\name Sensor feature size */
#define BMA423_FEATURE_SIZE UINT8_C(64)
#define BMA423_ANYMOTION_EN_LEN UINT8_C(2)
#define BMA423_RD_WR_MIN_LEN UINT8_C(2)
/**\name Feature offset address */
#define BMA423_ANY_NO_MOTION_OFFSET UINT8_C(0x00)
#define BMA423_STEP_CNTR_OFFSET UINT8_C(0x36)
#define BMA423_STEP_CNTR_PARAM_OFFSET UINT8_C(0x04)
#define BMA423_WAKEUP_OFFSET UINT8_C(0x38)
#define BMA423_TILT_OFFSET UINT8_C(0x3A)
#define BMA423_CONFIG_ID_OFFSET UINT8_C(0x3C)
#define BMA423_AXES_REMAP_OFFSET UINT8_C(0x3E)
/**************************************************************/
/**\name Remap Axes */
/**************************************************************/
#define BMA423_X_AXIS_MASK UINT8_C(0x03)
#define BMA423_X_AXIS_SIGN_MASK UINT8_C(0x04)
#define BMA423_Y_AXIS_MASK UINT8_C(0x18)
#define BMA423_Y_AXIS_SIGN_MASK UINT8_C(0x20)
#define BMA423_Z_AXIS_MASK UINT8_C(0xC0)
#define BMA423_Z_AXIS_SIGN_MASK UINT8_C(0x01)
/**************************************************************/
/**\name Step Counter & Detector */
/**************************************************************/
/**\name Step counter enable macros */
#define BMA423_STEP_CNTR_EN_POS UINT8_C(4)
#define BMA423_STEP_CNTR_EN_MSK UINT8_C(0x10)
#define BMA423_ACTIVITY_EN_MSK UINT8_C(0x20)
/**\name Step counter watermark macros */
#define BMA423_STEP_CNTR_WM_MSK UINT16_C(0x03FF)
/**\name Step counter reset macros */
#define BMA423_STEP_CNTR_RST_POS UINT8_C(2)
#define BMA423_STEP_CNTR_RST_MSK UINT8_C(0x04)
/**\name Step detector enable macros */
#define BMA423_STEP_DETECTOR_EN_POS UINT8_C(3)
#define BMA423_STEP_DETECTOR_EN_MSK UINT8_C(0x08)
/**\name Tilt enable macros */
#define BMA423_TILT_EN_MSK UINT8_C(0x01)
/**\name Step count output length*/
#define BMA423_STEP_CNTR_DATA_SIZE UINT16_C(4)
/**\name Wakeup enable macros */
#define BMA423_WAKEUP_EN_MSK UINT8_C(0x01)
/**\name Wake up sensitivity macros */
#define BMA423_WAKEUP_SENS_POS UINT8_C(1)
#define BMA423_WAKEUP_SENS_MSK UINT8_C(0x0E)
/**\name Tap selection macro */
#define BMA423_TAP_SEL_POS UINT8_C(4)
#define BMA423_TAP_SEL_MSK UINT8_C(0x10)
/**************************************************************/
/**\name Any Motion */
/**************************************************************/
/**\name Any motion threshold macros */
#define BMA423_ANY_NO_MOTION_THRES_POS UINT8_C(0)
#define BMA423_ANY_NO_MOTION_THRES_MSK UINT16_C(0x07FF)
/**\name Any motion selection macros */
#define BMA423_ANY_NO_MOTION_SEL_POS UINT8_C(3)
#define BMA423_ANY_NO_MOTION_SEL_MSK UINT8_C(0x08)
/**\name Any motion enable macros */
#define BMA423_ANY_NO_MOTION_AXIS_EN_POS UINT8_C(5)
#define BMA423_ANY_NO_MOTION_AXIS_EN_MSK UINT8_C(0xE0)
/**\name Any motion duration macros */
#define BMA423_ANY_NO_MOTION_DUR_MSK UINT16_C(0x1FFF)
/**************************************************************/
/**\name User macros */
/**************************************************************/
/**\name Anymotion/Nomotion axis enable macros */
#define BMA423_X_AXIS_EN UINT8_C(0x01)
#define BMA423_Y_AXIS_EN UINT8_C(0x02)
#define BMA423_Z_AXIS_EN UINT8_C(0x04)
#define BMA423_ALL_AXIS_EN UINT8_C(0x07)
#define BMA423_ALL_AXIS_DIS UINT8_C(0x00)
/**\name Feature enable macros for the sensor */
#define BMA423_STEP_CNTR UINT8_C(0x01)
/**\name Below macros are mutually exclusive */
#define BMA423_ANY_MOTION UINT8_C(0x02)
#define BMA423_NO_MOTION UINT8_C(0x04)
#define BMA423_ACTIVITY UINT8_C(0x08)
#define BMA423_TILT UINT8_C(0x10)
#define BMA423_WAKEUP UINT8_C(0x20)
/**\name Interrupt status macros */
#define BMA423_STEP_CNTR_INT UINT8_C(0x02)
#define BMA423_ACTIVITY_INT UINT8_C(0x04)
#define BMA423_TILT_INT UINT8_C(0x08)
#define BMA423_WAKEUP_INT UINT8_C(0x20)
#define BMA423_ANY_NO_MOTION_INT UINT8_C(0x40)
#define BMA423_ERROR_INT UINT8_C(0x80)
/**\name Activity recognition macros */
#define BMA423_USER_STATIONARY UINT8_C(0x00)
#define BMA423_USER_WALKING UINT8_C(0x01)
#define BMA423_USER_RUNNING UINT8_C(0x02)
#define BMA423_STATE_INVALID UINT8_C(0x03)
/**\name Configuration selection macros */
#define BMA423_PHONE_CONFIG UINT8_C(0x00)
#define BMA423_WRIST_CONFIG UINT8_C(0x01)
/**\name Step counter parameter setting(1-25) for phone */
#define BMA423_PHONE_SC_PARAM_1 UINT16_C(0x132)
#define BMA423_PHONE_SC_PARAM_2 UINT16_C(0x78E6)
#define BMA423_PHONE_SC_PARAM_3 UINT16_C(0x84)
#define BMA423_PHONE_SC_PARAM_4 UINT16_C(0x6C9C)
#define BMA423_PHONE_SC_PARAM_5 UINT8_C(0x07)
#define BMA423_PHONE_SC_PARAM_6 UINT16_C(0x7564)
#define BMA423_PHONE_SC_PARAM_7 UINT16_C(0x7EAA)
#define BMA423_PHONE_SC_PARAM_8 UINT16_C(0x55F)
#define BMA423_PHONE_SC_PARAM_9 UINT16_C(0xABE)
#define BMA423_PHONE_SC_PARAM_10 UINT16_C(0x55F)
#define BMA423_PHONE_SC_PARAM_11 UINT16_C(0xE896)
#define BMA423_PHONE_SC_PARAM_12 UINT16_C(0x41EF)
#define BMA423_PHONE_SC_PARAM_13 UINT8_C(0x01)
#define BMA423_PHONE_SC_PARAM_14 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_15 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_16 UINT8_C(0x4A)
#define BMA423_PHONE_SC_PARAM_17 UINT8_C(0xA0)
#define BMA423_PHONE_SC_PARAM_18 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_19 UINT8_C(0x0C)
#define BMA423_PHONE_SC_PARAM_20 UINT16_C(0x3CF0)
#define BMA423_PHONE_SC_PARAM_21 UINT16_C(0x100)
#define BMA423_PHONE_SC_PARAM_22 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_23 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_24 UINT8_C(0x00)
#define BMA423_PHONE_SC_PARAM_25 UINT8_C(0x00)
/**\name Step counter parameter setting(1-25) for wrist (Default) */
#define BMA423_WRIST_SC_PARAM_1 UINT16_C(0x12D)
#define BMA423_WRIST_SC_PARAM_2 UINT16_C(0x7BD4)
#define BMA423_WRIST_SC_PARAM_3 UINT16_C(0x13B)
#define BMA423_WRIST_SC_PARAM_4 UINT16_C(0x7ADB)
#define BMA423_WRIST_SC_PARAM_5 UINT8_C(0x04)
#define BMA423_WRIST_SC_PARAM_6 UINT16_C(0x7B3F)
#define BMA423_WRIST_SC_PARAM_7 UINT16_C(0x6CCD)
#define BMA423_WRIST_SC_PARAM_8 UINT16_C(0x4C3)
#define BMA423_WRIST_SC_PARAM_9 UINT16_C(0x985)
#define BMA423_WRIST_SC_PARAM_10 UINT16_C(0x4C3)
#define BMA423_WRIST_SC_PARAM_11 UINT16_C(0xE6EC)
#define BMA423_WRIST_SC_PARAM_12 UINT16_C(0x460C)
#define BMA423_WRIST_SC_PARAM_13 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_14 UINT8_C(0x27)
#define BMA423_WRIST_SC_PARAM_15 UINT8_C(0x19)
#define BMA423_WRIST_SC_PARAM_16 UINT8_C(0x96)
#define BMA423_WRIST_SC_PARAM_17 UINT8_C(0xA0)
#define BMA423_WRIST_SC_PARAM_18 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_19 UINT8_C(0x0C)
#define BMA423_WRIST_SC_PARAM_20 UINT16_C(0x3CF0)
#define BMA423_WRIST_SC_PARAM_21 UINT16_C(0x100)
#define BMA423_WRIST_SC_PARAM_22 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_23 UINT8_C(0x03)
#define BMA423_WRIST_SC_PARAM_24 UINT8_C(0x01)
#define BMA423_WRIST_SC_PARAM_25 UINT8_C(0x0E)
/*!
* @brief Any motion configuration
*/
struct bma423_anymotion_config {
/*! Expressed in 50 Hz samples (20 ms) */
uint16_t duration;
/*! Threshold value for Any-motion / No-motion detection in
5.11g format */
uint16_t threshold;
/*! Indicates if No-motion or Any-motion is selected */
uint8_t nomotion_sel;
};
/*!
* @brief Axes remapping configuration
*/
struct bma423_axes_remap {
uint8_t x_axis;
uint8_t x_axis_sign;
uint8_t y_axis;
uint8_t y_axis_sign;
uint8_t z_axis;
uint8_t z_axis_sign;
};
/*!
* @brief Step counter param settings
*/
struct bma423_stepcounter_settings {
/*! Step Counter param 1 */
uint16_t param1;
/*! Step Counter param 2 */
uint16_t param2;
/*! Step Counter param 3 */
uint16_t param3;
/*! Step Counter param 4 */
uint16_t param4;
/*! Step Counter param 5 */
uint16_t param5;
/*! Step Counter param 6 */
uint16_t param6;
/*! Step Counter param 7 */
uint16_t param7;
/*! Step Counter param 8 */
uint16_t param8;
/*! Step Counter param 9 */
uint16_t param9;
/*! Step Counter param 10 */
uint16_t param10;
/*! Step Counter param 11 */
uint16_t param11;
/*! Step Counter param 12 */
uint16_t param12;
/*! Step Counter param 13 */
uint16_t param13;
/*! Step Counter param 14 */
uint16_t param14;
/*! Step Counter param 15 */
uint16_t param15;
/*! Step Counter param 16 */
uint16_t param16;
/*! Step Counter param 17 */
uint16_t param17;
/*! Step Counter param 18 */
uint16_t param18;
/*! Step Counter param 19 */
uint16_t param19;
/*! Step Counter param 20 */
uint16_t param20;
/*! Step Counter param 21 */
uint16_t param21;
/*! Step Counter param 22 */
uint16_t param22;
/*! Step Counter param 23 */
uint16_t param23;
/*! Step Counter param 24 */
uint16_t param24;
/*! Step Counter param 25 */
uint16_t param25;
};
/*!
* @brief This API is the entry point.
* Call this API before using all other APIs.
* This API reads the chip-id of the sensor and sets the resolution.
*
* @param[in,out] dev : Structure instance of bma4_dev
*
* @return Result of API execution status
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_init(struct bma4_dev *dev);
/*!
* @brief This API is used to upload the config file to enable
* the features of 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 bma423_write_config_file(struct bma4_dev *dev);
/*!
* @brief This API is used to get the configuration id of the sensor.
*
* @param[out] config_id : Pointer variable used to store
* the configuration id.
* @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 bma423_get_config_id(uint16_t *config_id, struct bma4_dev *dev);
/*!
* @brief This API sets/unsets the user provided interrupt to either
* interrupt pin1 or pin2 in the sensor.
*
* @param[in] int_line: Variable to select either interrupt pin1 or pin2.
* int_line | Macros
* ------------|-------------------
* 0 | BMA4_INTR1_MAP
* 1 | BMA4_INTR2_MAP
* @param[in] int_map : Variable to specify the interrupts.
* @param[in] enable : Variable to specify mapping or unmapping of
* interrupts.
* enable | Macros
* --------------------|-------------------
* 0x00 | BMA4_DISABLE
* 0x01 | BMA4_ENABLE
* @param[in] dev : Structure instance of bma4_dev.
*
* @note Below macros specify the interrupts.
* Feature Interrupts
* - BMA423_STEP_CNTR_INT
* - BMA423_ACTIVITY_INT
* - BMA423_TILT_INT
* - BMA423_WAKEUP_INT
* - BMA423_ANY_NO_MOTION_INT
* - BMA423_ERROR_INT
*
* Hardware Interrupts
* - BMA4_FIFO_FULL_INT
* - BMA4_FIFO_WM_INT
* - BMA4_DATA_RDY_INT
*
* @return Result of API execution status
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_map_interrupt(uint8_t int_line, uint16_t int_map,
uint8_t enable, struct bma4_dev *dev);
/*!
* @brief This API reads the bma423 interrupt status from the sensor.
*
* @param[out] int_status : Variable to store the interrupt status
* read from the sensor.
* @param[in] dev : Structure instance of bma4_dev.
*
* @note Below macros are used to check the interrupt status.
* Feature Interrupts
*
* - BMA423_STEP_CNTR_INT
* - BMA423_ACTIVITY_INT
* - BMA423_TILT_INT
* - BMA423_WAKEUP_INT
* - BMA423_ANY_NO_MOTION_INT
* - BMA423_ERROR_INT
*
*
* Hardware Interrupts
* - BMA4_FIFO_FULL_INT
* - BMA4_FIFO_WM_INT
* - BMA4_MAG_DATA_RDY_INT
* - BMA4_ACCEL_DATA_RDY_INT
*
* @return Result of API execution status
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_read_int_status(uint16_t *int_status, struct bma4_dev *dev);
/*!
* @brief This API enables/disables the features of the sensor.
*
* @param[in] feature : Variable to specify the features
* which are to be set in bma423 sensor.
* @param[in] enable : Variable which specifies whether to enable or
* disable the features in the bma423 sensor
* enable | Macros
* --------------------|-------------------
* 0x00 | BMA4_DISABLE
* 0x01 | BMA4_ENABLE
* @param[in] dev : Structure instance of bma4_dev.
*
* @note User should use the below macros to enable or disable the
* features of bma423 sensor
* - BMA423_STEP_CNTR
* - BMA423_ANY_MOTION (or) BMA423_NO_MOTION
* - BMA423_ACTIVITY
* - BMA423_WAKEUP
* - BMA423_TILT
*
* @return Result of API execution status
* @retval 0 -> Success
* @retval Any non zero value -> Fail
*/
uint16_t bma423_feature_enable(uint8_t feature, uint8_t enable,
struct bma4_dev *dev);
/*!
* @brief This API performs x, y and z axis remapping in the sensor.
*
* @param[in] remap_data : Pointer to store axes remapping 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 bma423_set_remap_axes(const struct bma423_axes_remap *remap_data,
struct bma4_dev *dev);
/*!
* @brief This API reads the x, y and z axis remap data from the sensor.
*
* @param[out] remap_data : Pointer to store axis remap data which is read
* from the bma423 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 bma423_get_remap_axes(struct bma423_axes_remap *remap_data,
struct bma4_dev *dev);
/*!
* @brief This API sets the watermark level for step counter
* interrupt in the sensor.
*
* @param[in] step_counter_wm : Variable which specifies watermark level
* count
* @note Valid values are from 1 to 1023
* @note Value 0 is used for step detector interrupt
* @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 bma423_step_counter_set_watermark(uint16_t step_counter_wm,
struct bma4_dev *dev);
/*!
* @brief This API gets the water mark level set for step counter interrupt
* in the sensor
*
* @param[out] step_counter_wm : Pointer variable which stores
* the water mark level read from the sensor.
* @note valid values are from 1 to 1023
* @note value 0 is used for step detector interrupt
* @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 bma423_step_counter_get_watermark(uint16_t *step_counter_wm,
struct bma4_dev *dev);
/*!
* @brief This API resets the counted steps of step 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 bma423_reset_step_counter(struct bma4_dev *dev);
/*!
* @brief This API gets the number of counted steps of the step counter
* feature from the sensor.
*
* @param[out] step_count : Pointer variable which stores counted steps
* 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 bma423_step_counter_output(uint32_t *step_count, struct bma4_dev *dev);
/*!
* @brief This API gets the output for activity feature.
*
* @param[out] activity : Pointer variable which stores activity output
* read from the sensor.
* activity | State
* --------------|------------------------
* 0x00 | BMA423_USER_STATIONARY
* 0x01 | BMA423_USER_WALKING
* 0x02 | BMA423_USER_RUNNING
* 0x03 | BMA423_STATE_INVALID
*
* @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 bma423_activity_output(uint8_t *activity, struct bma4_dev *dev);
/*!
* @brief This API select the platform configuration wrist(default) or phone.
*
* @param[in] platform : Variable to select wrist/phone
*
* platform | Macros
* -------------|------------------------
* 0x00 | BMA423_PHONE_CONFIG
* 0x01 | BMA423_WRIST_CONFIG
*
* @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 bma423_select_platform(uint8_t platform, struct bma4_dev *dev);
/*!
* @brief This API gets the parameter1 to parameter7 settings of the
* step counter feature.
*
* @param[out] setting : Pointer to structure variable which stores the
* parameter1 to parameter7 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
bma423_stepcounter_get_parameter(struct bma423_stepcounter_settings *setting,
struct bma4_dev *dev);
/*!
* @brief This API sets the parameter1 to parameter7 settings of the
* step counter feature in the sensor.
*
* @param[in] setting : Pointer to structure variable which stores the
* parameter1 to parameter7 settings 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 bma423_stepcounter_set_parameter(
const struct bma423_stepcounter_settings *setting, struct bma4_dev *dev);
/*!
* @brief This API enables or disables the step detector feature in the
* sensor.
*
* @param[in] enable : Variable used to enable or disable step detector
* enable | Macros
* --------------------|-------------------
* 0x00 | BMA4_DISABLE
* 0x01 | 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 bma423_step_detector_enable(uint8_t enable, struct bma4_dev *dev);
/*!
* @brief This API enables the any motion feature according to the axis
* set by the user in the sensor.
*
* @param[in] axis : Variable to specify the axis of the any motion feature
* to be enabled in the sensor.
* Value | Axis
* ---------|-------------------------
* 0x00 | BMA423_ALL_AXIS_DIS
* 0x01 | BMA423_X_AXIS_EN
* 0x02 | BMA423_Y_AXIS_EN
* 0x04 | BMA423_Z_AXIS_EN
* 0x07 | BMA423_ALL_AXIS_EN
* @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 bma423_anymotion_enable_axis(uint8_t axis, struct bma4_dev *dev);
/*! @brief This API sets the configuration of Any motion feature in
* the sensor.
*
* @param[in] any_motion : Pointer to structure variable to specify
* the any motion feature settings.
* Structure members are provided in the table below
*@verbatim
* -------------------------------------------------------------------------
* Structure parameters | Description
* --------------------------------|----------------------------------------
* | Defines the number of
* | consecutive data points for
* | which the threshold condition
* duration | must be respected, for interrupt
* | assertion. It is expressed in
* | 50 Hz samples (20 ms).
* | Range is 0 to 163sec.
* | Default value is 5 = 100ms.
* --------------------------------|----------------------------------------
* | Slope threshold value for
* | Any-motion / No-motion detection
* threshold | in 5.11g format.
* | Range is 0 to 1g.
* | Default value is 0xAA = 83mg.
* --------------------------------|----------------------------------------
* | Indicates if No motion (1) or
* nomotion_sel | Any-motion (0) is selected;
* | default value is 0 Any-motion.
* -------------------------------------------------------------------------
*@endverbatim
* @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
bma423_set_any_motion_config(const struct bma423_anymotion_config *any_motion,
struct bma4_dev *dev);
/*! @brief This API gets the configuration of any motion feature from
* the sensor.
*
* @param[out] any_motion : Pointer to structure variable used to store
* the any motion feature settings read from the sensor.
* Structure members are provided in the table below
*@verbatim
* -------------------------------------------------------------------------
* Structure parameters | Description
* --------------------------------|----------------------------------------
* | Defines the number of
* | consecutive data points for
* | which the threshold condition
* duration | must be respected, for interrupt
* | assertion. It is expressed in
* | 50 Hz samples (20 ms).
* | Range is 0 to 163sec.
* | Default value is 5 = 100ms.
* --------------------------------|----------------------------------------
* | Slope threshold value for
* | Any-motion / No-motion detection
* threshold | in 5.11g format.
* | Range is 0 to 1g.
* | Default value is 0xAA = 83mg.
* --------------------------------|----------------------------------------
* | Indicates if No motion (1) or
* nomotion_sel | Any-motion (0) is selected;
* | default value is 0 Any-motion.
* -------------------------------------------------------------------------
*@endverbatim
* @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
bma423_get_any_motion_config(struct bma423_anymotion_config *any_motion,
struct bma4_dev *dev);
/*!
* @brief This API sets the sensitivity of wake up feature in the sensor
*
* @param[in] sensitivity : Variable used to specify the sensitivity of the
* Wake up feature.
* Value | Sensitivity
* --------|-------------------------
* 0x00 | MOST SENSITIVE
* 0x07 | LEAST SENSITIVE
* @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 bma423_wakeup_set_sensitivity(uint8_t sensitivity,
struct bma4_dev *dev);
/*!
* @brief This API gets the sensitivity of wake up feature in the sensor
*
* @param[out] sensitivity : Pointer variable which stores the sensitivity
* value read from the sensor.
* Value | Sensitivity
* --------|-------------------------
* 0x00 | MOST SENSITIVE
* 0x07 | LEAST SENSITIVE
* @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 bma423_wakeup_get_sensitivity(uint8_t *sensitivity,
struct bma4_dev *dev);
/*!
* @brief This API is used to select single/double tap
* feature in the sensor
*
* @param tap_select : Variable used to specify the single or
* double tap selection in the sensor
* tap_select | description
* ------------|------------------------
* 0x00 | Double tap selected
* 0x01 | single tap selected
*
* @param dev : Structure instance of bma4_dev
*
* @return results of stream_transfer operation
* @retval 0 -> Success
* @retval Any positive value mentioned in ERROR CODES -> Fail
*
*/
uint16_t bma423_tap_selection(const uint8_t tap_select, struct bma4_dev *dev);
#ifdef __cplusplus
}
#endif /*End of CPP guard */
#endif /*End of header guard macro */