Go to the documentation of this file.00001
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