OrocosComponentLibrary
2.7.0
|
00001 00006 #include <rtt/TaskContext.hpp> 00007 #include <rtt/Logger.hpp> 00008 #include <rtt/Property.hpp> 00009 #include <rtt/Attribute.hpp> 00010 #include <rtt/Operation.hpp> 00011 #include <rtt/Port.hpp> 00012 #include <rtt/Activity.hpp> 00013 00014 #include <ocl/OCL.hpp> 00015 00016 using namespace std; 00017 using namespace RTT; 00018 using namespace RTT::detail; // workaround in 2.0 transition phase. 00019 using namespace Orocos; 00020 00021 namespace OCL 00022 { 00023 class Testcomp : public RTT::TaskContext 00024 { 00025 protected: 00026 RTT::Property<std::string> property; 00027 std::string attribute; 00028 std::string constant; 00029 00030 RTT::OutputPort<std::string> outport; 00031 RTT::InputPort<std::string> bufferport; 00032 00033 void null_0() { 00034 log(Warning) << "in: void null_0" << endlog(); 00035 } 00036 00037 std::string op_0() { 00038 log(Warning) << "in: std::string op_0" << endlog(); 00039 return "inside operation_0"; 00040 } 00041 00042 bool op_1(std::string s) { 00043 log(Warning) << "in: bool op_1(std::string s) " << s << endlog(); 00044 return true; 00045 } 00046 00047 double op_2(std::string s, double d) { 00048 log(Warning) << "in: double op_2(std::string s, double d) " << s << d << endlog(); 00049 return d*2; 00050 } 00051 00052 void op_1_out(int &i) { 00053 log(Warning) << "in: void op_1_out(int &i) " << i << endlog(); 00054 i = i+1; 00055 return; 00056 } 00057 00058 void op_3_out(std::string &s, double &d, int &i) { 00059 log(Warning) << "in: void op_3_out(std::string &s, double &d, int &i) " << s << d << i << endlog(); 00060 s = s + "-this-string-has-a-tail"; 00061 d = d * 2; 00062 i = 4711; 00063 return; 00064 } 00065 00066 bool op_1_out_retval(int &i) { 00067 log(Warning) << "in: bool op_1_out_retval(int &i) " << i << endlog(); 00068 i = i + 1; 00069 return i%2; 00070 } 00071 00072 void throw_exception() 00073 { 00074 throw std::runtime_error("Alas, its time to go."); 00075 } 00076 00077 bool op1_uint8(unsigned char x) 00078 { 00079 if(x == 'x') 00080 return true; 00081 else 00082 return false; 00083 } 00084 00085 00086 void updateHook() { 00087 // log(Info) << "inside update_hook" << endlog(); 00088 } 00089 public: 00090 OperationCaller<bool(std::string)> print; 00091 00096 Testcomp(std::string name) : RTT::TaskContext(name), 00097 // Name, description, value 00098 property("the_property", "the_property Description", "Hello World"), 00099 attribute("Hello World"), 00100 constant("Hello World"), 00101 // Name, initial value 00102 outport("the_results",true), 00103 // Name, policy 00104 bufferport("the_buffer_port",ConnPolicy::buffer(13,ConnPolicy::LOCK_FREE,true) ) 00105 { 00106 00107 #if 0 00108 // New activity with period 0.01s and priority 0. 00109 this->setActivity( new Activity(0, 0.01) ); 00110 #endif 00111 // Check if all initialisation was ok: 00112 assert( property.ready() ); 00113 00114 // Now add it to the interface: 00115 this->properties()->addProperty( property); 00116 00117 this->addAttribute("the_attribute", attribute); 00118 this->addConstant("the_constant", constant); 00119 00120 this->ports()->addPort( outport ).doc("dummy test port"); 00121 this->ports()->addPort( bufferport ); 00122 00123 this->addOperation( "null_0", &Testcomp::null_0, this, OwnThread ).doc("'null_0' Description"); 00124 this->addOperation( "op_0_ct", &Testcomp::op_0, this, ClientThread ).doc("'op_0_ct', ClientThread variant"); 00125 this->addOperation( "op_0_ot", &Testcomp::op_0, this, ClientThread ).doc("'op_0_ot', OwnThread variant"); 00126 this->addOperation( "op_1", &Testcomp::op_1, this, OwnThread).doc("'op_1' Description").arg("mes", "just any string."); 00127 this->addOperation( "op_2", &Testcomp::op_2, this, OwnThread).doc("'op_2' Description").arg("mes", "just any string.").arg("double", "just any double"); 00128 this->addOperation( "op_1_out", &Testcomp::op_1_out, this, OwnThread).doc("'op_1_out' Description").arg("i", "any int"); 00129 this->addOperation( "op_3_out", &Testcomp::op_3_out, this, OwnThread).doc("'op_3_out' Description").arg("mes", "just any string.").arg("double", "just any double").arg("i", "just any int"); 00130 this->addOperation( "op_1_out_retval", &Testcomp::op_1_out_retval, this, OwnThread).doc("'op_1_out' Description").arg("i", "any int"); 00131 00132 this->addOperation( "op1_uint8", &Testcomp::op1_uint8, this, OwnThread).doc("'op1_uint8' Description").arg("x", "any char, try 'x'"); 00133 00134 this->addOperation( "throw", &Testcomp::throw_exception, this, ClientThread).doc("This operation throws an exception"); 00135 this->provides("printing") 00136 ->addOperation( "print", &Testcomp::op_1, 00137 this, OwnThread).doc("'op_1' Description").arg("mes", "just any string."); 00138 00139 this->requires("print_str")->addOperationCaller(print); 00140 00141 #if 0 00142 log(Info) << "**** Starting the 'Testcomp' component ****" <<endlog(); 00143 this->start(); 00144 #endif 00145 } 00146 }; 00147 } 00148 00149 #include "ocl/Component.hpp" 00150 ORO_CREATE_COMPONENT( OCL::Testcomp )