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[static_cast<size_t>(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);
|
|
};
|