]> git.earman.xyz Git - sensor-watch.git/commitdiff
Made the timeout for lis2dw_read_fifo a variable
authorDavid Volovskiy <devolov@gmail.com>
Tue, 7 Oct 2025 12:07:02 +0000 (08:07 -0400)
committerAlessandro Genova <ales.genova@gmail.com>
Sat, 3 Jan 2026 01:07:56 +0000 (20:07 -0500)
legacy/watch_faces/sensor/accelerometer_data_acquisition_face.c
watch-faces/sensor/lis2dw_monitor_face.c
watch-library/shared/driver/lis2dw.c
watch-library/shared/driver/lis2dw.h

index 725847497b05e8842b9853b5a13c5fb5ed9fd61b..64a25a871d17492f6be45fc4a0ce5443d58435bc 100644 (file)
@@ -448,13 +448,13 @@ static void start_reading(accelerometer_data_acquisition_state_t *state) {
 
     state->records[state->pos++] = record;
     lis2dw_fifo_t fifo;
-    lis2dw_read_fifo(&fifo); // dump the fifo, this starts a fresh round of data in continue_reading
+    lis2dw_read_fifo(&fifo, 100); // dump the fifo, this starts a fresh round of data in continue_reading
 }
 
 static void continue_reading(accelerometer_data_acquisition_state_t *state) {
     printf("Continue reading\n");
     lis2dw_fifo_t fifo;
-    lis2dw_read_fifo(&fifo);
+    lis2dw_read_fifo(&fifo, 100);
 
     fifo.count = min(fifo.count, 25); // hacky, but we need a consistent data rate; if we got a 26th data point, chuck it.
     uint8_t offset = 4 * (25 - fifo.count); // also hacky: we're sometimes short at the start. align to beginning of next second.
index a717fe46cad978871e666960695c135abf2a2a09..4459cf736efdeac2a62e5ddacc43e8bda2f3f970 100644 (file)
@@ -420,7 +420,7 @@ static void _monitor_update(lis2dw_monitor_state_t *state)
     lis2dw_fifo_t fifo;
     float x = 0, y = 0, z = 0;
 
-    lis2dw_read_fifo(&fifo);
+    lis2dw_read_fifo(&fifo, 25);
     if (fifo.count == 0) {
         return;
     }
index fbf1ac75d2e425f93a5593cf0e21c4baf986b991..6f77a94eb8412b894917dd3ad3eccf3a13810f49 100644 (file)
@@ -277,15 +277,15 @@ inline void lis2dw_disable_fifo(void) {
 #endif
 }
 
-#define FIFO_TIMEOUT 102 // This is timeout seconds * 128[RTC_CNT_HZ]. So 800ms is 102
-bool lis2dw_read_fifo(lis2dw_fifo_t *fifo_data) {
+bool lis2dw_read_fifo(lis2dw_fifo_t *fifo_data, uint32_t timeout) {
+    // timeout is in terms of 1/RTC_CNT_HZ seconds (likely 128 timeouts is one second)
 #ifdef I2C_SERCOM
     uint8_t temp = watch_i2c_read8(LIS2DW_ADDRESS, LIS2DW_REG_FIFO_SAMPLE);
     bool overrun = !!(temp & LIS2DW_FIFO_SAMPLE_OVERRUN);
 
     fifo_data->count = temp & LIS2DW_FIFO_SAMPLE_COUNT;
 
-    rtc_counter_t timeout_counter = watch_rtc_get_counter() + FIFO_TIMEOUT;
+    rtc_counter_t timeout_counter = watch_rtc_get_counter() + timeout;
     for(int i = 0; i < fifo_data->count; i++) {
         if (watch_rtc_get_counter() > timeout_counter) {
             break;
@@ -296,6 +296,7 @@ bool lis2dw_read_fifo(lis2dw_fifo_t *fifo_data) {
     return overrun;
 #else
     (void) fifo_data;
+    (void) timeout;
     return false;
 #endif
 }
index f7b0a801885415ec16c8d54a6f32ec42003a9c5d..d3a09dc4a2621aea2c534c988dc2a2bc67335e60 100644 (file)
@@ -345,7 +345,7 @@ void lis2dw_enable_fifo(void);
 
 void lis2dw_disable_fifo(void);
 
-bool lis2dw_read_fifo(lis2dw_fifo_t *fifo_data);
+bool lis2dw_read_fifo(lis2dw_fifo_t *fifo_data, uint32_t timeout);
 
 void lis2dw_clear_fifo(void);