Skip to content

Commit d233b47

Browse files
Added cancel behavior
1 parent a60d9f3 commit d233b47

File tree

1 file changed

+37
-10
lines changed

1 file changed

+37
-10
lines changed

rclrs/src/timer.rs

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,26 @@ impl Timer {
4141
})
4242
}
4343

44+
pub fn cancel(&self) -> Result<(), RclrsError> {
45+
let mut rcl_timer = self.rcl_timer.lock().unwrap();
46+
let cancel_result = unsafe { rcl_timer_cancel(&mut *rcl_timer) };
47+
to_rclrs_result(cancel_result)
48+
}
49+
50+
pub fn is_canceled(&self) -> Result<bool, RclrsError> {
51+
let mut is_canceled = false;
52+
let is_canceled_result = unsafe {
53+
let rcl_timer = self.rcl_timer.lock().unwrap();
54+
rcl_timer_is_canceled(
55+
&* rcl_timer,
56+
&mut is_canceled
57+
)
58+
};
59+
to_rclrs_result(is_canceled_result).map(|_| {
60+
is_canceled
61+
})
62+
}
63+
4464
pub fn time_since_last_call(&self) -> Result<i64, RclrsError> {
4565
let mut time_value_ns: i64 = 0;
4666
let time_since_last_call_result = unsafe {
@@ -71,24 +91,14 @@ impl Timer {
7191

7292
// handle() -> RCLC Timer Type
7393

74-
// destroy() -> None
75-
7694
// clock() -> Clock ?
7795

7896
// timer_period_ns -> i64 ?
7997

8098
// is_ready() -> bool
8199

82-
// is_cancelled() -> bool
83-
84-
// cancel() -> None
85-
86100
// reset() -> None
87101

88-
// time_since_last_call() -> i64
89-
90-
// time_until_next_call() -> Option<i64>
91-
92102
}
93103

94104
impl Drop for rcl_timer_t {
@@ -156,6 +166,23 @@ mod tests {
156166
assert!(dut.is_ok());
157167
}
158168

169+
#[test]
170+
fn test_cancel() {
171+
let clock = Clock::steady();
172+
let context = Context::new(vec![]).unwrap();
173+
let period: i64 = 1e6 as i64; // 1 milliseconds.
174+
175+
let dut = Timer::new(&clock, &context, period);
176+
assert!(dut.is_ok());
177+
let dut = dut.unwrap();
178+
assert!(dut.is_canceled().is_ok());
179+
assert!(!dut.is_canceled().unwrap());
180+
let cancel_result = dut.cancel();
181+
assert!(cancel_result.is_ok());
182+
assert!(dut.is_canceled().is_ok());
183+
assert!(dut.is_canceled().unwrap());
184+
}
185+
159186
#[test]
160187
fn test_time_since_last_call_before_first_event() {
161188
let clock = Clock::steady();

0 commit comments

Comments
 (0)