[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