@@ -27,12 +27,14 @@ static struct
2727
2828 char ext_err_msg [128 ];
2929 biodyn_df_err_t ext_err ;
30+ double max_read_delay_before_err ;
3031} data_fast = {
3132 .data_cnt = IMU_DATA_CNT ,
3233 .data_ptr = 0 ,
3334 .read_task = NULL ,
3435 .data_mutex = NULL ,
3536 .ext_err = BIODYN_DATAFAST_OK ,
37+ .max_read_delay_before_err = 15 ,
3638};
3739
3840static esp_err_t collect_err (biodyn_timesync_err_t err , const char * msg , esp_err_t code );
@@ -41,12 +43,26 @@ void read_task(void *usr_data)
4143{
4244 TickType_t last_wake_time = xTaskGetTickCount ();
4345 // This is the fastest we can go without gptimer or increasing tick rate
44- const TickType_t period = pdMS_TO_TICKS (10 );
46+ const TickType_t period = pdMS_TO_TICKS (10 );
4547
4648 for (;;)
4749 {
50+ ts_ticker_t tick_before = biodyn_time_sync_get_ticker ();
4851 data_fast_read ();
4952 vTaskDelayUntil (& last_wake_time , period );
53+
54+ // Ensure we're reading fast enough
55+ ts_ticker_t tick_after = biodyn_time_sync_get_ticker ();
56+ double read_time_ms = ts_ticker_t_to_ms (tick_after - tick_before );
57+ if (read_time_ms > data_fast .max_read_delay_before_err )
58+ {
59+ data_fast .ext_err |= BIODYN_DATAFAST_RUNNING_TOO_SLOW ;
60+ snprintf (data_fast .ext_err_msg , sizeof (data_fast .ext_err_msg ),
61+ "DataFast trying to run at %.1lfms, instead is %.1lfms" ,
62+ data_fast .max_read_delay_before_err , read_time_ms );
63+ } else {
64+ data_fast .ext_err &= ~BIODYN_DATAFAST_RUNNING_TOO_SLOW ;
65+ }
5066 }
5167}
5268
@@ -76,6 +92,7 @@ esp_err_t biodyn_data_fast_init()
7692
7793esp_err_t biodyn_data_fast_self_test ()
7894{
95+
7996 return biodyn_data_fast_has_error () ? -1 : ESP_OK ;
8097}
8198
@@ -99,7 +116,7 @@ void data_fast_read()
99116 imu_motion_data data ;
100117 biodyn_imu_icm20948_read_accel_gyro_mag (& data );
101118
102- // Take mutex
119+ // Take mutex
103120 if (xSemaphoreTake (data_fast .data_mutex , portMAX_DELAY ))
104121 {
105122 data_fast .data_ptr += 1 ;
@@ -129,7 +146,7 @@ void ble_data_fast_packed(uint16_t *size, void *out)
129146 }
130147}
131148
132- static esp_err_t collect_err (biodyn_timesync_err_t err , const char * msg , esp_err_t code )
149+ static esp_err_t collect_err (biodyn_df_err_t err , const char * msg , esp_err_t code )
133150{
134151 data_fast .ext_err |= err ;
135152 snprintf (data_fast .ext_err_msg , sizeof (data_fast .ext_err_msg ), "%s %x" , msg , code );
0 commit comments