25
25
#include " greentea-client/test_env.h"
26
26
#include " unity.h"
27
27
#include " utest.h"
28
+ #include " ticker_api.h"
28
29
29
30
extern " C" {
30
31
#include " rtx_lib.h"
@@ -56,6 +57,11 @@ class SysTimerTest: public rtos::internal::SysTimer {
56
57
{
57
58
}
58
59
60
+ SysTimerTest (const ticker_data_t *data) :
61
+ SysTimer (data), _sem(0 , 1 )
62
+ {
63
+ }
64
+
59
65
virtual ~SysTimerTest ()
60
66
{
61
67
}
@@ -66,6 +72,65 @@ class SysTimerTest: public rtos::internal::SysTimer {
66
72
}
67
73
};
68
74
75
+ timestamp_t mock_ticker_timestamp;
76
+
77
+ void mock_ticker_init ()
78
+ {
79
+ }
80
+
81
+ uint32_t mock_ticker_read ()
82
+ {
83
+ return mock_ticker_timestamp;
84
+ }
85
+
86
+ void mock_ticker_disable_interrupt ()
87
+ {
88
+ }
89
+
90
+ void mock_ticker_clear_interrupt ()
91
+ {
92
+ }
93
+
94
+ void mock_ticker_set_interrupt (timestamp_t timestamp)
95
+ {
96
+ }
97
+
98
+ void mock_ticker_fire_interrupt ()
99
+ {
100
+ }
101
+
102
+ const ticker_info_t *mock_ticker_get_info ()
103
+ {
104
+ static const ticker_info_t mock_ticker_info = {
105
+ .frequency = 1000000 ,
106
+ .bits = 32
107
+ };
108
+ return &mock_ticker_info;
109
+ }
110
+
111
+ ticker_interface_t mock_ticker_interface = {
112
+ .init = mock_ticker_init,
113
+ .read = mock_ticker_read,
114
+ .disable_interrupt = mock_ticker_disable_interrupt,
115
+ .clear_interrupt = mock_ticker_clear_interrupt,
116
+ .set_interrupt = mock_ticker_set_interrupt,
117
+ .fire_interrupt = mock_ticker_fire_interrupt,
118
+ .get_info = mock_ticker_get_info,
119
+ };
120
+
121
+ ticker_event_queue_t mock_ticker_event_queue;
122
+
123
+ const ticker_data_t mock_ticker_data = {
124
+ .interface = &mock_ticker_interface,
125
+ .queue = &mock_ticker_event_queue
126
+ };
127
+
128
+ void mock_ticker_reset ()
129
+ {
130
+ mock_ticker_timestamp = 0 ;
131
+ mock_ticker_event_queue = {0 };
132
+ }
133
+
69
134
/* * Test tick count is zero upon creation
70
135
*
71
136
* Given a SysTimer
@@ -91,14 +156,14 @@ void test_created_with_zero_tick_count(void)
91
156
*/
92
157
void test_update_tick (void )
93
158
{
94
- SysTimerTest st;
159
+ mock_ticker_reset ();
160
+ SysTimerTest st (&mock_ticker_data);
95
161
st.suspend (TEST_TICKS * 2 );
96
162
TEST_ASSERT_EQUAL_UINT32 (0 , st.resume ());
97
163
TEST_ASSERT_EQUAL_UINT32 (0 , st.get_tick ());
98
- us_timestamp_t test_ticks_elapsed_ts = st.get_time () + DELAY_US;
99
164
100
165
st.suspend (TEST_TICKS * 2 );
101
- while (st. get_time () <= test_ticks_elapsed_ts) {}
166
+ mock_ticker_timestamp = DELAY_US;
102
167
TEST_ASSERT_EQUAL_UINT32 (TEST_TICKS - 1 , st.resume ());
103
168
TEST_ASSERT_EQUAL_UINT32 (TEST_TICKS - 1 , st.get_tick ());
104
169
@@ -115,12 +180,13 @@ void test_update_tick(void)
115
180
*/
116
181
void test_get_time (void )
117
182
{
118
- SysTimerTest st;
183
+ mock_ticker_reset ();
184
+ SysTimerTest st (&mock_ticker_data);
119
185
us_timestamp_t t1 = st.get_time ();
120
186
121
- wait_us ( DELAY_US) ;
187
+ mock_ticker_timestamp = DELAY_US;
122
188
us_timestamp_t t2 = st.get_time ();
123
- TEST_ASSERT_UINT64_WITHIN (DELAY_DELTA_US, DELAY_US, t2 - t1);
189
+ TEST_ASSERT_EQUAL_UINT64 ( DELAY_US, t2 - t1);
124
190
}
125
191
126
192
/* * Test cancel_tick
0 commit comments