From 6e9e264c65f30e4046efbf27ebe801cd1f338122 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sun, 10 Apr 2022 18:08:37 -0400 Subject: rewrite lis2dh logger for lis2dw --- watch-library/shared/driver/lis2dw.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'watch-library/shared/driver/lis2dw.c') diff --git a/watch-library/shared/driver/lis2dw.c b/watch-library/shared/driver/lis2dw.c index fce266b3..4d60fcff 100644 --- a/watch-library/shared/driver/lis2dw.c +++ b/watch-library/shared/driver/lis2dw.c @@ -164,3 +164,32 @@ void lis2dw_clear_fifo(void) { watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_FIFO_CTRL, LIS2DW_FIFO_CTRL_MODE_OFF); watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_FIFO_CTRL, LIS2DW_FIFO_CTRL_MODE_COLLECT_AND_STOP | LIS2DW_FIFO_CTRL_FTH); } + +void lis2dw_configure_wakeup_int1(uint8_t threshold, bool latch, bool active_state) { + uint8_t configuration; + + // enable wakeup interrupt on INT1 pin + configuration = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL4_INT1); + watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL4_INT1, configuration | LIS2DW_CTRL4_INT1_WU); + + // set threshold + watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_THS, threshold | LIS2DW_WAKE_UP_THS_VAL_SLEEP_ON); + watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_INT1_DUR, 0b01111111); + + configuration = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL3) & ~(LIS2DW_CTRL3_VAL_LIR); + if (!active_state) configuration |= LIS2DW_CTRL3_VAL_H_L_ACTIVE; + if (latch) configuration |= LIS2DW_CTRL3_VAL_LIR; + watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL3, configuration); + + // enable interrupts + configuration = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL7); + watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL7, configuration | LIS2DW_CTRL7_VAL_INTERRUPTS_ENABLE); +} + +lis2dw_wakeup_source lis2dw_get_wakeup_source() { + return (lis2dw_wakeup_source) watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_SRC); +} + +lis2dw_interrupt_source lis2dw_get_interrupt_source(void) { + return (lis2dw_interrupt_source) watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_ALL_INT_SRC); +} -- cgit v1.2.3