@@ -38,50 +38,36 @@ volatile uint32_t multi_counter;
38
38
DigitalOut led1 (LED1);
39
39
DigitalOut led2 (LED2);
40
40
41
- Ticker *volatile ticker1;
42
- Ticker *volatile ticker2;
43
41
Timer gtimer;
44
-
45
42
volatile int ticker_count = 0 ;
46
- volatile bool print_tick = false ;
47
-
48
- void ticker_callback_1_switch_to_2 (void );
49
- void ticker_callback_2_switch_to_1 (void );
50
43
51
- void increment_ticker_counter (void )
52
- {
53
- ++callback_trigger_count;
54
- }
55
44
56
45
void switch_led1_state (void )
57
46
{
58
- led1 = !led1;
47
+ // blink 3 times per second
48
+ if ((callback_trigger_count % 333 ) == 0 ) {
49
+ led1 = !led1;
50
+ }
59
51
}
60
52
61
53
void switch_led2_state (void )
62
54
{
63
- led2 = !led2;
55
+ // blink 3 times per second
56
+ // make led2 blink at the same callback_trigger_count value as led1
57
+ if (((callback_trigger_count - 1 ) % 333 ) == 0 ) {
58
+ led2 = !led2;
59
+ }
64
60
}
65
61
66
- void ticker_callback_1_switch_to_2 (void )
62
+ void ticker_callback_1 (void )
67
63
{
68
64
++callback_trigger_count;
69
- // If ticker is NULL then it is being or has been deleted
70
- if (ticker1) {
71
- ticker1->detach ();
72
- ticker1->attach_us (ticker_callback_2_switch_to_1, ONE_MILLI_SEC);
73
- }
74
65
switch_led1_state ();
75
66
}
76
67
77
- void ticker_callback_2_switch_to_1 (void )
68
+ void ticker_callback_2 (void )
78
69
{
79
70
++callback_trigger_count;
80
- // If ticker is NULL then it is being or has been deleted
81
- if (ticker2) {
82
- ticker2->detach ();
83
- ticker2->attach_us (ticker_callback_1_switch_to_2, ONE_MILLI_SEC);
84
- }
85
71
switch_led2_state ();
86
72
}
87
73
@@ -106,9 +92,8 @@ void increment_multi_counter(void)
106
92
107
93
/* Tests is to measure the accuracy of Ticker over a period of time
108
94
*
109
- * 1) DUT would start to update callback_trigger_count every milli sec, in 2x callback we use 2 tickers
110
- * to update the count alternatively.
111
- * 2) Host would query what is current count base_time, Device responds by the callback_trigger_count
95
+ * 1) DUT would start to update callback_trigger_count every milli sec
96
+ * 2) Host would query what is current count base_time, Device responds by the callback_trigger_count.
112
97
* 3) Host after waiting for measurement stretch. It will query for device time again final_time.
113
98
* 4) Host computes the drift considering base_time, final_time, transport delay and measurement stretch
114
99
* 5) Finally host send the results back to device pass/fail based on tolerance.
@@ -119,9 +104,14 @@ void test_case_1x_ticker()
119
104
char _key[11 ] = { };
120
105
char _value[128 ] = { };
121
106
int expected_key = 1 ;
107
+ Ticker ticker;
108
+
109
+ led1 = 1 ;
110
+ led2 = 1 ;
111
+ callback_trigger_count = 0 ;
122
112
123
113
greentea_send_kv (" timing_drift_check_start" , 0 );
124
- ticker1-> attach_us (&increment_ticker_counter , ONE_MILLI_SEC);
114
+ ticker. attach_us (&ticker_callback_1 , ONE_MILLI_SEC);
125
115
126
116
// wait for 1st signal from host
127
117
do {
@@ -140,18 +130,32 @@ void test_case_1x_ticker()
140
130
TEST_ASSERT_EQUAL_STRING_MESSAGE (" pass" , _key," Host side script reported a fail..." );
141
131
}
142
132
143
- void test_case_2x_callbacks ()
133
+ /* Tests is to measure the accuracy of Ticker over a period of time
134
+ *
135
+ * 1) DUT would start to update callback_trigger_count every milli sec, we use 2 tickers
136
+ * to update the count alternatively.
137
+ * 2) Host would query what is current count base_time, Device responds by the callback_trigger_count
138
+ * 3) Host after waiting for measurement stretch. It will query for device time again final_time.
139
+ * 4) Host computes the drift considering base_time, final_time, transport delay and measurement stretch
140
+ * 5) Finally host send the results back to device pass/fail based on tolerance.
141
+ * 6) More details on tests can be found in timing_drift_auto.py
142
+ */
143
+ void test_case_2x_ticker ()
144
144
{
145
145
char _key[11 ] = { };
146
146
char _value[128 ] = { };
147
147
int expected_key = 1 ;
148
+ Ticker ticker1, ticker2;
148
149
149
150
led1 = 0 ;
150
- led2 = 0 ;
151
+ led2 = 1 ;
151
152
callback_trigger_count = 0 ;
152
153
154
+ ticker1.attach_us (ticker_callback_1, 2 * ONE_MILLI_SEC);
155
+ // delay second ticker to have a pair of tickers tick every one millisecond
156
+ wait_us (ONE_MILLI_SEC);
153
157
greentea_send_kv (" timing_drift_check_start" , 0 );
154
- ticker1-> attach_us (ticker_callback_1_switch_to_2, ONE_MILLI_SEC);
158
+ ticker2. attach_us (ticker_callback_2, 2 * ONE_MILLI_SEC);
155
159
156
160
// wait for 1st signal from host
157
161
do {
@@ -303,39 +307,6 @@ void test_attach_us_time(void)
303
307
}
304
308
305
309
306
- utest::v1::status_t one_ticker_case_setup_handler_t (const Case *const source, const size_t index_of_case)
307
- {
308
- ticker1 = new Ticker ();
309
- return greentea_case_setup_handler (source, index_of_case);
310
- }
311
-
312
- utest::v1::status_t two_ticker_case_setup_handler_t (const Case *const source, const size_t index_of_case)
313
- {
314
- ticker1 = new Ticker ();
315
- ticker2 = new Ticker ();
316
- return utest::v1::greentea_case_setup_handler (source, index_of_case);
317
- }
318
-
319
- utest::v1::status_t one_ticker_case_teardown_handler_t (const Case *const source, const size_t passed, const size_t failed, const utest::v1::failure_t reason)
320
- {
321
- Ticker *temp1 = ticker1;
322
- ticker1 = NULL ;
323
- delete temp1;
324
- return utest::v1::greentea_case_teardown_handler (source, passed, failed, reason);
325
- }
326
-
327
- utest::v1::status_t two_ticker_case_teardown_handler_t (const Case *const source, const size_t passed, const size_t failed, const utest::v1::failure_t reason)
328
- {
329
- Ticker *temp1 = ticker1;
330
- Ticker *temp2 = ticker2;
331
- ticker1 = NULL ;
332
- ticker2 = NULL ;
333
- delete temp1;
334
- delete temp2;
335
- return utest::v1::greentea_case_teardown_handler (source, passed, failed, reason);
336
- }
337
-
338
-
339
310
// Test cases
340
311
Case cases[] = {
341
312
Case (" Test attach for 0.01s and time measure" , test_attach_time<10000 >),
@@ -347,8 +318,8 @@ Case cases[] = {
347
318
Case (" Test detach" , test_detach),
348
319
Case (" Test multi call and time measure" , test_multi_call_time),
349
320
Case (" Test multi ticker" , test_multi_ticker),
350
- Case (" Test timers: 1x ticker" , one_ticker_case_setup_handler_t , test_case_1x_ticker, one_ticker_case_teardown_handler_t ),
351
- Case (" Test timers: 2x callbacks " , two_ticker_case_setup_handler_t ,test_case_2x_callbacks, two_ticker_case_teardown_handler_t )
321
+ Case (" Test timers: 1x ticker" , test_case_1x_ticker),
322
+ Case (" Test timers: 2x ticker " , test_case_2x_ticker )
352
323
};
353
324
354
325
utest::v1::status_t greentea_test_setup (const size_t number_of_cases)
0 commit comments