OOStuBS/MPStuBS
|
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. Mehr ...
#include <keyboard.h>
Öffentliche Methoden | |
Keyboard () | |
Konstruktor. Mehr ... | |
void | plugin () |
'Anstöpseln' der Tastatur. Mehr ... | |
bool | prologue () |
Prolog der Tastaturunterbrechung. Mehr ... | |
void | epilogue () |
Epilog der Tastaturunterbrechung. Mehr ... | |
Key | getkey () |
Schnittstelle für Anwendungen, um Zeichen von der Tastatur zu lesen. Mehr ... | |
Öffentliche Methoden geerbt von Gate | |
Gate () | |
Konstruktor. Mehr ... | |
virtual | ~Gate () |
Destruktor. Mehr ... | |
bool | set_queued () |
Setzt atomar ein Flag um zu markieren, dass sich das Objekt gerade in einer Epilog-Warteschlange befindet. Mehr ... | |
void | set_dequeued () |
Setzt das in set_queued() gesetzte Flag zurück. Mehr ... | |
Öffentliche Methoden geerbt von Keyboard_Controller | |
Keyboard_Controller () | |
Konstruktor; Initialisierung der Tastatur. Mehr ... | |
Key | key_hit () |
Dient der Tastaturabfrage nach dem Auftreten einer Tastatur- unterbrechung. Mehr ... | |
void | reboot () |
Führt einen Neustart des Rechners durch. Ja, beim PC macht das der Tastaturcontroller. Mehr ... | |
void | set_repeat_rate (int speed, int delay) |
Funktion zum Einstellen der Wiederholungsrate der Tastatur. Mehr ... | |
void | set_led (led_t led, bool on) |
Setzt oder löscht die angegebene Leuchtdiode. Mehr ... | |
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 Gate | |
QueueLink< Gate > | queue_link |
Verkettungszeiger für Epilog Queue. | |
Geschützte Methoden geerbt von Keyboard_Controller | |
void | send_command (unsigned char cmd, unsigned char data) |
Sendet einen Befehl an den Tastaturcontroller. Mehr ... | |
void | send_byte (unsigned char byte) |
Sendet ein Datum an den Tastaturcontroller. Mehr ... | |
void | drainKeyboardBuffer () |
Leert den Tastaturpuffer vollständig. Mehr ... | |
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.
|
inline |
Konstruktor.
Konstruktor; Initialisiert Semaphore mit 0
|
virtual |
Epilog der Tastaturunterbrechung.
In dieser Methode soll das Auftreten des Tastendrucks einem eventuell wartenden Thread 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 Anwendungsthread 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 Anwendungsthread 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.
void Keyboard::plugin | ( | ) |
|
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 Keyboard_Controller::key_hit einen gültigen Key liefert, konnte ein vollständiger Scancode ermittelt werden und soll die Ausgabe des Zeichens angefordert werden.
Weiterhin muss sichergestellt werden, dass ein gültiger Key nicht durch einen nachfolgenden Prolog überschrieben wird, bevor er ausgegeben wurde.
Implementiert Gate.