Aufgabe 3: Pro-/Epilog
Handles keystrokes. More...
#include <device/keyboard.h>
 Inheritance diagram for Keyboard:
 Collaboration diagram for Keyboard: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... | |
  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.
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
 trueif a new Key was stored in the buffer and has to be processed in the Keyboard::epilogue.
- Todo:
 - Implement Method. A buffer with a size of 
1(that is just a variable) is sufficient 
Implements Gate.
      
  | 
  overridevirtual | 
Epilogue of keyboard interrupts.
The character of the keystroke is read out and printed on the screen using the TextStream.
- Todo:
 - Implement Method
 
Reimplemented from Gate.
The documentation for this class was generated from the following files:
- device/keyboard.h
 - device/keyboard.cc