qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 };