Line data Source code
1 0 : /* 2 : * Copyright (c) 2018 Intel Corporation 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : #ifndef ZEPHYR_INCLUDE_POSIX_TIME_H_ 7 : #define ZEPHYR_INCLUDE_POSIX_TIME_H_ 8 : 9 : /* Read standard header. This may find <posix/time.h> since they 10 : * refer to the same file when include/posix is in the search path. 11 : */ 12 : #include <time.h> 13 : 14 : #ifdef CONFIG_NEWLIB_LIBC 15 : /* Kludge to support outdated newlib version as used in SDK 0.10 for Xtensa */ 16 : #include <newlib.h> 17 : 18 : #ifdef __NEWLIB__ 19 : /* Newever Newlib 3.x+ */ 20 : #include <sys/timespec.h> 21 : #else /* __NEWLIB__ */ 22 : /* Workaround for older Newlib 2.x, as used by Xtensa. It lacks sys/_timeval.h, 23 : * so mimic it here. 24 : */ 25 : #include <sys/types.h> 26 : #ifndef __timespec_defined 27 : 28 : #ifdef __cplusplus 29 : extern "C" { 30 : #endif 31 : 32 : struct timespec { 33 : time_t tv_sec; 34 : long tv_nsec; 35 : }; 36 : 37 : struct itimerspec { 38 : struct timespec it_interval; /* Timer interval */ 39 : struct timespec it_value; /* Timer expiration */ 40 : }; 41 : 42 : #ifdef __cplusplus 43 : } 44 : #endif 45 : 46 : #endif /* __timespec_defined */ 47 : #endif /* __NEWLIB__ */ 48 : 49 : #else /* CONFIG_NEWLIB_LIBC */ 50 : /* Not Newlib */ 51 : # if defined(CONFIG_ARCH_POSIX) && defined(CONFIG_EXTERNAL_LIBC) 52 : # include <bits/types/struct_timespec.h> 53 : # include <bits/types/struct_itimerspec.h> 54 : # else 55 : # include <sys/timespec.h> 56 : # endif 57 : #endif /* CONFIG_NEWLIB_LIBC */ 58 : 59 : #include <zephyr/kernel.h> 60 : #include <errno.h> 61 : #include <zephyr/posix/posix_types.h> 62 : #include <zephyr/posix/signal.h> 63 : 64 : #ifdef __cplusplus 65 : extern "C" { 66 : #endif 67 : 68 : #ifndef CLOCK_REALTIME 69 0 : #define CLOCK_REALTIME 1 70 : #endif 71 : 72 : #ifndef CLOCK_PROCESS_CPUTIME_ID 73 0 : #define CLOCK_PROCESS_CPUTIME_ID 2 74 : #endif 75 : 76 : #ifndef CLOCK_THREAD_CPUTIME_ID 77 0 : #define CLOCK_THREAD_CPUTIME_ID 3 78 : #endif 79 : 80 : #ifndef CLOCK_MONOTONIC 81 0 : #define CLOCK_MONOTONIC 4 82 : #endif 83 : 84 : #ifndef TIMER_ABSTIME 85 0 : #define TIMER_ABSTIME 4 86 : #endif 87 : 88 : static inline int32_t _ts_to_ms(const struct timespec *to) 89 : { 90 : return (int32_t)(to->tv_sec * MSEC_PER_SEC) + (int32_t)(to->tv_nsec / NSEC_PER_MSEC); 91 : } 92 : 93 0 : int clock_gettime(clockid_t clock_id, struct timespec *ts); 94 0 : int clock_getres(clockid_t clock_id, struct timespec *ts); 95 0 : int clock_settime(clockid_t clock_id, const struct timespec *ts); 96 0 : int clock_getcpuclockid(pid_t pid, clockid_t *clock_id); 97 : /* Timer APIs */ 98 0 : int timer_create(clockid_t clockId, struct sigevent *evp, timer_t *timerid); 99 0 : int timer_delete(timer_t timerid); 100 : struct itimerspec; 101 0 : int timer_gettime(timer_t timerid, struct itimerspec *its); 102 0 : int timer_settime(timer_t timerid, int flags, const struct itimerspec *value, 103 : struct itimerspec *ovalue); 104 0 : int timer_getoverrun(timer_t timerid); 105 0 : int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); 106 0 : int clock_nanosleep(clockid_t clock_id, int flags, 107 : const struct timespec *rqtp, struct timespec *rmtp); 108 : 109 : #ifdef __cplusplus 110 : } 111 : #endif 112 : 113 : #else /* ZEPHYR_INCLUDE_POSIX_TIME_H_ */ 114 : /* Read the toolchain header when <posix/time.h> finds itself on the 115 : * first attempt. 116 : */ 117 : #include_next <time.h> 118 : #endif /* ZEPHYR_INCLUDE_POSIX_TIME_H_ */