2009-05-19 10 views
1

Ich verwende rxtx api, um Daten von einem GPS-Gerät über einen COM-Port zu lesen. Im Moment finde ich den richtigen COM-Port, indem ich eine Konfigurationsdatei lese und nach dem angegebenen Port suche. Das Problem, das ich habe ist, dass, wenn das Gerät nicht angeschlossen ist, der COM-Port geändert werden kann, dann muss der Benutzer wissen, die Konfigurationsdatei zu ändern. Ich schrieb eine ähnliche App in C# und konnte den Windows-Gerätenamen anstelle des COM-Ports auflisten, und ich fuhr durch die COM-Ports, bis der Gerätename mit dem Namen in der Konfigurationsdatei übereinstimmte. Bei Verwendung dieser Methode muss sich nichts in der Konfigurationsdatei ändern, selbst wenn sich der verwendete COM-Port ändert. Gibt es einen Weg, das mit der rxtx api zu machen?rxtx com port

Vielen Dank im Voraus!

Antwort

1

Wenn jemand interessiert ist ...

Ich habe einen Windows-Dienst in C#, die eine Buchse überwacht. Wenn ein Client eine Verbindung zu diesem Socket herstellt, sammelt der Dienst den Portnamen und die Geräte-ID, die sich auf diesem Port befindet, und sendet die Daten in einer Zeichenfolge über den COM-Port. Der Client kann dann die Zeichenfolge analysieren, um die benötigten Daten zu erhalten.

In meinem Fall die Zeichenfolge übergeben wird, ist: „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"

Wenn ich es analysieren kann ich sehen, dass ACPI \ PNP0501 * PN P0501 ist die Geräte-ID für COM 1, es gibt drei Geräte-IDs für COM3 und zwei Geräte-IDs für COM5.

Dies ist vielleicht nicht der beste Weg, um damit umzugehen, aber es ist gut genug für meine Bedürfnisse und es rettete mich von JNI. :)

0

CommPortIdentifier.getPortIdentifiers listet alle Ports im System auf, die von der JavaComm-API verwendet werden können. Durchsuche sie, um den Anschluss zu finden, mit dem dein Gerät verbunden ist.

+0

Ich habe das getan, aber es gibt mir nicht die Geräte-ID des Geräts über den Port, es gibt nur den ComPortIdentifier für jeden Port zurück. Mit diesem können Sie den Anschlussnamen (dh COM3), aber nicht eine Geräte-ID erhalten, so dass ich immer noch den Anschluss wissen müsste, nach dem ich suche. – beyerss

+0

Wozu genau brauchen Sie das? Aus Ihrer Frage scheint es, dass Sie alle verfügbaren Ports aufzählen möchten, um den gesuchten zu finden, so dass Sie die Konfigurationsdatei nicht ändern müssen. Dies sollte Ihnen helfen - es sei denn, Sie haben die falsche Frage gestellt. :) – Bombe

+0

Mit dem, was Sie vorgeschlagen, ich würde immer noch die Konfigurationsdatei ändern müssen, wenn das Gerät einen neuen COM-Port bekommt, nachdem es ausgesteckt und wieder eingesteckt (was häufig mit meinem System passiert). Mein Code in C# suchte nach dem Gerätenamen auf einem COM-Port (der sich nicht ändert). Selbst wenn sich der COM-Port ändert, kann die App immer noch den richtigen Port finden. Hoffentlich wird das mehr Sinn machen. – beyerss

0

Wenn Sie den Namen, der dem Gerät am COM-Port zugeordnet ist, erhalten möchten (insbesondere wenn ein Treiber installiert ist), müssen Sie dies mit einer kleinen, gefürchteten Java-> Native-Schnittstelle tun Sprechen Sie mit den Windows-APIs, die diese Informationen sammeln. C# ist nett, da diese Informationen gesammelt und Ihnen zur Verfügung gestellt werden, aber in Java müssen Sie diesen zusätzlichen Schritt gehen.

Windows Function Discovery kann sich als nützlich erweisen. Ich bin mir nicht sicher, welche API genau diese Funktionalität bietet.

+0

Danke, ich werde mich darum kümmern. – beyerss

Verwandte Themen