diff --git a/src/board/system76/galp3-c/include/board/keymap.h b/src/board/system76/galp3-c/include/board/keymap.h index b91857a..d1fc6ac 100644 --- a/src/board/system76/galp3-c/include/board/keymap.h +++ b/src/board/system76/galp3-c/include/board/keymap.h @@ -23,6 +23,12 @@ uint16_t keymap_translate(uint16_t key); #define K_FN (0x8000) +// Hotkeys + +#define K_MUTE (K_E0 | 0x23) +#define K_VOLUME_DOWN (K_E0 | 0x21) +#define K_VOLUME_UP (K_E0 | 0x32) + // Function keys #define K_F1 (0x05) diff --git a/src/board/system76/galp3-c/keymap.c b/src/board/system76/galp3-c/keymap.c index 69e334f..ab0af7f 100644 --- a/src/board/system76/galp3-c/keymap.c +++ b/src/board/system76/galp3-c/keymap.c @@ -100,7 +100,7 @@ uint16_t __code KEYMAP[KM_OUT][KM_IN][KM_LAY] = { {K_7, 0}, // 4 {K_6, 0}, // 5 {K_F4, 0}, // 6 - {K_F3, 0}, // 7 + {K_F3, K_MUTE}, // 7 }, { // 10 {K_S, 0}, // 0 @@ -109,8 +109,8 @@ uint16_t __code KEYMAP[KM_OUT][KM_IN][KM_LAY] = { {K_O, 0}, // 3 {K_9, 0}, // 4 {K_8, 0}, // 5 - {K_F6, 0}, // 6 - {K_F5, 0}, // 7 + {K_F6, K_VOLUME_UP}, // 6 + {K_F5, K_VOLUME_DOWN}, // 7 }, { // 11 {0, 0}, // 0 @@ -172,116 +172,26 @@ uint16_t keymap(int output, int input, int layer) { } } -// This is terrible, from http://www.vetra.com/scancodes.html -// TODO: redo by applying transform at lower level as recommended by: // https://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html#ss10.3 +static uint8_t __code lookup[256] = { +0xff, 0x43, 0x41, 0x3f, 0x3d, 0x3b, 0x3c, 0x58, 0x64, 0x44, 0x42, 0x40, 0x3e, 0x0f, 0x29, 0x59, +0x65, 0x38, 0x2a, 0x70, 0x1d, 0x10, 0x02, 0x5a, 0x66, 0x71, 0x2c, 0x1f, 0x1e, 0x11, 0x03, 0x5b, +0x67, 0x2e, 0x2d, 0x20, 0x12, 0x05, 0x04, 0x5c, 0x68, 0x39, 0x2f, 0x21, 0x14, 0x13, 0x06, 0x5d, +0x69, 0x31, 0x30, 0x23, 0x22, 0x15, 0x07, 0x5e, 0x6a, 0x72, 0x32, 0x24, 0x16, 0x08, 0x09, 0x5f, +0x6b, 0x33, 0x25, 0x17, 0x18, 0x0b, 0x0a, 0x60, 0x6c, 0x34, 0x35, 0x26, 0x27, 0x19, 0x0c, 0x61, +0x6d, 0x73, 0x28, 0x74, 0x1a, 0x0d, 0x62, 0x6e, 0x3a, 0x36, 0x1c, 0x1b, 0x75, 0x2b, 0x63, 0x76, +0x55, 0x56, 0x77, 0x78, 0x79, 0x7a, 0x0e, 0x7b, 0x7c, 0x4f, 0x7d, 0x4b, 0x47, 0x7e, 0x7f, 0x6f, +0x52, 0x53, 0x50, 0x4c, 0x4d, 0x48, 0x01, 0x45, 0x57, 0x4e, 0x51, 0x4a, 0x37, 0x49, 0x46, 0x54, +0x80, 0x81, 0x82, 0x41, 0x54, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, +0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, +0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, +0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, +0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, +0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, +0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, +0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, +}; + uint16_t keymap_translate(uint16_t key) { - switch (key) { - // Function keys - - case K_F1: return 0x3B; - case K_F2: return 0x3C; - case K_F3: return 0x3D; - case K_F4: return 0x3E; - case K_F5: return 0x3F; - case K_F6: return 0x40; - case K_F7: return 0x41; - case K_F8: return 0x42; - case K_F9: return 0x43; - case K_F10: return 0x44; - case K_F11: return 0x57; - case K_F12: return 0x58; - - // Number keys - - case K_0: return 0x0B; - case K_1: return 0x02; - case K_2: return 0x03; - case K_3: return 0x04; - case K_4: return 0x05; - case K_5: return 0x06; - case K_6: return 0x07; - case K_7: return 0x08; - case K_8: return 0x09; - case K_9: return 0x0A; - - // Letter keys - - case K_A: return 0x1E; - case K_B: return 0x30; - case K_C: return 0x2E; - case K_D: return 0x20; - case K_E: return 0x12; - case K_F: return 0x21; - case K_G: return 0x22; - case K_H: return 0x23; - case K_I: return 0x17; - case K_J: return 0x24; - case K_K: return 0x25; - case K_L: return 0x26; - case K_M: return 0x32; - case K_N: return 0x31; - case K_O: return 0x18; - case K_P: return 0x19; - case K_Q: return 0x10; - case K_R: return 0x13; - case K_S: return 0x1F; - case K_T: return 0x14; - case K_U: return 0x16; - case K_V: return 0x2F; - case K_W: return 0x11; - case K_X: return 0x2D; - case K_Y: return 0x15; - case K_Z: return 0x2C; - - // Special keys - - case K_ESC: return 0x01; - - case K_TICK: return 0x29; - case K_MINUS: return 0x0C; - case K_EQUALS: return 0x0D; - case K_BKSP: return 0x0E; - - case K_TAB: return 0x0F; - case K_BRACE_OPEN: return 0x1A; - case K_BRACE_CLOSE: return 0x1B; - case K_BACKSLASH: return 0x2B; - - case K_CAPS: return 0x3A; - case K_SEMICOLON: return 0x27; - case K_QUOTE: return 0x28; - case K_ENTER: return 0x1C; - - case K_LEFT_SHIFT: return 0x2A; - case K_COMMA: return 0x33; - case K_PERIOD: return 0x34; - case K_SLASH: return 0x35; - case K_RIGHT_SHIFT: return 0x36; - - case K_LEFT_CTRL: return 0x1D; - case K_LEFT_SUPER: return (K_E0 | 0x5B); - case K_LEFT_ALT: return 0x38; - case K_SPACE: return 0x39; - case K_RIGHT_ALT: return (K_E0 | 0x38); - case K_RIGHT_SUPER: return (K_E0 | 0x5C); - case K_APP: return (K_E0 | 0x5D); - case K_RIGHT_CTRL: return (K_E0 | 0x1D); - - case K_INSERT: return (K_E0 | 0x52); - case K_DEL: return (K_E0 | 0x53); - case K_HOME: return (K_E0 | 0x47); - case K_END: return (K_E0 | 0x4F); - case K_PGUP: return (K_E0 | 0x49); - case K_PGDN: return (K_E0 | 0x51); - - case K_UP: return (K_E0 | 0x48); - case K_LEFT: return (K_E0 | 0x4B); - case K_DOWN: return (K_E0 | 0x50); - case K_RIGHT: return (K_E0 | 0x4D); - - default: - WARN("keymap_translate: unknown %02X\n", key); - return 0; - } + return (key & 0xFF00) | lookup[(key & 0xFF)]; }