keycode_lookup.c
9019 bytes
1/* Copyright 2021 Seth Bonner <fl3tching101@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "keycode_lookup.h"
18#include "quantum_keycodes.h"
19#include "keymap_us.h"
20#include "print.h"
21#include "via.h"
22#include "util.h"
23
24#define num_keycodes ARRAY_SIZE(lookup_table)
25static char UNKNOWN_KEYCODE[] = "UNKNOWN";
26
27int cmp(const void *v1, const void *v2)
28{
29 const lookup_table_t *c1 = v1;
30 const lookup_table_t *c2 = v2;
31
32 return (c1->keycode - c2->keycode);
33}
34
35/*
36 Returns a pointer to a string containing the string describing the keycode, such as those found here:
37 https://beta.docs.qmk.fm/using-qmk/simple-keycodes/keycodes
38
39 Will return a string that says "UNKNOWN" if the keycode cannot be found.
40*/
41char* translate_keycode_to_string(uint16_t code)
42{
43 lookup_table_t * result = NULL;
44 lookup_table_t target = {.key_string = "", .keycode = code};
45 char * return_p;
46
47 result = bsearch(&target, lookup_table, num_keycodes, sizeof(lookup_table_t), cmp);
48
49 if(result != NULL)
50 {
51 return_p = result->key_string;
52 }
53 else
54 {
55 return_p = UNKNOWN_KEYCODE;
56 }
57
58 return (return_p);
59}
60
61lookup_table_t lookup_table[333] =
62{
63 {"KC_NO", KC_NO},
64 {"KC_TRNS", KC_TRNS},
65 {"KC_A", KC_A},
66 {"KC_B", KC_B},
67 {"KC_C", KC_C},
68 {"KC_D", KC_D},
69 {"KC_E", KC_E},
70 {"KC_F", KC_F},
71 {"KC_G", KC_G},
72 {"KC_H", KC_H},
73 {"KC_I", KC_I},
74 {"KC_J", KC_J},
75 {"KC_K", KC_K},
76 {"KC_L", KC_L},
77 {"KC_M", KC_M},
78 {"KC_N", KC_N},
79 {"KC_O", KC_O},
80 {"KC_P", KC_P},
81 {"KC_Q", KC_Q},
82 {"KC_R", KC_R},
83 {"KC_S", KC_S},
84 {"KC_T", KC_T},
85 {"KC_U", KC_U},
86 {"KC_V", KC_V},
87 {"KC_W", KC_W},
88 {"KC_X", KC_X},
89 {"KC_Y", KC_Y},
90 {"KC_Z", KC_Z},
91 {"KC_1", KC_1},
92 {"KC_2", KC_2},
93 {"KC_3", KC_3},
94 {"KC_4", KC_4},
95 {"KC_5", KC_5},
96 {"KC_6", KC_6},
97 {"KC_7", KC_7},
98 {"KC_8", KC_8},
99 {"KC_9", KC_9},
100 {"KC_0", KC_0},
101 {"KC_ENT", KC_ENT},
102 {"KC_ESC", KC_ESC},
103 {"KC_BSPC", KC_BSPC},
104 {"KC_TAB", KC_TAB},
105 {"KC_SPC", KC_SPC},
106 {"KC_MINS", KC_MINS},
107 {"KC_EQL", KC_EQL},
108 {"KC_LBRC", KC_LBRC},
109 {"KC_RBRC", KC_RBRC},
110 {"KC_BSLS", KC_BSLS},
111 {"KC_NUHS", KC_NUHS},
112 {"KC_SCLN", KC_SCLN},
113 {"KC_QUOT", KC_QUOT},
114 {"KC_GRV", KC_GRV},
115 {"KC_COMM", KC_COMM},
116 {"KC_DOT", KC_DOT},
117 {"KC_SLSH", KC_SLSH},
118 {"KC_CAPS", KC_CAPS},
119 {"KC_F1", KC_F1},
120 {"KC_F2", KC_F2},
121 {"KC_F3", KC_F3},
122 {"KC_F4", KC_F4},
123 {"KC_F5", KC_F5},
124 {"KC_F6", KC_F6},
125 {"KC_F7", KC_F7},
126 {"KC_F8", KC_F8},
127 {"KC_F9", KC_F9},
128 {"KC_F10", KC_F10},
129 {"KC_F11", KC_F11},
130 {"KC_F12", KC_F12},
131 {"KC_PSCR", KC_PSCR},
132 {"KC_SCRL", KC_SCRL},
133 {"KC_PAUS", KC_PAUS},
134 {"KC_INS", KC_INS},
135 {"KC_HOME", KC_HOME},
136 {"KC_PGUP", KC_PGUP},
137 {"KC_DEL", KC_DEL},
138 {"KC_END", KC_END},
139 {"KC_PGDN", KC_PGDN},
140 {"KC_RGHT", KC_RGHT},
141 {"KC_LEFT", KC_LEFT},
142 {"KC_DOWN", KC_DOWN},
143 {"KC_UP", KC_UP},
144 {"KC_NUM", KC_NUM},
145 {"KC_PSLS", KC_PSLS},
146 {"KC_PAST", KC_PAST},
147 {"KC_PMNS", KC_PMNS},
148 {"KC_PPLS", KC_PPLS},
149 {"KC_PENT", KC_PENT},
150 {"KC_P1", KC_P1},
151 {"KC_P2", KC_P2},
152 {"KC_P3", KC_P3},
153 {"KC_P4", KC_P4},
154 {"KC_P5", KC_P5},
155 {"KC_P6", KC_P6},
156 {"KC_P7", KC_P7},
157 {"KC_P8", KC_P8},
158 {"KC_P9", KC_P9},
159 {"KC_P0", KC_P0},
160 {"KC_PDOT", KC_PDOT},
161 {"KC_NUBS", KC_NUBS},
162 {"KC_APP", KC_APP},
163 {"KC_KB_POWER", KC_KB_POWER},
164 {"KC_PEQL", KC_PEQL},
165 {"KC_F13", KC_F13},
166 {"KC_F14", KC_F14},
167 {"KC_F15", KC_F15},
168 {"KC_F16", KC_F16},
169 {"KC_F17", KC_F17},
170 {"KC_F18", KC_F18},
171 {"KC_F19", KC_F19},
172 {"KC_F20", KC_F20},
173 {"KC_F21", KC_F21},
174 {"KC_F22", KC_F22},
175 {"KC_F23", KC_F23},
176 {"KC_F24", KC_F24},
177 {"KC_EXECUTE", KC_EXECUTE},
178 {"KC_HELP", KC_HELP},
179 {"KC_MENU", KC_MENU},
180 {"KC_SELECT", KC_SELECT},
181 {"KC_STOP", KC_STOP},
182 {"KC_AGAIN", KC_AGAIN},
183 {"KC_UNDO", KC_UNDO},
184 {"KC_CUT", KC_CUT},
185 {"KC_COPY", KC_COPY},
186 {"KC_PASTE", KC_PASTE},
187 {"KC_FIND", KC_FIND},
188 {"KC_LCAP", KC_LCAP},
189 {"KC_LNUM", KC_LNUM},
190 {"KC_LSCR", KC_LSCR},
191 {"KC_PCMM", KC_PCMM},
192 {"KC_KP_EQUAL_AS400", KC_KP_EQUAL_AS400},
193 {"KC_INT1", KC_INT1},
194 {"KC_INT2", KC_INT2},
195 {"KC_INT3", KC_INT3},
196 {"KC_INT4", KC_INT4},
197 {"KC_INT5", KC_INT5},
198 {"KC_INT6", KC_INT6},
199 {"KC_INT7", KC_INT7},
200 {"KC_INT8", KC_INT8},
201 {"KC_INT9", KC_INT9},
202 {"KC_LNG1", KC_LNG1},
203 {"KC_LNG2", KC_LNG2},
204 {"KC_LNG3", KC_LNG3},
205 {"KC_LNG4", KC_LNG4},
206 {"KC_LNG5", KC_LNG5},
207 {"KC_LNG6", KC_LNG6},
208 {"KC_LNG7", KC_LNG7},
209 {"KC_LNG8", KC_LNG8},
210 {"KC_LNG9", KC_LNG9},
211 {"KC_ERAS", KC_ERAS},
212 {"KC_SYRQ", KC_SYRQ},
213 {"KC_CANCEL", KC_CANCEL},
214 {"KC_CLR", KC_CLR},
215 {"KC_CLEAR", KC_CLEAR},
216 {"KC_PRIOR", KC_PRIOR},
217 {"KC_OUT", KC_OUT},
218 {"KC_OPER", KC_OPER},
219 {"KC_CLEAR_AGAIN", KC_CLEAR_AGAIN},
220 {"KC_CRSEL", KC_CRSEL},
221 {"KC_EXSEL", KC_EXSEL},
222 {"KC_PWR", KC_PWR},
223 {"KC_SLEP", KC_SLEP},
224 {"KC_WAKE", KC_WAKE},
225 {"KC_MUTE", KC_MUTE},
226 {"KC_VOLU", KC_VOLU},
227 {"KC_VOLD", KC_VOLD},
228 {"KC_MNXT", KC_MNXT},
229 {"KC_MPRV", KC_MPRV},
230 {"KC_MSTP", KC_MSTP},
231 {"KC_MPLY", KC_MPLY},
232 {"KC_MSEL", KC_MSEL},
233 {"KC_EJCT", KC_EJCT},
234 {"KC_MAIL", KC_MAIL},
235 {"KC_CALC", KC_CALC},
236 {"KC_MYCM", KC_MYCM},
237 {"KC_WWW_SEARCH", KC_WWW_SEARCH},
238 {"KC_WWW_HOME", KC_WWW_HOME},
239 {"KC_WWW_BACK", KC_WWW_BACK},
240 {"KC_WWW_FORWARD", KC_WWW_FORWARD},
241 {"KC_WWW_STOP", KC_WWW_STOP},
242 {"KC_WWW_REFRESH", KC_WWW_REFRESH},
243 {"KC_WWW_FAVORITES", KC_WWW_FAVORITES},
244 {"KC_MFFD", KC_MFFD},
245 {"KC_MRWD", KC_MRWD},
246 {"KC_BRIU", KC_BRIU},
247 {"KC_BRID", KC_BRID},
248 {"KC_LCTL", KC_LCTL},
249 {"KC_LSFT", KC_LSFT},
250 {"KC_LALT", KC_LALT},
251 {"KC_LGUI", KC_LGUI},
252 {"KC_RCTL", KC_RCTL},
253 {"KC_RSFT", KC_RSFT},
254 {"KC_RALT", KC_RALT},
255 {"KC_RGUI", KC_RGUI},
256 {"KC_MS_UP", KC_MS_UP},
257 {"KC_MS_DOWN", KC_MS_DOWN},
258 {"KC_MS_LEFT", KC_MS_LEFT},
259 {"KC_MS_RIGHT", KC_MS_RIGHT},
260 {"KC_MS_BTN1", KC_MS_BTN1},
261 {"KC_MS_BTN2", KC_MS_BTN2},
262 {"KC_MS_BTN3", KC_MS_BTN3},
263 {"KC_MS_BTN4", KC_MS_BTN4},
264 {"KC_MS_BTN5", KC_MS_BTN5},
265 {"KC_MS_WH_UP", KC_MS_WH_UP},
266 {"KC_MS_WH_DOWN", KC_MS_WH_DOWN},
267 {"KC_MS_WH_LEFT", KC_MS_WH_LEFT},
268 {"KC_MS_WH_RIGHT", KC_MS_WH_RIGHT},
269 {"KC_MS_ACCEL0", KC_MS_ACCEL0},
270 {"KC_MS_ACCEL1", KC_MS_ACCEL1},
271 {"KC_MS_ACCEL2", KC_MS_ACCEL2},
272 {"KC_EXLM", KC_EXLM},
273 {"KC_AT", KC_AT},
274 {"KC_HASH", KC_HASH},
275 {"KC_DLR", KC_DLR},
276 {"KC_PERC", KC_PERC},
277 {"KC_CIRC", KC_CIRC},
278 {"KC_AMPR", KC_AMPR},
279 {"KC_ASTR", KC_ASTR},
280 {"KC_LPRN", KC_LPRN},
281 {"KC_RPRN", KC_RPRN},
282 {"KC_UNDS", KC_UNDS},
283 {"KC_PLUS", KC_PLUS},
284 {"KC_LCBR", KC_LCBR},
285 {"KC_RCBR", KC_RCBR},
286 {"KC_PIPE", KC_PIPE},
287 {"KC_COLN", KC_COLN},
288 {"KC_DQUO", KC_DQUO},
289 {"KC_TILD", KC_TILD},
290 {"KC_LT", KC_LT},
291 {"KC_GT", KC_GT},
292 {"KC_QUES", KC_QUES},
293 {"QK_BOOT", QK_BOOT},
294 {"DB_TOGG", DB_TOGG},
295 {"NK_TOGG", NK_TOGG},
296 {"QK_GESC", QK_GESC},
297 {"AU_ON", AU_ON},
298 {"AU_OFF", AU_OFF},
299 {"AU_TOGG", AU_TOGG},
300 {"CK_TOGG", CK_TOGG},
301 {"CK_ON", CK_ON},
302 {"CK_OFF", CK_OFF},
303 {"CK_UP", CK_UP},
304 {"CK_DOWN", CK_DOWN},
305 {"CK_RST", CK_RST},
306 {"MU_ON", MU_ON},
307 {"MU_OFF", MU_OFF},
308 {"MU_TOGG", MU_TOGG},
309 {"MU_NEXT", MU_NEXT},
310 {"BL_ON", BL_ON},
311 {"BL_OFF", BL_OFF},
312 {"BL_DOWN", BL_DOWN},
313 {"BL_UP", BL_UP},
314 {"BL_TOGG", BL_TOGG},
315 {"BL_STEP", BL_STEP},
316 {"BL_BRTG", BL_BRTG},
317 {"UG_TOGG", UG_TOGG},
318 {"UG_NEXT", UG_NEXT},
319 {"UG_PREV", UG_PREV},
320 {"UG_HUEU", UG_HUEU},
321 {"UG_HUED", UG_HUED},
322 {"UG_SATU", UG_SATU},
323 {"UG_SATD", UG_SATD},
324 {"UG_VALU", UG_VALU},
325 {"UG_VALD", UG_VALD},
326 {"UG_SPDU", UG_SPDU},
327 {"UG_SPDD", UG_SPDD},
328 {"RGB_M_P", RGB_M_P},
329 {"RGB_M_B", RGB_M_B},
330 {"RGB_M_R", RGB_M_R},
331 {"RGB_M_SW", RGB_M_SW},
332 {"RGB_M_SN", RGB_M_SN},
333 {"RGB_M_K", RGB_M_K},
334 {"RGB_M_X", RGB_M_X},
335 {"RGB_M_G", RGB_M_G},
336 {"SC_LSPO", SC_LSPO},
337 {"SC_RSPC", SC_RSPC},
338 {"SC_SENT", SC_SENT},
339 {"SC_LCPO", SC_LCPO},
340 {"SC_RCPC", SC_RCPC},
341 {"SC_LAPO", SC_LAPO},
342 {"SC_RAPC", SC_RAPC},
343 {"TL_LOWR", TL_LOWR},
344 {"TL_UPPR", TL_UPPR},
345 {"QK_MACRO_0", QK_MACRO_0},
346 {"QK_MACRO_1", QK_MACRO_1},
347 {"QK_MACRO_2", QK_MACRO_2},
348 {"QK_MACRO_3", QK_MACRO_3},
349 {"QK_MACRO_4", QK_MACRO_4},
350 {"QK_MACRO_5", QK_MACRO_5},
351 {"QK_MACRO_6", QK_MACRO_6},
352 {"QK_MACRO_7", QK_MACRO_7},
353 {"QK_MACRO_8", QK_MACRO_8},
354 {"QK_MACRO_9", QK_MACRO_9},
355 {"QK_MACRO_10", QK_MACRO_10},
356 {"QK_MACRO_11", QK_MACRO_11},
357 {"QK_MACRO_12", QK_MACRO_12},
358 {"QK_MACRO_13", QK_MACRO_13},
359 {"QK_MACRO_14", QK_MACRO_14},
360 {"QK_MACRO_15", QK_MACRO_15},
361 {"QK_KB_0", QK_KB_0},
362 {"QK_KB_1", QK_KB_1},
363 {"QK_KB_2", QK_KB_2},
364 {"QK_KB_3", QK_KB_3},
365 {"QK_KB_4", QK_KB_4},
366 {"QK_KB_5", QK_KB_5},
367 {"QK_KB_6", QK_KB_6},
368 {"QK_KB_7", QK_KB_7},
369 {"QK_KB_8", QK_KB_8},
370 {"QK_KB_9", QK_KB_9},
371 {"QK_KB_10", QK_KB_10},
372 {"QK_KB_11", QK_KB_11},
373 {"QK_KB_12", QK_KB_12},
374 {"QK_KB_13", QK_KB_13},
375 {"QK_KB_14", QK_KB_14},
376 {"QK_KB_15", QK_KB_15}
377};