Line data Source code
1 0 : /*
2 : * Copyright The Zephyr Project Contributors
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_ZEPHYR_POSIX_POSIX_TIME_H_
8 : #define ZEPHYR_INCLUDE_ZEPHYR_POSIX_POSIX_TIME_H_
9 :
10 : #if defined(_POSIX_C_SOURCE) || defined(__DOXYGEN__)
11 :
12 : #include <stddef.h>
13 :
14 : #include <zephyr/sys/clock.h>
15 : #include <zephyr/toolchain.h>
16 :
17 : #ifdef __cplusplus
18 : extern "C" {
19 : #endif
20 :
21 : /* clock_t must be defined in the libc time.h */
22 : /* size_t must be defined in the libc stddef.h */
23 : /* time_t must be defined in the libc time.h */
24 :
25 : #if !defined(_CLOCKID_T_DECLARED) && !defined(__clockid_t_defined)
26 0 : typedef unsigned long clockid_t;
27 : #define _CLOCKID_T_DECLARED
28 : #define __clockid_t_defined
29 : #endif
30 :
31 : #if !defined(_TIMER_T_DECLARED) && !defined(__timer_t_defined)
32 0 : typedef unsigned long timer_t;
33 : #define _TIMER_T_DECLARED
34 : #define __timer_t_defined
35 : #endif
36 :
37 : #if !defined(_LOCALE_T_DECLARED) && !defined(__locale_t_defined)
38 : #ifdef CONFIG_NEWLIB_LIBC
39 : struct __locale_t;
40 : typedef struct __locale_t *locale_t;
41 : #else
42 0 : typedef void *locale_t;
43 : #endif
44 : #define _LOCALE_T_DECLARED
45 : #define __locale_t_defined
46 : #endif
47 :
48 : #if !defined(_PID_T_DECLARED) && !defined(__pid_t_defined)
49 0 : typedef int pid_t;
50 : #define _PID_T_DECLARED
51 : #define __pid_t_defined
52 : #endif
53 :
54 : #if defined(_POSIX_REALTIME_SIGNALS)
55 : struct sigevent;
56 : #endif
57 :
58 : /* struct tm must be defined in the libc time.h */
59 :
60 : #if __STDC_VERSION__ >= 201112L
61 : /* struct timespec must be defined in the libc time.h */
62 : #else
63 : #if !defined(_TIMESPEC_DECLARED) && !defined(__timespec_defined)
64 0 : typedef struct {
65 0 : time_t tv_sec;
66 0 : long tv_nsec;
67 : } timespec_t;
68 : #define _TIMESPEC_DECLARED
69 : #define __timespec_defined
70 : #endif
71 : #endif
72 :
73 : #if !defined(_ITIMERSPEC_DECLARED) && !defined(__itimerspec_defined)
74 0 : struct itimerspec {
75 0 : struct timespec it_interval;
76 0 : struct timespec it_value;
77 : };
78 : #define _ITIMERSPEC_DECLARED
79 : #define __itimerspec_defined
80 : #endif
81 :
82 : /* NULL must be defined in the libc stddef.h */
83 :
84 : #ifndef CLOCK_REALTIME
85 0 : #define CLOCK_REALTIME ((clockid_t)SYS_CLOCK_REALTIME)
86 : #endif
87 :
88 : #ifndef CLOCKS_PER_SEC
89 : #if defined(_XOPEN_SOURCE)
90 : #define CLOCKS_PER_SEC 1000000
91 : #else
92 0 : #define CLOCKS_PER_SEC CONFIG_SYS_CLOCK_TICKS_PER_SEC
93 : #endif
94 : #endif
95 :
96 : #if defined(_POSIX_CPUTIME) || defined(__DOXYGEN__)
97 : #ifndef CLOCK_PROCESS_CPUTIME_ID
98 0 : #define CLOCK_PROCESS_CPUTIME_ID ((clockid_t)2)
99 : #endif
100 : #endif
101 :
102 : #if defined(_POSIX_THREAD_CPUTIME) || defined(__DOXYGEN__)
103 : #ifndef CLOCK_THREAD_CPUTIME_ID
104 0 : #define CLOCK_THREAD_CPUTIME_ID ((clockid_t)3)
105 : #endif
106 : #endif
107 :
108 : #if defined(_POSIX_MONOTONIC_CLOCK) || defined(__DOXYGEN__)
109 : #ifndef CLOCK_MONOTONIC
110 0 : #define CLOCK_MONOTONIC ((clockid_t)SYS_CLOCK_MONOTONIC)
111 : #endif
112 : #endif
113 :
114 : #ifndef TIMER_ABSTIME
115 0 : #define TIMER_ABSTIME SYS_TIMER_ABSTIME
116 : #endif
117 :
118 : /* asctime() must be declared in the libc time.h */
119 : #if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(__DOXYGEN__)
120 0 : char *asctime_r(const struct tm *ZRESTRICT tm, char *ZRESTRICT buf);
121 : #endif
122 : /* clock() must be declared in the libc time.h */
123 : #if defined(_POSIX_CPUTIME) || defined(__DOXYGEN__)
124 0 : int clock_getcpuclockid(pid_t pid, clockid_t *clock_id);
125 : #endif
126 : #if defined(_POSIX_TIMERS) || defined(__DOXYGEN__)
127 0 : int clock_getres(clockid_t clock_id, struct timespec *ts);
128 0 : int clock_gettime(clockid_t clock_id, struct timespec *ts);
129 : #endif
130 : #if defined(_POSIX_CLOCK_SELECTION) || defined(__DOXYGEN__)
131 0 : int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp,
132 : struct timespec *rmtp);
133 : #endif
134 : #if defined(_POSIX_TIMERS) || defined(__DOXYGEN__)
135 0 : int clock_settime(clockid_t clock_id, const struct timespec *ts);
136 : #endif
137 : /* ctime() must be declared in the libc time.h */
138 : #if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(__DOXYGEN__)
139 0 : char *ctime_r(const time_t *clock, char *buf);
140 : #endif
141 : /* difftime() must be declared in the libc time.h */
142 : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
143 0 : struct tm *getdate(const char *string);
144 : #endif
145 : /* gmtime() must be declared in the libc time.h */
146 : #if __STDC_VERSION__ >= 202311L
147 : /* gmtime_r() must be declared in the libc time.h */
148 : #else
149 : #if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(__DOXYGEN__)
150 0 : struct tm *gmtime_r(const time_t *ZRESTRICT timer, struct tm *ZRESTRICT result);
151 : #endif
152 : #endif
153 : /* localtime() must be declared in the libc time.h */
154 : #if __STDC_VERSION__ >= 202311L
155 : /* localtime_r() must be declared in the libc time.h */
156 : #else
157 : #if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(__DOXYGEN__)
158 0 : struct tm *localtime_r(const time_t *ZRESTRICT timer, struct tm *ZRESTRICT result);
159 : #endif
160 : #endif
161 : /* mktime() must be declared in the libc time.h */
162 : #if defined(_POSIX_TIMERS) || defined(__DOXYGEN__)
163 0 : int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);
164 : #endif
165 : /* strftime() must be declared in the libc time.h */
166 0 : size_t strftime_l(char *ZRESTRICT s, size_t maxsize, const char *ZRESTRICT format,
167 : const struct tm *ZRESTRICT timeptr, locale_t locale);
168 : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
169 0 : char *strptime(const char *ZRESTRICT s, const char *ZRESTRICT format, struct tm *ZRESTRICT tm);
170 : #endif
171 : /* time() must be declared in the libc time.h */
172 : #if defined(_POSIX_TIMERS) || defined(__DOXYGEN__)
173 0 : int timer_create(clockid_t clockId, struct sigevent *ZRESTRICT evp, timer_t *ZRESTRICT timerid);
174 0 : int timer_delete(timer_t timerid);
175 0 : int timer_getoverrun(timer_t timerid);
176 0 : int timer_gettime(timer_t timerid, struct itimerspec *its);
177 0 : int timer_settime(timer_t timerid, int flags, const struct itimerspec *value,
178 : struct itimerspec *ovalue);
179 : #endif
180 :
181 : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
182 0 : extern int daylight;
183 0 : extern long timezone;
184 : #endif
185 :
186 0 : extern char *tzname[];
187 :
188 : #ifdef __cplusplus
189 : }
190 : #endif
191 :
192 : #endif /* defined(_POSIX_C_SOURCE) || defined(__DOXYGEN__) */
193 :
194 : #endif /* ZEPHYR_INCLUDE_ZEPHYR_POSIX_POSIX_TIME_H_ */
|