1/*
2 * Copyright 2018, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <autoconf.h>
8#include <camkes.h>
9#include <stdio.h>
10
11#define TICKS 3 /* amount of ticks to periodically wait for */
12#define WAIT (10 * NS_IN_MS) /* amount of time to set timeouts for */
13
14seL4_CPtr timeout_notification(void);
15
16int run(void)
17{
18    seL4_Word badge;
19    seL4_CPtr notification = timeout_notification();
20
21    /* test we can read the time */
22    uint64_t t1 = timeout_time();
23
24    /* test a periodic timeout */
25    timeout_periodic(0, WAIT);
26    for (int i = 0; i < TICKS; i++) {
27        seL4_Wait(notification, &badge);
28        printf("Tick\n");
29    }
30    uint64_t t2 = timeout_time();
31    assert(t2 - t1 >= TICKS * WAIT);
32
33    /* test a relative timeout */
34    timeout_oneshot_relative(0, WAIT);
35    seL4_Wait(notification, &badge);
36    printf("Tick\n");
37
38    /* test an absolute timeout */
39    t1 = timeout_time();
40    timeout_oneshot_absolute(0, t1 + WAIT);
41    seL4_Wait(notification, &badge);
42    printf("Tick\n");
43    t2 = timeout_time();
44    assert(t2 - t1 >= WAIT);
45
46    timeout_stop(0);
47    printf("BOOM!\n");
48
49    return 0;
50}
51