]>
git.gir.st - sendHID.git/blob - scancodes.c
4 struct keysym keysyms
[] = {
5 [0] = {"", {0x00, 0x00}, {0x00, 0x00}},
6 //using [1]..[31] for non-ascii (utf-8) characters
7 [1] = {"ä", {0x00, 0x00}, {0x34, 0x00}, {0x34, 0x00}, .unicode
= 0xe4},
8 {"Ä", {0x00, 0x00}, {0x34, 0x02}, {0x34, 0x02}, .unicode
= 0xc4},
9 {"ö", {0x00, 0x00}, {0x33, 0x00}, {0x33, 0x00}, .unicode
= 0xf6},
10 {"Ö", {0x00, 0x00}, {0x33, 0x02}, {0x33, 0x02}, .unicode
= 0xd6},
11 {"ü", {0x00, 0x00}, {0x2f, 0x00}, {0x2f, 0x00}, .unicode
= 0xfc},
12 {"Ü", {0x00, 0x00}, {0x2f, 0x02}, {0x2f, 0x02}, .unicode
= 0xdc},
13 {"ß", {0x00, 0x00}, {0x2d, 0x00}, {0x2d, 0x00}, .unicode
= 0xdf},
14 {"€", {0x00, 0x00}, {0x08, 0x40}, {0x08, 0x40}, .unicode
= 0x20ac},
15 {"µ", {0x00, 0x00}, {0x10, 0x40}, {0x10, 0x40}, .unicode
= 0x3bc},
16 {"°", {0x00, 0x00}, {0x35, 0x02}, {0x35, 0x02}, .unicode
= 0xb0},
17 {"§", {0x00, 0x00}, {0x20, 0x02}, {0x20, 0x02}, .unicode
= 0xa7},
18 [32] = {" ", {0x2c, 0x00}, {0x2c, 0x00}, {0x2c, 0x00}},
19 {"!", {0x1e, 0x02}, {0x1e, 0x02}, {0x1e, 0x02}},
20 {"\"",{0x34, 0x02}, {0x1f, 0x02}, {0x1f, 0x02}},
21 {"#", {0x20, 0x02}, {0x31, 0x00}, {0x31, 0x00}},
22 {"$", {0x21, 0x02}, {0x21, 0x02}, {0x21, 0x02}},
23 {"%", {0x22, 0x02}, {0x22, 0x02}, {0x22, 0x02}},
24 {"&", {0x24, 0x02}, {0x23, 0x02}, {0x23, 0x02}},
25 {"'", {0x34, 0x00}, {0x31, 0x02}, {0x31, 0x02}},
26 {"(", {0x26, 0x02}, {0x25, 0x02}, {0x25, 0x02}},
27 {")", {0x27, 0x02}, {0x26, 0x02}, {0x26, 0x02}},
28 {"*", {0x25, 0x02}, {0x30, 0x02}, {0x30, 0x02}},
29 {"+", {0x2e, 0x02}, {0x30, 0x00}, {0x30, 0x00}},
30 {"´", {0x32, 0x00}, {0x2e, 0x00, .is_dead
= 1}, {0x2e, 0x00}},
31 {"-", {0x2d, 0x00}, {0x38, 0x00}, {0x38, 0x00}},
32 {".", {0x37, 0x00}, {0x37, 0x00}, {0x37, 0x00}},
33 {"/", {0x38, 0x00}, {0x24, 0x02}, {0x24, 0x02}},
34 {"0", {0x27, 0x00}, {0x27, 0x00}, {0x27, 0x00}},
35 {"1", {0x1e, 0x00}, {0x1e, 0x00}, {0x1e, 0x00}},
36 {"2", {0x1f, 0x00}, {0x1f, 0x00}, {0x1f, 0x00}},
37 {"3", {0x20, 0x00}, {0x20, 0x00}, {0x20, 0x00}},
38 {"4", {0x21, 0x00}, {0x21, 0x00}, {0x21, 0x00}},
39 {"5", {0x22, 0x00}, {0x22, 0x00}, {0x22, 0x00}},
40 {"6", {0x23, 0x00}, {0x23, 0x00}, {0x23, 0x00}},
41 {"7", {0x24, 0x00}, {0x24, 0x00}, {0x24, 0x00}},
42 {"8", {0x25, 0x00}, {0x25, 0x00}, {0x25, 0x00}},
43 {"9", {0x26, 0x00}, {0x26, 0x00}, {0x26, 0x00}},
44 {":", {0x33, 0x02}, {0x37, 0x02}, {0x37, 0x02}},
45 {";", {0x33, 0x00}, {0x36, 0x02}, {0x36, 0x02}},
46 {"<", {0x36, 0x02}, {0x64, 0x00}, {0x64, 0x00}},
47 {"=", {0x2e, 0x00}, {0x27, 0x02}, {0x27, 0x02}},
48 {">", {0x37, 0x02}, {0x64, 0x02}, {0x64, 0x02}},
49 {"?", {0x38, 0x02}, {0x2d, 0x02}, {0x2d, 0x02}},
50 {"@", {0x1f, 0x02}, {0x14, 0x40}, {0x14, 0x40}},
51 {"A", {0x04, 0x02}, {0x04, 0x02}, {0x04, 0x02}},
52 {"B", {0x05, 0x02}, {0x05, 0x02}, {0x05, 0x02}},
53 {"C", {0x06, 0x02}, {0x06, 0x02}, {0x06, 0x02}},
54 {"D", {0x07, 0x02}, {0x07, 0x02}, {0x07, 0x02}},
55 {"E", {0x08, 0x02}, {0x08, 0x02}, {0x08, 0x02}},
56 {"F", {0x09, 0x02}, {0x09, 0x02}, {0x09, 0x02}},
57 {"G", {0x0a, 0x02}, {0x0a, 0x02}, {0x0a, 0x02}},
58 {"H", {0x0b, 0x02}, {0x0b, 0x02}, {0x0b, 0x02}},
59 {"I", {0x0c, 0x02}, {0x0c, 0x02}, {0x0c, 0x02}},
60 {"J", {0x0d, 0x02}, {0x0d, 0x02}, {0x0d, 0x02}},
61 {"K", {0x0e, 0x02}, {0x0e, 0x02}, {0x0e, 0x02}},
62 {"L", {0x0f, 0x02}, {0x0f, 0x02}, {0x0f, 0x02}},
63 {"M", {0x10, 0x02}, {0x10, 0x02}, {0x10, 0x02}},
64 {"N", {0x11, 0x02}, {0x11, 0x02}, {0x11, 0x02}},
65 {"O", {0x12, 0x02}, {0x12, 0x02}, {0x12, 0x02}},
66 {"P", {0x13, 0x02}, {0x13, 0x02}, {0x13, 0x02}},
67 {"Q", {0x14, 0x02}, {0x14, 0x02}, {0x14, 0x02}},
68 {"R", {0x15, 0x02}, {0x15, 0x02}, {0x15, 0x02}},
69 {"S", {0x16, 0x02}, {0x16, 0x02}, {0x16, 0x02}},
70 {"T", {0x17, 0x02}, {0x17, 0x02}, {0x17, 0x02}},
71 {"U", {0x18, 0x02}, {0x18, 0x02}, {0x18, 0x02}},
72 {"V", {0x19, 0x02}, {0x19, 0x02}, {0x19, 0x02}},
73 {"W", {0x1a, 0x02}, {0x1a, 0x02}, {0x1a, 0x02}},
74 {"X", {0x1b, 0x02}, {0x1b, 0x02}, {0x1b, 0x02}},
75 {"Y", {0x1c, 0x02}, {0x1d, 0x02}, {0x1d, 0x02}},
76 {"Z", {0x1d, 0x02}, {0x1c, 0x02}, {0x1c, 0x02}},
77 {"[", {0x2f, 0x00}, {0x25, 0x40}, {0x25, 0x40}},
78 {"\\",{0x31, 0x00}, {0x2d, 0x40}, {0x2d, 0x40}},
79 {"]", {0x30, 0x00}, {0x26, 0x40}, {0x26, 0x40}},
80 {"^", {0x23, 0x02}, {0x35, 0x00, .is_dead
= 1}, {0x35, 0x00}},
81 {"_", {0x2d, 0x02}, {0x38, 0x02}, {0x38, 0x02}},
82 {"`", {0x35, 0x00}, {0x2e, 0x02, .is_dead
= 1}, {0x2e, 0x02}},
83 {"a", {0x04, 0x00}, {0x04, 0x00}, {0x04, 0x00}},
84 {"b", {0x05, 0x00}, {0x05, 0x00}, {0x05, 0x00}},
85 {"c", {0x06, 0x00}, {0x06, 0x00}, {0x06, 0x00}},
86 {"d", {0x07, 0x00}, {0x07, 0x00}, {0x07, 0x00}},
87 {"e", {0x08, 0x00}, {0x08, 0x00}, {0x08, 0x00}},
88 {"f", {0x09, 0x00}, {0x09, 0x00}, {0x09, 0x00}},
89 {"g", {0x0a, 0x00}, {0x0a, 0x00}, {0x0a, 0x00}},
90 {"h", {0x0b, 0x00}, {0x0b, 0x00}, {0x0b, 0x00}},
91 {"i", {0x0c, 0x00}, {0x0c, 0x00}, {0x0c, 0x00}},
92 {"j", {0x0d, 0x00}, {0x0d, 0x00}, {0x0d, 0x00}},
93 {"k", {0x0e, 0x00}, {0x0e, 0x00}, {0x0e, 0x00}},
94 {"l", {0x0f, 0x00}, {0x0f, 0x00}, {0x0f, 0x00}},
95 {"m", {0x10, 0x00}, {0x10, 0x00}, {0x10, 0x00}},
96 {"n", {0x11, 0x00}, {0x11, 0x00}, {0x11, 0x00}},
97 {"o", {0x12, 0x00}, {0x12, 0x00}, {0x12, 0x00}},
98 {"p", {0x13, 0x00}, {0x13, 0x00}, {0x13, 0x00}},
99 {"q", {0x14, 0x00}, {0x14, 0x00}, {0x14, 0x00}},
100 {"r", {0x15, 0x00}, {0x15, 0x00}, {0x15, 0x00}},
101 {"s", {0x16, 0x00}, {0x16, 0x00}, {0x16, 0x00}},
102 {"t", {0x17, 0x00}, {0x17, 0x00}, {0x17, 0x00}},
103 {"u", {0x18, 0x00}, {0x18, 0x00}, {0x18, 0x00}},
104 {"v", {0x19, 0x00}, {0x19, 0x00}, {0x19, 0x00}},
105 {"w", {0x1a, 0x00}, {0x1a, 0x00}, {0x1a, 0x00}},
106 {"x", {0x1b, 0x00}, {0x1b, 0x00}, {0x1b, 0x00}},
107 {"y", {0x1c, 0x00}, {0x1d, 0x00}, {0x1d, 0x00}},
108 {"z", {0x1d, 0x00}, {0x1c, 0x00}, {0x1c, 0x00}},
109 {"{", {0x2f, 0x02}, {0x2f, 0x02}, {0x24, 0x40}},
110 {"|", {0x31, 0x02}, {0x64, 0x40}, {0x64, 0x40}},
111 {"}", {0x30, 0x02}, {0x27, 0x40}, {0x27, 0x40}},
112 {"~", {0x35, 0x02}, {0x30, 0x40}, {0x30, 0x40}}
115 struct keysym
* toscan (const char* utf8
) {
116 if (utf8
[1] == '\0') return &(keysyms
[(int)utf8
[0]]); //if char is not wide, it is on the corrent ascii position in the look up table
117 for (int i
= 0; i
< sizeof (keysyms
)/sizeof (struct keysym
); i
++) {
118 if (strcmp (keysyms
[i
].sym
, utf8
) == 0) {
119 return &(keysyms
[i
]);
122 return NULL
; // error
125 struct layout
* tolay (struct keysym
* s
, enum kbdl layout
) {
127 case en_US
: return &(s
->en_us
);
128 case de_AT
: return &(s
->de_at
);
129 case de_ND
: return &(s
->de_nd
);
130 default: return NULL
;