Skip to content

Commit 189606f

Browse files
committed
Implement rcl_timer_reset
1 parent 3de2bb9 commit 189606f

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

rclrs/src/timer.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ impl Timer {
8989
})
9090
}
9191

92+
pub fn reset(&mut self) -> Result<(), RclrsError>
93+
{
94+
let mut rcl_timer = self.rcl_timer.lock().unwrap();
95+
to_rclrs_result(unsafe {rcl_timer_reset(&mut *rcl_timer)})
96+
}
97+
9298
// handle() -> RCLC Timer Type
9399

94100
// clock() -> Clock ?
@@ -205,8 +211,6 @@ mod tests {
205211
let clock = Clock::steady();
206212
let context = Context::new(vec![]).unwrap();
207213
let period_ns: i64 = 2e6 as i64; // 2 milliseconds.
208-
let sleep_period_ms = time::Duration::from_millis(1);
209-
210214
let dut = Timer::new(&clock, &context, period_ns);
211215
assert!(dut.is_ok());
212216
let dut = dut.unwrap();
@@ -215,4 +219,20 @@ mod tests {
215219
let time_until_next_call = time_until_next_call.unwrap();
216220
assert!(time_until_next_call < period_ns, "time_until_next_call: {}", time_until_next_call);
217221
}
222+
223+
#[test]
224+
fn test_reset() {
225+
let tolerance = 1e4 as i64;
226+
let clock = Clock::steady();
227+
let context = Context::new(vec![]).unwrap();
228+
let period_ns: i64 = 2e6 as i64; // 2 milliseconds.
229+
let mut dut = Timer::new(&clock, &context, period_ns).unwrap();
230+
let elapsed = period_ns - dut.time_until_next_call().unwrap();
231+
assert!(elapsed < tolerance , "elapsed before reset: {}", elapsed);
232+
thread::sleep(time::Duration::from_millis(1));
233+
assert!(dut.reset().is_ok());
234+
let elapsed = period_ns - dut.time_until_next_call().unwrap();
235+
assert!(elapsed < tolerance , "elapsed after reset: {}", elapsed);
236+
}
237+
218238
}

0 commit comments

Comments
 (0)