[openrtm-commit:01700] r644 - trunk/OpenRTM-aist-Python/OpenRTM_aist
openrtm @ openrtm.org
openrtm @ openrtm.org
2016年 2月 1日 (月) 19:22:57 JST
Author: miyamoto
Date: 2016-02-01 19:22:57 +0900 (Mon, 01 Feb 2016)
New Revision: 644
Added:
trunk/OpenRTM-aist-Python/OpenRTM_aist/CORBA_RTCUtil.py
Modified:
trunk/OpenRTM-aist-Python/OpenRTM_aist/__init__.py
Log:
[incompat,new_func,new_file,->RELENG_1_2] add CORBA_RTCUtil.py. refs #3400
Added: trunk/OpenRTM-aist-Python/OpenRTM_aist/CORBA_RTCUtil.py
===================================================================
--- trunk/OpenRTM-aist-Python/OpenRTM_aist/CORBA_RTCUtil.py (rev 0)
+++ trunk/OpenRTM-aist-Python/OpenRTM_aist/CORBA_RTCUtil.py 2016-02-01 10:22:57 UTC (rev 644)
@@ -0,0 +1,1248 @@
+#!/usr/bin/env python
+# -*- coding: euc-jp -*-
+
+##
+# @file CORBA_RTCUtil.py
+# @brief CORBA RTC utility
+# @date $Date: 2016/01/08 $
+# @author Nobuhiko Miyamoto
+#
+
+import OpenRTM_aist
+import CORBA
+import RTC
+import SDOPackage
+
+##
+# @if jp
+#
+# @brief コンポーネントのプロパティ取得
+#
+#
+# @param rtc RTコンポーネント
+# @return コンポーネントのプロパティ
+#
+# @else
+#
+# @brief
+# @param rtc
+# @return
+#
+# @endif
+# coil::Properties get_component_profile(const RTC::RTObject_ptr rtc)
+def get_component_profile(rtc):
+ prop = OpenRTM_aist.Properties()
+ if CORBA.is_nil(rtc):
+ return prop
+ prof = rtc.get_component_profile()
+ OpenRTM_aist.NVUtil.copyToProperties(prop, prof.properties)
+ return prop
+
+
+
+
+##
+# @if jp
+#
+# @brief コンポーネントが終了しているかを判定
+#
+#
+# @param rtc RTコンポーネント
+# @return True:終了済み False:生存
+#
+# @else
+#
+# @brief
+# @param rtc RTコンポーネント
+# @return
+#
+# @endif
+def is_existing(rtc):
+ try:
+ rtc._non_existent()
+ return False
+ except CORBA.SystemException, ex:
+ return True
+ return True
+
+
+##
+# @if jp
+#
+# @brief RTCがデフォルトの実行コンテキストでalive状態かを判定する
+#
+# @param rtc RTコンポーネント
+# @return True:alive状態
+#
+# @param
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def is_alive_in_default_ec(rtc):
+ ec = get_actual_ec(rtc)
+ if CORBA.is_nil(ec):
+ return False
+ return rtc.is_alive(ec)
+
+
+##
+# @if jp
+#
+# @brief RTコンポーネントに関連付けした実行コンテキストから指定したIDの実行コンテキストを取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 実行コンテキストのID
+# @return 実行コンテキストのオブジェクトリファレンス
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param ec_id
+# @return
+#
+# @endif
+# RTC::ExecutionContext_var get_actual_ec(const RTC::RTObject_ptr rtc,RTC::UniqueId ec_id = 0)
+def get_actual_ec(rtc, ec_id=0):
+ if ec_id < 0:
+ return RTC.ExecutionContext._nil
+ if CORBA.is_nil(rtc):
+ return RTC.ExecutionContext._nil
+ if ec_id < 1000:
+ eclist = rtc.get_owned_contexts()
+ if ec_id >= len(eclist):
+ return RTC.ExecutionContext._nil
+ if CORBA.is_nil(eclist[ec_id]):
+ return RTC.ExecutionContext._nil
+ return eclist[ec_id]
+ elif ec_id >= 1000:
+ pec_id = ec_id - 1000
+ eclist = rtc.get_participating_contexts()
+ if pec_id >= len(eclist):
+ return RTC.ExecutionContext._nil
+ if CORBA.is_nil(eclist[pec_id]):
+ return RTC.ExecutionContext._nil
+ return eclist[pec_id]
+ return RTC.ExecutionContext._nil
+
+
+
+##
+# @if jp
+#
+# @brief 対象のRTコンポーネントから指定した実行コンテキストのIDを取得する
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec 実行コンテキスト
+# @return 実行コンテキストのID
+# 指定した実行コンテキストがRTコンポーネントに関連付けられていなかった場合は-1を返す
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def get_ec_id(rtc, ec):
+ if CORBA.is_nil(rtc):
+ return -1
+
+ eclist_own = rtc.get_owned_contexts()
+
+ count = 0
+ for e in eclist_own:
+ if not CORBA.is_nil(e):
+ if e._is_equivalent(ec):
+ return count
+ count += 1
+ eclist_pec = rtc.get_participating_contexts()
+ count = 0
+ for e in eclist_pec:
+ if not CORBA.is_nil(e):
+ if e._is_equivalent(ec):
+ return count+1000
+ count += 1
+ return -1
+
+
+
+##
+# @if jp
+#
+# @brief RTCを指定した実行コンテキストでアクティベーションする
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 実行コンテキストのID
+# @return RTC、ECのオブジェクトリファレンスがnilの場合はBAD_PARAMETERを返す
+# nilではない場合はactivate_component関数の戻り値を返す。RTC_OKの場合はアクティベーションが成功
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param ec_id
+# @return
+#
+# @endif
+# RTC::ReturnCode_t activate(RTC::RTObject_ptr rtc, RTC::UniqueId ec_id = 0)
+def activate(rtc, ec_id=0):
+ if CORBA.is_nil(rtc):
+ return RTC.BAD_PARAMETER
+ ec = get_actual_ec(rtc, ec_id)
+ if CORBA.is_nil(ec):
+ return RTC.BAD_PARAMETER
+ return ec.activate_component(rtc)
+
+
+##
+# @if jp
+#
+# @brief RTCを指定した実行コンテキストで非アクティベーションする
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 実行コンテキストのID
+# @return RTC、ECのオブジェクトリファレンスがnilの場合はBAD_PARAMETERを返す
+# nilではない場合はdeactivate_component関数の戻り値を返す。RTC_OKの場合は非アクティベーションが成功
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param ec_id
+# @return
+#
+# @endif
+# RTC::ReturnCode_t deactivate(RTC::RTObject_ptr rtc, RTC::UniqueId ec_id = 0)
+def deactivate(rtc, ec_id=0):
+ if CORBA.is_nil(rtc):
+ return RTC.BAD_PARAMETER
+ ec = get_actual_ec(rtc, ec_id)
+ if CORBA.is_nil(ec):
+ return RTC.BAD_PARAMETER
+ return ec.deactivate_component(rtc)
+
+##
+# @if jp
+#
+# @brief RTCを指定した実行コンテキストでリセットする
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 実行コンテキストのID
+# @return RTC、ECのオブジェクトリファレンスがnilの場合はBAD_PARAMETERを返す
+# nilではない場合はdeactivate_component関数の戻り値を返す。RTC_OKの場合はリセットが成功
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param ec_id
+# @return
+#
+# @endif
+# RTC::ReturnCode_t reset(RTC::RTObject_ptr rtc, RTC::UniqueId ec_id = 0)
+def reset(rtc, ec_id=0):
+ if CORBA.is_nil(rtc):
+ return RTC.BAD_PARAMETER
+ ec = get_actual_ec(rtc, ec_id)
+ if CORBA.is_nil(ec):
+ return RTC.BAD_PARAMETER
+ return ec.reset_component(rtc)
+
+##
+# @if jp
+#
+# @brief 対象のRTコンポーネントの指定した実行コンテキストでの状態を取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 実行コンテキストのID
+# @param ret RTCの状態
+# @return rtc、ecがnilの場合はFalseを返す。
+# nilではない場合はret[0]に状態を代入してTrueを返す。
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param ec_id
+# @return
+#
+# @endif
+def get_state(rtc, ec_id=0, ret=[None]):
+ if CORBA.is_nil(rtc):
+ return False
+ ec = get_actual_ec(rtc, ec_id)
+ if CORBA.is_nil(ec):
+ return False
+ ret[0] = ec.get_component_state(rtc)
+ return True
+
+##
+# @if jp
+#
+# @brief 対象のRTコンポーネントの指定した実行コンテキストでINACTIVE状態かどうか判定
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 実行コンテキストのID
+# @return INACTIVE状態の時はTrue、それ以外はFalse
+# rtc、ecがnilの場合もFalseを返す
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param ec_id
+# @return
+#
+# @endif
+def is_in_inactive(rtc, ec_id=0):
+ ret = [None]
+ if get_state(rtc, ec_id, ret):
+ if ret[0] == RTC.INACTIVE_STATE:
+ return True
+ return False
+
+##
+# @if jp
+#
+# @brief 対象のRTコンポーネントの指定した実行コンテキストでACTIVE状態かどうか判定
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 実行コンテキストのID
+# @return ACTIVE状態の時はTrue、それ以外はFalse
+# rtc、ecがnilの場合もFalseを返す
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param ec_id
+# @return
+#
+# @endif
+def is_in_active(rtc, ec_id=0):
+ ret = [None]
+ if get_state(rtc, ec_id, ret):
+ if ret[0] == RTC.ACTIVE_STATE:
+ return True
+ return False
+
+##
+# @if jp
+#
+# @brief 対象のRTコンポーネントの指定した実行コンテキストでERROR状態かどうか判定
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 実行コンテキストのID
+# @return ERROR状態の時はTrue、それ以外はFalse
+# rtc、ecがnilの場合もFalseを返す
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param ec_id
+# @return
+#
+# @endif
+def is_in_error(rtc, ec_id=0):
+ ret = [None]
+ if get_state(rtc, ec_id, ret):
+ if ret[0] == RTC.ERROR_STATE:
+ return True
+ return False
+
+
+
+##
+# @if jp
+#
+# @brief RTCのデフォルトの実行コンテキストの実行周期を取得する
+#
+#
+# @param rtc RTコンポーネント
+# @return 実行周期
+#
+# @else
+#
+# @brief
+# @param ec
+# @return
+#
+# @endif
+def get_default_rate(rtc):
+ ec = get_actual_ec(rtc)
+ return ec.get_rate()
+
+
+##
+# @if jp
+#
+# @brief RTCのデフォルトの実行コンテキストの実行周期を設定する
+#
+#
+# @param rtc RTコンポーネント
+# @param rate 実行周期
+# @return set_rate関数の戻り値を返す。
+# RTC_OKで設定が成功
+#
+# @else
+#
+# @brief
+# @param ec
+#
+# @endif
+def set_default_rate(rtc, rate):
+ ec = get_actual_ec(rtc)
+ return ec.set_rate(rate)
+
+
+##
+# @if jp
+#
+# @brief RTCの指定IDの実行コンテキストの周期を設定
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 指定の実行コンテキストのID
+# @return 実行周期
+#
+# @else
+#
+# @brief
+# @param ec
+# @return
+#
+# @endif
+def get_current_rate(rtc, ec_id):
+ ec = get_actual_ec(rtc, ec_id)
+ return ec.get_rate()
+
+
+##
+# @if jp
+#
+# @brief RTCの指定IDの実行コンテキストの周期を取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @param ec_id 指定の実行コンテキストのID
+# @return set_rate関数の戻り値を返す。
+# RTC_OKで設定が成功
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def set_current_rate(rtc, ec_id, rate):
+ ec = get_actual_ec(rtc, ec_id)
+ return ec.set_rate(rate)
+
+
+##
+# @if jp
+#
+# @brief 対象のRTCのデフォルトの実行コンテキストに指定のRTCを関連付ける
+#
+#
+# @param localcomp 対象のRTコンポーネント
+# @param othercomp 実行コンテキストに関連付けるRTコンポーネント
+# @return ecの取得に失敗した場合はRTC_ERRORを返す
+# そうでない場合はaddComponent関数の戻り値を返す。RTC_OKで接続成功。
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def add_rtc_to_default_ec(localcomp, othercomp):
+ ec = get_actual_ec(localcomp)
+ if CORBA.is_nil(ec):
+ return RTC.RTC_ERROR
+ return ec.add_component(othercomp)
+
+
+##
+# @if jp
+#
+# @brief 対象のRTCのデフォルトの実行コンテキストの指定のRTCへの関連付けを解除する
+#
+#
+# @param localcomp 対象のRTコンポーネント
+# @param othercomp 実行コンテキストとの関連付けを解除するRTコンポーネント
+# @return ecの取得に失敗した場合はRTC_ERRORを返す
+# そうでない場合はremoveComponent関数の戻り値を返す。RTC_OKで接続成功。
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def remove_rtc_to_default_ec(localcomp, othercomp):
+ ec = get_actual_ec(localcomp)
+ if CORBA.is_nil(ec):
+ return RTC.RTC_ERROR
+ return ec.remove_component(othercomp)
+
+
+##
+# @if jp
+#
+# @brief RTCのデフォルトの実行コンテキストに参加しているRTCのリストを取得する
+# 実行コンテキストがnilの場合は空のリストを返す
+#
+#
+# @param rtc RTコンポーネント
+# @return RTCのリスト
+#
+# @else
+#
+# @brief
+# @param ec
+# @return
+#
+# @endif
+def get_participants_rtc(rtc):
+ ec = get_actual_ec(rtc)
+ if CORBA.is_nil(ec):
+ return []
+ prifile = ec.get_profile()
+ return prifile.participants
+
+
+##
+# @if jp
+#
+# @brief 指定したRTCの保持するポートの名前を取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @return ポート名のリスト
+#
+# @else
+#
+# @brief
+# @param rtc
+# @return
+#
+# @endif
+def get_port_names(rtc):
+ names = []
+ if CORBA.is_nil(rtc):
+ return names
+ ports = rtc.get_ports()
+ for p in ports:
+ pp = p.get_port_profile()
+ s = pp.name
+ names.append(s)
+ return names
+
+
+##
+# @if jp
+#
+# @brief 指定したRTCの保持するインポートの名前を取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @return ポート名のリスト
+#
+# @else
+#
+# @brief
+# @param rtc
+# @return
+#
+# @endif
+def get_inport_names(rtc):
+ names = []
+ if CORBA.is_nil(rtc):
+ return names
+
+ ports = rtc.get_ports()
+ for p in ports:
+ pp = p.get_port_profile()
+ prop = OpenRTM_aist.Properties()
+ OpenRTM_aist.NVUtil.copyToProperties(prop, pp.properties)
+ if prop.getProperty("port.port_type") == "DataInPort":
+ s = pp.name
+ names.append(s)
+ return names
+
+
+##
+# @if jp
+#
+# @brief 指定したRTCの保持するアウトポートの名前を取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @return ポート名のリスト
+#
+# @else
+#
+# @brief
+# @param rtc
+# @return
+#
+# @endif
+def get_outport_names(rtc):
+ names = []
+ if CORBA.is_nil(rtc):
+ return names
+
+ ports = rtc.get_ports()
+ for p in ports:
+ pp = p.get_port_profile()
+ prop = OpenRTM_aist.Properties()
+ OpenRTM_aist.NVUtil.copyToProperties(prop, pp.properties)
+ if prop.getProperty("port.port_type") == "DataOutPort":
+ s = pp.name
+ names.append(s)
+ return names
+
+
+
+##
+# @if jp
+#
+# @brief 指定したRTCの保持するサービスポートの名前を取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @return ポート名のリスト
+#
+# @else
+#
+# @brief
+# @param rtc
+# @return
+#
+# @endif
+def get_svcport_names(rtc):
+ names = []
+ if CORBA.is_nil(rtc):
+ return names
+
+ ports = rtc.get_ports()
+ for p in ports:
+ pp = p.get_port_profile()
+ prop = OpenRTM_aist.Properties()
+ OpenRTM_aist.NVUtil.copyToProperties(prop, pp.properties)
+ if prop.getProperty("port.port_type") == "CorbaPort":
+ s = pp.name
+ names.append(s)
+ return names
+
+
+##
+# @if jp
+#
+# @brief 対象のRTCから指定した名前のポートを取得
+#
+#
+# @param rtc RTコンポーネント
+# @param name ポート名
+# @return ポート
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param name
+# @return
+#
+# @endif
+#
+# RTC::PortService_var get_port_by_name(const RTC::RTObject_ptr rtc, std::string name)
+def get_port_by_name(rtc, name):
+ if CORBA.is_nil(rtc):
+ return RTC.PortService._nil
+ ports = rtc.get_ports()
+ for p in ports:
+ pp = p.get_port_profile()
+ s = pp.name
+
+ if name == s:
+ return p
+
+ return RTC.PortService._nil
+
+
+##
+# @if jp
+#
+# @brief 指定したポートの保持しているコネクタの名前のリストを取得
+#
+#
+# @param port 対象のポート
+# @return コネクタ名のリスト
+#
+# @else
+#
+# @brief
+# @param port
+# @return
+#
+# @endif
+def get_connector_names(port):
+ names = []
+ if CORBA.is_nil(port):
+ return names
+ conprof = port.get_connector_profiles()
+ for c in conprof:
+ names.append(c.name)
+ return names
+
+
+
+##
+# @if jp
+#
+# @brief 指定したポートの保持しているコネクタのIDのリストを取得
+#
+#
+# @param port 対象のポート
+# @return コネクタのIDのリスト
+#
+# @else
+#
+# @brief
+# @param port
+# @return
+#
+# @endif
+def get_connector_ids(port):
+ ids = []
+ if CORBA.is_nil(port):
+ return ids
+ conprof = port.get_connector_profiles()
+ for c in conprof:
+ ids.append(c.connector_id)
+ return ids
+
+
+##
+# @if jp
+#
+# @brief 指定したポートを接続するためのコネクタプロファイルを取得
+#
+#
+# @param name コネクタ名
+# @param prop_arg 設定
+# @param port0 対象のポート1
+# @param port1 対象のポート2
+# @return コネクタプロファイル
+#
+# @else
+#
+# @brief
+# @param name
+# @param prop_arg
+# @param port0
+# @param port1
+# @return
+#
+# @endif
+# RTC::ConnectorProfile_var create_connector(const std::string name,const coil::Properties prop_arg,const RTC::PortService_ptr port0,const RTC::PortService_ptr port1)
+def create_connector(name, prop_arg, port0, port1):
+ prop = prop_arg
+ conn_prof = RTC.ConnectorProfile(name, "", [port0, port1],[])
+
+
+
+ if not str(prop.getProperty("dataport.dataflow_type")):
+ prop.setProperty("dataport.dataflow_type","push")
+
+
+
+ if not str(prop.getProperty("dataport.interface_type")):
+ prop.setProperty("dataport.interface_type","corba_cdr")
+
+
+ conn_prof.properties = []
+ OpenRTM_aist.NVUtil.copyFromProperties(conn_prof.properties, prop)
+
+ return conn_prof
+
+
+
+
+
+##
+# @if jp
+#
+# @brief 指定したポート同士が接続されているかを判定
+#
+#
+# @param localport 対象のポート1
+# @param otherport 対象のポート2
+# @return True: 接続済み、False: 未接続
+#
+# @else
+#
+# @brief
+# @param name
+# @param prop_arg
+# @param port0
+# @param port1
+# @return
+#
+# @endif
+
+def already_connected(localport, otherport):
+ conprof = localport.get_connector_profiles()
+ for c in conprof:
+ for p in c.ports:
+ if p._is_equivalent(otherport):
+ return True
+
+ return False
+
+
+##
+# @if jp
+#
+# @brief 指定したポートを接続する
+#
+#
+# @param name コネクタ名
+# @param prop 設定
+# @param port0 対象のポート1
+# @param port1 対象のポート2
+# @return RTC、ECのオブジェクトリファレンスがnilの場合はBAD_PARAMETERを返す
+# nilではない場合はport0.connect関数の戻り値を返す。RTC_OKの場合は接続が成功
+#
+# @else
+#
+# @brief
+# @param name
+# @param prop
+# @param port0
+# @param port1
+# @return
+#
+# @endif
+# RTC::ReturnCode_t connect(const std::string name,const coil::Properties prop,const RTC::PortService_ptr port0,const RTC::PortService_ptr port1)
+def connect(name, prop, port0, port1):
+ if CORBA.is_nil(port0):
+ RTC.BAD_PARAMETER
+ if CORBA.is_nil(port1):
+ RTC.BAD_PARAMETER
+ if port0._is_equivalent(port1):
+ RTC.BAD_PARAMETER
+ cprof = create_connector(name, prop, port0, port1)
+ return port0.connect(cprof)[0]
+
+
+
+##
+# @if jp
+#
+# @brief 指定したポートと指定したリスト内のポート全てと接続する
+#
+#
+# @param name コネクタ名
+# @param prop 設定
+# @param port0 対象のポート
+# @param port1 対象のポートのリスト
+# @return 全ての接続が成功した場合はRTC_OKを返す。
+# connect関数がRTC_OK以外を返した場合はRTC_ERRORを返す。
+#
+#
+# @else
+#
+# @brief
+# @param name
+# @param prop
+# @param port0
+# @param port1
+# @return
+#
+# @endif
+# RTC::ReturnCode_t connect_multi(const std::string name,const coil::Properties prop,const RTC::PortService_ptr port,RTC::PortServiceList_var& target_ports)
+def connect_multi(name, prop, port, target_ports):
+ ret = RTC.RTC_OK
+
+ for p in target_ports:
+ if p._is_equivalent(port):
+ continue
+ if already_connected(port, p):
+ continue
+ if RTC.RTC_OK != connect(name, prop, port, p):
+ ret = RTC.RTC_ERROR
+
+ return ret
+
+
+##
+# @if jp
+# @class find_port
+# @brief ポートを名前から検索
+#
+# @else
+# @class find_port
+# @brief ポートを名前から検索
+#
+# @endif
+#
+class find_port:
+ ##
+ # @if jp
+ #
+ # @brief コンストラクタ
+ # 検索するポート名を指定する
+ #
+ #
+ # @param self
+ # @param name ポート名
+ #
+ # @else
+ #
+ # @brief
+ # @param self
+ # @param name
+ #
+ # @endif
+ # find_port(const std::string name)
+ def __init__(self, name):
+ self._name = name
+ ##
+ # @if jp
+ #
+ # @brief 対象のポートの名前と指定したポート名が一致するか判定
+ #
+ #
+ # @param self
+ # @param p 対象のポート
+ # @return True: 名前が一致、False: 名前が不一致
+ #
+ # @else
+ #
+ # @brief
+ # @param self
+ # @param p
+ # @return
+ #
+ # @endif
+ # bool operator()(RTC::PortService_var p)
+ def __call__(self, p):
+ prof = p.get_port_profile()
+ c = prof.name
+
+ return (self._name == c)
+
+##
+# @if jp
+#
+# @brief 対象のRTCの指定した名前のポートを接続する
+#
+#
+# @param name コネクタ名
+# @param prop 設定
+# @param rtc0 対象のRTCコンポーネント1
+# @param portName0 対象のポート名1
+# @param rtc1 対象のRTCコンポーネント2
+# @param portName1 対象のRTCコンポーネント2
+# @return RTC、ポートがnilの場合はBAD_PARAMETERを返す。
+# nilではない場合はport0.connect関数の戻り値を返す。RTC_OKの場合は接続が成功
+#
+# @else
+#
+# @brief
+# @param name
+# @param prop_arg
+# @param port0
+# @param port1
+#
+# @endif
+#
+# RTC::ReturnCode_t connect_by_name(std::string name, coil::Properties prop,RTC::RTObject_ptr rtc0,const std::string portName0,RTC::RTObject_ptr rtc1,const std::string portName1)
+def connect_by_name(name, prop, rtc0, portName0, rtc1, portName1):
+ if CORBA.is_nil(rtc0):
+ return RTC.BAD_PARAMETER
+ if CORBA.is_nil(rtc1):
+ return RTC.BAD_PARAMETER
+
+ port0 = get_port_by_name(rtc0, portName0)
+ if CORBA.is_nil(port0):
+ return RTC.BAD_PARAMETER
+
+ port1 = get_port_by_name(rtc1, portName1)
+ if CORBA.is_nil(port1):
+ return RTC.BAD_PARAMETER
+
+ return connect(name, prop, port0, port1)
+
+
+##
+# @if jp
+#
+# @brief 指定のコネクタを切断する
+#
+#
+# @param connector_prof コネクタプロファイル
+# @return コネクタプロファイルで保持しているポートのオブジェクトリファレンスがnilの場合はBAD_PARAMETERを返す
+# nilではない場合はports[0].disconnect関数の戻り値を返す。RTC_OKの場合は切断が成功
+#
+# @else
+#
+# @brief
+# @param connector_prof
+# @return
+#
+# @endif
+def disconnect(connector_prof):
+ ports = connector_prof.ports
+ return disconnect_by_connector_id(ports[0], connector_prof.connector_id)
+
+
+
+##
+# @if jp
+#
+# @brief 対象のポートで指定した名前のコネクタを切断
+#
+#
+# @param port 対象のポート
+# @param name コネクタ名
+# @return portがnilの場合はBAD_PARAMETERを返す
+# nilではない場合はdisconnect関数の戻り値を返す。RTC_OKの場合は切断が成功
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def disconnect_by_connector_name(port, name):
+ if CORBA.is_nil(port):
+ return RTC.BAD_PARAMETER
+ conprof = port.get_connector_profiles()
+ for c in conprof:
+ if c.name == name:
+ return disconnect(c)
+ return RTC.BAD_PARAMETER
+
+
+
+
+##
+# @if jp
+#
+# @brief 対象のポートで指定したIDのコネクタを切断
+#
+#
+# @param port 対象のポート
+# @param name コネクタID
+# @return portがnilの場合はBAD_PARAMETERを返す
+# nilではない場合はdisconnect関数の戻り値を返す。RTC_OKの場合は切断が成功
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def disconnect_by_connector_id(port, id):
+ if CORBA.is_nil(port):
+ return RTC.BAD_PARAMETER
+ return port.disconnect(id)
+
+
+##
+# @if jp
+#
+# @brief 対象ポートと接続しているポートで指定したポート名と一致した場合に切断
+#
+#
+# @param localport 対象のポート
+# @param othername 接続しているポート名
+# @return ポートがnilの場合、localportの名前とothernameが一致する場合、接続しているポートの名前でothernameと一致するものがない場合にBAD_PARAMETERを返す
+# 上記の条件に当てはまらない場合はdisconnect関数の戻り値を返す。RTC_OKの場合は切断が成功
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def disconnect_by_port_name(localport, othername):
+ if CORBA.is_nil(localport):
+ return RTC.BAD_PARAMETER
+ prof = localport.get_port_profile()
+ if prof.name == othername:
+ return RTC.BAD_PARAMETER
+
+ conprof = localport.get_connector_profiles()
+ for c in conprof:
+ for p in c.ports:
+ if not CORBA.is_nil(p):
+ pp = p.get_port_profile()
+ if pp.name == othername:
+ return disconnect(c)
+ return RTC.BAD_PARAMETER
+
+
+##
+# @if jp
+#
+# @brief 指定したRTコンポーネントのコンフィギュレーション取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @return rtcがnilの場合はNoneを返す。
+# nilではない場合はコンフィギュレーションを返す。
+#
+# @else
+#
+# @brief
+# @param
+# @return
+#
+# @endif
+def get_configuration(rtc):
+ if CORBA.is_nil(rtc):
+ return SDOPackage.Configuration._nil
+
+ return rtc.get_configuration()
+
+
+##
+# @if jp
+#
+# @brief 指定したコンフィギュレーションセット名、パラメータ名のコンフィギュレーションパラメータを取得
+#
+#
+# @param conf コンフィギュレーション
+# @param confset_name コンフィギュレーションセット名
+# @param value_name パラメータ名
+# @return パラメータ
+#
+# @else
+#
+# @brief
+# @param rtc
+# @param confset_name
+# @param value_name
+# @param ret
+# @return
+#
+# @endif
+def get_parameter_by_key(rtc, confset_name, value_name):
+ conf = rtc.get_configuration()
+
+
+ confset = conf.get_configuration_set(confset_name)
+ confData = confset.configuration_data
+ prop = OpenRTM_aist.Properties()
+ OpenRTM_aist.NVUtil.copyToProperties(prop, confData)
+ return prop.getProperty(value_name)
+
+
+
+
+##
+# @if jp
+#
+# @brief 対象のRTCのアクティブなコンフィギュレーションセット名を取得する
+#
+# @param rtc RTコンポーネント
+# @return コンフィギュレーションセット名
+# コンフィギュレーションの取得に失敗した場合は空の文字列を返す
+#
+# @param
+#
+# @else
+#
+# @brief
+# @param
+#
+# @endif
+def get_current_configuration_name(rtc):
+ conf = rtc.get_configuration()
+ confset = conf.get_active_configuration_set()
+ return confset.id
+
+##
+# @if jp
+#
+# @brief アクティブなコンフィギュレーションセットを取得
+#
+#
+# @param rtc 対象のRTコンポーネント
+# @return アクティブなコンフィギュレーションセット
+#
+# @else
+#
+# @brief
+# @param rtc
+# @return
+#
+# @endif
+def get_active_configuration(rtc):
+ conf = rtc.get_configuration()
+
+ confset = conf.get_active_configuration_set()
+ confData = confset.configuration_data
+ prop = OpenRTM_aist.Properties()
+ OpenRTM_aist.NVUtil.copyToProperties(prop, confData)
+ return prop
+
+
+
+
+
+##
+# @if jp
+#
+# @brief コンフィギュレーションパラメータを設定
+#
+#
+# @param confset_name コンフィギュレーションセット名
+# @param value_name パラメータ名
+# @param value パラメータ
+# @return True:設定に成功、False:設定に失敗
+#
+# @else
+#
+# @brief
+# @param confset_name
+# @param value_name
+# @param value
+# @return
+#
+# @endif
+def set_configuration(rtc, confset_name, value_name, value):
+ conf = rtc.get_configuration()
+
+ confset = conf.get_configuration_set(confset_name)
+ confData = confset.configuration_data
+ prop = OpenRTM_aist.Properties()
+ OpenRTM_aist.NVUtil.copyToProperties(prop, confData)
+ prop.setProperty(value_name,value)
+ OpenRTM_aist.NVUtil.copyFromProperties(confData,prop)
+ confset.configuration_data = confData
+ conf.set_configuration_set_values(confset)
+
+ conf.activate_configuration_set(confset_name)
+ return True
+
+
+
\ No newline at end of file
Modified: trunk/OpenRTM-aist-Python/OpenRTM_aist/__init__.py
===================================================================
--- trunk/OpenRTM-aist-Python/OpenRTM_aist/__init__.py 2016-02-01 08:37:55 UTC (rev 643)
+++ trunk/OpenRTM-aist-Python/OpenRTM_aist/__init__.py 2016-02-01 10:22:57 UTC (rev 644)
@@ -100,3 +100,4 @@
from PublisherNew import *
from PublisherPeriodic import *
from FactoryInit import *
+from CORBA_RTCUtil import *
More information about the openrtm-commit
mailing list