summaryrefslogtreecommitdiffstats
path: root/watch-library/shared/driver/lis2dw.c
diff options
context:
space:
mode:
authorJoey Castillo <joeycastillo@utexas.edu>2022-05-02 18:39:45 -0500
committerJoey Castillo <joeycastillo@utexas.edu>2022-05-02 18:39:45 -0500
commitcd405735351035df657b64547b3dfc6a3d59db56 (patch)
tree1cdd5e6b0d0434d20f71045178a1e5e7377eb56f /watch-library/shared/driver/lis2dw.c
parent0004c30f422e702fd184a54e9f1d55da878bcd0f (diff)
parent35d1f5e647ac1b5fcccdb43ec58058587dd5301b (diff)
downloadSensor-Watch-cd405735351035df657b64547b3dfc6a3d59db56.tar.gz
Sensor-Watch-cd405735351035df657b64547b3dfc6a3d59db56.tar.bz2
Sensor-Watch-cd405735351035df657b64547b3dfc6a3d59db56.zip
Merge branch 'main' of github.com:joeycastillo/Sensor-Watch into motion-express
Diffstat (limited to 'watch-library/shared/driver/lis2dw.c')
-rw-r--r--watch-library/shared/driver/lis2dw.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/watch-library/shared/driver/lis2dw.c b/watch-library/shared/driver/lis2dw.c
index 744a686b..b90acc7e 100644
--- a/watch-library/shared/driver/lis2dw.c
+++ b/watch-library/shared/driver/lis2dw.c
@@ -207,3 +207,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);
+}