RTT::InputPort<T> &getReader(RTT::ConnPolicy const& policy) { if(!reader) { reader = dynamic_cast<RTT::InputPort<T> *>(port->antiClone()); RTT::TaskContext *clientTask = getClientTask(); clientTask->addPort(*reader); reader->connectTo(port, policy); } return *reader; };
// report a specific connection. bool Logger::reportPort(const std::string& component, const std::string& port ) { TaskContext* comp = this->getPeer(component); if ( !comp ) { log(Error) << "no such component " << component << endlog(); return false; } RTT::base::OutputPortInterface* writer = dynamic_cast<RTT::base::OutputPortInterface*>(comp->ports()->getPort(port)); if ( !writer ) { log(Error) << "component " << component << " does not have a port named " << port << ", or it is a read port" << endlog(); return false; } std::string portname(component + "." + port); RTT::base::PortInterface *pi = ports()->getPort(portname); if(pi) // we are already reporting this port { log(Info) << "port " << port << " of component " << component << " is already logged" << endlog(); return true; } // Create the corresponding read port RTT::base::InputPortInterface* reader = static_cast<RTT::base::InputPortInterface*>(writer->antiClone()); reader->setName(portname); writer->createBufferConnection(*reader, 25); return addLoggingPort(reader, portname); }