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