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