RTT::base::InputPortInterface*  Task::createInputPort(::std::string const & port_name, ::std::string const & type_name){
	RTT::base::PortInterface *pi = getPort(port_name);

	if(pi){
			// Port exists. Returns success.
			log(Info) << "Port " << port_name << " is already registered." << endlog();
			return 0;
	}

	RTT::types::TypeInfo* type = getType(type_name);

	if (!type){
		return NULL;
	}

	/* Create input port */
	RTT::base::InputPortInterface *in_port = type->inputPort(port_name);
	if (!in_port)
	{
			log(Error) << "An error occurred during input port generation." << endlog();
			return NULL;
	}
	ports()->addEventPort(in_port->getName(), *(in_port) );

	return in_port;
}
Example #2
0
bool Logger::createLoggingPort(const std::string& portname, const std::string& typestr, std::vector<logger::StreamMetadata> const& metadata)
{
    RTT::types::TypeInfoRepository::shared_ptr ti = RTT::types::TypeInfoRepository::Instance();
    RTT::types::TypeInfo* type = ti->type(typestr);
    if (! type)
    {
	cerr << "cannot find " << typestr << " in the type info repository" << endl;
	return false;
    }
    
    RTT::base::PortInterface *pi = ports()->getPort(portname);
    if(pi) {
	cerr << "port with name " << portname << " already exists" << endl;
	return false;
    }

    RTT::base::InputPortInterface *ip= type->inputPort(portname);
    return addLoggingPort(ip, portname, metadata);
}