Ejemplo n.º 1
0
    def createConnector(self, cprof, prop, provider_=None, consumer_=None):
        profile = OpenRTM_aist.ConnectorInfo(
            cprof.name, cprof.connector_id,
            OpenRTM_aist.CORBA_SeqUtil.refToVstring(cprof.ports), prop)
        connector = None

        try:
            if provider_ is not None:
                if self._singlebuffer:
                    connector = OpenRTM_aist.InPortPushConnector(
                        profile, provider_, self._listeners, self._thebuffer)
                else:
                    connector = OpenRTM_aist.InPortPushConnector(
                        profile, provider_, self._listeners)

            elif consumer_ is not None:
                if self._singlebuffer:
                    connector = OpenRTM_aist.InPortPullConnector(
                        profile, consumer_, self._listeners, self._thebuffer)
                else:
                    connector = OpenRTM_aist.InPortPullConnector(
                        profile, consumer_, self._listeners)

            else:
                self._rtcout.RTC_ERROR(
                    "provider or consumer is not passed. returned 0;")
                return None

            # if connector is None:
            #  self._rtcout.RTC_ERROR("InPortConnector creation failed")
            #  return 0

            if provider_ is not None:
                self._rtcout.RTC_TRACE("InPortPushConnector created")
            elif consumer_ is not None:
                self._rtcout.RTC_TRACE("InPortPullConnector created")

            if OpenRTM_aist.StringUtil.normalize(
                    prop.getProperty("interface_type")) == "direct":
                if consumer_ is not None:
                    outport = self.getLocalOutPort(profile)

                    if outport is None:
                        self._rtcout.RTC_TRACE("interface_type is direct, ")
                        self._rtcout.RTC_TRACE(
                            "but a peer OutPort servant could not be obtained."
                        )
                        del connector
                        return None
                    connector.setOutPort(outport)

            # guard = OpenRTM_aist.ScopedLock(self._connector_mutex)
            self._connectors.append(connector)
            self._rtcout.RTC_PARANOID("connector push backed: %d",
                                      len(self._connectors))
            return connector
        except BaseException:
            self._rtcout.RTC_ERROR("InPortPushConnector creation failed")
            self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception())
            return None
Ejemplo n.º 2
0
  def test_pushSkip(self):
    _pn = PublisherPeriodic()
    prop = OpenRTM_aist.Properties()
    cinfo = OpenRTM_aist.ConnectorInfo("",
                                       "",
                                       [],
                                       prop)
    self.assertEqual(_pn.setListener(cinfo,OpenRTM_aist.ConnectorListeners()),
                     OpenRTM_aist.DataPortStatus.PORT_OK)
    prop = OpenRTM_aist.Properties()
    prop.setProperty("publisher.push_policy","skip")
    prop.setProperty("publisher.skip_count","0")
    prop.setProperty("thread_type","default")
    prop.setProperty("measurement.exec_time","enable")
    prop.setProperty("measurement.exec_count","0")
    prop.setProperty("measurement.period_time","enable")
    prop.setProperty("measurement.period_count","0")
    retcode = _pn.init(prop)
    cons = ConsumerMock()
    self.assertEqual(_pn.setConsumer(cons),OpenRTM_aist.DataPortStatus.PORT_OK)
    _pn.setBuffer(OpenRTM_aist.CdrRingBuffer())
    _pn.activate()

    self.assertEqual(_pn.write(123,0,0),OpenRTM_aist.DataPortStatus.PORT_OK)
    self.assertEqual(_pn.write(123,0,0),OpenRTM_aist.DataPortStatus.PORT_OK)
    self.assertEqual(_pn.write(123,0,0),OpenRTM_aist.DataPortStatus.PORT_OK)
    self.assertEqual(_pn.write(123,0,0),OpenRTM_aist.DataPortStatus.PORT_OK)
    self.assertEqual(_pn.write(123,0,0),OpenRTM_aist.DataPortStatus.PORT_OK)
    self.assertEqual(_pn.write(123,0,0),OpenRTM_aist.DataPortStatus.PORT_OK)
    self.assertEqual(_pn.write(123,0,0),OpenRTM_aist.DataPortStatus.PORT_OK)
    self.assertEqual(_pn.write(123,0,0),OpenRTM_aist.DataPortStatus.PORT_OK)
    _pn.deactivate()
    _pn.__del__()
    return
Ejemplo n.º 3
0
  def createDuplexConnector(self, cprof, prop, provider_):
    profile = OpenRTM_aist.ConnectorInfo(cprof.name,
                                         cprof.connector_id,
                                         OpenRTM_aist.CORBA_SeqUtil.refToVstring(cprof.ports),
                                         prop)
    connector = None
    try:
      if self._singlebuffer:
        connector = OpenRTM_aist.InPortDuplexConnector(profile, provider_,
                                                      self._listeners,
                                                      self._thebuffer)
      else:
        connector = OpenRTM_aist.InPortDuplexConnector(profile, provider_,
                                                      self._listeners)

      self._rtcout.RTC_TRACE("InPortDuplexConnector created")
          

      # guard = OpenRTM_aist.ScopedLock(self._connector_mutex)
      self._connectors.append(connector)
      self._rtcout.RTC_PARANOID("connector duplex backed: %d", len(self._connectors))
      return connector
    except:
      self._rtcout.RTC_ERROR("InPortDuplexConnector creation failed")
      self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception())
      return None
    def setUp(self):
        self._buffer = MyBuffer()
        self._profile = OpenRTM_aist.ConnectorInfo("test", "id", ["in", "out"],
                                                   OpenRTM_aist.Properties())

        self._oc = OutPortPullConnector(self._profile, OutPortProviderMock(),
                                        OpenRTM_aist.ConnectorListeners(),
                                        self._buffer)
        return
Ejemplo n.º 5
0
  def createConnector(self, cprof, prop, provider_=None, consumer_=None):
    profile = OpenRTM_aist.ConnectorInfo(cprof.name,
                                         cprof.connector_id,
                                         OpenRTM_aist.CORBA_SeqUtil.refToVstring(cprof.ports),
                                         prop)
    connector = None


    try:
      if provider_ is not None:
        if self._singlebuffer:
          connector = OpenRTM_aist.InPortPushConnector(profile, provider_,
                                                       self._listeners,
                                                       self._thebuffer)
        else:
          connector = OpenRTM_aist.InPortPushConnector(profile, provider_,
                                                       self._listeners)

      elif consumer_ is not None:
        if self._singlebuffer:
          connector = OpenRTM_aist.InPortPullConnector(profile, consumer_,
                                                       self._listeners,
                                                       self._thebuffer)
        else:
          connector = OpenRTM_aist.InPortPullConnector(profile, consumer_,
                                                       self._listeners)

      else:
        self._rtcout.RTC_ERROR("provider or consumer is not passed. returned 0;")
        return 0
                

      if connector is None:
        self._rtcout.RTC_ERROR("InPortConnector creation failed")
        return 0

      if provider_ is not None:
        self._rtcout.RTC_TRACE("InPortPushConnector created")
      elif consumer_ is not None:
        self._rtcout.RTC_TRACE("InPortPullConnector created")

      # guard = OpenRTM_aist.ScopedLock(self._connector_mutex)
      self._connectors.append(connector)
      self._rtcout.RTC_PARANOID("connector push backed: %d", len(self._connectors))
      return connector
    except:
      self._rtcout.RTC_ERROR("InPortPushConnector creation failed")
      self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception())
      return 0

    self._rtcout.RTC_FATAL("never comes here: createConnector()")
    return 0
 def test_write(self):
     prop = OpenRTM_aist.Properties()
     cinfo = OpenRTM_aist.ConnectorInfo("", "", [], prop)
     self.assertEqual(self._pf.write(123, 0, 0),
                      OpenRTM_aist.DataPortStatus.PRECONDITION_NOT_MET)
     self.assertEqual(
         self._pf.setConsumer(OpenRTM_aist.InPortCorbaCdrConsumer()),
         OpenRTM_aist.DataPortStatus.PORT_OK)
     self.assertEqual(
         self._pf.setListener(cinfo, OpenRTM_aist.ConnectorListeners()),
         OpenRTM_aist.DataPortStatus.PORT_OK)
     self.assertEqual(self._pf.write(123, 0, 0),
                      OpenRTM_aist.DataPortStatus.CONNECTION_LOST)
     return
Ejemplo n.º 7
0
    def test_get(self):
        ret, data = self._opp.get()
        self.assertEqual(ret, OpenRTM.UNKNOWN_ERROR)

        prop = OpenRTM_aist.Properties()
        cinfo = OpenRTM_aist.ConnectorInfo("", "", [], prop)
        self._opp.setListener(cinfo, OpenRTM_aist.ConnectorListeners())
        buff = DummyBuffer()
        self._opp.setBuffer(buff)
        ret, data = self._opp.get()
        self.assertEqual(ret, OpenRTM.BUFFER_EMPTY)

        buff.write(123)
        ret, data = self._opp.get()
        self.assertEqual(data, 123)
        return
    def test_ConnectorDataListenerT(self):
        # add DataListener.
        for i in range(OpenRTM_aist.ConnectorDataListenerType.
                       CONNECTOR_DATA_LISTENER_NUM):
            self._connectorListeners.connectorData_[i].addListener(
                self._datalisteners[i], True)

        # test for ConnectorDataListenerT.__call__() with little endian data.
        for i in range(OpenRTM_aist.ConnectorDataListenerType.
                       CONNECTOR_DATA_LISTENER_NUM):
            data = RTC.TimedLong(RTC.Time(0, 0), i)
            cdr_data = cdrMarshal(any.to_any(data).typecode(), data,
                                  True)  # little endian
            self._connectorListeners.connectorData_[i].notify(
                self._info, cdr_data)
            self.assertEqual(self._datalisteners[i].get_data().data, i)

        # test for ConnectorDataListenerT.__call__() with big endian data.
        info = OpenRTM_aist.ConnectorInfo("name", "id", [],
                                          OpenRTM_aist.Properties())
        info.properties.setProperty("serializer.cdr.endian", "big")

        for i in range(OpenRTM_aist.ConnectorDataListenerType.
                       CONNECTOR_DATA_LISTENER_NUM):
            data = RTC.TimedLong(RTC.Time(0, 0), i)
            cdr_data = cdrMarshal(any.to_any(data).typecode(), data,
                                  False)  # big endian
            self._connectorListeners.connectorData_[i].notify(info, cdr_data)
            self.assertEqual(self._datalisteners[i].get_data().data, i)

        # remove DataListener.
        for i in range(OpenRTM_aist.ConnectorDataListenerType.
                       CONNECTOR_DATA_LISTENER_NUM):
            self._connectorListeners.connectorData_[i].removeListener(
                self._datalisteners[i])

        for i in range(OpenRTM_aist.ConnectorDataListenerType.
                       CONNECTOR_DATA_LISTENER_NUM):
            data = RTC.TimedLong(RTC.Time(0, 0), i)
            cdr_data = cdrMarshal(any.to_any(data).typecode(), data, True)
            self._connectorListeners.connectorData_[i].notify(
                self._info, cdr_data)
            # get_data() return None, because removeListener was called.
            self.assertEqual(self._datalisteners[i].get_data(), None)

        return
    def setUp(self):
        self._connectorListeners = ConnectorListeners()
        self._info = OpenRTM_aist.ConnectorInfo("name", "id", [],
                                                OpenRTM_aist.Properties())

        self._datalisteners = []
        self._listeners = []

        for i in range(OpenRTM_aist.ConnectorDataListenerType.
                       CONNECTOR_DATA_LISTENER_NUM):
            self._datalisteners.append(
                DataListener(typeToStringDataListener(i)))

        for i in range(
                OpenRTM_aist.ConnectorListenerType.CONNECTOR_LISTENER_NUM):
            self._listeners.append(Listener(typeToStringListener(i)))

        return
Ejemplo n.º 10
0
    def test_get(self):
        prop = OpenRTM_aist.Properties()
        self._opp.init(prop)

        ret = self._opp.get()
        self.assertEqual(ret, OpenRTM.UNKNOWN_ERROR)

        prop = OpenRTM_aist.Properties()
        cinfo = OpenRTM_aist.ConnectorInfo("", "", [], prop)
        self._opp.setListener(cinfo, OpenRTM_aist.ConnectorListeners())
        buff = DummyBuffer()
        self._opp.setBuffer(buff)
        ret = self._opp.get()
        self.assertEqual(ret, OpenRTM.BUFFER_EMPTY)

        #self._opp.setInterface(self._shm_var)

        buff.write("abcde")
        ret = self._opp.get()
        self.assertEqual(ret, OpenRTM.PORT_OK)
        data = self._opp.read()
        self.assertEqual(data, "abcde")
        return
Ejemplo n.º 11
0
  def subscribeInterfaces(self, cprof):
    self._rtcout.RTC_TRACE("subscribeInterfaces()")

    # prop: [port.outport].
    prop = copy.deepcopy(self._properties)
    conn_prop = OpenRTM_aist.Properties()
    OpenRTM_aist.NVUtil.copyToProperties(conn_prop, cprof.properties)
    prop.mergeProperties(conn_prop.getNode("dataport")) # marge ConnectorProfile
    prop.mergeProperties(conn_prop.getNode("dataport.inport")) # marge ConnectorProfile for buffer property.
    
    #
    # ここで, ConnectorProfile からの properties がマージされたため、
    # prop["dataflow_type"]: データフロータイプ
    # prop["interface_type"]: インターフェースタイプ
    # などがアクセス可能になる。
    #
    dflow_type = prop.getProperty("dataflow_type")
    dtype = [dflow_type]
    OpenRTM_aist.normalize(dtype)
    dflow_type = dtype[0]
    
    profile = OpenRTM_aist.ConnectorInfo(cprof.name,
                                         cprof.connector_id,
                                         OpenRTM_aist.CORBA_SeqUtil.refToVstring(cprof.ports),
                                         prop)
    if dflow_type == "push":
      self._rtcout.RTC_DEBUG("dataflow_type = push .... do nothing")

      conn = self.getConnectorById(cprof.connector_id)

      if not conn:
        self._rtcout.RTC_ERROR("specified connector not found: %s",
                               cprof.connector_id)
        return RTC.RTC_ERROR

      ret = conn.setConnectorInfo(profile)
      if ret == RTC.RTC_OK:
        self._rtcout.RTC_DEBUG("subscribeInterfaces() successfully finished.")

      return ret

    elif dflow_type == "pull":
      self._rtcout.RTC_DEBUG("dataflow_type = pull .... create PullConnector")

      # create OutPortConsumer
      consumer = self.createConsumer(cprof, prop)
      if not consumer:
        return RTC.BAD_PARAMETER

      # create InPortPullConnector
      connector = self.createConnector(cprof, prop, consumer_=consumer)
      if not connector:
        return RTC.RTC_ERROR

      ret = connector.setConnectorInfo(profile)

      if ret == RTC.RTC_OK:
        self._rtcout.RTC_DEBUG("publishInterface() successfully finished.")

      return ret

    self._rtcout.RTC_ERROR("unsupported dataflow_type")
    return RTC.BAD_PARAMETER
Ejemplo n.º 12
0
    def subscribeInterfaces(self, cprof):
        self._rtcout.RTC_TRACE("subscribeInterfaces()")

        # prop: [port.outport].
        prop = copy.deepcopy(self._properties)

        conn_prop = OpenRTM_aist.Properties()
        OpenRTM_aist.NVUtil.copyToProperties(conn_prop, cprof.properties)
        prop.mergeProperties(conn_prop.getNode("dataport")
                             )  # marge ConnectorProfile
        """
    #  marge ConnectorProfile for buffer property.
    #   e.g.
    #     prof[buffer.write.full_policy]
    #          << cprof[dataport.outport.buffer.write.full_policy]
    """
        prop.mergeProperties(conn_prop.getNode("dataport.outport"))

        if self._value is not None and not self.isExistingMarshalingType(prop):
            return RTC.RTC_ERROR

        #
        # ここで, ConnectorProfile からの properties がマージされたため、
        # prop["dataflow_type"]: データフロータイプ
        # prop["interface_type"]: インターフェースタイプ
        # などがアクセス可能になる。
        #
        dflow_type = OpenRTM_aist.normalize(prop.getProperty("dataflow_type"))

        profile = OpenRTM_aist.ConnectorInfo(cprof.name,
                                             cprof.connector_id,
                                             OpenRTM_aist.CORBA_SeqUtil.refToVstring(
                                                 cprof.ports),
                                             prop)
        if dflow_type == "push":
            self._rtcout.RTC_PARANOID(
                "dataflow_type = push .... create PushConnector")

            # interface
            consumer = self.createConsumer(cprof, prop)
            if not consumer:
                return RTC.BAD_PARAMETER

            # create OutPortPushConnector
            connector = self.createConnector(cprof, prop, consumer_=consumer)
            if not connector:
                return RTC.RTC_ERROR
            connector.setDataType(self._value)

            ret = connector.setConnectorInfo(profile)

            if ret == RTC.RTC_OK:
                self._rtcout.RTC_DEBUG(
                    "subscribeInterfaces() successfully finished.")

            return ret

        elif dflow_type == "pull":
            self._rtcout.RTC_PARANOID("dataflow_type = pull.")

            conn = self.getConnectorById(cprof.connector_id)
            if not conn:
                self._rtcout.RTC_ERROR("specified connector not found: %s",
                                       cprof.connector_id)
                return RTC.RTC_ERROR

            ret = conn.setConnectorInfo(profile)

            if ret == RTC.RTC_OK:
                self._rtcout.RTC_DEBUG(
                    "subscribeInterfaces() successfully finished.")

            return ret

        elif dflow_type == "duplex":
            self._rtcout.RTC_DEBUG(
                "dataflow_type = duplex .... set Consumer Object")
            # create OutPortConsumer
            consumer = self.createConsumer(cprof, prop)
            if not consumer:
                return RTC.BAD_PARAMETER

            connector = self.getConnectorById(cprof.connector_id)
            if not connector:
                return RTC.RTC_ERROR

            connector.setDataType(self._value)
            connector.setConsumer(consumer)
            ret = connector.setConnectorInfo(profile)

            if ret == RTC.RTC_OK:
                self._rtcout.RTC_DEBUG(
                    "publishInterface() successfully finished.")

            return ret

        self._rtcout.RTC_ERROR("unsupported dataflow_type")
        return RTC.BAD_PARAMETER
 def test_createBuffer(self):
   self._con.createBuffer(OpenRTM_aist.ConnectorInfo("name","id",[],OpenRTM_aist.Properties()))
   return
 def setUp(self):
   OpenRTM_aist.Manager.instance()
   self._con = InPortPullConnector(OpenRTM_aist.ConnectorInfo("name","id",[],OpenRTM_aist.Properties()),InPortConsumerMock(),OpenRTM_aist.ConnectorListeners())
 def profile(self):
     return OpenRTM_aist.ConnectorInfo(self._name, self._id, self._ports,
                                       self._properties)