508 lines
12 KiB
C++
508 lines
12 KiB
C++
#include "ehs/io/hid/Keyboard.h"
|
|
|
|
namespace ehs
|
|
{
|
|
Keyboard::Keyboard()
|
|
{
|
|
}
|
|
|
|
Keyboard::Keyboard(Str_8 name, const UInt_64 id)
|
|
: HID(EHS_HID_KEYBOARD, (Str_8 &&)name, id)
|
|
{
|
|
}
|
|
|
|
Keyboard::Keyboard(const Keyboard& hid)
|
|
: HID(hid)
|
|
{
|
|
}
|
|
|
|
Keyboard& Keyboard::operator=(const Keyboard& hid)
|
|
{
|
|
if (this == &hid)
|
|
return *this;
|
|
|
|
HID::operator=(hid);
|
|
|
|
return *this;
|
|
}
|
|
|
|
void Keyboard::Poll(const float delta)
|
|
{
|
|
HID::Poll(delta);
|
|
}
|
|
|
|
Keyboard* Keyboard::Clone() const
|
|
{
|
|
return new Keyboard(*this);
|
|
}
|
|
|
|
const Button Keyboard::Unknown("Unknown");
|
|
const Button Keyboard::Escape("Escape Button");
|
|
const Button Keyboard::Backspace("Backspace Button");
|
|
const Button Keyboard::Enter("Enter Button");
|
|
const Button Keyboard::LShift("Left Shift Button");
|
|
const Button Keyboard::RShift("Right Shift Button");
|
|
const Button Keyboard::LAlt("Left Alt Button");
|
|
const Button Keyboard::RAlt("Right Alt Button");
|
|
const Button Keyboard::LCtrl("Left Control Button");
|
|
const Button Keyboard::RCtrl("Right Control Button");
|
|
const Button Keyboard::Space("Space Button");
|
|
const Button Keyboard::A("A Button");
|
|
const Button Keyboard::B("B Button");
|
|
const Button Keyboard::C("C Button");
|
|
const Button Keyboard::D("D Button");
|
|
const Button Keyboard::E("E Button");
|
|
const Button Keyboard::F("F Button");
|
|
const Button Keyboard::G("G Button");
|
|
const Button Keyboard::H("H Button");
|
|
const Button Keyboard::I("I Button");
|
|
const Button Keyboard::J("J Button");
|
|
const Button Keyboard::K("K Button");
|
|
const Button Keyboard::L("L Button");
|
|
const Button Keyboard::M("M Button");
|
|
const Button Keyboard::N("N Button");
|
|
const Button Keyboard::O("O Button");
|
|
const Button Keyboard::P("P Button");
|
|
const Button Keyboard::Q("Q Button");
|
|
const Button Keyboard::R("R Button");
|
|
const Button Keyboard::S("S Button");
|
|
const Button Keyboard::T("T Button");
|
|
const Button Keyboard::U("U Button");
|
|
const Button Keyboard::V("V Button");
|
|
const Button Keyboard::W("W Button");
|
|
const Button Keyboard::X("X Button");
|
|
const Button Keyboard::Y("Y Button");
|
|
const Button Keyboard::Z("Z Button");
|
|
const Button Keyboard::One("One Button");
|
|
const Button Keyboard::Two("Two Button");
|
|
const Button Keyboard::Three("Three Button");
|
|
const Button Keyboard::Four("Four Button");
|
|
const Button Keyboard::Five("Five Button");
|
|
const Button Keyboard::Six("Six Button");
|
|
const Button Keyboard::Seven("Seven Button");
|
|
const Button Keyboard::Eight("Eight Button");
|
|
const Button Keyboard::Nine("Nine Button");
|
|
const Button Keyboard::Zero("Zero Button");
|
|
const Button Keyboard::Equals("Equals Button");
|
|
const Button Keyboard::Minus("Minus Button");
|
|
const Button Keyboard::Tilde("Tilde Button");
|
|
const Button Keyboard::BackSlash("Back Slash Button");
|
|
const Button Keyboard::LeftSquareBracket("Left Square Bracket Button");
|
|
const Button Keyboard::RightSquareBracket("Right Square Bracket Button");
|
|
const Button Keyboard::SemiColon("Semi-Colon Button");
|
|
const Button Keyboard::Apostrophe("Apostrophe Button");
|
|
const Button Keyboard::Comma("Comma Button");
|
|
const Button Keyboard::Period("Period Button");
|
|
const Button Keyboard::ForwardSlash("Forward Slash Button");
|
|
const Button Keyboard::F1("Function 1 Button");
|
|
const Button Keyboard::F2("Function 2 Button");
|
|
const Button Keyboard::F3("Function 3 Button");
|
|
const Button Keyboard::F4("Function 4 Button");
|
|
const Button Keyboard::F5("Function 5 Button");
|
|
const Button Keyboard::F6("Function 6 Button");
|
|
const Button Keyboard::F7("Function 7 Button");
|
|
const Button Keyboard::F8("Function 8 Button");
|
|
const Button Keyboard::F9("Function 9 Button");
|
|
const Button Keyboard::F10("Function 10 Button");
|
|
const Button Keyboard::F11("Function 11 Button");
|
|
const Button Keyboard::F12("Function 12 Button");
|
|
const Button Keyboard::F13("Function 13 Button");
|
|
const Button Keyboard::F14("Function 14 Button");
|
|
const Button Keyboard::F15("Function 15 Button");
|
|
const Button Keyboard::F16("Function 16 Button");
|
|
const Button Keyboard::F17("Function 17 Button");
|
|
const Button Keyboard::F18("Function 18 Button");
|
|
const Button Keyboard::F19("Function 19 Button");
|
|
const Button Keyboard::F20("Function 20 Button");
|
|
const Button Keyboard::F21("Function 21 Button");
|
|
const Button Keyboard::F22("Function 22 Button");
|
|
const Button Keyboard::F23("Function 23 Button");
|
|
const Button Keyboard::F24("Function 24 Button");
|
|
const Button Keyboard::Left("Left Arrow Button");
|
|
const Button Keyboard::Right("Right Arrow Button");
|
|
const Button Keyboard::Up("Up Arrow Button");
|
|
const Button Keyboard::Down("Down Arrow Button");
|
|
|
|
Button Keyboard::TranslateScanCode(const UInt_32 code)
|
|
{
|
|
switch (code)
|
|
{
|
|
case 1:
|
|
return Keyboard::Escape;
|
|
case 14:
|
|
return Keyboard::Backspace;
|
|
case 28:
|
|
return Keyboard::Enter;
|
|
case 0x2A:
|
|
return Keyboard::LShift;
|
|
case 0x36:
|
|
return Keyboard::RShift;
|
|
case 56:
|
|
return Keyboard::LAlt;
|
|
case 100:
|
|
return Keyboard::RAlt;
|
|
case 29:
|
|
return Keyboard::LCtrl;
|
|
case 97:
|
|
return Keyboard::RCtrl;
|
|
case 57:
|
|
return Keyboard::Space;
|
|
case 30:
|
|
return Keyboard::A;
|
|
case 48:
|
|
return Keyboard::B;
|
|
case 46:
|
|
return Keyboard::C;
|
|
case 32:
|
|
return Keyboard::D;
|
|
case 18:
|
|
return Keyboard::E;
|
|
case 33:
|
|
return Keyboard::F;
|
|
case 34:
|
|
return Keyboard::G;
|
|
case 35:
|
|
return Keyboard::H;
|
|
case 23:
|
|
return Keyboard::I;
|
|
case 36:
|
|
return Keyboard::J;
|
|
case 37:
|
|
return Keyboard::K;
|
|
case 38:
|
|
return Keyboard::L;
|
|
case 50:
|
|
return Keyboard::M;
|
|
case 49:
|
|
return Keyboard::N;
|
|
case 24:
|
|
return Keyboard::O;
|
|
case 25:
|
|
return Keyboard::P;
|
|
case 16:
|
|
return Keyboard::Q;
|
|
case 19:
|
|
return Keyboard::R;
|
|
case 31:
|
|
return Keyboard::S;
|
|
case 20:
|
|
return Keyboard::T;
|
|
case 22:
|
|
return Keyboard::U;
|
|
case 47:
|
|
return Keyboard::V;
|
|
case 17:
|
|
return Keyboard::W;
|
|
case 45:
|
|
return Keyboard::X;
|
|
case 21:
|
|
return Keyboard::Y;
|
|
case 44:
|
|
return Keyboard::Z;
|
|
case 2:
|
|
return Keyboard::One;
|
|
case 3:
|
|
return Keyboard::Two;
|
|
case 4:
|
|
return Keyboard::Three;
|
|
case 5:
|
|
return Keyboard::Four;
|
|
case 6:
|
|
return Keyboard::Five;
|
|
case 7:
|
|
return Keyboard::Six;
|
|
case 8:
|
|
return Keyboard::Seven;
|
|
case 9:
|
|
return Keyboard::Eight;
|
|
case 10:
|
|
return Keyboard::Nine;
|
|
case 11:
|
|
return Keyboard::Zero;
|
|
case 12:
|
|
return Keyboard::Minus;
|
|
case 13:
|
|
return Keyboard::Equals;
|
|
case 41:
|
|
return Keyboard::Tilde;
|
|
case 43:
|
|
return Keyboard::BackSlash;
|
|
case 26:
|
|
return Keyboard::LeftSquareBracket;
|
|
case 27:
|
|
return Keyboard::RightSquareBracket;
|
|
case 39:
|
|
return Keyboard::SemiColon;
|
|
case 40:
|
|
return Keyboard::Apostrophe;
|
|
case 51:
|
|
return Keyboard::Comma;
|
|
case 52:
|
|
return Keyboard::Period;
|
|
case 53:
|
|
return Keyboard::ForwardSlash;
|
|
case 59:
|
|
return Keyboard::F1;
|
|
case 60:
|
|
return Keyboard::F2;
|
|
case 61:
|
|
return Keyboard::F3;
|
|
case 62:
|
|
return Keyboard::F4;
|
|
case 63:
|
|
return Keyboard::F5;
|
|
case 64:
|
|
return Keyboard::F6;
|
|
case 65:
|
|
return Keyboard::F7;
|
|
case 66:
|
|
return Keyboard::F8;
|
|
case 67:
|
|
return Keyboard::F9;
|
|
case 68:
|
|
return Keyboard::F10;
|
|
case 69:
|
|
return Keyboard::F11;
|
|
case 70:
|
|
return Keyboard::F12;
|
|
case 71:
|
|
return Keyboard::F13;
|
|
case 72:
|
|
return Keyboard::Up;
|
|
case 73:
|
|
return Keyboard::F15;
|
|
case 74:
|
|
return Keyboard::F16;
|
|
case 75:
|
|
return Keyboard::Left;
|
|
case 76:
|
|
return Keyboard::F18;
|
|
case 77:
|
|
return Keyboard::Right;
|
|
case 78:
|
|
return Keyboard::F20;
|
|
case 79:
|
|
return Keyboard::F21;
|
|
case 80:
|
|
return Keyboard::Down;
|
|
case 81:
|
|
return Keyboard::F23;
|
|
case 82:
|
|
return Keyboard::F24;
|
|
case 105:
|
|
return Keyboard::Left;
|
|
case 106:
|
|
return Keyboard::Right;
|
|
case 103:
|
|
return Keyboard::Up;
|
|
case 108:
|
|
return Keyboard::Down;
|
|
default:
|
|
return Keyboard::Unknown;
|
|
}
|
|
}
|
|
|
|
Char_8 Keyboard::TranslateToEnglish_8(const bool shifted, const Button& button)
|
|
{
|
|
if (shifted)
|
|
{
|
|
if (button == A)
|
|
return 'A';
|
|
else if (button == B)
|
|
return 'B';
|
|
else if (button == C)
|
|
return 'C';
|
|
else if (button == D)
|
|
return 'D';
|
|
else if (button == E)
|
|
return 'E';
|
|
else if (button == F)
|
|
return 'F';
|
|
else if (button == G)
|
|
return 'G';
|
|
else if (button == H)
|
|
return 'H';
|
|
else if (button == I)
|
|
return 'I';
|
|
else if (button == J)
|
|
return 'J';
|
|
else if (button == K)
|
|
return 'K';
|
|
else if (button == L)
|
|
return 'L';
|
|
else if (button == M)
|
|
return 'M';
|
|
else if (button == N)
|
|
return 'N';
|
|
else if (button == O)
|
|
return 'O';
|
|
else if (button == P)
|
|
return 'P';
|
|
else if (button == Q)
|
|
return 'Q';
|
|
else if (button == Q)
|
|
return 'R';
|
|
else if (button == S)
|
|
return 'S';
|
|
else if (button == T)
|
|
return 'T';
|
|
else if (button == U)
|
|
return 'U';
|
|
else if (button == V)
|
|
return 'V';
|
|
else if (button == W)
|
|
return 'W';
|
|
else if (button == X)
|
|
return 'X';
|
|
else if (button == Y)
|
|
return 'Y';
|
|
else if (button == Z)
|
|
return 'Z';
|
|
else if (button == Two)
|
|
return '@';
|
|
else if (button == Three)
|
|
return '#';
|
|
else if (button == Four)
|
|
return '$';
|
|
else if (button == Five)
|
|
return '%';
|
|
else if (button == Six)
|
|
return '^';
|
|
else if (button == Seven)
|
|
return '&';
|
|
else if (button == Eight)
|
|
return '*';
|
|
else if (button == Nine)
|
|
return '(';
|
|
else if (button == Zero)
|
|
return ')';
|
|
else if (button == One)
|
|
return '!';
|
|
else if (button == Minus)
|
|
return '_';
|
|
else if (button == Equals)
|
|
return '+';
|
|
else if (button == Tilde)
|
|
return '~';
|
|
else if (button == BackSlash)
|
|
return '|';
|
|
else if (button == LeftSquareBracket)
|
|
return '{';
|
|
else if (button == RightSquareBracket)
|
|
return '}';
|
|
else if (button == SemiColon)
|
|
return ':';
|
|
else if (button == Apostrophe)
|
|
return '"';
|
|
else if (button == Comma)
|
|
return '<';
|
|
else if (button == Period)
|
|
return '>';
|
|
else if (button == ForwardSlash)
|
|
return '?';
|
|
}
|
|
else
|
|
{
|
|
if (button == A)
|
|
return 'a';
|
|
else if (button == B)
|
|
return 'b';
|
|
else if (button == C)
|
|
return 'c';
|
|
else if (button == D)
|
|
return 'd';
|
|
else if (button == E)
|
|
return 'e';
|
|
else if (button == F)
|
|
return 'f';
|
|
else if (button == G)
|
|
return 'g';
|
|
else if (button == H)
|
|
return 'h';
|
|
else if (button == I)
|
|
return 'i';
|
|
else if (button == J)
|
|
return 'j';
|
|
else if (button == K)
|
|
return 'k';
|
|
else if (button == L)
|
|
return 'l';
|
|
else if (button == M)
|
|
return 'm';
|
|
else if (button == N)
|
|
return 'n';
|
|
else if (button == O)
|
|
return 'o';
|
|
else if (button == P)
|
|
return 'p';
|
|
else if (button == Q)
|
|
return 'q';
|
|
else if (button == R)
|
|
return 'r';
|
|
else if (button == S)
|
|
return 's';
|
|
else if (button == T)
|
|
return 't';
|
|
else if (button == U)
|
|
return 'u';
|
|
else if (button == V)
|
|
return 'v';
|
|
else if (button == W)
|
|
return 'w';
|
|
else if (button == X)
|
|
return 'x';
|
|
else if (button == Y)
|
|
return 'y';
|
|
else if (button == Z)
|
|
return 'z';
|
|
else if (button == One)
|
|
return '1';
|
|
else if (button == Two)
|
|
return '2';
|
|
else if (button == Three)
|
|
return '3';
|
|
else if (button == Four)
|
|
return '4';
|
|
else if (button == Five)
|
|
return '5';
|
|
else if (button == Six)
|
|
return '6';
|
|
else if (button == Seven)
|
|
return '7';
|
|
else if (button == Eight)
|
|
return '8';
|
|
else if (button == Nine)
|
|
return '9';
|
|
else if (button == Zero)
|
|
return '0';
|
|
else if (button == Minus)
|
|
return '-';
|
|
else if (button == Equals)
|
|
return '=';
|
|
else if (button == Tilde)
|
|
return '`';
|
|
else if (button == BackSlash)
|
|
return '\\';
|
|
else if (button == LeftSquareBracket)
|
|
return '[';
|
|
else if (button == RightSquareBracket)
|
|
return ']';
|
|
else if (button == SemiColon)
|
|
return ';';
|
|
else if (button == Apostrophe)
|
|
return '\'';
|
|
else if (button == Comma)
|
|
return ',';
|
|
else if (button == Period)
|
|
return '.';
|
|
else if (button == ForwardSlash)
|
|
return '/';
|
|
}
|
|
|
|
if (button == Space)
|
|
return ' ';
|
|
else
|
|
return 0x00;
|
|
}
|
|
}
|