libuav original
Dependents: UAVCAN UAVCAN_Subscriber
uc_timer.cpp
00001 /* 00002 * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com> 00003 */ 00004 00005 #include <uavcan/node/timer.hpp> 00006 #include <cassert> 00007 00008 namespace uavcan 00009 { 00010 /* 00011 * TimerBase 00012 */ 00013 void TimerBase::handleDeadline(MonotonicTime current) 00014 { 00015 UAVCAN_ASSERT(!isRunning()); 00016 00017 const MonotonicTime scheduled_time = getDeadline(); 00018 00019 if (period_ < MonotonicDuration::getInfinite()) 00020 { 00021 startWithDeadline(scheduled_time + period_); 00022 } 00023 00024 // Application can re-register the timer with different params, it's OK 00025 handleTimerEvent(TimerEvent(scheduled_time, current)); 00026 } 00027 00028 void TimerBase::startOneShotWithDeadline(MonotonicTime deadline) 00029 { 00030 stop(); 00031 period_ = MonotonicDuration::getInfinite(); 00032 DeadlineHandler::startWithDeadline(deadline); 00033 } 00034 00035 void TimerBase::startOneShotWithDelay(MonotonicDuration delay) 00036 { 00037 stop(); 00038 period_ = MonotonicDuration::getInfinite(); 00039 DeadlineHandler::startWithDelay(delay); 00040 } 00041 00042 void TimerBase::startPeriodic(MonotonicDuration period) 00043 { 00044 UAVCAN_ASSERT(period < MonotonicDuration::getInfinite()); 00045 stop(); 00046 period_ = period; 00047 DeadlineHandler::startWithDelay(period); 00048 } 00049 00050 }
Generated on Tue Jul 12 2022 17:17:35 by 1.7.2