23
23
#include " greentea-client/test_env.h"
24
24
25
25
#include " mbed.h"
26
- #include " us_ticker_api.h"
27
26
#include " lp_ticker_api.h"
28
- #include " TimerEvent.h"
29
27
30
28
using namespace utest ::v1;
31
29
32
30
static volatile bool complete;
33
- static volatile timestamp_t complete_timestamp ;
31
+ static volatile timestamp_t complete_time ;
34
32
static ticker_event_t delay_event;
35
33
static const ticker_data_t *lp_ticker_data = get_lp_ticker_data();
36
-
34
+ static Timer timer;
35
+ static LowPowerTimer lp_timer;
37
36
38
37
/* Timeouts are quite arbitrary due to large number of boards with varying level of accuracy */
39
38
#define LONG_TIMEOUT (100000 )
40
39
#define SHORT_TIMEOUT (600 )
41
40
42
41
void cb_done (uint32_t id) {
43
42
if ((uint32_t )&delay_event == id) {
44
- complete_timestamp = us_ticker_read ();
43
+ complete_time = timer. read_us ();
45
44
complete = true ;
46
45
} else {
47
46
// Normal ticker handling
@@ -51,7 +50,7 @@ void cb_done(uint32_t id) {
51
50
52
51
void cb_done_deepsleep (uint32_t id) {
53
52
if ((uint32_t )&delay_event == id) {
54
- complete_timestamp = lp_ticker_read ();
53
+ complete_time = lp_timer. read_us ();
55
54
complete = true ;
56
55
} else {
57
56
// Normal ticker handling
@@ -66,14 +65,15 @@ void lp_ticker_delay_us(uint32_t delay_us, uint32_t tolerance)
66
65
67
66
ticker_set_handler (lp_ticker_data, cb_done);
68
67
ticker_remove_event (lp_ticker_data, &delay_event);
69
- delay_ts = lp_ticker_read ( ) + delay_us;
68
+ delay_ts = ticker_read (lp_ticker_data ) + delay_us;
70
69
71
- timestamp_t start = us_ticker_read ();
70
+ timer.reset ();
71
+ timer.start ();
72
72
ticker_insert_event (lp_ticker_data, &delay_event, delay_ts, (uint32_t )&delay_event);
73
73
while (!complete);
74
- timestamp_t end = complete_timestamp ;
74
+ timer. stop () ;
75
75
76
- TEST_ASSERT_UINT32_WITHIN (tolerance, delay_us, end - start );
76
+ TEST_ASSERT_UINT32_WITHIN (tolerance, delay_us, complete_time );
77
77
TEST_ASSERT_TRUE (complete);
78
78
}
79
79
@@ -95,19 +95,20 @@ void lp_ticker_1s_deepsleep()
95
95
96
96
ticker_set_handler (lp_ticker_data, cb_done_deepsleep);
97
97
ticker_remove_event (lp_ticker_data, &delay_event);
98
- delay_ts = lp_ticker_read ( ) + 1000000 ;
98
+ delay_ts = ticker_read (lp_ticker_data ) + 1000000 ;
99
99
100
100
/*
101
- * We use here lp_ticker_read() instead of us_ticker_read() for start and
101
+ * We use here the low power timer instead of microsecond timer for start and
102
102
* end because the microseconds timer might be disable during deepsleep.
103
103
*/
104
- timestamp_t start = lp_ticker_read ();
104
+ lp_timer.reset ();
105
+ lp_timer.start ();
105
106
ticker_insert_event (lp_ticker_data, &delay_event, delay_ts, (uint32_t )&delay_event);
106
107
deepsleep ();
107
108
while (!complete);
108
- timestamp_t end = complete_timestamp ;
109
+ lp_timer. stop () ;
109
110
110
- TEST_ASSERT_UINT32_WITHIN (LONG_TIMEOUT, 1000000 , end - start );
111
+ TEST_ASSERT_UINT32_WITHIN (LONG_TIMEOUT, 1000000 , complete_time );
111
112
TEST_ASSERT_TRUE (complete);
112
113
}
113
114
@@ -118,17 +119,18 @@ void lp_ticker_1s_sleep()
118
119
119
120
ticker_set_handler (lp_ticker_data, cb_done);
120
121
ticker_remove_event (lp_ticker_data, &delay_event);
121
- delay_ts = lp_ticker_read ( ) + 1000000 ;
122
+ delay_ts = ticker_read (lp_ticker_data ) + 1000000 ;
122
123
123
124
sleep_manager_lock_deep_sleep ();
124
- timestamp_t start = us_ticker_read ();
125
+ timer.reset ();
126
+ timer.start ();
125
127
ticker_insert_event (lp_ticker_data, &delay_event, delay_ts, (uint32_t )&delay_event);
126
128
sleep ();
127
129
while (!complete);
128
- timestamp_t end = complete_timestamp ;
130
+ timer. stop () ;
129
131
sleep_manager_unlock_deep_sleep ();
130
132
131
- TEST_ASSERT_UINT32_WITHIN (LONG_TIMEOUT, 1000000 , end - start );
133
+ TEST_ASSERT_UINT32_WITHIN (LONG_TIMEOUT, 1000000 , complete_time );
132
134
TEST_ASSERT_TRUE (complete);
133
135
}
134
136
#endif /* DEVICE_SLEEP */
0 commit comments