You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
/*! \file
|
|
* \brief \ref KeyDecoder decodes a keystroke to the corresponding \ref Key
|
|
* object
|
|
*/
|
|
|
|
#pragma once
|
|
#include "../object/key.h"
|
|
#include "../types.h"
|
|
|
|
/*! \brief Decoder for \ref ps2keyboardset1 "keyboard codes" received from the
|
|
* \ref PS2Controller
|
|
* \ingroup io
|
|
*
|
|
* Extracts the make and break codes, modifier and scan codes from the pressed
|
|
* key.
|
|
*/
|
|
class KeyDecoder {
|
|
unsigned char prefix; ///< Prefix byte for keys
|
|
Key modifier; ///< activated modifier keys (e.g., caps lock)
|
|
|
|
public:
|
|
/*! \brief Current state (pressed or released) of all keys.
|
|
*/
|
|
bool status[Key::Scancode::KEYS];
|
|
|
|
/*! \brief Default constructor
|
|
*/
|
|
KeyDecoder() {}
|
|
|
|
/*! \brief Interprets the \ref ps2keyboardset1 "make and break codes"
|
|
* received from the keyboard and derives the corresponding scan code and
|
|
* further information about other pressed keys, such as \key{shift} and
|
|
* \key{ctrl}.
|
|
*
|
|
* \param code Byte from Keyboard to decode
|
|
* \return Pressed key (\ref Key::valid returns `false` if the key is not yet
|
|
* complete)
|
|
*/
|
|
Key decode(unsigned char code);
|
|
};
|