libuav original

Dependents:   UAVCAN UAVCAN_Subscriber

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers uc_timer.cpp Source File

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 }