]> git.earman.xyz Git - sensor-watch.git/commitdiff
Explicitly set interrupt type to latched
authorDavid Volovskiy <devolov@gmail.com>
Sun, 16 Nov 2025 15:15:46 +0000 (10:15 -0500)
committerAlessandro Genova <ales.genova@gmail.com>
Sat, 3 Jan 2026 01:07:56 +0000 (20:07 -0500)
movement.c
watch-library/shared/driver/lis2dw.c
watch-library/shared/driver/lis2dw.h

index f90aac939d3a78ea94767886120852108493cdc1..345dcb342f96665e93bcb9165f175f1e808c3a92 100644 (file)
@@ -284,12 +284,12 @@ static uint32_t _movement_get_accelerometer_events() {
 
     if (int_src & LIS2DW_REG_ALL_INT_SRC_DOUBLE_TAP) {
         accelerometer_events |= 1 << EVENT_DOUBLE_TAP;
-        printf("Double tap!\n");
+        printf("Double tap!\r\n");
     }
 
     if (int_src & LIS2DW_REG_ALL_INT_SRC_SINGLE_TAP) {
         accelerometer_events |= 1 << EVENT_SINGLE_TAP;
-        printf("Single tap!\n");
+        printf("Single tap!\r\n");
     }
 
     return accelerometer_events;
@@ -1118,6 +1118,7 @@ void app_setup(void) {
             watch_register_interrupt_callback(HAL_GPIO_A3_pin(), cb_accelerometer_event, INTERRUPT_TRIGGER_RISING);
 
             // Enable the interrupts...
+            lis2dw_latched_interrupts();
             lis2dw_enable_interrupts();
 
             // At first boot, this next line sets the accelerometer's sampling rate to 0, which is LIS2DW_DATA_RATE_POWERDOWN.
index 1c89f244f75b356b164c9a3c25fbb0055f5e0ffd..6e3cb59a47692d0cb0ddfd49699f25c4be367f31 100644 (file)
@@ -425,6 +425,20 @@ void lis2dw_disable_interrupts(void) {
 #endif
 }
 
+void lis2dw_pulsed_interrupts(void) {
+#ifdef I2C_SERCOM
+    uint8_t configuration = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL7);
+    watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL7, configuration | LIS2DW_CTRL7_VAL_DRDY_PULSED);
+#endif
+}
+
+void lis2dw_latched_interrupts(void) {
+#ifdef I2C_SERCOM
+    uint8_t configuration = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL7);
+    watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL7, configuration & ~LIS2DW_CTRL7_VAL_DRDY_PULSED);
+#endif
+}
+
 lis2dw_wakeup_source_t lis2dw_get_wakeup_source() {
 #ifdef I2C_SERCOM
     return (lis2dw_wakeup_source_t) watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_WAKE_UP_SRC);
index 3b017c6543e108a96ca795b9e53efd90b2454e8b..2db57da10cba52e769cd0d6fb7cf9ecf2828b67a 100644 (file)
@@ -375,6 +375,10 @@ void lis2dw_enable_interrupts(void);
 
 void lis2dw_disable_interrupts(void);
 
+void lis2dw_pulsed_interrupts(void);
+
+void lis2dw_latched_interrupts(void);
+
 lis2dw_interrupt_source_t lis2dw_get_interrupt_source(void);
 
 lis2dw_wakeup_source_t lis2dw_get_wakeup_source(void);