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
    - Videos
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Module
    - Mailingliste
    - Ergänzendes Material
    - Terminübersicht
    - Aufgaben
       * Umgebung
       * Typische Fehler
       * Aufgabe 1
          Dokumentation
       * Aufgabe 2
          Dokumentation
       * Aufgabe 3
          Dokumentation
       * Aufgabe 4
          Dokumentation
       * Aufgabe 5
          Dokumentation
       * Aufgabe 6
          Dokumentation
       * Aufgabe 7
          Dokumentation
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2012/13  >  Betriebssysteme  >  Übungen  >  Aufgaben  >  Aufgabe 6

Die Klasse Keyboard stellt die Abstraktion der Tastatur dar. Mehr ...

#include <keyboard.h>

Klassendiagramm für Keyboard:
Zusammengehörigkeiten von Keyboard:

Öffentliche Methoden

 Keyboard ()
 Konstruktor; Initialisiert Semaphore mit 0.
void plugin ()
 'Anstöpseln' der Tastatur.
bool prologue ()
 Prolog der Tastaturunterbrechung.
void epilogue ()
 Epilog der Tastaturunterbrechung.
Key getkey ()
 Schnittstelle für Anwendungen, um Zeichen von der Tastatur zu lesen.
- Ã–ffentliche Methoden geerbt von Gate
 Gate ()
 Konstruktor: Initialisierung der Attribute.
virtual ~Gate ()
 Destruktor.
void queued (bool q)
 Speichert, ob das jeweilige Objekt sich gerade in einer Epilog-Warteschlange befindet.
bool queued ()
 Methode zum Abfragen, ob sich das jeweilige Objekte gerade in einer Epilog-Warteschlange befindet.
- Ã–ffentliche Methoden geerbt von Keyboard_Controller
 Keyboard_Controller ()
 Konstruktor; Initialisierung der Tastatur.
Key key_hit ()
 Dient der Tastaturabfrage nach dem Auftreten einer Tastatur- unterbrechung.
void reboot ()
 Führt einen Neustart des Rechners durch. Ja, beim PC macht das der Tastaturcontroller.
void set_repeat_rate (int speed, int delay)
 Funktion zum Einstellen der Wiederholungsrate der Tastatur.
void set_led (led_t led, bool on)
 Setzt oder löscht die angegebene Leuchtdiode.

Weitere Geerbte Elemente

- Ã–ffentliche Typen geerbt von Keyboard_Controller
enum  led_t { led_caps_lock = 4, led_num_lock = 2, led_scroll_lock = 1 }
 Namen der LEDs. Mehr ...
- Ã–ffentliche Attribute geerbt von Chain
Chainnext
 next gibt das nächste Chain Element der Liste an.
- Geschützte Methoden geerbt von Keyboard_Controller
void drainKeyboardBuffer ()
 Leert den Tastaturpuffer vollständig.

Ausführliche Beschreibung

Die Klasse Keyboard stellt die Abstraktion der Tastatur dar.

Sie sorgt für die korrekte Initialisierung und vor allem für die Unterbrechungsbehandlung. Später wird Keyboard auch die Tastaturabfrage durch die Anwendung ermöglichen.

Dokumentation der Elementfunktionen

void Keyboard::epilogue ( )
virtual

Epilog der Tastaturunterbrechung.

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.

Erneute Implementation von Gate.

Key Keyboard::getkey ( )

Schnittstelle für Anwendungen, um Zeichen von der Tastatur zu lesen.

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.

Erneute Implementation in Guarded_Keyboard.

void Keyboard::plugin ( )

'Anstöpseln' der Tastatur.

Initialisierung der Tastatur und aktivieren der spezifischen Interruptbehandlung. Dazu muss sich das Keyboard Objekt bei der Plugbox plugbox anmelden und dem IOAPIC Objekt ioapic mitteilen, dass Unterbrechungen der Tastatur fortan dem Prozessor gemeldet werden sollen.

bool Keyboard::prologue ( )
virtual

Prolog der Tastaturunterbrechung.

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.

Es soll die Ausführung eines Epilogs angefordert werden.

Implementiert Gate.


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:
  Impressum   Datenschutz Stand: 2013-01-18 12:56   BO, DL