00001 #ifndef ORO_TIMER_COMPONENT_HPP 00002 #define ORO_TIMER_COMPONENT_HPP 00003 00004 00005 #include <rtt/Event.hpp> 00006 #include <rtt/TimeService.hpp> 00007 #include <rtt/Command.hpp> 00008 #include <rtt/TaskContext.hpp> 00009 #include <rtt/Timer.hpp> 00010 00011 #include <rtt/RTT.hpp> 00012 #include <ocl/OCL.hpp> 00013 00014 namespace OCL 00015 { 00022 class TimerComponent 00023 : public RTT::TaskContext 00024 { 00025 protected: 00029 struct TimeoutCatcher : public Timer { 00030 RTT::Event <void(RTT::Timer::TimerId)>& me; 00031 00032 TimeoutCatcher(RTT::Timer::TimerId max_timers, RTT::Event <void(RTT::Timer::TimerId)>& e) : 00033 Timer(max_timers, ORO_SCHED_RT, OS::HighestPriority), me(e) 00034 {} 00035 virtual void timeout(Timer::TimerId id) { 00036 me(id); 00037 } 00038 }; 00039 00040 TimeoutCatcher mtimer; 00041 RTT::Event <void(RTT::Timer::TimerId)> mtimeoutEvent; 00042 00047 bool startHook(); 00048 void updateHook(); 00049 void stopHook(); 00050 00054 RTT::Command<bool(RTT::Timer::TimerId)> waitForCommand; 00055 00059 RTT::Command<bool(RTT::Timer::TimerId, double)> waitCommand; 00060 00064 bool waitFor(RTT::Timer::TimerId id); 00065 00069 bool wait(RTT::Timer::TimerId id, double seconds); 00070 00074 bool isTimerExpired(RTT::Timer::TimerId id) const; 00075 public: 00079 TimerComponent( std::string name = "Timer" ); 00080 00081 virtual ~TimerComponent(); 00082 }; 00083 00084 } 00085 00086 #endif