StuBS
|
Handles keystrokes. More...
#include <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. | |
Private Attributes | |
Key | current_key |
Buffer (with length = 1) for pressed keys. | |
Semaphore | key_available |
Semaphore to signal an available key. | |
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.
|
overridevirtual |
Key Keyboard::getKey | ( | ) |
Application interface to retrieve a Key.
This method returns the last pressed key (as an Key object). If no key has been pressed, the calling application thread is blocked until a key is available – this is achieved by using a Semaphore.
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.
|
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.
true
if a new Key was stored in the buffer and has to be processed in the Keyboard::epilogue. Implements Gate.