@@ -37,6 +37,13 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
3737 MaxParserBufferSize>::setSyncInterval(Duration interval)
3838{
3939 syncInterval_ = interval;
40+ if (syncInterval_.count () == 0 )
41+ {
42+ syncTimer_.stop ();
43+ } else
44+ {
45+ syncTimer_.restart (syncInterval_);
46+ }
4047}
4148
4249template <class ControlUart , class DataUart , class SyncPin , std::size_t FrameQueueSize,
@@ -236,7 +243,7 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
236243 return false ;
237244 } else
238245 {
239- modm::delay_us ( 100 );
246+ modm::this_fiber::sleep_for (100us );
240247 }
241248 }
242249
@@ -260,6 +267,7 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
260267 if (bytesRead == 0 ) { break ; }
261268
262269 if (not appendData (dataReadChunk_.data (), bytesRead)) { return false ; }
270+ modm::this_fiber::yield ();
263271 }
264272
265273 if (DataUart::hasError ())
@@ -354,18 +362,10 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
354362{
355363 if (syncInterval_.count () == 0 ) { return ; }
356364
357- const auto now = Clock::now ();
358- if (not hasLastSyncTime_)
359- {
360- lastSyncTime_ = now;
361- hasLastSyncTime_ = true ;
362- return ;
363- }
364-
365- if ((now - lastSyncTime_) >= syncInterval_)
365+ if (syncTimer_.isExpired ())
366366 {
367367 triggerSyncPulse ();
368- lastSyncTime_ = now ;
368+ syncTimer_. restart (syncInterval_) ;
369369 }
370370}
371371
@@ -376,7 +376,7 @@ Iwr6843aop<ControlUart, DataUart, SyncPin, FrameQueueSize, MaxPointsPerFrame,
376376 MaxParserBufferSize>::triggerSyncPulse()
377377{
378378 SyncPin::set ();
379- modm::delay_us ( 100 );
379+ modm::this_fiber::sleep_for (100us );
380380 SyncPin::reset ();
381381}
382382
0 commit comments