$search
00001 /* Generated from orogen/lib/orogen/templates/typekit/typelib/TransportPlugin.cpp */ 00002 00003 #include "Registration.hpp" 00004 #include "TransportPlugin.hpp" 00005 #include <rtt/typelib/TypelibMarshallerBase.hpp> 00006 #include <rtt/Logger.hpp> 00007 #include <rtt/types/TypekitPlugin.hpp> 00008 using namespace RTT; 00009 #ifdef HAS_ROSLIB 00010 #include <ros/package.h> 00011 #endif 00012 00013 #define TYPEKIT_PACKAGE_NAME_aux0(target) #target 00014 #define TYPEKIT_PACKAGE_NAME_aux(target) "<%= typekit.name %>-typekit-" TYPEKIT_PACKAGE_NAME_aux0(target) 00015 #define TYPEKIT_PACKAGE_NAME TYPEKIT_PACKAGE_NAME_aux(OROCOS_TARGET) 00016 00017 std::string orogen_typekits::<%= typekit.name %>TypelibTransportPlugin::getTypelibRegistryPath() 00018 { 00019 #ifdef HAS_ROSLIB 00020 00022 using namespace ros::package; 00023 try { 00024 bool all_good = true, found = false; 00025 std::string ppath = getPath( "<%= typekit.name %>" ); 00026 if ( !ppath.empty() ) { 00027 return ppath + "/typekit" + "/<%= typekit.name %>.tlb"; 00028 } else 00029 log(Debug) << "Not a ros package: " << "<%= typekit.name %>" << endlog(); 00030 } catch(...) { 00031 log(Debug) << "Not a ros package: " << "<%= typekit.name %>" << endlog(); 00032 } 00033 #endif 00034 return TYPEKIT_REGISTRY; 00035 } 00036 00037 std::string orogen_typekits::<%= typekit.name %>TypelibTransportPlugin::getTlbPath() const 00038 { 00039 return <%= typekit.name %>TypelibTransportPlugin::getTypelibRegistryPath(); 00040 } 00041 00042 orogen_typekits::<%= typekit.name %>TypelibTransportPlugin::<%= typekit.name %>TypelibTransportPlugin() 00043 : TypelibTransportPlugin("<%= typekit.name %>") {} 00044 00045 bool orogen_typekits::<%= typekit.name %>TypelibTransportPlugin::registerTransport(std::string type_name, RTT::types::TypeInfo* ti) 00046 { 00047 if (!m_registry) 00048 { 00049 if (!loadRegistry()) 00050 return false; 00051 } 00052 00053 if(ti->hasProtocol(orogen_transports::TYPELIB_MARSHALLER_ID)) 00054 return false; 00055 00056 <% first_type = true; 00057 typesets.interface_types.each do |type| 00058 names = [type.name] 00059 if aliases = typesets.aliases[type] 00060 names.concat(aliases) 00061 end 00062 if_cond = names.map { |n| "\"#{n}\" == type_name" }.join(" || ") 00063 %> 00064 <%= 'else ' unless first_type %>if (<%= if_cond %>) 00065 { 00066 try { 00067 ti->addProtocol(orogen_transports::TYPELIB_MARSHALLER_ID, 00068 <%= type.method_name %>_TypelibMarshaller(*m_registry)); 00069 } 00070 catch(std::runtime_error const& e) 00071 { 00072 log(Error) << "cannot register a typelib transport for " << type_name << endlog(); 00073 log(Error) << " the following error occured:" << endlog(); 00074 log(Error) << " " << e.what() << endlog(); 00075 log(Error) << " the registry can be found at " << TYPEKIT_REGISTRY << endlog(); 00076 return false; 00077 } 00078 return true; 00079 } 00080 <% first_type = false 00081 end %> 00082 return false; 00083 } 00084 00085 ORO_TYPEKIT_PLUGIN(orogen_typekits::<%= typekit.name %>TypelibTransportPlugin); 00086