| 5741 | } |
| 5742 | |
| 5743 | void QKeyMapper_Worker::initVK2HIDCodeMap() |
| 5744 | { |
| 5745 | // Initialize VK to HID Usage Code mapping |
| 5746 | // Based on USB HID Usage Tables (https://www.usb.org/sites/default/files/hut1_22.pdf) |
| 5747 | |
| 5748 | s_VK2HIDCodeMap.clear(); |
| 5749 | s_VK2HIDModifierMap.clear(); |
| 5750 | |
| 5751 | // Modifier keys -> HID Modifier flags |
| 5752 | s_VK2HIDModifierMap.insert(VK_LCONTROL, KBD_LCONTROL_BIT); // 0xA2 -> Left Control |
| 5753 | s_VK2HIDModifierMap.insert(VK_RCONTROL, KBD_RCONTROL_BIT); // 0xA3 -> Right Control |
| 5754 | s_VK2HIDModifierMap.insert(VK_LSHIFT, KBD_LSHIFT_BIT); // 0xA0 -> Left Shift |
| 5755 | s_VK2HIDModifierMap.insert(VK_RSHIFT, KBD_RSHIFT_BIT); // 0xA1 -> Right Shift |
| 5756 | s_VK2HIDModifierMap.insert(VK_LMENU, KBD_LALT_BIT); // 0xA4 -> Left Alt |
| 5757 | s_VK2HIDModifierMap.insert(VK_RMENU, KBD_RALT_BIT); // 0xA5 -> Right Alt |
| 5758 | s_VK2HIDModifierMap.insert(VK_LWIN, KBD_LGUI_BIT); // 0x5B -> Left GUI (Win) |
| 5759 | s_VK2HIDModifierMap.insert(VK_RWIN, KBD_RGUI_BIT); // 0x5C -> Right GUI (Win) |
| 5760 | |
| 5761 | // Letter keys A-Z -> HID 0x04 - 0x1D |
| 5762 | for (int i = 0; i < 26; i++) { |
| 5763 | s_VK2HIDCodeMap.insert(VK_A + i, 0x04 + i); |
| 5764 | } |
| 5765 | |
| 5766 | // Number keys 1-9 -> HID 0x1E - 0x26 |
| 5767 | for (int i = 0; i < 9; i++) { |
| 5768 | s_VK2HIDCodeMap.insert(VK_1 + i, 0x1E + i); |
| 5769 | } |
| 5770 | // Number 0 -> HID 0x27 |
| 5771 | s_VK2HIDCodeMap.insert(VK_0, 0x27); |
| 5772 | |
| 5773 | // Function keys F1-F12 -> HID 0x3A - 0x45 |
| 5774 | for (int i = 0; i < 12; i++) { |
| 5775 | s_VK2HIDCodeMap.insert(VK_F1 + i, 0x3A + i); |
| 5776 | } |
| 5777 | // Function keys F13-F24 -> HID 0x68 - 0x73 |
| 5778 | for (int i = 0; i < 12; i++) { |
| 5779 | s_VK2HIDCodeMap.insert(VK_F13 + i, 0x68 + i); |
| 5780 | } |
| 5781 | |
| 5782 | // Special keys |
| 5783 | s_VK2HIDCodeMap.insert(VK_ESCAPE, 0x29); // Escape |
| 5784 | s_VK2HIDCodeMap.insert(VK_BACK, 0x2A); // Backspace |
| 5785 | s_VK2HIDCodeMap.insert(VK_TAB, 0x2B); // Tab |
| 5786 | s_VK2HIDCodeMap.insert(VK_SPACE, 0x2C); // Space |
| 5787 | s_VK2HIDCodeMap.insert(VK_RETURN, 0x28); // Enter |
| 5788 | s_VK2HIDCodeMap.insert(VK_CAPITAL, 0x39); // CapsLock |
| 5789 | s_VK2HIDCodeMap.insert(VK_SNAPSHOT, 0x46); // PrintScreen |
| 5790 | s_VK2HIDCodeMap.insert(VK_SCROLL, 0x47); // ScrollLock |
| 5791 | s_VK2HIDCodeMap.insert(VK_PAUSE, 0x48); // Pause |
| 5792 | |
| 5793 | // Navigation keys |
| 5794 | s_VK2HIDCodeMap.insert(VK_INSERT, 0x49); // Insert |
| 5795 | s_VK2HIDCodeMap.insert(VK_HOME, 0x4A); // Home |
| 5796 | s_VK2HIDCodeMap.insert(VK_PRIOR, 0x4B); // PageUp |
| 5797 | s_VK2HIDCodeMap.insert(VK_DELETE, 0x4C); // Delete |
| 5798 | s_VK2HIDCodeMap.insert(VK_END, 0x4D); // End |
| 5799 | s_VK2HIDCodeMap.insert(VK_NEXT, 0x4E); // PageDown |
| 5800 | |