1 //
2 // Copyright (c) 2010-2018 Antmicro
3 // Copyright (c) 2011-2015 Realtime Embedded
4 //
5 // This file is licensed under the MIT License.
6 // Full license text is available in 'licenses/MIT.txt'.
7 //
8 using Antmicro.Renode.Peripherals.Input;
9 using System.Collections.Generic;
10 
11 namespace Antmicro.Renode.Extensions.Analyzers.Video.Events
12 {
13     internal class X11ToKeyScanCodeConverter
14     {
X11ToKeyScanCodeConverter()15         static X11ToKeyScanCodeConverter()
16         {
17             Instance = new X11ToKeyScanCodeConverter();
18         }
19 
20         public static X11ToKeyScanCodeConverter Instance { get; private set; }
21 
GetScanCode(int fromValue)22         public KeyScanCode? GetScanCode(int fromValue)
23         {
24             KeyScanCode result;
25             return ToScanCode.TryGetValue(fromValue, out result) ? (KeyScanCode?)result : null;
26         }
27 
28         private readonly Dictionary<int, KeyScanCode> ToScanCode = new Dictionary<int, KeyScanCode> {
29             { 0x25, KeyScanCode.CtrlL },
30             { 0x85, KeyScanCode.WinL },
31             { 0x40, KeyScanCode.AltL },
32             { 0x41, KeyScanCode.Space },
33             { 0x6c, KeyScanCode.AltR },
34             { 0x5c, KeyScanCode.AltR },
35             { 0x86, KeyScanCode.WinR },
36             { 0x87, KeyScanCode.WinMenu },
37             { 0x69, KeyScanCode.CtrlR },
38 
39             { 0x32, KeyScanCode.ShiftL  },
40             { 0x34, KeyScanCode.Z },
41             { 0x35, KeyScanCode.X },
42             { 0x36, KeyScanCode.C },
43             { 0x37, KeyScanCode.V },
44             { 0x38, KeyScanCode.B },
45             { 0x39, KeyScanCode.N },
46             { 0x3a, KeyScanCode.M },
47             { 0x3b, KeyScanCode.OemPeriod },
48             { 0x3c, KeyScanCode.OemComma },
49             { 0x3d, KeyScanCode.OemQuestion },
50             { 0x3e, KeyScanCode.ShiftR },
51 
52             { 0x42, KeyScanCode.CapsLock },
53             { 0x26, KeyScanCode.A },
54             { 0x27, KeyScanCode.S },
55             { 0x28, KeyScanCode.D },
56             { 0x29, KeyScanCode.F },
57             { 0x2a, KeyScanCode.G },
58             { 0x2b, KeyScanCode.H },
59             { 0x2c, KeyScanCode.J },
60             { 0x2d, KeyScanCode.K },
61             { 0x2e, KeyScanCode.L },
62             { 0x2f, KeyScanCode.OemSemicolon },
63             { 0x30, KeyScanCode.OemQuotes },
64             { 0x24, KeyScanCode.Enter },
65 
66             { 0x17, KeyScanCode.Tab },
67             { 0x18, KeyScanCode.Q },
68             { 0x19, KeyScanCode.W },
69             { 0x1a, KeyScanCode.E },
70             { 0x1b, KeyScanCode.R },
71             { 0x1c, KeyScanCode.T },
72             { 0x1d, KeyScanCode.Y },
73             { 0x1e, KeyScanCode.U },
74             { 0x1f, KeyScanCode.I },
75             { 0x20, KeyScanCode.O },
76             { 0x21, KeyScanCode.P },
77             { 0x22, KeyScanCode.OemOpenBrackets },
78             { 0x23, KeyScanCode.OemCloseBrackets },
79 
80             { 0x31, KeyScanCode.Tilde },
81             { 0x0a, KeyScanCode.Number1 },
82             { 0x0b, KeyScanCode.Number2 },
83             { 0x0c, KeyScanCode.Number3 },
84             { 0x0d, KeyScanCode.Number4 },
85             { 0x0e, KeyScanCode.Number5 },
86             { 0x0f, KeyScanCode.Number6 },
87             { 0x10, KeyScanCode.Number7 },
88             { 0x11, KeyScanCode.Number8 },
89             { 0x12, KeyScanCode.Number9 },
90             { 0x13, KeyScanCode.Number0 },
91             { 0x14, KeyScanCode.OemMinus },
92             { 0x15, KeyScanCode.OemPlus },
93             { 0x33, KeyScanCode.OemPipe },
94             { 0x16, KeyScanCode.BackSpace },
95 
96             { 0x09, KeyScanCode.Escape },
97             { 0x43, KeyScanCode.F1 },
98             { 0x44, KeyScanCode.F2 },
99             { 0x45, KeyScanCode.F3 },
100             { 0x46, KeyScanCode.F4 },
101             { 0x47, KeyScanCode.F5 },
102             { 0x48, KeyScanCode.F6 },
103             { 0x49, KeyScanCode.F7 },
104             { 0x4a, KeyScanCode.F8 },
105             { 0x4b, KeyScanCode.F9 },
106             { 0x4c, KeyScanCode.F10 },
107             { 0x5f, KeyScanCode.F11 },
108             { 0x60, KeyScanCode.F12 },
109             { 0x6b, KeyScanCode.PrtSc },
110             { 0x4e, KeyScanCode.ScrollLock },
111             { 0x7f, KeyScanCode.Pause },
112 
113             { 0x76, KeyScanCode.Insert },
114             { 0x6e, KeyScanCode.Home },
115             { 0x70, KeyScanCode.PageUp },
116             { 0x77, KeyScanCode.Delete },
117             { 0x73, KeyScanCode.End },
118             { 0x75, KeyScanCode.PageDown },
119 
120             { 0x6f, KeyScanCode.Up },
121             { 0x74, KeyScanCode.Down },
122             { 0x71, KeyScanCode.Left },
123             { 0x72, KeyScanCode.Right },
124 
125             { 0x4d, KeyScanCode.NumLock },
126             { 0x5a, KeyScanCode.Keypad0 },
127             { 0x57, KeyScanCode.Keypad1 },
128             { 0x58, KeyScanCode.Keypad2 },
129             { 0x59, KeyScanCode.Keypad3 },
130             { 0x53, KeyScanCode.Keypad4 },
131             { 0x54, KeyScanCode.Keypad5 },
132             { 0x55, KeyScanCode.Keypad6 },
133             { 0x4f, KeyScanCode.Keypad7 },
134             { 0x50, KeyScanCode.Keypad8 },
135             { 0x51, KeyScanCode.Keypad9 },
136             { 0x6a, KeyScanCode.KeypadDivide },
137             { 0x3f, KeyScanCode.KeypadMultiply },
138             { 0x52, KeyScanCode.KeypadMinus },
139             { 0x56, KeyScanCode.KeypadPlus },
140             { 0x5b, KeyScanCode.KeypadComma },
141             { 0x68, KeyScanCode.KeypadEnter },
142         };
143     }
144 }
145 
146