LIS2DW12 accelerometer sensor library
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Diff: LIS2DW12Sensor.cpp
- Revision:
- 5:b6ce53be44c2
- Parent:
- 4:94c5d5546161
--- a/LIS2DW12Sensor.cpp Wed Jul 24 14:18:07 2019 +0000 +++ b/LIS2DW12Sensor.cpp Tue Sep 17 08:40:17 2019 +0000 @@ -826,6 +826,235 @@ } /** + * @brief Read LIS2DW12 Accelerometer filter bandwidth + * @param bw_filt the pointer to the filter bandwidth + * @retval 0 in case of success, an error code otherwise + */ +int LIS2DW12Sensor::get_x_bw_filt(uint8_t *bw_filt) +{ + int ret = 0; + lis2dw12_bw_filt_t bw_filt_low_level; + + /* Get current filter bandwidth. */ + if (lis2dw12_filter_bandwidth_get(&_reg_ctx, &bw_filt_low_level) != 0) { + return 1; + } + + switch (bw_filt_low_level) { + case LIS2DW12_ODR_DIV_2: + *bw_filt = 0; + break; + + case LIS2DW12_ODR_DIV_4: + *bw_filt = 1; + break; + + case LIS2DW12_ODR_DIV_10: + *bw_filt = 2; + break; + + case LIS2DW12_ODR_DIV_20: + *bw_filt = 3; + break; + + default: + ret = 1; + break; + } + + return ret; +} + +/** + * @brief Set LIS2DW12 Accelerometer filter bandwidth + * @param bw_filt the filter bandwidth to be set + * @retval 0 in case of success, an error code otherwise + */ +int LIS2DW12Sensor::set_x_bw_filt(uint8_t bw_filt) +{ + lis2dw12_bw_filt_t new_bw_filt; + + new_bw_filt = (bw_filt == 0) ? LIS2DW12_ODR_DIV_2 + : (bw_filt == 1) ? LIS2DW12_ODR_DIV_4 + : (bw_filt == 2) ? LIS2DW12_ODR_DIV_10 + : LIS2DW12_ODR_DIV_20; + + if (lis2dw12_filter_bandwidth_set(&_reg_ctx, new_bw_filt) != 0) { + return 1; + } + + return 0; +} + +/** + * @brief Read LIS2DW12 Accelerometer power mode + * @param lp_mode the pointer to the low-power mode, mode the pointer to the mode, low_noise the pointer to the low-noise configuration + * @retval 0 in case of success, an error code otherwise + */ +int LIS2DW12Sensor::get_x_power_mode(uint8_t *lp_mode, uint8_t *mode, uint8_t *low_noise) +{ + int ret = 0; + lis2dw12_mode_t mode_low_level; + + /* Get current filter bandwidth. */ + if (lis2dw12_power_mode_get(&_reg_ctx, &mode_low_level) != 0) { + return 1; + } + + switch (mode_low_level) { + case LIS2DW12_HIGH_PERFORMANCE: + *lp_mode = 0; + *mode = 1; + *low_noise = 0; + break; + + case LIS2DW12_CONT_LOW_PWR_4: + *lp_mode = 3; + *mode = 0; + *low_noise = 0; + break; + + case LIS2DW12_CONT_LOW_PWR_3: + *lp_mode = 2; + *mode = 0; + *low_noise = 0; + break; + + case LIS2DW12_CONT_LOW_PWR_2: + *lp_mode = 1; + *mode = 0; + *low_noise = 0; + break; + + case LIS2DW12_CONT_LOW_PWR_12bit: + *lp_mode = 0; + *mode = 0; + *low_noise = 0; + break; + + case LIS2DW12_SINGLE_LOW_PWR_4: + *lp_mode = 3; + *mode = 2; + *low_noise = 0; + break; + + case LIS2DW12_SINGLE_LOW_PWR_3: + *lp_mode = 2; + *mode = 2; + *low_noise = 0; + break; + + case LIS2DW12_SINGLE_LOW_PWR_2: + *lp_mode = 1; + *mode = 2; + *low_noise = 0; + break; + + case LIS2DW12_SINGLE_LOW_PWR_12bit: + *lp_mode = 0; + *mode = 2; + *low_noise = 0; + break; + + case LIS2DW12_HIGH_PERFORMANCE_LOW_NOISE: + *lp_mode = 0; + *mode = 1; + *low_noise = 1; + break; + + case LIS2DW12_CONT_LOW_PWR_LOW_NOISE_4: + *lp_mode = 3; + *mode = 0; + *low_noise = 1; + break; + + case LIS2DW12_CONT_LOW_PWR_LOW_NOISE_3: + *lp_mode = 2; + *mode = 0; + *low_noise = 1; + break; + + case LIS2DW12_CONT_LOW_PWR_LOW_NOISE_2: + *lp_mode = 1; + *mode = 0; + *low_noise = 1; + break; + + case LIS2DW12_CONT_LOW_PWR_LOW_NOISE_12bit: + *lp_mode = 0; + *mode = 0; + *low_noise = 1; + break; + + case LIS2DW12_SINGLE_LOW_PWR_LOW_NOISE_4: + *lp_mode = 3; + *mode = 2; + *low_noise = 1; + break; + + case LIS2DW12_SINGLE_LOW_PWR_LOW_NOISE_3: + *lp_mode = 2; + *mode = 2; + *low_noise = 1; + break; + + case LIS2DW12_SINGLE_LOW_PWR_LOW_NOISE_2: + *lp_mode = 1; + *mode = 2; + *low_noise = 1; + break; + + case LIS2DW12_SINGLE_LOW_LOW_NOISE_PWR_12bit: + *lp_mode = 0; + *mode = 2; + *low_noise = 1; + break; + + default: + ret = 1; + break; + } + + return ret; +} + +/** + * @brief Set LIS2DW12 Accelerometer power mode + * @param power_mode the power mode to be set + * @retval 0 in case of success, an error code otherwise + */ +int LIS2DW12Sensor::set_x_power_mode(uint8_t power_mode) +{ + lis2dw12_mode_t new_mode; + + new_mode = (power_mode == 0x04) ? LIS2DW12_HIGH_PERFORMANCE + : (power_mode == 0x03) ? LIS2DW12_CONT_LOW_PWR_4 + : (power_mode == 0x02) ? LIS2DW12_CONT_LOW_PWR_3 + : (power_mode == 0x01) ? LIS2DW12_CONT_LOW_PWR_2 + : (power_mode == 0x00) ? LIS2DW12_CONT_LOW_PWR_12bit + : (power_mode == 0x0B) ? LIS2DW12_SINGLE_LOW_PWR_4 + : (power_mode == 0x0A) ? LIS2DW12_SINGLE_LOW_PWR_3 + : (power_mode == 0x09) ? LIS2DW12_SINGLE_LOW_PWR_2 + : (power_mode == 0x08) ? LIS2DW12_SINGLE_LOW_PWR_12bit + : (power_mode == 0x14) ? LIS2DW12_HIGH_PERFORMANCE_LOW_NOISE + : (power_mode == 0x13) ? LIS2DW12_CONT_LOW_PWR_LOW_NOISE_4 + : (power_mode == 0x12) ? LIS2DW12_CONT_LOW_PWR_LOW_NOISE_3 + : (power_mode == 0x11) ? LIS2DW12_CONT_LOW_PWR_LOW_NOISE_2 + : (power_mode == 0x10) ? LIS2DW12_CONT_LOW_PWR_LOW_NOISE_12bit + : (power_mode == 0x1B) ? LIS2DW12_SINGLE_LOW_PWR_LOW_NOISE_4 + : (power_mode == 0x1A) ? LIS2DW12_SINGLE_LOW_PWR_LOW_NOISE_3 + : (power_mode == 0x19) ? LIS2DW12_SINGLE_LOW_PWR_LOW_NOISE_2 + : (power_mode == 0x18) ? LIS2DW12_SINGLE_LOW_LOW_NOISE_PWR_12bit + : LIS2DW12_HIGH_PERFORMANCE; + + if (lis2dw12_power_mode_set(&_reg_ctx, new_mode) != 0) { + return 1; + } + + return 0; +} + +/** * @brief Enable the wake up detection for LIS2DW12 accelerometer sensor * @note This function sets the LIS2DW12 accelerometer ODR to 200Hz and the LIS2DW12 accelerometer full scale to 2g * @retval 0 in case of success, an error code otherwise