Aufgabenblatt 4a

Maustreiber, Teil 1

Abgabe: 14.12.2006

Schreibt einen MINIX-Treiber für PS/2-Mäuse, der es Anwendungen erlaubt, die Mausposition innerhalb der Text-Konsole abzufragen. Implementiert zunächst nur die Grundfunktion des Treibers, indem Ihr den MINIX-Kern um ein neues Modul mouse.c mit den folgenden Prozeduren erweitert:

void mouse_init()
  • Konfigurieren des PS/2-Controllers,
  • Zurücksetzen und Aktivieren der Maus,
  • Aufsetzen der Unterbrechungsbehandlungsroutine mouse_handler().
  • int mouse_handler(int irq)
  • Auslesen und Puffern der Daten, die an der PS/2-Schnittstelle anliegen,
  • Umrechnen der gesammelten Daten in eine Bildschirmposition.
  • Implementiert mouse_init() mit dem polling-Modus des PS/2-Controllers. Rechnet ferner die Mausbewegung in eine absolute Position für die Text-Konsole (80x25 Zeichen) um. Verwendet dabei einen variablen Skalierungs-Faktor mouse_speed, um die Mausgeschwindigkeit zu steuern.

    Bindet das Maus-Modul zunächst in den TTY-Task mit ein. Fügt dazu den Aufruf von mouse_init() in kernel/tty.c hinzu, direkt nach scr_init(). Zu diesem Zeitpunkt funktioniert auch printf(), verwendet dies vorläufig zur Ausgabe der aktuellen Mausposition. In der Folgeaufgabe wird die Grundfunktion dann zu einem eigenständigen Treiber erweitert.

    Zusatzaufgabe für Interessierte:
    Eine Anwendung wird in der Regel die Mausposition in Form eines Cursors auf dem Bildschirm anzeigen wollen. Dies geschieht normalerweise durch Ändern der Text-Attribute von Zeichen im Video-Speicher. Modifiziert die Bildschirmanzeige in /usr/src/kernel/console.c entsprechend. Beachtet dabei, daß MINIX mehrere virtuelle Konsolen bereitstellt.

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

    Weitere Informationen

    Wichtig ist die korrekte Ansteuerung der PS/2-Schnittstelle. Als Vorlage kann die Datei /usr/src/kernel/keyboard.c dienen, die den Tastatur-Teil des PS/2-Controllers ansteuert. Allerdings werden dort nicht alle Parameter "mausgeeignet" initialisiert. Beschreibungen der Funktion von Mäusen im Allgemeinen, Einzelheiten der PS/2-Schnittstelle sowie der Protokolle, mit denen Mausdaten an den Controller übermittelt werden, finden sich unter anderem auf den folgenden Web-Seiten: