2009-05-19 171 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提供了這個功能。