Skip to content

Commit 59ed7e2

Browse files
committed
Adds Timer::call().
Signed-off-by: Agustin Alba Chicar <[email protected]>
1 parent 189606f commit 59ed7e2

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

rclrs/src/timer.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ impl Timer {
9595
to_rclrs_result(unsafe {rcl_timer_reset(&mut *rcl_timer)})
9696
}
9797

98+
pub fn call(&mut self) -> Result<(), RclrsError>
99+
{
100+
let mut rcl_timer = self.rcl_timer.lock().unwrap();
101+
to_rclrs_result(unsafe {rcl_timer_call(&mut *rcl_timer)})
102+
}
103+
98104
// handle() -> RCLC Timer Type
99105

100106
// clock() -> Clock ?
@@ -222,7 +228,7 @@ mod tests {
222228

223229
#[test]
224230
fn test_reset() {
225-
let tolerance = 1e4 as i64;
231+
let tolerance = 20e4 as i64;
226232
let clock = Clock::steady();
227233
let context = Context::new(vec![]).unwrap();
228234
let period_ns: i64 = 2e6 as i64; // 2 milliseconds.
@@ -235,4 +241,24 @@ mod tests {
235241
assert!(elapsed < tolerance , "elapsed after reset: {}", elapsed);
236242
}
237243

244+
#[test]
245+
fn test_call() {
246+
let tolerance = 20e4 as i64;
247+
let clock = Clock::steady();
248+
let context = Context::new(vec![]).unwrap();
249+
let period_ns: i64 = 1e6 as i64; // 1 millisecond.
250+
let mut dut = Timer::new(&clock, &context, period_ns).unwrap();
251+
let elapsed = period_ns - dut.time_until_next_call().unwrap();
252+
assert!(elapsed < tolerance , "elapsed before reset: {}", elapsed);
253+
254+
thread::sleep(time::Duration::from_micros(1500));
255+
256+
let elapsed = period_ns - dut.time_until_next_call().unwrap();
257+
assert!(elapsed > 1500000i64, "time_until_next_call before call: {}", elapsed);
258+
259+
assert!(dut.call().is_ok());
260+
261+
let elapsed = dut.time_until_next_call().unwrap();
262+
assert!(elapsed < 500000i64, "time_until_next_call after call: {}", elapsed);
263+
}
238264
}

0 commit comments

Comments
 (0)