summaryrefslogtreecommitdiff
path: root/platforms/test/timer.c
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2023-11-28 16:39:48 +1100
committerNick Brassel <nick@tzarc.org>2023-11-28 16:40:47 +1100
commit0115951de12bd4c798a43a380651c34552552e85 (patch)
tree62999011ae782d93aa6dc9c889615db2a840cafc /platforms/test/timer.c
parent0379d1f59e58cefa18cdb72ba1b77507d1108ae6 (diff)
parent4d99e0a23cff02f4c6e55e093b5de08a9be0df7c (diff)
`develop` -> `master`, 2023q4 edition
Diffstat (limited to 'platforms/test/timer.c')
-rw-r--r--platforms/test/timer.c41
1 files changed, 36 insertions, 5 deletions
diff --git a/platforms/test/timer.c b/platforms/test/timer.c
index 320cc57782..eb929d7dac 100644
--- a/platforms/test/timer.c
+++ b/platforms/test/timer.c
@@ -17,34 +17,65 @@
#include "timer.h"
#include <stdatomic.h>
-static atomic_uint_least32_t current_time = 0;
+static atomic_uint_least32_t current_time = 0;
+static atomic_uint_least32_t async_tick_amount = 0;
+static atomic_uint_least32_t access_counter = 0;
+
+void simulate_async_tick(uint32_t t) {
+ async_tick_amount = t;
+}
+
+uint32_t timer_read_internal(void) {
+ return current_time;
+}
+
+uint32_t current_access_counter(void) {
+ return access_counter;
+}
+
+void reset_access_counter(void) {
+ access_counter = 0;
+}
void timer_init(void) {
- current_time = 0;
+ current_time = 0;
+ async_tick_amount = 0;
+ access_counter = 0;
}
void timer_clear(void) {
- current_time = 0;
+ current_time = 0;
+ async_tick_amount = 0;
+ access_counter = 0;
}
uint16_t timer_read(void) {
- return current_time & 0xFFFF;
+ return (uint16_t)timer_read32();
}
+
uint32_t timer_read32(void) {
+ if (access_counter++ > 0) {
+ current_time += async_tick_amount;
+ }
return current_time;
}
+
uint16_t timer_elapsed(uint16_t last) {
return TIMER_DIFF_16(timer_read(), last);
}
+
uint32_t timer_elapsed32(uint32_t last) {
return TIMER_DIFF_32(timer_read32(), last);
}
void set_time(uint32_t t) {
- current_time = t;
+ current_time = t;
+ access_counter = 0;
}
+
void advance_time(uint32_t ms) {
current_time += ms;
+ access_counter = 0;
}
void wait_ms(uint32_t ms) {