Aufgabenblatt 4b

Maustreiber, Teil 2

Abgabe: 21.12.2006

Vervollständigt den Treiber von Aufgabenblatt 4a zu einer eigenständigen MOUSE-Task, und bindet diese in das MINIX-I/O-System ein. Erstellt dazu /dev/mouse als neues character special file, über das interessierte Anwendungen die Maus abfragen und konfigurieren können. Implementiert in mouse.c eine Task-Routine

void mouse_task()
welche die Initialisierung der Maus mit mouse_init() durchführt und außerdem typische I/O-Systemaufrufe für /dev/mouse behandelt:
DEV_OPEN / DEV_CLOSE
Öffnen und Schließen des Geräts.
DEV_WRITE
Änderung des Faktors mouse_speed (1 Byte).
DEV_READ
Auslesen von X- und Y-Position der Maus, sowie bitkodierter Status der Mausknöpfe (zusammen 3 Byte).
Der Lesezugriff soll dabei blockierend erfolgen, sofern sich der Zustand seit dem letzten Zugriff nicht verändert hat. Andere Systemaufrufe sind ungültig (EINVAL). Wenn die Maus sich nicht korrekt initialisieren ließ, soll das Öffnen fehlschlagen (ENXIO). Beim Lesen bzw. Schreiben muss der übergebene Puffer die korrekte Größe haben, andernfalls soll der Vorgang fehlschlagen (EINVAL).

Hinweis: Die PRINTER-Task (/usr/src/kernel/printer.c) illustriert recht übersichtlich die Arbeitsweise eines einfachen Treibers.

Entfernt außerdem eventuell noch vorhandene printf-Ausgaben des Kerns von Aufgabenblatt 4a. Erstellt stattdessen zum Testen Eurer Lösung eine kleine Anwendung mousetest, die über /dev/mouse wiederholt den aktuellen Mausstatus ausliest und auf dem Bildschirm ausgibt.

Abgaben

Abzugeben sind der neue Kern, die Testanwendung mousetest, und alle hinzugefügten oder geänderten Dateien per E-Mail, sowie Dokumentation und relevante kommentierte Fragmente dazu auf Papier.