From dc40cc9cd1b0d50e9a09b4ec762a44c2f41dbfa8 Mon Sep 17 00:00:00 2001 From: joeycastillo Date: Sat, 19 Oct 2024 14:54:33 -0400 Subject: [PATCH] lis2dw driver: add stationary/motion detection --- watch-library/shared/driver/lis2dw.c | 10 ++++++++++ watch-library/shared/driver/lis2dw.h | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/watch-library/shared/driver/lis2dw.c b/watch-library/shared/driver/lis2dw.c index a9d21706..fdef6539 100644 --- a/watch-library/shared/driver/lis2dw.c +++ b/watch-library/shared/driver/lis2dw.c @@ -218,6 +218,16 @@ void lis2dw_disable_sleep(void) { watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_THS, configuration & ~LIS2DW_WAKE_UP_THS_VAL_SLEEP_ON); } +void lis2dw_enable_stationary_motion_detection(void) { + uint8_t configuration = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_DUR); + watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_DUR, configuration | LIS2DW_WAKE_UP_DUR_STATIONARY); +} + +void lis2dw_disable_stationary_motion_detection(void) { + uint8_t configuration = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_DUR); + watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_DUR, configuration & ~LIS2DW_WAKE_UP_DUR_STATIONARY); +} + void lis2dw_enable_tap_detection(void) { uint8_t configuration = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_THS); watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_THS, configuration | LIS2DW_WAKE_UP_THS_VAL_TAP_EVENT_ENABLED); diff --git a/watch-library/shared/driver/lis2dw.h b/watch-library/shared/driver/lis2dw.h index 6185150f..1869feb6 100644 --- a/watch-library/shared/driver/lis2dw.h +++ b/watch-library/shared/driver/lis2dw.h @@ -236,6 +236,8 @@ typedef enum { #define LIS2DW_WAKE_UP_THS_VAL_SLEEP_ON 0b01000000 #define LIS2DW_REG_WAKE_UP_DUR 0x35 +#define LIS2DW_WAKE_UP_DUR_STATIONARY 0b00010000 + #define LIS2DW_REG_FREE_FALL 0x36 #define LIS2DW_REG_STATUS_DUP 0x37 @@ -339,6 +341,10 @@ void lis2dw_enable_sleep(void); void lis2dw_disable_sleep(void); +void lis2dw_enable_stationary_motion_detection(void); + +void lis2dw_disable_stationary_motion_detection(void); + void lis2dw_enable_tap_detection(void); void lis2dw_disable_tap_detection(void);