Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Abstraktion für den Tastaturcontroller des PCs. Mehr ...

#include <machine/keyctrl.h>

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

Öffentliche Methoden

 Keyboard_Controller ()
 Konstruktor; Initialisierung der Tastatur. Mehr ...
 
Key key_hit ()
 Dient der Tastaturabfrage nach dem Auftreten einer Tastatur- unterbrechung. Mehr ...
 
void set_repeat_rate (int speed, int delay)
 Funktion zum Einstellen der Wiederholungsrate der Tastatur. Mehr ...
 
void set_led (LED led, bool on)
 Setzt oder löscht die angegebene Leuchtdiode. Mehr ...
 

Öffentliche, statische Methoden

static void reboot ()
 Führt einen Neustart des Rechners durch. Ja, beim PC macht das der Tastaturcontroller. Mehr ...
 

Geschützte Methoden

void drainKeyboardBuffer ()
 Leert den Tastaturpuffer vollständig. Mehr ...
 
- Geschützte Methoden geerbt von Key_Decoder
 Key_Decoder ()
 Konstruktor für den Tastendekoder.
 
Key decode (unsigned char code)
 Interpretiert die Make und Break-Codes der Tastatur und liefert den Scancode und Informationen darüber, welche zusätzlichen Tasten wie Shift und Ctrl gedrückt wurden. Mehr ...
 

Geschützte, statische Methoden

static void send_command (unsigned char cmd, unsigned char data)
 Sendet einen Befehl an den Tastaturprozessor. Mehr ...
 
static void send_byte (unsigned char byte)
 Sendet ein Datum an den Tastaturprozessor. Mehr ...
 

Weitere Geerbte Elemente

- Öffentliche Typen geerbt von Key_Decoder
enum  LED { LED_SCROLL_LOCK = 1 << 0, LED_NUM_LOCK = 1 << 1, LED_CAPS_LOCK = 1 << 2 }
 Namen der LEDs. Mehr ...
 
- Geschützte Attribute geerbt von Key_Decoder
bool status [Key::Scancode::KEYS]
 Aktueller Status (gedrückt oder losgelassen) der Tasten.
 

Ausführliche Beschreibung

Abstraktion für den Tastaturcontroller des PCs.

Die Klasse Keyboard_Controller dient dazu, die PC Tastatur zu initialisieren und aus den gesendeten Make- und Break-Codes den Scan- und ASCII Code der gedrückten Taste zu bestimmen.

Beschreibung der Konstruktoren und Destruktoren

◆ Keyboard_Controller()

Keyboard_Controller::Keyboard_Controller ( )

Konstruktor; Initialisierung der Tastatur.

Alle LEDs werden ausgeschaltet und die Wiederholungsrate auf maximale Geschwindigkeit eingestellt.

Dokumentation der Elementfunktionen

◆ drainKeyboardBuffer()

void Keyboard_Controller::drainKeyboardBuffer ( )
protected

Leert den Tastaturpuffer vollständig.

Die Tastatur schickt u.U. keine weiteren Interrupts wenn nicht alle Daten abgeholt werden. Deswegen kann mit dieser Funktion sichergestellt werden, dass immer neue Interrupts kommen, auch wenn dabei Tastendrücke verloren gehen könnten.

Noch zu erledigen:
Methode implementieren

◆ key_hit()

Key Keyboard_Controller::key_hit ( )

Dient der Tastaturabfrage nach dem Auftreten einer Tastatur- unterbrechung.

Zur Dekodierung kann Key_Decoder::decode() verwendet werden.

Wenn der Tastendruck abgeschlossen ist und ein Scancode, sowie gegebenenfalls ein ASCII Code ermittelt werden konnte, werden diese in Key zurückgeliefert. Wenn dagegen bloß eine der Spezialtasten Shift, Alt, CapsLock usw. gedrückt wurde, dann liefert key_hit() einen ungültigen Wert zurück, was mit Key::valid() überprüft werden kann.

Noch zu erledigen:
Methode implementieren (u.a. enum outb verwenden!)
Rückgabe
Dekodierte Taste

◆ reboot()

void Keyboard_Controller::reboot ( )
static

Führt einen Neustart des Rechners durch. Ja, beim PC macht das der Tastaturcontroller.

◆ send_byte()

void Keyboard_Controller::send_byte ( unsigned char  byte)
staticprotected

Sendet ein Datum an den Tastaturprozessor.

Sobald der Tastaturprozessor alle bereits von der CPU geschriebenen Daten abgeholt hat, kann mit dieser Methode ein Byte an die Tastatur gesendet werden.

Noch zu erledigen:
Methode implementieren
Parameter
bytezu sendende Daten

◆ send_command()

void Keyboard_Controller::send_command ( unsigned char  cmd,
unsigned char  data 
)
staticprotected

Sendet einen Befehl an den Tastaturprozessor.

Ein Tastaturbefehl besteht aus Tastaturkommando und einem zugehörigem Datumsbyte. Zur Implementierung soll die send_byte() Methode verwendet werden.

Noch zu erledigen:
Methode implementieren
Parameter
cmdabzusetzender Befehl
datazu sendende Daten

◆ set_led()

void Keyboard_Controller::set_led ( LED  led,
bool  on 
)
virtual

Setzt oder löscht die angegebene Leuchtdiode.

Parameter
ledGibt an, welche LED geschaltet werden soll.
onLED an- oder ausschalten.
Noch zu erledigen:
Methode implementieren (Verwendung von send_command())

Implementiert Key_Decoder.

◆ set_repeat_rate()

void Keyboard_Controller::set_repeat_rate ( int  speed,
int  delay 
)

Funktion zum Einstellen der Wiederholungsrate der Tastatur.

Parameter
delaybestimmt, wie lange eine Taste gedrückt werden muss, bevor die Wiederholung einsetzt. Erlaubt sind Werte von 0 (250ms), 1 (500ms), 2 (750ms) und 3 (1000ms).
speedbestimmt, wie schnell die Tastencodes aufeinander folgen soll. Erlaubt sind Werte zwischen 0 (30 Zeichen pro Sekunde) und 31 (2 Zeichen pro Sekunde).
Noch zu erledigen:
Methode implementieren (Verwendung von send_command())

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: