Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultšt Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Betriebssysteme
 
  Vorlesung
    - UnivIS-Infos
    - Inhalt
    - Folien
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Ergänzendes Material
    - Terminübersicht
    - Aufgaben
       * Umgebung
       * Typische Fehler
       * A 1
       * A 2
       * A 3
       * A 4
       * A 5
       * A 6
       * A 7
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2007/08  >  Betriebssysteme  >  Übungen  >  Aufgaben  >  Aufgabe 6  >  Klasse Keyboard

Klasse Keyboard

Einordnung in die Gesamtstruktur

Modul
device
Basisklassen
Gate und Keyboard_Controller
abgeleitete Klassen
Guarded_Keyboard
Erstellungszeitpunkt
Aufgabe 2
verändert in
Aufgabe 6
Dateien
keyboard.h keyboard.cc

Beschreibung

Die Klasse Keyboard stellt die Abstraktion der Tastatur dar. Sie sorgt für die korrekte Initialisierung und vor allem für die Unterbrechungsbehandlung. Außerdem ermöglicht die Klasse Keyboard die Tastaturabfrage durch die Anwendung.

öffentliche Methoden

void plugin ()
Mit dieser Methode wird die Tastatur initialisiert und "angestöpselt". Dazu muss sich das Keyboard Objekt bei der Plugbox plugbox anmelden und dem PIC Objekt pic mitteilen, dass Unterbrechungen der Tastatur fortan dem Prozessor gemeldet werden sollen.
bool prologue ()
Mit dieser Methode wird auf die Unterbrechungen durch die Tastatur reagiert. Da bei jedem Tastendruck mehrere Unterbrechungen ausgelöst werden, ist nicht in jedem Fall mit einem verwertbaren ASCII Code zu rechnen. Nur wenn die Methode key_hit der Basisklasse Keyboard_Controller einen gültigen Key liefert, konnte ein vollständiger Scancode ermittelt werden. Für "normale" Tasten existiert dann auch ein ASCII Code ungleich Null.

Sofern ein gültiger Tastencode ermittelt werden konnte, soll dieser in einer privaten Variablen der Klasse gespeichert werden. Falls Ctrl-Alt-Delete gedrückt wurde, soll ein Reboot ausgelöst werden. Bei anderen gültigen Tastaturcodes soll die Behandlung im Epilog fortgesetzt werden.

void epilogue ()
In dieser Methode soll das Auftreten des Tastendrucks einem eventuell wartenden Prozess signalisiert werden. Dazu wird ein Semaphor verwendet, dessen Zähler angibt, wieviele Tastaturcodes im Keyboard Puffer zur Abholung bereitstehen. Wenn ein Puffereintrag überschrieben werden muss, ohne dass der alte Wert von einem Anwendungsprozess abgefragt wurde, darf der Semaphor also nicht hochgezählt werden.
Key getkey ()
Diese Methode liefert die zuletzt gedrückte Taste (als Objekt der Klasse Key) zurück. Wenn gerade keine Taste gedrückt wurde, wird der aufrufende Anwendungsprozess solange blockiert. Dies wird durch die Verwendung eines Semaphors erreicht. Sobald der Tastencode abgeholt worden ist, sollte geeignet vermerkt werden, dass der verwendete Puffer nun für den nächsten Tastencode zur Verfügung steht.

Implementierungshinweis

Die Größe des Tastaturpuffers bestimmt, wie oft der Benutzer "blind" Tasten drücken kann. Für unsere Zwecke genügt schon ein einelementiger Tastaturpuffer.
  Impressum   Datenschutz Stand: 2007-11-27 09:50   AG, WH