Sourcecode Fortschritt
-
0.0.5.29 - Rev: 1695
usb_hub.h/c: #define für Konstanten eingeführt
siehe usb2 spec Table 11-15, 11-16, 11-17
-
0.0.5.30 - Rev: 1696
ehci: structs/functions for periodic list (for interrupt transfers and isochronous transfers) started
-
0.0.5.31 - Rev: 1697
Interrupt Transfers versuchsweise am Hub in ehci gestartet (auskommentiert)
Anmerkung: ///#define _UHCI_ENABLE_ in os.h, weil es störte (Kreuzempfindlichkeit
^^)./// TEST
// usb_InterruptTransfer(hub->device, hub->endpointInterruptHUB);
///TEST
befindet sich in usb_hub.c, Zeile 130.
-
Version 0.0.5.32:
- USB: Interrupt-Code aufgeräumt; Periodic list initialisiert
- Cleanup beim abziehen von Hubs verbessert
-
Version 0.0.5.33:
----- Experimentelle Version, USB derzeit instabil -----
- USB: Control-Transfer-Typen in Funktionen usb_controlIn(), usb_controlOut() und usb_controlSet() zusammengeführt
- USB-HC: Trennung von rootPorts und otherPorts aufgehoben, Initialisierung von hc_port_t in usb_hc.c zusammengefasst
- htons()/ntohs() in Inline-Assembler implementiert (xhcg)
- Bugfix: Laden von Dateien funktionierte nicht zuverlässig
- Bugfix: Speicherzugriffsfehler in usb_getHubStatus behoben
- Bugfix: Einrückungen bei strg+d (Portliste) korrigiert
-
0.0.5.34 - Rev: 1700
In setupHub wurde die Hilfsfunktion usb_isHubPortConnected verwendet, sodass nun angesteckte Devices korrekt einem setupDevice zugeführt werden.
usb_hubWatchdog (usb_hub.c) wurde in ckernel.c auskommentiert, da diese Funktion noch nicht wie gewünscht arbeitet. TODO: korrigieren oder ergänzen/ersetzen durch interrupt-Transfer
-
0.0.5.35 - Rev: 1701
- Analytische Funktion usb_showHubPortStatus geschaffen, damit wurde der versteckte Fehler lokalisiert!
- Fehler in usb_getPortStatus(...) beseitigt (versehentlich Zeiger auf Zeiger, ein Klassiker bei void* buffer)
- Zeit im Einzeldurchlauf bei ehci_addToPeriodicScheduler von 10 auf 30 ms erhöht. Damit läuft der interruptTransfer (zur Zeit nur Demonstration, noch keine Verwendung des Resultats) sicherer
- hubWatchdog auf jede zweite Sekunde eingestelltTODO: Weitere Bemühungen zur Stabilisierung (sicherer Ablauf, Vermeidung von #PF, reboots und usb errors, evtl. Einsatz des One-Byte-Ergebnisses des Interrupt-Transfers).
Danke an MrX für die Vereinfachung des ports-Handlings (funktioniert gut)
-
0.0.5.36 - Rev: 1702
Neu eingeführt: usb video class (usb_video.h/c)
-
0.0.5.37 - Rev: 1703
usb_video.h/c weiter ausgebaut, Auslesen des configuration-descriptors bez.Video class details erweitert
Bsp. webcam: http://codepad.org/dxW5cYMX
-
0.0.5.38 - Rev: 1704
Config Descriptor der Webcam Chicony Corp. QEye 2.0M pixel kann mit dieser Experimentalversion bezüglich der Video Class vollständig analysiert werden.
Auf eine Zuordnung wurde noch verzichtet, da für jedes Interface ein usb_vid_t angelegt wird, was noch nicht allzu sinnvoll erscheint. So hat diese webcam alleine sieben interfaces (und damit usb_vid_t) für endpoints mit verschiedenen max packet sizes: 128, 512, 1024, 2816, 3072, 4992, 5120
Die Architektur muss die operativen Abläufe unterstützen, und video/audio Daten müssen außerhalb usb.h/c abgelegt/verarbeitet werden.
-
0.0.5.39 - Rev: 1705
usb.h/c:
void usb_setInterface(usb_device_t* device, uint8_t alternateInterface, uint16_t interfaceID) uint8_t usb_getInterface(usb_device_t* device, uint16_t interfaceID)
Damit kann man im Rahmen des usb-Bandbreitenmanagements beim Video Streaming die passende Datenübertragungsgröße auswählen (alternative Interfaces mit max packet sizes: 128, 512, 1024, 2816, 3072, 4992, 5120).
usb_video.h/c:
void usb_vidshowUncompressedFormatDescriptor(usb_vidUncompressedFormatDesc_t* descriptor)
-
0.0.5.40 - Rev: 1706
usb_video.h/c: SelectorControlRequests vorbereitet: Parameterblock, ProbeControl, CommitControl
TODO: Ausführen/Testen der Abfolge:
probe control (SET_CUR)
probe control (GET_CUR)
commit control (SET_CUR)
commit control (GET_CUR)
setInterface(operatives alternatives Interface)
==> Video Streaming
-
Version 0.0.5.41:
- devmgr: Deutlich erweitert: Ausgabe von ACPI-Informationen (--showacpi); Anzeige von PCI-Class-Informationen
- readme: Ausgabe von Lizenz
- USB: usb_destroyMSD nur bei unterstützten MSD-Typen ausgeführt; nur ein usb_video_t pro Gerät angelegt
- documentation/PrettyOS.odt: Formulierungen verbessert
- Bugfix: IPC forderte 1 Byte zuviel bei IPC_NOTENOUGHMEMORY
- Bugfix: Auslesen von Nak-Counter bei EHCI korrigiert (Information liegt nicht im ersten qTD, sondern im transfer overlay des QH)
-
0.0.5.42 - Rev: 1708
usb_video.h/c: Ausführen von usb_vidProbeControl(device, VID_GET_CUR, selectorUnitID, vidControlInterfaceID, &vs_pb)
Transfer wird fehlerlos ausgeführt, Daten erhält man gerätespezifisch (Test mit 2 Webcams). Nun sind die Grundlagen gelegt.
-
0.0.5.43 - Rev: 1709
usb_video.h/c: weiter ausgebaut
Bisher werden am isochronous endpoint (es existieren mehrere alternative Interfaces) leider noch keine Daten erhalten.
Das Format der erwarteten Dateien wird bei den getesteten Webcams YUY2 (4:2:2) sein.
-
0.0.5.44 - Rev: 1710
Isochronous transfers mit iTD bei ehci eingebaut. Status-Bits der 8 Transactions im iTD werden zur Kontrolle ausgelesen und angezeigt. Bisher wurden von den webcams noch keine speziell erkennbaren Streaming-Daten empfangen. Daher experimentelle Version.
-
0.0.5.45 - Rev: 1711
Fehler im Zusammenhang mit der Erstellung von ehci_iTD_t* (iTD für isochronous transfer) im Rahmen des usb-Transfers wurden behoben. Vielen Dank an MrX für seine Hinweise.
Leider noch keine Daten von den webcams. Ein schwieriges Feld.
-
0.0.5.46 - Rev: 1712
Weitere schwerwiegende Fehler im Setzen der low bits der ersten drei iTD buffers beseitigt. In buffer[2] bis buffer[6], auf die das iTD zeigt, kommen nun erste Daten an. In buffer[0] und buffer[1] sind bisher Nullen. Format sollte YUY2 == YUYV (Y0 Cb Y1 Cr) sein. 4 Byte gehören jeweils zusammen und beschreiben zwei Pixel.Gelesen werden im Isochronous Transfer 3072 Byte:
usb_IsochronousTransfer(device, video->endpointIsochronous[video->countIsoEP-1], 3*1024);
`
endpoint: 1 mps: 5116 interval: 1 packetsize: 5116
Transact. 0: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 1: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 2: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 3: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 4: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 5: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 6: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 7: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transfer successful.
00 00 00 00 00 DC 2A D0 00 7F 07 2B 7B 2C 7F 2D
7D 2E 7C 2D 7A 2D 7E 2E 78 30 7B 31 77 30 7B 30
78 30 7D 31 7B 31 80 33 79 34 7E 34 78 35 7F 35
7A 35 7B 35 7C 36 7C 36 7A 37 7D 38 77 3A 7E 3A
78 3A 7E 3B 7A 3B 7E 3C 79 3D 7E 3E 77 3F 7D 40
77 3F 7C 40 7D 42 7D 41 7B 44 7C 47 76 49 7B 48
77 48 7D 4A 79 4B 7C 4D 78 4E 7F 4F 77 52 7C 52
75 51 7F 55 75 59 80 5A 74 5C 80 5E 79 60 81 65
79 68 7E 6C 7A 6E 7D 70 75 71 82 76 78 78 81 7A
77 7C 80 7D 73 7E 80 80 78 84 84 83 71 87 82 89
74 86 84 86 79 87 88 89 78 8B 81 8B 75 89 81 87
79 88 81 87 7A 86 83 8C 79 8C 80 89 75 8B 80 8C
75 8B 80 8C 76 8B 80 8F 7B 8B 80 8B 79 8E 80 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...
interface: 2 alternate endpoint: 11`
Ein Anfang ist gemacht. USB Video Class, EHCI und Isochronous Transfer spielen erstmalig erfolgreich zusammen. Vielen Dank an MrX für das Code Review!
-
0.0.5.47 - Rev: 1713
Das Parsen des gesamten config desc. wurde nach usb_video.c verlegt. Dort werden Parameter in usb_video_t eingelesen.
-
0.0.5.48 - Rev: 1714
- buffer im iTD werden mit PG/offset durchgehend bestückt
- daten aus buffer 0 kopiert
- test mit speedlink webcam sind interessant
`endpoint: 1 mps: 5116 interval: 1 packetsize: 5116Transact. 0: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 1: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 2: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 3: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 4: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 5: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 6: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
Transact. 7: Active: 0 Data Buffer Err: 0 Babble: 0 TransactionError: 0
0C 8C 1C 89 79 00 25 D6 79 00 07 07 96 79 A9 86
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
53 FF 00 F0 53 FF 00 F0 53 FF 00 F0 53 FF 00 F0
53 FF 00 F0 53 FF 00 F0 53 FF 00 F0 53 FF 00 F0
53 FF 00 F0 53 FF 00 F0 53 FF 00 F0 53 FF 00 F0
53 FF 00 F0 53 FF 00 F0 53 FF 00 F0 53 FF 00 F0
53 FF 00 F0 53 FF 00 F0 53 FF 00 F0 53 FF 00 F0
Broken free: E00388C0h
Transfer successful.
0C 8C 1C 89 79 00 25 D6 79 00 07 07 96 79 A9 86
AC 7F AB 89 AA 81 AB 86 B0 7F AC 87 97 7F A6 84
CA 89 C7 80 C6 87 C6 80 C5 8A C0 81 C2 89 C7 80
A1 83 53 8F 69 7B 6A 93 6B 7C 6B 91 66 7B 5F 92
65 80 65 90 63 7B 64 94 64 79 65 8E 63 7B 5F 93
5D 7E 5F 91 5D 7C 5D 8F 5C 7D 5B 92 5B 7E 58 8C
58 7E 55 8E 57 7C 55 8C 1B 91 6E 84 59 7F 90 86
8D 7E 8F 84 8D 7F 8D 83 96 80 02 7E 1A 90 18 80
17 8E 17 81 17 8D 1A 82 1B 91 1D 85 47 89 8C 7E
B2 85 76 81 AA 87 A5 82 A7 85 A8 7F 96 8A 78 85
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 `