Hallo Ich habe einen Host Adapter auf einem Nucleo L476 aufgebaut. Das Grundgerüst stammt aus dem CubeMX. Es werden CDC und HID (Tastatur/Generic) unterstützt. Damit sollen drei verschiedene Geräte Typen geprüft/konfiguriert werden, ohne jedes mal am PC als neues Gerät erkannt werden zu müssen. Die Daten der Geräte werden per USB UART vom Nucleo an den PC zum Prüfprogramm weitergereicht. Da die Beispiele nur sehr einfach gehalten sind, musste ich schon einiges anpassen. Devices mit mehreren Konfigurationen werden gar nicht unterstützt. Auch gibt es kein Beispiel für den Report Transport, z.B. setFeature. Eigendlich läuft alles. Aber ein altes Produkt benutzt als HID Tastatur einen zusätzlichen Endpoint, um dort die Tastenbelegung verändern zu können. Das schreiben an einen für HID nicht vorgesehen Endpoint wird immer auf Endpoint 0 (Stall) oder 3 (Tastatur->nutzlos) umgeleitet. Mir ist nicht klar, wo in der langen Kette der Aufrufe bis zum eigentlichen schreiben, es zum verbiegen der Endpoint Adresse kommt. Ich habe in kein Library File eingegriffen. Alles, um meine speziellen Zugriffe auszuführen erfoglen über usb_host.c, die dafür ja vorgesehen ist. Hat hier jemand schon einmal Endpointer mit der STM Host Library beschrieben und kann mir einen Tipp geben?
Rainer F. schrieb: > Eigendlich läuft alles. Aber ein altes Produkt benutzt als HID Tastatur > einen zusätzlichen Endpoint, um dort die Tastenbelegung verändern zu > können. Sitzt der dann nicht auch auf einem anderen Interface, und wird dadurch NICHT als HID angesprochen..? Wie sehen Interface und Endpoint Deskriptoren aus? In dem Falle müsste man in den STM32 Code einen zusätzlichen "Treiber" für dieses Interface einbauen.
Ja, es ist eine zweite Konfiguration eines HID ohne SubClass. Es wird enumeriert und bekommt ein anderes Interface zugeordnet. Ich kann es als aktives Device auswählen (Eine Funktion mußte extra dafür erstellt werden. Das Beispiel nimmt immer die erste Konfiguration) und die Rohdaten (Generic) lesen. In der Struktur hUsbHostFS ist unter dieser Konfiguration der weitere Endpoint auch in der Liste eingetragen.
Ich glaube du verwechselst Configuration mit Compount Device. Es ist richtig dass die Spec mehre Konfigurationen unterstützt die beim SetConfig ausgewählt werden können. Ein solches Device wäre aber sehr ungewöhnlich, ich hab damit Mal experimentiert und aufgegeben. Win unterstützt sowas sowieso nicht. Sehr viel wahrscheinlicher ist ein Compount device, also ein Device was mehrere Interfaces hat. Dann wird unter win auf Interface Ebene der Treiber zugeordnet. Zeig die Deskriptoren.
:
Bearbeitet durch User
Da ich mit USB nicht so bewandert bin kann das mit den Namen schon sein. Das Device ist unter Windows ein USB-Verbund Gerät. Zwei mal HID. Eimal SubClass 0 (Generic), einmal Class 3 Tastatur. Die Host Software trägt beide in seine Liste (ItF_Desc[x]) ein. Die Endpoints dann entsprechend unter Ep_Desc[x]. Die Software kann verschieden Classes bedienen. Aber immer nur eine alleine. Welche das ist, bestimmt die Reihenfolge, wie ein Device diese ausgibt. Ein HID und CDC Verbund Gerät kann benutzt werden. Aber es wird immer das aktiv, was in ItF_Desc[0] eingetragen wurde. Häng also vom Hersteller des Device ab. Das habe ich flexibel gehalten und kann es durch umsortieren des Arrays selbst bestimmen. Bei meinem Device brauch ich das gar nicht tun. Es gibt die Diskriptoren für HID(SubClas0) immer zuerst aus. Es wird also als aktives Gerät von der Host Software bedient. Ich will nur ein write auf Endpoint 2 hinbekommen. Also keine HID Funktionalität wie SetReport o.ä. benutzten. An einem Windows Rechner ist so eine einfache OUT transaction z.B. mit SimpleHIDWrite möglich. Aber einen solchen low Level write bekomme ich mit der STM Software nicht hin
Zeig bitte mal den Deskriptor Satz dieses Device. Das geht ganz gut UsbDevView. Beherrscht dein Host das Pipe Konzept? Wenn der Host nur mit dem ersten Interface klarkommt, bleibt dir nichts anderes übrig als das zu erweitern... Setze mal einen GetFeature für den Endpoint auf diesem Interface ab. Was kommt da? Ev musst du den Endpoint einfach mit SetFeature freischalten. Das wäre dann aber eine Spec Verletzung da bei SetConfig alle Eps betriebsfähig gemacht werden müssen. Das wird aber gern Mal vergessen und win handled das automatisch.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.