2009-05-19 174 views
1

我正在使用rxtx api通过com端口从GPS设备读取数据。现在我通过读取配置文件并查找列出的端口来找到正确的com端口。我遇到的问题是,如果设备被拔掉,com端口可能会改变,那么用户必须知道更改配置文件。我在c#中编写了一个类似于此的应用程序,并且能够列出Windows设备名称而不是com端口,并且我循环访问com端口,直到设备名称与配置文件中的名称匹配。使用该方法即使正在使用的COM端口发生更改,配置文件中的任何内容也不得更改。有没有办法用rxtx api来做到这一点?rxtx com端口

在此先感谢!

回答

1

如果有人感兴趣...

我在C#中创建了一个监视套接字的Windows服务。如果客户端连接到该套接字,则该服务会收集该端口上的端口名称和设备标识,并通过com端口以字符串形式发送数据,然后客户端可以解析字符串以获取所需的数据。

在我的情况下,字符串传递是: “ACPI \ PNP0501 * PNP0501,COM1,PCI \ VEN_8086 & DEV_29B7 & SUBSYS_02111028 & REV_02 PCI \ VEN_8086 & DEV_29B7 & SUBSYS_02111028 PCI \ VEN_8086 & DEV_29B7 & CC_070002 PCI \ VEN_8086 & DEV_29B7 & CC_0700,COM3,USB \ Vid_067b & Pid_2303 & Rev_0400 USB \ Vid_067b & Pid_2303,COM5"

当我解析它,我可以看到ACPI \ PNP0501 * PN P0501是COM 1的设备ID,COM​​3有三个设备ID,COM​​5有两个设备ID。

这可能不是最好的方式来处理这个问题,但它足够满足我的需求,它可以让我从JNI中解脱出来。 :)

0

CommPortIdentifier.getPortIdentifiers列出了系统中Javacomm API可用的所有端口。遍历它们以找到设备连接的端口。

+0

我已经这样做了,但它没有给我使用该端口的设备的设备ID,它只是为每个端口返回ComPortIdentifier。使用它你可以得到端口名称(即COM3),但不是设备ID,所以我仍然需要知道我正在查找的端口。 – beyerss 2009-05-20 10:40:25

+0

你到底需要什么?从你的问题看来,你想枚举所有可用的端口来找到你正在寻找的端口,这样你就不需要改变配置文件。这应该对你有所帮助 - 除非你提出了错误的问题。 :) – Bombe 2009-05-20 11:04:36

0

如果你想在COM端口上获得与设备相关的名字(特别是如果安装了驱动程序来提供它的话),你必须这样做,用一个可怕的Java-> Native Interface与收集此信息的Windows API交谈。 C#很好,因为这些信息被收集并提供给你,但是在Java中,你必须采取额外的步骤。

Windows Function Discovery可能证明有用。我不确定API提供了这个功能。