COM-Port Treiber Hersteller ermitteln



  • um herauszufinden hinter welchen COM-Port

    Damals bei Druckern und anderen Geraeten hat man es dem Anwender ueberlassen, den COM-Port auszuwaehlen. Mache doch einfach ein Konfigurationsskript oder Dialog.



  • Danke hustbaer, die Links sehen sehr gut aus 🙂 Sogar in C#, was mir wesentlich mehr liegt als C++.

    Natürlich kann ich die COM-ports auflisten, nur möchte ich dem Nutzer keine Auswahl zumuten die der Computer alleine machen kann.

    Viele Grüße,
    Björn



  • @knivil
    Wenn ein Programm "seinen" USB-Dongle sucht, oder ein anderes USB Gerät (Farbmessgerät, Flash-Tool für irgendwelche Hardware, was auch immer), dann listet mir das auch nicht einen Haufen USB IDs auf und fragt mich dann welche es verwenden soll.
    Es findet das entsprechende Teil selbst und verwendet es einfach.
    Und das ist gut so.

    Ich sehe nicht ein warum das anders sein sollte, nur weil das USB Gerät zufällig einen USB <-> RS-232 Adapter verwendet.



  • Hier geht es aber nicht um USB sondern COM, darunter verstehe ich eine serielle Verbindung ueber den COM-Port. Ob die emuliert ist oder nicht, ist fuer mich nicht relevant. Tausche ich den Adapter, bin ich aufgeschmissen. Auch gibt es wohl mehr USB-Geraete als COM-Ports, so dass eine Vorauswahl sich auf vielleicht 1 (?) reduziert. Auch kann ein Protokoll fuer das Pairing vereinbart werden. Auch ist der Weg ueber die Registrykeys unterschiedlich von Windows zu Windows und ein robusterer Weg wahrscheinlich ueber die SetupAPI ist zu empfehlen.



  • Es geht darum dem Nutzer die Einstellung des COM-Ports abzunehmen.

    Heutzutage haben die meisten Rechner keinen COM-Port mehr, daher wird der Arduino in den meisten Fälle per USB angeschlossen (der Arduino hat auch keinen COM-Port Anschluss). Von daher ist die automatische Auswahl meiner Meinung nach die Beste. Ich muss zwar noch Testen wie hoch die Erkennungsrate ist, hoffe aber das es klappt.

    lg Björn



  • Es geht darum dem Nutzer die Einstellung des COM-Ports abzunehmen.

    Darauf waere ich jetzt nicht gekommen.

    daher wird der Arduino in den meisten Fälle per USB angeschlossen (der Arduino hat auch keinen COM-Port Anschluss).

    Klar kann ich den Arduino ueber IO-Pins mit Daten ueber die Serielle Schnittstelle fuettern. Kommt ganz drarauf an, wie ich ihn benutze. Leider war nicht ersichtlich, wie DU ihn benutzt. Und wenn er ueber IO-Pins durch einen RS232-USB Adapter am PC angeschlossen ist, dann sollte der Hersteller des Adapters egal sein.

    Und wenn du sowieso USB verwendest, dann arbeite doch direkt auf USB-Basis.



  • Der Arduino hat ja einen USB-Serial-Wandler direkt auf dem Board.

    Und wenn du sowieso USB verwendest, dann arbeite doch direkt auf USB-Basis

    Der Aufwand für eine "richtige" USB-Hardware erscheint mir zu hoch, oder liege ich da falsch?



  • Wenn es nicht immer zwingend USB sein muss, bzw. nicht immer die selbe VID/PID, dann ist es was anderes.

    Ich bin davon ausgegangen dass hier zwar ein USB->RS232 Chip verwendet wird, dieser aber garantiert immer der selbe ist mit der selben VID/PID. Solche Anwendungen habe wir nämlich einige. Daher machen wir auch genau das: wir finden das Gerät einfach anhand der USB ID. (Der Code dafür ist bloss leider so unleserlich dass ich mir nicht auf die Schnelle raussuchen konnte wie es geht.)

    knivil schrieb:

    Auch kann ein Protokoll fuer das Pairing vereinbart werden.

    Verstehe nicht.
    Meinst du dass man einfach alle COMs aufmachen soll und mal auf gut Glück Daten rausschicken, und sehen ob die richtige Antwort zurückkommt? Das wäre nicht so gut wenn z.B. ein serieller Drucker angeschlossen ist.

    Auch ist der Weg ueber die Registrykeys unterschiedlich von Windows zu Windows und ein robusterer Weg wahrscheinlich ueber die SetupAPI ist zu empfehlen.

    Na dann sag mal an wie das geht.
    Ich kenne nämlich nur den Weg über die Registry.
    Unterschiede von Windows zu Windows hab ich aber keine feststellen können, das Layout der Registry ist in dem Bereich hübsch gleich geblieben, zumindest seit Windows XP. (Und vermutlich sogar schon seit Win2000.) Und bis inklusive Windows 7. Vermutlich auch noch Windows 8, hab' ich aber noch nicht verifiziert.



  • Recht verbreitet bei dem Mikrocontroller-Leuten ist der Weg über WMI:
    SELECT * FROM Win32_PnPEntity
    ...und dann alles was im Caption-Property "(COM" stehen hat nehmen (und daraus dann auch den COM-Port extrahieren)
    Wirklich sauber ist das nicht, scheint aber auch mit USB-Adaptern bestens zu funktionieren.
    Über das Property "HardwareID" kommt man auch an VID/PID ran.

    Es gibt auch Win32_SerialPort, allerdings fehlen da gerne mal serielle Schnittstellen von billigen USB-Adaptern mit Pfusch-Treibern.

    Interessant dürfte auch sein:
    http://www.naughter.com/enumser.html
    "One of the posts that keeps reappearing in the programming newsgroups is how to enumerate all the serial ports installed. The code uses a number of different methods to enumerate the ports."

    ----
    Fest verbaute USB<->Serial-Bridge mit fester und nicht allgemein verbreiteter VID/PID ist für die automatische Erkennung natürlich optimal.
    Firmware-Flash-Tools, etc. suchen sich ihre Hardware auch gerne einfach über den Gerätenamen.

    Ansonsten gäb es alternativ zu SerialPort/CDC auch noch HID und WinUSB zur Kommunikation (mit dem Vorteil nichtmal eine *.inf zu benötigen, aber dem Nachteil von Mehraufwand bei der Software gegenüber CDC)
    http://msdn.microsoft.com/en-us/library/hh450799.aspx




Anmelden zum Antworten