Aufgabe 7: Anwendung
Handles keystrokes. More...
#include <device/keyboard.h>
Public Member Functions | |
Keyboard () | |
Constructor. | |
void | plugin () |
Initialization of the keyboard. More... | |
bool | prologue () override |
Prologue of keyboard interrupts. More... | |
void | epilogue () override |
Epilogue of keyboard interrupts. More... | |
Key | getKey () |
Application interface to retrieve a Key. More... | |
Public Member Functions inherited from Gate | |
Gate () | |
Constructor. | |
virtual | ~Gate () |
Destructor. More... | |
virtual bool | prologue ()=0 |
Device-specific interrupt handling routine that is executed immediately after the interrupt occurs (asynchronously). More... | |
virtual void | epilogue () |
Possibly delayed, synchronously executed Device-specific interrupt handling routine. More... | |
Detailed Description
Handles keystrokes.
This class ensures correct initialization of the keyboard and, above all, its interrupt handling. It also allows an application to query it for key strokes.
Member Function Documentation
void Keyboard::plugin | ( | ) |
Initialization of the keyboard.
Initialization of the keyboard and activation of the specific interrupt handling: The object will register itself at the Plugbox and configure the IOAPIC to receive the corresponding interrupts.
- Note
- The keyboard interrupts should be configured as level triggered. According to the standard we would have to check the corresponding entry in ACPI::MADS::Interrupt_Source_Override and use these values. Most likely this would suggest an edge-triggered mode – which would work as well. However, using a level-triggered mode is more forgiving because it resends the interrupt request even if an interrupt was lost (e.g. the required handling, retrieving the buffer entry, was not performed).
|
overridevirtual |
Prologue of keyboard interrupts.
This method directly handles interrupts caused by the keyboard. Since multiple interrupts are triggered on a keystroke (press & release) it produces not always a printable ASCII character – therefore only valid keys are handled in the Keyboard::epilogue.
Since the buffer is limited, it also ensures that a valid key is not overwritten by a subsequent prologue before it was handled in the Keyboard::epilogue.
- Note
- If a keystroke would exceed the buffer, the new key is dropped – previous keystrokes have a higher priority in the buffer.
- Returns
true
if a new Key was stored in the buffer and has to be processed in the Keyboard::epilogue.
Implements Gate.
|
overridevirtual |
Key Keyboard::getKey | ( | ) |
The documentation for this class was generated from the following files:
- device/keyboard.h
- device/keyboard.cc