1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#ifndef WPIUTIL_WPI_TIMESTAMP_H_
#define WPIUTIL_WPI_TIMESTAMP_H_
#include <stdint.h>
#ifdef __cplusplus
#include <memory> // NOLINT
#endif
#ifdef __cplusplus
extern "C" {
#endif
/**
* De-initialize the on-Rio Now() implementation. No effect on non-Rio
* platforms.
*/
void WPI_Impl_ShutdownNowRio(void);
/**
* The default implementation used for Now().
* In general this is the time returned by the operating system.
* @return Time in microseconds.
*/
uint64_t WPI_NowDefault(void);
/**
* Set the implementation used by WPI_Now().
* The implementation must return monotonic time in microseconds to maintain
* the contract of WPI_Now().
* @param func Function called by WPI_Now() to return the time.
*/
void WPI_SetNowImpl(uint64_t (*func)(void));
/**
* Return a value representing the current time in microseconds.
* The epoch is not defined.
* @return Time in microseconds.
*/
uint64_t WPI_Now(void);
/**
* Return the current system time in microseconds since the Unix epoch
* (January 1st, 1970 00:00 UTC).
*
* @return Time in microseconds.
*/
uint64_t WPI_GetSystemTime(void);
#ifdef __cplusplus
} // extern "C"
#endif
#ifdef __cplusplus
namespace wpi {
namespace impl {
/**
* Initialize the on-Rio Now() implementation to use the desktop timestamp.
* No effect on non-Rio platforms. This should only be used for testing
* purposes if the HAL is not available.
*/
void SetupNowDefaultOnRio();
/**
* Initialize the on-Rio Now() implementation to use the FPGA timestamp.
* No effect on non-Rio platforms. This is called by HAL_Initialize() and
* thus should generally not be called by user code.
*/
#ifdef __FRC_ROBORIO__
template <typename T>
bool SetupNowRio(void* chipObjectLibrary, std::unique_ptr<T> hmbObject);
#else
template <typename T>
inline bool SetupNowRio(void*, std::unique_ptr<T>) {
return true;
}
#endif
/**
* Initialize the on-Rio Now() implementation to use the FPGA timestamp.
* No effect on non-Rio platforms. This take an FPGA session that has
* already been initialized, and is used from LabVIEW.
*/
bool SetupNowRio(uint32_t session);
/**
* De-initialize the on-Rio Now() implementation. No effect on non-Rio
* platforms.
*/
void ShutdownNowRio();
} // namespace impl
/**
* The default implementation used for Now().
* In general this is the time returned by the operating system.
* @return Time in microseconds.
*/
uint64_t NowDefault();
/**
* Set the implementation used by Now().
* The implementation must return monotonic time in microseconds to maintain
* the contract of Now().
* @param func Function called by Now() to return the time.
*/
void SetNowImpl(uint64_t (*func)());
/**
* Return a value representing the current time in microseconds.
* This is a monotonic clock with an undefined epoch.
* @return Time in microseconds.
*/
uint64_t Now();
/**
* Return the current system time in microseconds since the Unix epoch
* (January 1st, 1970 00:00 UTC).
*
* @return Time in microseconds.
*/
uint64_t GetSystemTime();
} // namespace wpi
#endif
#endif // WPIUTIL_WPI_TIMESTAMP_H_