IOS/USB_KBD: Make key code lookup tables immutable and internally linked
These aren't modified by the class, nor do they directly need anything related to the class state, so they can solely live within the cpp file, hidden from external view, and also be made const, so the compiler can place it within the read-only segment.
This commit is contained in:
parent
00ecfb3c59
commit
64564e337b
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "Core/IOS/USB/USB_KBD.h"
|
#include "Core/IOS/USB/USB_KBD.h"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
|
@ -22,6 +23,160 @@
|
||||||
|
|
||||||
namespace IOS::HLE::Device
|
namespace IOS::HLE::Device
|
||||||
{
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
// Crazy ugly
|
||||||
|
#ifdef _WIN32
|
||||||
|
constexpr std::array<u8, 256> s_key_codes_qwerty{
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x2A, // Backspace
|
||||||
|
0x2B, // Tab
|
||||||
|
0x00, 0x00,
|
||||||
|
0x00, // Clear
|
||||||
|
0x28, // Return
|
||||||
|
0x00, 0x00,
|
||||||
|
0x00, // Shift
|
||||||
|
0x00, // Control
|
||||||
|
0x00, // ALT
|
||||||
|
0x48, // Pause
|
||||||
|
0x39, // Capital
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x29, // Escape
|
||||||
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x2C, // Space
|
||||||
|
0x4B, // Prior
|
||||||
|
0x4E, // Next
|
||||||
|
0x4D, // End
|
||||||
|
0x4A, // Home
|
||||||
|
0x50, // Left
|
||||||
|
0x52, // Up
|
||||||
|
0x4F, // Right
|
||||||
|
0x51, // Down
|
||||||
|
0x00, 0x00, 0x00,
|
||||||
|
0x46, // Print screen
|
||||||
|
0x49, // Insert
|
||||||
|
0x4C, // Delete
|
||||||
|
0x00,
|
||||||
|
// 0 -> 9
|
||||||
|
0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00,
|
||||||
|
// A -> Z
|
||||||
|
0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13,
|
||||||
|
0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
// Numpad 0 -> 9
|
||||||
|
0x62, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61,
|
||||||
|
0x55, // Multiply
|
||||||
|
0x57, // Add
|
||||||
|
0x00, // Separator
|
||||||
|
0x56, // Subtract
|
||||||
|
0x63, // Decimal
|
||||||
|
0x54, // Divide
|
||||||
|
// F1 -> F12
|
||||||
|
0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
|
||||||
|
// F13 -> F24
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x53, // Numlock
|
||||||
|
0x47, // Scroll lock
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
// Modifier keys
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x33, // ';'
|
||||||
|
0x2E, // Plus
|
||||||
|
0x36, // Comma
|
||||||
|
0x2D, // Minus
|
||||||
|
0x37, // Period
|
||||||
|
0x38, // '/'
|
||||||
|
0x35, // '~'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x2F, // '['
|
||||||
|
0x32, // '\'
|
||||||
|
0x30, // ']'
|
||||||
|
0x34, // '''
|
||||||
|
0x00, //
|
||||||
|
0x00, // Nothing interesting past this point.
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr std::array<u8, 256> s_key_codes_azerty{
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x2A, // Backspace
|
||||||
|
0x2B, // Tab
|
||||||
|
0x00, 0x00,
|
||||||
|
0x00, // Clear
|
||||||
|
0x28, // Return
|
||||||
|
0x00, 0x00,
|
||||||
|
0x00, // Shift
|
||||||
|
0x00, // Control
|
||||||
|
0x00, // ALT
|
||||||
|
0x48, // Pause
|
||||||
|
0x39, // Capital
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x29, // Escape
|
||||||
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x2C, // Space
|
||||||
|
0x4B, // Prior
|
||||||
|
0x4E, // Next
|
||||||
|
0x4D, // End
|
||||||
|
0x4A, // Home
|
||||||
|
0x50, // Left
|
||||||
|
0x52, // Up
|
||||||
|
0x4F, // Right
|
||||||
|
0x51, // Down
|
||||||
|
0x00, 0x00, 0x00,
|
||||||
|
0x46, // Print screen
|
||||||
|
0x49, // Insert
|
||||||
|
0x4C, // Delete
|
||||||
|
0x00,
|
||||||
|
// 0 -> 9
|
||||||
|
0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00,
|
||||||
|
// A -> Z
|
||||||
|
0x14, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x33, 0x11, 0x12, 0x13,
|
||||||
|
0x04, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1D, 0x1B, 0x1C, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
// Numpad 0 -> 9
|
||||||
|
0x62, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61,
|
||||||
|
0x55, // Multiply
|
||||||
|
0x57, // Add
|
||||||
|
0x00, // Separator
|
||||||
|
0x56, // Substract
|
||||||
|
0x63, // Decimal
|
||||||
|
0x54, // Divide
|
||||||
|
// F1 -> F12
|
||||||
|
0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
|
||||||
|
// F13 -> F24
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x53, // Numlock
|
||||||
|
0x47, // Scroll lock
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
// Modifier keys
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x30, // '$'
|
||||||
|
0x2E, // Plus
|
||||||
|
0x10, // Comma
|
||||||
|
0x00, // Minus
|
||||||
|
0x36, // Period
|
||||||
|
0x37, // '/'
|
||||||
|
0x34, // ' '
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x2D, // ')'
|
||||||
|
0x32, // '\'
|
||||||
|
0x2F, // '^'
|
||||||
|
0x00, // ' '
|
||||||
|
0x38, // '!'
|
||||||
|
0x00, // Nothing interesting past this point.
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
constexpr std::array<u8, 256> s_key_codes_qwerty{};
|
||||||
|
|
||||||
|
constexpr std::array<u8, 256> s_key_codes_azerty{};
|
||||||
|
#endif
|
||||||
|
} // Anonymous namespace
|
||||||
|
|
||||||
USB_KBD::SMessageData::SMessageData(u32 type, u8 modifiers, u8* pressed_keys)
|
USB_KBD::SMessageData::SMessageData(u32 type, u8 modifiers, u8* pressed_keys)
|
||||||
{
|
{
|
||||||
MsgType = Common::swap32(type);
|
MsgType = Common::swap32(type);
|
||||||
|
@ -112,11 +267,11 @@ void USB_KBD::Update()
|
||||||
switch (m_KeyboardLayout)
|
switch (m_KeyboardLayout)
|
||||||
{
|
{
|
||||||
case KBD_LAYOUT_QWERTY:
|
case KBD_LAYOUT_QWERTY:
|
||||||
KeyCode = m_KeyCodesQWERTY[i];
|
KeyCode = s_key_codes_qwerty[i];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KBD_LAYOUT_AZERTY:
|
case KBD_LAYOUT_AZERTY:
|
||||||
KeyCode = m_KeyCodesAZERTY[i];
|
KeyCode = s_key_codes_azerty[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,159 +322,4 @@ void USB_KBD::Update()
|
||||||
if (GotEvent)
|
if (GotEvent)
|
||||||
m_MessageQueue.push(SMessageData(MSG_EVENT, Modifiers, PressedKeys));
|
m_MessageQueue.push(SMessageData(MSG_EVENT, Modifiers, PressedKeys));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Crazy ugly
|
|
||||||
#ifdef _WIN32
|
|
||||||
u8 USB_KBD::m_KeyCodesQWERTY[256] = {
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x2A, // Backspace
|
|
||||||
0x2B, // Tab
|
|
||||||
0x00, 0x00,
|
|
||||||
0x00, // Clear
|
|
||||||
0x28, // Return
|
|
||||||
0x00, 0x00,
|
|
||||||
0x00, // Shift
|
|
||||||
0x00, // Control
|
|
||||||
0x00, // ALT
|
|
||||||
0x48, // Pause
|
|
||||||
0x39, // Capital
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x29, // Escape
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x2C, // Space
|
|
||||||
0x4B, // Prior
|
|
||||||
0x4E, // Next
|
|
||||||
0x4D, // End
|
|
||||||
0x4A, // Home
|
|
||||||
0x50, // Left
|
|
||||||
0x52, // Up
|
|
||||||
0x4F, // Right
|
|
||||||
0x51, // Down
|
|
||||||
0x00, 0x00, 0x00,
|
|
||||||
0x46, // Print screen
|
|
||||||
0x49, // Insert
|
|
||||||
0x4C, // Delete
|
|
||||||
0x00,
|
|
||||||
// 0 -> 9
|
|
||||||
0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00,
|
|
||||||
// A -> Z
|
|
||||||
0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13,
|
|
||||||
0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
// Numpad 0 -> 9
|
|
||||||
0x62, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61,
|
|
||||||
0x55, // Multiply
|
|
||||||
0x57, // Add
|
|
||||||
0x00, // Separator
|
|
||||||
0x56, // Subtract
|
|
||||||
0x63, // Decimal
|
|
||||||
0x54, // Divide
|
|
||||||
// F1 -> F12
|
|
||||||
0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
|
|
||||||
// F13 -> F24
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x53, // Numlock
|
|
||||||
0x47, // Scroll lock
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
// Modifier keys
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x33, // ';'
|
|
||||||
0x2E, // Plus
|
|
||||||
0x36, // Comma
|
|
||||||
0x2D, // Minus
|
|
||||||
0x37, // Period
|
|
||||||
0x38, // '/'
|
|
||||||
0x35, // '~'
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x2F, // '['
|
|
||||||
0x32, // '\'
|
|
||||||
0x30, // ']'
|
|
||||||
0x34, // '''
|
|
||||||
0x00, //
|
|
||||||
0x00, // Nothing interesting past this point.
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
u8 USB_KBD::m_KeyCodesAZERTY[256] = {
|
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x2A, // Backspace
|
|
||||||
0x2B, // Tab
|
|
||||||
0x00, 0x00,
|
|
||||||
0x00, // Clear
|
|
||||||
0x28, // Return
|
|
||||||
0x00, 0x00,
|
|
||||||
0x00, // Shift
|
|
||||||
0x00, // Control
|
|
||||||
0x00, // ALT
|
|
||||||
0x48, // Pause
|
|
||||||
0x39, // Capital
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x29, // Escape
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x2C, // Space
|
|
||||||
0x4B, // Prior
|
|
||||||
0x4E, // Next
|
|
||||||
0x4D, // End
|
|
||||||
0x4A, // Home
|
|
||||||
0x50, // Left
|
|
||||||
0x52, // Up
|
|
||||||
0x4F, // Right
|
|
||||||
0x51, // Down
|
|
||||||
0x00, 0x00, 0x00,
|
|
||||||
0x46, // Print screen
|
|
||||||
0x49, // Insert
|
|
||||||
0x4C, // Delete
|
|
||||||
0x00,
|
|
||||||
// 0 -> 9
|
|
||||||
0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00,
|
|
||||||
// A -> Z
|
|
||||||
0x14, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x33, 0x11, 0x12, 0x13,
|
|
||||||
0x04, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1D, 0x1B, 0x1C, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
// Numpad 0 -> 9
|
|
||||||
0x62, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61,
|
|
||||||
0x55, // Multiply
|
|
||||||
0x57, // Add
|
|
||||||
0x00, // Separator
|
|
||||||
0x56, // Substract
|
|
||||||
0x63, // Decimal
|
|
||||||
0x54, // Divide
|
|
||||||
// F1 -> F12
|
|
||||||
0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
|
|
||||||
// F13 -> F24
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x53, // Numlock
|
|
||||||
0x47, // Scroll lock
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
// Modifier keys
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x30, // '$'
|
|
||||||
0x2E, // Plus
|
|
||||||
0x10, // Comma
|
|
||||||
0x00, // Minus
|
|
||||||
0x36, // Period
|
|
||||||
0x37, // '/'
|
|
||||||
0x34, // ' '
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x2D, // ')'
|
|
||||||
0x32, // '\'
|
|
||||||
0x2F, // '^'
|
|
||||||
0x00, // ' '
|
|
||||||
0x38, // '!'
|
|
||||||
0x00, // Nothing interesting past this point.
|
|
||||||
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
u8 USB_KBD::m_KeyCodesQWERTY[256] = {0};
|
|
||||||
|
|
||||||
u8 USB_KBD::m_KeyCodesAZERTY[256] = {0};
|
|
||||||
#endif
|
|
||||||
} // namespace IOS::HLE::Device
|
} // namespace IOS::HLE::Device
|
||||||
|
|
|
@ -57,7 +57,5 @@ private:
|
||||||
KBD_LAYOUT_AZERTY = 1
|
KBD_LAYOUT_AZERTY = 1
|
||||||
};
|
};
|
||||||
int m_KeyboardLayout;
|
int m_KeyboardLayout;
|
||||||
static u8 m_KeyCodesQWERTY[256];
|
|
||||||
static u8 m_KeyCodesAZERTY[256];
|
|
||||||
};
|
};
|
||||||
} // namespace IOS::HLE::Device
|
} // namespace IOS::HLE::Device
|
||||||
|
|
Loading…
Reference in New Issue