From 4fe4e5d1aa4532cc9e1b6b1988e61f38693ab684 Mon Sep 17 00:00:00 2001 From: Alistair Francis Date: Fri, 25 Nov 2022 22:18:38 +1000 Subject: [PATCH] boards: Tock: Use read only syscalls Signed-off-by: Alistair Francis --- src/boards/Tock/rtc-board.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/boards/Tock/rtc-board.c b/src/boards/Tock/rtc-board.c index 6e53e93e8..59b2e2a39 100644 --- a/src/boards/Tock/rtc-board.c +++ b/src/boards/Tock/rtc-board.c @@ -20,6 +20,7 @@ #include "libtock/timer.h" #include "libtock/alarm.h" +#include "libtock/read_only_state.h" // MCU Wake Up Time #define MIN_ALARM_DELAY 3 // in ticks @@ -41,6 +42,8 @@ typedef struct uint32_t Time; // Reference time }RtcTimerContext_t; +void* read_only_state_buffer = NULL; + static tock_timer_t timer; static uint32_t alarm_set_time = 0; @@ -61,6 +64,9 @@ static RtcTimerContext_t RtcTimerContext; void RtcInit( void ) { + read_only_state_buffer = malloc(READ_ONLY_STATEBUFFER_LEN); + + read_only_state_allocate_region(read_only_state_buffer, READ_ONLY_STATEBUFFER_LEN); } uint32_t RtcSetTimerContext( void ) @@ -152,18 +158,24 @@ void RtcStartAlarm( uint32_t timeout ) uint32_t RtcGetTimerValue( void ) { - uint32_t now; - alarm_internal_read(&now); - - return now; + if (read_only_state_buffer == NULL) { + uint32_t now; + alarm_internal_read(&now); + return now; + } else { + return read_only_state_get_ticks(read_only_state_buffer); + } } uint32_t RtcGetTimerElapsedTime( void ) { - uint32_t now; - alarm_internal_read(&now); - - return now - alarm_set_time; + if (read_only_state_buffer == NULL) { + uint32_t now; + alarm_internal_read(&now); + return now - alarm_set_time; + } else { + return read_only_state_get_ticks(read_only_state_buffer) - alarm_set_time; + } } uint32_t RtcGetCalendarTime( uint16_t *milliseconds )