• Navigation überspringen
  • Zur Navigation
  • Zum Seitenende
Organisationsmenü öffnen Organisationsmenü schließen
Friedrich-Alexander-Universität Lehrstuhl für Informatik 4 (Systemsoftware)
  • FAUZur zentralen FAU Website
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
Suche öffnen
  • English
  • Campo
  • StudOn
  • FAUdir
  • Stellenangebote
  • Lageplan
  • Hilfe im Notfall
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
Friedrich-Alexander-Universität Lehrstuhl für Informatik 4 (Systemsoftware)
Menu Menu schließen
  • Lehrstuhl
    • Team
    • Aktuelles
    • Kontakt und Anfahrt
    • Leitbild
    • 50-jähriges Jubiläum
    Portal Lehrstuhl
  • Forschung
    • Forschungsbereiche
      • Betriebssysteme
      • Confidential Computing
      • Embedded Systems Software
      • Verteilte Systeme
    • Projekte
      • AIMBOS
      • BALu
      • BFT2Chain
      • DOSS
      • Mirador
      • NEON
      • PAVE
      • ResPECT
      • Watwa
    • Projektkampagnen
      • maRE
    • Seminar
      • Systemsoftware
    Portal Forschung
  • Publikationen
  • Lehre
    • Sommersemester 2025
      • Applied Software Architecture
      • Ausgewählte Kapitel der Systemsoftware
      • Betriebssystemtechnik
      • Projekt angewandte Systemsoftwaretechnik
      • System-Level Programming
      • Systemnahe Programmierung in C
      • Systemprogrammierung 1
      • Verteilte Systeme
    • Wintersemester 2025/26
      • Systemprogrammierung 2
      • Betriebssysteme
      • Middleware – Cloud Computing
      • Echtzeitsysteme
      • Virtuelle Maschinen
      • Web-basierte Systeme
      • Projekt angewandte Systemsoftwaretechnik
      • Aktuelle Entwicklung in Verteilten und Objektorientierten Betriebssystemen (für Bachelor-/Masterarbeit)
    Portal Lehre
  • Examensarbeiten
  1. Startseite
  2. Extern

Extern

Bereichsnavigation: Lehre
  • Betriebssysteme

    Aufgabe 1: Ein-/Ausgabe

    Enumerations | Functions
    PS2Controller Namespace Reference
    I/O subsystem

    PS/2 Controller. More...

    Enumerations

    enum  Status {
      HAS_OUTPUT = 1 << 0 ,
      INPUT_PENDING = 1 << 1 ,
      SYSTEM_FLAG = 1 << 2 ,
      IS_COMMAND = 1 << 3 ,
      IS_MOUSE = 1 << 5 ,
      TIMEOUT_ERROR = 1 << 6 ,
      PARITY_ERROR = 1 << 7
    }
     Flags in the PS/2 controller status register. More...
     
    enum  KeyboardCommand : uint8_t {
      KEYBOARD_SET_LED = 0xed ,
      KEYBOARD_SEND_ECHO = 0xee ,
      KEYBOARD_SET_SPEED = 0xf3 ,
      KEYBOARD_ENABLE = 0xf4 ,
      KEYBOARD_DISABLE = 0xf5 ,
      KEYBOARD_SET_DEFAULT = 0xf6
    }
     Commands to be send to the Keyboard. More...
     
    enum  Reply {
      ACK = 0xfa ,
      RESEND = 0xfe ,
      ECHO = 0xee
    }
     Replies. More...
     
    enum  ControllerCommand {
      CONTROLLER_GET_COMMAND_BYTE = 0x20 ,
      CONTROLLER_SET_COMMAND_BYTE = 0x60 ,
      CONTROLLER_MOUSE_DISABLE = 0xa7 ,
      CONTROLLER_MOUSE_ENABLE = 0xa8 ,
      CONTROLLER_KEYBOARD_DISABLE = 0xad ,
      CONTROLLER_KEYBOARD_ENABLE = 0xae ,
      CONTROLLER_SEND_TO_MOUSE = 0xd4
    }
     Commands for the PS/2 Controller. More...
     
    enum  Delay {
      DELAY_250MS = 0 ,
      DELAY_500MS = 1 ,
      DELAY_750MS = 2 ,
      DELAY_1000MS = 3
    }
     Delay before the keyboard starts repeating sending a pressed key. More...
     
    enum  Speed {
      SPEED_30_0CPS = 0x00 ,
      SPEED_26_7CPS = 0x01 ,
      SPEED_24_0CPS = 0x02 ,
      SPEED_21_8CPS = 0x03 ,
      SPEED_20_7CPS = 0x04 ,
      SPEED_18_5CPS = 0x05 ,
      SPEED_17_1CPS = 0x06 ,
      SPEED_16_0CPS = 0x07 ,
      SPEED_15_0CPS = 0x08 ,
      SPEED_13_3CPS = 0x09 ,
      SPEED_12_0CPS = 0x0a ,
      SPEED_10_9CPS = 0x0b ,
      SPEED_10_0CPS = 0x0c ,
      SPEED_09_2CPS = 0x0d ,
      SPEED_08_6CPS = 0x0e ,
      SPEED_08_0CPS = 0x0f ,
      SPEED_07_5CPS = 0x10 ,
      SPEED_06_7CPS = 0x11 ,
      SPEED_06_0CPS = 0x12 ,
      SPEED_05_5CPS = 0x13 ,
      SPEED_05_0CPS = 0x14 ,
      SPEED_04_6CPS = 0x15 ,
      SPEED_04_3CPS = 0x16 ,
      SPEED_04_0CPS = 0x17 ,
      SPEED_03_7CPS = 0x18 ,
      SPEED_03_3CPS = 0x19 ,
      SPEED_03_0CPS = 0x1a ,
      SPEED_02_7CPS = 0x1b ,
      SPEED_02_5CPS = 0x1c ,
      SPEED_02_3CPS = 0x1d ,
      SPEED_02_1CPS = 0x1e ,
      SPEED_02_0CPS = 0x1f
    }
     Repeat Rate of Characters. More...
     
    enum  LED {
      LED_SCROLL_LOCK = 1 << 0 ,
      LED_NUM_LOCK = 1 << 1 ,
      LED_CAPS_LOCK = 1 << 2
    }
     Keyboard LEDs. More...
     

    Functions

    void init ()
     Initialization of connected devices. More...
     
    bool fetch (Key &pressed)
     Retrieve the keyboard event. More...
     
    void setRepeatRate (Speed speed, Delay delay)
     Configure the repeat rate of the keyboard. More...
     
    void setLed (enum LED led, bool on)
     Enable or disable a keyboard LED. More...
     

    Detailed Description

    PS/2 Controller.

    Initializes the PS/2 devices (Keyboard and optional Mouse), and determines both the scan code and ASCII character of a pressed key from the transmitted make and break codes using the KeyDecoder.

    Note
    This controller is also known as Intel 8042 (nowadays integrated in the mainboard) or Keyboard Controller. But to avoid confusion with the actual Keyboard and since we use the PS/2-compatible mode to support the Mouse as well, the name PS/2 Controller was chosen for the sake of simplicity.
    Since modern PCs sometimes don't have an PS/2 connector, USB keyboards and mice are emulated as PS/2 device with USB Legacy Support.

    Enumeration Type Documentation

    enum PS2Controller::Status

    Flags in the PS/2 controller status register.

    Enumerator
    HAS_OUTPUT 

    Output buffer non-empty?

    INPUT_PENDING 

    Is input buffer full?

    SYSTEM_FLAG 

    set on soft reset, cleared on power up

    IS_COMMAND 

    Is command Byte? (otherwise data)

    IS_MOUSE 

    Mouse output has data.

    TIMEOUT_ERROR 

    Timeout error.

    PARITY_ERROR 

    Parity error.

    enum PS2Controller::KeyboardCommand : uint8_t

    Commands to be send to the Keyboard.

    Enumerator
    KEYBOARD_SET_LED 

    Set the LED (according to the following parameter byte)

    KEYBOARD_SEND_ECHO 

    Send an echo packet.

    KEYBOARD_SET_SPEED 

    Set the repeat rate (according to the following parameter byte)

    KEYBOARD_ENABLE 

    Enable Keyboard.

    KEYBOARD_DISABLE 

    Disable Keyboard.

    KEYBOARD_SET_DEFAULT 

    Load defaults.

    enum PS2Controller::Reply

    Replies.

    Enumerator
    ACK 

    Acknowledgement.

    RESEND 

    Request to resend (not required to implement)

    ECHO 

    Echo answer.

    enum PS2Controller::ControllerCommand

    Commands for the PS/2 Controller.

    These commands are processed by the controller and not send to keyboard/mouse. They have to be written into the command register.

    Enumerator
    CONTROLLER_GET_COMMAND_BYTE 

    Read Command Byte of PS/2 Controller.

    CONTROLLER_SET_COMMAND_BYTE 

    Write Command Byte of PS/2 Controller.

    CONTROLLER_MOUSE_DISABLE 

    Disable mouse interface.

    CONTROLLER_MOUSE_ENABLE 

    Enable mouse interface.

    CONTROLLER_KEYBOARD_DISABLE 

    Disable keyboard interface.

    CONTROLLER_KEYBOARD_ENABLE 

    Enable keyboard interface.

    CONTROLLER_SEND_TO_MOUSE 

    Send parameter to mouse device.

    enum PS2Controller::Delay

    Delay before the keyboard starts repeating sending a pressed key.

    Enumerator
    DELAY_250MS 

    Delay of 0.25s.

    DELAY_500MS 

    Delay of 0.5s.

    DELAY_750MS 

    Delay of 0.75s.

    DELAY_1000MS 

    Delay of 1s.

    enum PS2Controller::Speed

    Repeat Rate of Characters.

    See also
    The PS/2 Keyboard Interface
    Enumerator
    SPEED_30_0CPS 

    30 characters per second

    SPEED_26_7CPS 

    26.7 characters per second

    SPEED_24_0CPS 

    24 characters per second

    SPEED_21_8CPS 

    12.8 characters per second

    SPEED_20_7CPS 

    20.7 characters per second

    SPEED_18_5CPS 

    18.5 characters per second

    SPEED_17_1CPS 

    17.1 characters per second

    SPEED_16_0CPS 

    16 characters per second

    SPEED_15_0CPS 

    15 characters per second

    SPEED_13_3CPS 

    13.3 characters per second

    SPEED_12_0CPS 

    12 characters per second

    SPEED_10_9CPS 

    10.9 characters per second

    SPEED_10_0CPS 

    10 characters per second

    SPEED_09_2CPS 

    9.2 characters per second

    SPEED_08_6CPS 

    8.6 characters per second

    SPEED_08_0CPS 

    8 characters per second

    SPEED_07_5CPS 

    7.5 characters per second

    SPEED_06_7CPS 

    6.7 characters per second

    SPEED_06_0CPS 

    6 characters per second

    SPEED_05_5CPS 

    5.5 characters per second

    SPEED_05_0CPS 

    5 characters per second

    SPEED_04_6CPS 

    4.6 characters per second

    SPEED_04_3CPS 

    4.3 characters per second

    SPEED_04_0CPS 

    4 characters per second

    SPEED_03_7CPS 

    3.7 characters per second

    SPEED_03_3CPS 

    3.3 characters per second

    SPEED_03_0CPS 

    3 characters per second

    SPEED_02_7CPS 

    2.7 characters per second

    SPEED_02_5CPS 

    2.5 characters per second

    SPEED_02_3CPS 

    2.3 characters per second

    SPEED_02_1CPS 

    2.1 characters per second

    SPEED_02_0CPS 

    2 characters per second

    enum PS2Controller::LED

    Keyboard LEDs.

    Enumerator
    LED_SCROLL_LOCK 

    Scroll Lock.

    LED_NUM_LOCK 

    Num Lock.

    LED_CAPS_LOCK 

    Caps Lock.

    Function Documentation

    void PS2Controller::init ( )

    Initialization of connected devices.

    All status LEDs of the keyboard are switched off and the repetition rate is set to maximum speed.

    bool PS2Controller::fetch ( Key &  pressed)

    Retrieve the keyboard event.

    Retrieves make and brake events from the keyboard. If a valid (non special) key was pressed, the scan code is determined using KeyDecoder::decode into a Key object. Events on special keys like Shift, Alt, CapsLock etc. are stored (in KeyDecoder) and applied on subsequent keystrokes, while no valid key is retrieved.

    Mouse events are ignored.

    Todo:
    Implement Method
    Parameters
    pressedReference to an object which will contain the pressed Key on success
    Returns
    true if a valid key was decoded
    void PS2Controller::setRepeatRate ( Speed  speed,
    Delay  delay 
    )

    Configure the repeat rate of the keyboard.

    Parameters
    delayconfigures how long a key must be pressed before the repetition begins.
    speeddetermines how fast the key codes should follow each other. Valid values are between 0 (30 characters per second) and 31 (2 characters per second).
    Todo:
    Implement method
    void PS2Controller::setLed ( enum LED  led,
    bool  on 
    )

    Enable or disable a keyboard LED.

    Parameters
    ledLED to enable or disable
    ontrue will enable the specified LED, false disable
    Todo:
    Implement method
    Friedrich-Alexander-Universität
    Erlangen-Nürnberg

    Schlossplatz 4
    91054 Erlangen
    • Impressum
    • Datenschutz
    • Barrierefreiheit
    • Facebook
    • RSS Feed
    • Xing
    Nach oben