From 4adb64a91b3c8bf665bd9f7357fb806d30ac09f5 Mon Sep 17 00:00:00 2001 From: Less/Rikki <86894501+lesshonor@users.noreply.github.com> Date: Sun, 28 Aug 2022 13:16:20 -0400 Subject: [Keyboard] mechwild/bde cleanup and refactor (#18149) --- keyboards/mechwild/bde/rev2/config.h | 39 +---------- keyboards/mechwild/bde/rev2/info.json | 65 ++++++++++++++++++ .../mechwild/bde/rev2/keymaps/default/keymap.c | 69 +++++++++++++++++++ .../mechwild/bde/rev2/keymaps/default/rules.mk | 13 ++++ keyboards/mechwild/bde/rev2/keymaps/via/config.h | 22 +++++++ keyboards/mechwild/bde/rev2/keymaps/via/keymap.c | 68 +++++++++++++++++++ keyboards/mechwild/bde/rev2/keymaps/via/rules.mk | 3 + keyboards/mechwild/bde/rev2/rev2.c | 77 ++++++++++------------ keyboards/mechwild/bde/rev2/rev2.h | 13 ---- 9 files changed, 277 insertions(+), 92 deletions(-) create mode 100644 keyboards/mechwild/bde/rev2/keymaps/default/keymap.c create mode 100644 keyboards/mechwild/bde/rev2/keymaps/default/rules.mk create mode 100644 keyboards/mechwild/bde/rev2/keymaps/via/config.h create mode 100644 keyboards/mechwild/bde/rev2/keymaps/via/keymap.c create mode 100644 keyboards/mechwild/bde/rev2/keymaps/via/rules.mk (limited to 'keyboards/mechwild/bde/rev2') diff --git a/keyboards/mechwild/bde/rev2/config.h b/keyboards/mechwild/bde/rev2/config.h index 7ea5536055..3d045762ca 100644 --- a/keyboards/mechwild/bde/rev2/config.h +++ b/keyboards/mechwild/bde/rev2/config.h @@ -17,46 +17,11 @@ along with this program. If not, see . #pragma once -#include "config_common.h" - -/* Key matrix size */ -#define MATRIX_ROWS 6 -#define MATRIX_COLS 7 - -/* Key matrix pins */ -#define MATRIX_ROW_PINS { C6, D7, B4, D4, E6, B2 } -#define MATRIX_COL_PINS { B3, B1, F7, F6, F5, F4, B5 } - /* Encoder pins */ -#define ENCODERS_PAD_A { D3 } -#define ENCODERS_PAD_B { D2 } +#define ENCODERS_PAD_A { D2 } +#define ENCODERS_PAD_B { D3 } /* Encoder resolution */ #define ENCODER_RESOLUTION 4 -#define TAP_CODE_DELAY 10 - -/* COL2ROW, ROW2COL */ -#define DIODE_DIRECTION COL2ROW #define OLED_FONT_H "keyboards/mechwild/bde/lib/rev2.c" - -#define RGB_DI_PIN B6 -#ifdef RGB_DI_PIN -# define RGBLED_NUM 8 -# define RGBLIGHT_HUE_STEP 8 -# define RGBLIGHT_SAT_STEP 8 -# define RGBLIGHT_VAL_STEP 8 -# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ -# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ -/*== Chosen enabled animations ==*/ -# define RGBLIGHT_EFFECT_RAINBOW_SWIRL -#endif - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCE 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE - -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE diff --git a/keyboards/mechwild/bde/rev2/info.json b/keyboards/mechwild/bde/rev2/info.json index 9c9aa3e2c2..29ddb0e017 100644 --- a/keyboards/mechwild/bde/rev2/info.json +++ b/keyboards/mechwild/bde/rev2/info.json @@ -3,5 +3,70 @@ "usb": { "pid": "0x170A", "device_version": "1.0.1" + }, + "matrix_pins": { + "rows":[ "C6", "D7", "B4", "D4", "E6", "B2" ], + "cols": ["B3", "B1", "F7", "F6", "F5", "F4", "B5" ] + }, + "diode_direction": "COL2ROW", + "rgblight": { + "led_count": 8, + "pin": "B6", + "animations": { + "rainbow_swirl": true + }, + "hue_steps": 8, + "saturation_steps": 8, + "brightness_steps": 8 + }, + "layouts": { + "LAYOUT": { + "layout": [ + { "matrix": [0, 0], "label":"Q", "x":0, "y":0}, + { "matrix": [0, 1], "label":"W", "x":1, "y":0}, + { "matrix": [0, 2], "label":"E", "x":2, "y":0}, + { "matrix": [0, 3], "label":"R", "x":3, "y":0}, + { "matrix": [0, 4], "label":"T", "x":4, "y":0}, + { "matrix": [0, 5], "label":"Y", "x":5, "y":0}, + { "matrix": [0, 6], "label":"U", "x":6, "y":0}, + { "matrix": [3, 6], "label":"I", "x":7, "y":0}, + { "matrix": [3, 5], "label":"O", "x":8, "y":0}, + { "matrix": [3, 4], "label":"P", "x":9, "y":0}, + { "matrix": [3, 3], "label":"7", "x":10, "y":0}, + { "matrix": [3, 2], "label":"8", "x":11, "y":0}, + { "matrix": [3, 1], "label":"9", "x":12, "y":0}, + { "matrix": [3, 0], "label":"Mute", "x":13, "y":0}, + + { "matrix": [1, 0], "label":"A", "x":0, "y":1}, + { "matrix": [1, 1], "label":"S", "x":1, "y":1}, + { "matrix": [1, 2], "label":"D", "x":2, "y":1}, + { "matrix": [1, 3], "label":"F", "x":3, "y":1}, + { "matrix": [1, 4], "label":"G", "x":4, "y":1}, + { "matrix": [1, 5], "label":"H", "x":5, "y":1}, + { "matrix": [1, 6], "label":"J", "x":6, "y":1}, + { "matrix": [4, 6], "label":"K", "x":7, "y":1}, + { "matrix": [4, 5], "label":"L", "x":8, "y":1}, + { "matrix": [4, 4], "label":"Esc", "x":9, "y":1}, + { "matrix": [4, 3], "label":"4", "x":10, "y":1}, + { "matrix": [4, 2], "label":"5", "x":11, "y":1}, + { "matrix": [4, 1], "label":"6", "x":12, "y":1}, + { "matrix": [4, 0], "label":"0", "x":13, "y":1}, + + { "matrix": [2, 0], "label":"Z", "x":0, "y":2}, + { "matrix": [2, 1], "label":"X", "x":1, "y":2}, + { "matrix": [2, 2], "label":"C", "x":2, "y":2}, + { "matrix": [2, 3], "label":"V", "x":3, "y":2}, + { "matrix": [2, 4], "label":"Back", "x":4, "y":2}, + { "matrix": [2, 5], "label":"Space", "x":5, "y":2}, + { "matrix": [2, 6], "label":"B", "x":6, "y":2}, + { "matrix": [5, 6], "label":"N", "x":7, "y":2}, + { "matrix": [5, 5], "label":"M", "x":8, "y":2}, + { "matrix": [5, 4], "label":"Enter", "x":9, "y":2}, + { "matrix": [5, 3], "label":"1", "x":10, "y":2}, + { "matrix": [5, 2], "label":"2", "x":11, "y":2}, + { "matrix": [5, 1], "label":"3", "x":12, "y":2}, + { "matrix": [5, 0], "label":"EQL", "x":13, "y":2} + ] + } } } diff --git a/keyboards/mechwild/bde/rev2/keymaps/default/keymap.c b/keyboards/mechwild/bde/rev2/keymaps/default/keymap.c new file mode 100644 index 0000000000..375dc25ae2 --- /dev/null +++ b/keyboards/mechwild/bde/rev2/keymaps/default/keymap.c @@ -0,0 +1,69 @@ +/* Copyright 2022 Kyle McCreery + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include QMK_KEYBOARD_H + +#define FN1_BSPC LT(1, KC_BSPC) +#define FN2_SPC LT(2, KC_SPC) +#define FN3_B LT(3, KC_B) +#define CTL_Z CTL_T(KC_Z) +#define ALT_X ALT_T(KC_X) +#define ALT_N ALGR_T(KC_N) +#define CTL_M RCTL_T(KC_M) +#define SFT_ENT RSFT_T(KC_ENT) +#define WIN_C LGUI_T(KC_C) + +enum layer_names { + _BASE, + _FN1, + _FN2, + _FN3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_P7, KC_P8, KC_P9, KC_MUTE, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC, KC_P4, KC_P5, KC_P6, KC_P0, + CTL_Z, ALT_X, WIN_C, KC_V, FN1_BSPC, FN2_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT, KC_P1, KC_P2, KC_P3, KC_MINS + ), + [_FN1] = LAYOUT( + _______, _______, _______, QK_BOOT, _______, _______, KC_PSCR, KC_LBRC, KC_RBRC, KC_BSLS, KC_7, KC_8, KC_9, KC_NLCK, + _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_SCLN, KC_QUOT, KC_4, KC_5, KC_6, KC_0, + _______, _______, _______, _______, _______, KC_TAB, KC_LGUI, KC_COMM, KC_DOT, KC_SLSH, KC_1, KC_2, KC_3, KC_EQL + ), + [_FN2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PIPE, KC_AMPR, KC_ASTR, KC_LPRN, KC_CLCK, + _______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_COLN, KC_DQUO, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN, + _______, _______, _______, _______, KC_DEL, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_EXLM, KC_AT, KC_HASH, KC_PLUS + ), + [_FN3] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; + +// If you are not using an encoder, remember to set ENCODER_ENABLE and ENCODER_MAP_ENABLE to no in rules.mk. +#ifdef ENCODER_MAP_ENABLE + const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [_FN2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [_FN3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + }; +#endif diff --git a/keyboards/mechwild/bde/rev2/keymaps/default/rules.mk b/keyboards/mechwild/bde/rev2/keymaps/default/rules.mk new file mode 100644 index 0000000000..d976f24919 --- /dev/null +++ b/keyboards/mechwild/bde/rev2/keymaps/default/rules.mk @@ -0,0 +1,13 @@ +# If you are using a custom Pro Micro-compatible dev board (Elite-C, Sea-Micro, etc) +# you may need to uncomment and modify this BOOTLOADER setting to use the correct +# bootloader. (e.g. Elite-Cs use "atmel-dfu", not "caterina".) +# +# See the QMK docs for more information: +# https://docs.qmk.fm/#/flashing +# https://docs.qmk.fm/#/driver_installation_zadig?id=list-of-known-bootloaders + +# BOOTLOADER = caterina + +# If you are not using an encoder, set these options to no. +ENCODER_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/mechwild/bde/rev2/keymaps/via/config.h b/keyboards/mechwild/bde/rev2/keymaps/via/config.h new file mode 100644 index 0000000000..d09385ca5d --- /dev/null +++ b/keyboards/mechwild/bde/rev2/keymaps/via/config.h @@ -0,0 +1,22 @@ +/* Copyright 2022 Kyle McCreery + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +/* Making it so you need to hold the modifier and other key for the time together, helps not accidentally hit activate the hold functions of bottom row*/ +#define IGNORE_MOD_TAP_INTERRUPT + +/* Setting tap term, helps not accidentally hit activate the hold functions of bottom row*/ +#define TAPPING_TERM 250 diff --git a/keyboards/mechwild/bde/rev2/keymaps/via/keymap.c b/keyboards/mechwild/bde/rev2/keymaps/via/keymap.c new file mode 100644 index 0000000000..8ce001cff8 --- /dev/null +++ b/keyboards/mechwild/bde/rev2/keymaps/via/keymap.c @@ -0,0 +1,68 @@ +/* Copyright 2022 Kyle McCreery + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include QMK_KEYBOARD_H + +#define FN1_BSPC LT(1, KC_BSPC) +#define FN2_SPC LT(2, KC_SPC) +#define FN3_B LT(3, KC_B) +#define CTL_Z CTL_T(KC_Z) +#define ALT_X ALT_T(KC_X) +#define ALT_N ALGR_T(KC_N) +#define CTL_M RCTL_T(KC_M) +#define SFT_ENT RSFT_T(KC_ENT) +#define WIN_C LGUI_T(KC_C) + +enum layer_names { + _BASE, + _FN1, + _FN2, + _FN3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_P7, KC_P8, KC_P9, KC_MUTE, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC, KC_P4, KC_P5, KC_P6, KC_P0, + CTL_Z, ALT_X, WIN_C, KC_V, FN1_BSPC, FN2_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT, KC_P1, KC_P2, KC_P3, KC_MINS + ), + [_FN1] = LAYOUT( + _______, _______, _______, QK_BOOT, _______, _______, KC_PSCR, KC_LBRC, KC_RBRC, KC_BSLS, KC_7, KC_8, KC_9, KC_NLCK, + _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_SCLN, KC_QUOT, KC_4, KC_5, KC_6, KC_0, + _______, _______, _______, _______, _______, KC_TAB, KC_LGUI, KC_COMM, KC_DOT, KC_SLSH, KC_1, KC_2, KC_3, KC_EQL + ), + [_FN2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PIPE, KC_AMPR, KC_ASTR, KC_LPRN, KC_CLCK, + _______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_COLN, KC_DQUO, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN, + _______, _______, _______, _______, KC_DEL, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_EXLM, KC_AT, KC_HASH, KC_PLUS + ), + [_FN3] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD + ) + +}; + +#ifdef ENCODER_MAP_ENABLE + const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [_FN2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [_FN3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + }; +#endif diff --git a/keyboards/mechwild/bde/rev2/keymaps/via/rules.mk b/keyboards/mechwild/bde/rev2/keymaps/via/rules.mk new file mode 100644 index 0000000000..9ff50262fb --- /dev/null +++ b/keyboards/mechwild/bde/rev2/keymaps/via/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes +ENCODER_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/mechwild/bde/rev2/rev2.c b/keyboards/mechwild/bde/rev2/rev2.c index 88c06988d9..3dae312e2b 100644 --- a/keyboards/mechwild/bde/rev2/rev2.c +++ b/keyboards/mechwild/bde/rev2/rev2.c @@ -1,21 +1,20 @@ -/* Copyright 2022 Kyle McCreery - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . +/* Copyright 2022 Kyle McCreery + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ - -#include "bde.h" +#include "rev2.h" #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { @@ -34,30 +33,25 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { #endif #ifdef OLED_ENABLE - oled_rotation_t oled_init_user(oled_rotation_t rotation) { - return OLED_ROTATION_270; // flips the display 270 degrees - } +static const char PROGMEM mw_logo[] = { + 0x8A, 0x8B, 0x8C, 0x8D, '\r', + 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, + 0xCA, 0xCB, 0xCC, 0xCD, '\r', + 0x20, 0x8E, 0x8F, 0x90, 0x00}; + +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + return OLED_ROTATION_270; // flips the display 270 degrees +} - static void render_logo(void) { // Render MechWild "MW" Logo - static const char PROGMEM logo_1[] = {0x8A, 0x8B, 0x8C, 0x8D, 0x00}; - static const char PROGMEM logo_2[] = {0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0x00}; - static const char PROGMEM logo_3[] = {0xCA, 0xCB, 0xCC, 0xCD, 0x00}; - static const char PROGMEM logo_4[] = {0x20, 0x8E, 0x8F, 0x90, 0x00}; - oled_set_cursor(0,0); - oled_write_P(logo_1, false); - oled_set_cursor(0,1); - oled_write_P(logo_2, false); - oled_set_cursor(0,2); - oled_write_P(logo_3, false); - oled_set_cursor(0,3); - oled_write_P(logo_4, false); - } +bool oled_task_kb(void) { + if (!oled_task_user()) { + return false; + } - bool oled_task_user(void) { - render_logo(); - oled_set_cursor(0,6); + oled_write_P(mw_logo, false); // Render MechWild "MW" Logo + oled_set_cursor(0,6); - oled_write_ln_P(PSTR("Layer"), false); + oled_write_ln_P(PSTR("Layer"), false); switch (get_highest_layer(layer_state)) { case 0: @@ -75,14 +69,13 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { default: oled_write_ln_P(PSTR("Undef"), false); } - oled_write_ln_P(PSTR(""), false); + oled_write_ln_P(PSTR(""), false); // Host Keyboard LED Status led_t led_state = host_keyboard_led_state(); oled_write_ln_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); oled_write_ln_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); - - return false; - - } + + return true; +} #endif diff --git a/keyboards/mechwild/bde/rev2/rev2.h b/keyboards/mechwild/bde/rev2/rev2.h index 8c8191710a..bb37c7ef69 100644 --- a/keyboards/mechwild/bde/rev2/rev2.h +++ b/keyboards/mechwild/bde/rev2/rev2.h @@ -16,16 +16,3 @@ #pragma once #include "quantum.h" - -#define LAYOUT( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,\ - 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 \ -) { \ - { K00, K01, K02, K03, K04, K05, K06 }, \ - { K10, K11, K12, K13, K14, K15, K16 }, \ - { K20, K21, K22, K23, K24, K25, K26 }, \ - { K0D, K0C, K0B, K0A, K09, K08, K07 }, \ - { K1D, K1C, K1B, K1A, K19, K18, K17 }, \ - { K2D, K2C, K2B, K2A, K29, K28, K27 } \ -} -- cgit v1.2.3