How do I use the RtiNtpTime structure?
Note: Applies to NDDS 3.x.
NDDS's internal time representation is in NTP format rather than DDS_Time
for computational efficiency reasons.
The header osapi/osapi_ntptime.h defines NTP time class (struct RTINtpTime
) as well as its manipulation methods. A brief excerpt from this header file is given below:
struct RTINtpTime
defines a structure used to represent times and time intervals as seconds and binary fractions ( 1/2^32-ths
) of a second. (Ntp
is used because the format is the same as the one used by the Network Time Protocol standard.)
Here is a very brief synopsis of the supported functions/macros:
RTINtpTime_add(ANSWER, T1, T2)
Sets ANSWER
to T1
+ T2
.
RTINtpTime_compare(TIME1, TIME2)
Returns an integer that is
- < 0 if
TIME1
<TIME2
, - 0 if
TIME1 == TIME2
, - > 0 if
TIME1 > TIME2
.
RTINtpTime_compareToZero(TIME)
Returns an integer that is
- < 0 if
TIME < 0
, - 0 if
TIME == 0
, - > 0 if
TIME > 0
.
RTINtpTime_decrement(ANSWER, TIME)
Sets ANSWER
to ANSWER - TIME
.
RTINtpTime_increment(ANSWER, TIME)
Sets ANSWER
to ANSWER - TIME
.
RTINtpTime_incrementInfinitesimally(TIME)
Increases TIME
by a very small amount.
RTINtpTime_isInfinite(TIME)
Returns true if TIME
is infinitely large.
RTINtpTime_packFromFraction(TIME, NUMERATOR, DENOMINATOR_PER_SEC)
Sets TIME
to (approximately) NUMERATOR / DENOMINATOR_PER_SEC
seconds.
RTINtpTime_packFromMillisec(TIME, S, MSEC)
Sets TIME
to S
seconds and MSEC
milliseconds (1/1000 sec).
RTINtpTime_packFromMicrosec(TIME, S, USEC)
Sets TIME
to S
seconds and USEC
microseconds (1/1000000 sec).
RTINtpTime_packFromNanosec(TIME, S, NSEC)
Sets TIME
to S
seconds and NSEC
nanoseconds (1/1000000000 sec).
RTINtpTime_setMax(TIME)
Sets TIME
to the largest possible value (which is considered infinite).
RTINtpTime_setZero(TIME)
Sets TIME
to zero.
RTINtpTime_shiftLeft(ANSWER, TIME, SHIFT)
Sets ANSWER
to TIME * 2^SHIFT
.
RTINtpTime_shiftRight(ANSWER, TIME, SHIFT)
Sets ANSWER
to TIME / 2^SHIFT
.
RTINtpTime_subtract(ANSWER, T1, T2)
Sets ANSWER
to T1 - T2
.
RTINtpTime_toDouble(T)
Converts T
(an RTINtpTime
) to a double
and returns the result.
RTINtpTime_toString(T, STR)
Writes a string representation of T
to STR
, which should be a char*
. STR
must be at least RTI_NTP_TIME_STRING_LEN
characters long.
RTINtpTime_unpackToFraction(NUMERATOR, DENOMINATOR_PER_SEC, TIME)
Sets NUMERATOR
to (approximately) TIME * DENOMINATOR_PER_SEC
.
RTINtpTime_unpackToMillisec(S, MSEC, TIME)
Converts TIME
to seconds and milliseconds; set S
and MSEC
to the result.
RTINtpTime_unpackToMicrosec(S, USEC, TIME)
Converts TIME
to seconds and microseconds; set S
and USEC
to the result.
RTINtpTime_unpackToNanosec(S, NSEC, TIME)
Converts TIME
to seconds and nanoseconds; set S
and NSEC
to the result.