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