3 /*****************************************************************************
5 (c) Cambridge Silicon Radio Limited 2010
6 All rights reserved and confidential information of CSR
8 Refer to LICENSE.txt included with this source for details
11 *****************************************************************************/
13 #include "csr_types.h"
19 /*******************************************************************************
25 Type to hold a value describing the current system time, which is a
26 measure of time elapsed since some arbitrarily defined fixed time
27 reference, usually associated with system startup.
29 *******************************************************************************/
33 /*******************************************************************************
39 Type to hold a value describing a UTC wallclock time expressed in
40 seconds and milliseconds elapsed since midnight January 1st 1970.
42 *******************************************************************************/
50 /*******************************************************************************
56 Returns the current system time in a low and a high part. The low part
57 is expressed in microseconds. The high part is incremented when the low
58 part wraps to provide an extended range.
60 The caller may provide a NULL pointer as the high parameter. In this case
61 the function just returns the low part and ignores the high parameter.
63 Although the time is expressed in microseconds the actual resolution is
64 platform dependent and can be less. It is recommended that the
65 resolution is at least 10 milliseconds.
68 high - Pointer to variable that will receive the high part of the
69 current system time. Passing NULL is valid.
72 Low part of current system time in microseconds.
74 *******************************************************************************/
75 CsrTime
CsrTimeGet(CsrTime
*high
);
78 /*******************************************************************************
84 Get the current system wallclock time, and optionally the current system
85 time in a low and a high part as would have been returned by
88 Although CsrTimeUtc is expressed in seconds and milliseconds, the actual
89 resolution is platform dependent, and can be less. It is recommended
90 that the resolution is at least 1 second.
93 tod - Pointer to variable that will receive the current system
95 low - The low part of the current system time in microseconds. Passing
97 high - The high part of the current system time in microseconds. Passing
100 *******************************************************************************/
101 void CsrTimeUtcGet(CsrTimeUtc
*tod
, CsrTime
*low
, CsrTime
*high
);
104 /*------------------------------------------------------------------*/
106 /*------------------------------------------------------------------*/
108 /*----------------------------------------------------------------------------*
113 * Add two time values. Adding the numbers can overflow the range of a
114 * CsrTime, so the user must be cautious.
117 * CsrTime - the sum of "t1" and "t2".
119 *----------------------------------------------------------------------------*/
120 #define CsrTimeAdd(t1, t2) ((t1) + (t2))
122 /*----------------------------------------------------------------------------*
127 * Subtract two time values. Subtracting the numbers can provoke an
128 * underflow, so the user must be cautious.
131 * CsrTime - "t1" - "t2".
133 *----------------------------------------------------------------------------*/
134 #define CsrTimeSub(t1, t2) ((s32) (t1) - (s32) (t2))
136 /*----------------------------------------------------------------------------*
141 * Compare two time values.
144 * !0 if "t1" equal "t2", else 0.
146 *----------------------------------------------------------------------------*/
147 #define CsrTimeEq(t1, t2) ((t1) == (t2))
149 /*----------------------------------------------------------------------------*
154 * Compare two time values.
157 * !0 if "t1" is greater than "t2", else 0.
159 *----------------------------------------------------------------------------*/
160 #define CsrTimeGt(t1, t2) (CsrTimeSub((t1), (t2)) > 0)
162 /*----------------------------------------------------------------------------*
167 * Compare two time values.
170 * !0 if "t1" is greater than, or equal to "t2", else 0.
172 *----------------------------------------------------------------------------*/
173 #define CsrTimeGe(t1, t2) (CsrTimeSub((t1), (t2)) >= 0)
175 /*----------------------------------------------------------------------------*
180 * Compare two time values.
183 * !0 if "t1" is less than "t2", else 0.
185 *----------------------------------------------------------------------------*/
186 #define CsrTimeLt(t1, t2) (CsrTimeSub((t1), (t2)) < 0)
188 /*----------------------------------------------------------------------------*
193 * Compare two time values.
196 * !0 if "t1" is less than, or equal to "t2", else 0.
198 *----------------------------------------------------------------------------*/
199 #define CsrTimeLe(t1, t2) (CsrTimeSub((t1), (t2)) <= 0)