USB-Kommunikations-Gerät mit mehreren seriellen ports, funktioniert auf allen Plattformen
Wir haben ein embedded-Gerät, die Verbindung zum PC über USB, und es hat mehrere virtuelle serielle ports (CDC-ACM).
Haben wir diese arbeiten auf Windows. Auf dem embedded-Gerät, wir haben mehrere CDC-ACM-Schnittstellen. Die USB-Deskriptoren deklarieren es als composite-Gerät (Klasse=0xEF, sub-class=2, Protokoll=1), und es hat ein "Interface Association Descriptor" für jede virtuelle serielle Schnittstelle. Unter Windows verwenden wir eine INF-Datei installiert usbser.sys für jeden CDC-ACM-control-interface (MI_00, MI_02, etc).
Aber, wie wir gefunden haben, diese Methode scheint nicht zu funktionieren für Mac. Ich habe festgestellt, dass ich es bekommen kann, um die Arbeit für die Mac und Linux, indem man Sie zu einer "Kommunikation" - Klasse (Klasse=2, sub-class=0, protocol=0), und das entfernen des IADs. (Für Linux, testen mit Ubuntu, ich habe gefunden, dass das funktioniert hat mit der Ubuntu-Linux kernel 2.6.35-28 oder höher. Mit älteren kernels, die nur die erste serielle Schnittstelle funktionierte.) Aber dann, diese Methode funktioniert nicht für Windows.
Welche Methode verwendet werden kann, um ein USB-Gerät mit mehreren virtuellen seriellen Schnittstellen, das funktioniert auf Windows -, Mac -, und Linux? Ich denke, ich würde lieber eine Lösung mit der CDC-ACM-standard so weit wie möglich und vermeidet das schreiben-Ihre-eigenen-Treiber-option, so viel wie möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die eine Möglichkeit die ich mir denken kann aus der Spitze von meinem Kopf wäre das Gerät präsentiert sich als ein USB-hub mit mehreren separaten single-serial-port angeschlossenen Geräten. Das ist nicht schön, aber sehr kugelsicher.
Als Apple-Treiber nicht unterstützt composite CDC-Geräte, ich würde vorschlagen, macht Ihr Gerät neu konfigurieren, irgendwie machen und alternativen Deskriptoren plain CDC, oder kleben mit der zusammengesetzten und mit einem Dritten Treiber (meine Firma macht CDC-ACM Treiber für OS X, die wahrscheinlich Unterstützung von Ihrem Gerät).
Kann es auch möglich sein, Sie zu zwingen das Problem mit ohne programmierbedarf kext.
One-Lösung, die ich gefunden habe, ich denke, das könnte funktionieren (vorbehaltlich weiterer Tests unter Windows):
Machen die Geräte aufzählen, die in der Weise arbeitet, für den Mac:
Sollte das Gerät "einfach so" funktionieren auf Mac und neueren Linux, in dieser Konfiguration. (Für Linux, testen mit Ubuntu, ich habe gefunden, dass das funktioniert hat mit der Ubuntu-Linux kernel 2.6.35-28 oder höher. Mit älteren kernels, die nur die erste serielle Schnittstelle funktionierte.)
Dann, für Windows, ändern Sie die INF-Datei für das Gerät explizit laden Sie die composite device driver
usbccgp.sys
. Ich bin ein Neuling mit Windows INF-Dateien, aber hier sind die relevanten Ausschnitte aus dem, was ich herausfinden konnte, so weit:...
Mit der INF-Datei, die explizit das laden der
usbccgp.sys
Treiber, sowohl USB-serial-ports hat bei mir auf Windows XP SP3 32-bit.Habe ich nur getan, eingeschränkten Test, so weit, so wäre ich daran interessiert zu hören, wie gut das funktioniert, oder nicht, für andere.