Sourcecode Fortschritt
-
version = "0.0.3.109 - Rev: 1310"
ohci - Zwischenstand
-
version = "0.0.3.110 - Rev: 1311"
ohci.h/c: erweitert um einige Port-Funktionen analog EHCI.
Transfer läuft aber noch nicht (Fehler: Device not responding, wie bisher)
-
version = "0.0.3.111 - Rev: 1312"
ohci.c: Die erste Transaktion verläuft inzwischen nach Status-Meldung erfolgreich! Nun sind wir - auch bei ohci - endlich im Thema usb angekommen.
(ehci läuft schon lange)Hinweis: Wer EHCI testen will, bitte erst in os.h per define aktivieren (versehentlich noch ausgeschaltet)
TODO: Abarbeiten der TDs analysieren unter Berücksichtigung, dass "done" TDs ausgehängt werden.
-
version = "0.0.3.112 - Rev: 1313"
Reihenfolge verändert/ergänzt in ohci_setupUSBDevice:
- usbTransferDevice
- usbTransferEnumerate
- usbTransferDeviceLeider schlagen irgendwo noch interrupts zu.
Aber man sieht bei dieser Version (mit Glück), dass die In-Transaktion erfolgreich durchgeführt werden kannTODO: bitte helfen, den Interrupt-Fehler zu finden, damit wir wieder vernünftig testen können
if (val & OHCI_INT_RHSC) // root hub status change { // printf("Root hub status change."); handledInterrupts |= OHCI_INT_RHSC; scheduler_insertTask(create_cthread(&ohci_portCheck, "OHCI Ports")); }
Hier liegt wohl ein Problem. VBox hat hier alleine schon 8 Ports.
Weiter geht's hier:
void ohci_portCheck() { //... if (o->OpRegs->HcRhPortStatus[j] & OHCI_PORT_CCS) // connected ohci_showPortstatus(o,j);
Das Problem (Absturz VBox) beginnt hier:
ohci_resetPort(o, j);
-
version = "0.0.3.113 - Rev: 1314" (experimentelle Version)
Verbesserte Version: Damit sieht man die ersten erfolgreichen Transaktionen (setup, in). Anschließend "freeze" (VBox muss abgeschossen werden).
Freeze ist hier:
o->ports[portNumber]->num = 1 + usbTransferEnumerate(&o->ports[portNumber]->port, portNumber);
Korrekte Darstellung der usb-Version 01.10:
printf("\nUSB %y.%y\t", BYTE2(usbDev->usbSpec), BYTE1(usbDev->usbSpec));
-
version = "0.0.3.114 - Rev: 1315"
ohci funktioniert! Problem ist momentan im usb-Transfer enumerate (set address)
screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev.1315_OHCI_USB.PNG
Endlich!
Nun müssen wir den Freeze finden und das usb-Problem, aber das ist sicher machbar, wenn man endlich mal die übertragenen Daten sehen kann.
-
version = "0.0.3.115 - Rev: 1316"
endlich freeze-free (delay anstelle sleep...)
sof-check in jetziger Form gestrichen (Programm ist nicht in die while-loop eingetreten). In spec steht: "Perform SOF check" und "Time available?". Diese beiden Punkte werden bisher ignoriert.Probleme:
- Bei EHCI/UHCI- oder EHCI/OHCI-Übergang "prellt" das OS, sodass schnell alle 10 Konsolen (0-9) verbraucht sind.
- Bei OHCI klappen die IO-Transfers mit 0 byte (handshake) noch nicht (egal ob OUT oder IN)
- OHCI und PC läuft noch nicht (freeze wegen ständiger interrupts)
- Emulator VBox (0.4.12) auf Host Win XP bei USB völlig unzuverlässig (ehenkes)
-
version = "0.0.3.116 - Rev: 1317"
ohci: wieder testbar mit VBox
if (val & OHCI_INT_RHSC) // root hub status change { // printf("Root hub status change."); handledInterrupts |= OHCI_INT_RHSC; // scheduler_insertTask(create_cthread(&ohci_portCheck, "OHCI Ports")); ohci_portCheck(); }
-
version = "0.0.3.117 - Rev: 1318"
void ohci_portCheck(ohci_t* o)
Problem: bei dem test-PC: dauerinterrupt root hub change bei ohci 0, port 3
(EHCI nicht enabled, s. os.h)
-
version = "0.0.3.118 - Rev: 1319"
ohci.c: ohne enumeration (set address), also mit 0, läuft der ohci die control transfers durch.
SET ADDRESS läuft anders als andere control transfers. Nummerierung wird erst nach erfolgreichem Transfer ausgeführt.
-
version = "0.0.3.119 - Rev: 1320"
ohci.c: issueTransfer überarbeitet, sodass man die Wartezeiten nach transaction und transfer getrennt einstellen kann.
Der letzte TD wird momentan nicht ausgeführt, weil er der letzte ist! (einfach einen dummy handshake dahinter setzen)
-
version = "0.0.3.120 - Rev: 1321"
ohci.c: Durch Anhängen eines Dummy-TD in ohci_issueTransfer und check der conditions nach Ende des Transfers klappt nun auch set_address (Enumeration).
Meilenstein: Die USB 1.1 control-Transfers (mit ohci) laufen auf VBox!
screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev.1321_OHCI_USB.PNG
-
version = "0.0.3.121 - Rev: 1322"
usb2_msd.c:
curEHCI bzw. showUSBSTS(e) in diesem Modul eliminiert, um es auch für ohci- und uhci-bulk-Transfers benutzen zu können.
-
version = "0.0.3.122 - Rev: 1323"
ohci.c: bulk transfers laufen test-weise (tranfer/transaction system funktioniert auch dort)
-
version = "0.0.3.123 - Rev: 1324"
ohci.c: recycling der bulk-ED/TD Ressourcen
Nun kann man ttt mittels usb 1.1 mit ohci laden!
-
version = "0.0.3.124 - Rev: 1325"
ohci.c:
- recycling der control-ED/TD
- "disk" und "usb-device" entfernen beim Entfernen einer USB Mass Storage Device vom Port (usb slot) <--- funktioniert noch nicht, da zur Zeit nur connected behandelt wird
-
version = "0.0.3.125 - Rev: 1326"
ohci.h/c: "device removed" wird nun wieder angezeigt (aber nur bei Ports, bei denen vorher ein connect war) und die Disk-Liste aktualisiert.
-
version = "0.0.3.126 - Rev: 1327"
list.h/c: Zahl der Elemente kann nun erfragt werden (Test in ohci.c)
-
version = "0.0.3.127 - Rev: 1328"
Formale Änderungen
-
Version 0.0.3.128:
- IPC verbessert:
-- Funktional nun fast vollständig
-- Strg+i zeigt Inhalt der IPC an
-- IPC-Syscalls implementiert
- EHCI AsyncScheduler verbessert. Kein Start-Stop mehr. (-> Deutlich beschleunigt, aber nicht 100% zuverlässig)
- Codestil und kleinere Optimierungen