TimerComponent.cpp
Go to the documentation of this file.
1 
2 #include "TimerComponent.hpp"
3 #include <rtt/Logger.hpp>
4 #include "ocl/Component.hpp"
5 
7 ORO_LIST_COMPONENT_TYPE( OCL::TimerComponent )
8 
9 namespace OCL
10 {
11  using namespace std;
12  using namespace RTT;
13 
14  TimerComponent::TimerComponent( std::string name /*= "os::Timer" */ )
15  : TaskContext( name, PreOperational ), port_timers(32), mtimeoutEvent("timeout"),
16  mtimer( port_timers, mtimeoutEvent, name ),
17  waitForCommand( "waitFor", &TimerComponent::waitFor, this), //, &TimerComponent::isTimerExpired, this),
18  waitCommand( "wait", &TimerComponent::wait, this) //&TimerComponent::isTimerExpired, this)
19  {
20 
21  // Add the methods, methods make sure that they are
22  // executed in the context of the (non realtime) caller.
23 
24  this->addOperation("arm", &os::Timer::arm , &mtimer, RTT::ClientThread).doc("Arm a single shot timer.").arg("timerId", "A numeric id of the timer to arm.").arg("delay", "The delay in seconds before it fires.");
25  this->addOperation("startTimer", &os::Timer::startTimer , &mtimer, RTT::ClientThread).doc("Start a periodic timer.").arg("timerId", "A numeric id of the timer to start.").arg("period", "The period in seconds.");
26  this->addOperation("killTimer", &os::Timer::killTimer , &mtimer, RTT::ClientThread).doc("Kill (disable) an armed or started timer.").arg("timerId", "A numeric id of the timer to kill.");
27  this->addOperation("isArmed", &os::Timer::isArmed , &mtimer, RTT::ClientThread).doc("Check if a given timer is armed or started.").arg("timerId", "A numeric id of the timer to check.");
28  this->addOperation("setMaxTimers", &os::Timer::setMaxTimers , &mtimer, RTT::ClientThread).doc("Raise or lower the maximum amount of timers.").arg("timers", "The largest amount of timers. The highest timerId is max-1.");
29  this->addOperation( waitForCommand ).doc("Wait until a timer expires.").arg("timerId", "A numeric id of the timer to wait for.");
30  this->addOperation( waitCommand ).doc("Arm and wait until that timer expires.").arg("timerId", "A numeric id of the timer to arm and to wait for.").arg("delay", "The delay in seconds before the timer expires.");
31  this->addPort(mtimeoutEvent).doc("This port is written each time ANY timer expires. The timer id is the value sent in this port. This port is for backwards compatibility only. It is advised to use the timer_* ports.");
32  for(unsigned int i=0;i<port_timers.size();i++){
33  ostringstream port_name;
34  port_name<<"timer_"<<i;
36  this->addPort(*(port_timers[i])).doc(string("This port is written each time ")+port_name.str()+string(" expires. The timer id is the value sent in this port."));
37  }
38  }
39 
41  this->stop();
42  for(unsigned int i=0;i<port_timers.size();i++)
43  delete port_timers[i];
44  }
45 
47  {
48  return mtimer.getThread() && mtimer.getThread()->start();
49  }
50 
52  {
53  // nop, we just process the wait commands.
54  }
55 
57  {
58  mtimer.getThread()->stop();
59  }
60 
62  {
63  return mtimer.arm(id, seconds) && mtimer.waitFor(id);
64  }
65 
67  {
68  return mtimer.waitFor(id);
69  }
70 
72  {
73  return !mtimer.isArmed(id);
74  }
75 }
virtual os::ThreadInterface * getThread() const
TimeoutCatcher mtimer
bool isArmed(TimerId timer_id) const
virtual bool stop()
RTT::Operation< bool(RTT::os::Timer::TimerId, double)> waitCommand
RTT::Operation< bool(RTT::os::Timer::TimerId)> waitForCommand
std::string str()
bool wait(RTT::os::Timer::TimerId id, double seconds)
bool waitFor(RTT::os::Timer::TimerId id)
OutputPort< RTT::os::Timer::TimerId > mtimeoutEvent
std::vector< OutputPort< RTT::os::Timer::TimerId > * > port_timers
A Component interface to the Real-Time types::Toolkit&#39;s timer. It must be configured with a Activity ...
base::PortInterface & addPort(const std::string &name, base::PortInterface &port)
bool waitFor(RTT::os::Timer::TimerId id)
bool arm(TimerId timer_id, Seconds wait_time)
ORO_LIST_COMPONENT_TYPE(OCL::logging::GenerationalFileAppender)
bool isTimerExpired(RTT::os::Timer::TimerId id) const
virtual bool stop()=0
PortInterface & doc(const std::string &desc)
Operation< Signature > & addOperation(Operation< Signature > &op)
ORO_CREATE_COMPONENT_TYPE()
ClientThread
virtual bool start()=0


ocl
Author(s): OCL Development Team
autogenerated on Mon Mar 23 2020 04:47:19