[Mammoth] Add keycodes for all non-fn keys.
This commit is contained in:
parent
a83893d110
commit
f01b447af4
|
@ -55,6 +55,12 @@ void KeyboardListenerBase::ListenLoop() {
|
||||||
check(scancode_or.error());
|
check(scancode_or.error());
|
||||||
}
|
}
|
||||||
uint8_t scancode = scancode_or.value();
|
uint8_t scancode = scancode_or.value();
|
||||||
|
|
||||||
|
if (scancode == 0xE0) {
|
||||||
|
extended_on_ = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Keycode k = ScancodeToKeycode(scancode);
|
Keycode k = ScancodeToKeycode(scancode);
|
||||||
Action a = ScancodeToAction(scancode);
|
Action a = ScancodeToAction(scancode);
|
||||||
HandleKeycode(k, a);
|
HandleKeycode(k, a);
|
||||||
|
@ -82,12 +88,12 @@ void KeyboardListenerBase::HandleKeycode(Keycode code, Action action) {
|
||||||
const char* num = "1234567890";
|
const char* num = "1234567890";
|
||||||
c = num[code - k1];
|
c = num[code - k1];
|
||||||
}
|
}
|
||||||
} else if (code >= kMinus && code <= kPeriod) {
|
} else if (code >= kMinus && code <= kBacktick) {
|
||||||
if (IsShift()) {
|
if (IsShift()) {
|
||||||
const char* sym = "_+{}|?:\"<>";
|
const char* sym = "_+{}|?:\"<>~";
|
||||||
c = sym[code - kMinus];
|
c = sym[code - kMinus];
|
||||||
} else {
|
} else {
|
||||||
const char* sym = "-=[]\\/;',.";
|
const char* sym = "-=[]\\/;',.`";
|
||||||
c = sym[code - kMinus];
|
c = sym[code - kMinus];
|
||||||
}
|
}
|
||||||
} else if (code == kEnter) {
|
} else if (code == kEnter) {
|
||||||
|
@ -117,7 +123,35 @@ void KeyboardListenerBase::HandleKeycode(Keycode code, Action action) {
|
||||||
Keycode KeyboardListenerBase::ScancodeToKeycode(uint8_t scancode) {
|
Keycode KeyboardListenerBase::ScancodeToKeycode(uint8_t scancode) {
|
||||||
// Cancel out the released bit.
|
// Cancel out the released bit.
|
||||||
scancode &= 0x7F;
|
scancode &= 0x7F;
|
||||||
|
if (extended_on_) {
|
||||||
|
extended_on_ = false;
|
||||||
|
|
||||||
|
switch (scancode) {
|
||||||
|
case 0x1D:
|
||||||
|
return kRCtrl;
|
||||||
|
case 0x38:
|
||||||
|
return kRAlt;
|
||||||
|
case 0x48:
|
||||||
|
return kUp;
|
||||||
|
case 0x4B:
|
||||||
|
return kLeft;
|
||||||
|
case 0x4D:
|
||||||
|
return kRight;
|
||||||
|
case 0x50:
|
||||||
|
return kDown;
|
||||||
|
case 0x53:
|
||||||
|
return kDelete;
|
||||||
|
case 0x5B:
|
||||||
|
return kSuper;
|
||||||
|
}
|
||||||
|
dbgln("Unknown extended scancode {x}", scancode);
|
||||||
|
|
||||||
|
return kUnknownKeycode;
|
||||||
|
}
|
||||||
|
|
||||||
switch (scancode) {
|
switch (scancode) {
|
||||||
|
case 0x01:
|
||||||
|
return kEsc;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
return k1;
|
return k1;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
|
@ -142,6 +176,8 @@ Keycode KeyboardListenerBase::ScancodeToKeycode(uint8_t scancode) {
|
||||||
return kMinus;
|
return kMinus;
|
||||||
case 0x0D:
|
case 0x0D:
|
||||||
return kEquals;
|
return kEquals;
|
||||||
|
case 0x0E:
|
||||||
|
return kBackspace;
|
||||||
case 0x0F:
|
case 0x0F:
|
||||||
return kTab;
|
return kTab;
|
||||||
case 0x10:
|
case 0x10:
|
||||||
|
@ -170,6 +206,8 @@ Keycode KeyboardListenerBase::ScancodeToKeycode(uint8_t scancode) {
|
||||||
return kRBrace;
|
return kRBrace;
|
||||||
case 0x1C:
|
case 0x1C:
|
||||||
return kEnter;
|
return kEnter;
|
||||||
|
case 0x1D:
|
||||||
|
return kLCtrl;
|
||||||
case 0x1E:
|
case 0x1E:
|
||||||
return kA;
|
return kA;
|
||||||
case 0x1F:
|
case 0x1F:
|
||||||
|
@ -192,6 +230,8 @@ Keycode KeyboardListenerBase::ScancodeToKeycode(uint8_t scancode) {
|
||||||
return kSemicolon;
|
return kSemicolon;
|
||||||
case 0x28:
|
case 0x28:
|
||||||
return kQuote;
|
return kQuote;
|
||||||
|
case 0x29:
|
||||||
|
return kBacktick;
|
||||||
case 0x2A:
|
case 0x2A:
|
||||||
return kLShift;
|
return kLShift;
|
||||||
case 0x2B:
|
case 0x2B:
|
||||||
|
@ -218,6 +258,8 @@ Keycode KeyboardListenerBase::ScancodeToKeycode(uint8_t scancode) {
|
||||||
return kFSlash;
|
return kFSlash;
|
||||||
case 0x36:
|
case 0x36:
|
||||||
return kRShift;
|
return kRShift;
|
||||||
|
case 0x38:
|
||||||
|
return kLAlt;
|
||||||
case 0x39:
|
case 0x39:
|
||||||
return kSpace;
|
return kSpace;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,8 @@ enum Keycode {
|
||||||
kSpace = 0x30,
|
kSpace = 0x30,
|
||||||
kEnter = 0x31,
|
kEnter = 0x31,
|
||||||
kTab = 0x32,
|
kTab = 0x32,
|
||||||
|
kBackspace = 0x33,
|
||||||
|
kDelete = 0x34,
|
||||||
|
|
||||||
kMinus = 0x40,
|
kMinus = 0x40,
|
||||||
kEquals = 0x41,
|
kEquals = 0x41,
|
||||||
|
@ -60,9 +62,20 @@ enum Keycode {
|
||||||
kQuote = 0x47,
|
kQuote = 0x47,
|
||||||
kComma = 0x48,
|
kComma = 0x48,
|
||||||
kPeriod = 0x49,
|
kPeriod = 0x49,
|
||||||
|
kBacktick = 0x4A,
|
||||||
|
|
||||||
kLShift = 0x50,
|
kLShift = 0x50,
|
||||||
kRShift = 0x51,
|
kRShift = 0x51,
|
||||||
|
kLCtrl = 0x52,
|
||||||
|
kRCtrl = 0x53,
|
||||||
|
kLAlt = 0x54,
|
||||||
|
kRAlt = 0x55,
|
||||||
|
kSuper = 0x56,
|
||||||
|
kEsc = 0x57,
|
||||||
|
kUp = 0x58,
|
||||||
|
kDown = 0x59,
|
||||||
|
kLeft = 0x5A,
|
||||||
|
kRight = 0x5B,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Action {
|
enum Action {
|
||||||
|
@ -96,6 +109,8 @@ class KeyboardListenerBase {
|
||||||
private:
|
private:
|
||||||
PortServer server_;
|
PortServer server_;
|
||||||
|
|
||||||
|
bool extended_on_ = false;
|
||||||
|
|
||||||
bool lshift_ = false;
|
bool lshift_ = false;
|
||||||
bool rshift_ = false;
|
bool rshift_ = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue