From 6a081cc1b8e22ebf2d38960282b15ae2faa8b3d4 Mon Sep 17 00:00:00 2001 From: Fabian Topfstedt Date: Mon, 5 Oct 2020 22:53:15 +0200 Subject: [PATCH] lemp9: Added ISO keyboard layouts (#117) * LAYOUT_ISO: Conversion of physical ISO layout to keyboard matrix * fixing interchanged backslash and enter * default_iso layout added for Clevo L141CU * fabian layout (ISO, colemak, fn<->ctrl, wide left shift) * Caps is control * hardware side: qwerty instead of colemak * lemp9 fabian: FN+PgUp=Home, FN+PgDn=Eend, FN+LeftShift=KBD_BKL * lemp9 default_iso: FN+PgUp=Home, FN+PgDn=End * clevo_l141cu_us_iso.c * merged * FN+1=K_FAN_TOGGLE --- .../system76/lemp9/include/board/keymap.h | 30 ++++++++++++++++- .../lemp9/keymap/clevo_l141cu_us_iso.c | 29 +++++++++++++++++ src/board/system76/lemp9/keymap/fabian.c | 32 +++++++++++++++++++ src/common/include/common/keymap.h | 2 +- 4 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 src/board/system76/lemp9/keymap/clevo_l141cu_us_iso.c create mode 100644 src/board/system76/lemp9/keymap/fabian.c diff --git a/src/board/system76/lemp9/include/board/keymap.h b/src/board/system76/lemp9/include/board/keymap.h index 843d1f0..cdfd27d 100644 --- a/src/board/system76/lemp9/include/board/keymap.h +++ b/src/board/system76/lemp9/include/board/keymap.h @@ -13,7 +13,7 @@ // common/keymap.h requires KM_LAY, KM_OUT, and KM_IN definitions #include -// Conversion of physical layout to keyboard matrix +// Conversion of physical ANSI layout to keyboard matrix #define LAYOUT( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ @@ -41,6 +41,34 @@ { ___, ___, K3C, ___, K61, K0C, ___, K59 } \ } +// Conversion of physical ISO layout to keyboard matrix +#define LAYOUT_ISO( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, \ + K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, \ + K60, K61, K62 \ +) { \ + { ___, ___, ___, ___, ___, ___, K52, ___ }, \ + { ___, ___, ___, ___, ___, ___, K50, K56 }, \ + { ___, ___, ___, ___, ___, ___, K53, K55 }, \ + { ___, ___, ___, ___, ___, ___, K40, K4C }, \ + { K43, K42, K30, K31, K20, ___, K54, K21 }, \ + { K45, K44, ___, K33, ___, ___, ___, K23 }, \ + { K51, K46, K34, K35, K24, K25, ___, ___ }, \ + { ___, K47, K36, K26, K12, K11, K10, K00 }, \ + { K28, K48, K27, K15, K14, K13, K02, K01 }, \ + { K22, K37, K38, ___, K17, K16, K04, K03 }, \ + { K32, K49, K39, K29, K19, K18, K06, K05 }, \ + { ___, K58, K4A, K3A, K2A, K1A, K08, K07 }, \ + { ___, K41, K4B, K3B, K2B, K1B, K0A, K09 }, \ + { K3C, ___, K0D, K2C, K1C, K62, K0E, K0B }, \ + { ___, ___, K60, K1D, K57, K0F, ___, K0G }, \ + { ___, ___, K2D, ___, K61, K0C, ___, K59 } \ +} + // Position of physical Esc key in the matrix #define MATRIX_ESC_INPUT 7 #define MATRIX_ESC_OUTPUT 7 diff --git a/src/board/system76/lemp9/keymap/clevo_l141cu_us_iso.c b/src/board/system76/lemp9/keymap/clevo_l141cu_us_iso.c new file mode 100644 index 0000000..6b2758a --- /dev/null +++ b/src/board/system76/lemp9/keymap/clevo_l141cu_us_iso.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-3.0-only + +// Clevo L141CU US ISO layout by @fabiant7t +// Picture: https://drive.google.com/file/d/1vTJvdfl9tf2Iwb6hkmsUwGBCVZ9lmouv/view?usp=sharing + +#include + +uint16_t __code KEYMAP[KM_LAY][KM_OUT][KM_IN] = { +// TODO: K0E=K_PAUSE (once defined in src/common/include/common/keymap.h) +LAYOUT_ISO( + K_ESC, K_F1, K_F2, K_F3, K_F4, K_F5, K_F6, K_F7, K_F8, K_F9, K_F10, K_F11, K_F12, K_PRINT_SCREEN, K_PLAY_PAUSE, K_INSERT, K_DEL, + K_TICK, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_MINUS, K_EQUALS, K_BKSP, + K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_U, K_I, K_O, K_P, K_BRACE_OPEN, K_BRACE_CLOSE, K_ENTER, + K_CAPS, K_A, K_S, K_D, K_F, K_G, K_H, K_J, K_K, K_L, K_SEMICOLON, K_QUOTE, K_BACKSLASH, + K_LEFT_SHIFT, K_BACKSLASH, K_Z, K_X, K_C, K_V, K_B, K_N, K_M, K_COMMA, K_PERIOD, K_SLASH, K_RIGHT_SHIFT, + K_LEFT_CTRL, KT_FN, K_LEFT_SUPER, K_LEFT_ALT, K_SPACE, K_RIGHT_ALT, K_RIGHT_CTRL, K_PGUP, K_UP, K_PGDN, + K_LEFT, K_DOWN, K_RIGHT +), +// TODO: K0D=K_SYS_RQ, K0E=K_BREAK, K0G=K_SCROLL_LOCK (once defined in src/common/include/common/keymap.h) +LAYOUT_ISO( + K_ESC, K_TOUCHPAD, K_DISPLAY_TOGGLE, K_MUTE, K_KBD_BKL, K_VOLUME_DOWN, K_VOLUME_UP, K_DISPLAY_MODE, K_BRIGHTNESS_DOWN, K_BRIGHTNESS_UP, K_CAMERA_TOGGLE, K_AIRPLANE_MODE, K_SUSPEND, K_PRINT_SCREEN, K_PLAY_PAUSE, K_NUM_LOCK, K_DEL, + K_PLAY_PAUSE, K_FAN_TOGGLE, K_2, K_3, K_4, K_5, K_6, K_NUM_7, K_NUM_8, K_NUM_9, K_NUM_ASTERISK, K_MINUS, K_EQUALS, K_BKSP, + K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_NUM_4, K_NUM_5, K_NUM_6, K_NUM_SLASH, K_BRACE_OPEN, K_BRACE_CLOSE, K_ENTER, + K_CAPS, K_A, K_S, K_D, K_F, K_G, K_H, K_NUM_1, K_NUM_2, K_NUM_3, K_NUM_MINUS, K_QUOTE, K_BACKSLASH, + K_LEFT_SHIFT, K_BACKSLASH, K_Z, K_X, K_C, K_V, K_B, K_N, K_NUM_0, K_COMMA, K_NUM_PERIOD, K_NUM_PLUS, K_RIGHT_SHIFT, + K_LEFT_CTRL, KT_FN, K_LEFT_SUPER, K_LEFT_ALT, K_SPACE, K_RIGHT_ALT, K_APP, K_HOME, K_UP, K_END, + K_LEFT, K_DOWN, K_RIGHT +) +}; diff --git a/src/board/system76/lemp9/keymap/fabian.c b/src/board/system76/lemp9/keymap/fabian.c new file mode 100644 index 0000000..eb1fd74 --- /dev/null +++ b/src/board/system76/lemp9/keymap/fabian.c @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0-only + +// # Fabian ISO layout +// Swapped FN and LEFT_CTRL (like on Thinkpads and Macbooks) +// Key right of left shift is shift (ANSI like, less strain) +// CapsLock is control +// FN + LEFT_SHIFT is keyboard backlight (in the dark, you don't want to search F4) + +#include + +uint16_t __code KEYMAP[KM_LAY][KM_OUT][KM_IN] = { +// TODO: K0E=K_PAUSE (once defined in src/common/include/common/keymap.h) +LAYOUT_ISO( + K_ESC, K_F1, K_F2, K_F3, K_F4, K_F5, K_F6, K_F7, K_F8, K_F9, K_F10, K_F11, K_F12, K_PRINT_SCREEN, K_PLAY_PAUSE, K_INSERT, K_DEL, + K_TICK, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_MINUS, K_EQUALS, K_BKSP, + K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_U, K_I, K_O, K_P, K_BRACE_OPEN, K_BRACE_CLOSE, K_ENTER, + K_LEFT_CTRL, K_A, K_S, K_D, K_F, K_G, K_H, K_J, K_K, K_L, K_SEMICOLON, K_QUOTE, K_BACKSLASH, + K_LEFT_SHIFT, K_LEFT_SHIFT, K_Z, K_X, K_C, K_V, K_B, K_N, K_M, K_COMMA, K_PERIOD, K_SLASH, K_RIGHT_SHIFT, + KT_FN, K_LEFT_CTRL, K_LEFT_SUPER, K_LEFT_ALT, K_SPACE, K_RIGHT_ALT, K_RIGHT_CTRL, K_PGUP, K_UP, K_PGDN, + K_LEFT, K_DOWN, K_RIGHT +), +// TODO: K0D=K_SYS_RQ, K0E=K_BREAK, K0G=K_SCROLL_LOCK (once defined in src/common/include/common/keymap.h) +LAYOUT_ISO( + K_ESC, K_TOUCHPAD, K_DISPLAY_TOGGLE, K_MUTE, K_KBD_BKL, K_VOLUME_DOWN, K_VOLUME_UP, K_DISPLAY_MODE, K_BRIGHTNESS_DOWN, K_BRIGHTNESS_UP, K_CAMERA_TOGGLE, K_AIRPLANE_MODE, K_SUSPEND, K_PRINT_SCREEN, K_PLAY_PAUSE, K_NUM_LOCK, K_DEL, + K_PLAY_PAUSE, K_FAN_TOGGLE, K_2, K_3, K_4, K_5, K_6, K_NUM_7, K_NUM_8, K_NUM_9, K_NUM_ASTERISK, K_MINUS, K_EQUALS, K_BKSP, + K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_NUM_4, K_NUM_5, K_NUM_6, K_NUM_SLASH, K_BRACE_OPEN, K_BRACE_CLOSE, K_ENTER, + K_LEFT_CTRL, K_A, K_S, K_D, K_F, K_G, K_H, K_NUM_1, K_NUM_2, K_NUM_3, K_NUM_MINUS, K_QUOTE, K_BACKSLASH, + K_KBD_BKL, K_LEFT_SHIFT, K_Z, K_X, K_C, K_V, K_B, K_N, K_NUM_0, K_COMMA, K_NUM_PERIOD, K_NUM_PLUS, K_RIGHT_SHIFT, + KT_FN, K_LEFT_CTRL, K_LEFT_SUPER, K_LEFT_ALT, K_SPACE, K_RIGHT_ALT, K_APP, K_HOME, K_UP, K_END, + K_LEFT, K_DOWN, K_RIGHT +) +}; diff --git a/src/common/include/common/keymap.h b/src/common/include/common/keymap.h index 6bd58dd..696c8c7 100644 --- a/src/common/include/common/keymap.h +++ b/src/common/include/common/keymap.h @@ -167,7 +167,7 @@ uint16_t keymap_translate(uint16_t key); // Escape key #define K_ESC (0x76) -//TODO: Print screen, scroll lock, pause +//TODO: Print screen, scroll lock, pause, sys request, break // Tick/tilde key #define K_TICK (0x0E)