Hallo, ich versuche mit einem Controller (Coldfire V1) 2 USB Geräte anzumelden, diese sollten dann auch soweit halbweges getrennt im Controller behandelt werden. Zb. eine HID Maus + Tastatur + CDC Device. Alles jeweils allein ist ja kein Problem. Ich habe insgesamt 16Endpoints im Controller, daran sollte es also nicht scheitern. Wie stellt man es an das zb 2 verschiedene Geräte mit einem Controller gleichzeitig angemeldet werden. Normalerweise müsste man doch wie jedes einzelne Gerät jeweils den Report Descriptor haben und die entprechenden Diskriptoren dann im Konfig discriptor bündeln. So richtig finde ich auch keine Dokumentation wie man so ein Gerät entsprechend anmeldet bzw. wie das in der Firmware aussehen muß. MfG Sebastian
Guido Körber wrote:
> Du brauchst mehrere Interface-Descriptoren.
+ IAD (wegen CDC)
Moin, cdc = wirtueller com Port? da gabs irgend welche gemeinheiten in verbindung mit hid (Tastatur und maus) ggf mal das implementers froum von usb.org durchstöbern. da stand irgend etwas über Hid und virtuel Comport drinen. www.usb.org Jan Axelson (nein sie ist eine Frau!) hat dazu irgend wann mal was geschrieben.
termite wrote: > cdc = wirtueller com Port? > > da gabs irgend welche gemeinheiten in verbindung mit hid (Tastatur und > maus) Bei mir funktioniert CDC in Verbindung mit HID ohne Gemeinheiten. Nach was muss ich da suchen?
Hi grr usb.org löscht ältere einträge im Forum Ich will damit nicht sagen das es nicht geht. es gibt für das Problem nur mehrere Lösungen die mehr oder wenig gut funktionieren. Die gemeinhat hat irgend etwas mit dem Discriptor zu tun, und wie dieser aufgebaut werden sollte. einfach nen composite mit cdc hund hid ging irgendwie nicht. Hing glaubich damit zusammen, das cdc selber schon sowas wie ein composite device ist descriptortechnisch. Sie hat in dem beitrag auch mehrer lösungen vorgestellt. wie gesagt ich find den eintrag nicht mehr (den link schon nur der beitrag is wech), ist somit alles aus den untersten schubladen meines gedächtnisses ausgegragen. keine garantie auf richtigkeit.
CDC und iad descriptoren vertrugen sich mal nicht http://support.microsoft.com/kb/918365 Das währen eigentlich die links zu dem thema von Jan https://www.usb.org/phpbb/viewtopic.php?t=13308 https://www.usb.org/phpbb/viewtopic.php?t=13610 Bei denen liefs auch nicht auf anhieb. http://www.cygnal.org/ubb/Forum9/HTML/001227.html
termite wrote: > CDC und iad descriptoren vertrugen sich mal nicht > http://support.microsoft.com/kb/918365 Schnee von gestern, aktuell funktioniert es. > Das währen eigentlich die links zu dem thema von Jan > https://www.usb.org/phpbb/viewtopic.php?t=13308 > https://www.usb.org/phpbb/viewtopic.php?t=13610 "The topic or post you requested does not exist" > Bei denen liefs auch nicht auf anhieb. > http://www.cygnal.org/ubb/Forum9/HTML/001227.html Bei mir schon, da habe ich wohl noch etwas falsch gemacht. :-) Im Ernst: Das Einzige Problem war für mich das Finden des letzten Restes der Dokumentation. Es ging im Speziellen um "USB IAD Device Class Code and Use Model", das war unter den white papers zu finden. Da bin ich allein nicht drauf gekommen, musste mir auch erst von Jan Axelson helfen lassen. Das Implemtieren ging aber blasenfrei, ganz ohne Gemeinheiten.
Hallo, ich habe immer noch ein kleines Problem. Ich bekomme es einfach nicht hin ein device mit 2 Interfaces zum laufen zu bekommen. Die Kommunikation bricht höchst warscheinlich bei SET_CONFIGURATION ab. Siehe Screenshot von der USB Analyse. Die Descriptoren sehen so aus:
1 | //--- hier könnte ein Problem sein
|
2 | const hcc_u8 kbd_config_descriptor[] = { |
3 | USB_FILL_CFG_DESC(9+3 + 9+9+7 + 9+9+7, 2, 1, 4, CFGD_ATTR_SELF_PWR, 0), |
4 | USB_FILL_OTG_DESC(1, 1), |
5 | |
6 | USB_FILL_IFC_DESC(0, 0, 1, 0x03, 0x01, 0x1, 5), /* HID, boot, keyboard (3/1/1) */ |
7 | USB_FILL_HID_DESC(9, 0x0100, 0x0, 1, 0x22, sizeof(kbd_report_descriptor)), |
8 | USB_FILL_EP_DESC(0x1, 1, 0x3, 8, 0x20), |
9 | |
10 | USB_FILL_IFC_DESC(1, 0, 1, 0x3, 0x0, 0x0, 6), /* (HID, none, none) */ |
11 | USB_FILL_HID_DESC(9, 0x0100, 0x0, 1, 0x22, sizeof(geh_report_descriptor)), |
12 | USB_FILL_EP_DESC(0x2, 1, 0x3, 8, 0x20), |
13 | };
|
hier die zugehörigen Makros:
1 | /* This macro will evaluate to an array inicializer list with values of a
|
2 | interface descriptor. */
|
3 | #define USB_FILL_IFC_DESC(ifc_id, alt_set, no_ep, iclass, isubclass, iproto, strndx) \
|
4 | (hcc_u8)0x09u, STDD_INTERFACE, (hcc_u8)(ifc_id), (hcc_u8)(alt_set), (hcc_u8)(no_ep)\
|
5 | , (hcc_u8)(iclass), (hcc_u8)(isubclass), (hcc_u8)(iproto), (hcc_u8)(strndx)
|
6 | |
7 | /* This macro will evaluate to an array inicializer list with values of a
|
8 | endpoint descriptor. */
|
9 | #define USB_FILL_EP_DESC(addr, dir, attrib, psize, interval) \
|
10 | (hcc_u8)0x07u, STDD_ENDPOINT, (hcc_u8)((addr)&0x7f) | (((hcc_u8)(dir))<<0x7)\
|
11 | , (hcc_u8)(attrib), (hcc_u8)((psize) & 0xff), (hcc_u8)(((psize) >> 8) & 0xff)\
|
12 | , (interval)
|
Wenn ich mir nun so die Screenshots ansehe, vermute ich, dass das irgendwie kein Verbundgerät CDC und HID ist. Auf diese Art würde ich jedenfalls auch nicht funktionieren. Du brauchst mindestens 3 Interfaces, nicht 2 (1x Communication, 1x Data, 1x HID). Desweiteren scheint mir noch der IAD zu fehlen, der das Communication- und das Data-Interface zusammenfasst. Wie sieht der Device-Descriptor aus? Hast Du bekanntgegeben, dass Dein Gerät IAD verwendet? Außerdem: Für CDC spricht ein Interface Class 0x02 (Communication) und Subclass 0x02 (ACM). Das andere Interface spricht Class 0x0A (Data) und Subclass 0x00 (undefined). Bei Dir sehe ich aber Class 0x00, Subclass 0x00 und Class 0x02, Subclass 0x00. Wo bleibt da das HID? Dazu haben beide Interfaces noch unterschiedliche Alternate Settings. Was bezweckst Du damit?
Ich wollter erst mal nur eine Tastatur + Ein Generic Hid Device Implementieren. Wenn das von derFirmware her richtig läuft eventuell noch das CDC dazu.
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.