mal ein kurzer zwischenbericht:
ich hab mich am we mal dran versucht. mhh, eine vernümpftige (zusammenhängende) docu zu USB wäre gold wert. das beste was ich gefunden habe ist
USB in a NutShell - Chapter 1 - Introduction leider nur das wesentliche, hid, LPM, Ms Os2 muss man dann wieder separat suchen.
dann bräuchte man eigentlich auch einen USB hardware-analyser. ein software-analyser wie ich nutze ist suboptimal. low level protokolldaten auf bit-ebene werden nicht angezeigt. damit erfolgt die Aufzeichnung auch erst, wenn das gerät als usb device erkannt wird.
1) das beispiel lies sich problemlos übersetzen.
2) hab ich also die firmware draufgespielt und gedankenlos die hardware nach schematic verkabelt.
ging natürlich nicht. da ich aber die firmware verändert hatte um gpio 0 und 2 des esp-01 zu nutzen dachte ich es liegt daran.
ok, hab ich mir die original firmware genommen und gpio 4 und 5 angelötet. 8 pins auf 3,7 cm - das machen meine augen nicht mehr mit, habs quasi blind gemacht - sie lagen zum glück jeweils am rand.
ging natürlich immer noch nicht. erst jetzt bin ich auf die idee gekommen, daß vielleicht ein potentialausgleich angebracht wäre. also masse des usb auf die des esp-01 gelegt - und siehe da, es ging.
3) jetzt die USB Version im device descriptor von 1.1 auf 2.1 geändert - tote hose. mhh. nach stunden docu suchen/lesen hatte ich eine theorie. da die usb 2.1 erweiterung eigentlich gedacht war einen weiteren state (L1:Sleep) einzuführen und unter windows:
LPM is only enabled in the USB 3.0 driver stack that is loaded for xHCI controllers. It is not enabled for USB 2.0 driver stack that is loaded for legacy controllers (EHCI, OHCI, UHCI).
also das ganze mal an einen usb 2.0 port gesteckt, siehe da, das device meldet sich wieder.
da scheint also was auf low lvl protokollebene nicht zu passen. was genau? keine ahnung, das ist in asm geschrieben, das schiebe ich ganz weit nach hinten. so auf die schnelle, vermute ich, es hat was mit der PID 0000 zu tun, die ist in 2.1 dazugekommen und kennzeichnet, daß jetzt eine SubPID kommt. das ist natürlich nicht implementiert, gehandelt werden nur Token, Data und Ack PID's.
bleibt die frage, ob auf einem usb 2.0 port der bos descriptor überhaupt angefordert wird? mal sehen, wäre aber denkbar blöde implementiert wenn nicht.
4) jetzt hab ich nach dem bsp von
https://github.com/webusb/arduino/blob/gh-pages/library/WebUSB/WebUSB.cpp#L102 ein zusätzliches interface mit 2 endpoints eingefügt, den bos descriptor mit den capability deskriptoren und den Ms OS 2.0 deskriptoren.
=> damit geht WebUsb aber nur unter Windows?! oder benötigt linux/... die Ms OS 2.0 deskriptoren einfach nicht und geht einfach so?
so rangesteckt ging wieder nichts. bin mir nicht sicher warum. im usb trace wurde ein SELECT CONFIGURATION
https://msdn.microsoft.com/de-de/library/windows/hardware/ff540422(v=vs.85).aspx mit fehler quitiert. das ist meiner meinung nach eine USB-host sache, also der Treiber sagt dem host SELECT CONFIGURATION und der müsste dann was ans device senden(vermutlich ein SET_CONFIGURATION
USB in a NutShell - Chapter 6 - USB Requests) da kam aber nichts.
meine vermutung war, der treiber oder host kann mit einem usb-verbundgerät bestehend aus mit hid mouse, hid keyboard und vendor spec IF mit 2 BULK-endpoints nichts anfangen. also hab ich mal die beiden hid-interfaces rausgeschmissen.
jetzt ging es ein stück weiter, allerdings nicht viel weiter. also wieder docu gelesen. ahh, "Bulk transfers are only supported by full and high speed devices." ok das wird es sein. zum testen bin ich nicht mehr gekommen. mal sehn, vielleicht nächstes we.
das vendor spec If muss wieder raus, WebUsb muss device global gemacht werden, kommunikation über default endpoint 0