[openrtm-commit:01715] r2704 - in branches/RELENG_1_1/OpenRTM-aist: . etc src/lib/rtm

openrtm @ openrtm.org openrtm @ openrtm.org
2016年 2月 17日 (水) 18:01:25 JST


Author: kawauchi
Date: 2016-02-17 18:01:25 +0900 (Wed, 17 Feb 2016)
New Revision: 2704

Modified:
   branches/RELENG_1_1/OpenRTM-aist/
   branches/RELENG_1_1/OpenRTM-aist/etc/rtc.conf.sample
   branches/RELENG_1_1/OpenRTM-aist/src/lib/rtm/Manager.cpp
Log:
[merge] r2623,2644 have been merged from trunk.


Property changes on: branches/RELENG_1_1/OpenRTM-aist
___________________________________________________________________
Modified: svn:mergeinfo
   - /tags/RELEASE_1_1_0/OpenRTM-aist:2364-2372
/tags/RELEASE_1_1_0_RC2/OpenRTM-aist:2173
/trunk/OpenRTM-aist:2154-2172,2174-2176,2180,2183-2208,2213,2328,2346,2381-2383,2389-2393,2397-2398,2400-2401,2409,2411-2412,2512-2513,2515-2516,2522-2525,2530-2531,2534-2539,2542-2543,2545-2546,2548-2566,2568-2574,2592,2605,2610,2626,2648,2652-2653,2670,2677-2678,2681-2682,2684-2687,2689-2692,2696-2697,2700
   + /tags/RELEASE_1_1_0/OpenRTM-aist:2364-2372
/tags/RELEASE_1_1_0_RC2/OpenRTM-aist:2173
/trunk/OpenRTM-aist:2154-2172,2174-2176,2180,2183-2208,2213,2328,2346,2381-2383,2389-2393,2397-2398,2400-2401,2409,2411-2412,2512-2513,2515-2516,2522-2525,2530-2531,2534-2539,2542-2543,2545-2546,2548-2566,2568-2574,2592,2605,2610,2623,2626,2644,2648,2652-2653,2670,2677-2678,2681-2682,2684-2687,2689-2692,2696-2697,2700

Modified: branches/RELENG_1_1/OpenRTM-aist/etc/rtc.conf.sample
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist/etc/rtc.conf.sample	2016-02-17 07:15:56 UTC (rev 2703)
+++ branches/RELENG_1_1/OpenRTM-aist/etc/rtc.conf.sample	2016-02-17 09:01:25 UTC (rev 2704)
@@ -280,6 +280,32 @@
 manager.components.precreate: 
 
 #
+# Advance connection creation
+#
+# This option specifies connections to be created in advance before
+# starting the manager's event-loop. The target components and ports
+# must be created previously by manager.components.precreate optinos.
+#
+# Example:
+# manager.components.preconnect: ConsoleIn.out:ConsoleOut.in(dataflow_type=push,interface_type=corba_cdr)
+# if no parenthis parts are included, dataflow_type=push,interface_type=corba_cdr
+#
+manager.components.preconnect: 
+
+#
+# Advance component activation
+#
+# This option specifies components' names (module name) to be
+# activated in advance before starting the manager's event-loop. The
+# target components should be created previously by
+# manager.components.precreate optinos.
+#
+# Example:
+# manager.components.preactivate: ConsoleIn0, ConsoleOut0
+#
+manager.components.preactivate:
+
+#
 # Loading local service modules
 #
 # Local service mechanisms are provided for services provided among

Modified: branches/RELENG_1_1/OpenRTM-aist/src/lib/rtm/Manager.cpp
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist/src/lib/rtm/Manager.cpp	2016-02-17 07:15:56 UTC (rev 2703)
+++ branches/RELENG_1_1/OpenRTM-aist/src/lib/rtm/Manager.cpp	2016-02-17 09:01:25 UTC (rev 2704)
@@ -319,13 +319,122 @@
         m_initProc(this);
       }
 
+    RTC_TRACE(("Components pre-creation: %s",
+               m_config["manager.components.precreate"].c_str()));
     std::vector<std::string> comp;
     comp = coil::split(m_config["manager.components.precreate"], ",");
     for (int i(0), len(comp.size()); i < len; ++i)
       {
-	this->createComponent(comp[i].c_str());
+        this->createComponent(comp[i].c_str());
       }
 
+    { // pre-connection
+      RTC_TRACE(("Connection pre-creation: %s",
+                 m_config["manager.components.preconnect"].c_str()));
+      std::vector<std::string> connectors;
+      connectors = coil::split(m_config["manager.components.preconnect"], ",");
+      for (int i(0), len(connectors.size()); i < len; ++i)
+        {
+          // ConsoleIn.out:Console.in(dataflow_type=push,....)
+          coil::vstring conn_prop = coil::split(connectors[i], "(");
+          coil::replaceString(conn_prop[1], ")", "");
+          coil::vstring comp_ports;
+          comp_ports = coil::split(conn_prop[0], ":");
+          if (comp_ports.size() != 2)
+            {
+              RTC_ERROR(("Invalid format for pre-connection."));
+              RTC_ERROR(("Format must be Comp0.port0:Comp1.port1"));
+              continue;
+            }
+          std::string comp0_name = coil::split(comp_ports[0], ".")[0];
+          std::string comp1_name = coil::split(comp_ports[1], ".")[0];
+          RTObject_impl* comp0 = getComponent(comp0_name.c_str());
+          RTObject_impl* comp1 = getComponent(comp1_name.c_str());
+          if (comp0 == NULL)
+            { RTC_ERROR(("%s not found.", comp0_name.c_str())); continue; }
+          if (comp1 == NULL)
+            { RTC_ERROR(("%s not found.", comp1_name.c_str())); continue; }
+          std::string port0 = comp_ports[0];
+          std::string port1 = comp_ports[1];
+          
+          PortServiceList_var ports0 = comp0->get_ports();
+          PortServiceList_var ports1 = comp1->get_ports();
+          RTC_DEBUG(("%s has %d ports.", comp0_name.c_str(), ports0->length()));
+          RTC_DEBUG(("%s has %d ports.", comp1_name.c_str(), ports1->length()));
+          
+          PortService_var port0_var;
+          for (size_t p(0); p < ports0->length(); ++p)
+            {
+              PortProfile_var pp = ports0[p]->get_port_profile();
+              std::string s(CORBA::string_dup(pp->name));
+              if (comp_ports[0] == s)
+                {
+                  RTC_DEBUG(("port %s found: ", comp_ports[0].c_str()));
+                  port0_var = ports0[p];
+                }
+            }
+          PortService_var port1_var;
+          for (size_t p(0); p < ports1->length(); ++p)
+            {
+              PortProfile_var pp = ports1[p]->get_port_profile();
+              std::string s(CORBA::string_dup(pp->name));
+              if (port1 == s)
+                {
+                  RTC_DEBUG(("port %s found: ", comp_ports[1].c_str()));
+                  port1_var = ports1[p];
+                }
+            }
+          if (CORBA::is_nil(port0_var))
+            {
+              RTC_ERROR(("port0 %s is nil obj", comp_ports[0].c_str()));
+              continue;
+            }
+          if (CORBA::is_nil(port1_var))
+            {
+              RTC_ERROR(("port1 %s is nil obj", comp_ports[1].c_str()));
+              continue;
+            }
+          ConnectorProfile conn_prof;
+          std::string prof_name;
+          conn_prof.name = CORBA::string_dup(connectors[i].c_str());
+          conn_prof.connector_id = CORBA::string_dup("");
+          conn_prof.ports.length(2);
+          conn_prof.ports[0] = port0_var;
+          conn_prof.ports[1] = port1_var;
+          coil::Properties prop;
+          prop["dataport.dataflow_type"] = "push";
+          prop["dataport.interface_type"] = "corba_cdr";
+          coil::vstring opt_props = coil::split(conn_prop[1], "&");
+          for (size_t o(0); o < opt_props.size(); ++o)
+            {
+              coil::vstring temp = coil::split(opt_props[o], "=");
+              prop["dataport." + temp[0]] = temp[1];
+            }
+          NVUtil::copyFromProperties(conn_prof.properties, prop);
+          if (RTC::RTC_OK != port0_var->connect(conn_prof))
+            {
+              RTC_ERROR(("Connection error: %s",
+                         connectors[i].c_str()));
+            }
+        }
+    } // end of pre-connection
+
+    { // pre-activation
+      RTC_TRACE(("Components pre-activation: %s",
+                 m_config["manager.components.preactivation"].c_str()));
+      std::vector<std::string> comps;
+      comps = coil::split(m_config["manager.components.preactivation"],
+                               ",");
+      for (int i(0), len(comps.size()); i < len; ++i)
+        {
+          RTObject_impl* comp = getComponent(comps[i].c_str());
+          if (comp == NULL)
+            { RTC_ERROR(("%s not found.", comps[i].c_str())); continue; }
+
+          ExecutionContextList_var ecs = comp->get_owned_contexts();
+          ecs[0]->activate_component(comp->getObjRef());
+        }
+    } // end of pre-activation
     return true;
   }
   



More information about the openrtm-commit mailing list