Ich habe folgendes Problem: Ich habe ein Wintec WBT-202 GPS-Gerät, das die Standortdaten live als NMEA-Daten über USB übertragen kann. In diesem USB ist es nur eine USB zu serielle Brücke, die unter Windows mit dem Standard usbser.sys
Treiber ausgeführt wird.
Mein Problem ist, dass es unter Mac OS X funktioniert.
Die Hardware Die USB-GPS-Maus verwendet einen Atmel AT91SAM7S256-Chip, der auch für die USB-Schnittstelle zuständig ist.
Das Problem unter Mac OS X passiert nichts. Es wurde kein neues Zeichengerät unter /dev
erstellt, um dieses Gerät zugänglich zu machen.
Unter Windows wird der Standardtreiber usbser.sys
verwendet. Es gibt nur eine INF-Datei, die die VendorID und ProductID auf diesen Treiber verweist.
Von der Verwendung von Snoopy Pro unter Windows (einer USB-Sniffer-Software) weiß ich, dass die Daten, sobald das Gerät richtig initialisiert ist, als ASCII-NMEA-Zeichenfolgen gesendet werden, was alles ist, was ich will.
Frage 1 Gibt es eine usbser.sys
Entsprechung für Mac OS X? Wenn ja, könnte ein Codex-Kext verwendet werden, um sicherzustellen, dass die Treiberübereinstimmung korrekt erfolgt?
Wenn dies nicht funktionieren würde, würde ich IOKit aus dem Benutzerbereich verwenden, um Nachrichten an das Gerät zu senden und zu empfangen. Ich habe noch Fragen, wie das im Detail funktionieren würde, weil ich die Dokumentation von Apple nicht vollständig verstehe. Wenn ein USB-Gerät angeschlossen ist, erfolgt eine Treiberübereinstimmung. Was passiert, wenn kein Treiber gefunden wird?
Frage 2 Könnte es sein, dass ein generischer USB-Treiber geladen wird, mit dem ich im Kernel vom Benutzerbereich aus "sprechen" kann? Woher weiß ich, dass der richtige Treiber geladen ist?
Frage 3 Ich habe gesehen, dass es in WWDC08 eine "Erste Schritte mit I / O Kit" -Session gab. Gibt es eine Möglichkeit, Zugang zu diesem Session-Video zu bekommen?
Ich habe einige Protokolle von USBProbe und den I / O-Registry-Auszug angehängt.
Irgendwelche Kommentare darüber, wie ich anfangen könnte, welche Dokumentation ein anständiges Tutorial bietet, wären sehr willkommen.
Ich habe Mac OS X Interna - A System Internals von Amit Singh, Apples Dokumentation "Erste Schritte mit I / O Kit", "I / O Kit Fundamentals Guide" und die USB-private untersucht Datenbeispiel.
ANHANG
USB-Sonde
%Vor%IO-Registrierung
%Vor%USB-Probe-Logon Gerät anhängen
%Vor%BEARBEITEN: Der Protokolldatei-Auszug aus der console.app wurde nach dem Anschließen des Geräts hinzugefügt
%Vor% Die Antwort, die ich von der USB-Mailing-Liste von Apple erhalten habe, ist, dass der Apple AppleUSBCDCACMData
-Treiber einen Fehler darin hat, seine Arbeit zu verhindern. Ich habe einen Fehler auf Apples Radar abgelegt und hoffe, dass es bald behoben wird.
Wenn Sie ein USB-Treiberprogrammierer sind, sollten Sie den Quellcode für das AppleUSBCDCDriver-Projekt herunterladen, der AppleUSBCDCDriver.kext, AppleUSBCDCACMControl.kext, AppleUSBCDCACMData.kext, AppleUSBCDCECMControl.kext, AppleUSBCDCECMData.kext enthält.
Was ich versprechen kann ist, dass Sie dieses Problem definitiv lösen können, indem Sie den Code reparieren und Ihren eigenen Treiber erstellen (Denken Sie daran, den Klassennamen des Treibers zu ändern.)
Was ich bestätigen kann, ist, dass der AppleUSBCDCDriver hauptsächlich gemäß der Spezifikation der Standard-Kommunikationsgeräteklasse entwickelt wurde und die Berücksichtigung durch das Apple-Entwicklungsteam beinhaltet, und dieses Problem sollte kein Fehler sein.
Unter Mac OS erfolgt die Treiberübereinstimmung hauptsächlich gemäß der inf.plist des Treibers, genau wie die .inf-Datei unter Windows.
Es gibt einen Workaround für den in AppleUSBCDCACMData
genannten Fehler. Sie müssen dem Deskriptor für die Anrufverwaltung eine Schnittstelle zuweisen. Du hast es auf 00 gesetzt.
Sie zeigen:
Comm Class Call Management Functional Descriptor
Raw Descriptor (hex) 0000: 05 24 01 01 00
Das fehlt und Zuordnung. Mit den ATMEL USB-Bibliotheken würde es so aussehen:
%Vor%