]> git.gir.st - sendHID.git/blob - scancodes.c
moved tolay() from main.c to scancodes.c
[sendHID.git] / scancodes.c
1 #include <string.h>
2 #include "scancodes.h"
3
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}}
113 };
114
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]);
120 }
121 }
122 return NULL; // error
123 }
124
125 struct layout* tolay (struct keysym* s, enum kbdl layout) {
126 switch (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;
131 }
132 }
Imprint / Impressum