@@ -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
94104impl 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