vusb-user schrieb:> ist es möglich ein USB-Gerät mit 2 HID´s (Tastatur/Maus) als einen> Endpunkt mit folgender Description zu betreiben:
Ist das eine Frage oder eine Feststellung?
vusb-user schrieb:> Allerdings zeigt USBlyzer Fehler "URB Bulk or Interrupt Transfer> failed" und die Verbindung reißt kurzzeitig ab (Übertragung abgehackt).
Ich tippe auf die Hardware. Bulk gibt es nur bei high- oder fullspeed
daher auszuschließen.
Poste mal deine ganze Schaltung + gesamten Sourcecode.
Lehrmann Michael schrieb:> Bulk gibt es nur bei high- oder fullspeed> daher auszuschließen.
Bei V-USB auch bei "Einzelgeräten" so gesehen: z.B. AVR-CDC von
http://www.recursion.jp/AVR-CDC/ macht das auch so.
Die Leute schreiben da auch sowas wie "[...]goes somehow beyond the
spec[...]".
Komischerweise scheinen Windows-Maschinen den Bulk-Transfer bei LowSpeed
in mehr Fällen nicht zu schlucken wie Unixoide Maschinen.
Weißt du mehr dazu bzw. warum das so ist, Michael?
mfg mf
Anscheinend gehts nun... der Timer0 hat mir übel mitgespielt ;)
Allerdings würd mich folgendes noch interessieren.
Lehrmann Michael schrieb:> Ist das eine Frage oder eine Feststellung?
Eine Vermutung. Es wäre sehr schön wenn mir jemand Endpoint und
Report_id in einem Satz erklären könnte...Habe zwar "Jan Axelson"
angeschaut aber so klar sind die Begrifflichkeiten doch nicht in Bezug
auf einen Verbund von Maus + Tastatur zum Beispiel.
Im Buch habe ich generell wenig über Verbunde gefunden.
Der Datenaustausch zwischen Host und Device erfolgt über Pipes
(Datenkanäle). Eine Pipe endet auf Device-Seite in einem Endpunkt.
Dieser Endpunkt besteht aus Datenpuffer und ein paar Registern. Mit
Ausnahme vom Endpunkt 0 (bidirektional) erfolgt der Datenaustausch in
einer Pipe immer nur in eine Richtung - also entweder zum Host oder zum
Device. Um beide Richtungen zu bedienen werden deshalb viele
Schnittstellen auch mit mindestens 2 Endpunkten ausgeführt.
Näheres zu Maus und Keyboard findest Du hier:
http://www.cygnal.org/ubb/Forum9/HTML/001381.html
Gruß Potter
Beim Datenaustausch über HID werden die Daten in sog. Reports
übertragen. Oft hat man lediglich einen INPUT/OUTPUT/FEATURE-Report je
HID und man muss keine ID angegeben (als ID wird automatisch 0
verwendet).
Will man jetzt aber z.B. die zu sendenden Daten weitergehend
strukturieren, so definiert man mehrere Reports im Descriptor - dann
aber mit unterschiedlichen ID's.
PS: Deine Descriptoren sind unvollständig. Maus-Buttons und
Keyboard-LED's funktionieren so nicht.
Maus:
Mini Float schrieb:> Warum meckert eigentlich noch keiner, dass der Link falsch ist?
Warscheinlich weil es in diesem Thread nicht um CDC-Anbindung geht, wäre
sinnvoll einen neuen aufzumachen ;)
Potter schrieb:> Will man jetzt aber z.B. die zu sendenden Daten weitergehend> strukturieren, so definiert man mehrere Reports im Descriptor - dann> aber mit unterschiedlichen ID's.
Verstehe ich das richtig, dass man weder mehrere Endpoints noch
unterschiedliche Report_id´s braucht um mehrere HID´s zu behandeln?
Nur der Übersichtlichkeit werden die Reports aufgeteilt anstatt alles am
Stück zu senden.
LED´s habe ich bei absichtlich weggelassen, da das Gerät keine hat.
Sollte HID ja keine Probleme machen - Maustasten wegen der Vereinfachung
erst mal unter den Tisch gekehrt - trotzdem Danke für den Hinweis!
Es wird hier nicht alles am Stück gesendet. Dein Beispiel von oben
verhält sich so, dass Du entweder die Maus, oder das Keyboard zum Leben
erweckst. Je nachdem, welchen Report (welche ID) Du sendest. Dass man
hierzu nur einen Endpunkt braucht, siehst Du richtig. Es werden nämlich
nur Daten zum Host gesendet.
Wenn Du jetzt auch noch das Schalten der Keyboard LED's implementieren
wolltest (Daten vom Host zum Device), dann benötigst Du auch noch einen
weiteren Endpunkt - nämlich für die Transfer-Richtung Host - Device.
Nun sollte alles klar sein, besten Dank nochmal.
Wenn alles funktioniert kümmer ich mich evtl. noch um einen OUT-Endpoint
- bis dahin...
Wünsche euch noch schöne Osterfeiertage.