Danke für den Tip, aber das kenne ich schon. Guck dir mal in /drivers
die USBdrv.c an, grausam. Hab vergeblich versucht, aus diesem Gestrüpp
von void Pointern herauszufinden, wie die zugehörige Hardware denn
tatsächlich funktioniert und was man tun muß, um wenigstens die
Enumeration hinzukriegen, aber bei dieser!! Quelle ist das nur was für
Masochisten.
Irgendwelche Software-Usbsniffer nützen auch nix. Entweder ein Gerät
funktioniert bereits, dann sind sie überflüssig - oder es funktioniert
nicht, dann kriegen sie vom eigentlichen Datenverkehr auch bloß nix ab.
Bin inzwischen soweit, daß ich mir ein paar Log-Routinen in den uC
gesetzt hab. Resultat:
- Host sendet Reset (find ich OK)
- Host sendet Setup-Paket und fordert Device Descriptor an (ist auch OK)
- Device Descriptor wird zum Host gesendet
- Host antwortet mit ACK (find ich auch OK)
- Host schickt leeres Paket, wird mit ACK angenommen (= Status stage,
scheint OK zu sein)
- Host sendet Reset (wozu? versteh ich nicht)
- Host sendet Setup-Paket und liefert einem eine Adresse (Set Addr.)
- Adresse wird eingestellt
---> dann passiert für 500 ms garnix
Würde ich die Adresse nicht einstellen, dann wartet der Host ca. 5
Sekunden, bevor er das Spiel wiederholt. Irgendwas undokumentiertes
passiert also damit in der Hardware.
Dann wiederholt sich das ganze Spiel noch 2x und dann schmeißt der Host
das Handtuch und meint, das Device funktioniert nicht richtig.
Glaub ich ja gern, bloß wo ist der Fehler?
Guck ich im PC mit Usbview, dann sieht es so aus, als ob anstelle des
Device Descriptors nur Nullen angekommen wären. Kann aber auch sein, daß
das bloß ein Platzhalter ist.
W.S.