@@ -62,8 +62,89 @@ Java_org_ros2_rcljava_time_Clock_nativeCreateClockHandle(JNIEnv * env, jclass, j
6262 return 0 ;
6363 }
6464
65- jlong clock_handle = reinterpret_cast <jlong>(clock);
66- return clock_handle;
65+ return reinterpret_cast <jlong>(clock);
66+ }
67+
68+ JNIEXPORT jlong JNICALL
69+ Java_org_ros2_rcljava_time_Clock_nativeGetNow (JNIEnv * env, jclass, jlong clock_handle)
70+ {
71+ rcl_clock_t * clock = reinterpret_cast <rcl_clock_t *>(clock_handle);
72+ rcl_time_point_value_t nanoseconds;
73+ rcl_ret_t ret = rcl_clock_get_now (clock, &nanoseconds);
74+ if (ret != RCL_RET_OK) {
75+ std::string msg = " Failed to get time: " + std::string (rcl_get_error_string ().str );
76+ rcl_reset_error ();
77+ rcljava_throw_rclexception (env, ret, msg);
78+ return 0 ;
79+ }
80+
81+ return static_cast <jlong>(nanoseconds);
82+ }
83+
84+ JNIEXPORT jboolean JNICALL
85+ Java_org_ros2_rcljava_time_Clock_nativeRosTimeOverrideEnabled (
86+ JNIEnv * env, jclass, jlong clock_handle)
87+ {
88+ rcl_clock_t * clock = reinterpret_cast <rcl_clock_t *>(clock_handle);
89+
90+ if (!rcl_clock_valid (clock)) {
91+ return false ;
92+ }
93+
94+ bool is_enabled = false ;
95+ rcl_ret_t ret = rcl_is_enabled_ros_time_override (clock, &is_enabled);
96+ if (ret != RCL_RET_OK) {
97+ std::string msg = " Failed to check ros_time_override_status: " +
98+ std::string (rcl_get_error_string ().str );
99+ rcl_reset_error ();
100+ rcljava_throw_rclexception (env, ret, msg);
101+ return false ;
102+ }
103+
104+ return is_enabled;
105+ }
106+
107+ JNIEXPORT void JNICALL
108+ Java_org_ros2_rcljava_time_Clock_nativeSetRosTimeOverrideEnabled (
109+ JNIEnv * env, jclass, jlong clock_handle, jboolean enabled)
110+ {
111+ rcl_clock_t * clock = reinterpret_cast <rcl_clock_t *>(clock_handle);
112+
113+ if (!rcl_clock_valid (clock)) {
114+ return ;
115+ }
116+
117+ rcl_ret_t ret;
118+ if (enabled) {
119+ ret = rcl_enable_ros_time_override (clock);
120+ } else {
121+ ret = rcl_disable_ros_time_override (clock);
122+ }
123+ if (ret != RCL_RET_OK) {
124+ std::string msg = " Failed to set ROS time override enable for clock: " +
125+ std::string (rcl_get_error_string ().str );
126+ rcl_reset_error ();
127+ rcljava_throw_rclexception (env, ret, msg);
128+ }
129+ }
130+
131+ JNIEXPORT void JNICALL
132+ Java_org_ros2_rcljava_time_Clock_nativeSetRosTimeOverride (
133+ JNIEnv * env, jclass, jlong clock_handle, jlong nanos)
134+ {
135+ rcl_clock_t * clock = reinterpret_cast <rcl_clock_t *>(clock_handle);
136+
137+ if (!rcl_clock_valid (clock)) {
138+ return ;
139+ }
140+
141+ rcl_ret_t ret = rcl_set_ros_time_override (clock, static_cast <rcl_time_point_value_t >(nanos));
142+ if (ret != RCL_RET_OK) {
143+ std::string msg = " Failed to set ROS time override for clock: " +
144+ std::string (rcl_get_error_string ().str );
145+ rcl_reset_error ();
146+ rcljava_throw_rclexception (env, ret, msg);
147+ }
67148}
68149
69150JNIEXPORT void JNICALL
0 commit comments