Sourcecode Fortschritt
-
Rev. 420:
läuft mit 1GB stick (FAT16) und real PC
Probleme:
a) liest nicht mit VMWare
b) man kann die CBW nur einzeln durchführen (also reset CBW3 oder reset CBW1, aber nicht reset CBW1, reset CBW2, reset CBW3 ..., da fehlt leider noch etwas)bitte mal mit hardware testen, also real PC + real USB-MSD (sticks, card reader, usb-festplatten, ...)
Anm.: manche haben drei endpoints, also zwei IN, da wird noch evlt. der falsche endpointIN verwendet durch das parsen, da brauchen wir noch ein weiteres auswahl-kriterium, wahrscheinlich packetsize 512)
so wie es aussieht, benötigen wir doch handshakes: http://www.beyondlogic.org/usbnutshell/usb4.htm#Bulk
-
Rev. 421: Zwischensicherung usbMSD/scsi
reset und handshake eingebaut
real PC und 1GB usb stick gehtinsgesamt aber noch von der Lösung entfernt
-
Revision 422:
- vprintf und vsnprintf eingeführt, snprintf statt sprintf, strncat eingeführt
- obsolete Syscalls mit nop "eliminiert" (testch, getCurrentMilliseconds und getUserTaskNumber) und dazugehörende Funktionalität gelöscht
- kdebug repariert
- checkKQ_and_return_char heißt nun keyboard_getChar
- writeInfo hat jetzt auch dynamische Parameterliste
- Mausoutput in Infobar verlegt
- Formatierung&Aufräumarbeitenbitte in ehci.c, ab zeile 900, folgendes verwenden (Doppelausgabe vermeiden):
for(uint32_t sector=0; sector < 10; sector++) { settextcolor(9,0); printf("\n>>> SCSI: read(10)"); settextcolor(15,0); usbSendSCSIcmd(devAddr, usbDevices[devAddr].numEndpointOutMSD, usbDevices[devAddr].numEndpointInMSD, 0x28, sector, length, false); // dev, endp, cmd, LBA, transfer length, MSDStatus printf("\nIO:"); showStatusbyteQTD(DataQTD); waitForKeyStroke(); } }
-
Rev. 423:
USB/SCSI:
PrettyOS [Version 0.0.0.423] Console 1: EHCI Ports
--------------------------------------------------------------------------------
USB2: SET_CONFIGURATION 1
USB2: GET_CONFIGURATION 1
dev: 1 interface: 0 endpOUT: 2 endpIN: 1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''> SCSI: test unit ready
55h 53h 42h 53h 42h 42h 42h 42h 00h 00h 00h 00h 00hCommand Passed ("good status")
qTD Status: 00h OK (no bit set)> Press key to go on with USB-Test. <<<
> SCSI: read(10)
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
... <lauter Nullen>
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00hqTD Status: 80h Active - HC transactions enabled
> Press key to go on with USB-Test. <<<
--------------------------------------------------------------------------------Problem: warum läuft der Transfer mit dem read(10) nicht durch?
-
Rev. 424:
Zwischenstand zur Sicherung: Austausch von sleep gegen delay in performAsyncScheduler() ergibt positive resultate mit dem 1GB stick in VMWare.
Diese Funktion muss umgebaut werden.
-
Rev. 425:
diese version funktionierte mit test unit ready, read capacity, read(10) (VMWare, 1GB stick)
-
Revision 426:
- settextcolor(uint8_t, uint8_t) durch textColor(uint8_t) ersetzt. ACHTUNG: Userprogramme neukompilieren, da syscalls geändert (noch nicht mit allen Mitgelieferten gemacht)
- my_stdarg.h durch types.h ersetzt im Userbereich.
- einige Tabs beseitigt, sonstige Formatierungen & Kleinigkeiten
-
Rev. 427:
- testMSD(deviceAddr) ausgelagert aus ehci.c
- alte usb-Funktionen nicht mehr gebraucht (auskommentiert, kommen demnächst weg)
-
Rev. 428:
Sicherung vor "Umbau auf qTD umhängen bei stabilen QH"
Diese Version läuft mit 1GB usb-Stick auf VMWare
bitte beachten: for(uint32_t sector=1055; sector < 1060; sector++)
das ist 0x83E00 beginnend, hat bei mir in VMWare geklappt, zumindest ab 0x84000 (zweiter gelesener Sektor)
-
oh, hab ich ausversehen sektor 1055 bis 1060 committed? Das war ja eig. nur für meinen Stick gültig, damit ich mal was sehe...
-
Macht doch nix.
Erste Versuche des Einhängens von qTDs in QH endeten leider in Host System Error.
http://www.henkessoft.de/OS_Dev/Downloads/PrettyOS_rev428umgebaut001.zip <--- bitte check, vielleicht können wir die Vorgehensweise doch noch nutzen.
-
Revision 429:
- Ring-Strukturen angelegt (für Scheduler-Umbauten voraussichtlich nötig), analog zu list
- ODA aufgelöst (in Einzelvariablen und system)
- Alle Userprogramme neu übersetzt (wegen Userlibänderung)
- Formatierungen
- Smilie-Bug gefixt.
-
Diese Revision 429 funktioniert in VMWare mit einem 1GB stick komplett wie gewünscht: http://www.henkessoft.de/OS_Dev/Bilder/rev429.PNG
Wir suchen den Weg dies zu verallgemeinern.
-
Rev. 430:
Auslagerungen und Streichungen zur Erhöhung der Lesbarkeit und Wartbarkeit wurden vorgenommen:
ehciQHqTD.h/c: Queue Head (QH) und Queue Element Transfer Descriptor (qTD)
usb2_msd.h/c: USB 2.0 Mass Storage Devices (MSD)
-
Rev. 431:
Verbesserungen im Code bei ehci/usb
-
Rev. 432:
Zwischenstand nach Vorbild tatOS
siehe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-253016-and-start-is-71.htmltestMSD(): Umgebaut auf die dort verwendete Startreihenfolge.
-
Rev. 433:
In VMWare geht 1GB und 16 GB usb-stick, Test-PC zeigt noch qTD-status 0x80 (wird nicht ausgeführt)
Fehler im Bereich SCSI-Befehle wurden korrigiert (z.B. werden bei read im SCSI cmd nicht byte sondern blocks angegeben).
Bitte mit Simulationen und PC testen.
Dank an den Ersteller von tatOS. Es geht nichts über praktische Vorbilder mit vielen Kommentaren direkt im Code, sollten wir uns selbst ein Beispiel daran nehmen.
-
Ganz nützlich wär vlt. noch ein Link zu Tatos, denn Google rückt damit nur ungern raus, da es gerne nach Tattoos suchen möchte. (mit vielen "-"-Angaben schafft man es schon, aber es ist mühsam)
-
-
Rev. 434:
bei real PC hängt es im IN-Zweig von usbSendSCSIcmd