main.cpp
Go to the documentation of this file.
00001 #include <boost/bind.hpp>
00002 #include <timer/TimerComponent.hpp>
00003 #include <taskbrowser/TaskBrowser.hpp>
00004 
00005 #include <rtt/Activity.hpp>
00006 #include <rtt/InputPort.hpp>
00007 #include <iostream>
00008 #include <rtt/os/main.h>
00009 
00010 using namespace std;
00011 using namespace Orocos;
00012 using namespace RTT;
00013 
00014 class TestTaskContext
00015     : public RTT::TaskContext
00016 {
00017     InputPort<os::Timer::TimerId> receiver;
00018 public:
00019     TestTaskContext(std::string name)
00020         : RTT::TaskContext(name, PreOperational),
00021           receiver("TimerIn")
00022     {
00023         ports()->addEventPort( receiver );
00024     }
00025 
00026     bool configureHook()
00027     {
00028         if ( receiver.connected() )
00029             log(Info) << this->getName() <<" starts listening for timeout events." << endlog();
00030         return receiver.connected();
00031     }
00032 
00033     void updateHook()
00034     {
00035         os::Timer::TimerId id;
00036         if (receiver.read(id) == NewData)
00037             log(Info) << this->getName() <<" detects timeout for timer " << id << endlog();
00038     }
00039 };
00040 
00041 int ORO_main( int argc, char** argv)
00042 {
00043     // Set log level more verbose than default,
00044     // such that we can see output :
00045     if ( RTT::Logger::log().getLogLevel() < RTT::Logger::Info ) {
00046         RTT::Logger::log().setLogLevel( RTT::Logger::Info );
00047         log(Info) << argv[0]
00048                       << " manually raises LogLevel to 'Info' (5). See also file 'orocos.log'."<<endlog();
00049     }
00050 
00051 
00052     TimerComponent tcomp("Timer");
00053     tcomp.setActivity( new RTT::Activity(ORO_SCHED_RT, os::HighestPriority, 0.0) );
00054 
00055     TestTaskContext gtc("Peer");
00056     gtc.setActivity( new RTT::Activity(ORO_SCHED_RT, os::HighestPriority, 0.1) );
00057 
00058     gtc.ports()->getPort("TimerIn")->connectTo( tcomp.ports()->getPort("timeout"));
00059 
00060     TaskBrowser tb( &gtc );
00061 
00062     gtc.configure();
00063     gtc.start();
00064     gtc.addPeer( &tcomp );
00065     tcomp.configure();
00066     tcomp.start();
00067 
00068     cout <<endl<< "  This demo allows testing the TimerComponent." << endl;
00069     cout << "  Use 'Timer.arm(0, 1.5)' to arm timer '0' to end over 1.5 seconds. " <<endl;
00070     cout << "  32 timers are initially available (0..31)." <<endl;
00071     cout << "  Other methods (type 'this') are available as well."<<endl;
00072 
00073     tb.loop();
00074 
00075     tcomp.stop();
00076     gtc.stop();
00077 
00078     return 0;
00079 }
00080 


ocl
Author(s): OCL Development Team
autogenerated on Sat Jun 8 2019 18:48:54