20
20
21
21
#include "libtock/timer.h"
22
22
#include "libtock/alarm.h"
23
+ #include "libtock/read_only_state.h"
23
24
24
25
// MCU Wake Up Time
25
26
#define MIN_ALARM_DELAY 3 // in ticks
@@ -41,6 +42,8 @@ typedef struct
41
42
uint32_t Time ; // Reference time
42
43
}RtcTimerContext_t ;
43
44
45
+ void * read_only_state_buffer = NULL ;
46
+
44
47
static tock_timer_t timer ;
45
48
static uint32_t alarm_set_time = 0 ;
46
49
@@ -61,6 +64,9 @@ static RtcTimerContext_t RtcTimerContext;
61
64
62
65
void RtcInit ( void )
63
66
{
67
+ read_only_state_buffer = malloc (READ_ONLY_STATEBUFFER_LEN );
68
+
69
+ read_only_state_allocate_region (read_only_state_buffer , READ_ONLY_STATEBUFFER_LEN );
64
70
}
65
71
66
72
uint32_t RtcSetTimerContext ( void )
@@ -152,18 +158,24 @@ void RtcStartAlarm( uint32_t timeout )
152
158
153
159
uint32_t RtcGetTimerValue ( void )
154
160
{
155
- uint32_t now ;
156
- alarm_internal_read (& now );
157
-
158
- return now ;
161
+ if (read_only_state_buffer == NULL ) {
162
+ uint32_t now ;
163
+ alarm_internal_read (& now );
164
+ return now ;
165
+ } else {
166
+ return read_only_state_get_ticks (read_only_state_buffer );
167
+ }
159
168
}
160
169
161
170
uint32_t RtcGetTimerElapsedTime ( void )
162
171
{
163
- uint32_t now ;
164
- alarm_internal_read (& now );
165
-
166
- return now - alarm_set_time ;
172
+ if (read_only_state_buffer == NULL ) {
173
+ uint32_t now ;
174
+ alarm_internal_read (& now );
175
+ return now - alarm_set_time ;
176
+ } else {
177
+ return read_only_state_get_ticks (read_only_state_buffer ) - alarm_set_time ;
178
+ }
167
179
}
168
180
169
181
uint32_t RtcGetCalendarTime ( uint16_t * milliseconds )
0 commit comments