Sourcecode Fortschritt


  • Mod

    Rev. 415:
    ... zunächst der bisher stabile OUT/IN SCSI-Command-Transfer mit 0x00.

    ///////// Test Suite 1: send SCSI comamnd "test unit ready(6)"
    
                         settextcolor(9,0); printf("\n>>> SCSI: test unit ready"); settextcolor(15,0);
    				     usbTransferSCSIcommandToMSD(devAddr, usbDevices[devAddr].numEndpointOutMSD, 0x00);
    
                         // #ifdef _USB_DIAGNOSIS_
    				     printf("\nIO:    "); showStatusbyteQTD(DataQTD); waitForKeyStroke();
                         // #endif
    
                         settextcolor(9,0); printf("\n>>> get status"); settextcolor(15,0);
    				     usbTransferGetAnswerToCommandMSD(devAddr, usbDevices[devAddr].numEndpointInMSD);
    
                         // #ifdef _USB_DIAGNOSIS_
    				     printf("\nIO:    "); showStatusbyteQTD(DataQTD); waitForKeyStroke();
                         // #endif
    

  • Mod

    rev. 416:

    mit VMWare läuft diese Version

    Wichtige Erkenntnisse: 1) handshakes stören 2) in SCSI: Big Endian!

    Warum hardware damit noch nicht störungsfrei läuft, das liegt an qTD/QH.


  • Mod

    rev. 417:

    Version läuft mit VMWare, VBox, real PC. Erfolgreiche Übetragungen leider noch nicht überall.

    Leider noch Fehlermeldungen, deren Ursache heraus gefunden werden muss.

    a) USB-Interrupt kommt nicht (USB-Übertragung nicht vollständig)
    b) halted - serious error (qTD status)


  • Mod

    rev. 418:

    leider spielt die wartezeit am ende von performAsyncScheduler() eine Rolle. Zu kurz oder zu lang führt zu "command failed" bei "test unit ready" bzw. zu einem nicht vollständigen USB-Transfer (kein USB-Interrupt). Ich habe jetzt mal auf 80 ms eingestellt.

    Aber hier ist wohl ein Komplettumbau unseres async-Schedulers notwendig.


  • Mod

    rev. 419: zwischenschritt: Umbau auf zwei QH (für den IN and OUT endpoint) mit jeweils angehängten qTD-Ketten.


  • Mod

    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 😉


  • Mod

    Rev. 421: Zwischensicherung usbMSD/scsi

    reset und handshake eingebaut
    real PC und 1GB usb stick geht

    insgesamt 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äumarbeiten

    bitte 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();                     
    }                   
    }
    

  • Mod

    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 00h

    Command 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 00h

    qTD 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?


  • Mod

    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.


  • Mod

    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


  • Mod

    Rev. 427:

    - testMSD(deviceAddr) ausgelagert aus ehci.c
    - alte usb-Funktionen nicht mehr gebraucht (auskommentiert, kommen demnächst weg)


  • Mod

    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...


  • Mod

    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.


  • Mod

    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.


  • Mod

    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)


  • Mod

    Rev. 431:

    Verbesserungen im Code bei ehci/usb


Anmelden zum Antworten