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