0

2つの別々のシリアルポートを開くプログラム(ubuntu-machine上のrxtxを使用したjruby)があります。それらの両方を 1 つのハードウェア ポート、つまり ttyUSB0、または代わりに仮想シリアル ポート (ハードウェアをシミュレートするプログラムがあります) に接続することは可能ですか?

2つのシリアルポートを接続するためのソフトウェアリピーター/ハブのようなものはありますか? socatをチェックしましたが、これは2つの端を互いに接続するだけです。vde2ヒントと slip/slattach のヒントを読みましたが、解決策が見つかりませんでした。

そこにsocatの専門家はいませんか?

4

1 に答える 1

0

最終的に、この問題は Java クラスのポート所有権でのみ解決できました。フレーミングの問題のためだと思います。

次のような所有権ハンドラーを作成しました

シリアル ポートの所有権の管理 (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

デメリットばかり。複数のオープン ラインを持つことはできません。別の接続 (ポートを要求する側) を開く前に、常に 1 つの接続を閉じる必要があります。

于 2013-04-08T08:44:33.657 に答える