OutPort.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 
00005 ##
00006 # @file OutPort.py
00007 # @brief OutPort class
00008 # @date $Date: 2007/09/19$
00009 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00010 # 
00011 # Copyright (C) 2006-2008
00012 #     Noriaki Ando
00013 #     Task-intelligence Research Group,
00014 #     Intelligent Systems Research Institute,
00015 #     National Institute of
00016 #         Advanced Industrial Science and Technology (AIST), Japan
00017 #     All rights reserved.
00018 
00019 
00020 from omniORB import *
00021 from omniORB import any
00022 
00023 import OpenRTM_aist
00024 
00025 
00026 ##
00027 # @if jp
00028 # @brief データにタイムスタンプをセットする
00029 #
00030 # データポートのデータに対してタイムスタンプをセットする。データポート
00031 # のデータは構造体のメンバーとして tm.sec, tm.nsec を持つ必要がある。
00032 #
00033 # @param data タイムスタンプをセットするデータ。実行後実行時のタイムス
00034 #             タンプがセットされる
00035 #
00036 # @else
00037 # @brief Setting timestamp to data
00038 #
00039 # This function sets timestamp to data of data port. This data should
00040 # have tm.sec, tm.nsec as members of the structure.
00041 #
00042 # @param data Data to be set timestamp. After executing this
00043 #             function, current timestamp is set to the data.
00044 #
00045 # @endif
00046 # template <class DataType>
00047 # void setTimestamp(DataType& data)
00048 def setTimestamp(data):
00049   # set timestamp
00050   tm = OpenRTM_aist.Time()
00051   data.tm.sec  = tm.sec
00052   data.tm.nsec = tm.usec * 1000
00053 
00054 
00055 ##
00056 # @if jp
00057 #
00058 # @class OutPort
00059 #
00060 # @brief OutPort クラス
00061 # 
00062 # OutPort 用クラス
00063 #
00064 # @since 0.2.0
00065 #
00066 # @else
00067 # 
00068 # @endif
00069 class OutPort(OpenRTM_aist.OutPortBase):
00070   """
00071   """
00072 
00073 
00074 
00075   ##
00076   # @if jp
00077   #
00078   # @brief コンストラクタ
00079   #
00080   # コンストラクタ
00081   #
00082   # @param self
00083   # @param name ポート名
00084   # @param value このポートにバインドされるデータ変数
00085   # @param buffer_ バッファ
00086   #
00087   # @else
00088   #
00089   # @brief Constructor
00090   #
00091   # @endif
00092   def __init__(self, name, value, buffer=None):
00093     OpenRTM_aist.OutPortBase.__init__(self, name, OpenRTM_aist.toTypename(value))
00094     self._value          = value
00095     #self._timeoutTick    = 1000 # timeout tick: 1ms
00096     #self._writeBlock     = False
00097     #self._writeTimeout   = 0
00098     self._OnWrite        = None
00099     self._OnWriteConvert = None
00100     #self._OnOverflow     = None
00101     #self._OnUnderflow    = None
00102     #self._OnConnect      = None
00103     #self._OnDisconnect   = None
00104     
00105 
00106   def __del__(self, OutPortBase=OpenRTM_aist.OutPortBase):
00107     OutPortBase.__del__(self)
00108     return
00109 
00110   ##
00111   # @if jp
00112   #
00113   # @brief データ書き込み
00114   #
00115   # ポートへデータを書き込む。
00116   #
00117   # - コールバックファンクタ OnWrite がセットされている場合、
00118   #   OutPort が保持するバッファに書き込む前に OnWrite が呼ばれる。
00119   # - OutPort が保持するバッファがオーバーフローを検出できるバッファであり、
00120   #   かつ、書き込む際にバッファがオーバーフローを検出した場合、
00121   #   コールバックファンクタ OnOverflow が呼ばれる。
00122   # - コールバックファンクタ OnWriteConvert がセットされている場合、
00123   #   バッファ書き込み時に、 OnWriteConvert の operator() の戻り値が
00124   #   バッファに書き込まれる。
00125   #
00126   # @param self
00127   # @param value 書き込み対象データ
00128   #
00129   # @return 書き込み処理結果(書き込み成功:true、書き込み失敗:false)
00130   #
00131   # @else
00132   #
00133   # @brief Write data
00134   #
00135   # @endif
00136   # virtual bool write(const DataType& value)
00137   ##
00138   # @if jp
00139   #
00140   # @brief データ書き込み
00141   #
00142   # ポートへデータを書き込む。
00143   # 設定された値をポートに書き込む。
00144   #
00145   # @param self
00146   # @param value 書き込み対象データ
00147   #
00148   # @return 書き込み処理結果(書き込み成功:true、書き込み失敗:false)
00149   #
00150   # @else
00151   #
00152   # @endif
00153   # bool operator<<(DataType& value)
00154   def write(self, value=None):
00155     if not value:
00156       value=self._value
00157 
00158     
00159     if self._OnWrite:
00160       self._OnWrite(value)
00161 
00162     # check number of connectors
00163     conn_size = len(self._connectors)
00164     if not conn_size > 0:
00165       return True
00166   
00167     # set timestamp
00168     #tm = Time()
00169     #value.tm.sec  = tm.sec
00170     #value.tm.nsec = tm.usec * 1000
00171 
00172     #tm_pre = Time()
00173 
00174     if self._OnWriteConvert:
00175       value = self._OnWriteConvert(value)
00176       
00177     result = True
00178 
00179     guard = OpenRTM_aist.ScopedLock(self._connector_mutex)
00180     for con in self._connectors:
00181       ret = con.write(value)
00182       if ret != self.PORT_OK:
00183         result = False
00184         if ret == self.CONNECTION_LOST:
00185           self.disconnect(con.id())
00186 
00187     return result
00188 
00189 
00190   ##
00191   # @if jp
00192   #
00193   # @brief データ書き込み処理のブロックモードの設定
00194   #
00195   # 書き込み処理に対してブロックモードを設定する。
00196   # ブロックモードを指定した場合、バッファに書き込む領域ができるか
00197   # タイムアウトが発生するまで write() メソッドの呼びだしがブロックされる。
00198   #
00199   # @param self
00200   # @param block ブロックモードフラグ
00201   #
00202   # @else
00203   #
00204   # @brief Set read() block mode
00205   #
00206   # @endif
00207   #def setWriteBlock(self, block):
00208   #  self._writeBlock = block
00209 
00210 
00211   ##
00212   # @if jp
00213   #
00214   # @brief 書き込み処理のタイムアウト時間の設定
00215   # 
00216   # write() のタイムアウト時間を usec で設定する。
00217   # write() はブロックモードでなければならない。
00218   #
00219   # @param self
00220   # @param timeout タイムアウト時間 [usec]
00221   #
00222   # @else
00223   #
00224   # @brief Set write() timeout
00225   #
00226   # @endif
00227   #def setWriteTimeout(self, timeout):
00228   #  self._writeTimeout = timeout
00229 
00230 
00231   ##
00232   # @if jp
00233   #
00234   # @brief OnWrite コールバックの設定
00235   #
00236   # データ書き込み直前に呼ばれる OnWrite コールバックファンクタを設定する。
00237   #
00238   # @param self
00239   # @param on_write OnWrite コールバックファンクタ
00240   #
00241   # @else
00242   #
00243   # @brief Set OnWrite callback
00244   #
00245   # @endif
00246   def setOnWrite(self, on_write):
00247     self._OnWrite = on_write
00248 
00249 
00250   ##
00251   # @if jp
00252   #
00253   # @brief OnWriteConvert コールバックの設定
00254   #
00255   # データ書き込み時に呼ばれる OnWriteConvert コールバックファンクタを設定
00256   # する。
00257   # このコールバック関数の処理結果が書き込まれる。
00258   # このため書き込みデータのフィルタリングが可能となる。
00259   #
00260   # @param self
00261   # @param on_wconvert OnWriteConvert コールバックファンクタ
00262   #
00263   # @else
00264   #
00265   # @brief Set OnWriteConvert callback
00266   #
00267   # @endif
00268   def setOnWriteConvert(self, on_wconvert):
00269     self._OnWriteConvert = on_wconvert
00270 
00271 
00272   ##
00273   # @if jp
00274   #
00275   # @brief データ型名取得用メソッド
00276   #
00277   # データの型名を取得するため、InPortCorbaProviderから呼ばれる。
00278   # 
00279   # @param self
00280   #
00281   # @return バッファに設定されているデータの型名
00282   #
00283   # @else
00284   #
00285   # @endif
00286   def getPortDataType(self):
00287     val = any.to_any(self._value)
00288     return str(val.typecode().name())
00289 
00290 
00291 
00292   class subscribe:
00293     def __init__(self, prof, subs = None):
00294       if subs:
00295         self._prof = subs._prof
00296         self._consumer = subs._consumer
00297         return
00298 
00299       self._prof = prof
00300       self._consumer = None
00301       
00302 
00303     def __call__(self, cons):
00304       if cons.subscribeInterface(self._prof.properties):
00305         self._consumer = cons


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Thu Aug 27 2015 14:17:28