[openrtm-commit:03091] r3176 - in trunk/OpenRTM-aist: . src/lib/rtm src/lib/rtm/idl

openrtm @ openrtm.org openrtm @ openrtm.org
2018年 1月 21日 (日) 16:12:09 JST


Author: miyamoto
Date: 2018-01-21 16:12:09 +0900 (Sun, 21 Jan 2018)
New Revision: 3176

Added:
   trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPConsumer.cpp
   trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPConsumer.h
   trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPProvider.cpp
   trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPProvider.h
   trunk/OpenRTM-aist/src/lib/rtm/idl/DataPortUDP.idl
Modified:
   trunk/OpenRTM-aist/CMakeLists.txt
   trunk/OpenRTM-aist/src/lib/rtm/CMakeLists.txt
   trunk/OpenRTM-aist/src/lib/rtm/Manager.h
   trunk/OpenRTM-aist/src/lib/rtm/idl/CMakeLists.txt
Log:
[incompat, TAO] add DataPortUDP.idl

Modified: trunk/OpenRTM-aist/CMakeLists.txt
===================================================================
--- trunk/OpenRTM-aist/CMakeLists.txt	2018-01-21 05:39:30 UTC (rev 3175)
+++ trunk/OpenRTM-aist/CMakeLists.txt	2018-01-21 07:12:09 UTC (rev 3176)
@@ -200,15 +200,15 @@
 		SET(ORB_C_FLAGS_LIST ${ORB_C_FLAGS_LIST} -DACE_VXWORKS=0x690 -DACE_HAS_PTHREADS -DACE_HAS_AIO_CALLS -DACE_LACKS_ISBLANK)
 
 		set(ORB_LINK_DIR ${ORB_ROOT}/lib)
-		set(ORB_LIBRARIES   TAO_AnyTypeCode TAO_PortableServer TAO_Svc_Utils TAO_CosNaming   TAO_AnyTypeCode TAO_DynamicInterface TAO_PI TAO_Utils TAO_PortableServer TAO_DiffServPolicy TAO_DynamicInterface  TAO ACE)
+		set(ORB_LIBRARIES   TAO_AnyTypeCode TAO_PortableServer TAO_Svc_Utils TAO_CosNaming   TAO_AnyTypeCode TAO_DynamicInterface TAO_PI TAO_Utils TAO_PortableServer TAO_DiffServPolicy TAO_DynamicInterface TAO_Strategies TAO ACE)
 		set(ORB_INCLUDE_DIR ${ORB_ROOT} ${ORB_ROOT}/TAO ${ORB_ROOT}/TAO/orbsvcs)
 	elseif(UNIX)
 		set(ORB_LINK_DIR ${ORB_ROOT}/lib)
-		set(ORB_LIBRARIES ACE TAO TAO_AnyTypeCode TAO_PortableServer TAO_Svc_Utils TAO_CosNaming TAO_IORTable TAO_CodecFactory TAO_PI TAO_Utils)
+		set(ORB_LIBRARIES ACE TAO TAO_AnyTypeCode TAO_PortableServer TAO_Svc_Utils TAO_CosNaming TAO_IORTable TAO_CodecFactory TAO_PI TAO_Utils TAO_Strategies)
 		set(ORB_INCLUDE_DIR ${ORB_ROOT}/include)
 	elseif(MSVC)
 		set(ORB_LINK_DIR ${ORB_ROOT}/lib)
-		set(ORB_LIBRARIES optimized;ACE;optimized;TAO;optimized;TAO_AnyTypeCode;optimized;TAO_PortableServer;optimized;TAO_Svc_Utils;optimized;TAO_CosNaming;optimized;TAO_IORTable;optimized;TAO_CodecFactory;optimized;TAO_PI;optimized;TAO_Utils;debug;ACEd;debug;TAOd;debug;TAO_AnyTypeCoded;debug;TAO_PortableServerd;debug;TAO_Svc_Utilsd;debug;TAO_CosNamingd;debug;TAO_IORTabled;debug;TAO_CodecFactoryd;debug;TAO_PId;debug;TAO_Utilsd;iphlpapi)
+		set(ORB_LIBRARIES optimized;ACE;optimized;TAO;optimized;TAO_AnyTypeCode;optimized;TAO_PortableServer;optimized;TAO_Svc_Utils;optimized;TAO_CosNaming;optimized;TAO_IORTable;optimized;TAO_CodecFactory;optimized;TAO_PI;optimized;TAO_Utils;optimized;TAO_Strategies;debug;ACEd;debug;TAOd;debug;TAO_AnyTypeCoded;debug;TAO_PortableServerd;debug;TAO_Svc_Utilsd;debug;TAO_CosNamingd;debug;TAO_IORTabled;debug;TAO_CodecFactoryd;debug;TAO_PId;debug;TAO_Utilsd;debug;TAO_Strategiesd;iphlpapi)
 		set(ORB_INCLUDE_DIR ${ORB_ROOT} ${ORB_ROOT}/TAO ${ORB_ROOT}/TAO/orbsvcs)
 		SET(ORB_C_FLAGS_LIST ${ORB_C_FLAGS_LIST} -D_WINSOCKAPI_ -DWITH_ACE)
 	endif()

Modified: trunk/OpenRTM-aist/src/lib/rtm/CMakeLists.txt
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/CMakeLists.txt	2018-01-21 05:39:30 UTC (rev 3175)
+++ trunk/OpenRTM-aist/src/lib/rtm/CMakeLists.txt	2018-01-21 07:12:09 UTC (rev 3176)
@@ -332,6 +332,15 @@
 	${rtm_headers}
 )
 
+if(CORBA MATCHES "TAO")
+	set(rtm_srcs ${rtm_srcs} 
+		InPortCorbaCdrUDPConsumer.cpp
+		InPortCorbaCdrUDPConsumer.h
+		InPortCorbaCdrUDPProvider.cpp
+		InPortCorbaCdrUDPProvider.h
+	 )
+endif()
+
 if(VXWORKS)
 	set(rtm_headers ${rtm_headers} VxWorksRTExecutionContext.h)
 	set(rtm_srcs ${rtm_srcs} VxWorksRTExecutionContext.cpp)

Added: trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPConsumer.cpp
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPConsumer.cpp	                        (rev 0)
+++ trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPConsumer.cpp	2018-01-21 07:12:09 UTC (rev 3176)
@@ -0,0 +1,360 @@
+// -*- C++ -*-
+/*!
+ * @file  InPortCorbaCdrUDPConsumer.cpp
+ * @brief InPortCorbaCdrUDPConsumer class
+ * @date  $Date: 2018-01-15 03:08:03 $
+ * @author Nobuhiko Miyamoto <n-miyamoto at aist.go.jp>
+ *
+ * Copyright (C) 2018
+ *     Nobuhiko Miyamoto
+ *     Robot Innovation Research Center,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *
+ *     All rights reserved.
+ *
+ *
+ */
+
+#include <rtm/NVUtil.h>
+#include <rtm/InPortCorbaCdrUDPConsumer.h>
+#include <rtm/CORBA_IORUtil.h>
+
+namespace RTC
+{
+  /*!
+   * @if jp
+   * @brief コンストラクタ
+   * @else
+   * @brief Constructor
+   * @param buffer The buffer object that is attached to this Consumer
+   * @endif
+   */
+  InPortCorbaCdrUDPConsumer::InPortCorbaCdrUDPConsumer(void)
+    : rtclog("InPortCorbaCdrUDPConsumer")
+  {
+  }
+  
+  /*!
+   * @if jp
+   * @brief デストラクタ
+   * @else
+   * @brief Destructor
+   * @endif
+   */
+  InPortCorbaCdrUDPConsumer::~InPortCorbaCdrUDPConsumer(void)
+  {
+    RTC_PARANOID(("~InPortCorbaCdrUDPConsumer()"));
+  }
+
+  /*!
+   * @if jp
+   * @brief 設定初期化
+   * @else
+   * @brief Initializing configuration
+   * @endif
+   */
+  void InPortCorbaCdrUDPConsumer::init(coil::Properties& prop)
+  {
+    m_properties = prop;
+  }
+
+  /*!
+   * @if jp
+   * @brief バッファへのデータ書込
+   * @else
+   * @brief Write data into the buffer
+   * @endif
+   */
+  InPortConsumer::ReturnCode InPortCorbaCdrUDPConsumer::put(const cdrMemoryStream& data)
+  {
+    RTC_PARANOID(("put()"));
+
+#ifndef ORB_IS_RTORB
+#ifdef ORB_IS_ORBEXPRESS
+    cdrMemoryStream tmp_data;
+    tmp_data = data;
+    ::OpenRTM::CdrData tmp;
+    CORBA::ULong len = tmp_data.cdr.size_written();
+    tmp.length(len);
+    tmp_data.cdr.read_array_1((void*)tmp.get_buffer(), len);
+    //CORBA::Octet* to;
+    //cdrMemoryStream data_tmp = data;
+    //*static_cast<CORBA::Octet*>(to) = data_tmp.read_octet();
+    //::OpenRTM::CdrData tmp(data_tmp.size_written(), data_tmp.size_written(),
+    //                       to, 0);
+#elif defined(ORB_IS_TAO)
+	char *c = const_cast<char*>(data.cdr.buffer());
+	::OpenRTM::CdrData tmp(data.cdr.length(), data.cdr.length(),
+		reinterpret_cast<CORBA::Octet*>(c), 0);
+#else
+    ::OpenRTM::CdrData tmp(data.bufSize(), data.bufSize(),
+                           static_cast<CORBA::Octet*>(data.bufPtr()), 0);
+#endif
+#else // ORB_IS_RTORB
+    OpenRTM_CdrData *cdrdata_tmp = new OpenRTM_CdrData();
+    cdrdata_tmp->_buffer = 
+      (CORBA_octet *)RtORB_alloc(data.bufSize(), "InPortCorbaCdrComsumer::put");
+    memcpy(cdrdata_tmp->_buffer, data.bufPtr(), data.bufSize());
+    cdrdata_tmp->_length = cdrdata_tmp->_maximum= data.bufSize();
+    ::OpenRTM::CdrData tmp(cdrdata_tmp);
+#endif // ORB_IS_RTORB
+    try
+      {
+        // return code conversion
+        // (IDL)OpenRTM::DataPort::ReturnCode_t -> DataPortStatus
+		coil::TimeValue ts = coil::gettimeofday();
+		_ptr()->put(tmp);
+		coil::TimeValue te = coil::gettimeofday();
+		std::cout << (double)(te - ts) << std::endl;
+        return PORT_OK;
+      }
+    catch (...)
+      {
+        return CONNECTION_LOST;
+      }
+    return UNKNOWN_ERROR;
+  }
+  
+  /*!
+   * @if jp
+   * @brief InterfaceProfile情報を公開する
+   * @else
+   * @brief Publish InterfaceProfile information
+   * @endif
+   */
+  void InPortCorbaCdrUDPConsumer::
+  publishInterfaceProfile(SDOPackage::NVList& properties)
+  {
+    return;
+  }
+
+  /*!
+   * @if jp
+   * @brief データ送信通知への登録
+   * @else
+   * @brief Subscribe to the data sending notification
+   * @endif
+   */
+  bool InPortCorbaCdrUDPConsumer::
+  subscribeInterface(const SDOPackage::NVList& properties)
+  {
+    RTC_TRACE(("subscribeInterface()"));
+    RTC_DEBUG_STR((NVUtil::toString(properties)));
+    
+    // getting InPort's ref from IOR string
+    if (subscribeFromIor(properties)) { return true; }
+    
+    // getting InPort's ref from Object reference
+    if (subscribeFromRef(properties)) { return true; }
+    
+    return false;;
+  }
+  
+  /*!
+   * @if jp
+   * @brief データ送信通知からの登録解除
+   * @else
+   * @brief Unsubscribe the data send notification
+   * @endif
+   */
+  void InPortCorbaCdrUDPConsumer::
+  unsubscribeInterface(const SDOPackage::NVList& properties)
+  {
+    RTC_TRACE(("unsubscribeInterface()"));
+    RTC_DEBUG_STR((NVUtil::toString(properties)));
+    
+    if (unsubscribeFromIor(properties)) { return; }
+    unsubscribeFromRef(properties);
+  }
+  
+  //----------------------------------------------------------------------
+  // private functions
+
+  /*!
+   * @if jp
+   * @brief IOR文字列からオブジェクト参照を取得する
+   * @else
+   * @brief Getting object reference fromn IOR string
+   * @endif
+   */
+  bool InPortCorbaCdrUDPConsumer::
+  subscribeFromIor(const SDOPackage::NVList& properties)
+  {
+    RTC_TRACE(("subscribeFromIor()"));
+    
+    CORBA::Long index;
+    index = NVUtil::find_index(properties,
+                               "dataport.corba_cdr.inport_ior");
+    if (index < 0)
+      {
+        RTC_ERROR(("inport_ior not found"));
+        return false;
+      }
+    
+    const char* ior(0);
+    if (!(properties[index].value >>= ior))
+      {
+        RTC_ERROR(("inport_ior has no string"));
+        return false;
+      }
+    
+    CORBA::ORB_var orb = ::RTC::Manager::instance().getORB();
+
+    CORBA::Object_var obj = orb->string_to_object(ior);
+
+
+    
+    if (CORBA::is_nil(obj))
+      {
+        RTC_ERROR(("invalid IOR string has been passed"));
+        return false;
+      }
+    
+    if (!setObject(obj.in()))
+      {
+        RTC_WARN(("Setting object to consumer failed."));
+        return false;
+      }
+    return true;
+  }
+  
+  /*!
+   * @if jp
+   * @brief Anyから直接オブジェクト参照を取得する
+   * @else
+   * @brief Getting object reference fromn Any directry
+   * @endif
+   */
+  bool InPortCorbaCdrUDPConsumer::
+  subscribeFromRef(const SDOPackage::NVList& properties)
+  {
+    RTC_TRACE(("subscribeFromRef()"));
+    CORBA::Long index;
+    index = NVUtil::find_index(properties,
+                               "dataport.corba_cdr.inport_ref");
+    if (index < 0)
+      {
+        RTC_ERROR(("inport_ref not found"));
+        return false;
+      }
+    
+    CORBA::Object_var obj;
+#ifdef ORB_IS_ORBEXPRESS
+   if (!(properties[index].value >>= obj))
+#else
+    if (!(properties[index].value >>= CORBA::Any::to_object(obj.out())))
+#endif
+      {
+        RTC_ERROR(("prop[inport_ref] is not objref"));
+        return true;
+      }
+    
+    if (CORBA::is_nil(obj))
+      {
+        RTC_ERROR(("prop[inport_ref] is not objref"));
+        return false;
+      }
+    
+    if (!setObject(obj.in()))
+      {
+        RTC_ERROR(("Setting object to consumer failed."));
+        return false;
+      }
+    return true;
+  }
+  
+  /*!
+   * @if jp
+   * @brief 接続解除(IOR版)
+   * @else
+   * @brief ubsubscribing (IOR version)
+   * @endif
+   */
+  bool InPortCorbaCdrUDPConsumer::
+  unsubscribeFromIor(const SDOPackage::NVList& properties)
+  {
+    RTC_TRACE(("unsubscribeFromIor()"));
+    CORBA::Long index;
+    index = NVUtil::find_index(properties,
+                               "dataport.corba_cdr.inport_ior");
+    if (index < 0)
+      {
+        RTC_ERROR(("inport_ior not found"));
+        return false;
+      }
+    
+    const char* ior;
+    if (!(properties[index].value >>= ior))
+      {
+        RTC_ERROR(("prop[inport_ior] is not string"));
+        return false;
+      }
+    
+    CORBA::ORB_var orb = ::RTC::Manager::instance().getORB();
+    CORBA::Object_var var = orb->string_to_object(ior);
+    if (!(_ptr()->_is_equivalent(var)))
+      {
+        RTC_ERROR(("connector property inconsistency"));
+        return false;
+      }
+    
+    releaseObject();
+    return true;
+  }
+  
+  /*!
+   * @if jp
+   * @brief 接続解除(Object reference版)
+   * @else
+   * @brief ubsubscribing (Object reference version)
+   * @endif
+   */
+  bool InPortCorbaCdrUDPConsumer::
+  unsubscribeFromRef(const SDOPackage::NVList& properties)
+  {
+    RTC_TRACE(("unsubscribeFromRef()"));
+    CORBA::Long index;
+    index = NVUtil::find_index(properties,
+                               "dataport.corba_cdr.inport_ref");
+    if (index < 0) { return false; }
+    
+    CORBA::Object_var obj;
+#ifdef ORB_IS_ORBEXPRESS
+    if (!(properties[index].value >>= obj)) 
+#else
+    if (!(properties[index].value >>= CORBA::Any::to_object(obj.out()))) 
+#endif
+      {
+        return false;
+      }
+    
+    if (!(_ptr()->_is_equivalent(obj.in()))) { return false; }
+    
+    releaseObject();
+    return true;
+  }
+
+
+  
+};     // namespace RTC
+
+extern "C"
+{ 
+  /*!
+   * @if jp
+   * @brief モジュール初期化関数
+   * @else
+   * @brief Module initialization
+   * @endif
+   */
+  void InPortCorbaCdrUDPConsumerInit(void)
+  {
+    RTC::InPortConsumerFactory& factory(RTC::InPortConsumerFactory::instance());
+    factory.addFactory("corba_cdr_udp",
+                       ::coil::Creator< ::RTC::InPortConsumer,
+                                        ::RTC::InPortCorbaCdrUDPConsumer>,
+                       ::coil::Destructor< ::RTC::InPortConsumer,
+                                           ::RTC::InPortCorbaCdrUDPConsumer>);
+  }
+};

Added: trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPConsumer.h
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPConsumer.h	                        (rev 0)
+++ trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPConsumer.h	2018-01-21 07:12:09 UTC (rev 3176)
@@ -0,0 +1,315 @@
+// -*- C++ -*-
+/*!
+ * @file  InPortCorbaCdrUDPConsumer.h
+ * @brief InPortCorbaCdrUDPConsumer class
+ * @date  $Date: 2018-01-15 03:08:03 $
+ * @author Nobuhiko Miyamoto <n-miyamoto at aist.go.jp>
+ *
+ * Copyright (C) 2018
+ *     Nobuhiko Miyamoto
+ *     Robot Innovation Research Center,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *
+ *     All rights reserved.
+ *
+ *
+ */
+
+#ifndef RTC_INPORTCORBACDRUDPCONSUMER_H
+#define RTC_INPORTCORBACDRUDPCONSUMER_H
+
+
+//#include <rtm/BufferBase.h>
+
+#include <rtm/idl/DataPortUDPSkel.h>
+#include <rtm/CorbaConsumer.h>
+#include <rtm/InPortConsumer.h>
+#include <rtm/Manager.h>
+
+namespace RTC
+{
+  /*!
+   * @if jp
+   * @class InPortCorbaCdrUDPConsumer
+   * @brief InPortCorbaCdrUDPConsumer クラス
+   *
+   * InPortConsumer 
+   *
+   * データ転送に CORBA の OpenRTM::InPortCdr インターフェースを利用し
+   * た、push 型データフロー型を実現する InPort コンシューマクラス。
+   *
+   * @since 2.0.0
+   *
+   * @else
+   * @class InPortCorbaCdrUDPConsumer
+   * @brief InPortCorbaCdrUDPConsumer class
+   *
+   * The InPort consumer class which uses the OpenRTM::InPortCdr
+   * interface in CORBA for data transfer and realizes a push-type
+   * dataflow.
+   *
+   * @since 2.0.0
+   *
+   * @endif
+   */
+  class InPortCorbaCdrUDPConsumer
+    : public InPortConsumer,
+      public CorbaConsumer< ::OpenRTM::InPortCdrUDP >
+  {
+  public:
+    DATAPORTSTATUS_ENUM
+    /*!
+     * @if jp
+     * @brief コンストラクタ
+     *
+     * コンストラクタ
+     *
+     * @param buffer 当該コンシューマに割り当てるバッファオブジェクト
+     *
+     * @else
+     * @brief Constructor
+     *
+     * Constructor
+     *
+     * @param buffer The buffer object that is attached to this Consumer
+     *
+     * @endif
+     */
+    InPortCorbaCdrUDPConsumer(void);
+    
+    /*!
+     * @if jp
+     * @brief デストラクタ
+     *
+     * デストラクタ
+     *
+     * @else
+     * @brief Destructor
+     *
+     * Destructor
+     *
+     * @endif
+     */
+    virtual ~InPortCorbaCdrUDPConsumer(void);
+
+    /*!
+     * @if jp
+     * @brief 設定初期化
+     *
+     * InPortConsumerの各種設定を行う。実装クラスでは、与えられた
+     * Propertiesから必要な情報を取得して各種設定を行う。この init() 関
+     * 数は、InPortProvider生成直後および、接続時にそれぞれ呼ばれる可
+     * 能性がある。したがって、この関数は複数回呼ばれることを想定して記
+     * 述されるべきである。
+     * 
+     * @param prop 設定情報
+     *
+     * @else
+     *
+     * @brief Initializing configuration
+     *
+     * This operation would be called to configure in initialization.
+     * In the concrete class, configuration should be performed
+     * getting appropriate information from the given Properties data.
+     * This function might be called right after instantiation and
+     * connection sequence respectivly.  Therefore, this function
+     * should be implemented assuming multiple call.
+     *
+     * @param prop Configuration information
+     *
+     * @endif
+     */
+    virtual void init(coil::Properties& prop);
+
+    /*!
+     * @if jp
+     * @brief 接続先へのデータ送信
+     *
+     * 接続先のポートへデータを送信するための純粋仮想関数。
+     * 
+     * この関数は、以下のリターンコードを返す。
+     *
+     * - PORT_OK:       正常終了。
+     * - PORT_ERROR:    データ送信の過程で何らかのエラーが発生した。
+     * - SEND_FULL:     データを送信したが、相手側バッファがフルだった。
+     * - SEND_TIMEOUT:  データを送信したが、相手側バッファがタイムアウトした。
+     * - UNKNOWN_ERROR: 原因不明のエラー
+     *
+     * @param data 送信するデータ
+     * @return リターンコード
+     *
+     * @else
+     * @brief Send data to the destination port
+     *
+     * Pure virtual function to send data to the destination port.
+     *
+     * This function might the following return codes
+     *
+     * - PORT_OK:       Normal return
+     * - PORT_ERROR:    Error occurred in data transfer process
+     * - SEND_FULL:     Buffer full although OutPort tried to send data
+     * - SEND_TIMEOUT:  Timeout although OutPort tried to send data
+     * - UNKNOWN_ERROR: Unknown error
+     *
+     * @endif
+     */
+    virtual ReturnCode put(const cdrMemoryStream& data);
+
+    /*!
+     * @if jp
+     * @brief InterfaceProfile情報を公開する
+     *
+     * InterfaceProfile情報を公開する。
+     * 引数で指定するプロパティ情報内の NameValue オブジェクトの
+     * dataport.interface_type 値を調べ、当該ポートに設定されている
+     * インターフェースタイプと一致する場合のみ情報を取得する。
+     *
+     * @param properties InterfaceProfile情報を受け取るプロパティ
+     *
+     * @else
+     * @brief Publish InterfaceProfile information
+     *
+     * Publish interfaceProfile information.
+     * Check the dataport.interface_type value of the NameValue object 
+     * specified by an argument in property information and get information
+     * only when the interface type of the specified port is matched.
+     *
+     * @param properties Properties to get InterfaceProfile information
+     *
+     * @endif
+     */
+    virtual void publishInterfaceProfile(SDOPackage::NVList& properties);
+
+    /*!
+     * @if jp
+     * @brief データ送信通知への登録
+     *
+     * 指定されたプロパティに基づいて、データ送出通知の受け取りに登録する。
+     *
+     * @param properties 登録情報
+     *
+     * @return 登録処理結果(登録成功:true、登録失敗:false)
+     *
+     * @else
+     * @brief Subscribe to the data sending notification
+     *
+     * Subscribe to the data sending notification based on specified 
+     * property information.
+     *
+     * @param properties Information for subscription
+     *
+     * @return Subscription result (Successful:true, Failed:false)
+     *
+     * @endif
+     */
+    virtual bool subscribeInterface(const SDOPackage::NVList& properties);
+    
+    /*!
+     * @if jp
+     * @brief データ送信通知からの登録解除
+     *
+     * データ送出通知の受け取りから登録を解除する。
+     *
+     * @param properties 登録解除情報
+     *
+     * @else
+     * @brief Unsubscribe the data send notification
+     *
+     * Unsubscribe the data send notification.
+     *
+     * @param properties Information for unsubscription
+     *
+     * @endif
+     */
+    virtual void unsubscribeInterface(const SDOPackage::NVList& properties);
+
+  private:
+    /*!
+     * @if jp
+     * @brief IOR文字列からオブジェクト参照を取得する
+     *
+     * @return true: 正常取得, false: 取得失敗
+     *
+     * @else
+     * @brief Getting object reference fromn IOR string
+     *
+     * @return true: succeeded, false: failed
+     *
+     * @endif
+     */
+    bool subscribeFromIor(const SDOPackage::NVList& properties);
+
+    /*!
+     * @if jp
+     * @brief Anyから直接オブジェクト参照を取得する
+     *
+     * @return true: 正常取得, false: 取得失敗
+     *
+     * @else
+     * @brief Getting object reference fromn Any directry
+     *
+     * @return true: succeeded, false: failed
+     *
+     * @endif
+     */
+    bool subscribeFromRef(const SDOPackage::NVList& properties);
+
+    /*!
+     * @if jp
+     * @brief 接続解除(IOR版)
+     *
+     * @return true: 正常取得, false: 取得失敗
+     *
+     * @else
+     * @brief ubsubscribing (IOR version)
+     *
+     * @return true: succeeded, false: failed
+     *
+     * @endif
+     */
+    bool unsubscribeFromIor(const SDOPackage::NVList& properties);
+
+    /*!
+     * @if jp
+     * @brief 接続解除(Object reference版)
+     *
+     * @return true: 正常取得, false: 取得失敗
+     *
+     * @else
+     * @brief ubsubscribing (Object reference version)
+     *
+     * @return true: succeeded, false: failed
+     *
+     * @endif
+     */
+    bool unsubscribeFromRef(const SDOPackage::NVList& properties);
+    
+  private:
+
+
+    mutable Logger rtclog;
+    coil::Properties m_properties;
+  };
+};     // namespace RTC
+
+extern "C"
+{
+  /*!
+   * @if jp
+   * @brief モジュール初期化関数
+   *
+   * InPortCorbaCdrUDPConsumer のファクトリを登録する初期化関数。
+   *
+   * @else
+   * @brief Module initialization
+   *
+   * This initialization function registers InPortCorbaCdrUDPConsumer's factory.
+   *
+   * @endif
+   */
+  void InPortCorbaCdrUDPConsumerInit(void);
+};
+
+#endif // RTC_INPORTCORBACDRUDPCONSUMER_H
+

Added: trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPProvider.cpp
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPProvider.cpp	                        (rev 0)
+++ trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPProvider.cpp	2018-01-21 07:12:09 UTC (rev 3176)
@@ -0,0 +1,222 @@
+// -*- C++ -*-
+/*!
+ * @file  InPortCorbaCdrUDPProvider.cpp
+ * @brief InPortCorbaCdrUDPProvider class
+ * @date  $Date: 2018-01-15 03:08:03 $
+ * @author Nobuhiko Miyamoto <n-miyamoto at aist.go.jp>
+ *
+ * Copyright (C) 2018
+ *     Nobuhiko Miyamoto
+ *     Robot Innovation Research Center,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *
+ *     All rights reserved.
+ *
+ *
+ */
+
+#include <rtm/InPortCorbaCdrUDPProvider.h>
+
+#ifdef WIN32
+#pragma warning( disable : 4290 )
+#endif
+
+namespace RTC
+{
+  /*!
+   * @if jp
+   * @brief コンストラクタ
+   * @else
+   * @brief Constructor
+   * @endif
+   */
+  InPortCorbaCdrUDPProvider::InPortCorbaCdrUDPProvider(void)
+   : m_buffer(0) 
+  {
+    // PortProfile setting
+    setInterfaceType("corba_cdr_udp");
+    
+    // ConnectorProfile setting
+
+#ifdef ORB_IS_OMNIORB
+    ::RTC::Manager::instance().theShortCutPOA()->activate_object(this);
+#endif
+	
+	m_objref = this->_this();
+    
+    // set InPort's reference
+    CORBA::ORB_var orb = ::RTC::Manager::instance().getORB();
+    CORBA::String_var ior = orb->object_to_string(m_objref.in());
+    CORBA_SeqUtil::
+      push_back(m_properties,
+                NVUtil::newNV("dataport.corba_cdr.inport_ior", ior.in()));
+    CORBA_SeqUtil::
+      push_back(m_properties,
+                NVUtil::newNV("dataport.corba_cdr.inport_ref", m_objref));
+  }
+  
+  /*!
+   * @if jp
+   * @brief デストラクタ
+   * @else
+   * @brief Destructor
+   * @endif
+   */
+  InPortCorbaCdrUDPProvider::~InPortCorbaCdrUDPProvider(void)
+  {
+    try
+      {
+        PortableServer::ObjectId_var oid;
+#ifdef ORB_IS_OMNIORB
+        oid = ::RTC::Manager::instance().theShortCutPOA()->servant_to_id(this);
+        ::RTC::Manager::instance().theShortCutPOA()->deactivate_object(oid);
+#else
+        oid = _default_POA()->servant_to_id(this);
+        _default_POA()->deactivate_object(oid);
+#endif
+      }
+    catch (PortableServer::POA::ServantNotActive &e)
+      {
+#ifdef ORB_IS_ORBEXPRESS
+        oe_out << e << oe_endl << oe_flush;
+#else
+        RTC_ERROR(("%s", e._name()));
+#endif
+      }
+    catch (PortableServer::POA::WrongPolicy &e)
+      {
+#ifdef ORB_IS_ORBEXPRESS
+        oe_out << e << oe_endl << oe_flush;
+#else
+        RTC_ERROR(("%s", e._name()));
+#endif
+      }
+    catch (...)
+      {
+        // never throws exception
+        RTC_ERROR(("Unknown exception caught."));
+      }
+  }
+
+  void InPortCorbaCdrUDPProvider::init(coil::Properties& prop)
+  {
+  }
+
+  /*!
+   * @if jp
+   * @brief バッファをセットする
+   * @else
+   * @brief Setting outside buffer's pointer
+   * @endif
+   */
+  void InPortCorbaCdrUDPProvider::
+  setBuffer(BufferBase<cdrMemoryStream>* buffer)
+  {
+    m_buffer = buffer;
+  }
+
+  /*!
+   * @if jp
+   * @brief リスナを設定する
+   * @else
+   * @brief Set the listener
+   * @endif
+   */
+  void InPortCorbaCdrUDPProvider::setListener(ConnectorInfo& info,
+                                           ConnectorListeners* listeners)
+  {
+    m_profile = info;
+    m_listeners = listeners;
+  }
+
+  /*!
+   * @if jp
+   * @brief Connectorを設定する。
+   * @else
+   * @brief set Connector
+   * @endif
+   */
+  void InPortCorbaCdrUDPProvider::setConnector(InPortConnector* connector)
+  {
+    m_connector = connector;
+  }
+
+  /*!
+   * @if jp
+   * @brief バッファにデータを書き込む
+   * @else
+   * @brief Write data into the buffer
+   * @endif
+   */
+  void
+  InPortCorbaCdrUDPProvider::put(const ::OpenRTM::CdrData& data)
+    throw (CORBA::SystemException)
+  {
+    RTC_PARANOID(("InPortCorbaCdrUDPProvider::put()"));
+
+    if (m_buffer == 0)
+      {
+        cdrMemoryStream cdr;
+#ifdef ORB_IS_ORBEXPRESS
+        cdr.cdr.write_array_1(data.get_buffer(), data.length());
+#elif defined(ORB_IS_TAO)
+        cdr.cdr.write_octet_array(data.get_buffer(), data.length());
+#else
+        cdr.put_octet_array(&(data[0]), data.length());
+#endif
+
+        onReceiverError(cdr);
+        return;
+      }
+
+    RTC_PARANOID(("received data size: %d", data.length()))
+    cdrMemoryStream cdr;
+    // set endian type
+    bool endian_type = m_connector->isLittleEndian();
+    RTC_TRACE(("connector endian: %s", endian_type ? "little":"big"));
+
+#ifdef ORB_IS_ORBEXPRESS
+    cdr.is_little_endian(endian_type);
+    cdr.write_array_1(data.get_buffer(), data.length());
+    RTC_PARANOID(("converted CDR data size: %d", cdr.size_written()));
+#elif defined(ORB_IS_TAO)
+    //cdr.setByteSwapFlag(endian_type);
+    cdr.cdr.write_octet_array(data.get_buffer(), data.length());
+    RTC_PARANOID(("converted CDR data size: %d", cdr.cdr.length()));
+#else
+    cdr.setByteSwapFlag(endian_type);
+    cdr.put_octet_array(&(data[0]), data.length());
+    RTC_PARANOID(("converted CDR data size: %d", cdr.bufSize()));
+#endif
+
+
+    onReceived(cdr);
+    m_buffer->write(cdr);
+
+    
+  }
+
+
+};     // namespace RTC
+
+
+extern "C"
+{
+  /*!
+   * @if jp
+   * @brief モジュール初期化関数
+   * @else
+   * @brief Module initialization
+   * @endif
+   */
+  void InPortCorbaCdrUDPProviderInit(void)
+  {
+    RTC::InPortProviderFactory& factory(RTC::InPortProviderFactory::instance());
+    factory.addFactory("corba_cdr_udp",
+                       ::coil::Creator< ::RTC::InPortProvider,
+                                        ::RTC::InPortCorbaCdrUDPProvider>,
+                       ::coil::Destructor< ::RTC::InPortProvider,
+                                           ::RTC::InPortCorbaCdrUDPProvider>);
+  }
+};

Added: trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPProvider.h
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPProvider.h	                        (rev 0)
+++ trunk/OpenRTM-aist/src/lib/rtm/InPortCorbaCdrUDPProvider.h	2018-01-21 07:12:09 UTC (rev 3176)
@@ -0,0 +1,402 @@
+// -*- C++ -*-
+/*!
+ * @file  InPortCorbaCdrUDPProvider.h
+ * @brief InPortCorbaCdrUDPProvider class
+ * @date  $Date: 2018-01-15 03:08:03 $
+ * @author Nobuhiko Miyamoto <n-miyamoto at aist.go.jp>
+ *
+ * Copyright (C) 2018
+ *     Nobuhiko Miyamoto
+ *     Robot Innovation Research Center,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *
+ *     All rights reserved.
+ *
+ *
+ */
+
+#ifndef RTC_INPORTCORBACDRUDPPROVIDER_H
+#define RTC_INPORTCORBACDRUDPPROVIDER_H
+
+#include <rtm/idl/DataPortUDPSkel.h>
+#include <rtm/BufferBase.h>
+#include <rtm/InPortProvider.h>
+#include <rtm/CORBA_SeqUtil.h>
+#include <rtm/Manager.h>
+#include <rtm/ConnectorListener.h>
+#include <rtm/ConnectorBase.h>
+
+#ifdef WIN32
+#pragma warning( disable : 4290 )
+#endif
+
+namespace RTC
+{
+  /*!
+   * @if jp
+   * @class InPortCorbaCdrUDPProvider
+   * @brief InPortCorbaCdrUDPProvider クラス
+   *
+   * InPortProvider 
+   *
+   * データ転送に CORBA の OpenRTM::InPortCdr インターフェースを利用し
+   * た、push 型データフロー型を実現する InPort プロバイダクラス。
+   *
+   * @since 0.4.0
+   *
+   * @else
+   * @class InPortCorbaCdrUDPProvider
+   * @brief InPortCorbaCdrUDPProvider class
+   *
+   * The InPort provider class which uses the OpenRTM::InPortCdr
+   * interface in CORBA for data transfer and realizes a push-type
+   * dataflow.
+   *
+   * @since 2.0.0
+   *
+   * @endif
+   */
+  class InPortCorbaCdrUDPProvider
+    : public InPortProvider,
+      public virtual POA_OpenRTM::InPortCdrUDP,
+      public virtual PortableServer::RefCountServantBase
+  {
+  public:
+    /*!
+     * @if jp
+     * @brief コンストラクタ
+     *
+     * コンストラクタ
+     *
+     * @else
+     * @brief Constructor
+     *
+     * Constructor
+     *
+     * @endif
+     */
+    InPortCorbaCdrUDPProvider(void);
+    
+    /*!
+     * @if jp
+     * @brief デストラクタ
+     *
+     * デストラクタ
+     *
+     * @else
+     * @brief Destructor
+     *
+     * Destructor
+     *
+     * @endif
+     */
+    virtual ~InPortCorbaCdrUDPProvider(void);
+
+    /*!
+     * @if jp
+     * @brief 設定初期化
+     *
+     * InPortCorbaCdrUDPProvider の各種設定を行う。与えられた
+     * Propertiesから必要な情報を取得して各種設定を行う。この init() 関
+     * 数は、InPortProvider生成直後および、接続時にそれぞれ呼ばれる可
+     * 能性がある。したがって、この関数は複数回呼ばれることを想定して記
+     * 述されるべきである。
+     * 
+     * @param prop 設定情報
+     *
+     * @else
+     *
+     * @brief Initializing configuration
+     *
+     * This operation would be called to configure in initialization.
+     * In the concrete class, configuration should be performed
+     * getting appropriate information from the given Properties data.
+     * This function might be called right after instantiation and
+     * connection sequence respectivly.  Therefore, this function
+     * should be implemented assuming multiple call.
+     *
+     * @param prop Configuration information
+     *
+     * @endif
+     */
+    virtual void init(coil::Properties& prop);
+
+    /*!
+     * @if jp
+     * @brief バッファをセットする
+     *
+     * OutPortProvider がデータを取り出すバッファをセットする。
+     * すでにセットされたバッファがある場合、以前のバッファへの
+     * ポインタに対して上書きされる。
+     * OutPortProviderはバッファの所有権を仮定していないので、
+     * バッファの削除はユーザの責任で行わなければならない。
+     *
+     * @param buffer OutPortProviderがデータを取り出すバッファへのポインタ
+     *
+     * @else
+     * @brief Setting outside buffer's pointer
+     *
+     * A pointer to a buffer from which OutPortProvider retrieve data.
+     * If already buffer is set, previous buffer's pointer will be
+     * overwritten by the given pointer to a buffer.  Since
+     * OutPortProvider does not assume ownership of the buffer
+     * pointer, destructor of the buffer should be done by user.
+     * 
+     * @param buffer A pointer to a data buffer to be used by OutPortProvider
+     *
+     * @endif
+     */
+    virtual void setBuffer(BufferBase<cdrMemoryStream>* buffer);
+
+    /*!
+     * @if jp
+     * @brief リスナを設定する。
+     *
+     * InPort はデータ送信処理における各種イベントに対して特定のリスナ
+     * オブジェクトをコールするコールバック機構を提供する。詳細は
+     * ConnectorListener.h の ConnectorDataListener, ConnectorListener
+     * 等を参照のこと。InPortCorbaCdrUDPProvider では、以下のコールバック
+     * が提供される。
+     * 
+     * - ON_BUFFER_WRITE
+     * - ON_BUFFER_FULL
+     * - ON_BUFFER_WRITE_TIMEOUT
+     * - ON_BUFFER_OVERWRITE
+     * - ON_RECEIVED
+     * - ON_RECEIVER_FULL
+     * - ON_RECEIVER_FULL
+     * - ON_RECEIVER_TIMEOUT
+     * - ON_RECEIVER_ERROR
+     *
+     * @param info 接続情報
+     * @param listeners リスナオブジェクト
+     *
+     * @else
+     * @brief Set the listener. 
+     *
+     * InPort provides callback functionality that calls specific
+     * listener objects according to the events in the data publishing
+     * process. For details, see documentation of
+     * ConnectorDataListener class and ConnectorListener class in
+     * ConnectorListener.h. In this InPortCorbaCdrUDPProvider provides
+     * the following callbacks.
+     * 
+     * - ON_BUFFER_WRITE
+     * - ON_BUFFER_FULL
+     * - ON_BUFFER_WRITE_TIMEOUT
+     * - ON_BUFFER_OVERWRITE
+     * - ON_RECEIVED
+     * - ON_RECEIVER_FULL
+     * - ON_RECEIVER_FULL
+     * - ON_RECEIVER_TIMEOUT
+     * - ON_RECEIVER_ERROR
+     *
+     * @param info Connector information
+     * @param listeners Listener objects
+     *
+     * @endif
+     */
+    virtual void setListener(ConnectorInfo& info,
+                             ConnectorListeners* listeners);
+
+    /*!
+     * @if jp
+     * @brief Connectorを設定する。
+     *
+     * InPort は接続確立時に InPortConnector オブジェクトを生成し、生
+     * 成したオブジェクトのポインタと共にこの関数を呼び出す。所有権は
+     * InPort が保持するので InPortProvider は InPortConnector を削
+     * 除してはいけない。
+     *
+     * @param connector InPortConnector
+     *
+     * @else
+     * @brief set Connector
+     *
+     * InPort creates InPortConnector object when it establishes
+     * connection between InPort and InPort, and it calls this
+     * function with a pointer to the connector object. Since the
+     * InPort has the ownership of this connector, InPortProvider
+     * should not delete it.
+     *
+     * @param connector InPortConnector
+     *
+     * @endif
+     */
+    virtual void setConnector(InPortConnector* connector);
+
+    /*!
+     * @if jp
+     * @brief [CORBA interface] バッファにデータを書き込む
+     *
+     * 設定されたバッファにデータを書き込む。
+     *
+     * @param data 書込対象データ
+     *
+     * @else
+     * @brief [CORBA interface] Write data into the buffer
+     *
+     * Write data into the specified buffer.
+     *
+     * @param data The target data for writing
+     *
+     * @endif
+     */
+    virtual void put(const ::OpenRTM::CdrData& data)
+      throw (CORBA::SystemException);
+    
+  private:
+
+
+    
+    /*!
+     * @if jp
+     * @brief ON_BUFFER_WRITE のリスナへ通知する。 
+     * @param data cdrMemoryStream
+     * @else
+     * @brief Notify an ON_BUFFER_WRITE event to listeners
+     * @param data cdrMemoryStream
+     * @endif
+     */
+    inline void onBufferWrite(const cdrMemoryStream& data)
+    {
+      m_listeners->
+        connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
+    }
+
+    /*!
+     * @if jp
+     * @brief ON_BUFFER_FULL のリスナへ通知する。 
+     * @param data cdrMemoryStream
+     * @else
+     * @brief Notify an ON_BUFFER_FULL event to listeners
+     * @param data cdrMemoryStream
+     * @endif
+     */
+    inline void onBufferFull(const cdrMemoryStream& data)
+    {
+      m_listeners->
+        connectorData_[ON_BUFFER_FULL].notify(m_profile, data);
+    }
+
+    /*!
+     * @if jp
+     * @brief ON_BUFFER_WRITE_TIMEOUT のリスナへ通知する。 
+     * @param data cdrMemoryStream
+     * @else
+     * @brief Notify an ON_BUFFER_WRITE_TIMEOUT event to listeners
+     * @param data cdrMemoryStream
+     * @endif
+     */
+    inline void onBufferWriteTimeout(const cdrMemoryStream& data)
+    {
+      m_listeners->
+        connectorData_[ON_BUFFER_WRITE_TIMEOUT].notify(m_profile, data);
+    }
+
+    /*!
+     * @if jp
+     * @brief ON_BUFFER_WRITE_OVERWRITE のリスナへ通知する。 
+     * @param data cdrMemoryStream
+     * @else
+     * @brief Notify an ON_BUFFER_WRITE_OVERWRITE event to listeners
+     * @param data cdrMemoryStream
+     * @endif
+     */
+    inline void onBufferWriteOverwrite(const cdrMemoryStream& data)
+    {
+      m_listeners->
+        connectorData_[ON_BUFFER_OVERWRITE].notify(m_profile, data);
+    }
+
+    /*!
+     * @if jp
+     * @brief ON_RECEIVED のリスナへ通知する。 
+     * @param data cdrMemoryStream
+     * @else
+     * @brief Notify an ON_RECEIVED event to listeners
+     * @param data cdrMemoryStream
+     * @endif
+     */
+    inline void onReceived(const cdrMemoryStream& data)
+    {
+      m_listeners->
+        connectorData_[ON_RECEIVED].notify(m_profile, data);
+    }
+
+    /*!
+     * @if jp
+     * @brief ON_RECEIVER_FULL のリスナへ通知する。 
+     * @param data cdrMemoryStream
+     * @else
+     * @brief Notify an ON_RECEIVER_FULL event to listeners
+     * @param data cdrMemoryStream
+     * @endif
+     */
+    inline void onReceiverFull(const cdrMemoryStream& data)
+    {
+      m_listeners->
+        connectorData_[ON_RECEIVER_FULL].notify(m_profile, data);
+    }
+
+    /*!
+     * @if jp
+     * @brief ON_RECEIVER_TIMEOUT のリスナへ通知する。 
+     * @else
+     * @brief Notify an ON_RECEIVER_TIMEOUT event to listeners
+     * @endif
+     */
+    inline void onReceiverTimeout(const cdrMemoryStream& data)
+    {
+      m_listeners->
+        connectorData_[ON_RECEIVER_TIMEOUT].notify(m_profile, data);
+    }
+
+    /*!
+     * @if jp
+     * @brief ON_RECEIVER_ERRORのリスナへ通知する。 
+     * @else
+     * @Brief Notify an ON_RECEIVER_ERROR event to listeners
+     * @endif
+     */
+    inline void onReceiverError(const cdrMemoryStream& data)
+    {
+      m_listeners->
+        connectorData_[ON_RECEIVER_ERROR].notify(m_profile, data);
+    }
+
+  private:
+    CdrBufferBase* m_buffer;
+    ::OpenRTM::InPortCdrUDP_var m_objref;
+    ConnectorListeners* m_listeners;
+    ConnectorInfo m_profile;
+    InPortConnector* m_connector;
+
+  };  // class InPortCorCdrbaProvider
+};    // namespace RTC
+
+extern "C"
+{
+  /*!
+   * @if jp
+   * @brief モジュール初期化関数
+   *
+   * InPortCorbaCdrConsumer のファクトリを登録する初期化関数。
+   *
+   * @else
+   * @brief Module initialization
+   *
+   * This initialization function registers InPortCorbaCdrConsumer's factory.
+   *
+   * @endif
+   */
+  void InPortCorbaCdrUDPProviderInit(void);
+};
+
+#ifdef WIN32
+#pragma warning( default : 4290 )
+#endif
+
+#endif // RTC_INPORTCORBACDRUDPPROVIDER_H
+

Modified: trunk/OpenRTM-aist/src/lib/rtm/Manager.h
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/Manager.h	2018-01-21 05:39:30 UTC (rev 3175)
+++ trunk/OpenRTM-aist/src/lib/rtm/Manager.h	2018-01-21 07:12:09 UTC (rev 3176)
@@ -30,6 +30,11 @@
 #include <coil/Guard.h>
 #include <coil/Task.h>
 
+#ifdef ORB_IS_TAO
+#include <tao/Strategies/advanced_resource.h>
+#include <tao/IORTable/IORTable.h>
+#endif
+
 #include <rtm/Factory.h>
 #include <rtm/ECFactory.h>
 #include <rtm/ObjectManager.h>

Modified: trunk/OpenRTM-aist/src/lib/rtm/idl/CMakeLists.txt
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/idl/CMakeLists.txt	2018-01-21 05:39:30 UTC (rev 3175)
+++ trunk/OpenRTM-aist/src/lib/rtm/idl/CMakeLists.txt	2018-01-21 07:12:09 UTC (rev 3176)
@@ -62,6 +62,10 @@
 	)
 
 
+if(CORBA MATCHES "TAO")
+	set(idls ${idls} DataPortUDP)
+endif()
+
 foreach(idl ${idls})
 	idl_compile(${idl})
 endforeach(idl)

Added: trunk/OpenRTM-aist/src/lib/rtm/idl/DataPortUDP.idl
===================================================================
--- trunk/OpenRTM-aist/src/lib/rtm/idl/DataPortUDP.idl	                        (rev 0)
+++ trunk/OpenRTM-aist/src/lib/rtm/idl/DataPortUDP.idl	2018-01-21 07:12:09 UTC (rev 3176)
@@ -0,0 +1,39 @@
+// -*- IDL -*-
+/*!
+ * @file DataPortUDP.idl
+ * @brief DataPort interface definition
+ * @date $Date: 2018-01-15 15:40:14 $
+ * @author Nobuhiko Miyamoto <n-miyamoto at aist.go.jp>
+ *
+ * Copyright (C) 2018
+ *     Nobuhiko Miyamoto
+ *     Robot Innovation Research Center,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *
+ *     All rights reserved.
+ *
+ *
+ */
+
+#ifndef DataInPortUDP_idl
+#define DataInPortUDP_idl
+
+#ifdef TAO_IDL
+#include <tao/orb.idl>
+#endif
+
+#include "DataPort.idl"
+
+
+#pragma prefix "openrtm.aist.go.jp"
+
+module OpenRTM
+{
+
+  interface InPortCdrUDP
+  {
+    oneway void put(in CdrData data);
+  };
+};
+#endif



More information about the openrtm-commit mailing list