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


orogen
Author(s): Sylvain Joyeux/sylvain.joyeux@m4x.org
autogenerated on Mon Oct 6 2014 03:17:29