【问题标题】:connect two serial port instances from a (ruby) program to a physical serial port (usb0)将(ruby)程序中的两个串行端口实例连接到物理串行端口(usb0)
【发布时间】:2013-01-30 12:27:17
【问题描述】:

我有一个程序(在 ubuntu 机器上带有 rxtx 的 jruby)打开 2 个单独的串行端口。是否可以将它们都连接到一个硬件端口,即 ttyUSB0,或者连接到虚拟串行端口(我有一个程序来模拟硬件)?

是否有类似软件中继器/集线器来连接 2 个串行端口?我检查了socat,但这个只连接了2个末端。我已阅读 hint for vde2hint for slip/slattach 但找不到解决方案。

没有 socat 专家吗?

【问题讨论】:

  • 我建议检查是否有可用的 Java 库。因为您使用的是 JRuby,所以从您的代码中调用 Java 非常容易。
  • 感谢您的提示。我不想更改我的 jruby 代码,我更喜欢解决这个外部问题,比如准备端口以供使用...

标签: linux serial-port jruby


【解决方案1】:

我最终只能通过 java 类中的端口所有权来解决这个问题。 socat 没办法,我认为是因为框架问题。

我创建了一个所有权处理程序,如 in

Managing Serial Port Ownership (in rxtx)

在 jruby 中看起来像

class SerialOwnershipHandler
include CommPortOwnershipListener

def initialize serial_port
  @serial_port = serial_port
  @id = serial_port.id
  @port_name = serial_port.port_name
end

def ownershipChange type
  case type
    when CommPortOwnershipListener::PORT_OWNED
      p @id.to_s + "  OwnershipListener: got the port for " + @port_name.to_s
      #break
    when CommPortOwnershipListener::PORT_UNOWNED
      p @id.to_s + "  OwnershipListener: just lost it's port ownership for " + @port_name.to_s
      #break
    when CommPortOwnershipListener::PORT_OWNERSHIP_REQUESTED
      p @id.to_s + "  OwnershipListener: someone is asking port ownership for " + @port_name.to_s
      @serial_port.close
      #break
  end
end...

在我调用的串口类初始化方法中

    @serial_ownership_handler = SerialOwnershipHandler.new self  ## implements CommPortOwnershipListener
    @port_id.add_port_ownership_listener @serial_ownership_handler

唯一的缺点。您不能有多个开放线路。在打开另一个连接(请求端口的那个)之前,您必须始终关闭一个连接

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 2022-11-11
    • 2012-09-16
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2020-08-25
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多