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