diff --git a/rcl/include/rcl/time.h b/rcl/include/rcl/time.h index 7c2b9d0..7b46398 100644 --- a/rcl/include/rcl/time.h +++ b/rcl/include/rcl/time.h @@ -237,43 +237,6 @@ RCL_WARN_UNUSED rcl_ret_t rcl_system_clock_fini(rcl_clock_t * clock); -/// Initialize a time point using the clock. -/** - * This function will initialize the time_point using the clock - * as a reference. - * If the clock is null it will use the system default clock. - * - * This will allocate all necessary internal structures, and initialize variables. - * The clock may be of types `RCL_ROS_TIME`, `RCL_STEADY_TIME`, or - * `RCL_SYSTEM_TIME`. - * - * \param[in] time_point the handle to the clock which is being initialized. - * \param[in] clock_type the type of the clock that clock will be used for reference. - * \return `RCL_RET_OK` if the last call time was retrieved successfully, or - * \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid, or - * \return `RCL_RET_ERROR` an unspecified error occur. - */ -RCL_PUBLIC -RCL_WARN_UNUSED -rcl_ret_t -rcl_time_point_init(rcl_time_point_t * time_point, rcl_clock_type_t * clock_type); - -/// Finalize a time_point -/** - * Finalize the time_point such that it is ready for deallocation. - * - * This will deallocate all necessary internal structures, and clean up any variables. - * - * \param[in] time_point the handle to the time_point which is being finalized. - * \return `RCL_RET_OK` if the last call time was retrieved successfully, or - * \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid, or - * \return `RCL_RET_ERROR` an unspecified error occur. - */ -RCL_PUBLIC -RCL_WARN_UNUSED -rcl_ret_t -rcl_time_point_fini(rcl_time_point_t * time_point); - /// Initialize a duration using the clock. /** * This function will initialize the duration using the clock as a reference. @@ -344,7 +307,7 @@ rcl_difference_times( RCL_PUBLIC RCL_WARN_UNUSED rcl_ret_t -rcl_time_point_get_now(rcl_clock_t * clock, rcl_time_point_t * time_point); +rcl_clock_get_now(rcl_clock_t * clock, rcl_time_point_t * time_point); /// Enable the ROS time abstraction override. @@ -396,7 +359,7 @@ RCL_PUBLIC RCL_WARN_UNUSED rcl_ret_t rcl_is_enabled_ros_time_override( - rcl_time_source_t * time_source, bool * is_enabled); + rcl_clock_t * time_source, bool * is_enabled); /// Set the current time for this `RCL_ROS_TIME` time source. /** @@ -415,7 +378,7 @@ RCL_PUBLIC RCL_WARN_UNUSED rcl_ret_t rcl_set_ros_time_override( - rcl_time_source_t * time_source, rcl_time_point_value_t time_value); + rcl_clock_t * time_source, rcl_time_point_value_t time_value); #if __cplusplus } diff --git a/rcl/src/rcl/time.c b/rcl/src/rcl/time.c index 1510deb..6b02e9d 100644 --- a/rcl/src/rcl/time.c +++ b/rcl/src/rcl/time.c @@ -188,24 +188,6 @@ rcl_system_clock_fini(rcl_clock_t * clock) return RCL_RET_OK; } -rcl_ret_t -rcl_time_point_init(rcl_time_point_t * time_point, rcl_clock_type_t * clock_type) -{ - RCL_CHECK_ARGUMENT_FOR_NULL(time_point, RCL_RET_INVALID_ARGUMENT, rcl_get_default_allocator()); - RCL_CHECK_ARGUMENT_FOR_NULL(clock_type, RCL_RET_INVALID_ARGUMENT, rcl_get_default_allocator()); - time_point->clock_type = *clock_type; - - return RCL_RET_OK; -} - -rcl_ret_t -rcl_time_point_fini(rcl_time_point_t * time_point) -{ - RCL_CHECK_ARGUMENT_FOR_NULL(time_point, RCL_RET_INVALID_ARGUMENT, rcl_get_default_allocator()); - (void)time_point; - return RCL_RET_OK; -} - rcl_ret_t rcl_duration_init(rcl_duration_t * duration, rcl_clock_type_t * clock_type) { @@ -238,17 +220,18 @@ rcl_difference_times( if (finish->nanoseconds < start->nanoseconds) { rcl_time_point_value_t intermediate = start->nanoseconds - finish->nanoseconds; delta->nanoseconds = -1 * (int) intermediate; + } else { + delta->nanoseconds = (int)(finish->nanoseconds - start->nanoseconds); } - delta->nanoseconds = (int)(finish->nanoseconds - start->nanoseconds); return RCL_RET_OK; } rcl_ret_t -rcl_time_point_get_now(rcl_clock_t * clock, rcl_time_point_t * time_point) +rcl_clock_get_now(rcl_clock_t * clock, rcl_time_point_t * time_point) { // TODO(tfoote) switch to use external time source RCL_CHECK_ARGUMENT_FOR_NULL(time_point, RCL_RET_INVALID_ARGUMENT, rcl_get_default_allocator()); - if (time_point->clock_type && clock->get_now) { + if (clock->type && clock->get_now) { return clock->get_now(clock->data, &(time_point->nanoseconds)); } diff --git a/rcl/test/rcl/test_time.cpp b/rcl/test/rcl/test_time.cpp index 2a0dc5e..fe89f43 100644 --- a/rcl/test/rcl/test_time.cpp +++ b/rcl/test/rcl/test_time.cpp @@ -82,12 +82,10 @@ TEST_F(CLASSNAME(TestTimeFixture, RMW_IMPLEMENTATION), test_rcl_ros_time_set_ove ret = rcl_is_enabled_ros_time_override(ros_clock, &is_enabled); EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_EQ(is_enabled, false); - ret = rcl_time_point_init(&query_now, &(ros_clock->type)); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); assert_no_malloc_begin(); assert_no_free_begin(); // Check for normal operation (not allowed to alloc). - ret = rcl_time_point_get_now(ros_clock, &query_now); + ret = rcl_clock_get_now(ros_clock, &query_now); assert_no_malloc_end(); assert_no_realloc_end(); assert_no_free_end(); @@ -95,7 +93,7 @@ TEST_F(CLASSNAME(TestTimeFixture, RMW_IMPLEMENTATION), test_rcl_ros_time_set_ove EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_NE(query_now.nanoseconds, 0u); // Compare to std::chrono::system_clock time (within a second). - ret = rcl_time_point_get_now(ros_clock, &query_now); + ret = rcl_clock_get_now(ros_clock, &query_now); EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); { std::chrono::system_clock::time_point now_sc = std::chrono::system_clock::now(); @@ -119,7 +117,7 @@ TEST_F(CLASSNAME(TestTimeFixture, RMW_IMPLEMENTATION), test_rcl_ros_time_set_ove EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_EQ(is_enabled, false); // get real - ret = rcl_time_point_get_now(ros_clock, &query_now); + ret = rcl_clock_get_now(ros_clock, &query_now); EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); { std::chrono::system_clock::time_point now_sc = std::chrono::system_clock::now(); @@ -137,7 +135,7 @@ TEST_F(CLASSNAME(TestTimeFixture, RMW_IMPLEMENTATION), test_rcl_ros_time_set_ove EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_EQ(is_enabled, true); // get sim - ret = rcl_time_point_get_now(ros_clock, &query_now); + ret = rcl_clock_get_now(ros_clock, &query_now); EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_EQ(query_now.nanoseconds, set_point); // disable @@ -148,7 +146,7 @@ TEST_F(CLASSNAME(TestTimeFixture, RMW_IMPLEMENTATION), test_rcl_ros_time_set_ove EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_EQ(is_enabled, false); // get real - ret = rcl_time_point_get_now(ros_clock, &query_now); + ret = rcl_clock_get_now(ros_clock, &query_now); EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); { std::chrono::system_clock::time_point now_sc = std::chrono::system_clock::now(); @@ -172,19 +170,11 @@ TEST_F(CLASSNAME(TestTimeFixture, RMW_IMPLEMENTATION), test_rcl_init_for_clock_a ret = rcl_ros_clock_init(&source); EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); - rcl_time_point_t a_time; - ret = rcl_time_point_init(&a_time, &(source.type)); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); - rcl_clock_t * ros_clock = reinterpret_cast(calloc(1, sizeof(rcl_clock_t))); rcl_ret_t retval = rcl_ros_clock_init(ros_clock); EXPECT_EQ(retval, RCL_RET_OK) << rcl_get_error_string_safe(); - rcl_time_point_t default_time; - ret = rcl_time_point_init(&default_time, &(ros_clock->type)); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); - // assert_no_malloc_begin(); // assert_no_free_begin(); // // Do stuff in here @@ -205,10 +195,6 @@ TEST_F(CLASSNAME(TestTimeFixture, RMW_IMPLEMENTATION), test_rcl_init_for_clock_a // const int k_tolerance_ms = 1000; // EXPECT_LE(llabs(now_diff), RCL_MS_TO_NS(k_tolerance_ms)) << "system_clock differs"; // } - ret = rcl_time_point_fini(&a_time); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); - ret = rcl_ros_clock_fini(&source); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); } TEST(CLASSNAME(rcl_time, RMW_IMPLEMENTATION), clock_validation) { @@ -285,16 +271,16 @@ TEST(CLASSNAME(rcl_time, RMW_IMPLEMENTATION), rcl_time_difference) { rcl_ret_t retval = rcl_ros_clock_init(ros_clock); EXPECT_EQ(retval, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_TRUE(ros_clock != nullptr); + EXPECT_TRUE(ros_clock->data != nullptr); + EXPECT_EQ(ros_clock->type, RCL_ROS_TIME); rcl_ret_t ret; rcl_time_point_t a, b; - ret = rcl_time_point_init(&a, &(ros_clock->type)); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); - ret = rcl_time_point_init(&b, &(ros_clock->type)); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); a.nanoseconds = 1000; b.nanoseconds = 2000; + a.clock_type = RCL_ROS_TIME; + b.clock_type = RCL_ROS_TIME; rcl_duration_t d; ret = rcl_duration_init(&d, &(ros_clock->type)); @@ -310,10 +296,6 @@ TEST(CLASSNAME(rcl_time, RMW_IMPLEMENTATION), rcl_time_difference) { EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_EQ(d.nanoseconds, -1000); EXPECT_EQ(d.clock_type, RCL_ROS_TIME); - - rcl_time_point_t e; - ret = rcl_time_point_init(&e, &(ros_clock->type)); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); } static bool pre_callback_called = false; @@ -340,9 +322,6 @@ TEST(CLASSNAME(rcl_time, RMW_IMPLEMENTATION), rcl_time_update_callbacks) { rcl_ret_t ret; rcl_time_point_value_t set_point = 1000000000ull; - ret = rcl_time_point_init(&query_now, &(ros_clock->type)); - EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); - // set callbacks ros_clock->pre_update = pre_callback; ros_clock->post_update = post_callback; @@ -352,7 +331,7 @@ TEST(CLASSNAME(rcl_time, RMW_IMPLEMENTATION), rcl_time_update_callbacks) { EXPECT_FALSE(post_callback_called); // Query it to do something different. no changes expected - ret = rcl_time_point_get_now(ros_clock, &query_now); + ret = rcl_clock_get_now(ros_clock, &query_now); EXPECT_EQ(ret, RCL_RET_OK) << rcl_get_error_string_safe(); EXPECT_FALSE(pre_callback_called);