From 92f67719cc7faf6f2708d848ae3d1c6ee2b781cb Mon Sep 17 00:00:00 2001 From: skullydazed Date: Wed, 19 Sep 2018 11:41:40 -0700 Subject: [PATCH 001/269] Keyboard: Fix the LAYOUT_iso macro for tada68 (#3943) --- keyboards/tada68/keymaps/iso-uk/keymap.c | 8 ++++---- keyboards/tada68/tada68.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/tada68/keymaps/iso-uk/keymap.c b/keyboards/tada68/keymaps/iso-uk/keymap.c index d59f610f7c..c843595dc3 100644 --- a/keyboards/tada68/keymaps/iso-uk/keymap.c +++ b/keyboards/tada68/keymaps/iso-uk/keymap.c @@ -21,8 +21,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_BL] = LAYOUT_iso( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUHS, KC_DEL, \ - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP, \ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), @@ -42,8 +42,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FL] = LAYOUT_iso( _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS, \ - _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \ - _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, \ + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \ + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, \ _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, KC_BTN1, KC_MS_U, KC_BTN2, \ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R ), diff --git a/keyboards/tada68/tada68.h b/keyboards/tada68/tada68.h index 608f52e44f..670b0e6c15 100755 --- a/keyboards/tada68/tada68.h +++ b/keyboards/tada68/tada68.h @@ -55,8 +55,8 @@ #define LAYOUT_iso( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k2c, k1e, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \ k40, k41, k42, k45, k49, k4a, k4b, k4c, k4d, k4e \ ) \ @@ -102,4 +102,4 @@ void matrix_init_user(void); void matrix_scan_user(void); -#endif \ No newline at end of file +#endif From 71fe973190610bf155d864c71b8b326bc1b74eab Mon Sep 17 00:00:00 2001 From: Simon Dagfinrud Date: Wed, 19 Sep 2018 20:42:58 +0200 Subject: [PATCH 002/269] Keyboard: Add ISO-NOR keymap for TADA68 (#3944) --- keyboards/tada68/keymaps/iso-nor/config.h | 1 + keyboards/tada68/keymaps/iso-nor/keymap.c | 51 ++++++++++++++++++++++ keyboards/tada68/keymaps/iso-nor/readme.md | 17 ++++++++ keyboards/tada68/keymaps/iso-nor/rules.mk | 21 +++++++++ 4 files changed, 90 insertions(+) create mode 100644 keyboards/tada68/keymaps/iso-nor/config.h create mode 100644 keyboards/tada68/keymaps/iso-nor/keymap.c create mode 100644 keyboards/tada68/keymaps/iso-nor/readme.md create mode 100644 keyboards/tada68/keymaps/iso-nor/rules.mk diff --git a/keyboards/tada68/keymaps/iso-nor/config.h b/keyboards/tada68/keymaps/iso-nor/config.h new file mode 100644 index 0000000000..6f70f09bee --- /dev/null +++ b/keyboards/tada68/keymaps/iso-nor/config.h @@ -0,0 +1 @@ +#pragma once diff --git a/keyboards/tada68/keymaps/iso-nor/keymap.c b/keyboards/tada68/keymaps/iso-nor/keymap.c new file mode 100644 index 0000000000..2e6a80750f --- /dev/null +++ b/keyboards/tada68/keymaps/iso-nor/keymap.c @@ -0,0 +1,51 @@ +#include QMK_KEYBOARD_H + +#define _BL 0 +#define _FL 1 + +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| +| '|Backspa | ´| + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| Å| ¨| Ent-|Del | + * |-------------------------------------------------------| er|----| + * |CAPS | A| S| D| F| G| H| J| K| L| Ø| Æ| @ | |PgUp| + * |----------------------------------------------------------------| + * |Shif| <>| Z| X| C| V| B| N| M| ,| .| -| Shift| Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Alt |Cmd | Space |Alt| FN|Ctrl|Lef|Dow|Rig | + * `----------------------------------------------------------------' + */ + [_BL] = LAYOUT_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_GRV, KC_BSPC, KC_EQL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUHS, KC_DEL, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Keymap _FL1: Function Layer + * ,----------------------------------------------------------------. + * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| RESET|PSCR| + * |----------------------------------------------------------------| + * | | | Up| | | | | | | | |BL-|BL+|BL | INS| + * |----------------------------------------------------------------| + * | |Lef|Dow|Rig| | | | | | PP|PLA| PN| | |HOME| + * |----------------------------------------------------------------| + * | | | | | | | | | | V-| MV| V+| | | END| + * |----------------------------------------------------------------| + * | | | | | | | | | | | + * `----------------------------------------------------------------' + */ + [_FL] = LAYOUT_iso( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET, KC_PSCR, \ + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, BL_TOGG, KC_INS, \ + _______, KC_LEFT, KC_DOWN,KC_RIGHT, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_END, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; diff --git a/keyboards/tada68/keymaps/iso-nor/readme.md b/keyboards/tada68/keymaps/iso-nor/readme.md new file mode 100644 index 0000000000..5ade71ab4d --- /dev/null +++ b/keyboards/tada68/keymaps/iso-nor/readme.md @@ -0,0 +1,17 @@ +# TADA68 layout for ISO-NOR + +> An ISO-style layout for Norwegian keyboards. + +This layout was specifically made for Norwegian keyboards (i.e. includes `Æ`, `Ø` and `Å`), and is tested on a TADA68 purchased from [kbdfans](https://kbdfans.cn/) in September 2018. + +### Specifics + +As it's an ISO style keymap, it works with the fat double-row `Enter` key and the narrower left `Shift` and `<>` key. In addition, it switches the `'` key and the `´` key since the latter one is less common in Norwegian, and the first one normally is placed where the `Escape` key is located on a TADA68. + +## Installation + +Please see the [tada68 readme](../../readme.md) using the following command + +``` +make tada68:iso-nor:bin +``` diff --git a/keyboards/tada68/keymaps/iso-nor/rules.mk b/keyboards/tada68/keymaps/iso-nor/rules.mk new file mode 100644 index 0000000000..4deca710b8 --- /dev/null +++ b/keyboards/tada68/keymaps/iso-nor/rules.mk @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file From c23233f41ab9221577fc83bbae0a230452a38231 Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Wed, 19 Sep 2018 16:13:58 -0700 Subject: [PATCH 003/269] Keymap: Talljoe's keymap for oddball keyboards (#3910) * Create layout for JD45 * Tweak layout to better support JD45 and add more tap dancing. * Add Maltron and tweak layout for 40% enter compatibility. * Switch back to `BL_TOGGLE` for backlight. * More tweaks * Rename talljoe_gherkin to talljoe-gherkin * Make NAV layer tab C_S_T also. * Add missing RESET key. * Add Talljoe layout for minivan. * MTI is not for me * Tweak keymap. * Add talljoe keymap to Atreus. * Minor tweaks. * Fix talljoe keymaps to work with new Zeal60 commit. --- .../atreus/keymaps/talljoe-atreus/config.h | 42 +++++ .../atreus/keymaps/talljoe-atreus/keymap.c | 1 + .../atreus/keymaps/talljoe-atreus/rules.mk | 1 + .../config.h | 0 .../keymap.c | 0 .../rules.mk | 0 keyboards/jd45/keymaps/talljoe/config.h | 22 +++ keyboards/jd45/keymaps/talljoe/keymap.c | 1 + .../tv44/keymaps/talljoe-minivan/config.h | 53 ++++++ .../tv44/keymaps/talljoe-minivan/keymap.c | 1 + .../tv44/keymaps/talljoe-minivan/rules.mk | 3 + keyboards/zeal60/rules.mk | 3 +- .../60_ansi_split_bs_rshift/talljoe/keymap.c | 25 +-- .../60_ansi_split_bs_rshift/talljoe/rules.mk | 1 + .../talljoe/solarized.c | 23 +++ .../talljoe/solarized.h | 27 +++ users/talljoe/config.h | 2 +- users/talljoe/talljoe.c | 53 +++--- users/talljoe/talljoe.h | 76 +++++++-- users/talljoe/tapdance.c | 154 +++++++++++++++--- 20 files changed, 420 insertions(+), 68 deletions(-) create mode 100644 keyboards/atreus/keymaps/talljoe-atreus/config.h create mode 100644 keyboards/atreus/keymaps/talljoe-atreus/keymap.c create mode 100644 keyboards/atreus/keymaps/talljoe-atreus/rules.mk rename keyboards/gherkin/keymaps/{talljoe_gherkin => talljoe-gherkin}/config.h (100%) rename keyboards/gherkin/keymaps/{talljoe_gherkin => talljoe-gherkin}/keymap.c (100%) rename keyboards/gherkin/keymaps/{talljoe_gherkin => talljoe-gherkin}/rules.mk (100%) create mode 100644 keyboards/jd45/keymaps/talljoe/config.h create mode 100644 keyboards/jd45/keymaps/talljoe/keymap.c create mode 100644 keyboards/tv44/keymaps/talljoe-minivan/config.h create mode 100644 keyboards/tv44/keymaps/talljoe-minivan/keymap.c create mode 100644 keyboards/tv44/keymaps/talljoe-minivan/rules.mk create mode 100644 layouts/community/60_ansi_split_bs_rshift/talljoe/rules.mk create mode 100644 layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c create mode 100644 layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h diff --git a/keyboards/atreus/keymaps/talljoe-atreus/config.h b/keyboards/atreus/keymaps/talljoe-atreus/config.h new file mode 100644 index 0000000000..87b68ffc65 --- /dev/null +++ b/keyboards/atreus/keymaps/talljoe-atreus/config.h @@ -0,0 +1,42 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H + +#define PREVENT_STUCK_MODIFIERS +#define SPACE_COUNT 2 + +#define TEMPLATE( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + 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, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) LAYOUT( \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \ + K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \ + K10, K41, K42, K30, K44, K1D, K20, K45, K3C, K0D, K2B, K3D \ +) + +#define TEMPLATE_NUM( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + 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, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) LAYOUT( \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \ + K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \ + K10, K41, K42, K30, K44, K1D, K20, K45, K48, K49, K2B, K3D \ +) + + +#define TEMPLATE_RESET LAYOUT( \ + RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ +) +#endif diff --git a/keyboards/atreus/keymaps/talljoe-atreus/keymap.c b/keyboards/atreus/keymaps/talljoe-atreus/keymap.c new file mode 100644 index 0000000000..7812add812 --- /dev/null +++ b/keyboards/atreus/keymaps/talljoe-atreus/keymap.c @@ -0,0 +1 @@ +// This space intentionally left blank diff --git a/keyboards/atreus/keymaps/talljoe-atreus/rules.mk b/keyboards/atreus/keymaps/talljoe-atreus/rules.mk new file mode 100644 index 0000000000..92007fe8ad --- /dev/null +++ b/keyboards/atreus/keymaps/talljoe-atreus/rules.mk @@ -0,0 +1 @@ +USER_NAME := talljoe diff --git a/keyboards/gherkin/keymaps/talljoe_gherkin/config.h b/keyboards/gherkin/keymaps/talljoe-gherkin/config.h similarity index 100% rename from keyboards/gherkin/keymaps/talljoe_gherkin/config.h rename to keyboards/gherkin/keymaps/talljoe-gherkin/config.h diff --git a/keyboards/gherkin/keymaps/talljoe_gherkin/keymap.c b/keyboards/gherkin/keymaps/talljoe-gherkin/keymap.c similarity index 100% rename from keyboards/gherkin/keymaps/talljoe_gherkin/keymap.c rename to keyboards/gherkin/keymaps/talljoe-gherkin/keymap.c diff --git a/keyboards/gherkin/keymaps/talljoe_gherkin/rules.mk b/keyboards/gherkin/keymaps/talljoe-gherkin/rules.mk similarity index 100% rename from keyboards/gherkin/keymaps/talljoe_gherkin/rules.mk rename to keyboards/gherkin/keymaps/talljoe-gherkin/rules.mk diff --git a/keyboards/jd45/keymaps/talljoe/config.h b/keyboards/jd45/keymaps/talljoe/config.h new file mode 100644 index 0000000000..f8b0333cfb --- /dev/null +++ b/keyboards/jd45/keymaps/talljoe/config.h @@ -0,0 +1,22 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H + +#define PREVENT_STUCK_MODIFIERS +#define SPACE_COUNT 2 + +#define TEMPLATE( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + 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, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) { \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K0D, K1D }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, KC_NO }, \ + { K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO }, \ + { K40, K00, K41, K42, K44, KC_NO, K45, KC_NO, K48, K49, K3D, K4C, KC_NO } \ +} + +#endif diff --git a/keyboards/jd45/keymaps/talljoe/keymap.c b/keyboards/jd45/keymaps/talljoe/keymap.c new file mode 100644 index 0000000000..7812add812 --- /dev/null +++ b/keyboards/jd45/keymaps/talljoe/keymap.c @@ -0,0 +1 @@ +// This space intentionally left blank diff --git a/keyboards/tv44/keymaps/talljoe-minivan/config.h b/keyboards/tv44/keymaps/talljoe-minivan/config.h new file mode 100644 index 0000000000..fa1f43adce --- /dev/null +++ b/keyboards/tv44/keymaps/talljoe-minivan/config.h @@ -0,0 +1,53 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H + +#define SPACE_COUNT 2 + +#define TEMPLATE( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + 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, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) KEYMAP_ARROW( \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K0D, \ + K41, K49, K42, K44, K45, K3C, K0B, K00, K3D \ +) + +#define TEMPLATE_ALT( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + 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, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) KEYMAP_ARROW( \ + K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ + K41, K49, K42, K44, K45, K48, K49, K4B, K4C \ +) + +#define TEMPLATE_ADJUST( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + 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, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) KEYMAP_ARROW( \ + K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K2D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ + K40, K49, K42, K44, K45, K48, K0B, K0C, K4C \ +) + +#define TEMPLATE_RESET KEYMAP_ARROW( \ + RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET) + +#endif diff --git a/keyboards/tv44/keymaps/talljoe-minivan/keymap.c b/keyboards/tv44/keymaps/talljoe-minivan/keymap.c new file mode 100644 index 0000000000..7812add812 --- /dev/null +++ b/keyboards/tv44/keymaps/talljoe-minivan/keymap.c @@ -0,0 +1 @@ +// This space intentionally left blank diff --git a/keyboards/tv44/keymaps/talljoe-minivan/rules.mk b/keyboards/tv44/keymaps/talljoe-minivan/rules.mk new file mode 100644 index 0000000000..a4e40d0ba6 --- /dev/null +++ b/keyboards/tv44/keymaps/talljoe-minivan/rules.mk @@ -0,0 +1,3 @@ +USER_NAME := talljoe + +COMMAND_ENABLE = no # Commands for debug and configuration diff --git a/keyboards/zeal60/rules.mk b/keyboards/zeal60/rules.mk index c4686f9852..f099ea9fdd 100644 --- a/keyboards/zeal60/rules.mk +++ b/keyboards/zeal60/rules.mk @@ -53,7 +53,7 @@ BOOTLOADER = atmel-dfu OPT_DEFS += -DNO_SUSPEND_POWER_DOWN # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) @@ -76,3 +76,4 @@ RAW_ENABLE = yes DYNAMIC_KEYMAP_ENABLE = yes CIE1931_CURVE = yes +LAYOUTS = 60_ansi 60_iso 60_hhkb 60_ansi_split_bs_rshift diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c b/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c index b5dc544927..cfad9da8a3 100644 --- a/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c +++ b/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c @@ -1,7 +1,7 @@ #ifdef KEYBOARD_zeal60 #include "config.h" #include "zeal60.h" -#include "zeal_backlight.h" +#include "rgb_backlight.h" #include "action_layer.h" #include "solarized.h" #include "talljoe.h" @@ -9,7 +9,7 @@ // from zeal_backlight.c // we want to be able to set indicators for the spacebar stabs // but they are not represented by a row/index. -extern zeal_backlight_config g_config; +extern backlight_config g_config; void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led ); void set_backlight_defaults(void) { @@ -17,7 +17,7 @@ void set_backlight_defaults(void) { uint8_t caps_lock; map_row_column_to_led(3, 12, &caps_lock); map_row_column_to_led(4, 7, &space); - zeal_backlight_config default_values = { + backlight_config default_values = { .use_split_backspace = USE_SPLIT_BACKSPACE, .use_split_left_shift = USE_SPLIT_LEFT_SHIFT, .use_split_right_shift = USE_SPLIT_RIGHT_SHIFT, @@ -34,15 +34,17 @@ void set_backlight_defaults(void) { .layer_2_indicator = { .index = space, .color = solarized.yellow }, .layer_3_indicator = { .index = 254, .color = solarized.red }, .alphas_mods = { - BACKLIGHT_ALPHAS_MODS_ROW_0, - BACKLIGHT_ALPHAS_MODS_ROW_1, - BACKLIGHT_ALPHAS_MODS_ROW_2, - BACKLIGHT_ALPHAS_MODS_ROW_3, - BACKLIGHT_ALPHAS_MODS_ROW_4 } + RGB_BACKLIGHT_ALPHAS_MODS_ROW_0, + RGB_BACKLIGHT_ALPHAS_MODS_ROW_1, + RGB_BACKLIGHT_ALPHAS_MODS_ROW_2, + RGB_BACKLIGHT_ALPHAS_MODS_ROW_3, + RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 } }; - memcpy(&g_config, &default_values, sizeof(zeal_backlight_config)); + memcpy(&g_config, &default_values, sizeof(backlight_config)); backlight_config_save(); +#undef CUSTOM_RGB_LAYOUTS +#ifdef CUSTOM_RGB_LAYOUTS solarized_t* S = &solarized; HSV alphas = S->base2; HSV custom_color_map[MATRIX_ROWS][MATRIX_COLS] = CM( @@ -54,9 +56,12 @@ void set_backlight_defaults(void) { ); for (uint8_t row = 0; row < MATRIX_ROWS; ++row) { for (uint8_t col = 0; col < MATRIX_COLS; ++col) { - backlight_set_key_color(row, col, custom_color_map[row][col]); + uint8_t index; + map_row_column_to_led( row, col, &index ); + set_key_color(index, custom_color_map[row][col]); } } +#endif // CUSTOM_RGB_LAYOUTS } bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/rules.mk b/layouts/community/60_ansi_split_bs_rshift/talljoe/rules.mk new file mode 100644 index 0000000000..239f03091a --- /dev/null +++ b/layouts/community/60_ansi_split_bs_rshift/talljoe/rules.mk @@ -0,0 +1 @@ +SRC += $(KEYMAP_PATH)/solarized.c diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c b/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c new file mode 100644 index 0000000000..3e9e726b95 --- /dev/null +++ b/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c @@ -0,0 +1,23 @@ +#include "solarized.h" + +#define MAKE_COLOR(_H, _S, _V) \ + { .h = (((uint32_t)_H) * 255) / 360, .s = (((uint16_t)_S) * 255) / 100, .v = (((uint16_t)_V) * 255) / 100 } + +solarized_t solarized = { + .base03 = MAKE_COLOR(193, 100, 21), + .base02 = MAKE_COLOR(192, 90, 26), + .base01 = MAKE_COLOR(194, 25, 46), + .base00 = MAKE_COLOR(195, 23, 51), + .base0 = MAKE_COLOR(186, 13, 59), + .base1 = MAKE_COLOR(180, 9, 63), + .base2 = MAKE_COLOR( 44, 11, 93), + .base3 = MAKE_COLOR( 44, 10, 99), + .yellow = MAKE_COLOR( 45, 100, 71), + .orange = MAKE_COLOR( 18, 89, 80), + .red = MAKE_COLOR( 1, 79, 86), + .magenta = MAKE_COLOR(331, 74, 83), + .violet = MAKE_COLOR(237, 45, 77), + .blue = MAKE_COLOR(205, 82, 82), + .cyan = MAKE_COLOR(175, 74, 63), + .green = MAKE_COLOR( 68, 100, 60), +}; diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h b/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h new file mode 100644 index 0000000000..3b00caea70 --- /dev/null +++ b/layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h @@ -0,0 +1,27 @@ +#ifndef SOLARIZED_H +#define SOLARIZED_H + +#include "quantum/color.h" + +typedef struct { + HSV base03; + HSV base02; + HSV base01; + HSV base00; + HSV base0; + HSV base1; + HSV base2; + HSV base3; + HSV yellow; + HSV orange; + HSV red; + HSV magenta; + HSV violet; + HSV blue; + HSV cyan; + HSV green; +} solarized_t; + +extern solarized_t solarized; + +#endif diff --git a/users/talljoe/config.h b/users/talljoe/config.h index 1cdbb5a412..0d06a0b12d 100644 --- a/users/talljoe/config.h +++ b/users/talljoe/config.h @@ -1,7 +1,7 @@ #ifndef USERSPACE_CONFIG_H #define USERSPACE_CONFIG_H -#define IGNORE_MOD_TAP_INTERRUPT +#define PERMISSIVE_HOLD #define RESET_LAYER 15 diff --git a/users/talljoe/talljoe.c b/users/talljoe/talljoe.c index e9c69b016a..7a343e7768 100644 --- a/users/talljoe/talljoe.c +++ b/users/talljoe/talljoe.c @@ -5,10 +5,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = TEMPLATE_TKL( KC_ESC, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SLCK, MO_ADJ , - KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSLS, KC_INS , KC_HOME, KC_PGUP, - KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T , KC_Y, KC_U, KC_I, KC_O, KC_P , KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL , KC_END , KC_PGDN, - US_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G , KC_H, KC_J, KC_K, KC_L, US_SCLN, US_QUOT, US_ENT , - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B , KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP , + US_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , US_BSLS, KC_INS , KC_HOME, KC_PGUP, + US_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T , KC_Y, KC_U, KC_I, KC_O, KC_P , KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL , KC_END , KC_PGDN, + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G , KC_H, KC_J, KC_K, KC_L, US_SCLN, US_QUOT, US_ENT , + SH_LBRC, KC_Z, KC_X, KC_C, KC_V, KC_B , KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SH_RBRC, KC_UP , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC2, KC_SPC1, KC_SPC3, KC_RALT, KC_RGUI, KC_RCTL, KC_PTT , KC_LEFT, KC_DOWN, KC_RGHT), [_WORKMAN] = TEMPLATE( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -34,41 +34,44 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, KC_A, KC_R, KC_S, KC_T, KC_D , KC_H, KC_N, KC_E, KC_I, KC_O , _______, _______, _______, KC_Z, KC_X, KC_C, KC_V, KC_B , KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), - +#if (SPACE_COUNT > 1) + // A tweaked version of the Maltron layout + [_MALTROFF] = TEMPLATE( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_Q, KC_P, KC_Y, KC_G, KC_B , KC_J, KC_M, KC_U, KC_K, KC_L, _______, _______, _______, + _______, KC_A, KC_N, KC_I, KC_S, KC_F , KC_D, KC_T, KC_H, KC_O, KC_R , US_ENT , KC_BSPC, + _______, KC_Z, KC_X, KC_C, KC_V, US_QUOT, KC_SCLN, KC_W, KC_COMM, KC_DOT, KC_SLSH, _______, _______, + _______, _______, _______, MLT_E , _______, _______, _______, _______, _______, _______), +#endif #ifdef ENABLE_GAME_LAYER [_GAME] = TEMPLATE( KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSLS, KC_GRV, KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSPC, MO_NAV , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO_ADJ , - KC_LCTL, KC_PTT , KC_PGDN, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_APP , KC_RCTL, KC_PTT ), + KC_LCTL, KC_PTT , KC_PGDN, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_APP , KC_RCTL, KC_PTT ), #endif - [_NAV] = TEMPLATE( + [_NAV] = TEMPLATE_NAV( KC_GRV , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_TAB , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_VOLU, KC_INS , KC_PGUP, KC_UP , KC_PGDN, KC_BTN1, KC_BTN2, KC_BTN3, KC_DEL , - US_CAPS, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_MUTE, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , KC_RCTL, TG_ADJ , - KC_LSFT, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_END , KC_PGDN, KC_WBAK, KC_WFWD, KC_WREF, KC_RSFT, KC_APP , + US_TAB , KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_INS , KC_PGUP, KC_UP , KC_PGDN, KC_BTN1, KC_BTN3, KC_BTN2, KC_DEL , + CTL_ESC, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_AMPR, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , US_QUOT, TG_ADJ , + KC_LSFT, KC_EQL, KC_PLUS, KC_MINS, KC_UNDS, KC_ASTR, KC_CALC, US_GRV , KC_WBAK, KC_WFWD, KC_WREF, KC_RSFT, KC_APP , KC_LCTL, KC_LGUI, KC_LALT, NV_SPC2, NV_SPC1, NV_SPC3, KC_RALT, KC_RGUI, KC_RCTL, KC_PTT ), - [_NUM] = TEMPLATE( + [_NUM] = TEMPLATE_NUM( XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, XXXXXXX, KC_DEL , - US_CAPS, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_PPLS, KC_PENT, XXXXXXX, - KC_LSFT, KC_EQL, KC_PLUS, KC_BSLS, KC_PIPE, KC_SCLN, XXXXXXX, KC_1, KC_2, KC_3, KC_PAST, KC_PSLS, XXXXXXX, + KC_GRV , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_VOLU, KC_CIRC, KC_7, KC_8, KC_9, KC_PMNS, XXXXXXX, XXXXXXX, KC_DEL , + CTL_ESC, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_MUTE, KC_PENT, KC_4, KC_5, KC_6, KC_PPLS, XXXXXXX, KC_ENT , + KC_LSFT, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_PIPE, KC_1, KC_2, KC_3, KC_PAST, KC_PSLS, TG_NUM , KC_LCTL, KC_LGUI, KC_LALT, NM_SPC2, NM_SPC1, NM_SPC3, KC_PDOT, KC_PCMM, KC_RCTL, KC_PTT ), // Adjust layer is on the split-shift key; or NAV+Enter (for non-split keyboards) - [_ADJUST] = TEMPLATE( - MO_RST , FX(1) , FX(2) , FX(3) , FX(4) , FX(5) , FX(6) , FX(7) , FX(8) , FX(9) , FX(10) , BR_DEC , BR_INC , XXXXXXX, MO_RST , - XXXXXXX, H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, KC_DEL , + [_ADJUST] = TEMPLATE_ADJUST( + MO_RST , FX(1) , FX(2) , FX(3) , FX(4) , FX(5) , FX(8) , FX(9) , FX(10) , FX(20) , FX(0) , BR_DEC , BR_INC , XXXXXXX, MO_RST , + MO_RST , H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, MO_RST , XXXXXXX, H1_DEC , S1_DEC , H2_DEC , S2_DEC , EF_DEC , RGB_HUD, RGB_SAD, RGB_RMOD,RGB_M_K, RGB_M_B, RGB_M_G, TG_ADJ , - TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MAKE, KC_CAPS, XXXXXXX, - MO_RST , AG_NORM, AG_SWAP, XXXXXXX, BL_STEP, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME), + TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, LY_MALT, XXXXXXX, XXXXXXX, KC_MAKE, KC_CAPS, XXXXXXX, + MO_RST , AG_SWAP, AG_NORM, XXXXXXX, BL_TOGG, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME), // To Reset hit FN + ` + Esc - [_RESET] = TEMPLATE( - RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - RESET , XXXXXXX, XXXXXXX, XXXXXXX, KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX), + [_RESET] = TEMPLATE_RESET, }; void matrix_scan_user(void) { diff --git a/users/talljoe/talljoe.h b/users/talljoe/talljoe.h index 7c34cd41ff..4436c0a044 100644 --- a/users/talljoe/talljoe.h +++ b/users/talljoe/talljoe.h @@ -8,7 +8,7 @@ enum userspace_custom_keycodes { DFAULTS, TOGGLE_BACKLIGHT, EFFECT, - EFFECT_END = EFFECT + 10 + EFFECT_END = EFFECT + 20 }; #ifndef RESET_LAYER @@ -21,6 +21,7 @@ enum layers { _NORMAN, _DVORAK, _COLMAK, + _MALTROFF, _GAME, _NAV, _NUM, @@ -29,7 +30,9 @@ enum layers { }; enum tap_dancers { - TD_SEMICOLON + TD_SEMICOLON, + TD_GRAVE, + TD_QUOTE, }; #define _______ KC_TRNS @@ -39,6 +42,7 @@ enum tap_dancers { #define MO_ADJ MO(_ADJUST) #define MO_RST MO(_RESET) #define TG_ADJ TG(_ADJUST) +#define TG_NUM TG(_NUM) #ifdef ENABLE_GAME_LAYER #define TG_GAME TG(_GAME) #else @@ -49,16 +53,28 @@ enum tap_dancers { #define LY_NRMN DF(_NORMAN) #define LY_DVRK DF(_DVORAK) #define LY_CLMK DF(_COLMAK) +#if SPACE_COUNT >= 2 + #define LY_MALT DF(_MALTROFF) +#else + #define LY_MALT KC_NO +#endif #define TG_NKRO MAGIC_TOGGLE_NKRO #define KC_PTT KC_F24 #define MS_MID KC_MS_BTN3 #define FX(x) (EFFECT + x) -#define US_CAPS CTL_T(KC_ESC) -#define US_QUOT RCTL_T(KC_QUOT) +#define CTL_ESC CTL_T(KC_ESC) +#define US_ENT RCTL_T(KC_ENT) #define US_MINS RCTL_T(KC_QUOT) +#define US_BSLS LCA_T(KC_BSLS) #define US_SCLN TD(TD_SEMICOLON) -#define US_ENT LT(_NUM, KC_ENT) +#define US_GRV TD(TD_GRAVE) +#define US_QUOT TD(TD_QUOTE) +#define US_TAB C_S_T(KC_TAB) +#define SH_LBRC LSFT_T(KC_LBRC) +#define SH_RBRC RSFT_T(KC_RBRC) + +#define MLT_E LT(_NUM, KC_E) #ifndef SPACE_COUNT #define SPACE_COUNT 1 @@ -75,17 +91,34 @@ enum tap_dancers { #define NM_SPC1 _______ #define NM_SPC2 _______ #define NM_SPC3 _______ +#elif (SPACE_COUNT == 2) + #define KC_SPC1 LT(_NAV,KC_SPC) + #define KC_SPC2 LT(_NUM,KC_ENT) + + #define NV_SPC1 KC_SPC + #define NV_SPC2 KC_ENT + + #define NM_SPC1 KC_0 + #define NM_SPC2 KC_SPC + + #define KC_SPC3 XXXXXXX + #define NV_SPC3 XXXXXXX + #define NM_SPC3 XXXXXXX #elif (SPACE_COUNT == 3) - #define KC_SPC1 KC_BSPC + #ifdef SWAP_HANDS_ENABLE + #define KC_SPC1 SH_T(KC_BSPC) + #else + #define KC_SPC1 KC_BSPC + #endif #define KC_SPC2 LT(_NUM,KC_ENT) #define KC_SPC3 LT(_NAV,KC_SPC) #define NV_SPC1 KC_SPC - #define NV_SPC2 C_S_T(KC_ENT) + #define NV_SPC2 KC_ENT #define NV_SPC3 KC_SPC - #define NM_SPC2 XXXXXXX #define NM_SPC1 KC_SPC + #define NM_SPC2 XXXXXXX #define NM_SPC3 KC_0 #else #error "Unsupported space count:" SPACE_COUNT @@ -110,7 +143,7 @@ enum tap_dancers { #define FN_MO2 KC_NO #endif -#ifdef TEMPLATE_TKL +#ifndef TEMPLATE #define _X_ KC_NO #define TEMPLATE( \ KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KJ6, \ @@ -126,7 +159,8 @@ enum tap_dancers { KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, _X_, \ KA4, KP2, KC6, KX1, KK6, KX2, KC0, KM3, KD0, KA1, _X_, _X_, _X_ \ ) -#else +#endif +#ifndef TEMPLATE_TKL #define TEMPLATE_TKL( \ KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \ KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \ @@ -143,4 +177,26 @@ enum tap_dancers { ) #endif +#ifndef TEMPLATE_ALT + #define TEMPLATE_ALT TEMPLATE +#endif +#ifndef TEMPLATE_NUM + #define TEMPLATE_NUM TEMPLATE_ALT +#endif +#ifndef TEMPLATE_NAV + #define TEMPLATE_NAV TEMPLATE_ALT +#endif +#ifndef TEMPLATE_ADJUST + #define TEMPLATE_ADJUST TEMPLATE_ALT +#endif + +#ifndef TEMPLATE_RESET + #define TEMPLATE_RESET TEMPLATE_ALT( \ + RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , \ + RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + RESET , XXXXXXX, XXXXXXX, XXXXXXX, RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX) +#endif + #endif diff --git a/users/talljoe/tapdance.c b/users/talljoe/tapdance.c index 3198fc67f0..c4d6025f0f 100644 --- a/users/talljoe/tapdance.c +++ b/users/talljoe/tapdance.c @@ -1,34 +1,146 @@ //Tap Dance #include "talljoe.h" -// Send semin-colon + enter on two taps -void tap_dance_semicolon(qk_tap_dance_state_t *state, void *user_data) { +enum { + SINGLE_TAP = 1, + SINGLE_HOLD = 2, + DOUBLE_TAP = 3, + DOUBLE_HOLD = 4, + DOUBLE_SINGLE_TAP = 5, //send two single taps + TRIPLE_TAP = 6, + TRIPLE_HOLD = 7, + SPECIAL = 8 +}; + +static struct { + int quote; + int semicolon; +} tap_state = {0}; + +int cur_dance (qk_tap_dance_state_t *state) { + if (state->count == 1) { + //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP + if (state->interrupted) { + // if (!state->pressed) return SINGLE_TAP; + //need "permissive hold" here. + // else return SINGLE_HOLD; + //If the interrupting key is released before the tap-dance key, then it is a single HOLD + //However, if the tap-dance key is released first, then it is a single TAP + //But how to get access to the state of the interrupting key???? + return SINGLE_TAP; + } + else { + if (!state->pressed) return SINGLE_TAP; + else return SINGLE_HOLD; + } + } + //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated + //with single tap. + else if (state->count == 2) { + if (state->interrupted) return DOUBLE_SINGLE_TAP; + else if (state->pressed) return DOUBLE_HOLD; + else return DOUBLE_TAP; + } + else if ((state->count == 3) && ((state->interrupted) || (!state->pressed))) return TRIPLE_TAP; + else if (state->count == 3) return TRIPLE_HOLD; + else return SPECIAL; +} + +int hold_cur_dance (qk_tap_dance_state_t *state) { + if (state->count == 1) { + if (state->interrupted) { + if (!state->pressed) return SINGLE_TAP; + else return SINGLE_HOLD; + } + else { + if (!state->pressed) return SINGLE_TAP; + else return SINGLE_HOLD; + } + } + //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated + //with single tap. + else if (state->count == 2) { + if (state->pressed) return DOUBLE_HOLD; + else return DOUBLE_TAP; + } + else if (state->count == 3) { + if (!state->pressed) return TRIPLE_TAP; + else return TRIPLE_HOLD; + } + else return SPECIAL; +} + +// Send semi-colon + enter on two taps +void tap_dance_semicolon_finished(qk_tap_dance_state_t *state, void *user_data) { + tap_state.semicolon = hold_cur_dance(state); + switch (tap_state.semicolon) { + case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_SCLN); break; + case SINGLE_HOLD: layer_on(_NUM); break; + } +} + +void tap_dance_semicolon_reset(qk_tap_dance_state_t *state, void *user_data) { + switch (tap_state.semicolon) { + case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_SCLN); break; + case DOUBLE_TAP: { + if (get_mods()) { + SEND_STRING(";;"); // send normal when mods are pressed + } + else { + SEND_STRING(";\n"); + } + break; + } + case TRIPLE_TAP: { + SEND_STRING(";\n\n"); + } + case SPECIAL: layer_invert(_NUM); break; + case SINGLE_HOLD: layer_off(_NUM); break; + } + tap_state.semicolon = 0; +} + +// Send `. ~. ``` +void tap_dance_grave_finished(qk_tap_dance_state_t *state, void *user_data) { switch(state->count) { case 1: - register_code(KC_SCLN); - unregister_code(KC_SCLN); + SEND_STRING("`"); break; case 2: - register_code(KC_SCLN); - unregister_code(KC_SCLN); - - uint8_t mods = get_mods(); - if (mods) { - clear_mods(); - } - - register_code(KC_ENT); - unregister_code(KC_ENT); - - if (mods) { - set_mods(mods); - } - - reset_tap_dance(state); + SEND_STRING("~"); break; } } +void tap_dance_grave_each(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 3) { + SEND_STRING("```"); + } else if (state->count > 3) { + SEND_STRING("`"); + } +} + + +void tap_dance_quote_finished(qk_tap_dance_state_t *state, void *user_data) { + tap_state.quote = hold_cur_dance(state); + switch (tap_state.quote) { + case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_QUOT); break; + case SINGLE_HOLD: layer_on(_NAV); break; + } +} + +void tap_dance_quote_reset(qk_tap_dance_state_t *state, void *user_data) { + switch (tap_state.quote) { + case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_QUOTE); break; + case DOUBLE_TAP: SEND_STRING("\""); break; + case TRIPLE_TAP: layer_invert(_NAV); break; + case SINGLE_HOLD: layer_off(_NAV); break; + } + tap_state.quote = 0; +} + qk_tap_dance_action_t tap_dance_actions[] = { - [TD_SEMICOLON] = ACTION_TAP_DANCE_FN(tap_dance_semicolon), + [TD_SEMICOLON] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_semicolon_finished, tap_dance_semicolon_reset), + [TD_GRAVE] = ACTION_TAP_DANCE_FN_ADVANCED(tap_dance_grave_each, tap_dance_grave_finished, NULL), + [TD_QUOTE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_quote_finished, tap_dance_quote_reset), }; From 14f691d2a749c6f4fd9bf39d219da1369747cd8d Mon Sep 17 00:00:00 2001 From: Mat Greten Date: Wed, 19 Sep 2018 17:15:13 -0600 Subject: [PATCH 004/269] Keymap: meagerfindings ergodox (#3920) * initial commit * updating after review --- .../ergodox/meagerfindings/README.md | 109 ++++ .../community/ergodox/meagerfindings/config.h | 26 + .../community/ergodox/meagerfindings/keymap.c | 558 ++++++++++++++++++ .../community/ergodox/meagerfindings/rules.mk | 3 + 4 files changed, 696 insertions(+) create mode 100644 layouts/community/ergodox/meagerfindings/README.md create mode 100644 layouts/community/ergodox/meagerfindings/config.h create mode 100644 layouts/community/ergodox/meagerfindings/keymap.c create mode 100644 layouts/community/ergodox/meagerfindings/rules.mk diff --git a/layouts/community/ergodox/meagerfindings/README.md b/layouts/community/ergodox/meagerfindings/README.md new file mode 100644 index 0000000000..e7e4270db9 --- /dev/null +++ b/layouts/community/ergodox/meagerfindings/README.md @@ -0,0 +1,109 @@ +![Base](https://meagerfindings.com/assets/img/ergodox/base.png) + +# Meagerfinding's ErgoDox Layout + + + +- [Overview](#overview) +- [Credit where credit is due](#credit-where-credit-is-due) +- [Features](#features) + - [Tap/Hold Macro Keys](#taphold-macro-keys) + - [TapDance Keys](#tapdance-keys) +- [Base Layer](#base-layer) + - [Things to note:](#things-to-note) +- [Old Base Layer](#old-base-layer) +- [Symbols Layer](#symbols-layer) +- [Mouse & Media Keys Layer](#mouse-media-keys-layer) +- [Markdown Layer](#markdown-layer) +- [Arrow/Movements Layer](#arrowmovements-layer) +- [Numpad Layer](#numpad-layer) + + + +## Overview + +The overall goals of this layout are to: +1. Use the Ergodox thumb clusters to eliminate pinky reach. +2. Place as many useful keys under the home rows as possible. + +I first decided to build an ErgoDox as I wanted to use my thumbs for more with the added ergonomic benefits of a split board and ortholinear layout. I knew my hands were hurting from the weird contortions of copying and pasting constantly on my Mac, but I had no idea how strained I really was until I started moving as many modifier keys to the thumb clusters. + +## Credit where credit is due + +The initial layout used created on the [ErgoDox EZ Configurator](https://ergodox-ez.com/pages/graphical-configurator). I went through 26+ iterations within the configurator prior to beginning my journey with QMK itself. Much of the dual function/layer keys are influenced by and adapted from the EZ Configurator. + +Many features in this layout are either directly inspired by or are adaptations of [Algernon's incredible ErgoDox layout](https://github.com/algernon/ergodox-layout). Specifically: TapDance and its usage, and the brilliant idea of using TapDance to pair down the four keys for parens, brackets, and curly braces into just 2 keys. + +## Features + +### Tap/Hold Macro Keys +* `Paste/Paste Special` key sends Paste on tap and Paste Special when held. +* `Screen/Video` key sends `||scrn` when tapped and `||video` when held + - [Typinator](http://www.ergonis.com/products/typinator/) expands `||scrn` into `(Screenshot: )`, and `||video` into `(Video: )`, the QMK macro then moves back to before the last paren, inserts a space and removes a space to create a hyperlink for use in Zendesk. +* When tapped, `Todoist` toggles quick add window for a new Todoist task (`CMD + Shift + A`) and switches to Todoist when held +* The RubyMine key opens RubyMine by triggering spotlight, typing out `Rubymine`, and submitting the enter key. +* `Zendesk` triggers spotlight and then calls Typinator expansion to open my Zendesk Agent dashboard in Chrome. + + +### TapDance Keys +* `Copy/Cut` key copies on tap, cut's on two taps. +* One tap on `Snagit` key = sends `Ctrl + Shift + C` which is Snagit's selector and two taps on `Snagit` key = `Cmd + Shift + Opt + 4`, OS X cropping screenshot that is copied to the clipboard only. +* Tapping the `[{(`/`)}]` keys once yields `[` or `{` when the shift key is engaged, tapping them twice yields `(`. + +## Base Layer + +![Base](https://meagerfindings.com/assets/img/ergodox/base.png) + +The base layer retains the alphas from the QWERTY layout without any modifications. + +### Things to note: + +- The shift key is a One Shot Modifier key, meaning shift is not submitted when the key is tapped, instead, it only submits when you either tap it again, or on the next key press. + - There is no CAPSLOCK key designated as it is pretty comfortable to simply hold down shift in this layout and continue typing. +- There is only one layer that you can fully switch to on this layout, the [Old Base layer](#old-base-layer). All other layers require holding a key to reach them. For the most part, the key that toggles a layer, will be on the opposite hand that will be typing with that layer. + - For example: the symbols layer is reached by holding down the enter key with your right thumb, and most of the symbols are located on the left hand board. + + +## Old Base Layer + +![Old Base](https://meagerfindings.com/assets/img/ergodox/old_base.png) + +I am moving into a new position (software engineering) at work from a Support position. My hope is to use my F keys more often and write fewer emails. This is my old base layer, still easily accessible, as I'm not used to having F key's on my top row quite yet. + +## Symbols Layer + +![Symbols](https://meagerfindings.com/assets/img/ergodox/symbols.png) + +Holding down the `enter` key with your right thumb toggles the symbol layer. + +I've placed my most used symbols under the homerow. Granted, right now I mainly right emails/support ticket responses, so this home row may need to change as I transition to software engineering. + +## Mouse & Media Keys Layer + +![Mouse & Media](https://meagerfindings.com/assets/img/ergodox/mouse_media.png) + +Holding down the `:` key on with your right pinky toggles the mouse and media layer. Your left hand controls the mouse directions just in a similar fashion to the keys used in the [movement layer](#arrowmovements-layer). + +The right hand has a media controls under the homerow for quick muting/pausing. + +* `XKCD #1319` Key that ironically partially-automates accessing the link to [XKCD #1319](https://xkcd.com/1319/). + +## Markdown Layer + +![Markdown](https://meagerfindings.com/assets/img/ergodox/markdown.png) + +This layer places most common markdown symbols under the right hand. You can reach this layer by holding down the `F` key on your left hand. + +## Arrow/Movements Layer + +![Movement](https://meagerfindings.com/assets/img/ergodox/movement_arrows.png) + +Toggled by holding down the space key with the right thumb. This isn't vim like movement, nope, it's `WASD` but over one column. So I guess it's actually `ESDF` on the left hand and `IJKL` on the right hand to better line up with the columns offset/staggered columns on the Dox. + +## Numpad Layer + +![Numpad](https://meagerfindings.com/assets/img/ergodox/numpad.png) + +My right hand is pretty comfortable with tenkey number input so this is easily accessible by holding down backspace with the left thumb. + +Also, on the left hand, there is a tap to copy and hold to cut macro under the `D` key, and a tap to paste and a hold to paste special macro on the `F` key. I guess I'm to too lazy to move my fingers when copying/pasting... diff --git a/layouts/community/ergodox/meagerfindings/config.h b/layouts/community/ergodox/meagerfindings/config.h new file mode 100644 index 0000000000..3d4f11b43a --- /dev/null +++ b/layouts/community/ergodox/meagerfindings/config.h @@ -0,0 +1,26 @@ +#undef VENDOR_ID +#define VENDOR_ID 0xFEED +#undef PRODUCT_ID +#define PRODUCT_ID 0x1307 +#undef DEVICE_VER +#define DEVICE_VER 0x0001 +#undef MANUFACTURER +#define MANUFACTURER meagerfindings +#undef PRODUCT +#define PRODUCT ErgoDox +#undef DESCRIPTION +#define DESCRIPTION meagerfindings firmware for Ergodox + +#define USB_MAX_POWER_CONSUMPTION 500 + +#undef MOUSEKEY_INTERVAL +#define MOUSEKEY_INTERVAL 20 +#undef MOUSEKEY_DELAY +#define MOUSEKEY_DELAY 0 +#undef MOUSEKEY_TIME_TO_MAX +#define MOUSEKEY_TIME_TO_MAX 18 +#undef MOUSEKEY_MAX_SPEED +#define MOUSEKEY_MAX_SPEED 4 + +#undef TAPPING_TERM +#define TAPPING_TERM 200 diff --git a/layouts/community/ergodox/meagerfindings/keymap.c b/layouts/community/ergodox/meagerfindings/keymap.c new file mode 100644 index 0000000000..62504f9667 --- /dev/null +++ b/layouts/community/ergodox/meagerfindings/keymap.c @@ -0,0 +1,558 @@ +#include QMK_KEYBOARD_H +#include "version.h" + +enum { + BASE = 0, + OLD_BASE, + SYMBL, + MEDIA, + MKDWN, + ARROWS, + NUM, +}; + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + EPRM, + VRSN, + MD_LINK, + XKCD, + DBLE_ZER0, + L_ID_0, + L_ID_1, + L_ID_2, + PAST_PS, + TODO, + RUBYMINE, + ZENDESK, + DBLE_ASTR, + TRPLE_GRAVE, + H_ONE, + H_TWO, + H_THREE, + H_FOUR, + H_FIVE, + M_LINK, + M_GREATER, + TD_COPY_CUT = 6, + TD_SNAGIT = 8, + TD_B_L_SEL = 10, + CT_LBP = 11, + CT_RBP = 12 +}; + +//Redefine Key Names for Readaibilty +#define XXXXXXX KC_NO +#define SCRN_CLIPB LCTL(LGUI(LSFT(KC_4))) +#define CHRM_L LALT(LGUI(KC_LEFT)) //Move left one tab in Chrome +#define CHRM_R LALT(LGUI(KC_RIGHT)) //Move right one tab in Chrome +#define S_CMD_S LGUI_T(KC_S) //`S` when typing `CMD` when held +#define D_CMD_OPT LGUI_T(LALT_T(KC_D)) //`D` when typing `CMD + Opt` when held + +static uint16_t key_timer; //key timer for macros + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for Copy, twice for Paste, three times for Cut. + [TD_COPY_CUT] = ACTION_TAP_DANCE_DOUBLE(LGUI(KC_C),LGUI(KC_X)), + //Tap once for Snagit, twice for Cmd + Shift + Opt + 4 (OS X cropping screenshot that is copied to the clipboard only.) + [TD_SNAGIT] = ACTION_TAP_DANCE_DOUBLE(LCTL(LSFT(KC_C)), LCTL(LGUI(LSFT(KC_4)))), + [CT_LBP] = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, KC_LPRN), + [CT_RBP] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, KC_RPRN) +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Keymap 0: Basic layer + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | "> " | | []() | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | SCRN |------+------+------+------+------+--------| + * | Hyper | A |S /CMD|D/OPT | F /MD| G |------| |------| H | J |K/OPT |L /CMD| ; /L2| '/Hyper| + * |--------+------+------+------+------+------| ( | | ) |------+------+------+------+------+--------| + * |Shft Tab|Z/Ctrl|X/Alt | C | V | B | [ { | | ] } | N | M | , | ./Alt|//Ctrl|CMD+SHFT| + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | ` |Zendsk|RBMINE|CMD+S | ToDo | | _ | | 00 | 00 |OLD BASE| + * `----------------------------------' `----------------------------------' + * ,-------------. ,--------------. + * | Esc | Home | |Layer?| Esc | + * ,------|------|------| |------+-------+------. + * | | | End | | Undo | | | + * |Shift |Backsp|------| |------| Return|Space/| + * | OSM | /NUM | DEL | | Ctrl | /SYML |Arrows| + * `--------------------' `---------------------' + * + *Copy/Cut key copies on tap, cut's on two taps. + * + *One tap on Snagit key = is Ctrl + Shift + C which is Snagit's selector. + *Two taps on Snagit key = Cmd + Shift + Opt + 4 (OS X cropping screenshot that is copied to the clipboard only.) + */ + + [BASE] = LAYOUT_ergodox( + //left hand + KC_EQUAL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, M_GREATER, + OSM(MOD_HYPR), KC_A, S_CMD_S, ALT_T(KC_D), LT(MKDWN,KC_F), KC_G, + LSFT(KC_TAB), CTL_T(KC_Z), ALT_T(KC_X), KC_C, KC_V, KC_B, TD(CT_LBP), + KC_GRAVE, ZENDESK, RUBYMINE, LGUI(KC_S), TODO, + KC_ESCAPE, KC_HOME, + KC_END, + OSM(MOD_LSFT), LT(NUM,KC_BSPACE), LT(MKDWN,KC_DELETE), + + //right hand + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINUS, + MD_LINK, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, + KC_H, KC_J, ALT_T(KC_K), LGUI_T(KC_L), LT(MEDIA,KC_SCOLON), ALL_T(KC_QUOTE), + TD(CT_RBP), KC_N, KC_M, KC_COMMA, ALT_T(KC_DOT), CTL_T(KC_SLASH), SCMD_T(_______), + LSFT(KC_MINUS), _______, DBLE_ZER0, DBLE_ZER0, TO(OLD_BASE), + L_ID_0, KC_ESCAPE, + LGUI(KC_Z), + LT(MEDIA,KC_LCTL), LT(SYMBL,KC_ENTER), LT(ARROWS,KC_SPACE)), + + /* Keymap 1: OLD Base layer + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | []() | |Snagit| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | "> " | | []() | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | SCRN |------+------+------+------+------+--------| + * | Hyper | A |S /CMD| D | F | G |------| |------| H | J | K |L /CMD| ; /L2| '/Hyper| + * |--------+------+------+------+------+------| ( | | ) |------+------+------+------+------+--------| + * |Shft Tab|Z/Ctrl|X/Alt | C | V | B | [ { | | ] } | N | M | , | ./Alt|//Ctrl|CMD+SHFT| + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | ` |Zendsk|RBMINE|CMD+S | ToDo | | _ | | 00 | 00 |ToBase| + * `----------------------------------' `----------------------------------' + * ,-------------. ,--------------. + * | Esc | Home | |Layer?| Esc | + * ,------|------|------| |------+-------+------. + * | | | End | | Undo | | | + * |Shift |Backsp|------| |------| Return|Space/| + * | OSM | /L5 | DEL | | Ctrl | /LT1 |Arrows| + * `--------------------' `---------------------' + * + *Copy/Cut key copies on tap, cut's on two taps. + * + *One tap on Snagit key = is Ctrl + Shift + C which is Snagit's selector. + *Two taps on Snagit key = Cmd + Shift + Opt + 4 (OS X cropping screenshot that is copied to the clipboard only.) + */ + + [OLD_BASE] = LAYOUT_ergodox( + //left hand + KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, M_LINK, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, M_GREATER, + OSM(MOD_HYPR), KC_A, S_CMD_S, D_CMD_OPT, LT(MKDWN,KC_F),KC_G, + LSFT(KC_TAB), CTL_T(KC_Z), ALT_T(KC_X), KC_C, KC_V, KC_B, TD(CT_LBP), + KC_GRAVE, ZENDESK, RUBYMINE, LGUI(KC_S), TODO, + KC_ESCAPE, KC_HOME, + KC_END, + OSM(MOD_LSFT), LT(NUM,KC_BSPACE), LT(MKDWN,KC_DELETE), + + //right hand + TD(TD_SNAGIT), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + MD_LINK, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, + KC_H, KC_J, KC_K, LGUI_T(KC_L), LT(MEDIA,KC_SCOLON), ALL_T(KC_QUOTE), + TD(CT_RBP), KC_N, KC_M, KC_COMMA, ALT_T(KC_DOT), CTL_T(KC_SLASH), SCMD_T(_______), + LSFT(KC_MINUS), _______, DBLE_ZER0, DBLE_ZER0, TO(BASE), + L_ID_0, KC_ESCAPE, + LGUI(KC_Z), + LT(MEDIA,KC_LCTL), LT(SYMBL,KC_ENTER), LT(ARROWS,KC_SPACE)), + + /* Keymap 2: Symbol + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | []() | |Snagit| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | $ | & | ` | | | Cmd | | | | | * | | | | + * |--------+------+------+------+------+------| + K | | |------+------+------+------+------+--------| + * | | # | $ | & | ! | @ |------| |------| - | [ | ] | ( | ) | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | | | ~ | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | |Layer?| | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + // SYMBOLS + [SYMBL] = LAYOUT_ergodox( + //left hand + _______, KC_1, KC_2, KC_3, KC_4, KC_5, M_LINK, + _______, _______, KC_DLR, KC_AMPR, KC_GRAVE, KC_PIPE, LGUI(KC_K), + _______, KC_HASH, KC_DLR, KC_AMPR, KC_EXLM, KC_AT, + _______, KC_PERC, KC_CIRC, _______, _______, KC_TILD, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______, + + //right hand + TD(TD_SNAGIT), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + _______, _______, _______, KC_PAST, _______, _______, _______, + KC_MINUS, KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + L_ID_1, _______, + _______, + _______, _______, _______), + + /* Keymap 3: Media and mouse keys + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | XKCD | | | | | | F15 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | |Whl Up| MsUp |Whl Dn| | | | | | | | | | F14 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |Ctl L |MsLeft|MsDown|MsRght| Ctl R|------| |------| | Mute | VolDn| VolUp| TL 2 | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |WHL L | |Whl R | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | Mute | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | |LAYER?| | + * ,------|------|------| |------+------+------. + * | Left |Right | | | |Copy/ | paste| + * | Click|Click |------| |------| cut |/paste| + * | | | | | | |spcial| + * `--------------------' `--------------------' + */ + // MEDIA AND MOUSE + + [MEDIA] = LAYOUT_ergodox( + //left hand + _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_MS_WH_UP, KC_MS_UP, KC_MS_WH_DOWN, _______, _______, + _______, LCTL(KC_LEFT), KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, RCTL(KC_RIGHT), + XXXXXXX, _______, KC_MS_WH_LEFT, _______, KC_MS_WH_RIGHT, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + KC_MS_BTN1, KC_MS_BTN2, _______, + + //right hand + XKCD, _______, _______, _______, _______, _______, KC_F15, + _______, _______, _______, _______, _______, _______, KC_F14, + _______, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, _______, KC_MEDIA_PLAY_PAUSE, + _______, _______, _______, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, _______, XXXXXXX, + _______, _______, _______, _______, _______, + L_ID_2, _______, + _______, + _______, TD(TD_COPY_CUT), PAST_PS), + + /* Keymap 4: Markdown Symbols + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | |SCRNCL| | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | ``` | ** | _ | ` | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | TL MD| |------| |------| - | [ | ] | ( | ) | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | # | ## | ### | #### | #####| | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | |Layer?| | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + * Sc cp = OS X cropping screenshot that is copied to the clipboard only. + */ + // Markdown Layer + [MKDWN] = LAYOUT_ergodox( + //left hand + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______, + + //right hand + SCRN_CLIPB, _______, _______, _______, _______, _______, _______, + _______, _______, TRPLE_GRAVE, DBLE_ASTR,LSFT(KC_MINUS), KC_GRAVE, _______, + KC_MINUS, KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, _______, + _______, H_ONE, H_TWO, H_THREE, H_FOUR, H_FIVE, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______), + + /* Keymap 5: Arrows + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | RESET | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | Opt+L| Up |Opt+R | | | | | | Opt+L| Up |Opt+R | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |Ctrl+L| Left | Dn | Right|Ctrl+R|------| |------|Ctrl+L| Left | Dn | Right|Ctrl+R| | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + * + * + * + */ + // Movement Layer + + [ARROWS] = LAYOUT_ergodox( + //left hand + RESET, _______, _______, _______, _______, _______, _______, + _______, _______, CHRM_L, KC_UP, CHRM_R, _______, _______, + _______,LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______, + //right hand + _______, _______, _______, _______, _______, _______, _______, + _______, _______, CHRM_L, KC_UP, CHRM_R, _______, _______, + LCTL(KC_LEFT), KC_LEFT, KC_DOWN, LGUI_T(KC_RIGHT), LCTL(KC_RIGHT), _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______), + + /* Keymap 6: Numpad + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | = | 7 | 8 | 9 | * | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | |Cp/Cut|paste | |------| |------| + | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | - | 1 | 2 | 3 | / | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | . | 00 | 00 | Enter| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | |Nupmad| | + * | | |------| |------|Enter | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + // Numpad Layer + [NUM] = LAYOUT_ergodox( + //left hand + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, TD(TD_COPY_CUT), PAST_PS, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, + _______, + _______, _______, _______, + + //right hand + _______, _______, _______, _______, _______, _______, _______, + _______, KC_EQUAL, KC_7, KC_8, KC_9, KC_ASTR, _______, + KC_PLUS, KC_4, KC_5, KC_6, KC_PLUS, _______, + _______, KC_MINUS, KC_1, KC_2, KC_3, KC_KP_SLASH, _______, + KC_KP_0, KC_DOT, DBLE_ZER0, DBLE_ZER0, KC_KP_ENTER, + _______, _______, + _______, + _______, KC_PENT, _______), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + switch (keycode) { + case EPRM: + if (record->event.pressed) { + eeconfig_init(); + } + return false; + break; + + case VRSN: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + return false; + break; + + case MD_LINK: + if (record->event.pressed){ + key_timer = timer_read(); + } else { + if (timer_elapsed(key_timer) > 150) { + SEND_STRING ("([Video]("); + } else { + SEND_STRING ("([Screenshot]("); + } + SEND_STRING(SS_LGUI("v")); + SEND_STRING("))"); + } + break; + + case XKCD: + if (record->event.pressed) { + SEND_STRING ("https://xkcd.com/1319/"); + } + break; + + case DBLE_ZER0: + if (record->event.pressed){ + SEND_STRING ("00"); + } + break; + + case DBLE_ASTR: + if (record->event.pressed){ + SEND_STRING ("**"); + SEND_STRING ("**"); + SEND_STRING (SS_TAP(X_LEFT)); + SEND_STRING (SS_TAP(X_LEFT)); + } + break; + + case TRPLE_GRAVE: + if (record->event.pressed){ + SEND_STRING ("```"); + } + break; + + case L_ID_0: + if (record->event.pressed) { + SEND_STRING (SS_LGUI(" ")); + SEND_STRING ("Layer 0: Base"); + } + break; + + case L_ID_1: + if (record->event.pressed) { + SEND_STRING (SS_LGUI(" ")); + SEND_STRING ("Layer 1: Symbols"); + } + break; + + case L_ID_2: + if (record->event.pressed) { + SEND_STRING (SS_LGUI(" ")); + SEND_STRING ("Layer 2: Media & Mousekeys"); + } + break; + + case PAST_PS: + if (record->event.pressed) { + key_timer = timer_read(); + } else { + if (timer_elapsed(key_timer) > 150) { + SEND_STRING (SS_LGUI("V")); // Paste special + } else { + SEND_STRING (SS_LGUI("v")); // Paste + } + } + break; + + case TODO: + if (record->event.pressed) { + key_timer = timer_read(); + } else { + if (timer_elapsed(key_timer) > 150) { //switch to Todoist when held and released + SEND_STRING (SS_LGUI(" ")); + SEND_STRING ("Todoist"); + SEND_STRING (SS_TAP(X_ENTER)); + } else { + SEND_STRING (SS_LGUI(SS_LCTRL("a"))); //macro to open Todoist new task dialog + } + } + break; + + case RUBYMINE: + if (record->event.pressed){ + SEND_STRING (SS_LGUI(" ")); + SEND_STRING ("RUBYMINE"); + SEND_STRING (SS_TAP(X_ENTER)); + } + break; + + case ZENDESK: + if (record->event.pressed){ + SEND_STRING (SS_LGUI(" ")); + SEND_STRING ("||ZEN"); + SEND_STRING (SS_TAP(X_ENTER)); + } + break; + + case H_ONE: + if (record->event.pressed){ + SEND_STRING ("# "); + } + break; + + case H_TWO: + if (record->event.pressed){ + SEND_STRING ("## "); + } + break; + + case H_THREE: + if (record->event.pressed){ + SEND_STRING ("### "); + } + break; + + case H_FOUR: + if (record->event.pressed){ + SEND_STRING ("#### "); + } + break; + + case H_FIVE: + if (record->event.pressed){ + SEND_STRING ("##### "); + } + break; + case M_LINK: + if (record->event.pressed){ + SEND_STRING ("[]()"); + } + break; + case M_GREATER: + if (record->event.pressed){ + SEND_STRING ("> "); + } + break; + } + return true; +}; + +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + break; + } +}; diff --git a/layouts/community/ergodox/meagerfindings/rules.mk b/layouts/community/ergodox/meagerfindings/rules.mk new file mode 100644 index 0000000000..c775e1f6d6 --- /dev/null +++ b/layouts/community/ergodox/meagerfindings/rules.mk @@ -0,0 +1,3 @@ +COMMAND_ENABLE = no +TAP_DANCE_ENABLE = yes +FORCE_NKRO = yes From 77433b1a3140411b8b8f1b0389827c38384fc5fe Mon Sep 17 00:00:00 2001 From: itsdrdick Date: Thu, 20 Sep 2018 07:16:18 +0800 Subject: [PATCH 005/269] Keyboard: Add evil80 keyboard (#3921) * Add evil80 keyboard * Delete rules.mk * Update config.h * Update keymap.c * Update keymap.c --- keyboards/evil80/config.h | 64 +++++++++++++++++++++ keyboards/evil80/evil80.c | 47 ++++++++++++++++ keyboards/evil80/evil80.h | 23 ++++++++ keyboards/evil80/info.json | 13 +++++ keyboards/evil80/keymaps/default/keymap.c | 31 +++++++++++ keyboards/evil80/rules.mk | 68 +++++++++++++++++++++++ 6 files changed, 246 insertions(+) create mode 100644 keyboards/evil80/config.h create mode 100644 keyboards/evil80/evil80.c create mode 100644 keyboards/evil80/evil80.h create mode 100644 keyboards/evil80/info.json create mode 100644 keyboards/evil80/keymaps/default/keymap.c create mode 100644 keyboards/evil80/rules.mk diff --git a/keyboards/evil80/config.h b/keyboards/evil80/config.h new file mode 100644 index 0000000000..81138a7703 --- /dev/null +++ b/keyboards/evil80/config.h @@ -0,0 +1,64 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Evil +#define PRODUCT Evil80 +#define DESCRIPTION QMK keyboard firmware for Evil80 + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 16 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { F1, F4, F5, F0, B3, B0 } +#define MATRIX_COL_PINS { B2, D0, D1, D2, D3, D5, D4, D6, D7, B4, B1, C6, C7, E6, F6, F7 } +#define UNUSED_PINS + +#define BACKLIGHT_PIN B5 +#define BACKLIGHT_BREATHING + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION diff --git a/keyboards/evil80/evil80.c b/keyboards/evil80/evil80.c new file mode 100644 index 0000000000..d4653d049b --- /dev/null +++ b/keyboards/evil80/evil80.c @@ -0,0 +1,47 @@ +#include "evil80.h" +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + led_init_ports(); + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_init_ports(void) { + DDRB |= (1<<6) | (1<<7); // OUT +} + +void led_set_kb(uint8_t usb_led) { + if (usb_led & (1<", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}] + } + } +} \ No newline at end of file diff --git a/keyboards/evil80/keymaps/default/keymap.c b/keyboards/evil80/keymaps/default/keymap.c new file mode 100644 index 0000000000..1706517a25 --- /dev/null +++ b/keyboards/evil80/keymaps/default/keymap.c @@ -0,0 +1,31 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: Winkey */ + LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS,\ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP,\ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN,\ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH,KC_RSFT, MO(2), KC_UP, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \ + ), + /* 1: Winkeyless */ + LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS,\ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP,\ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN,\ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH,KC_RSFT, MO(2), KC_UP, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_NO,KC_RALT,KC_RGUI,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \ + ), + /* 2: Fn */ + LAYOUT( + KC_TRNS, BL_ON, BL_OFF,BL_STEP,BL_BRTG,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,\ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS \ + ), +}; diff --git a/keyboards/evil80/rules.mk b/keyboards/evil80/rules.mk new file mode 100644 index 0000000000..1067b43445 --- /dev/null +++ b/keyboards/evil80/rules.mk @@ -0,0 +1,68 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +API_SYSEX_ENABLE = no + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend From 334e2629df4adb44b0ac0dff3363a6daebc072e7 Mon Sep 17 00:00:00 2001 From: Anthony Wharton Date: Thu, 20 Sep 2018 00:18:15 +0100 Subject: [PATCH 006/269] Remove redefinition of `_______` in documentation example (#3924) * Remove redefinition of `_______` in documentation example * Slight rewording to include purpose of defintions * Update include to newer macro --- docs/keymap.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/keymap.md b/docs/keymap.md index b28d21a21d..382a0e911b 100644 --- a/docs/keymap.md +++ b/docs/keymap.md @@ -89,11 +89,15 @@ There are 3 main sections of a `keymap.c` file you'll want to concern yourself w At the top of the file you'll find this: - #include "clueboard.h" + #include QMK_KEYBOARD_H // Helpful defines #define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)) - #define _______ KC_TRNS + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * You can use _______ in place for KC_TRNS (transparent) * + * Or you can use XXXXXXX for KC_NO (NOOP) * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ // Each layer gets a name for readability. // The underscores don't mean anything - you can @@ -105,7 +109,9 @@ At the top of the file you'll find this: #define _FL 1 #define _CL 2 -These are some handy definitions we can use when building our keymap and our custom function. The `GRAVE_MODS` definition will be used later in our custom function. The `_______` define makes it easier to see what keys a layer is overriding, while the `_BL`, `_FL`, and `_CL` defines make it easier to refer to each of our layers. +These are some handy definitions we can use when building our keymap and our custom function. The `GRAVE_MODS` definition will be used later in our custom function, and the following `_BL`, `_FL`, and `_CL` defines make it easier to refer to each of our layers. + +Note: You may also find some older keymap files may also have a define(s) for `_______` and/or `XXXXXXX`. These can be used in place for `KC_TRNS` and `KC_NO` respectively, making it easier to see what keys a layer is overriding. These definitions are now unecessary, as they are included by default. ### Layers and Keymaps From 2bdeccd7baab67df2d0c04c1c8167277f7217d3e Mon Sep 17 00:00:00 2001 From: holtenc Date: Wed, 19 Sep 2018 18:20:36 -0500 Subject: [PATCH 007/269] Keyboard: Add Prime_EXL prototype to 'handwired' (#3932) * initial commit * Update readme.md * Update keymap.c added comment for description of function to control LED as layer indicator * corrected formatting as requested. * format for configurator * corrected info.json to propertly reflect layout in Configurator * updated layouts to reflect physical keyboard --- keyboards/handwired/prime_exl/config.h | 56 +++++++ keyboards/handwired/prime_exl/info.json | 12 ++ .../prime_exl/keymaps/default/config.h | 19 +++ .../prime_exl/keymaps/default/keymap.c | 143 ++++++++++++++++++ .../prime_exl/keymaps/default/readme.md | 1 + keyboards/handwired/prime_exl/prime_exl.c | 43 ++++++ keyboards/handwired/prime_exl/prime_exl.h | 40 +++++ keyboards/handwired/prime_exl/readme.md | 15 ++ keyboards/handwired/prime_exl/rules.mk | 80 ++++++++++ 9 files changed, 409 insertions(+) create mode 100644 keyboards/handwired/prime_exl/config.h create mode 100644 keyboards/handwired/prime_exl/info.json create mode 100644 keyboards/handwired/prime_exl/keymaps/default/config.h create mode 100644 keyboards/handwired/prime_exl/keymaps/default/keymap.c create mode 100644 keyboards/handwired/prime_exl/keymaps/default/readme.md create mode 100644 keyboards/handwired/prime_exl/prime_exl.c create mode 100644 keyboards/handwired/prime_exl/prime_exl.h create mode 100644 keyboards/handwired/prime_exl/readme.md create mode 100644 keyboards/handwired/prime_exl/rules.mk diff --git a/keyboards/handwired/prime_exl/config.h b/keyboards/handwired/prime_exl/config.h new file mode 100644 index 0000000000..e34fbb8ccc --- /dev/null +++ b/keyboards/handwired/prime_exl/config.h @@ -0,0 +1,56 @@ +/* +Copyright 2018 Holten Campbell + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x4024 +#define DEVICE_VER 0x0001 +#define MANUFACTURER PrimeKB +#define PRODUCT Prime_EXL +#define DESCRIPTION Ergo + +/* key matrix size */ +#define MATRIX_ROWS 10 +#define MATRIX_COLS 9 + +/* Keyboard Matrix Assignments */ +#define MATRIX_ROW_PINS { B1, E6, D5, D6, B4, D7, D4, F1, F0, B0 } +#define MATRIX_COL_PINS { D0, B3, B2, D1, D2, D3, F7, F6, F5 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_LEVELS 5 + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) diff --git a/keyboards/handwired/prime_exl/info.json b/keyboards/handwired/prime_exl/info.json new file mode 100644 index 0000000000..edab788607 --- /dev/null +++ b/keyboards/handwired/prime_exl/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Prime_EXL", + "url": "https://www.primekb.com", + "maintainer": "holtenc", + "width": 18, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"x":0,"y":0,"w":1,"h":1}, {"x":1,"y":0,"w":1,"h":1}, {"x":2,"y":0,"w":1,"h":1}, {"x":3,"y":0,"w":1,"h":1}, {"x":4,"y":0,"w":1,"h":1}, {"x":5,"y":0,"w":1,"h":1}, {"x":6.5,"y":0,"w":1,"h":1}, {"x":7.5,"y":0,"w":1,"h":1}, {"x":8.5,"y":0,"w":1,"h":1}, {"x":9.5,"y":0,"w":1,"h":1}, {"x":10.5,"y":0,"w":1,"h":1}, {"x":11.5,"y":0,"w":1,"h":1}, {"x":13.75,"y":0,"w":1,"h":1}, {"x":14.75,"y":0,"w":1,"h":1}, {"x":15.75,"y":0,"w":1,"h":1}, {"x":16.75,"y":0,"w":1,"h":1}, {"x":17.75,"y":0,"w":1,"h":1}, {"x":18.75,"y":0,"w":2,"h":1}, {"x":0,"y":1,"w":1,"h":1}, {"x":1,"y":1,"w":1,"h":1}, {"x":2,"y":1,"w":1,"h":1}, {"x":3,"y":1,"w":1,"h":1}, {"x":4,"y":1,"w":1,"h":1}, {"x":5,"y":1,"w":1,"h":1}, {"x":6.5,"y":1,"w":1.26,"h":1}, {"x":7.75,"y":1,"w":1,"h":1}, {"x":8.75,"y":1,"w":1,"h":1}, {"x":9.75,"y":1,"w":1,"h":1}, {"x":10.75,"y":1,"w":1,"h":1}, {"x":11.75,"y":1,"w":1,"h":1}, {"x":14,"y":1,"w":1,"h":1}, {"x":15,"y":1,"w":1,"h":1}, {"x":16,"y":1,"w":1,"h":1}, {"x":17,"y":1,"w":1,"h":1}, {"x":18,"y":1,"w":1,"h":1}, {"x":19,"y":1,"w":1.75,"h":1}, {"x":0,"y":2,"w":1,"h":1}, {"x":1,"y":2,"w":1,"h":1}, {"x":2,"y":2,"w":1,"h":1}, {"x":3,"y":2,"w":1,"h":1}, {"x":4,"y":2,"w":1,"h":1}, {"x":5,"y":2,"w":1,"h":1}, {"x":6.5,"y":2,"w":1.75,"h":1}, {"x":8.25,"y":2,"w":1,"h":1}, {"x":9.25,"y":2,"w":1,"h":1}, {"x":10.25,"y":2,"w":1,"h":1}, {"x":11.25,"y":2,"w":1,"h":1}, {"x":12.25,"y":2,"w":1,"h":1}, {"x":13.5,"y":2,"w":1,"h":1}, {"x":14.5,"y":2,"w":1,"h":1}, {"x":15.5,"y":2,"w":1,"h":1}, {"x":16.5,"y":2,"w":1,"h":1}, {"x":17.5,"y":2,"w":1,"h":1}, {"x":18.5,"y":2,"w":1,"h":1}, {"x":19.5,"y":2,"w":1.25,"h":1}, {"x":0,"y":3,"w":1,"h":1}, {"x":1,"y":3,"w":1,"h":1}, {"x":2,"y":3,"w":1,"h":1}, {"x":3,"y":3,"w":1,"h":1}, {"x":4,"y":3,"w":1,"h":1}, {"x":5,"y":3,"w":1,"h":1}, {"x":6.5,"y":3,"w":1.25,"h":1}, {"x":7.75,"y":3,"w":1.25,"h":1}, {"x":9,"y":3,"w":1,"h":1}, {"x":10,"y":3,"w":1,"h":1}, {"x":11,"y":3,"w":2,"h":1}, {"x":13.5,"y":3,"w":2,"h":1}, {"x":15.5,"y":3,"w":1,"h":1}, {"x":16.5,"y":3,"w":1,"h":1}, {"x":17.5,"y":3,"w":1.5,"h":1}, {"x":19,"y":3,"w":1.5,"h":1}, {"x":0,"y":4,"w":1,"h":1}, {"x":1,"y":4,"w":1,"h":1}, {"x":2,"y":4,"w":1,"h":1}, {"x":3,"y":4,"w":1,"h":1}, {"x":4,"y":4,"w":1,"h":1}, {"x":5,"y":4,"w":1,"h":1}] + } + } +} diff --git a/keyboards/handwired/prime_exl/keymaps/default/config.h b/keyboards/handwired/prime_exl/keymaps/default/config.h new file mode 100644 index 0000000000..83bd38a81d --- /dev/null +++ b/keyboards/handwired/prime_exl/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 Holten Campbell + * + * 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 + +// place overrides here diff --git a/keyboards/handwired/prime_exl/keymaps/default/keymap.c b/keyboards/handwired/prime_exl/keymaps/default/keymap.c new file mode 100644 index 0000000000..0e1c60d4aa --- /dev/null +++ b/keyboards/handwired/prime_exl/keymaps/default/keymap.c @@ -0,0 +1,143 @@ +/* Copyright 2018 Holten Campbell + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_NLCK, KC_LPRN, KC_RPRN, KC_PSLS, KC_PAST, KC_BSPC, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_F1, KC_F2, KC_P7, KC_P8, KC_P9, KC_DEL, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, + KC_F3, KC_F4, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(3), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, + KC_F5, KC_F6, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_LCTL, KC_LALT, KC_LBRC, KC_RBRC, MO(1), KC_SPC, KC_MINS, KC_EQL, KC_LGUI, MO(4), + KC_F7, KC_F8, TO(2), KC_PDOT, KC_P0, KC_PENT + ), + + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_DEL, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_SCLN, KC_BSLS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, + BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [2] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_F9, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(3), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCTL, KC_LALT, KC_LBRC, KC_RBRC, MO(5), KC_SPC, KC_MINS, KC_EQL, KC_LGUI, MO(4), + KC_LCTL, KC_LALT, TO(0), KC_P, KC_H, KC_SPC + ), + + [3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [4] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [5] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_DEL, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_SCLN, KC_BSLS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, + BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + // set CapsLock LED to output and low + DDRC |= (1 << 6); + PORTC &= ~(1 << 6); + // set NumLock LED to output and low + DDRB |= (1 << 6); + PORTB &= ~(1 << 6); + // set ScrollLock LED to output and low + DDRB |= (1 << 5); + PORTB &= ~(1 << 5); +} + +void matrix_scan_user(void) { + +} + + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1<. + */ +#include "prime_exl.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/handwired/prime_exl/prime_exl.h b/keyboards/handwired/prime_exl/prime_exl.h new file mode 100644 index 0000000000..727db5db8d --- /dev/null +++ b/keyboards/handwired/prime_exl/prime_exl.h @@ -0,0 +1,40 @@ +/* Copyright 2018 Holten Campbell + * + * 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 . + */ +#ifndef PRIME_EXL_H +#define PRIME_EXL_H + +#include "quantum.h" + +#define LAYOUT( \ + K040, K050, K041, K051, K042, K052, K043, K053, K044, K054, K045, K055, K046, K056, K047, K057, K048, K058, \ + K030, K060, K031, K061, K032, K062, K033, K063, K034, K064, K035, K065, K036, K066, K037, K067, K038, K068, \ + K020, K070, K021, K071, K022, K072, K023, K073, K024, K074, K025, K075, K085, K026, K076, K027, K077, K028, K078, \ + K010, K080, K011, K081, K012, K082, K013, K083, K014, K084, K015, K016, K086, K017, K087, K018, \ + K000, K090, K001, K091, K002, K092 \ +) { \ + { K000, K001, K002, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { K010, K011, K012, K013, K014, K015, K016, K017, K018 }, \ + { K020, K021, K022, K023, K024, K025, K026, K027, K028 }, \ + { K030, K031, K032, K033, K034, K035, K036, K037, K038 }, \ + { K040, K041, K042, K043, K044, K045, K046, K047, K048 }, \ + { K050, K051, K052, K053, K054, K055, K056, K057, K058 }, \ + { K060, K061, K062, K063, K064, K065, K066, K067, K068 }, \ + { K070, K071, K072, K073, K074, K075, K076, K077, K078 }, \ + { K080, K081, K082, K083, K084, K085, K086, K087, KC_NO }, \ + { K090, K091, K092, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ +} + +#endif \ No newline at end of file diff --git a/keyboards/handwired/prime_exl/readme.md b/keyboards/handwired/prime_exl/readme.md new file mode 100644 index 0000000000..f99cba004d --- /dev/null +++ b/keyboards/handwired/prime_exl/readme.md @@ -0,0 +1,15 @@ +# Prime_EXL + +![Prime_EXL](https://i.imgur.com/3t524g8.jpg) + +An ergonomic 45% keyboard with a macro/numpad added to the left side. + +Keyboard Maintainer: [Holtenc](https://github.com/holtenc/) +Hardware Supported: Prime_EXL PCB, ATMega32u4 +Hardware Availability: Prototype + +Make example for this keyboard (after setting up your build environment): + + make handwired/prime_exl:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/handwired/prime_exl/rules.mk b/keyboards/handwired/prime_exl/rules.mk new file mode 100644 index 0000000000..5cce4e8113 --- /dev/null +++ b/keyboards/handwired/prime_exl/rules.mk @@ -0,0 +1,80 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) From 14be5258a6784829b6931f348fc20d64e1a5f2a7 Mon Sep 17 00:00:00 2001 From: Rys Sommefeldt Date: Thu, 20 Sep 2018 00:23:23 +0100 Subject: [PATCH 008/269] Keymap: rys Tada68 ISO UK layout (#3934) * rys Tada68 ISO UK layout * Bring _FL more in line with my favoute WhiteFox layout * Whoops, fix - to _ * remove empty config.h * Remove legacy block --- keyboards/tada68/keymaps/rys/keymap.c | 50 ++++++++++++++++++++++++++ keyboards/tada68/keymaps/rys/readme.md | 15 ++++++++ keyboards/tada68/keymaps/rys/rules.mk | 17 +++++++++ 3 files changed, 82 insertions(+) create mode 100644 keyboards/tada68/keymaps/rys/keymap.c create mode 100644 keyboards/tada68/keymaps/rys/readme.md create mode 100644 keyboards/tada68/keymaps/rys/rules.mk diff --git a/keyboards/tada68/keymaps/rys/keymap.c b/keyboards/tada68/keymaps/rys/keymap.c new file mode 100644 index 0000000000..6f32b092d4 --- /dev/null +++ b/keyboards/tada68/keymaps/rys/keymap.c @@ -0,0 +1,50 @@ +#include QMK_KEYBOARD_H + +#define _BL 0 +#define _FL 1 + +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |Del | + * |------------------------------------------------------- -----| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Entr|PgUp| + * |----------------------------------------------------------------| + * |Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig | + * `----------------------------------------------------------------' + */ + [_BL] = LAYOUT_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUHS, KC_DEL, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Keymap _FL1: Function Layer 1 + * ,----------------------------------------------------------------. + * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Delete| Ins| + * |----------------------------------------------------------------| + * | | | ↑ | | | | | | | | | | | |Home| + * |------------------------------------------------------- -----| + * | | ← | ↓ | → | | | | | | | | | | | End| + * |----------------------------------------------------------------| + * | | | | | L+|LED| L-| | V+| V-|Mut| | MsBtn|Up|MsBn| + * |----------------------------------------------------------------| + * | | | | | | | | Lt| Dn| Rt | + * `----------------------------------------------------------------' + */ + [_FL] = LAYOUT_iso( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, \ + _______, KC_BTN1, KC_UP, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \ + _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______, KC_MS_U, KC_END, \ + _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R + ), +}; diff --git a/keyboards/tada68/keymaps/rys/readme.md b/keyboards/tada68/keymaps/rys/readme.md new file mode 100644 index 0000000000..a9425bf067 --- /dev/null +++ b/keyboards/tada68/keymaps/rys/readme.md @@ -0,0 +1,15 @@ +# Custom Tada68 layout for ISO UK with Apple-y tweaks + +This layout is based on the [ISO UK](../iso-uk) layout, with the following +changes: + +Swap Win and Alt on the left side (Option and Command on macOS) + +## Installation + +Please see the [Tada68 readme](../../readme.md). Make the firmware wih the +following command: + +``` +make tada68:rys:bin +``` diff --git a/keyboards/tada68/keymaps/rys/rules.mk b/keyboards/tada68/keymaps/rys/rules.mk new file mode 100644 index 0000000000..1915481bf9 --- /dev/null +++ b/keyboards/tada68/keymaps/rys/rules.mk @@ -0,0 +1,17 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend From 5b4bcfa7f2530ad12ef801101933aba6ac46acb2 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Wed, 19 Sep 2018 16:25:58 -0700 Subject: [PATCH 009/269] Keyboard: Move Bathroom Epiphany boards into its own directory (#3936) * make bpiphany directory with simple readme file * move unloved_bastard to bpiphany directory * move frosty_flake to bpiphany directory * move pegasushoof to bpiphany directory * move tiger_lily to bpiphany directory * add a little more info to readme * move kitten_paw to bpiphany directory * update make instructions * update intro text * add missing routines to matrix.c of unloved_bastard * add missing routines --- .../{ => bpiphany}/frosty_flake/config.h | 0 .../frosty_flake/frosty_flake.c | 0 .../frosty_flake/frosty_flake.h | 0 .../frosty_flake/keymaps/QFR_JM/config.h | 0 .../frosty_flake/keymaps/QFR_JM/keymap.c | 0 .../frosty_flake/keymaps/QFR_JM/readme.md | 0 .../frosty_flake/keymaps/QFR_JM/rules.mk | 0 .../frosty_flake/keymaps/default/config.h | 0 .../frosty_flake/keymaps/default/keymap.c | 0 .../frosty_flake/keymaps/default/readme.md | 0 .../frosty_flake/keymaps/default/rules.mk | 0 .../frosty_flake/keymaps/nikchi/config.h | 0 .../frosty_flake/keymaps/nikchi/keymap.c | 0 .../frosty_flake/keymaps/nikchi/readme.md | 0 .../frosty_flake/keymaps/nikchi/rules.mk | 0 .../keymaps/nikchi/variableTapDance.md | 0 .../frosty_flake/keymaps/tkl/config.h | 0 .../frosty_flake/keymaps/tkl/keymap.c | 0 .../frosty_flake/keymaps/tkl/readme.md | 0 .../frosty_flake/keymaps/tkl/rules.mk | 0 .../{ => bpiphany}/frosty_flake/matrix.c | 18 +++++++++++++++ .../{ => bpiphany}/frosty_flake/readme.md | 11 ++++------ .../{ => bpiphany}/frosty_flake/rules.mk | 0 keyboards/{ => bpiphany}/kitten_paw/config.h | 0 keyboards/{ => bpiphany}/kitten_paw/info.json | 0 .../kitten_paw/keymaps/default/keymap.c | 0 .../kitten_paw/keymaps/ickerwx/config.h | 0 .../kitten_paw/keymaps/ickerwx/keymap.c | 0 .../kitten_paw/keymaps/ickerwx/readme.md | 0 .../{ => bpiphany}/kitten_paw/kitten_paw.c | 0 .../{ => bpiphany}/kitten_paw/kitten_paw.h | 0 keyboards/{ => bpiphany}/kitten_paw/matrix.c | 22 +++++++++++++++++-- keyboards/{ => bpiphany}/kitten_paw/readme.md | 4 ++-- keyboards/{ => bpiphany}/kitten_paw/rules.mk | 0 keyboards/bpiphany/pegasushoof/README.md | 12 ++++++++++ keyboards/{ => bpiphany}/pegasushoof/config.h | 0 .../pegasushoof/keymaps/blowrak/keymap.c | 0 .../pegasushoof/keymaps/blowrak/rules.mk | 0 .../pegasushoof/keymaps/citadel/config.h | 0 .../pegasushoof/keymaps/citadel/keymap.c | 0 .../pegasushoof/keymaps/citadel/readme.md | 0 .../pegasushoof/keymaps/citadel/rules.mk | 0 .../pegasushoof/keymaps/default/keymap.c | 0 .../pegasushoof/keymaps/default/rules.mk | 0 keyboards/{ => bpiphany}/pegasushoof/matrix.c | 18 +++++++++++++++ .../{ => bpiphany}/pegasushoof/pegasushoof.c | 0 .../{ => bpiphany}/pegasushoof/pegasushoof.h | 0 keyboards/{ => bpiphany}/pegasushoof/rules.mk | 0 keyboards/bpiphany/readme.md | 6 +++++ keyboards/{ => bpiphany}/tiger_lily/config.h | 0 keyboards/{ => bpiphany}/tiger_lily/info.json | 0 .../tiger_lily/keymaps/default/config.h | 0 .../tiger_lily/keymaps/default/keymap.c | 0 .../tiger_lily/keymaps/default/readme.md | 0 .../tiger_lily/keymaps/default/rules.mk | 0 .../tiger_lily/keymaps/default_ansi/config.h | 0 .../tiger_lily/keymaps/default_ansi/keymap.c | 0 .../tiger_lily/keymaps/default_ansi/readme.md | 0 .../tiger_lily/keymaps/default_ansi/rules.mk | 0 keyboards/{ => bpiphany}/tiger_lily/matrix.c | 20 ++++++++++++++++- keyboards/{ => bpiphany}/tiger_lily/readme.md | 4 ++-- keyboards/{ => bpiphany}/tiger_lily/rules.mk | 0 .../{ => bpiphany}/tiger_lily/tiger_lily.c | 0 .../{ => bpiphany}/tiger_lily/tiger_lily.h | 0 .../{ => bpiphany}/unloved_bastard/config.h | 0 .../{ => bpiphany}/unloved_bastard/info.json | 0 .../unloved_bastard/keymaps/default/config.h | 0 .../unloved_bastard/keymaps/default/keymap.c | 0 .../unloved_bastard/keymaps/default/readme.md | 0 .../keymaps/default_ansi/config.h | 0 .../keymaps/default_ansi/keymap.c | 0 .../keymaps/default_ansi/readme.md | 0 .../{ => bpiphany}/unloved_bastard/matrix.c | 18 +++++++++++++++ .../{ => bpiphany}/unloved_bastard/readme.md | 4 ++-- .../{ => bpiphany}/unloved_bastard/rules.mk | 0 .../unloved_bastard/unloved_bastard.c | 0 .../unloved_bastard/unloved_bastard.h | 0 keyboards/pegasushoof/README.md | 12 ---------- 78 files changed, 121 insertions(+), 28 deletions(-) rename keyboards/{ => bpiphany}/frosty_flake/config.h (100%) rename keyboards/{ => bpiphany}/frosty_flake/frosty_flake.c (100%) rename keyboards/{ => bpiphany}/frosty_flake/frosty_flake.h (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/QFR_JM/config.h (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/QFR_JM/keymap.c (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/QFR_JM/readme.md (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/QFR_JM/rules.mk (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/default/config.h (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/default/keymap.c (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/default/readme.md (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/default/rules.mk (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/nikchi/config.h (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/nikchi/keymap.c (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/nikchi/readme.md (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/nikchi/rules.mk (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/nikchi/variableTapDance.md (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/tkl/config.h (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/tkl/keymap.c (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/tkl/readme.md (100%) rename keyboards/{ => bpiphany}/frosty_flake/keymaps/tkl/rules.mk (100%) rename keyboards/{ => bpiphany}/frosty_flake/matrix.c (94%) rename keyboards/{ => bpiphany}/frosty_flake/readme.md (74%) rename keyboards/{ => bpiphany}/frosty_flake/rules.mk (100%) rename keyboards/{ => bpiphany}/kitten_paw/config.h (100%) rename keyboards/{ => bpiphany}/kitten_paw/info.json (100%) rename keyboards/{ => bpiphany}/kitten_paw/keymaps/default/keymap.c (100%) rename keyboards/{ => bpiphany}/kitten_paw/keymaps/ickerwx/config.h (100%) rename keyboards/{ => bpiphany}/kitten_paw/keymaps/ickerwx/keymap.c (100%) rename keyboards/{ => bpiphany}/kitten_paw/keymaps/ickerwx/readme.md (100%) rename keyboards/{ => bpiphany}/kitten_paw/kitten_paw.c (100%) rename keyboards/{ => bpiphany}/kitten_paw/kitten_paw.h (100%) rename keyboards/{ => bpiphany}/kitten_paw/matrix.c (94%) rename keyboards/{ => bpiphany}/kitten_paw/readme.md (65%) rename keyboards/{ => bpiphany}/kitten_paw/rules.mk (100%) create mode 100644 keyboards/bpiphany/pegasushoof/README.md rename keyboards/{ => bpiphany}/pegasushoof/config.h (100%) rename keyboards/{ => bpiphany}/pegasushoof/keymaps/blowrak/keymap.c (100%) rename keyboards/{ => bpiphany}/pegasushoof/keymaps/blowrak/rules.mk (100%) rename keyboards/{ => bpiphany}/pegasushoof/keymaps/citadel/config.h (100%) rename keyboards/{ => bpiphany}/pegasushoof/keymaps/citadel/keymap.c (100%) rename keyboards/{ => bpiphany}/pegasushoof/keymaps/citadel/readme.md (100%) rename keyboards/{ => bpiphany}/pegasushoof/keymaps/citadel/rules.mk (100%) rename keyboards/{ => bpiphany}/pegasushoof/keymaps/default/keymap.c (100%) rename keyboards/{ => bpiphany}/pegasushoof/keymaps/default/rules.mk (100%) rename keyboards/{ => bpiphany}/pegasushoof/matrix.c (94%) rename keyboards/{ => bpiphany}/pegasushoof/pegasushoof.c (100%) rename keyboards/{ => bpiphany}/pegasushoof/pegasushoof.h (100%) rename keyboards/{ => bpiphany}/pegasushoof/rules.mk (100%) create mode 100644 keyboards/bpiphany/readme.md rename keyboards/{ => bpiphany}/tiger_lily/config.h (100%) rename keyboards/{ => bpiphany}/tiger_lily/info.json (100%) rename keyboards/{ => bpiphany}/tiger_lily/keymaps/default/config.h (100%) rename keyboards/{ => bpiphany}/tiger_lily/keymaps/default/keymap.c (100%) rename keyboards/{ => bpiphany}/tiger_lily/keymaps/default/readme.md (100%) rename keyboards/{ => bpiphany}/tiger_lily/keymaps/default/rules.mk (100%) rename keyboards/{ => bpiphany}/tiger_lily/keymaps/default_ansi/config.h (100%) rename keyboards/{ => bpiphany}/tiger_lily/keymaps/default_ansi/keymap.c (100%) rename keyboards/{ => bpiphany}/tiger_lily/keymaps/default_ansi/readme.md (100%) rename keyboards/{ => bpiphany}/tiger_lily/keymaps/default_ansi/rules.mk (100%) rename keyboards/{ => bpiphany}/tiger_lily/matrix.c (94%) rename keyboards/{ => bpiphany}/tiger_lily/readme.md (72%) rename keyboards/{ => bpiphany}/tiger_lily/rules.mk (100%) rename keyboards/{ => bpiphany}/tiger_lily/tiger_lily.c (100%) rename keyboards/{ => bpiphany}/tiger_lily/tiger_lily.h (100%) rename keyboards/{ => bpiphany}/unloved_bastard/config.h (100%) rename keyboards/{ => bpiphany}/unloved_bastard/info.json (100%) rename keyboards/{ => bpiphany}/unloved_bastard/keymaps/default/config.h (100%) rename keyboards/{ => bpiphany}/unloved_bastard/keymaps/default/keymap.c (100%) rename keyboards/{ => bpiphany}/unloved_bastard/keymaps/default/readme.md (100%) rename keyboards/{ => bpiphany}/unloved_bastard/keymaps/default_ansi/config.h (100%) rename keyboards/{ => bpiphany}/unloved_bastard/keymaps/default_ansi/keymap.c (100%) rename keyboards/{ => bpiphany}/unloved_bastard/keymaps/default_ansi/readme.md (100%) rename keyboards/{ => bpiphany}/unloved_bastard/matrix.c (94%) rename keyboards/{ => bpiphany}/unloved_bastard/readme.md (56%) rename keyboards/{ => bpiphany}/unloved_bastard/rules.mk (100%) rename keyboards/{ => bpiphany}/unloved_bastard/unloved_bastard.c (100%) rename keyboards/{ => bpiphany}/unloved_bastard/unloved_bastard.h (100%) delete mode 100644 keyboards/pegasushoof/README.md diff --git a/keyboards/frosty_flake/config.h b/keyboards/bpiphany/frosty_flake/config.h similarity index 100% rename from keyboards/frosty_flake/config.h rename to keyboards/bpiphany/frosty_flake/config.h diff --git a/keyboards/frosty_flake/frosty_flake.c b/keyboards/bpiphany/frosty_flake/frosty_flake.c similarity index 100% rename from keyboards/frosty_flake/frosty_flake.c rename to keyboards/bpiphany/frosty_flake/frosty_flake.c diff --git a/keyboards/frosty_flake/frosty_flake.h b/keyboards/bpiphany/frosty_flake/frosty_flake.h similarity index 100% rename from keyboards/frosty_flake/frosty_flake.h rename to keyboards/bpiphany/frosty_flake/frosty_flake.h diff --git a/keyboards/frosty_flake/keymaps/QFR_JM/config.h b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h similarity index 100% rename from keyboards/frosty_flake/keymaps/QFR_JM/config.h rename to keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h diff --git a/keyboards/frosty_flake/keymaps/QFR_JM/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c similarity index 100% rename from keyboards/frosty_flake/keymaps/QFR_JM/keymap.c rename to keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c diff --git a/keyboards/frosty_flake/keymaps/QFR_JM/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md similarity index 100% rename from keyboards/frosty_flake/keymaps/QFR_JM/readme.md rename to keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md diff --git a/keyboards/frosty_flake/keymaps/QFR_JM/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk similarity index 100% rename from keyboards/frosty_flake/keymaps/QFR_JM/rules.mk rename to keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk diff --git a/keyboards/frosty_flake/keymaps/default/config.h b/keyboards/bpiphany/frosty_flake/keymaps/default/config.h similarity index 100% rename from keyboards/frosty_flake/keymaps/default/config.h rename to keyboards/bpiphany/frosty_flake/keymaps/default/config.h diff --git a/keyboards/frosty_flake/keymaps/default/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c similarity index 100% rename from keyboards/frosty_flake/keymaps/default/keymap.c rename to keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c diff --git a/keyboards/frosty_flake/keymaps/default/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/default/readme.md similarity index 100% rename from keyboards/frosty_flake/keymaps/default/readme.md rename to keyboards/bpiphany/frosty_flake/keymaps/default/readme.md diff --git a/keyboards/frosty_flake/keymaps/default/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk similarity index 100% rename from keyboards/frosty_flake/keymaps/default/rules.mk rename to keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk diff --git a/keyboards/frosty_flake/keymaps/nikchi/config.h b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h similarity index 100% rename from keyboards/frosty_flake/keymaps/nikchi/config.h rename to keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c similarity index 100% rename from keyboards/frosty_flake/keymaps/nikchi/keymap.c rename to keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c diff --git a/keyboards/frosty_flake/keymaps/nikchi/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md similarity index 100% rename from keyboards/frosty_flake/keymaps/nikchi/readme.md rename to keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md diff --git a/keyboards/frosty_flake/keymaps/nikchi/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk similarity index 100% rename from keyboards/frosty_flake/keymaps/nikchi/rules.mk rename to keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk diff --git a/keyboards/frosty_flake/keymaps/nikchi/variableTapDance.md b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md similarity index 100% rename from keyboards/frosty_flake/keymaps/nikchi/variableTapDance.md rename to keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md diff --git a/keyboards/frosty_flake/keymaps/tkl/config.h b/keyboards/bpiphany/frosty_flake/keymaps/tkl/config.h similarity index 100% rename from keyboards/frosty_flake/keymaps/tkl/config.h rename to keyboards/bpiphany/frosty_flake/keymaps/tkl/config.h diff --git a/keyboards/frosty_flake/keymaps/tkl/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c similarity index 100% rename from keyboards/frosty_flake/keymaps/tkl/keymap.c rename to keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c diff --git a/keyboards/frosty_flake/keymaps/tkl/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md similarity index 100% rename from keyboards/frosty_flake/keymaps/tkl/readme.md rename to keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md diff --git a/keyboards/frosty_flake/keymaps/tkl/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk similarity index 100% rename from keyboards/frosty_flake/keymaps/tkl/rules.mk rename to keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk diff --git a/keyboards/frosty_flake/matrix.c b/keyboards/bpiphany/frosty_flake/matrix.c similarity index 94% rename from keyboards/frosty_flake/matrix.c rename to keyboards/bpiphany/frosty_flake/matrix.c index cde7f63b95..480e3455ba 100644 --- a/keyboards/frosty_flake/matrix.c +++ b/keyboards/bpiphany/frosty_flake/matrix.c @@ -32,6 +32,24 @@ static uint8_t debouncing = DEBOUNCING_DELAY; static matrix_row_t matrix[MATRIX_ROWS]; static matrix_row_t matrix_debouncing[MATRIX_ROWS]; +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + static matrix_row_t scan_col(void) { return ( (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) | diff --git a/keyboards/frosty_flake/readme.md b/keyboards/bpiphany/frosty_flake/readme.md similarity index 74% rename from keyboards/frosty_flake/readme.md rename to keyboards/bpiphany/frosty_flake/readme.md index 822377a719..0d6a4779f6 100644 --- a/keyboards/frosty_flake/readme.md +++ b/keyboards/bpiphany/frosty_flake/readme.md @@ -25,22 +25,19 @@ Make example for this keyboard (after setting up your build environment): 104 key default layout: ``` -make frosty_flake:default +make bpiphany/frosty_flake:default ``` To directly flash the frosty_flake after compiling use ``` -make frosty_flake:default:dfu +make bpiphany/frosty_flake:default:dfu ``` 87 key tkl layout: ``` -make frosty_flake:tkl:dfu +make bpiphany/frosty_flake:tkl:dfu ``` -See [build environment -setup](https://docs.qmk.fm/build_environment_setup.html) then the -[make instructions](https://docs.qmk.fm/make_instructions.html) for -more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/frosty_flake/rules.mk b/keyboards/bpiphany/frosty_flake/rules.mk similarity index 100% rename from keyboards/frosty_flake/rules.mk rename to keyboards/bpiphany/frosty_flake/rules.mk diff --git a/keyboards/kitten_paw/config.h b/keyboards/bpiphany/kitten_paw/config.h similarity index 100% rename from keyboards/kitten_paw/config.h rename to keyboards/bpiphany/kitten_paw/config.h diff --git a/keyboards/kitten_paw/info.json b/keyboards/bpiphany/kitten_paw/info.json similarity index 100% rename from keyboards/kitten_paw/info.json rename to keyboards/bpiphany/kitten_paw/info.json diff --git a/keyboards/kitten_paw/keymaps/default/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c similarity index 100% rename from keyboards/kitten_paw/keymaps/default/keymap.c rename to keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c diff --git a/keyboards/kitten_paw/keymaps/ickerwx/config.h b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h similarity index 100% rename from keyboards/kitten_paw/keymaps/ickerwx/config.h rename to keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h diff --git a/keyboards/kitten_paw/keymaps/ickerwx/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c similarity index 100% rename from keyboards/kitten_paw/keymaps/ickerwx/keymap.c rename to keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c diff --git a/keyboards/kitten_paw/keymaps/ickerwx/readme.md b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md similarity index 100% rename from keyboards/kitten_paw/keymaps/ickerwx/readme.md rename to keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md diff --git a/keyboards/kitten_paw/kitten_paw.c b/keyboards/bpiphany/kitten_paw/kitten_paw.c similarity index 100% rename from keyboards/kitten_paw/kitten_paw.c rename to keyboards/bpiphany/kitten_paw/kitten_paw.c diff --git a/keyboards/kitten_paw/kitten_paw.h b/keyboards/bpiphany/kitten_paw/kitten_paw.h similarity index 100% rename from keyboards/kitten_paw/kitten_paw.h rename to keyboards/bpiphany/kitten_paw/kitten_paw.h diff --git a/keyboards/kitten_paw/matrix.c b/keyboards/bpiphany/kitten_paw/matrix.c similarity index 94% rename from keyboards/kitten_paw/matrix.c rename to keyboards/bpiphany/kitten_paw/matrix.c index d436ad56ca..6fdbfffd62 100644 --- a/keyboards/kitten_paw/matrix.c +++ b/keyboards/bpiphany/kitten_paw/matrix.c @@ -35,6 +35,24 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS]; static uint8_t read_rows(void); static void select_col(uint8_t col); +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + inline uint8_t matrix_rows(void) { return MATRIX_ROWS; } @@ -48,7 +66,7 @@ inline uint8_t matrix_cols(void) { * col: 0 1 2 3 4 5 6 7 * pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2 * - * Rrr pin configuration + * Rrr pin configuration * * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low * active), together with 2 rrrs driven directly from the micro @@ -84,7 +102,7 @@ uint8_t matrix_scan(void) { } } } - + if (debouncing) { if (--debouncing) { _delay_ms(1); diff --git a/keyboards/kitten_paw/readme.md b/keyboards/bpiphany/kitten_paw/readme.md similarity index 65% rename from keyboards/kitten_paw/readme.md rename to keyboards/bpiphany/kitten_paw/readme.md index d5fa9aa8b2..15737a3a9b 100644 --- a/keyboards/kitten_paw/readme.md +++ b/keyboards/bpiphany/kitten_paw/readme.md @@ -11,6 +11,6 @@ Hardware Availability: https://geekhack.org/index.php?topic=46700.0 Make example for this keyboard (after setting up your build environment): - make kitten_paw:default + make bpiphany/kitten_paw:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/kitten_paw/rules.mk b/keyboards/bpiphany/kitten_paw/rules.mk similarity index 100% rename from keyboards/kitten_paw/rules.mk rename to keyboards/bpiphany/kitten_paw/rules.mk diff --git a/keyboards/bpiphany/pegasushoof/README.md b/keyboards/bpiphany/pegasushoof/README.md new file mode 100644 index 0000000000..1b3d631901 --- /dev/null +++ b/keyboards/bpiphany/pegasushoof/README.md @@ -0,0 +1,12 @@ +Pegasus Hoof Controller +=== + +Keyboard Maintainer: QMK Community +Hardware Supported: Pegasus Hoof +Hardware Availability: https://1upkeyboards.com/filco-pegasus-hoof-controller.html + +Make example for this keyboard (after setting up your build environment): + + make bpiphany/pegasus_hoof:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/pegasushoof/config.h b/keyboards/bpiphany/pegasushoof/config.h similarity index 100% rename from keyboards/pegasushoof/config.h rename to keyboards/bpiphany/pegasushoof/config.h diff --git a/keyboards/pegasushoof/keymaps/blowrak/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c similarity index 100% rename from keyboards/pegasushoof/keymaps/blowrak/keymap.c rename to keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c diff --git a/keyboards/pegasushoof/keymaps/blowrak/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk similarity index 100% rename from keyboards/pegasushoof/keymaps/blowrak/rules.mk rename to keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk diff --git a/keyboards/pegasushoof/keymaps/citadel/config.h b/keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h similarity index 100% rename from keyboards/pegasushoof/keymaps/citadel/config.h rename to keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h diff --git a/keyboards/pegasushoof/keymaps/citadel/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c similarity index 100% rename from keyboards/pegasushoof/keymaps/citadel/keymap.c rename to keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c diff --git a/keyboards/pegasushoof/keymaps/citadel/readme.md b/keyboards/bpiphany/pegasushoof/keymaps/citadel/readme.md similarity index 100% rename from keyboards/pegasushoof/keymaps/citadel/readme.md rename to keyboards/bpiphany/pegasushoof/keymaps/citadel/readme.md diff --git a/keyboards/pegasushoof/keymaps/citadel/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk similarity index 100% rename from keyboards/pegasushoof/keymaps/citadel/rules.mk rename to keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk diff --git a/keyboards/pegasushoof/keymaps/default/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/default/keymap.c similarity index 100% rename from keyboards/pegasushoof/keymaps/default/keymap.c rename to keyboards/bpiphany/pegasushoof/keymaps/default/keymap.c diff --git a/keyboards/pegasushoof/keymaps/default/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk similarity index 100% rename from keyboards/pegasushoof/keymaps/default/rules.mk rename to keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk diff --git a/keyboards/pegasushoof/matrix.c b/keyboards/bpiphany/pegasushoof/matrix.c similarity index 94% rename from keyboards/pegasushoof/matrix.c rename to keyboards/bpiphany/pegasushoof/matrix.c index d2a74b8d72..127433875d 100644 --- a/keyboards/pegasushoof/matrix.c +++ b/keyboards/bpiphany/pegasushoof/matrix.c @@ -33,6 +33,24 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS]; static matrix_row_t read_cols(void); static void select_row(uint8_t col); +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + inline uint8_t matrix_rows(void) { return MATRIX_ROWS; diff --git a/keyboards/pegasushoof/pegasushoof.c b/keyboards/bpiphany/pegasushoof/pegasushoof.c similarity index 100% rename from keyboards/pegasushoof/pegasushoof.c rename to keyboards/bpiphany/pegasushoof/pegasushoof.c diff --git a/keyboards/pegasushoof/pegasushoof.h b/keyboards/bpiphany/pegasushoof/pegasushoof.h similarity index 100% rename from keyboards/pegasushoof/pegasushoof.h rename to keyboards/bpiphany/pegasushoof/pegasushoof.h diff --git a/keyboards/pegasushoof/rules.mk b/keyboards/bpiphany/pegasushoof/rules.mk similarity index 100% rename from keyboards/pegasushoof/rules.mk rename to keyboards/bpiphany/pegasushoof/rules.mk diff --git a/keyboards/bpiphany/readme.md b/keyboards/bpiphany/readme.md new file mode 100644 index 0000000000..992b7c908d --- /dev/null +++ b/keyboards/bpiphany/readme.md @@ -0,0 +1,6 @@ +# Bathroom Epiphanies + +bpiphany is the owner and designer of [Bathroom Epiphanies](http://bathroomepiphanies.com/). + +He is based in Sweden and creates several controller boards as a swappable component for some off the shelf keyboards. + diff --git a/keyboards/tiger_lily/config.h b/keyboards/bpiphany/tiger_lily/config.h similarity index 100% rename from keyboards/tiger_lily/config.h rename to keyboards/bpiphany/tiger_lily/config.h diff --git a/keyboards/tiger_lily/info.json b/keyboards/bpiphany/tiger_lily/info.json similarity index 100% rename from keyboards/tiger_lily/info.json rename to keyboards/bpiphany/tiger_lily/info.json diff --git a/keyboards/tiger_lily/keymaps/default/config.h b/keyboards/bpiphany/tiger_lily/keymaps/default/config.h similarity index 100% rename from keyboards/tiger_lily/keymaps/default/config.h rename to keyboards/bpiphany/tiger_lily/keymaps/default/config.h diff --git a/keyboards/tiger_lily/keymaps/default/keymap.c b/keyboards/bpiphany/tiger_lily/keymaps/default/keymap.c similarity index 100% rename from keyboards/tiger_lily/keymaps/default/keymap.c rename to keyboards/bpiphany/tiger_lily/keymaps/default/keymap.c diff --git a/keyboards/tiger_lily/keymaps/default/readme.md b/keyboards/bpiphany/tiger_lily/keymaps/default/readme.md similarity index 100% rename from keyboards/tiger_lily/keymaps/default/readme.md rename to keyboards/bpiphany/tiger_lily/keymaps/default/readme.md diff --git a/keyboards/tiger_lily/keymaps/default/rules.mk b/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk similarity index 100% rename from keyboards/tiger_lily/keymaps/default/rules.mk rename to keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk diff --git a/keyboards/tiger_lily/keymaps/default_ansi/config.h b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/config.h similarity index 100% rename from keyboards/tiger_lily/keymaps/default_ansi/config.h rename to keyboards/bpiphany/tiger_lily/keymaps/default_ansi/config.h diff --git a/keyboards/tiger_lily/keymaps/default_ansi/keymap.c b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/keymap.c similarity index 100% rename from keyboards/tiger_lily/keymaps/default_ansi/keymap.c rename to keyboards/bpiphany/tiger_lily/keymaps/default_ansi/keymap.c diff --git a/keyboards/tiger_lily/keymaps/default_ansi/readme.md b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/readme.md similarity index 100% rename from keyboards/tiger_lily/keymaps/default_ansi/readme.md rename to keyboards/bpiphany/tiger_lily/keymaps/default_ansi/readme.md diff --git a/keyboards/tiger_lily/keymaps/default_ansi/rules.mk b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk similarity index 100% rename from keyboards/tiger_lily/keymaps/default_ansi/rules.mk rename to keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk diff --git a/keyboards/tiger_lily/matrix.c b/keyboards/bpiphany/tiger_lily/matrix.c similarity index 94% rename from keyboards/tiger_lily/matrix.c rename to keyboards/bpiphany/tiger_lily/matrix.c index d3a0d7ebd1..3b48f6b368 100644 --- a/keyboards/tiger_lily/matrix.c +++ b/keyboards/bpiphany/tiger_lily/matrix.c @@ -32,6 +32,24 @@ static uint8_t debouncing = DEBOUNCING_DELAY; static matrix_row_t matrix[MATRIX_ROWS]; static matrix_row_t matrix_debouncing[MATRIX_ROWS]; +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + static matrix_row_t scan_col(void) { return ( (PINC&(1<<2) ? 0 : ((matrix_row_t)1<<0)) | \ @@ -134,4 +152,4 @@ uint8_t matrix_key_count(void) { for (uint8_t row = 0; row < MATRIX_ROWS; row++) count += bitpop32(matrix[row]); return count; -} \ No newline at end of file +} diff --git a/keyboards/tiger_lily/readme.md b/keyboards/bpiphany/tiger_lily/readme.md similarity index 72% rename from keyboards/tiger_lily/readme.md rename to keyboards/bpiphany/tiger_lily/readme.md index 37073def51..1fcb6c3d6c 100644 --- a/keyboards/tiger_lily/readme.md +++ b/keyboards/bpiphany/tiger_lily/readme.md @@ -11,6 +11,6 @@ Hardware Availability: https://geekhack.org/index.php?topic=46700.0 Make example for this keyboard (after setting up your build environment): - make tiger_lily:default + make bpiphany/tiger_lily:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/tiger_lily/rules.mk b/keyboards/bpiphany/tiger_lily/rules.mk similarity index 100% rename from keyboards/tiger_lily/rules.mk rename to keyboards/bpiphany/tiger_lily/rules.mk diff --git a/keyboards/tiger_lily/tiger_lily.c b/keyboards/bpiphany/tiger_lily/tiger_lily.c similarity index 100% rename from keyboards/tiger_lily/tiger_lily.c rename to keyboards/bpiphany/tiger_lily/tiger_lily.c diff --git a/keyboards/tiger_lily/tiger_lily.h b/keyboards/bpiphany/tiger_lily/tiger_lily.h similarity index 100% rename from keyboards/tiger_lily/tiger_lily.h rename to keyboards/bpiphany/tiger_lily/tiger_lily.h diff --git a/keyboards/unloved_bastard/config.h b/keyboards/bpiphany/unloved_bastard/config.h similarity index 100% rename from keyboards/unloved_bastard/config.h rename to keyboards/bpiphany/unloved_bastard/config.h diff --git a/keyboards/unloved_bastard/info.json b/keyboards/bpiphany/unloved_bastard/info.json similarity index 100% rename from keyboards/unloved_bastard/info.json rename to keyboards/bpiphany/unloved_bastard/info.json diff --git a/keyboards/unloved_bastard/keymaps/default/config.h b/keyboards/bpiphany/unloved_bastard/keymaps/default/config.h similarity index 100% rename from keyboards/unloved_bastard/keymaps/default/config.h rename to keyboards/bpiphany/unloved_bastard/keymaps/default/config.h diff --git a/keyboards/unloved_bastard/keymaps/default/keymap.c b/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c similarity index 100% rename from keyboards/unloved_bastard/keymaps/default/keymap.c rename to keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c diff --git a/keyboards/unloved_bastard/keymaps/default/readme.md b/keyboards/bpiphany/unloved_bastard/keymaps/default/readme.md similarity index 100% rename from keyboards/unloved_bastard/keymaps/default/readme.md rename to keyboards/bpiphany/unloved_bastard/keymaps/default/readme.md diff --git a/keyboards/unloved_bastard/keymaps/default_ansi/config.h b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/config.h similarity index 100% rename from keyboards/unloved_bastard/keymaps/default_ansi/config.h rename to keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/config.h diff --git a/keyboards/unloved_bastard/keymaps/default_ansi/keymap.c b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c similarity index 100% rename from keyboards/unloved_bastard/keymaps/default_ansi/keymap.c rename to keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c diff --git a/keyboards/unloved_bastard/keymaps/default_ansi/readme.md b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/readme.md similarity index 100% rename from keyboards/unloved_bastard/keymaps/default_ansi/readme.md rename to keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/readme.md diff --git a/keyboards/unloved_bastard/matrix.c b/keyboards/bpiphany/unloved_bastard/matrix.c similarity index 94% rename from keyboards/unloved_bastard/matrix.c rename to keyboards/bpiphany/unloved_bastard/matrix.c index 65773879bc..bb6de8613a 100644 --- a/keyboards/unloved_bastard/matrix.c +++ b/keyboards/bpiphany/unloved_bastard/matrix.c @@ -25,6 +25,24 @@ #include "util.h" #include "matrix.h" +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + #ifndef DEBOUNCING_DELAY # define DEBOUNCING_DELAY 5 #endif diff --git a/keyboards/unloved_bastard/readme.md b/keyboards/bpiphany/unloved_bastard/readme.md similarity index 56% rename from keyboards/unloved_bastard/readme.md rename to keyboards/bpiphany/unloved_bastard/readme.md index 33c74d4b04..9909d5af3f 100644 --- a/keyboards/unloved_bastard/readme.md +++ b/keyboards/bpiphany/unloved_bastard/readme.md @@ -10,6 +10,6 @@ Hardware Availability: Pretty much anywhere Make example for this keyboard (after setting up your build environment): - make unloved_bastard:default + make bpiphany/unloved_bastard:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/unloved_bastard/rules.mk b/keyboards/bpiphany/unloved_bastard/rules.mk similarity index 100% rename from keyboards/unloved_bastard/rules.mk rename to keyboards/bpiphany/unloved_bastard/rules.mk diff --git a/keyboards/unloved_bastard/unloved_bastard.c b/keyboards/bpiphany/unloved_bastard/unloved_bastard.c similarity index 100% rename from keyboards/unloved_bastard/unloved_bastard.c rename to keyboards/bpiphany/unloved_bastard/unloved_bastard.c diff --git a/keyboards/unloved_bastard/unloved_bastard.h b/keyboards/bpiphany/unloved_bastard/unloved_bastard.h similarity index 100% rename from keyboards/unloved_bastard/unloved_bastard.h rename to keyboards/bpiphany/unloved_bastard/unloved_bastard.h diff --git a/keyboards/pegasushoof/README.md b/keyboards/pegasushoof/README.md deleted file mode 100644 index debf7f7372..0000000000 --- a/keyboards/pegasushoof/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Pegasus Hoof Controller -=== - -Keyboard Maintainer: QMK Community -Hardware Supported: Pegasus Hoof -Hardware Availability: https://1upkeyboards.com/filco-pegasus-hoof-controller.html - -Make example for this keyboard (after setting up your build environment): - - make pegasus_hoof:default - -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. From 6cab5140368c006030f35a9c7eaa946b0fdd78ef Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Thu, 20 Sep 2018 00:33:00 +0100 Subject: [PATCH 010/269] Keymap: Initial commit of dshields keymap for the model01 keyboard. (#3942) --- keyboards/model01/keymaps/dshields/config.h | 31 ++++++++++++ keyboards/model01/keymaps/dshields/keymap.c | 53 ++++++++++++++++++++ keyboards/model01/keymaps/dshields/readme.md | 10 ++++ keyboards/model01/keymaps/dshields/rules.mk | 2 + 4 files changed, 96 insertions(+) create mode 100644 keyboards/model01/keymaps/dshields/config.h create mode 100644 keyboards/model01/keymaps/dshields/keymap.c create mode 100644 keyboards/model01/keymaps/dshields/readme.md create mode 100644 keyboards/model01/keymaps/dshields/rules.mk diff --git a/keyboards/model01/keymaps/dshields/config.h b/keyboards/model01/keymaps/dshields/config.h new file mode 100644 index 0000000000..86a4dd5314 --- /dev/null +++ b/keyboards/model01/keymaps/dshields/config.h @@ -0,0 +1,31 @@ +#pragma once + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#define USB_MAX_POWER_CONSUMPTION 100 +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 3000 + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 40 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_WHEEL_DELAY 0 + +// dynamic macro keys +#define DM_PLAY DYN_MACRO_PLAY1 +#define DM_STRT DYN_REC_START1 +#define DM_STOP DYN_REC_STOP + +// one-shot layer keys +#define OSL_FUN OSL(FUN) + +// one-shot modifier keys +#define OSMLCTL OSM(MOD_LCTL) +#define OSMRCTL OSM(MOD_RCTL) +#define OSMLALT OSM(MOD_LALT) +#define OSMRALT OSM(MOD_RALT) +#define OSMLSFT OSM(MOD_LSFT) +#define OSMRSFT OSM(MOD_RSFT) + diff --git a/keyboards/model01/keymaps/dshields/keymap.c b/keyboards/model01/keymaps/dshields/keymap.c new file mode 100644 index 0000000000..3a89d062b5 --- /dev/null +++ b/keyboards/model01/keymaps/dshields/keymap.c @@ -0,0 +1,53 @@ +#include QMK_KEYBOARD_H + +enum { DEF, FUN }; +enum { DYNAMIC_MACRO_RANGE = SAFE_RANGE }; + +#include "dynamic_macro.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[DEF] = LAYOUT( + RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______, + KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_TOG, DM_PLAY, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL , + KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB , KC_ENT , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, + KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_ESC , _______, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS, + OSMLCTL, KC_RCTL, + KC_BSPC, KC_SPC , + KC_LGUI, OSMRALT, + OSMLSFT, OSMRSFT, + OSL_FUN, OSL_FUN + ), +[FUN] = LAYOUT( + _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , + KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_MOD, DM_STRT, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 , + KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, _______, DM_STOP, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______, + KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, KC_PIPE, + _______, _______, + KC_DEL , KC_ENT , + _______, _______, + _______, _______, + _______, _______ + ) +}; + +uint32_t layer_state_set_user(uint32_t state) { + switch (biton32(state)) { + case DEF: + set_all_leds_to(0,0,0); + break; + case FUN: + // TODO light the fn keys + // set_led_to(?, 0, 128, 0); + // set_led_to(?, 0, 128, 0); + break; + } + return state; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_dynamic_macro(keycode, record)) { + return false; + } + return true; +} + diff --git a/keyboards/model01/keymaps/dshields/readme.md b/keyboards/model01/keymaps/dshields/readme.md new file mode 100644 index 0000000000..ead1c1aad2 --- /dev/null +++ b/keyboards/model01/keymaps/dshields/readme.md @@ -0,0 +1,10 @@ + +About +------ + +A lightly modded version of the default keymap. + +- One-shot modifiers and layers. +- Dynamic macros +- No num lock layer + diff --git a/keyboards/model01/keymaps/dshields/rules.mk b/keyboards/model01/keymaps/dshields/rules.mk new file mode 100644 index 0000000000..4d1abd88ad --- /dev/null +++ b/keyboards/model01/keymaps/dshields/rules.mk @@ -0,0 +1,2 @@ +# used by default keymap +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) From 4c22e92ce81cc5fecce713c7525d7102df39f2df Mon Sep 17 00:00:00 2001 From: Simon Dagfinrud Date: Thu, 20 Sep 2018 01:34:08 +0200 Subject: [PATCH 011/269] Keymap: Fix tada68:iso-nor to match latest ISO_layout (#3946) --- keyboards/tada68/keymaps/iso-nor/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/tada68/keymaps/iso-nor/keymap.c b/keyboards/tada68/keymaps/iso-nor/keymap.c index 2e6a80750f..c26932b0e4 100644 --- a/keyboards/tada68/keymaps/iso-nor/keymap.c +++ b/keyboards/tada68/keymaps/iso-nor/keymap.c @@ -21,8 +21,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_BL] = LAYOUT_iso( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_GRV, KC_BSPC, KC_EQL, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUHS, KC_DEL, \ - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP, \ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), @@ -42,9 +42,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FL] = LAYOUT_iso( _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET, KC_PSCR, \ - _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, BL_TOGG, KC_INS, \ + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, BL_TOGG, _______, KC_INS, \ _______, KC_LEFT, KC_DOWN,KC_RIGHT, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_END, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_END, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), From cfdc23bbaea69039d01e57e7256b62010635c260 Mon Sep 17 00:00:00 2001 From: Danny Date: Thu, 20 Sep 2018 11:00:19 -0400 Subject: [PATCH 012/269] Keyboard: Add Quefrency 65 support in configurator (#3950) * Fix Quefrency configurator layout to support new key added * Add configurator support for Quefrency 65 --- keyboards/quefrency/info.json | 94 ++++++++++++++++++- .../quefrency/keymaps/default65/keymap.c | 8 +- 2 files changed, 94 insertions(+), 8 deletions(-) diff --git a/keyboards/quefrency/info.json b/keyboards/quefrency/info.json index f63cd1f6c3..160e7896bb 100644 --- a/keyboards/quefrency/info.json +++ b/keyboards/quefrency/info.json @@ -2,7 +2,7 @@ "keyboard_name": "Quefrency", "url": "https://keeb.io", "maintainer": "nooges", - "width": 16, + "width": 17, "height": 5, "layouts": { "LAYOUT": { @@ -72,17 +72,103 @@ {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Alt", "x":1.25, "y":4, "w":1.25}, - {"label":"GUI", "x":2.5, "y":4, "w":1.25}, + {"label":"Win", "x":2.5, "y":4, "w":1.25}, {"label":"Fn", "x":3.75, "y":4, "w":1.25}, {"label":"Space", "x":5, "y":4, "w":2.25}, - {"label":"Backspace", "x":8.25, "y":4, "w":2.75}, + {"label":"Fn", "x":8.25, "y":4, "w":1.25}, + {"label":"Space", "x":9.5, "y":4, "w":1.5}, {"label":"Alt", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"Left", "x":13, "y":4}, {"label":"Down", "x":14, "y":4}, {"label":"Right", "x":15, "y":4} ] - } + }, + "LAYOUT_65": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"1", "x":1, "y":0}, + {"label":"2", "x":2, "y":0}, + {"label":"3", "x":3, "y":0}, + {"label":"4", "x":4, "y":0}, + {"label":"5", "x":5, "y":0}, + {"label":"6", "x":6, "y":0}, + + {"label":"7", "x":8, "y":0}, + {"label":"8", "x":9, "y":0}, + {"label":"9", "x":10, "y":0}, + {"label":"0", "x":11, "y":0}, + {"label":"-", "x":12, "y":0}, + {"label":"=", "x":13, "y":0}, + {"label":"Del", "x":14, "y":0}, + {"label":"Bksp", "x":15, "y":0}, + {"label":"Home", "x":16, "y":0}, + + {"label":"Tab", "x":0, "y":1, "w":1.5}, + {"label":"Q", "x":1.5, "y":1}, + {"label":"W", "x":2.5, "y":1}, + {"label":"E", "x":3.5, "y":1}, + {"label":"R", "x":4.5, "y":1}, + {"label":"T", "x":5.5, "y":1}, + + {"label":"Y", "x":7.5, "y":1}, + {"label":"U", "x":8.5, "y":1}, + {"label":"I", "x":9.5, "y":1}, + {"label":"O", "x":10.5, "y":1}, + {"label":"P", "x":11.5, "y":1}, + {"label":"[", "x":12.5, "y":1}, + {"label":"]", "x":13.5, "y":1}, + {"label":"Backslash", "x":14.5, "y":1, "w":1.5}, + {"label":"End", "x":16, "y":1}, + + {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, + {"label":"A", "x":1.75, "y":2}, + {"label":"S", "x":2.75, "y":2}, + {"label":"D", "x":3.75, "y":2}, + {"label":"F", "x":4.75, "y":2}, + {"label":"G", "x":5.75, "y":2}, + + {"label":"H", "x":7.75, "y":2}, + {"label":"J", "x":8.75, "y":2}, + {"label":"K", "x":9.75, "y":2}, + {"label":"L", "x":10.75, "y":2}, + {"label":";", "x":11.75, "y":2}, + {"label":"'", "x":12.75, "y":2}, + {"label":"Enter", "x":13.75, "y":2, "w":2.25}, + {"label":"Page Up", "x":16, "y":2}, + + {"label":"Shift", "x":0, "y":3, "w":2.25}, + {"label":"Z", "x":2.25, "y":3}, + {"label":"X", "x":3.25, "y":3}, + {"label":"C", "x":4.25, "y":3}, + {"label":"V", "x":5.25, "y":3}, + {"label":"B", "x":6.25, "y":3}, + + {"label":"N", "x":8.25, "y":3}, + {"label":"M", "x":9.25, "y":3}, + {"label":",", "x":10.25, "y":3}, + {"label":".", "x":11.25, "y":3}, + {"label":"/", "x":12.25, "y":3}, + {"label":"Shift", "x":13.25, "y":3, "w":1.75}, + {"label":"Up", "x":15, "y":3}, + {"label":"Page Down", "x":16, "y":3}, + + {"label":"Ctrl", "x":0, "y":4, "w":1.25}, + {"label":"Alt", "x":1.25, "y":4, "w":1.25}, + {"label":"Win", "x":2.5, "y":4, "w":1.25}, + {"label":"Fn", "x":3.75, "y":4, "w":1.25}, + {"label":"Space", "x":5, "y":4, "w":2.25}, + + {"label":"Fn", "x":8.25, "y":4, "w":1.25}, + {"label":"Space", "x":9.5, "y":4, "w":1.5}, + {"label":"Alt", "x":11, "y":4}, + {"label":"Ctrl", "x":12, "y":4}, + {"label":"Win", "x":13, "y":4}, + {"label":"Left", "x":14, "y":4}, + {"label":"Down", "x":15, "y":4}, + {"label":"Right", "x":16, "y":4} + ] + } } } diff --git a/keyboards/quefrency/keymaps/default65/keymap.c b/keyboards/quefrency/keymaps/default65/keymap.c index b660b5d86b..4b07949b06 100644 --- a/keyboards/quefrency/keymaps/default65/keymap.c +++ b/keyboards/quefrency/keymaps/default65/keymap.c @@ -18,10 +18,10 @@ enum custom_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_65( - KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_PGUP, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \ - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_HOME, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, \ + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_HOME, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \ KC_LCTL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, MO(_FN1),KC_SPC, KC_RALT, KC_RCTL, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT ), From 99c1c5bfe933865bacdebdcbcfa55954a5a946a2 Mon Sep 17 00:00:00 2001 From: Jumail Mundekkat Date: Fri, 21 Sep 2018 08:36:11 +1000 Subject: [PATCH 013/269] Keyboard: Added Prime_L, Prime_O and Prime_M, moved Prime_R into primekb folder (#3907) * Added template copies for prime_l Added first set of files for prime_m and prime_o Temporarily storing kbfirmware dumps in tmp * Completed base for prime_m, prime_o and prime_l Moved prime_r into primekb folder * Added in QMK Configurator layout files for new PrimeKB keyboards Slight modification to layout header files Added my name to licensing * Updated primekb readmes * Removed temporary working files * Updated default keymap for Prime_O * Added link to Newbs Guide in prime_r readme --- keyboards/primekb/prime_l/config.h | 57 +++++++++++++ keyboards/primekb/prime_l/info.json | 12 +++ .../primekb/prime_l/keymaps/default/config.h | 19 +++++ .../primekb/prime_l/keymaps/default/keymap.c | 74 ++++++++++++++++ .../primekb/prime_l/keymaps/default/readme.md | 1 + keyboards/primekb/prime_l/prime_l.c | 43 ++++++++++ keyboards/primekb/prime_l/prime_l.h | 35 ++++++++ keyboards/primekb/prime_l/readme.md | 15 ++++ keyboards/primekb/prime_l/rules.mk | 80 +++++++++++++++++ keyboards/primekb/prime_m/config.h | 57 +++++++++++++ keyboards/primekb/prime_m/info.json | 12 +++ .../primekb/prime_m/keymaps/default/config.h | 19 +++++ .../primekb/prime_m/keymaps/default/keymap.c | 82 ++++++++++++++++++ .../primekb/prime_m/keymaps/default/readme.md | 1 + keyboards/primekb/prime_m/prime_m.c | 43 ++++++++++ keyboards/primekb/prime_m/prime_m.h | 35 ++++++++ keyboards/primekb/prime_m/readme.md | 15 ++++ keyboards/primekb/prime_m/rules.mk | 80 +++++++++++++++++ keyboards/primekb/prime_o/config.h | 57 +++++++++++++ keyboards/primekb/prime_o/info.json | 12 +++ .../primekb/prime_o/keymaps/default/config.h | 19 +++++ .../primekb/prime_o/keymaps/default/keymap.c | 85 +++++++++++++++++++ .../primekb/prime_o/keymaps/default/readme.md | 1 + keyboards/primekb/prime_o/prime_o.c | 43 ++++++++++ keyboards/primekb/prime_o/prime_o.h | 40 +++++++++ keyboards/primekb/prime_o/readme.md | 15 ++++ keyboards/primekb/prime_o/rules.mk | 80 +++++++++++++++++ keyboards/{ => primekb}/prime_r/config.h | 0 keyboards/{ => primekb}/prime_r/info.json | 0 .../prime_r/keymaps/default/config.h | 0 .../prime_r/keymaps/default/keymap.c | 0 .../prime_r/keymaps/default/readme.md | 0 .../prime_r/keymaps/rooski/config.h | 0 .../prime_r/keymaps/rooski/keymap.c | 0 .../prime_r/keymaps/rooski/readme.md | 0 .../prime_r/keymaps/rooski/rules.mk | 0 keyboards/{ => primekb}/prime_r/prime_r.c | 0 keyboards/{ => primekb}/prime_r/prime_r.h | 0 keyboards/{ => primekb}/prime_r/readme.md | 5 +- keyboards/{ => primekb}/prime_r/rules.mk | 0 40 files changed, 1034 insertions(+), 3 deletions(-) create mode 100644 keyboards/primekb/prime_l/config.h create mode 100644 keyboards/primekb/prime_l/info.json create mode 100644 keyboards/primekb/prime_l/keymaps/default/config.h create mode 100644 keyboards/primekb/prime_l/keymaps/default/keymap.c create mode 100644 keyboards/primekb/prime_l/keymaps/default/readme.md create mode 100644 keyboards/primekb/prime_l/prime_l.c create mode 100644 keyboards/primekb/prime_l/prime_l.h create mode 100644 keyboards/primekb/prime_l/readme.md create mode 100644 keyboards/primekb/prime_l/rules.mk create mode 100644 keyboards/primekb/prime_m/config.h create mode 100644 keyboards/primekb/prime_m/info.json create mode 100644 keyboards/primekb/prime_m/keymaps/default/config.h create mode 100644 keyboards/primekb/prime_m/keymaps/default/keymap.c create mode 100644 keyboards/primekb/prime_m/keymaps/default/readme.md create mode 100644 keyboards/primekb/prime_m/prime_m.c create mode 100644 keyboards/primekb/prime_m/prime_m.h create mode 100644 keyboards/primekb/prime_m/readme.md create mode 100644 keyboards/primekb/prime_m/rules.mk create mode 100644 keyboards/primekb/prime_o/config.h create mode 100644 keyboards/primekb/prime_o/info.json create mode 100644 keyboards/primekb/prime_o/keymaps/default/config.h create mode 100644 keyboards/primekb/prime_o/keymaps/default/keymap.c create mode 100644 keyboards/primekb/prime_o/keymaps/default/readme.md create mode 100644 keyboards/primekb/prime_o/prime_o.c create mode 100644 keyboards/primekb/prime_o/prime_o.h create mode 100644 keyboards/primekb/prime_o/readme.md create mode 100644 keyboards/primekb/prime_o/rules.mk rename keyboards/{ => primekb}/prime_r/config.h (100%) rename keyboards/{ => primekb}/prime_r/info.json (100%) rename keyboards/{ => primekb}/prime_r/keymaps/default/config.h (100%) rename keyboards/{ => primekb}/prime_r/keymaps/default/keymap.c (100%) rename keyboards/{ => primekb}/prime_r/keymaps/default/readme.md (100%) rename keyboards/{ => primekb}/prime_r/keymaps/rooski/config.h (100%) rename keyboards/{ => primekb}/prime_r/keymaps/rooski/keymap.c (100%) rename keyboards/{ => primekb}/prime_r/keymaps/rooski/readme.md (100%) rename keyboards/{ => primekb}/prime_r/keymaps/rooski/rules.mk (100%) rename keyboards/{ => primekb}/prime_r/prime_r.c (100%) rename keyboards/{ => primekb}/prime_r/prime_r.h (100%) rename keyboards/{ => primekb}/prime_r/readme.md (63%) rename keyboards/{ => primekb}/prime_r/rules.mk (100%) diff --git a/keyboards/primekb/prime_l/config.h b/keyboards/primekb/prime_l/config.h new file mode 100644 index 0000000000..46dd3604e4 --- /dev/null +++ b/keyboards/primekb/prime_l/config.h @@ -0,0 +1,57 @@ +/* +Copyright 2018 Jumail Mundekkat + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x4024 +#define DEVICE_VER 0x0001 +#define MANUFACTURER PrimeKB +#define PRODUCT Prime_L +#define DESCRIPTION Custom layout keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 16 + +/* Keyboard Matrix Assignments */ +#define MATRIX_ROW_PINS { D1, D0, B7, B3, B2 } +#define MATRIX_COL_PINS { D2, D3, D5, D4, D6, D7, B4, B5, C7, C6, F7, F6, F5, F4, F1, F0 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B6 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 4 + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) diff --git a/keyboards/primekb/prime_l/info.json b/keyboards/primekb/prime_l/info.json new file mode 100644 index 0000000000..8a407fd3eb --- /dev/null +++ b/keyboards/primekb/prime_l/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Prime_L", + "url": "https://www.primekb.com", + "maintainer": "MxBlu", + "width": 16, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":15, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2, "w":1.25}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"x":11.25, "y":2}, {"x":12.25, "y":2}, {"x":13.25, "y":2}, {"x":14.25, "y":2, "w":1.75}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3, "w":1.75}, {"x":4.75, "y":3}, {"x":5.75, "y":3}, {"x":6.75, "y":3}, {"x":7.75, "y":3}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3}, {"x":12.75, "y":3}, {"x":13.75, "y":3}, {"x":14.75, "y":3, "w":1.25}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4, "w":1.25}, {"x":4.25, "y":4, "w":1.25}, {"x":5.5, "y":4}, {"x":6.5, "y":4}, {"x":7.5, "y":4, "w":2}, {"x":9.5, "y":4, "w":2.25}, {"x":11.75, "y":4}, {"x":12.75, "y":4}, {"x":13.75, "y":4}, {"x":14.75, "y":4, "w":1.25}] + } + } +} diff --git a/keyboards/primekb/prime_l/keymaps/default/config.h b/keyboards/primekb/prime_l/keymaps/default/config.h new file mode 100644 index 0000000000..95917a65cd --- /dev/null +++ b/keyboards/primekb/prime_l/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 + +// place overrides here diff --git a/keyboards/primekb/prime_l/keymaps/default/keymap.c b/keyboards/primekb/prime_l/keymaps/default/keymap.c new file mode 100644 index 0000000000..8a044b9556 --- /dev/null +++ b/keyboards/primekb/prime_l/keymaps/default/keymap.c @@ -0,0 +1,74 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_HOME, KC_END, KC_PSCR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PGUP, KC_BSPC, + KC_P7, KC_P8, KC_P9, KC_NLCK, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PGDN, KC_BSLS, + KC_P4, KC_P5, KC_P6, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, + KC_P1, KC_P2, KC_P3, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_ENT, KC_PDOT, KC_P0, KC_LCTL, KC_LALT, KC_LBRC, KC_RBRC, MO(1), KC_SPC, KC_MINS, KC_EQL, KC_RGUI, KC_RCTL + ), + + [1] = LAYOUT( + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_SCLN, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS + ) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/primekb/prime_l/keymaps/default/readme.md b/keyboards/primekb/prime_l/keymaps/default/readme.md new file mode 100644 index 0000000000..4e4db88799 --- /dev/null +++ b/keyboards/primekb/prime_l/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for prime_l \ No newline at end of file diff --git a/keyboards/primekb/prime_l/prime_l.c b/keyboards/primekb/prime_l/prime_l.c new file mode 100644 index 0000000000..844407a10d --- /dev/null +++ b/keyboards/primekb/prime_l/prime_l.c @@ -0,0 +1,43 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 "prime_l.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/primekb/prime_l/prime_l.h b/keyboards/primekb/prime_l/prime_l.h new file mode 100644 index 0000000000..b50898b28b --- /dev/null +++ b/keyboards/primekb/prime_l/prime_l.h @@ -0,0 +1,35 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 . + */ +#ifndef PRIME_L_H +#define PRIME_L_H + +#include "quantum.h" + +#define LAYOUT( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215 , \ + K300, K301, K302, K303, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \ + K400, K401, K402, K403, K405, K406, K407, K408, K410, K412, K413, K414, K415 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215 }, \ + { K300, K301, K302, K303, KC_NO, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \ + { K400, K401, K402, K403, KC_NO, K405, K406, K407, K408, KC_NO, K410, KC_NO, K412, K413, K414, K415 } \ +} + +#endif diff --git a/keyboards/primekb/prime_l/readme.md b/keyboards/primekb/prime_l/readme.md new file mode 100644 index 0000000000..3f760a4cc5 --- /dev/null +++ b/keyboards/primekb/prime_l/readme.md @@ -0,0 +1,15 @@ +# Prime_L + +![Prime_L](https://i.imgur.com/jUWhjOD.jpg) + +A compact layout with the footprint of your typical 65% board, featuring a left mini-numpad. Pre-drilled and counter sunk holes for use with optional feet for a slight tilt. Switches are oriented so that back light LEDs are on the top of the switch. + +Keyboard Maintainer: [MxBlue](https://github.com/MxBlu) +Hardware Supported: Prime_L PCBs, ATMega32u4 +Hardware Availability: [Store Link](https://www.primekb.com/collections/keyboards/products/bundle-save) + +Make example for this keyboard (after setting up your build environment): + + make primekb/prime_l:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/primekb/prime_l/rules.mk b/keyboards/primekb/prime_l/rules.mk new file mode 100644 index 0000000000..5cce4e8113 --- /dev/null +++ b/keyboards/primekb/prime_l/rules.mk @@ -0,0 +1,80 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) diff --git a/keyboards/primekb/prime_m/config.h b/keyboards/primekb/prime_m/config.h new file mode 100644 index 0000000000..82a8037c99 --- /dev/null +++ b/keyboards/primekb/prime_m/config.h @@ -0,0 +1,57 @@ +/* +Copyright 2018 Jumail Mundekkat + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x4024 +#define DEVICE_VER 0x0001 +#define MANUFACTURER PrimeKB +#define PRODUCT Prime_M +#define DESCRIPTION 6x5 Macropad + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 6 + +/* Keyboard Matrix Assignments */ +#define MATRIX_ROW_PINS { C5, B5, B2, D5, D3 } +#define MATRIX_COL_PINS { B3, C7, C6, D2, D1, D0 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 4 + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) diff --git a/keyboards/primekb/prime_m/info.json b/keyboards/primekb/prime_m/info.json new file mode 100644 index 0000000000..5332522022 --- /dev/null +++ b/keyboards/primekb/prime_m/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Prime_M", + "url": "https://www.primekb.com", + "maintainer": "MxBlu", + "width": 6, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}] + } + } +} diff --git a/keyboards/primekb/prime_m/keymaps/default/config.h b/keyboards/primekb/prime_m/keymaps/default/config.h new file mode 100644 index 0000000000..95917a65cd --- /dev/null +++ b/keyboards/primekb/prime_m/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 + +// place overrides here diff --git a/keyboards/primekb/prime_m/keymaps/default/keymap.c b/keyboards/primekb/prime_m/keymaps/default/keymap.c new file mode 100644 index 0000000000..d230439d08 --- /dev/null +++ b/keyboards/primekb/prime_m/keymaps/default/keymap.c @@ -0,0 +1,82 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_LPRN, KC_RPRN, KC_PSLS, KC_PAST, LT(2, KC_BSPC), + KC_F1, KC_F2, KC_P7, KC_P8, KC_P9, KC_DEL, + KC_F3, KC_F4, KC_P4, KC_P5, KC_P6, KC_PMNS, + KC_F5, KC_F6, KC_P1, KC_P2, KC_P3, KC_PPLS, + KC_LCTL, KC_LALT, TO(1), KC_P0, KC_PDOT, KC_ENT + ), + + [1] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, LT(2, KC_F9), + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, + KC_LCTL, KC_LALT, TO(0), KC_P, KC_H, KC_SPC + ), + + [2] = LAYOUT( + BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD + ) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/primekb/prime_m/keymaps/default/readme.md b/keyboards/primekb/prime_m/keymaps/default/readme.md new file mode 100644 index 0000000000..5654918abb --- /dev/null +++ b/keyboards/primekb/prime_m/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for prime_m \ No newline at end of file diff --git a/keyboards/primekb/prime_m/prime_m.c b/keyboards/primekb/prime_m/prime_m.c new file mode 100644 index 0000000000..a33db95d83 --- /dev/null +++ b/keyboards/primekb/prime_m/prime_m.c @@ -0,0 +1,43 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 "prime_m.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/primekb/prime_m/prime_m.h b/keyboards/primekb/prime_m/prime_m.h new file mode 100644 index 0000000000..0449a66d9b --- /dev/null +++ b/keyboards/primekb/prime_m/prime_m.h @@ -0,0 +1,35 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 . + */ +#ifndef PRIME_M_H +#define PRIME_M_H + +#include "quantum.h" + +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05, \ + K10, K11, K12, K13, K14, K15, \ + K20, K21, K22, K23, K24, K25, \ + K30, K31, K32, K33, K34, K35, \ + K40, K41, K42, K43, K44, K45 \ +) { \ + { K00, K01, K02, K03, K04, K05 }, \ + { K10, K11, K12, K13, K14, K15 }, \ + { K20, K21, K22, K23, K24, K25 }, \ + { K30, K31, K32, K33, K34, K35 }, \ + { K40, K41, K42, K43, K44, K45 } \ +} + +#endif diff --git a/keyboards/primekb/prime_m/readme.md b/keyboards/primekb/prime_m/readme.md new file mode 100644 index 0000000000..668b29e4ae --- /dev/null +++ b/keyboards/primekb/prime_m/readme.md @@ -0,0 +1,15 @@ +# Prime_M + +![Prime_M](https://i.imgur.com/Iqa6FJw.jpg) + +The Prime_M is a premium input device that is designed to be flexible so that it can cover many needs. The case is milled from a solid block of aluminum and features an integrated switch plate, which is 4.75mm thick yet designed to allow MX style switches to properly snap in. The bottom cover is machine from solid brass and is pre-drilled/countersunk for use with optional feet to give the device a slight tilt. + +Keyboard Maintainer: [MxBlue](https://github.com/MxBlu) +Hardware Supported: Prime_M PCB, ATMega32u2 +Hardware Availability: [GB Post](https://geekhack.org/index.php?topic=91821.0), [B-Stock Listing](https://www.primekb.com/products/prime_m) + +Make example for this keyboard (after setting up your build environment): + + make primekb/prime_m:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/primekb/prime_m/rules.mk b/keyboards/primekb/prime_m/rules.mk new file mode 100644 index 0000000000..8d3b835f18 --- /dev/null +++ b/keyboards/primekb/prime_m/rules.mk @@ -0,0 +1,80 @@ +# MCU name +MCU = atmega32u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) diff --git a/keyboards/primekb/prime_o/config.h b/keyboards/primekb/prime_o/config.h new file mode 100644 index 0000000000..9f634474cf --- /dev/null +++ b/keyboards/primekb/prime_o/config.h @@ -0,0 +1,57 @@ +/* +Copyright 2018 Jumail Mundekkat + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x4024 +#define DEVICE_VER 0x0001 +#define MANUFACTURER PrimeKB +#define PRODUCT Prime_O +#define DESCRIPTION A Large Ortholinear + +/* key matrix size */ +#define MATRIX_ROWS 10 +#define MATRIX_COLS 8 + +/* Keyboard Matrix Assignments */ +#define MATRIX_ROW_PINS { D4, D6, B1, C5, B4, B3, C4, B2, B0, D5 } +#define MATRIX_COL_PINS { B6, B5, C7, C6, D2, D1, D0, C2 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 4 + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) diff --git a/keyboards/primekb/prime_o/info.json b/keyboards/primekb/prime_o/info.json new file mode 100644 index 0000000000..83fc143605 --- /dev/null +++ b/keyboards/primekb/prime_o/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Prime_O", + "url": "https://www.primekb.com", + "maintainer": "MxBlu", + "width": 16, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":15, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":15, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + } + } +} diff --git a/keyboards/primekb/prime_o/keymaps/default/config.h b/keyboards/primekb/prime_o/keymaps/default/config.h new file mode 100644 index 0000000000..95917a65cd --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 + +// place overrides here diff --git a/keyboards/primekb/prime_o/keymaps/default/keymap.c b/keyboards/primekb/prime_o/keymaps/default/keymap.c new file mode 100644 index 0000000000..f48e9e51ae --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/default/keymap.c @@ -0,0 +1,85 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ENT, KC_P0, KC_LCTL, KC_LBRC, LT(1, KC_BSPC), KC_SPC, KC_MINS, KC_RGUI, + KC_ENT, KC_P2, KC_LSFT, KC_X, KC_V, KC_N, KC_COMM, KC_SLSH, + KC_PPLS, KC_P5, KC_TAB, KC_S, KC_F, KC_H, KC_K, KC_QUOT, + KC_PPLS, KC_P8, KC_PSCR, KC_W, KC_R, KC_Y, KC_I, KC_P, + KC_ESC, KC_PSLS, KC_NLCK, KC_2, KC_4, KC_6, KC_8, KC_0, + KC_PMNS, KC_PAST, KC_1, KC_3, KC_5, KC_7, KC_9, KC_DEL, + KC_P7, KC_P9, KC_Q, KC_E, KC_T, KC_U, KC_O, KC_BSLS, + KC_P4, KC_P6, KC_A, KC_D, KC_G, KC_J, KC_L, KC_ENT, + KC_P1, KC_P3, KC_Z, KC_C, KC_B, KC_M, KC_DOT, KC_LSFT, + KC_PDOT, KC_P0, KC_LALT, KC_RBRC, LT(1, KC_BSPC), KC_SPC, KC_EQL, KC_RCTL + ), + + [1] = LAYOUT( + BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_VOLD, KC_MUTE, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOWN, KC_SCLN, + KC_TRNS, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, + KC_GRV, KC_F2, KC_F4, KC_F2, KC_F4, KC_F6, KC_F8, KC_F10, + KC_F1, KC_F3, KC_F1, KC_F3, KC_F5, KC_F7, KC_F9, KC_DEL, + KC_F11, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_RGHT, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, + BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_VOLU, KC_MUTE + ), + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/primekb/prime_o/keymaps/default/readme.md b/keyboards/primekb/prime_o/keymaps/default/readme.md new file mode 100644 index 0000000000..e6e7a1dc9d --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for prime_o \ No newline at end of file diff --git a/keyboards/primekb/prime_o/prime_o.c b/keyboards/primekb/prime_o/prime_o.c new file mode 100644 index 0000000000..d603cc6c9e --- /dev/null +++ b/keyboards/primekb/prime_o/prime_o.c @@ -0,0 +1,43 @@ +/* Copyright 2018 REPLACE_WITH_YOUR_NAME + * + * 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 "prime_o.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/primekb/prime_o/prime_o.h b/keyboards/primekb/prime_o/prime_o.h new file mode 100644 index 0000000000..1ec7277b04 --- /dev/null +++ b/keyboards/primekb/prime_o/prime_o.h @@ -0,0 +1,40 @@ +/* Copyright 2018 Jumail Mundekkat + * + * 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 . + */ +#ifndef PRIME_O_H +#define PRIME_O_H + +#include "quantum.h" + +#define LAYOUT( \ + K000, K001, K002, K003, K004, K005, K006, K007, K010, K011, K012, K013, K014, K015, K016, K017, \ + K020, K021, K022, K023, K024, K025, K026, K027, K030, K031, K032, K033, K034, K035, K036, K037, \ + K040, K041, K042, K043, K044, K045, K046, K047, K050, K051, K052, K053, K054, K055, K056, K057, \ + K060, K061, K062, K063, K064, K065, K066, K067, K070, K071, K072, K073, K074, K075, K076, K077, \ + K080, K081, K082, K083, K084, K085, K086, K087, K090, K091, K092, K093, K094, K095, K096, K097 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007 }, \ + { K010, K011, K012, K013, K014, K015, K016, K017 }, \ + { K020, K021, K022, K023, K024, K025, K026, K027 }, \ + { K030, K031, K032, K033, K034, K035, K036, K037 }, \ + { K040, K041, K042, K043, K044, K045, K046, K047 }, \ + { K050, K051, K052, K053, K054, K055, K056, K057 }, \ + { K060, K061, K062, K063, K064, K065, K066, K067 }, \ + { K070, K071, K072, K073, K074, K075, K076, K077 }, \ + { K080, K081, K082, K083, K084, K085, K086, K087 }, \ + { K090, K091, K092, K093, K094, K095, K096, K097 } \ +} + +#endif diff --git a/keyboards/primekb/prime_o/readme.md b/keyboards/primekb/prime_o/readme.md new file mode 100644 index 0000000000..fe91a86b9e --- /dev/null +++ b/keyboards/primekb/prime_o/readme.md @@ -0,0 +1,15 @@ +# Prime_O + +![Prime_O](https://i.imgur.com/ujbBdja.jpg) + +A 16x5 ortholinear keyboard that has many layout options, including: full grid, left- or right-side full sized numpads, and Many spacebar locations. Standard in-switch backlighting. See primekb.com for full details of possible layouts. + +Keyboard Maintainer: [MxBlue](https://github.com/MxBlu) +Hardware Supported: Prime_O PCB, ATMega32u2 +Hardware Availability: GB + +Make example for this keyboard (after setting up your build environment): + + make primekb/prime_o:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/primekb/prime_o/rules.mk b/keyboards/primekb/prime_o/rules.mk new file mode 100644 index 0000000000..8d3b835f18 --- /dev/null +++ b/keyboards/primekb/prime_o/rules.mk @@ -0,0 +1,80 @@ +# MCU name +MCU = atmega32u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) diff --git a/keyboards/prime_r/config.h b/keyboards/primekb/prime_r/config.h similarity index 100% rename from keyboards/prime_r/config.h rename to keyboards/primekb/prime_r/config.h diff --git a/keyboards/prime_r/info.json b/keyboards/primekb/prime_r/info.json similarity index 100% rename from keyboards/prime_r/info.json rename to keyboards/primekb/prime_r/info.json diff --git a/keyboards/prime_r/keymaps/default/config.h b/keyboards/primekb/prime_r/keymaps/default/config.h similarity index 100% rename from keyboards/prime_r/keymaps/default/config.h rename to keyboards/primekb/prime_r/keymaps/default/config.h diff --git a/keyboards/prime_r/keymaps/default/keymap.c b/keyboards/primekb/prime_r/keymaps/default/keymap.c similarity index 100% rename from keyboards/prime_r/keymaps/default/keymap.c rename to keyboards/primekb/prime_r/keymaps/default/keymap.c diff --git a/keyboards/prime_r/keymaps/default/readme.md b/keyboards/primekb/prime_r/keymaps/default/readme.md similarity index 100% rename from keyboards/prime_r/keymaps/default/readme.md rename to keyboards/primekb/prime_r/keymaps/default/readme.md diff --git a/keyboards/prime_r/keymaps/rooski/config.h b/keyboards/primekb/prime_r/keymaps/rooski/config.h similarity index 100% rename from keyboards/prime_r/keymaps/rooski/config.h rename to keyboards/primekb/prime_r/keymaps/rooski/config.h diff --git a/keyboards/prime_r/keymaps/rooski/keymap.c b/keyboards/primekb/prime_r/keymaps/rooski/keymap.c similarity index 100% rename from keyboards/prime_r/keymaps/rooski/keymap.c rename to keyboards/primekb/prime_r/keymaps/rooski/keymap.c diff --git a/keyboards/prime_r/keymaps/rooski/readme.md b/keyboards/primekb/prime_r/keymaps/rooski/readme.md similarity index 100% rename from keyboards/prime_r/keymaps/rooski/readme.md rename to keyboards/primekb/prime_r/keymaps/rooski/readme.md diff --git a/keyboards/prime_r/keymaps/rooski/rules.mk b/keyboards/primekb/prime_r/keymaps/rooski/rules.mk similarity index 100% rename from keyboards/prime_r/keymaps/rooski/rules.mk rename to keyboards/primekb/prime_r/keymaps/rooski/rules.mk diff --git a/keyboards/prime_r/prime_r.c b/keyboards/primekb/prime_r/prime_r.c similarity index 100% rename from keyboards/prime_r/prime_r.c rename to keyboards/primekb/prime_r/prime_r.c diff --git a/keyboards/prime_r/prime_r.h b/keyboards/primekb/prime_r/prime_r.h similarity index 100% rename from keyboards/prime_r/prime_r.h rename to keyboards/primekb/prime_r/prime_r.h diff --git a/keyboards/prime_r/readme.md b/keyboards/primekb/prime_r/readme.md similarity index 63% rename from keyboards/prime_r/readme.md rename to keyboards/primekb/prime_r/readme.md index 7a77b20738..dfce62e1af 100644 --- a/keyboards/prime_r/readme.md +++ b/keyboards/primekb/prime_r/readme.md @@ -12,7 +12,6 @@ Hardware Availability: [Prime_KB](https://www.primekb.com/) Make example for this keyboard (after setting up your build environment): - make prime_r:default - -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. + make primekb/prime_r:default +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/prime_r/rules.mk b/keyboards/primekb/prime_r/rules.mk similarity index 100% rename from keyboards/prime_r/rules.mk rename to keyboards/primekb/prime_r/rules.mk From 747cf78b5da17969fe057d77512e276fa6c59fd9 Mon Sep 17 00:00:00 2001 From: Danny Date: Thu, 20 Sep 2018 18:37:18 -0400 Subject: [PATCH 014/269] Add nano keymap for modding Spooka light (#3953) --- keyboards/nano/config.h | 5 +---- keyboards/nano/keymaps/default/rules.mk | 3 --- keyboards/nano/keymaps/spooka/config.h | 25 +++++++++++++++++++++++++ keyboards/nano/keymaps/spooka/keymap.c | 12 ++++++++++++ keyboards/nano/keymaps/spooka/rules.mk | 1 + 5 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 keyboards/nano/keymaps/spooka/config.h create mode 100644 keyboards/nano/keymaps/spooka/keymap.c create mode 100644 keyboards/nano/keymaps/spooka/rules.mk diff --git a/keyboards/nano/config.h b/keyboards/nano/config.h index 5c4f920dfe..088fafcaa5 100644 --- a/keyboards/nano/config.h +++ b/keyboards/nano/config.h @@ -33,12 +33,9 @@ along with this program. If not, see . #define MATRIX_COLS 4 /* ws2812 RGB LED */ -#define RGB_DI_PIN B1 -#define RGBLIGHT_TIMER +#define RGB_DI_PIN D3 #define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 6 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/nano/keymaps/default/rules.mk b/keyboards/nano/keymaps/default/rules.mk index 457a3d01d4..e69de29bb2 100644 --- a/keyboards/nano/keymaps/default/rules.mk +++ b/keyboards/nano/keymaps/default/rules.mk @@ -1,3 +0,0 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/nano/keymaps/spooka/config.h b/keyboards/nano/keymaps/spooka/config.h new file mode 100644 index 0000000000..05900a215b --- /dev/null +++ b/keyboards/nano/keymaps/spooka/config.h @@ -0,0 +1,25 @@ +/* +Copyright 2018 Danny Nguyen + +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 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 12 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/nano/keymaps/spooka/keymap.c b/keyboards/nano/keymaps/spooka/keymap.c new file mode 100644 index 0000000000..63b90da09f --- /dev/null +++ b/keyboards/nano/keymaps/spooka/keymap.c @@ -0,0 +1,12 @@ +#include QMK_KEYBOARD_H + +#define _MAIN 0 + +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_MAIN] = LAYOUT( + RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, + RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD + ) +}; diff --git a/keyboards/nano/keymaps/spooka/rules.mk b/keyboards/nano/keymaps/spooka/rules.mk new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/keyboards/nano/keymaps/spooka/rules.mk @@ -0,0 +1 @@ + From 35e76539e7257a1932ec76882892b999e21c9d4f Mon Sep 17 00:00:00 2001 From: Alexander Kagno Date: Sat, 22 Sep 2018 09:43:28 -0600 Subject: [PATCH 015/269] Keymap: Arkag Userspace and MechMini2 Layout (#3958) * deleting arkag branch, forcibly moving changes over to master * fade_color function added, not tested * added half functions some stuff * surround_type function implemented and working. * added flashing function and removed fading, flashing supports infinite flashing along with controlled number flashes * added a fade state machine and functionality * build optimizations, changed fade to bounce between bounds rather than roll over, added a HALMAK layout * changes to sleep breath function, changed how I will switch to HALMAK * support for halmak added * support for activity detection added, condensed fading and flashing state machines, removed support for HALMAK and COLEMAK because arkag is stupid * changed sleep and inactive behaviors, now the color shifting reverses on state change, yay! save_color and reset_color are made to enable layer color changing to look cooler. * reformatted some if statements in state detection * changes to force fade to pause on boot, or plug in. * Attempting to move over to userspace, pushing to repository for help * userspace stuff.... * userspace stuff.... * layout changes, working userspace, Removed left side shift and replaced it with a MT() for LSFT and SPC. Userspace seems to be working properly now! HURRAY * Layout change Removed space/shift and reset modifiers to what they were originally. Added homerow modifiers. * Removed excessive tabs in files * Moved mods on homerow around... * changes recommended by @drashna --- keyboards/mechmini/v2/keymaps/arkag/config.h | 7 + keyboards/mechmini/v2/keymaps/arkag/keymap.c | 40 ++ keyboards/mechmini/v2/keymaps/arkag/rules.mk | 16 + users/arkag/arkag.c | 573 +++++++++++++++++++ users/arkag/arkag.h | 161 ++++++ users/arkag/config.h | 5 + users/arkag/readme.md | 14 + users/arkag/rules.mk | 1 + 8 files changed, 817 insertions(+) create mode 100644 keyboards/mechmini/v2/keymaps/arkag/config.h create mode 100644 keyboards/mechmini/v2/keymaps/arkag/keymap.c create mode 100644 keyboards/mechmini/v2/keymaps/arkag/rules.mk create mode 100644 users/arkag/arkag.c create mode 100644 users/arkag/arkag.h create mode 100644 users/arkag/config.h create mode 100644 users/arkag/readme.md create mode 100644 users/arkag/rules.mk diff --git a/keyboards/mechmini/v2/keymaps/arkag/config.h b/keyboards/mechmini/v2/keymaps/arkag/config.h new file mode 100644 index 0000000000..f5f3a90fa7 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/arkag/config.h @@ -0,0 +1,7 @@ +#pragma once + +// save me space! +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION +#define DISABLE_LEADER +#define NO_MUSIC_MODE diff --git a/keyboards/mechmini/v2/keymaps/arkag/keymap.c b/keyboards/mechmini/v2/keymaps/arkag/keymap.c new file mode 100644 index 0000000000..10502a5b61 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/arkag/keymap.c @@ -0,0 +1,40 @@ +#include QMK_KEYBOARD_H +#include "arkag.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_2u_space_ortho( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, TAP_A, TAP_S, TAP_D, TAP_F, KC_G, KC_H, TAP_J, TAP_K, TAP_L, TAP_SCN, QUOTE, + XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT, + M_PMOD, LRALT, M_SMOD, LOWER, RAISE, KC_SPC, KC_SLSH, LAZY, KC_LEFT, KC_DOWN, KC_RGHT), + + [_RAISE] = LAYOUT_2u_space_ortho( + GRAVE, KC_1, KC_2, THREE, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + _______, OBRACK, CBRACK, TAP_EQ, HYPHEN, _______, _______, KC_4, TAP_5, KC_6, _______, KC_NLCK, + _______, _______, _______, CEDILLA, _______, KC_COMM, KC_PDOT, KC_1, KC_2, KC_3, KC_PPLS, KC_PENT, + _______, _______, _______, KEEB, _______, _______, _______, M_OS, KC_PSLS, KC_PMNS, KC_PAST), + + [_LOWER] = LAYOUT_2u_space_ortho( + _______, _______, _______, _______, _______, _______, _______, M_ULIN, M_ITAL, _______, M_P_B, M_C_A_D, + _______, _______, STRIKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_CAPS, KC_DEL, _______, _______, _______, M_BOLD, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, MEDIA, KC_BSLS, M_CALC, KC_HOME, KC_PGDN, KC_END), + + [_KEEB] = LAYOUT_2u_space_ortho( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + _______, BL_TOGG, BL_STEP, BL_INC, BL_DEC, BL_BRTG, _______, _______, _______, _______, _______, _______, + RGB_M_P, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [_MEDIA] = LAYOUT_2u_space_ortho( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), + + [_LAZY] = LAYOUT_2u_space_ortho( + _______, _______, _______, _______, _______, M_TM, _______, M_SNIPT, M_SHRUG, _______, _______, _______, + _______, _______, _______, _______, _______, M_GGT, _______, M_UF, M_LOD, M_REPO, _______, _______, + _______, _______, _______, _______, _______, _______, _______, M_TF, M_LENNY, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; diff --git a/keyboards/mechmini/v2/keymaps/arkag/rules.mk b/keyboards/mechmini/v2/keymaps/arkag/rules.mk new file mode 100644 index 0000000000..d6c210e9e8 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/arkag/rules.mk @@ -0,0 +1,16 @@ +BOOTMAGIC_ENABLE = no +MOUSEKEY_ENABLE = no +STENO_ENABLE = no +EXTRAKEY_ENABLE = yes +CONSOLE_ENABLE = no +COMMAND_ENABLE = no +SLEEP_LED_ENABLE = no +NKRO_ENABLE = yes +BACKLIGHT_ENABLE = yes +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = yes +UNICODE_ENABLE = yes + +# save me space! +EXTRAFLAGS += -flto diff --git a/users/arkag/arkag.c b/users/arkag/arkag.c new file mode 100644 index 0000000000..c716b5e93f --- /dev/null +++ b/users/arkag/arkag.c @@ -0,0 +1,573 @@ +#include "arkag.h" + +// Start: Written by konstantin: vomindoraan +#include +#include +#include + +void send_unicode_hex_string(const char *str) { + if (!str) { return; } // Saftey net + while (*str) { + // Find the next code point (token) in the string + for (; *str == ' '; str++); + size_t n = strcspn(str, " "); // Length of the current token + char code_point[n+1]; + strncpy(code_point, str, n); + code_point[n] = '\0'; // Make sure it's null-terminated + + // Normalize the code point: make all hex digits lowercase + for (char *p = code_point; *p; p++) { + *p = tolower(*p); + } + + // Send the code point as a Unicode input string + unicode_input_start(); + send_string(code_point); + unicode_input_finish(); + str += n; // Move to the first ' ' (or '\0') after the current token + } +} +// End: Written by konstantin: vomindoraan + +uint8_t current_os, mod_primary_mask, fade_delay; +uint16_t flash_timer_one, flash_timer_two, + fade_timer_one, fade_timer_two, + active_timer_one, active_timer_two, + elapsed = 0, + num_extra_flashes_off = 0; +Color underglow, + flash_color, + saved_color, + hsv_none = {0,0,0}, + hsv_white = {0,0,127}; +flashState flash_state = no_flash; +fadeState fade_state = add_fade; +activityState state = boot; + +void set_color (Color new, bool update) { + rgblight_sethsv_eeprom_helper(new.h, new.s, new.v, update); +} + +void save_color(Color to_save) { + saved_color = to_save; +} + +void reset_color(void) { + underglow = saved_color; +} + +Color mod_color(Color current_color, bool should_add, uint8_t change_amount) { + save_color(underglow); + int addlim = 359 - change_amount; + int sublim = change_amount; + int leftovers; + if (should_add) { + if (current_color.h <= addlim) { + current_color.h += change_amount; + } else { + leftovers = (359 + change_amount) % 359; + current_color.h = 0 + leftovers; + } + } else { + if (current_color.h >= sublim) { + current_color.h -= change_amount; + } else { + leftovers = change_amount - current_color.h; + current_color.h = 359 - leftovers; + } + } + return current_color; +} + +void reverse_fade (void) { + if (fade_state == add_fade){ + fade_state = sub_fade; + } else { + fade_state = add_fade; + } +} + +void check_state (void) { + static bool activated, deactivated, slept; + switch (state) { + case active: + if (!activated) { + fade_delay = LED_FADE_DELAY; + reverse_fade(); + activated = true; + deactivated = false; + } + active_timer_two = timer_read(); + elapsed = active_timer_two - active_timer_one; + if (elapsed < INACTIVE_DELAY) {return;} + state = inactive; + return; + + case inactive: + if (!deactivated) { + fade_delay = LED_FADE_DELAY * 2; + reverse_fade(); + deactivated = true; + slept = false; + activated = false; + } + active_timer_two = timer_read(); + elapsed = active_timer_two - active_timer_one; + if (elapsed < SLEEP_DELAY) {return;} + state = sleeping; + return; + + case sleeping: + if (!slept) { + fade_delay = LED_FADE_DELAY * 6; + reverse_fade(); + slept = true; + deactivated = false; + activated = false; + } + return; + + case boot: + return; + } +} + +void fade_rgb (void) { + static bool ran_once; + if (flash_state != no_flash) {return;} + if (state == boot) {return;} + switch (fade_state) { + case add_fade: + if (!ran_once) { + fade_timer_one = timer_read(); + ran_once = true; + } + fade_timer_two = timer_read(); + elapsed = fade_timer_two - fade_timer_one; + if (elapsed < fade_delay) {return;} + if (underglow.h == 359) { + fade_state = sub_fade; + return; + } + underglow.h = underglow.h + 1; + set_color(underglow, false); + // set_color_at(underglow, 0); + fade_timer_one = fade_timer_two; + return; + + case sub_fade: + fade_timer_two = timer_read(); + elapsed = fade_timer_two - fade_timer_one; + if (elapsed < fade_delay) {return;} + if (underglow.h == 0) { + fade_state = add_fade; + return; + } + underglow.h = underglow.h - 1; + set_color(underglow, false); + // set_color_at(underglow, 0); + fade_timer_one = fade_timer_two; + return; + } +} + +void flash_rgb (void) { + static bool ran_once; + switch(flash_state) { + case no_flash: + return; + + case flash_off: + if (!ran_once) { + set_color(hsv_none, false); + flash_timer_one = timer_read(); + ran_once = true; + flash_state = flash_on; + return; + } + flash_timer_two = timer_read(); + elapsed = flash_timer_two - flash_timer_one; + if (elapsed >= LED_FLASH_DELAY) { + set_color(hsv_none, false); + flash_timer_one = timer_read(); + flash_state = flash_on; + } + return; + + case flash_on: + flash_timer_two = timer_read(); + elapsed = flash_timer_two - flash_timer_one; + if (elapsed >= LED_FLASH_DELAY) { + set_color(flash_color, false); + flash_timer_one = timer_read(); + if (num_extra_flashes_off > 0) { + flash_state = flash_off; + num_extra_flashes_off--; + } else { + set_color(underglow, false); + flash_state = no_flash; + ran_once = false; + } + } + return; + } +} + +void set_os (uint8_t os, bool update) { + current_os = os; + if (update) { + eeprom_update_byte(EECONFIG_USERSPACE, current_os); + } + switch (os) { + case OS_MAC: + set_unicode_input_mode(UC_OSX); + underglow = (Color){ 300, 255, 255 }; + mod_primary_mask = MOD_GUI_MASK; + break; + case OS_WIN: + set_unicode_input_mode(UC_WINC); + underglow = (Color){ 180, 255, 255 }; + mod_primary_mask = MOD_CTL_MASK; + break; + case OS_NIX: + set_unicode_input_mode(UC_LNX); + underglow = (Color){ 60, 255, 255 }; + mod_primary_mask = MOD_CTL_MASK; + break; + default: + underglow = (Color){ 0, 0, 255 }; + mod_primary_mask = MOD_CTL_MASK; + } + set_color(underglow, update); + flash_color = underglow; + flash_state = flash_off; + num_extra_flashes_off = 1; +} + +void tap_key(uint8_t keycode) { + register_code(keycode); + unregister_code(keycode); +} + +// register GUI if Mac or Ctrl if other +void pri_mod(bool press) { + if (press) { + if (current_os == OS_MAC) { + register_code(KC_LGUI); + } else { + register_code(KC_LCTL); + } + } else { + if (current_os == OS_MAC) { + unregister_code(KC_LGUI); + } else { + unregister_code(KC_LCTL); + } + } +} + +// register Ctrl if Mac or GUI if other +void sec_mod(bool press) { + if (press) { + if (current_os == OS_MAC) { + register_code(KC_LCTL); + } else { + register_code(KC_LGUI); + } + } else { + if (current_os == OS_MAC) { + unregister_code(KC_LCTL); + } else { + unregister_code(KC_LGUI); + } + } +} + +void surround_type(uint8_t num_of_chars, uint16_t keycode, bool use_shift) { + if (use_shift) { + register_code(KC_LSFT); + } + for (int i = 0; i < num_of_chars; i++) { + tap_key(keycode); + } + if (use_shift) { + unregister_code(KC_LSFT); + } + for (int i = 0; i < (num_of_chars/2); i++) { + tap_key(KC_LEFT); + } +} + +void long_keystroke(size_t num_of_keys, uint16_t keys[]) { + for (int i = 0; i < num_of_keys-1; i++) { + register_code(keys[i]); + } + tap_key(keys[num_of_keys-1]); + for (int i = 0; i < num_of_keys-1; i++) { + unregister_code(keys[i]); + } +} + +void dance_grv (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + tap_key(KC_GRV); + } else if (state->count == 2) { + surround_type(2, KC_GRAVE, false); + } else { + surround_type(6, KC_GRAVE, false); + } +} + +void dance_quot (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + tap_key(KC_QUOT); + } else if (state->count == 2) { + surround_type(2, KC_QUOTE, false); + } else if (state->count == 3) { + surround_type(2, KC_QUOTE, true); + } +} + +void dance_strk (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + surround_type(4, KC_TILDE, true); + } else if (state->count == 2) { + if (current_os == OS_MAC) { + long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_4}); + } else if (current_os == OS_WIN) { + long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_S}); + } else { + return; + } + } +} + +void dance_3 (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + tap_key(KC_3); + } else if (state->count == 2) { + send_unicode_hex_string("00E8"); + } else if (state->count == 3) { + send_unicode_hex_string("00E9"); + } +} + +void dance_c (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + tap_key(KC_C); + } else if (state->count == 2) { + send_unicode_hex_string("00E7"); + } +} + +void matrix_init_user(void) { + current_os = eeprom_read_byte(EECONFIG_USERSPACE); + set_os(current_os, false); +} + +void matrix_scan_user(void) { + check_state(); + flash_rgb(); + fade_rgb(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case M_PMOD: + if (record->event.pressed) { + pri_mod(true); + } else { + pri_mod(false); + } + return false; + + case M_SMOD: + if (record->event.pressed) { + sec_mod(true); + } else { + sec_mod(false); + } + return false; + + case M_P_B: + if (record->event.pressed) { + if (current_os == OS_WIN) { + SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_PAUSE) SS_UP(X_LGUI)); + } else { + } + } + return false; + + case M_C_A_D: + if (record->event.pressed) { + if (current_os == OS_WIN) { + SEND_STRING(SS_DOWN(X_LCTRL) SS_DOWN(X_LALT) SS_TAP(X_DELETE) SS_UP(X_LALT) SS_UP(X_LCTRL)); + } else { + } + } + return false; + + case M_CALC: + if (record->event.pressed) { + if (current_os == OS_WIN) { + SEND_STRING(SS_TAP(X_CALCULATOR)); + } else if (current_os == OS_MAC) { + SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_SPACE) SS_UP(X_LGUI) "calculator" SS_TAP(X_ENTER)); + } + } + return false; + + case M_OS: + if (record->event.pressed) { + set_os((current_os+1) % _OS_COUNT, true); + } + return false; + + case M_LOD: + if (record->event.pressed) { + send_unicode_hex_string("0CA0 005F 005F 0CA0"); + } + return false; + + case M_LENNY: + if (record->event.pressed) { + send_unicode_hex_string("0028 0020 0361 00B0 0020 035C 0296 0020 0361 00B0 0029"); + } + return false; + + + case M_TF: + if (record->event.pressed) { + send_unicode_hex_string("0028 256F 2035 0414 2032 0029 256F 5F61 253B 2501 253B"); + } + return false; + + case M_UF: + if (record->event.pressed) { + send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 0020 30CE 0029"); + } + return false; + + case M_SHRUG: + if (record->event.pressed) { + send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); + } + return false; + + case M_TM: + if (record->event.pressed) { + send_unicode_hex_string("2122"); + } + return false; + + case M_REPO: + if (record->event.pressed) { + SEND_STRING("https://github.com/arkag/qmk_firmware/tree/master/keyboards/mechmini/v2/keymaps/arkag"); + } + return false; + + case M_GGT: + if (record->event.pressed) { + SEND_STRING("@GrahamGoldenTech.com"); + } + return false; + + case M_SNIPT: + if (record->event.pressed) { + surround_type(6, KC_GRAVE, false); + pri_mod(true); + tap_key(KC_V); + pri_mod(false); + tap_key(KC_RGHT); + tap_key(KC_RGHT); + tap_key(KC_RGHT); + tap_key(KC_ENTER); + } + return false; + + case M_BOLD: + if (record->event.pressed) { + surround_type(4, KC_8, true); + } + return false; + + case M_ITAL: + if (record->event.pressed) { + surround_type(2, KC_8, true); + } + return false; + + case M_ULIN: + if (record->event.pressed) { + surround_type(4, KC_MINS, true); + } + return false; + + case KC_LSFT: + if (record->event.pressed) { + set_color(mod_color(underglow, true, 50), false); + SEND_STRING(SS_DOWN(X_LSHIFT)); + } else { + set_color(underglow, false); + SEND_STRING(SS_UP(X_LSHIFT)); + } + return false; + + case MEDIA: + case LAZY: + case KEEB: + case RAISE: + case LOWER: + return true; + + default: + if (record->event.pressed) { + active_timer_one = timer_read(); + state = active; + } + return true; + } +} + +uint32_t layer_state_set_user(uint32_t state) { + switch (biton32(state)) { + case _LAZY: + save_color(underglow); + underglow = mod_color(underglow, true, 50); + break; + case _MEDIA: + save_color(underglow); + underglow = mod_color(underglow, true, 150); + break; + case _KEEB: + save_color(underglow); + underglow = mod_color(underglow, false, 150); + break; + case _LOWER: + save_color(underglow); + underglow = mod_color(underglow, false, 100); + break; + case _RAISE: + save_color(underglow); + underglow = mod_color(underglow, true, 100); + break; + default: + reset_color(); + break; + } + set_color(underglow, false); + return state; +} + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_3_GRV_ACT] = ACTION_TAP_DANCE_FN (dance_3), + [TD_C_CED] = ACTION_TAP_DANCE_FN (dance_c), + [TD_GRV_3GRV] = ACTION_TAP_DANCE_FN (dance_grv), + [TD_SING_DOUB] = ACTION_TAP_DANCE_FN (dance_quot), + [TD_STRK_SHOT] = ACTION_TAP_DANCE_FN (dance_strk), + [TD_HYPH_UNDR] = ACTION_TAP_DANCE_DOUBLE (KC_MINS, LSFT(KC_MINS)), + [TD_BRCK_PARN_O] = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, LSFT(KC_9)), + [TD_BRCK_PARN_C] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, LSFT(KC_0)), + [TD_LALT_RALT] = ACTION_TAP_DANCE_DOUBLE (KC_LALT, KC_RALT), +}; diff --git a/users/arkag/arkag.h b/users/arkag/arkag.h new file mode 100644 index 0000000000..9c81e4487c --- /dev/null +++ b/users/arkag/arkag.h @@ -0,0 +1,161 @@ +#pragma once + +#include "quantum.h" +#include "process_keycode/process_tap_dance.h" + +#define EECONFIG_USERSPACE (uint8_t *)20 + +#define LRALT TD(TD_LALT_RALT) +#define QUOTE TD(TD_SING_DOUB) +#define GRAVE TD(TD_GRV_3GRV) +#define OBRACK TD(TD_BRCK_PARN_O) +#define CBRACK TD(TD_BRCK_PARN_C) +#define THREE TD(TD_3_GRV_ACT) +#define STRIKE TD(TD_STRK_SHOT) +#define HYPHEN TD(TD_HYPH_UNDR) +#define CEDILLA TD(TD_C_CED) + +#define RAISE MO(1) +#define LOWER MO(2) +#define KEEB MO(3) +#define MEDIA MO(4) +#define LAZY MO(5) + +#define MOD_CTL_MASK (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) +#define MOD_GUI_MASK (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) +#define MOD_SFT_MASK (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) + +#define TAP_A LALT_T(KC_A) +#define TAP_SCN RALT_T(KC_SCOLON) + +#define TAP_S LCTL_T(KC_S) +#define TAP_L RCTL_T(KC_L) + +#define TAP_D LSFT_T(KC_D) +#define TAP_K RSFT_T(KC_K) + +#define TAP_F LGUI_T(KC_F) +#define TAP_J RGUI_T(KC_J) + +#define TAP_EQ LSFT_T(KC_EQUAL) +#define TAP_5 RSFT_T(KC_5) + +#define LED_FLASH_DELAY 150 +#define LED_FADE_DELAY 10 + +#define INACTIVE_DELAY 200 +#define SLEEP_DELAY 60000 + +enum { + _QWERTY = 0, + _RAISE, + _LOWER, + _KEEB, + _MEDIA, + _LAZY, +}; + +typedef enum { + OS_MAC, // Don't assign values + OS_WIN, + OS_NIX, + _OS_COUNT, +} OS; + +typedef struct { + uint16_t h; + uint8_t s; + uint8_t v; +} Color; + +typedef enum { + no_flash = 0, + flash_off, + flash_on, +} flashState; + +typedef enum { + add_fade = 0, + sub_fade, +} fadeState; + +typedef enum { + active = 0, + inactive, + sleeping, + boot, +} activityState; + +enum custom_keycodes { + M_PMOD = SAFE_RANGE, + M_SMOD, + M_P_B, + M_C_A_D, + M_CALC, + M_OS, + M_TF, + M_TM, + M_GGT, + M_LOD, + M_LENNY, + M_BOLD, + M_ITAL, + M_ULIN, + M_SNIPT, + M_REPO, + M_SHRUG, + M_UF, +}; + +enum tapdances { + TD_3_GRV_ACT = 0, + TD_C_CED, + TD_GRV_3GRV, + TD_SLSH_HTTP, + TD_SING_DOUB, + TD_HYPH_UNDR, + TD_STRK_SHOT, + TD_SPECIAL, + TD_BRCK_PARN_O, + TD_BRCK_PARN_C, + TD_LALT_RALT, + SPC_SFT_NSFT, +}; + +void send_unicode_hex_string(const char *str); + +void set_color (Color new, bool update); +void save_color(Color to_save); +void reset_color(void); + +Color mod_color(Color current_color, bool should_add, uint8_t change_amount); + +void reverse_fade (void); + +void check_state (void); + +void fade_rgb (void); + +void flash_rgb (void); + +void set_os (uint8_t os, bool update); + +void tap_key(uint8_t keycode); + +void pri_mod(bool press); + +void sec_mod(bool press); + +void surround_type(uint8_t num_of_chars, uint16_t keycode, bool use_shift); + +void long_keystroke(size_t num_of_keys, uint16_t keys[]); + +void dance_grv (qk_tap_dance_state_t *state, void *user_data); +void dance_quot (qk_tap_dance_state_t *state, void *user_data); +void dance_strk (qk_tap_dance_state_t *state, void *user_data); +void dance_3 (qk_tap_dance_state_t *state, void *user_data); +void dance_c (qk_tap_dance_state_t *state, void *user_data); + +int cur_dance (qk_tap_dance_state_t *state); +void spc_finished (qk_tap_dance_state_t *state, void *user_data); +void spc_reset (qk_tap_dance_state_t *state, void *user_data); diff --git a/users/arkag/config.h b/users/arkag/config.h new file mode 100644 index 0000000000..e715e5534e --- /dev/null +++ b/users/arkag/config.h @@ -0,0 +1,5 @@ +#pragma once + +#define TAPPING_TERM 200 + +#define IGNORE_MOD_TAP_INTERRUPT diff --git a/users/arkag/readme.md b/users/arkag/readme.md new file mode 100644 index 0000000000..76a5c4525b --- /dev/null +++ b/users/arkag/readme.md @@ -0,0 +1,14 @@ +Copyright 2018 arkag arkag@pm.me + +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 . diff --git a/users/arkag/rules.mk b/users/arkag/rules.mk new file mode 100644 index 0000000000..3513f0ea6c --- /dev/null +++ b/users/arkag/rules.mk @@ -0,0 +1 @@ + SRC += arkag.c From 57ec309d3e05732094408834b00af9cfd1ffca62 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Sun, 23 Sep 2018 13:48:48 -0700 Subject: [PATCH 016/269] Keyboard: Panc60 (#3961) * initial check in * figure out the column pins * temporary keymap * guess the row pins * fix matrix.c compilation errors * use the LAYOUT_60_hhkb macro and tweak the keymap a little bit * update readme * Put my name everywhere * Add QMK Configurator support * figured out the row pins * update readme to have reset info * Fill in some blanks that are documentation related * Update matrix.c * add kb functions * forego kbfirmware labeling * add arrows and caps lock to function layer. * add a LAYOUT_60 and LAYOUT_all macro * missed a comma * add configurator support for the two new LAYOUT macros * Jack helped me with a new custom matrix * add 60_ansi into rules.mk --- keyboards/panc60/config.h | 46 +++ keyboards/panc60/i2c.c | 106 ++++++ keyboards/panc60/i2c.h | 27 ++ keyboards/panc60/info.json | 20 ++ keyboards/panc60/keymaps/default/config.h | 19 + keyboards/panc60/keymaps/default/keymap.c | 60 ++++ keyboards/panc60/keymaps/default/readme.md | 1 + keyboards/panc60/matrix.c | 145 ++++++++ keyboards/panc60/panc60.c | 25 ++ keyboards/panc60/panc60.h | 71 ++++ keyboards/panc60/readme.md | 46 +++ keyboards/panc60/rules.mk | 52 +++ keyboards/panc60/usbconfig.h | 396 +++++++++++++++++++++ 13 files changed, 1014 insertions(+) create mode 100644 keyboards/panc60/config.h create mode 100644 keyboards/panc60/i2c.c create mode 100644 keyboards/panc60/i2c.h create mode 100644 keyboards/panc60/info.json create mode 100644 keyboards/panc60/keymaps/default/config.h create mode 100644 keyboards/panc60/keymaps/default/keymap.c create mode 100644 keyboards/panc60/keymaps/default/readme.md create mode 100644 keyboards/panc60/matrix.c create mode 100644 keyboards/panc60/panc60.c create mode 100644 keyboards/panc60/panc60.h create mode 100644 keyboards/panc60/readme.md create mode 100644 keyboards/panc60/rules.mk create mode 100644 keyboards/panc60/usbconfig.h diff --git a/keyboards/panc60/config.h b/keyboards/panc60/config.h new file mode 100644 index 0000000000..703141bebf --- /dev/null +++ b/keyboards/panc60/config.h @@ -0,0 +1,46 @@ +/* +Copyright 2017 Luiz Ribeiro + +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 + +#include "config_common.h" + +#define VENDOR_ID 0x20A0 +#define PRODUCT_ID 0x422D +#define MANUFACTURER Panc Interactive +#define PRODUCT panc60 + +#define RGBLED_NUM 12 + +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +#define MATRIX_ROW_PINS { B3, B4, B5, B6, B7 } +#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 } +#define UNUSED_PINS + +#define DIODE_DIRECTION COL2ROW +#define DEBOUNCING_DELAY 5 + +#define NO_BACKLIGHT_CLOCK +#define BACKLIGHT_LEVELS 1 +#define RGBLIGHT_ANIMATIONS + +#define NO_UART 1 + +/* key combination for command */ +#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) diff --git a/keyboards/panc60/i2c.c b/keyboards/panc60/i2c.c new file mode 100644 index 0000000000..e8c4455ad1 --- /dev/null +++ b/keyboards/panc60/i2c.c @@ -0,0 +1,106 @@ +/* +Copyright 2016 Luiz Ribeiro + +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 . +*/ + +// Please do not modify this file + +#include +#include + +#include "i2c.h" + +void i2c_set_bitrate(uint16_t bitrate_khz) { + uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz); + if (bitrate_div >= 16) { + bitrate_div = (bitrate_div - 16) / 2; + } + TWBR = bitrate_div; +} + +void i2c_init(void) { + // set pull-up resistors on I2C bus pins + PORTC |= 0b11; + + i2c_set_bitrate(400); + + // enable TWI (two-wire interface) + TWCR |= (1 << TWEN); + + // enable TWI interrupt and slave address ACK + TWCR |= (1 << TWIE); + TWCR |= (1 << TWEA); +} + +uint8_t i2c_start(uint8_t address) { + // reset TWI control register + TWCR = 0; + + // begin transmission and wait for it to end + TWCR = (1< + +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 . +*/ + +// Please do not modify this file + +#ifndef __I2C_H__ +#define __I2C_H__ + +void i2c_init(void); +void i2c_set_bitrate(uint16_t bitrate_khz); +uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length); + +#endif diff --git a/keyboards/panc60/info.json b/keyboards/panc60/info.json new file mode 100644 index 0000000000..fe919e8b91 --- /dev/null +++ b/keyboards/panc60/info.json @@ -0,0 +1,20 @@ +{ + "keyboard_name": "panc60", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "LAYOUT_all": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}] + }, + + "LAYOUT_60_ansi": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}] + }, + + "LAYOUT_60_hhkb": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}] + } + } +} diff --git a/keyboards/panc60/keymaps/default/config.h b/keyboards/panc60/keymaps/default/config.h new file mode 100644 index 0000000000..a3ed4f762a --- /dev/null +++ b/keyboards/panc60/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 MechMerlin + * + * 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 + +// place overrides here diff --git a/keyboards/panc60/keymaps/default/keymap.c b/keyboards/panc60/keymaps/default/keymap.c new file mode 100644 index 0000000000..2754d89ff5 --- /dev/null +++ b/keyboards/panc60/keymaps/default/keymap.c @@ -0,0 +1,60 @@ +/* Copyright 2018 MechMerlin + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = LAYOUT_60_hhkb( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(1), + KC_RGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI), + + [1] = LAYOUT_60_hhkb( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_RIGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} diff --git a/keyboards/panc60/keymaps/default/readme.md b/keyboards/panc60/keymaps/default/readme.md new file mode 100644 index 0000000000..3aa3cdb4c6 --- /dev/null +++ b/keyboards/panc60/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for panc60 diff --git a/keyboards/panc60/matrix.c b/keyboards/panc60/matrix.c new file mode 100644 index 0000000000..cf0f63837b --- /dev/null +++ b/keyboards/panc60/matrix.c @@ -0,0 +1,145 @@ +/* +Copyright 2018 Jack Humbert + +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 +#include +#include +#include "matrix.h" + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { } + +__attribute__ ((weak)) +void matrix_scan_user(void) { } + +// #define MATRIX_ROW_PINS { B3, B4, B5, B6, B7 } +// #define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 } + +static uint8_t debouncing = DEBOUNCE; + +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +void matrix_init(void) { + + // disables JTAG so we can use them as columns + MCUCSR = (1<. + */ +#include "panc60.h" + +#include +#include "action_layer.h" +#include "i2c.h" +#include "quantum.h" + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} diff --git a/keyboards/panc60/panc60.h b/keyboards/panc60/panc60.h new file mode 100644 index 0000000000..95dcb1f90b --- /dev/null +++ b/keyboards/panc60/panc60.h @@ -0,0 +1,71 @@ +/* Copyright 2018 MechMerlin + * + * 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 . + */ +#ifndef PANC60_H +#define PANC60_H + +#include "quantum.h" + +/* This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT_all( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \ + 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, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \ + K40, K41, K42, K47, K49, K4A, K4B, K4C, K4D \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, K4B, K4C, K4D, KC_NO } \ +} + +#define LAYOUT_60_ansi( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \ + 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, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K41, K42, K47, K49, K4A, K4C, K4D \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \ + { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO }, \ + { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \ +} + +#define LAYOUT_60_hhkb( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \ + 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, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ + K41, K42, K47, K4A, K4C \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \ + { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \ + { KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, KC_NO, K4C, KC_NO, KC_NO } \ +} + +#endif diff --git a/keyboards/panc60/readme.md b/keyboards/panc60/readme.md new file mode 100644 index 0000000000..05ac3d72be --- /dev/null +++ b/keyboards/panc60/readme.md @@ -0,0 +1,46 @@ +# panc60 + +![panc60](https://imgix.ttcdn.co/i/product/original/0/670893-eca4599c4aad489dbe62609ac2fed86e.jpeg?q=100&auto=format%2Ccompress&w=500) + +The panc60 is a 60% PCB with backlight and rgb underglow. + +Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Jack Humbert](https://github.com/jackhumbert) +Hardware Supported: panc60 PCB +Hardware Availability: [PANC Interactive](https://store.panc.co/product/panc60-60-pcb) + +Make example for this keyboard (after setting up your build environment): + + make panc60:default + +Flashing + +ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods. + +To put the panc60 into reset, hold left control while plugging in. + +Windows: +1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash). +2. Place your keyboard into reset. +3. Press the `Find Device` button and ensure that your keyboard is found. +4. Press the `Open .hex File` button and locate the `.hex` file you created. +5. Press the `Flash Device` button and wait for the process to complete. + +macOS: +1. Install homebrew by typing the following: + ``` + /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + ``` +2. Install `crosspack-avr`. + ``` + brew cask install crosspack-avr + ``` +3. Install the following packages: + ``` + brew install python + brew install pyusb + brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb + +4. Place your keyboard into reset. +5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/panc60/rules.mk b/keyboards/panc60/rules.mk new file mode 100644 index 0000000000..fcb14d0ae0 --- /dev/null +++ b/keyboards/panc60/rules.mk @@ -0,0 +1,52 @@ +# Copyright 2017 Luiz Ribeiro +# +# 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 . + +# MCU name +MCU = atmega32a +PROTOCOL = VUSB + +# unsupported features for now +NO_UART = yes +NO_SUSPEND_POWER_DOWN = yes + +# processor frequency +F_CPU = 12000000 + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = bootloadHID + +# build options +BOOTMAGIC_ENABLE = yes +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes +CONSOLE_ENABLE = yes +COMMAND_ENABLE = yes +BACKLIGHT_ENABLE = no +RGBLIGHT_ENABLE = no +RGBLIGHT_CUSTOM_DRIVER = yes + +OPT_DEFS = -DDEBUG_LEVEL=0 + +# custom matrix setup +CUSTOM_MATRIX = yes +SRC = matrix.c i2c.c + +# programming options +PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex + +LAYOUTS = 60_ansi 60_hhkb diff --git a/keyboards/panc60/usbconfig.h b/keyboards/panc60/usbconfig.h new file mode 100644 index 0000000000..d2d848fcdc --- /dev/null +++ b/keyboards/panc60/usbconfig.h @@ -0,0 +1,396 @@ +/* Name: usbconfig.h + * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers + * Author: Christian Starkjohann + * Creation Date: 2005-04-01 + * Tabsize: 4 + * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH + * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) + * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $ + */ + +#ifndef __usbconfig_h_included__ +#define __usbconfig_h_included__ + +#include "config.h" + +/* +General Description: +This file is an example configuration (with inline documentation) for the USB +driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is +also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may +wire the lines to any other port, as long as D+ is also wired to INT0 (or any +other hardware interrupt, as long as it is the highest level interrupt, see +section at the end of this file). +*/ + +/* ---------------------------- Hardware Config ---------------------------- */ + +#define USB_CFG_IOPORTNAME D +/* This is the port where the USB bus is connected. When you configure it to + * "B", the registers PORTB, PINB and DDRB will be used. + */ +#define USB_CFG_DMINUS_BIT 3 +/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected. + * This may be any bit in the port. + */ +#define USB_CFG_DPLUS_BIT 2 +/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected. + * This may be any bit in the port. Please note that D+ must also be connected + * to interrupt pin INT0! [You can also use other interrupts, see section + * "Optional MCU Description" below, or you can connect D- to the interrupt, as + * it is required if you use the USB_COUNT_SOF feature. If you use D- for the + * interrupt, the USB interrupt will also be triggered at Start-Of-Frame + * markers every millisecond.] + */ +#define USB_CFG_CLOCK_KHZ (F_CPU/1000) +/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000, + * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code + * require no crystal, they tolerate +/- 1% deviation from the nominal + * frequency. All other rates require a precision of 2000 ppm and thus a + * crystal! + * Since F_CPU should be defined to your actual clock rate anyway, you should + * not need to modify this setting. + */ +#define USB_CFG_CHECK_CRC 0 +/* Define this to 1 if you want that the driver checks integrity of incoming + * data packets (CRC checks). CRC checks cost quite a bit of code size and are + * currently only available for 18 MHz crystal clock. You must choose + * USB_CFG_CLOCK_KHZ = 18000 if you enable this option. + */ + +/* ----------------------- Optional Hardware Config ------------------------ */ + +/* #define USB_CFG_PULLUP_IOPORTNAME D */ +/* If you connect the 1.5k pullup resistor from D- to a port pin instead of + * V+, you can connect and disconnect the device from firmware by calling + * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h). + * This constant defines the port on which the pullup resistor is connected. + */ +/* #define USB_CFG_PULLUP_BIT 4 */ +/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined + * above) where the 1.5k pullup resistor is connected. See description + * above for details. + */ + +/* --------------------------- Functional Range ---------------------------- */ + +#define USB_CFG_HAVE_INTRIN_ENDPOINT 1 +/* Define this to 1 if you want to compile a version with two endpoints: The + * default control endpoint 0 and an interrupt-in endpoint (any other endpoint + * number). + */ +#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1 +/* Define this to 1 if you want to compile a version with three endpoints: The + * default control endpoint 0, an interrupt-in endpoint 3 (or the number + * configured below) and a catch-all default interrupt-in endpoint as above. + * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature. + */ +#define USB_CFG_EP3_NUMBER 3 +/* If the so-called endpoint 3 is used, it can now be configured to any other + * endpoint number (except 0) with this macro. Default if undefined is 3. + */ +/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */ +/* The above macro defines the startup condition for data toggling on the + * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1. + * Since the token is toggled BEFORE sending any data, the first packet is + * sent with the oposite value of this configuration! + */ +#define USB_CFG_IMPLEMENT_HALT 0 +/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature + * for endpoint 1 (interrupt endpoint). Although you may not need this feature, + * it is required by the standard. We have made it a config option because it + * bloats the code considerably. + */ +#define USB_CFG_SUPPRESS_INTR_CODE 0 +/* Define this to 1 if you want to declare interrupt-in endpoints, but don't + * want to send any data over them. If this macro is defined to 1, functions + * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if + * you need the interrupt-in endpoints in order to comply to an interface + * (e.g. HID), but never want to send any data. This option saves a couple + * of bytes in flash memory and the transmit buffers in RAM. + */ +#define USB_CFG_INTR_POLL_INTERVAL 1 +/* If you compile a version with endpoint 1 (interrupt-in), this is the poll + * interval. The value is in milliseconds and must not be less than 10 ms for + * low speed devices. + */ +#define USB_CFG_IS_SELF_POWERED 0 +/* Define this to 1 if the device has its own power supply. Set it to 0 if the + * device is powered from the USB bus. + */ +#define USB_CFG_MAX_BUS_POWER 500 +/* Set this variable to the maximum USB bus power consumption of your device. + * The value is in milliamperes. [It will be divided by two since USB + * communicates power requirements in units of 2 mA.] + */ +#define USB_CFG_IMPLEMENT_FN_WRITE 1 +/* Set this to 1 if you want usbFunctionWrite() to be called for control-out + * transfers. Set it to 0 if you don't need it and want to save a couple of + * bytes. + */ +#define USB_CFG_IMPLEMENT_FN_READ 0 +/* Set this to 1 if you need to send control replies which are generated + * "on the fly" when usbFunctionRead() is called. If you only want to send + * data from a static buffer, set it to 0 and return the data from + * usbFunctionSetup(). This saves a couple of bytes. + */ +#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0 +/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints. + * You must implement the function usbFunctionWriteOut() which receives all + * interrupt/bulk data sent to any endpoint other than 0. The endpoint number + * can be found in 'usbRxToken'. + */ +#define USB_CFG_HAVE_FLOWCONTROL 0 +/* Define this to 1 if you want flowcontrol over USB data. See the definition + * of the macros usbDisableAllRequests() and usbEnableAllRequests() in + * usbdrv.h. + */ +#define USB_CFG_DRIVER_FLASH_PAGE 0 +/* If the device has more than 64 kBytes of flash, define this to the 64 k page + * where the driver's constants (descriptors) are located. Or in other words: + * Define this to 1 for boot loaders on the ATMega128. + */ +#define USB_CFG_LONG_TRANSFERS 0 +/* Define this to 1 if you want to send/receive blocks of more than 254 bytes + * in a single control-in or control-out transfer. Note that the capability + * for long transfers increases the driver size. + */ +/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */ +/* This macro is a hook if you want to do unconventional things. If it is + * defined, it's inserted at the beginning of received message processing. + * If you eat the received message and don't want default processing to + * proceed, do a return after doing your things. One possible application + * (besides debugging) is to flash a status LED on each packet. + */ +/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */ +/* This macro is a hook if you need to know when an USB RESET occurs. It has + * one parameter which distinguishes between the start of RESET state and its + * end. + */ +/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */ +/* This macro (if defined) is executed when a USB SET_ADDRESS request was + * received. + */ +#define USB_COUNT_SOF 1 +/* define this macro to 1 if you need the global variable "usbSofCount" which + * counts SOF packets. This feature requires that the hardware interrupt is + * connected to D- instead of D+. + */ +/* #ifdef __ASSEMBLER__ + * macro myAssemblerMacro + * in YL, TCNT0 + * sts timer0Snapshot, YL + * endm + * #endif + * #define USB_SOF_HOOK myAssemblerMacro + * This macro (if defined) is executed in the assembler module when a + * Start Of Frame condition is detected. It is recommended to define it to + * the name of an assembler macro which is defined here as well so that more + * than one assembler instruction can be used. The macro may use the register + * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages + * immediately after an SOF pulse may be lost and must be retried by the host. + * What can you do with this hook? Since the SOF signal occurs exactly every + * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in + * designs running on the internal RC oscillator. + * Please note that Start Of Frame detection works only if D- is wired to the + * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES! + */ +#define USB_CFG_CHECK_DATA_TOGGLING 0 +/* define this macro to 1 if you want to filter out duplicate data packets + * sent by the host. Duplicates occur only as a consequence of communication + * errors, when the host does not receive an ACK. Please note that you need to + * implement the filtering yourself in usbFunctionWriteOut() and + * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable + * for each control- and out-endpoint to check for duplicate packets. + */ +#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0 +/* define this macro to 1 if you want the function usbMeasureFrameLength() + * compiled in. This function can be used to calibrate the AVR's RC oscillator. + */ +#define USB_USE_FAST_CRC 0 +/* The assembler module has two implementations for the CRC algorithm. One is + * faster, the other is smaller. This CRC routine is only used for transmitted + * messages where timing is not critical. The faster routine needs 31 cycles + * per byte while the smaller one needs 61 to 69 cycles. The faster routine + * may be worth the 32 bytes bigger code size if you transmit lots of data and + * run the AVR close to its limit. + */ + +/* -------------------------- Device Description --------------------------- */ + +#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF) +/* USB vendor ID for the device, low byte first. If you have registered your + * own Vendor ID, define it here. Otherwise you may use one of obdev's free + * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF) +/* This is the ID of the product, low byte first. It is interpreted in the + * scope of the vendor ID. If you have registered your own VID with usb.org + * or if you have licensed a PID from somebody else, define it here. Otherwise + * you may use one of obdev's free shared VID/PID pairs. See the file + * USB-IDs-for-free.txt for details! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_VERSION 0x00, 0x02 +/* Version number of the device: Minor number first, then major number. + */ +#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r' +#define USB_CFG_VENDOR_NAME_LEN 13 +/* These two values define the vendor name returned by the USB device. The name + * must be given as a list of characters under single quotes. The characters + * are interpreted as Unicode (UTF-16) entities. + * If you don't want a vendor name string, undefine these macros. + * ALWAYS define a vendor name containing your Internet domain name if you use + * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for + * details. + */ +#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B' +#define USB_CFG_DEVICE_NAME_LEN 8 +/* Same as above for the device name. If you don't want a device name, undefine + * the macros. See the file USB-IDs-for-free.txt before you assign a name if + * you use a shared VID/PID. + */ +/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */ +/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */ +/* Same as above for the serial number. If you don't want a serial number, + * undefine the macros. + * It may be useful to provide the serial number through other means than at + * compile time. See the section about descriptor properties below for how + * to fine tune control over USB descriptors such as the string descriptor + * for the serial number. + */ +#define USB_CFG_DEVICE_CLASS 0 +#define USB_CFG_DEVICE_SUBCLASS 0 +/* See USB specification if you want to conform to an existing device class. + * Class 0xff is "vendor specific". + */ +#define USB_CFG_INTERFACE_CLASS 3 /* HID */ +#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */ +#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */ +/* See USB specification if you want to conform to an existing device class or + * protocol. The following classes must be set at interface level: + * HID class is 3, no subclass and protocol required (but may be useful!) + * CDC class is 2, use subclass 2 and protocol 1 for ACM + */ +#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0 +/* Define this to the length of the HID report descriptor, if you implement + * an HID device. Otherwise don't define it or define it to 0. + * If you use this define, you must add a PROGMEM character array named + * "usbHidReportDescriptor" to your code which contains the report descriptor. + * Don't forget to keep the array and this define in sync! + */ + +/* #define USB_PUBLIC static */ +/* Use the define above if you #include usbdrv.c instead of linking against it. + * This technique saves a couple of bytes in flash memory. + */ + +/* ------------------- Fine Control over USB Descriptors ------------------- */ +/* If you don't want to use the driver's default USB descriptors, you can + * provide our own. These can be provided as (1) fixed length static data in + * flash memory, (2) fixed length static data in RAM or (3) dynamically at + * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more + * information about this function. + * Descriptor handling is configured through the descriptor's properties. If + * no properties are defined or if they are 0, the default descriptor is used. + * Possible properties are: + * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched + * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is + * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if + * you want RAM pointers. + * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found + * in static memory is in RAM, not in flash memory. + * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash), + * the driver must know the descriptor's length. The descriptor itself is + * found at the address of a well known identifier (see below). + * List of static descriptor names (must be declared PROGMEM if in flash): + * char usbDescriptorDevice[]; + * char usbDescriptorConfiguration[]; + * char usbDescriptorHidReport[]; + * char usbDescriptorString0[]; + * int usbDescriptorStringVendor[]; + * int usbDescriptorStringDevice[]; + * int usbDescriptorStringSerialNumber[]; + * Other descriptors can't be provided statically, they must be provided + * dynamically at runtime. + * + * Descriptor properties are or-ed or added together, e.g.: + * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18)) + * + * The following descriptors are defined: + * USB_CFG_DESCR_PROPS_DEVICE + * USB_CFG_DESCR_PROPS_CONFIGURATION + * USB_CFG_DESCR_PROPS_STRINGS + * USB_CFG_DESCR_PROPS_STRING_0 + * USB_CFG_DESCR_PROPS_STRING_VENDOR + * USB_CFG_DESCR_PROPS_STRING_PRODUCT + * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER + * USB_CFG_DESCR_PROPS_HID + * USB_CFG_DESCR_PROPS_HID_REPORT + * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver) + * + * Note about string descriptors: String descriptors are not just strings, they + * are Unicode strings prefixed with a 2 byte header. Example: + * int serialNumberDescriptor[] = { + * USB_STRING_DESCRIPTOR_HEADER(6), + * 'S', 'e', 'r', 'i', 'a', 'l' + * }; + */ + +#define USB_CFG_DESCR_PROPS_DEVICE 0 +#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0 +#define USB_CFG_DESCR_PROPS_STRINGS 0 +#define USB_CFG_DESCR_PROPS_STRING_0 0 +#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0 +#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0 +#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0 +#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_HID 0 +#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_HID_REPORT 0 +#define USB_CFG_DESCR_PROPS_UNKNOWN 0 + +#define usbMsgPtr_t unsigned short +/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to + * a scalar type here because gcc generates slightly shorter code for scalar + * arithmetics than for pointer arithmetics. Remove this define for backward + * type compatibility or define it to an 8 bit type if you use data in RAM only + * and all RAM is below 256 bytes (tiny memory model in IAR CC). + */ + +/* ----------------------- Optional MCU Description ------------------------ */ + +/* The following configurations have working defaults in usbdrv.h. You + * usually don't need to set them explicitly. Only if you want to run + * the driver on a device which is not yet supported or with a compiler + * which is not fully supported (such as IAR C) or if you use a differnt + * interrupt than INT0, you may have to define some of these. + */ +/* #define USB_INTR_CFG MCUCR */ +/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */ +/* #define USB_INTR_CFG_CLR 0 */ +/* #define USB_INTR_ENABLE GIMSK */ +/* #define USB_INTR_ENABLE_BIT INT0 */ +/* #define USB_INTR_PENDING GIFR */ +/* #define USB_INTR_PENDING_BIT INTF0 */ +/* #define USB_INTR_VECTOR INT0_vect */ + +/* Set INT1 for D- falling edge to count SOF */ +/* #define USB_INTR_CFG EICRA */ +#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10)) +/* #define USB_INTR_CFG_CLR 0 */ +/* #define USB_INTR_ENABLE EIMSK */ +#define USB_INTR_ENABLE_BIT INT1 +/* #define USB_INTR_PENDING EIFR */ +#define USB_INTR_PENDING_BIT INTF1 +#define USB_INTR_VECTOR INT1_vect + +#endif /* __usbconfig_h_included__ */ From 58b9b22670c2c36e8502826349d8f752d8b3ab37 Mon Sep 17 00:00:00 2001 From: Luca Date: Sun, 23 Sep 2018 22:49:17 +0200 Subject: [PATCH 017/269] Circuitry sample for PS/2 Mouse (#3959) Added a sample circuitry for handling the connection of a PS/2 Mouse. Even if it's written that a circuitry is needed, there're a lot of other things and the information gets lost really fast. A really simple sample helps to remember who wants to implement the functionality about the circuitry. --- docs/feature_ps2_mouse.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/feature_ps2_mouse.md b/docs/feature_ps2_mouse.md index 909406e7d2..01e2cc63db 100644 --- a/docs/feature_ps2_mouse.md +++ b/docs/feature_ps2_mouse.md @@ -6,6 +6,24 @@ To hook up a Trackpoint, you need to obtain a Trackpoint module (i.e. harvest fr There are three available modes for hooking up PS/2 devices: USART (best), interrupts (better) or busywait (not recommended). +### The Cirtuitry between Trackpoint and Controller + +To get the things working, a 4.7K drag is needed between the two lines DATA and CLK and the line 5+. + +``` + + DATA ----------+--------- PIN + | + 4.7K + | +MODULE 5+ --------+--+--------- PWR CONTROLLER + | + 4.7K + | + CLK ------+------------ PIN +``` + + ### Busywait Version Note: This is not recommended, you may encounter jerky movement or unsent inputs. Please use interrupt or USART version if possible. From ce057ea47448d0df2a05efa419f61563649a5821 Mon Sep 17 00:00:00 2001 From: listofoptions <39714365+listofoptions@users.noreply.github.com> Date: Sun, 23 Sep 2018 21:46:53 -0400 Subject: [PATCH 018/269] Keyboard: HP 46010A converter (#3967) * funged git history, restarting * tested and working (message typed on this) * updated documentation to include wiring directions * formatting * updated matrix and default layout a bit * getting ready for merge into main repo * getting ready for merge into main repo v2 * cleaning * cleaning repo of extranious files * updated documentation --- keyboards/converter/hp_46010a/config.h | 35 +++ keyboards/converter/hp_46010a/hp_46010a.c | 3 + keyboards/converter/hp_46010a/hp_46010a.h | 62 +++++ keyboards/converter/hp_46010a/info.json | 6 + .../hp_46010a/keymaps/default/keymap.c | 45 ++++ keyboards/converter/hp_46010a/matrix.c | 244 ++++++++++++++++++ keyboards/converter/hp_46010a/readme.md | 52 ++++ keyboards/converter/hp_46010a/rules.mk | 72 ++++++ 8 files changed, 519 insertions(+) create mode 100644 keyboards/converter/hp_46010a/config.h create mode 100644 keyboards/converter/hp_46010a/hp_46010a.c create mode 100644 keyboards/converter/hp_46010a/hp_46010a.h create mode 100644 keyboards/converter/hp_46010a/info.json create mode 100644 keyboards/converter/hp_46010a/keymaps/default/keymap.c create mode 100644 keyboards/converter/hp_46010a/matrix.c create mode 100644 keyboards/converter/hp_46010a/readme.md create mode 100644 keyboards/converter/hp_46010a/rules.mk diff --git a/keyboards/converter/hp_46010a/config.h b/keyboards/converter/hp_46010a/config.h new file mode 100644 index 0000000000..f77ed4115f --- /dev/null +++ b/keyboards/converter/hp_46010a/config.h @@ -0,0 +1,35 @@ +/* +Copyright 2018 listofoptions + +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 + +#include "config_common.h" + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 1 +#define MANUFACTURER QMK +#define PRODUCT 46010A keyboard converter +#define DESCRIPTION 46010A keyboard converter + +#define MATRIX_ROWS 14 +#define MATRIX_COLS 8 + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + + diff --git a/keyboards/converter/hp_46010a/hp_46010a.c b/keyboards/converter/hp_46010a/hp_46010a.c new file mode 100644 index 0000000000..915a220f91 --- /dev/null +++ b/keyboards/converter/hp_46010a/hp_46010a.c @@ -0,0 +1,3 @@ +#include "hp_46010a.h" +#include +#include "quantum.h" \ No newline at end of file diff --git a/keyboards/converter/hp_46010a/hp_46010a.h b/keyboards/converter/hp_46010a/hp_46010a.h new file mode 100644 index 0000000000..db64ce24a5 --- /dev/null +++ b/keyboards/converter/hp_46010a/hp_46010a.h @@ -0,0 +1,62 @@ +/* +Copyright 2018 listofoptions + +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 + +#include "quantum.h" + +/* ,---------. ,---------------------------------------------------------. ,---------. ,-------------------. + * | res|stop| | f1| f2| f3| f4|menu|user| f5| f6| f7| f8| |clrl|clrd| | | | | | + * `---------' `---------------------------------------------------------' `---------' `-------------------' + * ,------------------------------------------------------------------------..---------. ,-------------------. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| +| back||insl|dell| | *| /| +| -| + * |------------------------------------------------------------------------||---------| |-------------------| + * | tab| q| w| e| r| t| y| u| i| o| p| [| ]| \||insc|delc| | 7| 8| 9|pade| + * |------------------------------------------------------------------------||---------| |-------------------| + * |caps|ctrl| a| s| d| f| g| h| j| k| l| ;| '| retr|| cur|prev| | 4| 5| 6| ,| + * |------------------------------------------------------------------------------------ |-------------------| + * |dele|lshf | z| x| c| v| b| n| m| ,| .| /|rshf |sel | up|next| | 1| 2| 3| tab| + * |-------------------------------------------------------------------------|---------| |--------------- | + * |prnt| |lalt| space |ralt| |left|down|rght| | 0| .| | + * `-----------------------------------------------------------------------------------' `-------------------' + */ + +#define LAYOUT_HP_46010A( \ + KEY_RES, KEY_STOP, KEY_F1, KEY_F2, KEY_F3, KEY_F4,KEY_MENU,KEY_USER, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_CLRL, KEY_CLRD, KEY_B1, KEY_B2, KEY_B3, KEY_B4, \ + KEY_GRAV, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINU, KEY_PLUS, KEY_BACK, KEY_INSL, KEY_DELL, KEY_MULT, KEY_DIV, KEY_ADD, KEY_SUBT, \ + KEY_TAB, KEY_Q,KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_LBRA, KEY_RBRA, KEY_PIPE, KEY_INSC, KEY_DELC, KEY_P7, KEY_P8, KEY_P9, KEY_PADE, \ + KEY_CAPS, KEY_CTRL, KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_SEMI, KEY_QUOT, KEY_RETR, KEY_CUR, KEY_PREV, KEY_P4, KEY_P5, KEY_P6, KEY_PCOM, \ + KEY_DELE, KEY_LSHF, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMA, KEY_DOT, KEY_SLAS,KEY_RSHF, KEY_SEL, KEY_UP, KEY_NEXT, KEY_P1, KEY_P2, KEY_P3, KEY_PTAB, \ + KEY_PRNT, KEY_LALT, KEY_SPACE , KEY_RALT, KEY_LEFT, KEY_DOWN, KEY_RGHT, KEY_P0, KEY_PDOT \ +) { \ + {KEY_USER, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_CLRL, KEY_CLRD, KEY_MENU }, \ + {KEY_9, KEY_0, KEY_MINU, KEY_PLUS, KEY_BACK, KEY_INSL, KEY_DELL, KEY_8 }, \ + {KEY_O, KEY_P, KEY_LBRA, KEY_RBRA, KEY_PIPE, KEY_INSC, KEY_DELC, KEY_I }, \ + {KEY_K, KEY_L, KEY_SEMI, KEY_QUOT, KEY_RETR, KEY_CUR, KEY_PREV, KEY_J }, \ + {KEY_COMA, KEY_DOT, KEY_SLAS, KEY_1, KEY_SEL, KEY_UP, KEY_NEXT, KEY_M }, \ + {KEY_SPACE, KEY_LALT, KEY_RALT, KC_NO, KEY_LEFT, KEY_DOWN, KEY_RGHT, KC_NO }, \ + {KEY_F3, KEY_F2, KEY_F1, KEY_GRAV, KEY_CTRL, KEY_STOP, KEY_G, KEY_F4 }, \ + {KEY_6, KEY_5, KEY_4, KEY_3, KEY_CAPS, KEY_RSHF, KEY_LSHF, KEY_7 }, \ + {KEY_Y, KEY_T, KEY_R, KEY_E, KEY_W, KEY_Q, KEY_TAB, KEY_U }, \ + {KEY_RES, KEY_F, KEY_D, KEY_S, KEY_A, KC_NO, KEY_2, KEY_H }, \ + {KEY_P7, KEY_P4, KEY_P8, KEY_P5, KEY_P9, KEY_P6, KEY_PADE, KEY_PCOM }, \ + {KEY_MULT, KEY_P1, KEY_DIV, KEY_P2, KEY_PLUS, KEY_P3, KEY_MINU, KEY_PTAB }, \ + {KEY_B1, KEY_P0, KEY_B2, KC_NO, KEY_B3, KEY_PDOT, KEY_B4, KC_NO }, \ + {KEY_B, KEY_V, KEY_C, KEY_X, KEY_Z, KEY_PRNT, KEY_DELE, KEY_N }, \ +} + +#define LAYOUT LAYOUT_HP_46010A diff --git a/keyboards/converter/hp_46010a/info.json b/keyboards/converter/hp_46010a/info.json new file mode 100644 index 0000000000..de68a12285 --- /dev/null +++ b/keyboards/converter/hp_46010a/info.json @@ -0,0 +1,6 @@ +{ + "keyboard_name": "HP_46010A", + "keyboard_folder": "converter/HP_46010A", + "url": "https://deskthority.net/wiki/HP_46010A", + "maintainer": "listofoptions", +} diff --git a/keyboards/converter/hp_46010a/keymaps/default/keymap.c b/keyboards/converter/hp_46010a/keymaps/default/keymap.c new file mode 100644 index 0000000000..cb65bd422e --- /dev/null +++ b/keyboards/converter/hp_46010a/keymaps/default/keymap.c @@ -0,0 +1,45 @@ +/* +Copyright 2018 listofoptions + +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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* ,---------. ,---------------------------------------------------------. ,---------. ,-------------------. + * | esc|xxxx| | f1| f2| f3| f4|xxxx|xxxx| f5| f6| f7| f8| |xxxx|xxxx| | f9| f10| f11| f12| + * `---------' `---------------------------------------------------------' `---------' `-------------------' + * ,------------------------------------------------------------------------..---------. ,-------------------. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| back||ins |home| | *| /| +| -| + * |------------------------------------------------------------------------||---------| |-------------------| + * | tab| q| w| e| r| t| y| u| i| o| p| [| ]| \||del | end| | 7| 8| 9|pade| + * |------------------------------------------------------------------------||---------| |-------------------| + * |caps|ctrl| a| s| d| f| g| h| j| k| l| ;| '| retr||xxxx|pgup| | 4| 5| 6| ,| + * |------------------------------------------------------------------------------------ |-------------------| + * |del |lsft | z| x| c| v| b| n| m| ,| .| /|rsft | app| up|pgdn| | 1| 2| 3| tab| + * |-------------------------------------------------------------------------|---------| |--------------- | + * | gui| |lalt| space |ralt| |left|down|rght| | 0| .| | + * `-----------------------------------------------------------------------------------' `-------------------' + */ + + [0] = LAYOUT( + KC_ESC, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4,KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPC, KC_INS, KC_HOME, KC_PAST, KC_PSLS, KC_PPLS, KC_PMNS, \ + KC_TAB, KC_Q,KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_P7, KC_P8, KC_P9, KC_PENT, \ + KC_CAPS, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_NO, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PCMM, \ + KC_DEL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,KC_RSFT, KC_APP, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_TAB, \ + KC_LGUI, KC_LALT, KC_SPACE , KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \ + ) +} ; \ No newline at end of file diff --git a/keyboards/converter/hp_46010a/matrix.c b/keyboards/converter/hp_46010a/matrix.c new file mode 100644 index 0000000000..2ca7d0357e --- /dev/null +++ b/keyboards/converter/hp_46010a/matrix.c @@ -0,0 +1,244 @@ +/* +Copyright 2018 listofoptions + +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 +#include +#include +#if defined(__AVR__) +#include +#endif +#include + +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "timer.h" +#include "LUFA/Drivers/Peripheral/SPI.h" + +#include "config.h" + + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif + +#if ( DEBOUNCING_DELAY > 0 ) +static uint16_t debouncing_time ; +static bool debouncing = false ; +#endif + +static uint8_t matrix [MATRIX_ROWS] = {0}; + +#if ( DEBOUNCING_DELAY > 0 ) +static uint8_t matrix_debounce_old [MATRIX_ROWS] = {0}; +static uint8_t matrix_debounce_new [MATRIX_ROWS] = {0}; +#endif + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +// the keyboard's internal wiring is such that the inputs to the logic are +// a clock signal, and a reset line. +// the output is a single output pin. im bitbanging here, but the SPI controller +// would work normally +// +// the device functions, by using the clock signal to count 128 bits, the lower +// 3 bits of this 7 bit counter are tied to a 1-of-8 multiplexer, this forms +// the columns. +// the upper 4 bits form the rows, and are decoded using bcd to decimal +// decoders, so that 14 out of 16 of the outputs are wired to the rows of the +// matrix. each switch has a diode, such that the row signal feeds into the +// switch, and then into the diode, then into one of the columns into the +// matrix. the reset pin can be used to reset the entire counter. + +#define RESET _BV(PB0) +#define SCLK _BV(PB1) +#define SDATA _BV(PB3) +#define LED _BV(PD6) + +inline +static +void SCLK_increment(void) { + PORTB &= ~SCLK ; + _delay_us( 4 ) ; // make sure the line is stable + PORTB |= SCLK ; + _delay_us( 4 ) ; + + return ; +} + +inline +static +void Matrix_Reset(void) { + PORTB |= RESET ; + _delay_us( 4 ) ; // make sure the line is stable + PORTB &= ~RESET ; + + return ; +} + +inline +static +uint8_t Matrix_ReceiveByte (void) { + uint8_t received = 0 ; + uint8_t temp = 0 ; + for ( uint8_t bit = 0; bit < MATRIX_COLS; ++bit ) { + // toggle the clock + SCLK_increment(); + temp = (PINB & SDATA) << 4 ; + received |= temp >> bit ; + } + + return received ; +} + +inline +static +void Matrix_ThrowByte(void) { + // we use MATRIX_COLS - 1 here because that would put us at 7 clocks + for ( uint8_t bit = 0; bit < MATRIX_COLS - 1; ++bit ) { + // toggle the clock + SCLK_increment(); + } + + return ; +} + +void matrix_init () { + // debug_matrix = 1; + // PB0 (SS) and PB1 (SCLK) set to outputs + DDRB |= RESET | SCLK ; + // PB2, is unused, and PB3 is our serial input + DDRB &= ~SDATA ; + + // SS is reset for this board, and is active High + // SCLK is the serial clock and is active High + PORTB &= ~RESET ; + PORTB |= SCLK ; + + // led pin + DDRD |= LED ; + PORTD &= ~LED ; + + matrix_init_quantum(); + + //toggle reset, to put the keyboard logic into a known state + Matrix_Reset() ; +} + +uint8_t matrix_scan(void) { + + // the first byte of the keyboard's output data can be ignored + Matrix_ThrowByte(); + +#if ( DEBOUNCING_DELAY > 0 ) + + for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) { + //transfer old debouncing values + matrix_debounce_old[row] = matrix_debounce_new[row] ; + // read new key-states in + matrix_debounce_new[row] = Matrix_ReceiveByte() ; + + if ( matrix_debounce_new[row] != matrix_debounce_old[row] ) { + debouncing = true ; + debouncing_time = timer_read() ; + } + } + +#else + // without debouncing we simply just read in the raw matrix + for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) { + matrix[row] = Matrix_ReceiveByte ; + } +#endif + + +#if ( DEBOUNCING_DELAY > 0 ) + if ( debouncing && ( timer_elapsed( debouncing_time ) > DEBOUNCING_DELAY ) ) { + + for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) { + matrix[row] = matrix_debounce_new[row] ; + } + + debouncing = false ; + } +#endif + Matrix_Reset() ; + + matrix_scan_quantum() ; + return 1; +} + +inline +uint8_t matrix_get_row( uint8_t row ) { + return matrix[row]; +} + +void matrix_print(void) +{ + print("\nr/c 01234567\n"); + + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + phex(row); print(": "); + print_bin_reverse8(matrix_get_row(row)); + print("\n"); + } +} + +inline +uint8_t matrix_rows(void) { + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) { + return MATRIX_COLS; +} + +// as an aside, I used the M0110 converter: +// tmk_core/common/keyboard.c, quantum/matrix.c, and the project layout of the planck +// the online ducmentation starting from : +// https://docs.qmk.fm/#/config_options +// https://docs.qmk.fm/#/understanding_qmk +// and probably a few i forgot.... \ No newline at end of file diff --git a/keyboards/converter/hp_46010a/readme.md b/keyboards/converter/hp_46010a/readme.md new file mode 100644 index 0000000000..2321faa6e1 --- /dev/null +++ b/keyboards/converter/hp_46010a/readme.md @@ -0,0 +1,52 @@ +# HP 46010A + +![46010A](https://deskthority.net/w/images/a/a5/HP_46010A_--_top.jpg) + +A converter for the eponymous keyboard. + +Keyboard Maintainer: [Listofoptions](https://github.com/listofoptions) +Hardware Supported: HP 46010A, Teensy 2.0 + +Make example for this keyboard (after setting up your build environment): + + make converter/HP_46010A:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +to get a matrix created if your board uses a different one (i used the US layout) please see the following gists: +for the matrix itself: https://gist.github.com/listofoptions/cdf70d94767e9c6c027741850a24c568 +for the program to generate the matrix: https://gist.github.com/listofoptions/d245e370678024edbe5bed8c8ab17999 + +to build the actual converter, you are going to need to either splice into the a connector or, use a multi-meter to buzz/ohm out which wires go where. +from the bottom of the pcb the pins are arraged as follows: + + + 4 5 6 + 3 2 1 + + +connect a six pin modular connector of the 6p6c variaty. +then lop off the other end of the cable, striping the wires inside. +use the ohm-meter to find the corresponding wire for each pin on the bottom of the pcb + +the pin meanings are as follows: +1 reset +2 no connection +3 vcc +4 data out +5 clock +6 ground + +wire the ground and power pins to ground and 5v power on the teensy (or other avr device of your choice) +connect +on the teensy the connection is as follows + + +teensy | HP 46010A +----|----- +gnd | gnd (6) +vcc | vcc (3) +PB0 | reset (1) +PB1 | clock (5) +PB3 | data out (4) +gnd | no connection (2) -- optional diff --git a/keyboards/converter/hp_46010a/rules.mk b/keyboards/converter/hp_46010a/rules.mk new file mode 100644 index 0000000000..ddd2d593bd --- /dev/null +++ b/keyboards/converter/hp_46010a/rules.mk @@ -0,0 +1,72 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = halfkay + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +API_SYSEX_ENABLE = no +SPLIT_KEYBOARD = no +WAIT_FOR_USB = yes + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +LAYOUTS_HAS_RGB = NO + +CUSTOM_MATRIX = yes +SRC = matrix.c \ No newline at end of file From 07d317ab8877f935768e8798c1560242e3687847 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Sun, 23 Sep 2018 18:47:43 -0700 Subject: [PATCH 019/269] Keyboard: Crkbd: move I2C and Serial defines to keyboard's config.h (#3970) * Crkbd: move I2C and Serial defines to keyboard's config.h per @drashna on Discord * Crkbd: remove misleading comment re: I2C and Serial USE_I2C and USE_SERIAL are usually a "one or the other"-type deal, but this keyboard uses both. --- keyboards/crkbd/config.h | 3 +++ keyboards/crkbd/keymaps/default/config.h | 4 ---- keyboards/crkbd/keymaps/like_jis/config.h | 4 ---- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/keyboards/crkbd/config.h b/keyboards/crkbd/config.h index 64fee75457..4357a218d4 100644 --- a/keyboards/crkbd/config.h +++ b/keyboards/crkbd/config.h @@ -21,6 +21,9 @@ along with this program. If not, see . #include "config_common.h" #include +#define USE_I2C +#define USE_SERIAL + #ifdef USE_Link_Time_Optimization // LTO has issues with macros (action_get_macro) and "functions" (fn_actions), // so just disable them diff --git a/keyboards/crkbd/keymaps/default/config.h b/keyboards/crkbd/keymaps/default/config.h index c573530f74..644e813650 100644 --- a/keyboards/crkbd/keymaps/default/config.h +++ b/keyboards/crkbd/keymaps/default/config.h @@ -20,10 +20,6 @@ along with this program. If not, see . #pragma once -/* Use I2C or Serial */ - -#define USE_I2C -#define USE_SERIAL //#define USE_MATRIX_I2C /* Select hand configuration */ diff --git a/keyboards/crkbd/keymaps/like_jis/config.h b/keyboards/crkbd/keymaps/like_jis/config.h index 4c31cc7794..0e2960a937 100644 --- a/keyboards/crkbd/keymaps/like_jis/config.h +++ b/keyboards/crkbd/keymaps/like_jis/config.h @@ -20,10 +20,6 @@ along with this program. If not, see . #pragma once -/* Use I2C or Serial */ - -#define USE_I2C -#define USE_SERIAL //#define USE_MATRIX_I2C /* Select hand configuration */ From 9012f4c2e005253574f2af2887c2317d51c70405 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Sun, 23 Sep 2018 20:50:08 -0700 Subject: [PATCH 020/269] Keyboard: Crkbd: Configurator support and readme formatting (#3971) --- keyboards/crkbd/info.json | 62 +++++++++++++++++++++++++++++++++++++++ keyboards/crkbd/readme.md | 3 +- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 keyboards/crkbd/info.json diff --git a/keyboards/crkbd/info.json b/keyboards/crkbd/info.json new file mode 100644 index 0000000000..d74bb49430 --- /dev/null +++ b/keyboards/crkbd/info.json @@ -0,0 +1,62 @@ +{ + "keyboard_name": "crkbd (helidox) rev. 1", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 4.5, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"Esc", "x":0, "y":0.3}, + {"label":"Q", "x":1, "y":0.3}, + {"label":"W", "x":2, "y":0.1}, + {"label":"E", "x":3, "y":0}, + {"label":"R", "x":4, "y":0.1}, + {"label":"T", "x":5, "y":0.2}, + + {"label":"Y", "x":9, "y":0.2}, + {"label":"U", "x":10, "y":0.1}, + {"label":"I", "x":11, "y":0}, + {"label":"O", "x":12, "y":0.1}, + {"label":"P", "x":13, "y":0.3}, + {"label":"Back Space", "x":14, "y":0.3}, + + {"label":"Ctrl / Tab", "x":0, "y":1.3}, + {"label":"A", "x":1, "y":1.3}, + {"label":"S", "x":2, "y":1.1}, + {"label":"D", "x":3, "y":1}, + {"label":"F", "x":4, "y":1.1}, + {"label":"G", "x":5, "y":1.2}, + + {"label":"H", "x":9, "y":1.2}, + {"label":"J", "x":10, "y":1.1}, + {"label":"K", "x":11, "y":1}, + {"label":"L", "x":12, "y":1.1}, + {"label":";", "x":13, "y":1.3}, + {"label":"'", "x":14, "y":1.3}, + + {"label":"Shift", "x":0, "y":2.3}, + {"label":"Z", "x":1, "y":2.3}, + {"label":"X", "x":2, "y":2.1}, + {"label":"C", "x":3, "y":2}, + {"label":"V", "x":4, "y":2.1}, + {"label":"B", "x":5, "y":2.2}, + + {"label":"N", "x":9, "y":2.2}, + {"label":"M", "x":10, "y":2.1}, + {"label":",", "x":11, "y":2}, + {"label":".", "x":12, "y":2.1}, + {"label":"/", "x":13, "y":2.3}, + {"label":"Shift", "x":14, "y":2.3}, + + {"label":"GUI / KC_HANJ", "x":4, "y":3.7}, + {"label":"Lower", "x":5, "y":3.7}, + {"label":"Space", "x":6, "y":3.2, "h":1.5}, + + {"label":"Enter", "x":8, "y":3.2, "h":1.5}, + {"label":"Raise", "x":9, "y":3.7}, + {"label":"Alt / KC_HAEN", "x":10, "y":3.7} + ] + } + } +} diff --git a/keyboards/crkbd/readme.md b/keyboards/crkbd/readme.md index 2f9f047a47..591fdfe0da 100644 --- a/keyboards/crkbd/readme.md +++ b/keyboards/crkbd/readme.md @@ -10,8 +10,9 @@ A split keyboard with 3x6 vertically staggered keys and 3 thumb keys. Keyboard Maintainer: [foostan](https://github.com/foostan/) [@foostan](https://twitter.com/foostan) Hardware Supported: Crkbd PCB, Pro Micro Hardware Availability: [PCB & Case Data](https://github.com/foostan/crkbd) + Make example for this keyboard (after setting up your build environment): make crkbd:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). From b7e25f9ec4203670f2434e82608554ba284cf1f3 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Mon, 24 Sep 2018 20:39:17 -0700 Subject: [PATCH 021/269] Keyboard: DZ60 Bug: layout_directional is shifted to the left by one (#3978) * layout_directional is shifted to the left by one * forgot to adjust the physical layout --- keyboards/dz60/dz60.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h index b1089d3b64..3d0b0dd527 100644 --- a/keyboards/dz60/dz60.h +++ b/keyboards/dz60/dz60.h @@ -82,13 +82,13 @@ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K312, K313, K314, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \ K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \ ) { \ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, KC_NO, K312, K313, K314 }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ } From e72e4b6920299176a322a2862f930b7ee5f73dff Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 8 May 2018 18:46:29 -0700 Subject: [PATCH 022/269] Store Clicky status in EEPROM --- docs/feature_audio.md | 4 +--- quantum/audio/audio.c | 8 +++---- quantum/process_keycode/process_clicky.c | 14 ++++++------ users/drashna/drashna.c | 28 +++++++++++++++++------- users/drashna/drashna.h | 3 +-- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/docs/feature_audio.md b/docs/feature_audio.md index 039c62cdf1..fe210c09b9 100644 --- a/docs/feature_audio.md +++ b/docs/feature_audio.md @@ -128,13 +128,11 @@ This adds a click sound each time you hit a button, to simulate click sounds fro * `CK_UP` - Increases the frequency of the clicks * `CK_DOWN` - Decreases the frequency of the clicks + The feature is disabled by default, to save space. To enable it, add this to your `config.h`: #define AUDIO_CLICKY -Additionally, even when enabled, the feature is not enabled by default, so you would need to turn it on first. And since we don't use EEPROM to store the setting (yet), you can default this to on by adding this to your `config.h`: - - #define AUDIO_CLICKY_ON You can configure the default, min and max frequencies, the stepping and built in randomness by defining these values: diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index c948a60d6c..6d6833ec11 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -223,7 +223,7 @@ void audio_init() TCCR1B = (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (1 << CS11) | (0 << CS10); TIMER_1_PERIOD = (uint16_t)(((float)F_CPU) / (440 * CPU_PRESCALER)); TIMER_1_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (440 * CPU_PRESCALER)) * note_timbre); - #endif + #endif audio_initialized = true; } @@ -231,7 +231,7 @@ void audio_init() if (audio_config.enable) { PLAY_SONG(startup_song); } - + } void stop_all_notes() @@ -464,7 +464,7 @@ ISR(TIMER3_AUDIO_vect) note_position++; bool end_of_note = false; if (TIMER_3_PERIOD > 0) { - if (!note_resting) + if (!note_resting) end_of_note = (note_position >= (note_length / TIMER_3_PERIOD * 0xFFFF - 1)); else end_of_note = (note_position >= (note_length)); @@ -604,7 +604,7 @@ ISR(TIMER1_AUDIO_vect) note_position++; bool end_of_note = false; if (TIMER_1_PERIOD > 0) { - if (!note_resting) + if (!note_resting) end_of_note = (note_position >= (note_length / TIMER_1_PERIOD * 0xFFFF - 1)); else end_of_note = (note_position >= (note_length)); diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c index 1e950d1113..bd2f1b3b37 100644 --- a/quantum/process_keycode/process_clicky.c +++ b/quantum/process_keycode/process_clicky.c @@ -3,11 +3,6 @@ #ifdef AUDIO_CLICKY -#ifdef AUDIO_CLICKY_ON -bool clicky_enable = true; -#else // AUDIO_CLICKY_ON -bool clicky_enable = false; -#endif // AUDIO_CLICKY_ON #ifndef AUDIO_CLICKY_FREQ_DEFAULT #define AUDIO_CLICKY_FREQ_DEFAULT 440.0f #endif // !AUDIO_CLICKY_FREQ_DEFAULT @@ -27,6 +22,8 @@ bool clicky_enable = false; float clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; float clicky_song[][2] = {{AUDIO_CLICKY_FREQ_DEFAULT, 3}, {AUDIO_CLICKY_FREQ_DEFAULT, 1}}; // 3 and 1 --> durations +extern audio_config_t audio_config; + #ifndef NO_MUSIC_MODE extern bool music_activated; extern bool midi_activated; @@ -42,7 +39,10 @@ void clicky_play(void) { } bool process_clicky(uint16_t keycode, keyrecord_t *record) { - if (keycode == CLICKY_TOGGLE && record->event.pressed) { clicky_enable = !clicky_enable; } + if (keycode == CLICKY_TOGGLE && record->event.pressed) { + audio_config.clicky ^= 1; + eeconfig_update_audio(audio_config.raw); + } if (keycode == CLICKY_RESET && record->event.pressed) { clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; } @@ -60,7 +60,7 @@ bool process_clicky(uint16_t keycode, keyrecord_t *record) { } - if ( clicky_enable ) { + if ( audio_config.clicky ) { if (record->event.pressed) { clicky_play();; } diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 20df2f4de6..7bb272a267 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -133,9 +133,6 @@ void led_set_keymap(uint8_t usb_led) {} void matrix_init_user(void) { userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE); -#ifdef AUDIO_CLICKY - clicky_enable = userspace_config.clicky_enable; -#endif #ifdef BOOTLOADER_CATERINA DDRD &= ~(1<<5); @@ -145,7 +142,6 @@ void matrix_init_user(void) { PORTB &= ~(1<<0); #endif - #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) set_unicode_input_mode(UC_WINC); #endif //UNICODE_ENABLE @@ -338,11 +334,27 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; break; - case CLICKY_TOGGLE: -#ifdef AUDIO_CLICKY - userspace_config.clicky_enable = clicky_enable; - eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); + case KC_CCCV: // One key copy/paste + if(record->event.pressed){ + copy_paste_timer = timer_read(); + } else { + if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy + register_code(KC_LCTL); + tap(KC_C); + unregister_code(KC_LCTL); +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_copy); #endif + } else { // Tap, paste + register_code(KC_LCTL); + tap(KC_V); + unregister_code(KC_LCTL); +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_paste); +#endif + } + } + return false; break; #ifdef UNICODE_ENABLE case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻ diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index dd0d1c0d7e..de8c3ba947 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -49,7 +49,7 @@ enum userspace_layers { // RGB color codes are no longer located here anymore. Instead, you will want to // head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h -extern bool clicky_enable; +extern bool rgb_layer_change; #ifdef RGBLIGHT_ENABLE void rgblight_sethsv_default_helper(uint8_t index); @@ -64,7 +64,6 @@ bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t thi typedef union { uint8_t raw; struct { - bool clicky_enable :1; bool rgb_layer_change :1; bool is_overwatch :1; bool nuke_switch :1; From cfb1b353eef290ea4eddd7cfcb4617ca25d440d2 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Thu, 31 May 2018 12:24:10 -0700 Subject: [PATCH 023/269] Add functions so you can configure programatically --- quantum/audio/audio.h | 3 +- quantum/process_keycode/process_clicky.c | 60 +++++++++++++++++------- quantum/process_keycode/process_clicky.h | 9 ++++ 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index da09b2bcd2..8136c5b258 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -40,7 +40,8 @@ typedef union { uint8_t raw; struct { bool enable :1; - uint8_t level :7; + bool clicky_enable :1; + uint8_t level :6; }; } audio_config_t; diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c index bd2f1b3b37..b3c8d890e2 100644 --- a/quantum/process_keycode/process_clicky.c +++ b/quantum/process_keycode/process_clicky.c @@ -38,29 +38,53 @@ void clicky_play(void) { PLAY_SONG(clicky_song); } +void clicky_freq_up(void) { + float new_freq = clicky_freq * AUDIO_CLICKY_FREQ_FACTOR; + if (new_freq < AUDIO_CLICKY_FREQ_MAX) { + clicky_freq = new_freq; + } +} + +void clicky_freq_down(void) { + float new_freq = clicky_freq / AUDIO_CLICKY_FREQ_FACTOR; + if (new_freq > AUDIO_CLICKY_FREQ_MIN) { + clicky_freq = new_freq; + } +} + +void clicky_freq_reset(void) { + clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; +} + +void clicky_freq_toggle(void) { + audio_config.clicky_enable ^= 1; + eeconfig_update_audio(audio_config.raw); +} + +void clicky_freq_on(void) { + audio_config.clicky_enable = 1; + eeconfig_update_audio(audio_config.raw); +} + +void clicky_freq_off(void) { + audio_config.clicky_enable = 0; + eeconfig_update_audio(audio_config.raw); +} + +bool is_clicky_on(void) { + return (audio_config.clicky_enable != 0); +} + bool process_clicky(uint16_t keycode, keyrecord_t *record) { - if (keycode == CLICKY_TOGGLE && record->event.pressed) { - audio_config.clicky ^= 1; - eeconfig_update_audio(audio_config.raw); - } + if (keycode == CLICKY_TOGGLE && record->event.pressed) { clicky_freq_toggle(); } - if (keycode == CLICKY_RESET && record->event.pressed) { clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; } + if (keycode == CLICKY_RESET && record->event.pressed) { clicky_freq_reset(); } - if (keycode == CLICKY_UP && record->event.pressed) { - float new_freq = clicky_freq * AUDIO_CLICKY_FREQ_FACTOR; - if (new_freq < AUDIO_CLICKY_FREQ_MAX) { - clicky_freq = new_freq; - } - } - if (keycode == CLICKY_DOWN && record->event.pressed) { - float new_freq = clicky_freq / AUDIO_CLICKY_FREQ_FACTOR; - if (new_freq > AUDIO_CLICKY_FREQ_MIN) { - clicky_freq = new_freq; - } - } + if (keycode == CLICKY_UP && record->event.pressed) { clicky_freq_up(); } + if (keycode == CLICKY_DOWN && record->event.pressed) { clicky_freq_down(); } - if ( audio_config.clicky ) { + if ( audio_config.clicky_enable ) { if (record->event.pressed) { clicky_play();; } diff --git a/quantum/process_keycode/process_clicky.h b/quantum/process_keycode/process_clicky.h index e274af56f1..6ee3cc5d9f 100644 --- a/quantum/process_keycode/process_clicky.h +++ b/quantum/process_keycode/process_clicky.h @@ -4,4 +4,13 @@ void clicky_play(void); bool process_clicky(uint16_t keycode, keyrecord_t *record); +void clicky_freq_up(void); +void clicky_freq_down(void); +void clicky_freq_reset(void); +void clicky_freq_toggle(void); +void clicky_freq_on(void); +void clicky_freq_off(void); + +bool is_clicky_on(void); + #endif From a0309db983150fd0197eb620a6ba552d90d29f93 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 1 Jun 2018 13:29:52 -0700 Subject: [PATCH 024/269] Add On/Off keycodes --- docs/feature_audio.md | 12 +++++++----- quantum/process_keycode/process_clicky.c | 11 +++++++---- quantum/process_keycode/process_clicky.h | 7 ++++--- quantum/quantum_keycodes.h | 5 +++++ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/docs/feature_audio.md b/docs/feature_audio.md index fe210c09b9..82e0ed9503 100644 --- a/docs/feature_audio.md +++ b/docs/feature_audio.md @@ -119,14 +119,16 @@ You can completely disable Music Mode as well. This is useful, if you're pressed #define NO_MUSIC_MODE -## Faux Click +## Audio Click This adds a click sound each time you hit a button, to simulate click sounds from the keyboard. And the sounds are slightly different for each keypress, so it doesn't sound like a single long note, if you type rapidly. * `CK_TOGG` - Toggles the status (will play sound if enabled) -* `CK_RST` - Resets the frequency to the default state -* `CK_UP` - Increases the frequency of the clicks -* `CK_DOWN` - Decreases the frequency of the clicks +* `CK_ON` - Turns on Audio Click (plays sound) +* `CK_OFF` - Turns off Audio Click (doesn't play sound) +* `CK_RST` - Resets the frequency to the default state (plays sound at default frequency) +* `CK_UP` - Increases the frequency of the clicks (plays sound at new frequency) +* `CK_DOWN` - Decreases the frequency of the clicks (plays sound at new frequency) The feature is disabled by default, to save space. To enable it, add this to your `config.h`: @@ -142,7 +144,7 @@ You can configure the default, min and max frequencies, the stepping and built i | `AUDIO_CLICKY_FREQ_MIN` | 65.0f | Sets the lowest frequency (under 60f are a bit buggy). | | `AUDIO_CLICKY_FREQ_MAX` | 1500.0f | Sets the the highest frequency. Too high may result in coworkers attacking you. | | `AUDIO_CLICKY_FREQ_FACTOR` | 1.18921f| Sets the stepping of UP/DOWN key codes. | -| `AUDIO_CLICKY_FREQ_RANDOMNESS` | 0.05f | Sets a factor of randomness for the clicks, Setting this to `0f` will make each click identical. | +| `AUDIO_CLICKY_FREQ_RANDOMNESS` | 0.05f | Sets a factor of randomness for the clicks, Setting this to `0f` will make each click identical, and `1.0f` will make this sound much like the 90's computer screen scrolling/typing effect. | diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c index b3c8d890e2..36578047ad 100644 --- a/quantum/process_keycode/process_clicky.c +++ b/quantum/process_keycode/process_clicky.c @@ -56,17 +56,17 @@ void clicky_freq_reset(void) { clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; } -void clicky_freq_toggle(void) { +void clicky_toggle(void) { audio_config.clicky_enable ^= 1; eeconfig_update_audio(audio_config.raw); } -void clicky_freq_on(void) { +void clicky_on(void) { audio_config.clicky_enable = 1; eeconfig_update_audio(audio_config.raw); } -void clicky_freq_off(void) { +void clicky_off(void) { audio_config.clicky_enable = 0; eeconfig_update_audio(audio_config.raw); } @@ -76,7 +76,10 @@ bool is_clicky_on(void) { } bool process_clicky(uint16_t keycode, keyrecord_t *record) { - if (keycode == CLICKY_TOGGLE && record->event.pressed) { clicky_freq_toggle(); } + if (keycode == CLICKY_TOGGLE && record->event.pressed) { clicky_toggle(); } + + if (keycode == CLICKY_ENABLE && record->event.pressed) { clicky_on(); } + if (keycode == CLICKY_DISABLE && record->event.pressed) { clicky_off(); } if (keycode == CLICKY_RESET && record->event.pressed) { clicky_freq_reset(); } diff --git a/quantum/process_keycode/process_clicky.h b/quantum/process_keycode/process_clicky.h index 6ee3cc5d9f..f746edb951 100644 --- a/quantum/process_keycode/process_clicky.h +++ b/quantum/process_keycode/process_clicky.h @@ -7,9 +7,10 @@ bool process_clicky(uint16_t keycode, keyrecord_t *record); void clicky_freq_up(void); void clicky_freq_down(void); void clicky_freq_reset(void); -void clicky_freq_toggle(void); -void clicky_freq_on(void); -void clicky_freq_off(void); + +void clicky_toggle(void); +void clicky_on(void); +void clicky_off(void); bool is_clicky_on(void); diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 050d2d275d..e983798f2b 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -139,10 +139,13 @@ enum quantum_keycodes { // Faux clicky as part of main audio feature CLICKY_TOGGLE, + CLICKY_ENABLE, + CLICKY_DISABLE, CLICKY_UP, CLICKY_DOWN, CLICKY_RESET, + #ifdef FAUXCLICKY_ENABLE // Faux clicky FC_ON, @@ -571,6 +574,8 @@ enum quantum_keycodes { #define CK_RST CLICKY_RESET #define CK_UP CLICKY_UP #define CK_DOWN CLICKY_DOWN +#define CK_ON CLICKY_ENABLE +#define CK_OFF CLICKY_DISABLE #define RGB_MOD RGB_MODE_FORWARD #define RGB_SMOD RGB_MODE_FORWARD From a54f09d4f32e026543903502e340e4496bfba94c Mon Sep 17 00:00:00 2001 From: Ethan Madden Date: Tue, 25 Sep 2018 15:06:48 -0700 Subject: [PATCH 025/269] Keymap: jetpacktuxedo planck keymap (#3896) * added my planck keymap based on a blend of my minivan keymap and the planck default keymap. * moved pipe to better match minivan keymap * updated as per @drashna also moved my keymap a bit after adding the quad encoder and underglow (which doesn't even work on arm right now lol) * a few smaller tweaks --- .../planck/keymaps/jetpacktuxedo/config.h | 32 ++ .../planck/keymaps/jetpacktuxedo/keymap.c | 278 ++++++++++++++++++ .../planck/keymaps/jetpacktuxedo/rules.mk | 1 + 3 files changed, 311 insertions(+) create mode 100644 keyboards/planck/keymaps/jetpacktuxedo/config.h create mode 100644 keyboards/planck/keymaps/jetpacktuxedo/keymap.c create mode 100644 keyboards/planck/keymaps/jetpacktuxedo/rules.mk diff --git a/keyboards/planck/keymaps/jetpacktuxedo/config.h b/keyboards/planck/keymaps/jetpacktuxedo/config.h new file mode 100644 index 0000000000..f216dc02dc --- /dev/null +++ b/keyboards/planck/keymaps/jetpacktuxedo/config.h @@ -0,0 +1,32 @@ +#pragma once + +#ifdef AUDIO_ENABLE + #define STARTUP_SONG SONG(PLANCK_SOUND) +#endif + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +// Most tactile encoders have detents every 4 stages +#define ENCODER_RESOLUTION 4 diff --git a/keyboards/planck/keymaps/jetpacktuxedo/keymap.c b/keyboards/planck/keymaps/jetpacktuxedo/keymap.c new file mode 100644 index 0000000000..2994c0c077 --- /dev/null +++ b/keyboards/planck/keymaps/jetpacktuxedo/keymap.c @@ -0,0 +1,278 @@ +/* Copyright 2015-2017 Jack Humbert + * + * 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 +#include "muse.h" + +extern keymap_config_t keymap_config; + +enum planck_layers { + _QWERTY, + _LOWER, + _RAISE, + _PLOVER, + _ADJUST +}; + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + PLOVER, + EXT_PLV +}; + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | Up |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Brite | Ctrl | Alt | GUI |Lower | Space |Raise | / | Left | Down |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_planck_grid( + KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT, + RGB_TOG, KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | _ | + | " | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | { | } | PgUp | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | Home | PgDn | End | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_planck_grid( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_DQUO, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, KC_HOME, KC_PGDN, KC_END +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | - | = | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | [ | ] | PgUp | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | \ | Home | PgDn | End | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_planck_grid( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_QUOT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, KC_HOME, KC_PGDN, KC_END +), + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | Exit | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = LAYOUT_planck_grid( + EXT_PLV, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, + XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + XXXXXXX, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | |Plover| | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_planck_grid( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET, + _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, PLOVER, _______, + _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + + +}; + +#ifdef AUDIO_ENABLE + float plover_song[][2] = SONG(PLOVER_SOUND); + float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); +#endif + +uint32_t layer_state_set_user(uint32_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + print("mode just switched to qwerty and this is a huge string\n"); + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(plover_song); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(plover_gb_song); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} + +bool muse_mode = false; +uint8_t last_muse_note = 0; +uint16_t muse_counter = 0; +uint8_t muse_offset = 70; +uint16_t muse_tempo = 20; + +void encoder_update(bool clockwise) { + if (muse_mode) { + if (IS_LAYER_ON(_RAISE)) { + if (clockwise) { + muse_offset++; + } else { + muse_offset--; + } + } else { + if (clockwise) { + muse_tempo+=1; + } else { + muse_tempo-=1; + } + } + } else { + if (IS_LAYER_ON(_RAISE)) { + if (clockwise) { + register_code(KC_RGHT); + unregister_code(KC_RGHT); + } else { + register_code(KC_LEFT); + unregister_code(KC_LEFT); + } + } else { + if (clockwise) { + register_code(KC_DOWN); + unregister_code(KC_DOWN); + } else { + register_code(KC_UP); + unregister_code(KC_UP); + } + } + } +} + +void dip_update(uint8_t index, bool active) { + switch (index) { + case 0: + if (active) { + #ifdef AUDIO_ENABLE + PLAY_SONG(plover_song); + #endif + layer_on(_ADJUST); + } else { + #ifdef AUDIO_ENABLE + PLAY_SONG(plover_gb_song); + #endif + layer_off(_ADJUST); + } + break; + case 1: + if (active) { + muse_mode = true; + } else { + muse_mode = false; + #ifdef AUDIO_ENABLE + stop_all_notes(); + #endif + } + } +} + +void matrix_scan_user(void) { + #ifdef AUDIO_ENABLE + if (muse_mode) { + if (muse_counter == 0) { + uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()]; + if (muse_note != last_muse_note) { + stop_note(compute_freq_for_midi_note(last_muse_note)); + play_note(compute_freq_for_midi_note(muse_note), 0xF); + last_muse_note = muse_note; + } + } + muse_counter = (muse_counter + 1) % muse_tempo; + } + #endif +} + +bool music_mask_user(uint16_t keycode) { + switch (keycode) { + case RAISE: + case LOWER: + return false; + default: + return true; + } +} diff --git a/keyboards/planck/keymaps/jetpacktuxedo/rules.mk b/keyboards/planck/keymaps/jetpacktuxedo/rules.mk new file mode 100644 index 0000000000..dcf16bef39 --- /dev/null +++ b/keyboards/planck/keymaps/jetpacktuxedo/rules.mk @@ -0,0 +1 @@ +SRC += muse.c From 9dc19fdb6d0fedfb0080891a8eff49a8fc3b70c2 Mon Sep 17 00:00:00 2001 From: BenRLewis <11444078+BenRLewis@users.noreply.github.com> Date: Tue, 25 Sep 2018 23:11:11 +0100 Subject: [PATCH 026/269] Keymap: FollowingGhosts v60r layout (#3926) * First version of FollowingGhosts' custom layout * Added copyright etc. * Fixed readme and added space cadet shift * Moved from RGB to HSV, updated readme and added media keys * Updated pragma * Added play/pause and updated config * Added pragma back --- .../keymaps/followingghosts/config.h | 18 +++ .../keymaps/followingghosts/keymap.c | 109 ++++++++++++++++++ .../keymaps/followingghosts/readme.md | 61 ++++++++++ .../keymaps/followingghosts/rules.mk | 4 + 4 files changed, 192 insertions(+) create mode 100644 keyboards/v60_type_r/keymaps/followingghosts/config.h create mode 100644 keyboards/v60_type_r/keymaps/followingghosts/keymap.c create mode 100644 keyboards/v60_type_r/keymaps/followingghosts/readme.md create mode 100644 keyboards/v60_type_r/keymaps/followingghosts/rules.mk diff --git a/keyboards/v60_type_r/keymaps/followingghosts/config.h b/keyboards/v60_type_r/keymaps/followingghosts/config.h new file mode 100644 index 0000000000..a2612e2d32 --- /dev/null +++ b/keyboards/v60_type_r/keymaps/followingghosts/config.h @@ -0,0 +1,18 @@ +/* Copyright 2018 Ben Lewis (FollowingGhosts) + * + * 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 +#define V60_POLESTAR +#define RGBLIGHT_EFFECT_BREATHING diff --git a/keyboards/v60_type_r/keymaps/followingghosts/keymap.c b/keyboards/v60_type_r/keymaps/followingghosts/keymap.c new file mode 100644 index 0000000000..cca95c509d --- /dev/null +++ b/keyboards/v60_type_r/keymaps/followingghosts/keymap.c @@ -0,0 +1,109 @@ +/* Copyright 2018 Ben Lewis (FollowingGhosts) + * + * 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 . + */ + +/* This is adapted from the official ANSI layout provided by the KBP V60 Type R +* as depicted in their manual and on the stock keycaps. +*/ +#include QMK_KEYBOARD_H + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap 0: Default Layer (Qwerty) + * CAPS opens Layer 1 if held, acts normally if tapped + * Tab is used for Mouse Layer (2) + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bs | + * |-----------------------------------------------------------| + * |L2/Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| + * |-----------------------------------------------------------| + * |L1/Caps| A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |LShift( | Z| X| C| V| B| N| M| ,| .| /| RShift) | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Fn0 |Gui |App|Ctrl| + * `-----------------------------------------------------------' + */ + [0] = LAYOUT_60_ansi( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + LT(2, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + LT(1, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_APP, KC_RCTL), + + /* + Keymap 1: FN Layer + AGSW swaps Alt and OS keys for Windows/Mac + RGB enabled + Backlight keys are swapped as firmware is backwards? + * ,-----------------------------------------------------------. + * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Del | + * |-----------------------------------------------------------| + * | | |Up |RGB|HUI|SAI|VAI| |Prt|Scl|Pau|Up| | Ins | + * |-----------------------------------------------------------| + * | |Lft|Dwn|Rig|HUD|SAD|VAD| |Hme|PgU|Lef|Rig| | + * |-----------------------------------------------------------| + * | |BLD|BLT|BLI| |VolD|VolU|Mut|End|PgD|Dwn| RESET | + * |-----------------------------------------------------------| + * | | | | | |AGSW| | | + * `-----------------------------------------------------------' + */ + + [1] = LAYOUT_60_ansi( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_UP, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_INS, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_TRNS, \ + KC_TRNS, BL_INC, BL_STEP, BL_DEC, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_DOWN, RESET, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, AG_SWAP, KC_TRNS, KC_TRNS), + +/* +Mouse Layer +M1 = Mouse Button 1 +M2 = Mouse Button 2 +WASD are Up Left Right Down respectively +* ,-----------------------------------------------------------. +* | | | | | | | | | | | | | | | +* |-----------------------------------------------------------| +* | | M1|MUP|M2 | | | | | | | |MPLY| | | +* |-----------------------------------------------------------| +* | |ML |MDN|MR | | | | | | |MPRV|MNXT| | +* |-----------------------------------------------------------| +* | | | | | | | | | | | | | +* |-----------------------------------------------------------| +* | | | | | | | | | +* `-----------------------------------------------------------' +*/ + [2] = LAYOUT_60_ansi( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + +}; + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1< Date: Tue, 25 Sep 2018 18:16:35 -0400 Subject: [PATCH 027/269] Pin avr-gcc in shell.nix pending release of 8.3.0 (#3922) * Pin avr-gcc in shell.nix pending release of 8.3.0 There's apparently a critical bug in 8.2.0, which is now the nixpkgs default. This change overrides that default in favor of the known good version. Once 8.3.0 is the default, the override can be dropped. * Arch/Manjaro fix --- shell.nix | 7 +++++++ util/linux_install.sh | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/shell.nix b/shell.nix index 715414f96a..67efb46b74 100644 --- a/shell.nix +++ b/shell.nix @@ -13,6 +13,13 @@ let "-B${avrlibc}/avr/lib/avr51" "-L${avrlibc}/avr/lib/avr51" ]; + avrgcc = pkgs.avrgcc.overrideAttrs (oldAttrs: rec { + name = "avr-gcc-8.1.0"; + src = fetchurl { + url = "mirror://gcc/releases/gcc-8.1.0/gcc-8.1.0.tar.xz"; + sha256 = "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x"; + }; + }); in stdenv.mkDerivation { diff --git a/util/linux_install.sh b/util/linux_install.sh index d5da59e827..9b8b92d087 100755 --- a/util/linux_install.sh +++ b/util/linux_install.sh @@ -10,7 +10,9 @@ elif grep ID /etc/os-release | grep -q debian; then dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi \ libnewlib-arm-none-eabi elif grep ID /etc/os-release | grep -q 'arch\|manjaro'; then - sudo pacman -S gcc unzip wget zip avr-gcc avr-binutils avr-libc \ + # install avr-gcc 8.1 until 8.3 is available. See #3657 for details of the bug. + sudo pacman -U https://archive.archlinux.org/packages/a/avr-gcc/avr-gcc-8.1.0-1-x86_64.pkg.tar.xz + sudo pacman -S gcc unzip wget zip avr-binutils avr-libc \ dfu-util arm-none-eabi-gcc arm-none-eabi-binutils \ arm-none-eabi-newlib git clone https://aur.archlinux.org/dfu-programmer.git /tmp/dfu-programmer From 6347a654de1ac00f6feb02e0a95b62a42aed406f Mon Sep 17 00:00:00 2001 From: takashi kono Date: Wed, 26 Sep 2018 07:18:11 +0900 Subject: [PATCH 028/269] Keymap: Ergo42: biacco-winjp (#3935) * create: biacco jis keymap for windows for Ergo42 * fix: biacco-winjp: change #ifndef to #pragma once. * fix: following: 3935#pullrequestreview-157941685 --- .../ergo42/keymaps/biacco-winjp/config.h | 33 +++++++ .../ergo42/keymaps/biacco-winjp/keymap.c | 95 +++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 keyboards/ergo42/keymaps/biacco-winjp/config.h create mode 100644 keyboards/ergo42/keymaps/biacco-winjp/keymap.c diff --git a/keyboards/ergo42/keymaps/biacco-winjp/config.h b/keyboards/ergo42/keymaps/biacco-winjp/config.h new file mode 100644 index 0000000000..360d6a5621 --- /dev/null +++ b/keyboards/ergo42/keymaps/biacco-winjp/config.h @@ -0,0 +1,33 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + diff --git a/keyboards/ergo42/keymaps/biacco-winjp/keymap.c b/keyboards/ergo42/keymaps/biacco-winjp/keymap.c new file mode 100644 index 0000000000..5dbca3bfc5 --- /dev/null +++ b/keyboards/ergo42/keymaps/biacco-winjp/keymap.c @@ -0,0 +1,95 @@ +// WindowsでJIS配列として認識しているときに、US配列として使うためのキーマップ +// hdbx から2行コピーさせて頂きました。 + +#include QMK_KEYBOARD_H +#include "keymap_jp.h" // qmk_firmware-master/quantum/keymap_extras/keymap_jp.h 日本語キーボード設定用 +// マクロが必要になったらコメントインすること +// #include // macro sendstring for jis keyboard マクロ文字列送信時に日本語キーボード設定での文字化け回避> + +extern keymap_config_t keymap_config; + +#define BASE 0 +#define META 1 +#define SYMB 2 +#define GAME 3 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* BASE + * ,------------------------------------------------. ,------------------------------------------------. + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ | + * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + [BASE] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ + KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \ + KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), RCTL_T(KC_SPC), SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DELT, KC_PSCR, TG(GAME), TG(SYMB), KC_JYEN \ + ), + + /* META + * ,------------------------------------------------. ,------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ | + * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + [META] = LAYOUT( \ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, _______, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ + _______, KC_F1, XXXXXXX, KC_MHEN, KC_HENK, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, \ + _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_RO), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \ + ), + + /* SYMB + * ,------------------------------------------------. ,------------------------------------------------. + * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Alt | | | | | | ( | | ) | | | | | + | * | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Sft | | | | | | { | | } | | | < | > | ? | \ | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ | + * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + [SYMB] = LAYOUT( \ + S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL), \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT), \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_RO), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + + /* GAME + * ,------------------------------------------------. ,------------------------------------------------. + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ | + * | | | | | | | | |Space | | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + [GAME] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ + KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \ + KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DELT, KC_PSCR, _______, _______, KC_JYEN \ + ) + +}; + From 118e948e355b784b22f94378b5f85285e6dd4634 Mon Sep 17 00:00:00 2001 From: johanntang Date: Tue, 25 Sep 2018 15:23:31 -0700 Subject: [PATCH 029/269] Keyboard: added mehkee96 support -JT (#3957) * added mehkee96 support -JT * making requested changes -JT * fixes -jt * fixed info.json -JT * tidy up info.json comments from noroadsleft -JT --- keyboards/mehkee96/config.h | 18 + keyboards/mehkee96/i2c.c | 106 ++++++ keyboards/mehkee96/i2c.h | 27 ++ keyboards/mehkee96/info.json | 12 + keyboards/mehkee96/keymaps/default/keymap.c | 80 ++++ keyboards/mehkee96/keymaps/johann/keymap.c | 80 ++++ keyboards/mehkee96/matrix.c | 130 +++++++ keyboards/mehkee96/mehkee96.c | 81 ++++ keyboards/mehkee96/mehkee96.h | 24 ++ keyboards/mehkee96/program | 105 ++++++ keyboards/mehkee96/readme.md | 16 + keyboards/mehkee96/rules.mk | 35 ++ keyboards/mehkee96/usbconfig.h | 396 ++++++++++++++++++++ keyboards/melody96/keymaps/default/keymap.c | 6 - 14 files changed, 1110 insertions(+), 6 deletions(-) create mode 100644 keyboards/mehkee96/config.h create mode 100644 keyboards/mehkee96/i2c.c create mode 100644 keyboards/mehkee96/i2c.h create mode 100644 keyboards/mehkee96/info.json create mode 100644 keyboards/mehkee96/keymaps/default/keymap.c create mode 100644 keyboards/mehkee96/keymaps/johann/keymap.c create mode 100644 keyboards/mehkee96/matrix.c create mode 100644 keyboards/mehkee96/mehkee96.c create mode 100644 keyboards/mehkee96/mehkee96.h create mode 100644 keyboards/mehkee96/program create mode 100644 keyboards/mehkee96/readme.md create mode 100644 keyboards/mehkee96/rules.mk create mode 100644 keyboards/mehkee96/usbconfig.h diff --git a/keyboards/mehkee96/config.h b/keyboards/mehkee96/config.h new file mode 100644 index 0000000000..70ca273c36 --- /dev/null +++ b/keyboards/mehkee96/config.h @@ -0,0 +1,18 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x20A0 +#define PRODUCT_ID 0x422D +#define MANUFACTURER mehkee +#define PRODUCT 96kee + +/* matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 15 + +#define RGBLED_NUM 16 +#define RGBLIGHT_ANIMATIONS +/* key combination for command */ +#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) diff --git a/keyboards/mehkee96/i2c.c b/keyboards/mehkee96/i2c.c new file mode 100644 index 0000000000..a4f9521352 --- /dev/null +++ b/keyboards/mehkee96/i2c.c @@ -0,0 +1,106 @@ +/* +Copyright 2016 Luiz Ribeiro + +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 . +*/ + +// Please do not modify this file + +#include +#include + +#include "i2c.h" + +void i2c_set_bitrate(uint16_t bitrate_khz) { + uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz); + if (bitrate_div >= 16) { + bitrate_div = (bitrate_div - 16) / 2; + } + TWBR = bitrate_div; +} + +void i2c_init(void) { + // set pull-up resistors on I2C bus pins + PORTC |= 0b11; + + i2c_set_bitrate(400); + + // enable TWI (two-wire interface) + TWCR |= (1 << TWEN); + + // enable TWI interrupt and slave address ACK + TWCR |= (1 << TWIE); + TWCR |= (1 << TWEA); +} + +uint8_t i2c_start(uint8_t address) { + // reset TWI control register + TWCR = 0; + + // begin transmission and wait for it to end + TWCR = (1< + +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 . +*/ + +// Please do not modify this file + +#ifndef __I2C_H__ +#define __I2C_H__ + +void i2c_init(void); +void i2c_set_bitrate(uint16_t bitrate_khz); +uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length); + +#endif diff --git a/keyboards/mehkee96/info.json b/keyboards/mehkee96/info.json new file mode 100644 index 0000000000..75da3e591d --- /dev/null +++ b/keyboards/mehkee96/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "mehkee96", + "url": "", + "maintainer": "qmk", + "width": 19, + "height": 6, + "layouts": { + "LAYOUT": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"Print Screen", "x":13, "y":0}, {"label":"Delete", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"End", "x":16, "y":0}, {"label":"Page Up", "x":17, "y":0}, {"label":"Page Down", "x":18, "y":0}, {"label":"`", "x":0, "y":1}, {"label":"1", "x":1, "y":1}, {"label":"2", "x":2, "y":1}, {"label":"3", "x":3, "y":1}, {"label":"4", "x":4, "y":1}, {"label":"5", "x":5, "y":1}, {"label":"6", "x":6, "y":1}, {"label":"7", "x":7, "y":1}, {"label":"8", "x":8, "y":1}, {"label":"9", "x":9, "y":1}, {"label":"0", "x":10, "y":1}, {"label":"-", "x":11, "y":1}, {"label":"=", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Num Lock", "x":15, "y":1}, {"label":"P/", "x":16, "y":1}, {"label":"P*", "x":17, "y":1}, {"label":"P-", "x":18, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"[", "x":11.5, "y":2}, {"label":"]", "x":12.5, "y":2}, {"label":"\\", "x":13.5, "y":2, "w":1.5}, {"label":"P7", "x":15, "y":2}, {"label":"P8", "x":16, "y":2}, {"label":"P9", "x":17, "y":2}, {"label":"P+", "x":18, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":";", "x":10.75, "y":3}, {"label":"'", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"P4", "x":15, "y":3}, {"label":"P5", "x":16, "y":3}, {"label":"P6", "x":17, "y":3}, {"label":"P+", "x":18, "y":3}, {"label":"Shift", "x":0, "y":4, "w":2.25}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":",", "x":9.25, "y":4}, {"label":".", "x":10.25, "y":4}, {"label":"/", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"Up", "x":14, "y":4}, {"label":"P1", "x":15, "y":4}, {"label":"P2", "x":16, "y":4}, {"label":"P3", "x":17, "y":4}, {"label":"PEnter", "x":18, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5}, {"label":"Win", "x":11, "y":5}, {"label":"Fn", "x":12, "y":5}, {"label":"Left", "x":13, "y":5}, {"label":"Down", "x":14, "y":5}, {"label":"Right", "x":15, "y":5}, {"label":"P0", "x":16, "y":5}, {"label":"P.", "x":17, "y":5}, {"label":"PEnter", "x":18, "y":5}] + } + } +} diff --git a/keyboards/mehkee96/keymaps/default/keymap.c b/keyboards/mehkee96/keymaps/default/keymap.c new file mode 100644 index 0000000000..cd69fb2fe9 --- /dev/null +++ b/keyboards/mehkee96/keymaps/default/keymap.c @@ -0,0 +1,80 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Layer 0, default layer +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | | | | | | +| ESC* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | DEL | HOME | END | P Up | P Down | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | | BACK | NUM | | | | +| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | \ | SPACE | LOCK | / | * | - | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | [ | ] | | | | | | +| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | + | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________| +| | | | | | | | | | | ; | ' | | | | | | +| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | + | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | , | . | / | | | | | | | +| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | ENTER | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________| +| | | | | | | MO | | | | | | | +| CTRL | LGUI | L ALT | SPACE | R ALT | RGUI | _FN | LEFT | DOWN | RIGHT | 0 | . | ENTER | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| +*/ + + + + LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + + + + /* Layer 1, function layer +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | VOL | VOL | | | | +| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | | | | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | | | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | RGB | | RGB | HUE | HUE | SATUR. | SATUR. | VALUE | VALUE | | | | | | | | | +| | TOGGLE | | MODE |INCREASE| DCRSE |INCREASE| DCRSE |INCREASE| DCRSE | | | | | | | | | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________| +| BACKLIGHT | | | | | | | | | | | | | | | | | +| TOGGLE | | | | | | | | | | | | | | | | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | |BACKLHT |BACKLHT |BACKLHT | | | | | | | | | | | | +| | | | | DCRSE |TOGGLE |INCREASE| | | | | | | | | | | | +|_________|________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________| +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| +BL_TOGG, BL_DEC, BL_INC changes the in-switch LEDs +*/ + + + LAYOUT( + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, + BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______ , _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} diff --git a/keyboards/mehkee96/keymaps/johann/keymap.c b/keyboards/mehkee96/keymaps/johann/keymap.c new file mode 100644 index 0000000000..a0212702ab --- /dev/null +++ b/keyboards/mehkee96/keymaps/johann/keymap.c @@ -0,0 +1,80 @@ +#include "mehkee96.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Layer 0, default layer +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | | | | | | +| ESC* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | HOME | DEL | INSERT | P Up | P Down | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | | BACK | NUM | | | Play | +| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | \ | SPACE | LOCK | / | * | Pause | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | [ | ] | | | | | | +| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | Next | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________| +| | | | | | | | | | | ; | ' | | | | | | +| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | - | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | , | . | / | | | | | | | +| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | + | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________| +| | | | | | | MO | | | | | | | +| CTRL | LGUI | L ALT | SPACE | R ALT | RGUI | _FN | LEFT | DOWN | RIGHT | 0 | . | ENTER | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| +*/ + + + + LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME, KC_DEL, KC_INS, KC_PGUP, KC_PGDN, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_MPLY, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_MNXT, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PMNS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PPLS, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + + + + /* Layer 1, function layer +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | VOL | VOL | | | | +| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | | | | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | | | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | RGB | | RGB | HUE | HUE | SATUR. | SATUR. | VALUE | VALUE | | | | | | | | | +| | TOGGLE | | MODE |INCREASE| DCRSE |INCREASE| DCRSE |INCREASE| DCRSE | | | | | | | | | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________| +| BACKLIGHT | | | | | | | | | | | | | | | | | +| TOGGLE | | | | | | | | | | | | | | | | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | |BACKLHT |BACKLHT |BACKLHT | | | | | | | | | | | | +| | | | | DCRSE |TOGGLE |INCREASE| | | | | | | | | | | | +|_________|________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________| +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| +BL_TOGG, BL_DEC, BL_INC changes the in-switch LEDs +*/ + + + LAYOUT( + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, + BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______ , _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} diff --git a/keyboards/mehkee96/matrix.c b/keyboards/mehkee96/matrix.c new file mode 100644 index 0000000000..bbb84e52e4 --- /dev/null +++ b/keyboards/mehkee96/matrix.c @@ -0,0 +1,130 @@ +/* +Copyright 2017 Luiz Ribeiro + +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 +#include + +#include "matrix.h" + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif + +static uint8_t debouncing = DEBOUNCE; + +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +void matrix_set_row_status(uint8_t row); +uint8_t bit_reverse(uint8_t x); + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +void matrix_init(void) { + // all outputs for rows high + DDRB = 0xFF; + PORTB = 0xFF; + // all inputs for columns + DDRA = 0x00; + DDRC &= ~(0x111111<<2); + DDRD &= ~(1< 7 + (~PINA) & 0xFF + ) | ( + // cols 8..13, PORTC 7 -> 0 + bit_reverse((~PINC) & 0xFF) << 8 + ) | ( + // col 14, PORTD 7 + ((~PIND) & (1 << PIND7)) << 7 + ); + + if (matrix_debouncing[row] != cols) { + matrix_debouncing[row] = cols; + debouncing = DEBOUNCE; + } + } + + if (debouncing) { + if (--debouncing) { + _delay_ms(1); + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + } + } + + matrix_scan_quantum(); + + return 1; +} + +// declarations +void matrix_set_row_status(uint8_t row) { + DDRB = (1 << row); + PORTB = ~(1 << row); +} + +uint8_t bit_reverse(uint8_t x) { + x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa); + x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc); + x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0); + return x; +} + +inline matrix_row_t matrix_get_row(uint8_t row) { + return matrix[row]; +} + +void matrix_print(void) { +} diff --git a/keyboards/mehkee96/mehkee96.c b/keyboards/mehkee96/mehkee96.c new file mode 100644 index 0000000000..604fad8032 --- /dev/null +++ b/keyboards/mehkee96/mehkee96.c @@ -0,0 +1,81 @@ +/* +Copyright 2017 Luiz Ribeiro + +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 "mehkee96.h" +#include "rgblight.h" + +#include + +#include "action_layer.h" +#include "i2c.h" +#include "quantum.h" + +// for keyboard subdirectory level init functions +// @Override +void matrix_init_kb(void) { + // call user level keymaps, if any + matrix_init_user(); +} + +#ifdef RGBLIGHT_ENABLE +extern rgblight_config_t rgblight_config; + +// custom RGB driver +void rgblight_set(void) { + if (!rgblight_config.enable) { + for (uint8_t i=0; i, Sebastian Kaim +# +# 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 . + +from __future__ import print_function + +import os +import sys +import time +import usb + + +def checkForKeyboardInNormalMode(): + """Returns a device if a ps2avrGB device in normal made (that is in keyboard mode) or None if it is not found.""" + return usb.core.find(idVendor=0x20A0, idProduct=0x422D) + +def checkForKeyboardInBootloaderMode(): + """Returns True if a ps2avrGB device in bootloader (flashable) mode is found and False otherwise.""" + return (usb.core.find(idVendor=0x16c0, idProduct=0x05df) is not None) + +def flashKeyboard(firmware_file): + """Calls bootloadHID to flash the given file to the device.""" + print('Flashing firmware to device ...') + if os.system('bootloadHID -r "%s"' % firmware_file) == 0: + print('\nDone!') + else: + print('\nbootloadHID returned an error.') + +def printDeviceInfo(dev): + """Prints all infos for a given USB device""" + print('Device Information:') + print(' idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor)) + print(' idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct)) + print('Manufacturer: %s' % (dev.iManufacturer)) + print('Serial: %s' % (dev.iSerialNumber)) + print('Product: %s' % (dev.iProduct), end='\n\n') + +def sendDeviceToBootloaderMode(dev): + """Tries to send a given ps2avrGB keyboard to bootloader mode to allow flashing.""" + try: + dev.set_configuration() + + request_type = usb.util.build_request_type( + usb.util.CTRL_OUT, + usb.util.CTRL_TYPE_CLASS, + usb.util.CTRL_RECIPIENT_DEVICE) + + USBRQ_HID_SET_REPORT = 0x09 + HID_REPORT_OPTION = 0x0301 + + dev.ctrl_transfer(request_type, USBRQ_HID_SET_REPORT, HID_REPORT_OPTION, 0, [0, 0, 0xFF] + [0] * 5) + except usb.core.USBError: + # for some reason I keep getting USBError, but it works! + pass + + +if len(sys.argv) < 2: + print('Usage: %s ' % sys.argv[0]) + sys.exit(1) + +kb = checkForKeyboardInNormalMode() + +if kb is not None: + print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='') + sendDeviceToBootloaderMode(kb) + print(' done.') + print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.") + print(" You can find more infos about this here: https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB#setting-the-board-to-bootloader-mode") + +attempts = 12 # 60 seconds +found = False +for attempt in range(1, attempts + 1): + print("Searching for keyboard in bootloader mode (%i/%i) ... " % (attempt, attempts), end='') + + if checkForKeyboardInBootloaderMode(): + print('Found', end='\n\n') + flashKeyboard(sys.argv[1]) + found = True + break + else: + print('Nothing.', end='') + + if attempt != attempts: # no need to wait on the last attempt + print(' Sleeping 5 seconds.', end='') + time.sleep(5) + + # print a newline + print() + +if not found: + print("Couldn't find a flashable keyboard. Aborting.") + sys.exit(2) + diff --git a/keyboards/mehkee96/readme.md b/keyboards/mehkee96/readme.md new file mode 100644 index 0000000000..9dfad2a79e --- /dev/null +++ b/keyboards/mehkee96/readme.md @@ -0,0 +1,16 @@ +# Mehkee 96KEE + +![mehkee96](https://cdn.shopify.com/s/files/1/1799/1839/products/96KEE_-_1_-_Copy_1024x1024.jpg?v=1516262148) + +96-key Keyboard from mehkee + +Keyboard Maintainer: [johanntang](https://github.com/johanntang) +Hardware Supported: mehkee96 +Hardware Availability: [mehkee, group buy closed](https://mehkee.com/products/96kee?variant=46912017423) + +Make example for this keyboard (after setting up your build environment): + + make mehkee96:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + diff --git a/keyboards/mehkee96/rules.mk b/keyboards/mehkee96/rules.mk new file mode 100644 index 0000000000..e6e7d4a588 --- /dev/null +++ b/keyboards/mehkee96/rules.mk @@ -0,0 +1,35 @@ +# MCU name +MCU = atmega32a +PROTOCOL = VUSB + +# unsupported features for now +NO_UART = yes +NO_SUSPEND_POWER_DOWN = yes + +# Processor frequency. +F_CPU = 12000000 + +# Bootloader +BOOTLOADER = bootloadHID + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes +RGBLIGHT_CUSTOM_DRIVER = yes + +OPT_DEFS = -DDEBUG_LEVEL=0 + +# custom matrix setup +CUSTOM_MATRIX = yes +SRC = matrix.c i2c.c + +# programming options +PROGRAM_CMD = ./keyboards/mehkee96/program $(TARGET).hex diff --git a/keyboards/mehkee96/usbconfig.h b/keyboards/mehkee96/usbconfig.h new file mode 100644 index 0000000000..d2d848fcdc --- /dev/null +++ b/keyboards/mehkee96/usbconfig.h @@ -0,0 +1,396 @@ +/* Name: usbconfig.h + * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers + * Author: Christian Starkjohann + * Creation Date: 2005-04-01 + * Tabsize: 4 + * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH + * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) + * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $ + */ + +#ifndef __usbconfig_h_included__ +#define __usbconfig_h_included__ + +#include "config.h" + +/* +General Description: +This file is an example configuration (with inline documentation) for the USB +driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is +also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may +wire the lines to any other port, as long as D+ is also wired to INT0 (or any +other hardware interrupt, as long as it is the highest level interrupt, see +section at the end of this file). +*/ + +/* ---------------------------- Hardware Config ---------------------------- */ + +#define USB_CFG_IOPORTNAME D +/* This is the port where the USB bus is connected. When you configure it to + * "B", the registers PORTB, PINB and DDRB will be used. + */ +#define USB_CFG_DMINUS_BIT 3 +/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected. + * This may be any bit in the port. + */ +#define USB_CFG_DPLUS_BIT 2 +/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected. + * This may be any bit in the port. Please note that D+ must also be connected + * to interrupt pin INT0! [You can also use other interrupts, see section + * "Optional MCU Description" below, or you can connect D- to the interrupt, as + * it is required if you use the USB_COUNT_SOF feature. If you use D- for the + * interrupt, the USB interrupt will also be triggered at Start-Of-Frame + * markers every millisecond.] + */ +#define USB_CFG_CLOCK_KHZ (F_CPU/1000) +/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000, + * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code + * require no crystal, they tolerate +/- 1% deviation from the nominal + * frequency. All other rates require a precision of 2000 ppm and thus a + * crystal! + * Since F_CPU should be defined to your actual clock rate anyway, you should + * not need to modify this setting. + */ +#define USB_CFG_CHECK_CRC 0 +/* Define this to 1 if you want that the driver checks integrity of incoming + * data packets (CRC checks). CRC checks cost quite a bit of code size and are + * currently only available for 18 MHz crystal clock. You must choose + * USB_CFG_CLOCK_KHZ = 18000 if you enable this option. + */ + +/* ----------------------- Optional Hardware Config ------------------------ */ + +/* #define USB_CFG_PULLUP_IOPORTNAME D */ +/* If you connect the 1.5k pullup resistor from D- to a port pin instead of + * V+, you can connect and disconnect the device from firmware by calling + * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h). + * This constant defines the port on which the pullup resistor is connected. + */ +/* #define USB_CFG_PULLUP_BIT 4 */ +/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined + * above) where the 1.5k pullup resistor is connected. See description + * above for details. + */ + +/* --------------------------- Functional Range ---------------------------- */ + +#define USB_CFG_HAVE_INTRIN_ENDPOINT 1 +/* Define this to 1 if you want to compile a version with two endpoints: The + * default control endpoint 0 and an interrupt-in endpoint (any other endpoint + * number). + */ +#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1 +/* Define this to 1 if you want to compile a version with three endpoints: The + * default control endpoint 0, an interrupt-in endpoint 3 (or the number + * configured below) and a catch-all default interrupt-in endpoint as above. + * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature. + */ +#define USB_CFG_EP3_NUMBER 3 +/* If the so-called endpoint 3 is used, it can now be configured to any other + * endpoint number (except 0) with this macro. Default if undefined is 3. + */ +/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */ +/* The above macro defines the startup condition for data toggling on the + * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1. + * Since the token is toggled BEFORE sending any data, the first packet is + * sent with the oposite value of this configuration! + */ +#define USB_CFG_IMPLEMENT_HALT 0 +/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature + * for endpoint 1 (interrupt endpoint). Although you may not need this feature, + * it is required by the standard. We have made it a config option because it + * bloats the code considerably. + */ +#define USB_CFG_SUPPRESS_INTR_CODE 0 +/* Define this to 1 if you want to declare interrupt-in endpoints, but don't + * want to send any data over them. If this macro is defined to 1, functions + * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if + * you need the interrupt-in endpoints in order to comply to an interface + * (e.g. HID), but never want to send any data. This option saves a couple + * of bytes in flash memory and the transmit buffers in RAM. + */ +#define USB_CFG_INTR_POLL_INTERVAL 1 +/* If you compile a version with endpoint 1 (interrupt-in), this is the poll + * interval. The value is in milliseconds and must not be less than 10 ms for + * low speed devices. + */ +#define USB_CFG_IS_SELF_POWERED 0 +/* Define this to 1 if the device has its own power supply. Set it to 0 if the + * device is powered from the USB bus. + */ +#define USB_CFG_MAX_BUS_POWER 500 +/* Set this variable to the maximum USB bus power consumption of your device. + * The value is in milliamperes. [It will be divided by two since USB + * communicates power requirements in units of 2 mA.] + */ +#define USB_CFG_IMPLEMENT_FN_WRITE 1 +/* Set this to 1 if you want usbFunctionWrite() to be called for control-out + * transfers. Set it to 0 if you don't need it and want to save a couple of + * bytes. + */ +#define USB_CFG_IMPLEMENT_FN_READ 0 +/* Set this to 1 if you need to send control replies which are generated + * "on the fly" when usbFunctionRead() is called. If you only want to send + * data from a static buffer, set it to 0 and return the data from + * usbFunctionSetup(). This saves a couple of bytes. + */ +#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0 +/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints. + * You must implement the function usbFunctionWriteOut() which receives all + * interrupt/bulk data sent to any endpoint other than 0. The endpoint number + * can be found in 'usbRxToken'. + */ +#define USB_CFG_HAVE_FLOWCONTROL 0 +/* Define this to 1 if you want flowcontrol over USB data. See the definition + * of the macros usbDisableAllRequests() and usbEnableAllRequests() in + * usbdrv.h. + */ +#define USB_CFG_DRIVER_FLASH_PAGE 0 +/* If the device has more than 64 kBytes of flash, define this to the 64 k page + * where the driver's constants (descriptors) are located. Or in other words: + * Define this to 1 for boot loaders on the ATMega128. + */ +#define USB_CFG_LONG_TRANSFERS 0 +/* Define this to 1 if you want to send/receive blocks of more than 254 bytes + * in a single control-in or control-out transfer. Note that the capability + * for long transfers increases the driver size. + */ +/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */ +/* This macro is a hook if you want to do unconventional things. If it is + * defined, it's inserted at the beginning of received message processing. + * If you eat the received message and don't want default processing to + * proceed, do a return after doing your things. One possible application + * (besides debugging) is to flash a status LED on each packet. + */ +/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */ +/* This macro is a hook if you need to know when an USB RESET occurs. It has + * one parameter which distinguishes between the start of RESET state and its + * end. + */ +/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */ +/* This macro (if defined) is executed when a USB SET_ADDRESS request was + * received. + */ +#define USB_COUNT_SOF 1 +/* define this macro to 1 if you need the global variable "usbSofCount" which + * counts SOF packets. This feature requires that the hardware interrupt is + * connected to D- instead of D+. + */ +/* #ifdef __ASSEMBLER__ + * macro myAssemblerMacro + * in YL, TCNT0 + * sts timer0Snapshot, YL + * endm + * #endif + * #define USB_SOF_HOOK myAssemblerMacro + * This macro (if defined) is executed in the assembler module when a + * Start Of Frame condition is detected. It is recommended to define it to + * the name of an assembler macro which is defined here as well so that more + * than one assembler instruction can be used. The macro may use the register + * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages + * immediately after an SOF pulse may be lost and must be retried by the host. + * What can you do with this hook? Since the SOF signal occurs exactly every + * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in + * designs running on the internal RC oscillator. + * Please note that Start Of Frame detection works only if D- is wired to the + * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES! + */ +#define USB_CFG_CHECK_DATA_TOGGLING 0 +/* define this macro to 1 if you want to filter out duplicate data packets + * sent by the host. Duplicates occur only as a consequence of communication + * errors, when the host does not receive an ACK. Please note that you need to + * implement the filtering yourself in usbFunctionWriteOut() and + * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable + * for each control- and out-endpoint to check for duplicate packets. + */ +#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0 +/* define this macro to 1 if you want the function usbMeasureFrameLength() + * compiled in. This function can be used to calibrate the AVR's RC oscillator. + */ +#define USB_USE_FAST_CRC 0 +/* The assembler module has two implementations for the CRC algorithm. One is + * faster, the other is smaller. This CRC routine is only used for transmitted + * messages where timing is not critical. The faster routine needs 31 cycles + * per byte while the smaller one needs 61 to 69 cycles. The faster routine + * may be worth the 32 bytes bigger code size if you transmit lots of data and + * run the AVR close to its limit. + */ + +/* -------------------------- Device Description --------------------------- */ + +#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF) +/* USB vendor ID for the device, low byte first. If you have registered your + * own Vendor ID, define it here. Otherwise you may use one of obdev's free + * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF) +/* This is the ID of the product, low byte first. It is interpreted in the + * scope of the vendor ID. If you have registered your own VID with usb.org + * or if you have licensed a PID from somebody else, define it here. Otherwise + * you may use one of obdev's free shared VID/PID pairs. See the file + * USB-IDs-for-free.txt for details! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_VERSION 0x00, 0x02 +/* Version number of the device: Minor number first, then major number. + */ +#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r' +#define USB_CFG_VENDOR_NAME_LEN 13 +/* These two values define the vendor name returned by the USB device. The name + * must be given as a list of characters under single quotes. The characters + * are interpreted as Unicode (UTF-16) entities. + * If you don't want a vendor name string, undefine these macros. + * ALWAYS define a vendor name containing your Internet domain name if you use + * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for + * details. + */ +#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B' +#define USB_CFG_DEVICE_NAME_LEN 8 +/* Same as above for the device name. If you don't want a device name, undefine + * the macros. See the file USB-IDs-for-free.txt before you assign a name if + * you use a shared VID/PID. + */ +/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */ +/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */ +/* Same as above for the serial number. If you don't want a serial number, + * undefine the macros. + * It may be useful to provide the serial number through other means than at + * compile time. See the section about descriptor properties below for how + * to fine tune control over USB descriptors such as the string descriptor + * for the serial number. + */ +#define USB_CFG_DEVICE_CLASS 0 +#define USB_CFG_DEVICE_SUBCLASS 0 +/* See USB specification if you want to conform to an existing device class. + * Class 0xff is "vendor specific". + */ +#define USB_CFG_INTERFACE_CLASS 3 /* HID */ +#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */ +#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */ +/* See USB specification if you want to conform to an existing device class or + * protocol. The following classes must be set at interface level: + * HID class is 3, no subclass and protocol required (but may be useful!) + * CDC class is 2, use subclass 2 and protocol 1 for ACM + */ +#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0 +/* Define this to the length of the HID report descriptor, if you implement + * an HID device. Otherwise don't define it or define it to 0. + * If you use this define, you must add a PROGMEM character array named + * "usbHidReportDescriptor" to your code which contains the report descriptor. + * Don't forget to keep the array and this define in sync! + */ + +/* #define USB_PUBLIC static */ +/* Use the define above if you #include usbdrv.c instead of linking against it. + * This technique saves a couple of bytes in flash memory. + */ + +/* ------------------- Fine Control over USB Descriptors ------------------- */ +/* If you don't want to use the driver's default USB descriptors, you can + * provide our own. These can be provided as (1) fixed length static data in + * flash memory, (2) fixed length static data in RAM or (3) dynamically at + * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more + * information about this function. + * Descriptor handling is configured through the descriptor's properties. If + * no properties are defined or if they are 0, the default descriptor is used. + * Possible properties are: + * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched + * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is + * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if + * you want RAM pointers. + * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found + * in static memory is in RAM, not in flash memory. + * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash), + * the driver must know the descriptor's length. The descriptor itself is + * found at the address of a well known identifier (see below). + * List of static descriptor names (must be declared PROGMEM if in flash): + * char usbDescriptorDevice[]; + * char usbDescriptorConfiguration[]; + * char usbDescriptorHidReport[]; + * char usbDescriptorString0[]; + * int usbDescriptorStringVendor[]; + * int usbDescriptorStringDevice[]; + * int usbDescriptorStringSerialNumber[]; + * Other descriptors can't be provided statically, they must be provided + * dynamically at runtime. + * + * Descriptor properties are or-ed or added together, e.g.: + * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18)) + * + * The following descriptors are defined: + * USB_CFG_DESCR_PROPS_DEVICE + * USB_CFG_DESCR_PROPS_CONFIGURATION + * USB_CFG_DESCR_PROPS_STRINGS + * USB_CFG_DESCR_PROPS_STRING_0 + * USB_CFG_DESCR_PROPS_STRING_VENDOR + * USB_CFG_DESCR_PROPS_STRING_PRODUCT + * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER + * USB_CFG_DESCR_PROPS_HID + * USB_CFG_DESCR_PROPS_HID_REPORT + * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver) + * + * Note about string descriptors: String descriptors are not just strings, they + * are Unicode strings prefixed with a 2 byte header. Example: + * int serialNumberDescriptor[] = { + * USB_STRING_DESCRIPTOR_HEADER(6), + * 'S', 'e', 'r', 'i', 'a', 'l' + * }; + */ + +#define USB_CFG_DESCR_PROPS_DEVICE 0 +#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0 +#define USB_CFG_DESCR_PROPS_STRINGS 0 +#define USB_CFG_DESCR_PROPS_STRING_0 0 +#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0 +#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0 +#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0 +#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_HID 0 +#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_HID_REPORT 0 +#define USB_CFG_DESCR_PROPS_UNKNOWN 0 + +#define usbMsgPtr_t unsigned short +/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to + * a scalar type here because gcc generates slightly shorter code for scalar + * arithmetics than for pointer arithmetics. Remove this define for backward + * type compatibility or define it to an 8 bit type if you use data in RAM only + * and all RAM is below 256 bytes (tiny memory model in IAR CC). + */ + +/* ----------------------- Optional MCU Description ------------------------ */ + +/* The following configurations have working defaults in usbdrv.h. You + * usually don't need to set them explicitly. Only if you want to run + * the driver on a device which is not yet supported or with a compiler + * which is not fully supported (such as IAR C) or if you use a differnt + * interrupt than INT0, you may have to define some of these. + */ +/* #define USB_INTR_CFG MCUCR */ +/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */ +/* #define USB_INTR_CFG_CLR 0 */ +/* #define USB_INTR_ENABLE GIMSK */ +/* #define USB_INTR_ENABLE_BIT INT0 */ +/* #define USB_INTR_PENDING GIFR */ +/* #define USB_INTR_PENDING_BIT INTF0 */ +/* #define USB_INTR_VECTOR INT0_vect */ + +/* Set INT1 for D- falling edge to count SOF */ +/* #define USB_INTR_CFG EICRA */ +#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10)) +/* #define USB_INTR_CFG_CLR 0 */ +/* #define USB_INTR_ENABLE EIMSK */ +#define USB_INTR_ENABLE_BIT INT1 +/* #define USB_INTR_PENDING EIFR */ +#define USB_INTR_PENDING_BIT INTF1 +#define USB_INTR_VECTOR INT1_vect + +#endif /* __usbconfig_h_included__ */ diff --git a/keyboards/melody96/keymaps/default/keymap.c b/keyboards/melody96/keymaps/default/keymap.c index 9142a04708..16f4561b58 100644 --- a/keyboards/melody96/keymaps/default/keymap.c +++ b/keyboards/melody96/keymaps/default/keymap.c @@ -73,12 +73,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } From 61f95410666319ac5ef0cb3d533b820f45ae237c Mon Sep 17 00:00:00 2001 From: Alexander Kagno Date: Tue, 25 Sep 2018 16:38:04 -0600 Subject: [PATCH 030/269] Keymap: Velocikey implemented at userspace, readme is more helpful (#3974) * deleting arkag branch, forcibly moving changes over to master * fade_color function added, not tested * added half functions some stuff * surround_type function implemented and working. * added flashing function and removed fading, flashing supports infinite flashing along with controlled number flashes * added a fade state machine and functionality * build optimizations, changed fade to bounce between bounds rather than roll over, added a HALMAK layout * changes to sleep breath function, changed how I will switch to HALMAK * support for halmak added * support for activity detection added, condensed fading and flashing state machines, removed support for HALMAK and COLEMAK because arkag is stupid * changed sleep and inactive behaviors, now the color shifting reverses on state change, yay! save_color and reset_color are made to enable layer color changing to look cooler. * reformatted some if statements in state detection * changes to force fade to pause on boot, or plug in. * Attempting to move over to userspace, pushing to repository for help * userspace stuff.... * userspace stuff.... * layout changes, working userspace, Removed left side shift and replaced it with a MT() for LSFT and SPC. Userspace seems to be working properly now! HURRAY * Layout change Removed space/shift and reset modifiers to what they were originally. Added homerow modifiers. * Removed excessive tabs in files * Moved mods on homerow around... * changes recommended by @drashna * removed homerow mods, more flashy lighting! * changed delays for lighting. * velocikey code retro fit into userspace to match typing speed currently "working" but isn't as reactive as I want. * Readme and other documentation hidden throughout code * Added a pretty picture * pretty picture actually added * More readme updates * Velocikey now working inside my userspace! * Changed repo macro and fixed readme * Removed media layer, moved media control to LAZY layer * fixed more merge issues when I had to merge... --- keyboards/mechmini/v2/keymaps/arkag/keymap.c | 25 +- users/arkag/arkag.c | 234 ++++++++++--------- users/arkag/arkag.h | 27 +-- users/arkag/mechmini2.jpg | Bin 0 -> 3548191 bytes users/arkag/readme.md | 28 +++ 5 files changed, 169 insertions(+), 145 deletions(-) create mode 100644 users/arkag/mechmini2.jpg diff --git a/keyboards/mechmini/v2/keymaps/arkag/keymap.c b/keyboards/mechmini/v2/keymaps/arkag/keymap.c index 10502a5b61..7038f220c4 100644 --- a/keyboards/mechmini/v2/keymaps/arkag/keymap.c +++ b/keyboards/mechmini/v2/keymaps/arkag/keymap.c @@ -1,16 +1,21 @@ #include QMK_KEYBOARD_H #include "arkag.h" +/* + Userspace: + https://github.com/arkag/qmk_firmware/blob/master/users/arkag/arkag.c +*/ + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_2u_space_ortho( KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_TAB, TAP_A, TAP_S, TAP_D, TAP_F, KC_G, KC_H, TAP_J, TAP_K, TAP_L, TAP_SCN, QUOTE, - XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, QUOTE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT, M_PMOD, LRALT, M_SMOD, LOWER, RAISE, KC_SPC, KC_SLSH, LAZY, KC_LEFT, KC_DOWN, KC_RGHT), [_RAISE] = LAYOUT_2u_space_ortho( GRAVE, KC_1, KC_2, THREE, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, - _______, OBRACK, CBRACK, TAP_EQ, HYPHEN, _______, _______, KC_4, TAP_5, KC_6, _______, KC_NLCK, + _______, OBRACK, CBRACK, KC_EQL, HYPHEN, _______, _______, KC_4, KC_5, KC_6, _______, KC_NLCK, _______, _______, _______, CEDILLA, _______, KC_COMM, KC_PDOT, KC_1, KC_2, KC_3, KC_PPLS, KC_PENT, _______, _______, _______, KEEB, _______, _______, _______, M_OS, KC_PSLS, KC_PMNS, KC_PAST), @@ -18,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, M_ULIN, M_ITAL, _______, M_P_B, M_C_A_D, _______, _______, STRIKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_DEL, _______, _______, _______, M_BOLD, _______, _______, _______, _______, KC_PGUP, _______, - _______, _______, _______, _______, _______, MEDIA, KC_BSLS, M_CALC, KC_HOME, KC_PGDN, KC_END), + _______, _______, _______, _______, _______, _______, KC_BSLS, M_CALC, KC_HOME, KC_PGDN, KC_END), [_KEEB] = LAYOUT_2u_space_ortho( KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, @@ -26,15 +31,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RGB_M_P, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), - [_MEDIA] = LAYOUT_2u_space_ortho( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE, - _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), - [_LAZY] = LAYOUT_2u_space_ortho( - _______, _______, _______, _______, _______, M_TM, _______, M_SNIPT, M_SHRUG, _______, _______, _______, + _______, _______, _______, _______, _______, M_TM, _______, M_SNIPT, M_SHRUG, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, M_GGT, _______, M_UF, M_LOD, M_REPO, _______, _______, - _______, _______, _______, _______, _______, _______, _______, M_TF, M_LENNY, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + _______, _______, _______, _______, _______, _______, _______, M_TF, M_LENNY, _______, KC_VOLU, KC_MPLY, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), }; diff --git a/users/arkag/arkag.c b/users/arkag/arkag.c index c716b5e93f..a35e13ed6b 100644 --- a/users/arkag/arkag.c +++ b/users/arkag/arkag.c @@ -1,5 +1,10 @@ #include "arkag.h" +/* + Current Layout and Keeb: + https://github.com/arkag/qmk_firmware/blob/master/keyboards/mechmini/v2/keymaps/arkag/keymap.c +*/ + // Start: Written by konstantin: vomindoraan #include #include @@ -8,38 +13,68 @@ void send_unicode_hex_string(const char *str) { if (!str) { return; } // Saftey net while (*str) { - // Find the next code point (token) in the string - for (; *str == ' '; str++); - size_t n = strcspn(str, " "); // Length of the current token - char code_point[n+1]; - strncpy(code_point, str, n); - code_point[n] = '\0'; // Make sure it's null-terminated + // Find the next code point (token) in the string + for (; *str == ' '; str++); + size_t n = strcspn(str, " "); // Length of the current token + char code_point[n+1]; + strncpy(code_point, str, n); + code_point[n] = '\0'; // Make sure it's null-terminated - // Normalize the code point: make all hex digits lowercase - for (char *p = code_point; *p; p++) { - *p = tolower(*p); - } + // Normalize the code point: make all hex digits lowercase + for (char *p = code_point; *p; p++) { + *p = tolower(*p); + } - // Send the code point as a Unicode input string - unicode_input_start(); - send_string(code_point); - unicode_input_finish(); - str += n; // Move to the first ' ' (or '\0') after the current token + // Send the code point as a Unicode input string + unicode_input_start(); + send_string(code_point); + unicode_input_finish(); + str += n; // Move to the first ' ' (or '\0') after the current token } } // End: Written by konstantin: vomindoraan -uint8_t current_os, mod_primary_mask, fade_delay; -uint16_t flash_timer_one, flash_timer_two, - fade_timer_one, fade_timer_two, - active_timer_one, active_timer_two, - elapsed = 0, +// Start: Written by Chris Lewis +#ifndef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#endif +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif + +#define TYPING_SPEED_MAX_VALUE 200 +uint8_t typing_speed = 0; + +void velocikey_accelerate() { + if (typing_speed < TYPING_SPEED_MAX_VALUE) typing_speed += (TYPING_SPEED_MAX_VALUE / 50); +} + +void velocikey_decelerate() { + static uint16_t decay_timer = 0; + + if (timer_elapsed(decay_timer) > 500 || decay_timer == 0) { + if (typing_speed > 0) typing_speed -= 1; + //Decay a little faster at half of max speed + if (typing_speed > TYPING_SPEED_MAX_VALUE / 2) typing_speed -= 1; + //Decay even faster at 3/4 of max speed + if (typing_speed > TYPING_SPEED_MAX_VALUE / 4 * 3) typing_speed -= 3; + decay_timer = timer_read(); + } +} + +uint8_t velocikey_match_speed(uint8_t minValue, uint8_t maxValue) { + return MAX(minValue, maxValue - (maxValue - minValue) * ((float)typing_speed / TYPING_SPEED_MAX_VALUE)); +} +// End: Written by Chris Lewis + +uint8_t current_os, + mod_primary_mask, + fade_interval, num_extra_flashes_off = 0; Color underglow, flash_color, saved_color, - hsv_none = {0,0,0}, - hsv_white = {0,0,127}; + hsv_none = {0,0,0}; flashState flash_state = no_flash; fadeState fade_state = add_fade; activityState state = boot; @@ -79,134 +114,103 @@ Color mod_color(Color current_color, bool should_add, uint8_t change_amount) { return current_color; } -void reverse_fade (void) { - if (fade_state == add_fade){ - fade_state = sub_fade; - } else { - fade_state = add_fade; +void check_state (void) { + static uint16_t active_timer; + if (!active_timer) {active_timer = timer_read();} + static bool activated, deactivated, slept; + switch (state) { + case active: + if (!activated) { + if (slept) {rgblight_mode_noeeprom(1);} + activated = true; + deactivated = false; + slept = false; + } + fade_interval = velocikey_match_speed(1, 25); + if (timer_elapsed(active_timer) < INACTIVE_DELAY) {return;} + active_timer = timer_read(); + state = inactive; + return; + + case inactive: + if (!deactivated) { + deactivated = true; + activated = false; + slept = false; + } + velocikey_decelerate(); + fade_interval = velocikey_match_speed(1, 25); + if (timer_elapsed(active_timer) < SLEEP_DELAY) {return;} + state = sleeping; + return; + + case sleeping: + if (!slept) { + rgblight_mode_noeeprom(4); + slept = true; + activated = false; + deactivated = false; + } + return; + + case boot: + return; } } -void check_state (void) { - static bool activated, deactivated, slept; - switch (state) { - case active: - if (!activated) { - fade_delay = LED_FADE_DELAY; - reverse_fade(); - activated = true; - deactivated = false; - } - active_timer_two = timer_read(); - elapsed = active_timer_two - active_timer_one; - if (elapsed < INACTIVE_DELAY) {return;} - state = inactive; - return; - - case inactive: - if (!deactivated) { - fade_delay = LED_FADE_DELAY * 2; - reverse_fade(); - deactivated = true; - slept = false; - activated = false; - } - active_timer_two = timer_read(); - elapsed = active_timer_two - active_timer_one; - if (elapsed < SLEEP_DELAY) {return;} - state = sleeping; - return; - - case sleeping: - if (!slept) { - fade_delay = LED_FADE_DELAY * 6; - reverse_fade(); - slept = true; - deactivated = false; - activated = false; - } - return; - - case boot: - return; - } -} - void fade_rgb (void) { - static bool ran_once; - if (flash_state != no_flash) {return;} + static uint16_t fade_timer; if (state == boot) {return;} + if (!fade_timer) {fade_timer = timer_read();} + if (timer_elapsed(fade_timer) < fade_interval) {return;} switch (fade_state) { case add_fade: - if (!ran_once) { - fade_timer_one = timer_read(); - ran_once = true; - } - fade_timer_two = timer_read(); - elapsed = fade_timer_two - fade_timer_one; - if (elapsed < fade_delay) {return;} if (underglow.h == 359) { fade_state = sub_fade; return; } underglow.h = underglow.h + 1; - set_color(underglow, false); - // set_color_at(underglow, 0); - fade_timer_one = fade_timer_two; - return; + break; case sub_fade: - fade_timer_two = timer_read(); - elapsed = fade_timer_two - fade_timer_one; - if (elapsed < fade_delay) {return;} if (underglow.h == 0) { fade_state = add_fade; return; } underglow.h = underglow.h - 1; + break; + } + fade_timer = timer_read(); + if (flash_state == no_flash) { set_color(underglow, false); - // set_color_at(underglow, 0); - fade_timer_one = fade_timer_two; - return; } } void flash_rgb (void) { - static bool ran_once; + static uint16_t flash_timer; switch(flash_state) { case no_flash: return; case flash_off: - if (!ran_once) { + if (!flash_timer) {flash_timer = timer_read();} + if (timer_elapsed(flash_timer) >= LED_FLASH_DELAY) { set_color(hsv_none, false); - flash_timer_one = timer_read(); - ran_once = true; - flash_state = flash_on; - return; - } - flash_timer_two = timer_read(); - elapsed = flash_timer_two - flash_timer_one; - if (elapsed >= LED_FLASH_DELAY) { - set_color(hsv_none, false); - flash_timer_one = timer_read(); + flash_timer = timer_read(); flash_state = flash_on; } return; case flash_on: - flash_timer_two = timer_read(); - elapsed = flash_timer_two - flash_timer_one; - if (elapsed >= LED_FLASH_DELAY) { + if (timer_elapsed(flash_timer) >= LED_FLASH_DELAY) { set_color(flash_color, false); - flash_timer_one = timer_read(); + flash_timer = timer_read(); if (num_extra_flashes_off > 0) { flash_state = flash_off; num_extra_flashes_off--; } else { set_color(underglow, false); flash_state = no_flash; - ran_once = false; } } return; @@ -239,8 +243,9 @@ void set_os (uint8_t os, bool update) { mod_primary_mask = MOD_CTL_MASK; } set_color(underglow, update); - flash_color = underglow; - flash_state = flash_off; + flash_color = underglow; + flash_state = flash_off; + state = boot; num_extra_flashes_off = 1; } @@ -462,7 +467,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case M_REPO: if (record->event.pressed) { - SEND_STRING("https://github.com/arkag/qmk_firmware/tree/master/keyboards/mechmini/v2/keymaps/arkag"); + SEND_STRING("https://github.com/qmk/qmk_firmware/tree/master/users/arkag"); } return false; @@ -505,10 +510,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_LSFT: if (record->event.pressed) { - set_color(mod_color(underglow, true, 50), false); + save_color(underglow); + underglow = mod_color(underglow, true, 75); SEND_STRING(SS_DOWN(X_LSHIFT)); } else { - set_color(underglow, false); + reset_color(); SEND_STRING(SS_UP(X_LSHIFT)); } return false; @@ -522,8 +528,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { default: if (record->event.pressed) { - active_timer_one = timer_read(); state = active; + velocikey_accelerate(); } return true; } diff --git a/users/arkag/arkag.h b/users/arkag/arkag.h index 9c81e4487c..a4672a8e82 100644 --- a/users/arkag/arkag.h +++ b/users/arkag/arkag.h @@ -25,26 +25,13 @@ #define MOD_GUI_MASK (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) #define MOD_SFT_MASK (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) -#define TAP_A LALT_T(KC_A) -#define TAP_SCN RALT_T(KC_SCOLON) - -#define TAP_S LCTL_T(KC_S) -#define TAP_L RCTL_T(KC_L) - -#define TAP_D LSFT_T(KC_D) -#define TAP_K RSFT_T(KC_K) - -#define TAP_F LGUI_T(KC_F) -#define TAP_J RGUI_T(KC_J) - -#define TAP_EQ LSFT_T(KC_EQUAL) -#define TAP_5 RSFT_T(KC_5) - #define LED_FLASH_DELAY 150 -#define LED_FADE_DELAY 10 -#define INACTIVE_DELAY 200 -#define SLEEP_DELAY 60000 +#define ACCEL_DELAY 500 +#define DEACCEL_DELAY 500 + +#define INACTIVE_DELAY 250 +#define SLEEP_DELAY 180000 enum { _QWERTY = 0, @@ -124,6 +111,10 @@ enum tapdances { void send_unicode_hex_string(const char *str); +void velocikey_accelerate(void); +void velocikey_decelerate(void); +uint8_t velocikey_match_speed(uint8_t minValue, uint8_t maxValue); + void set_color (Color new, bool update); void save_color(Color to_save); void reset_color(void); diff --git a/users/arkag/mechmini2.jpg b/users/arkag/mechmini2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..611a0859c0c431273e99013f3599816dff9204ae GIT binary patch literal 3548191 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

t^HVN(Kz2= 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 )x4rEw}05fBAb{|@JE~=hniZ&8* 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 TjK7rxWin)cxySlIGsE@nP8 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

KZZM2T#n*yHXwT& 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�wGcooD_D(=X33(5Zg3fhJ$ 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 z�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

&)pbU#u&2v%sOCwDZwqSnM?U) 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�wjgf>YUDOmYv_(8T_p!cRJa<3lsa;O-_ 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μEZ;!=%2?nnr@|KC7s2h&VX+@ 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�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

tINAM?E!}3IT-L}Nbovw!St#)4;x1L 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

^`%+L(-lHxPn;)7 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 GbBe;>_EF6n&T} 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Ο?UwRV@Xhrro)BzbT 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

cnL1p51P%~TlJ>71x;SX6OF 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

&z4 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

6_^+k^0Ac?C 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

q#UF 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�@e zmPmZNNTmmE9VBdw)IVobM^srGjixMQoc{nS1Xq%1AemyjTyIPygy0IF%Roc35X5c9 z?kV%y#~Z!7#8k4VK48udsG|N`80L=AW>z49lHE=-PjPHV_Jk5nk*hO6fbH*-REuiU z$i7{ULu9*&OTknI^`=3h9I-;=%ZJhxe4mlpQ)%yw9OJQ?0s>Kw* zD>1;35<~Rk+LqS9#;Gnqc4E>rykrmMRhvMeXP>P#bb!611~pRW~zOfYk79f457i@01v|EmUu

b%;3P!(j`xc$%XAAf4FG}pJbh9#6tuaIPB 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

bF`i}KtIb)7jmg?d$EQ6V*AA*Hmz;S>op}bZg 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%0AYdPx)Yok{smml|&l(a#rseOR^^VCdlXLd{7VM$j zmx)JH^{xBFeWl3AJuo>nm46&azG+jF*dF!S7{a3EmZ_OZxazk%&xIeg4!hvX$gFi) z9icJ}`^hRt^slD=8-CDU5b=e&O<}1-M1v>`46A1Z9^aLGAF9o=G8wiL-yN%rZ;5^( z@J-QeA6b&#HKY-o9rv;XE~8-cfw5^yqpxT-v2Sc6y`rZVhuw)FU%T zaG7p4?(a^LD4Y`Uz)xP{{VuBYn~X8E$+6PBf@$2gd=mu9N_Xm9SwUo!|(Vg zw}$l-9NNaEZt?9ZP|1Ol{7Oet{&=s1#bp@mESi)ZyPrct5layp#h+h2vDn3%BRJxr zdqP5$Obp|b-n8pEn<6A)pJBy=ajQ01eZxH_g!AZUo>B2I%yQM`qc+)CK z>_=jMFM9L+ooCI3V+19eAt$3b&;K!%y?4 zk8o(;01Th**PD2^{tAoY8>1rW3h)*B=VnVZ1v=H zJ-Dwn@dw7=80&Eu=hrXTs*@ONmS*RnB%Xg7^{C`HseD#OF0>LqN_=rrA_l=8{{UL}qT^rHFQJ& zaZ$+1o0$nah8UhmHR#gFsl!=2nYzuM%kd}n$oR420L?D6=?k5qQL(W4o_RIq8n=%% z-DYF`qo};>$CZ_`GwWGUX}WZlfW&5L03?=^f_*6(%LFgd%-4kDBLTek@F75szGkCf+9{jvhU9|Hu!^iLg(g8F$&lN zHLIl_h+NH=VntWXuDMZ_kw;VLYUCx+fIGJq`L}le01BaO%BmJLWkPZly5#k#e9*k? zC$Zhr6`O}k6r^cKdcrn|TL6sh#z^-Dx(|l_HoEYBxo>tFOswIUqYyFlt~^}1ULR=W z62qE&H#6H@hlW4|U;xDAu{FzE2@0@rms42PacQIV1NJ}o{bR3M!vyz2;yDw`xP_12 z2Z9gbUo8Is!A1TA%kZn>)#k6FK$2-%yEWyR3$<5rg3HqblbjBjJwY^~O!JF*^uwOLYgedC!Y<`7|#RN^av3 z2a%$W%NSfK?tN<4hx|z$z*%CEokMM6I`RE0?kZu_wLG}bO%G?&wdYvXWqc6F3)3RD z^xbi#MUcz8s0Djsyt7N!qIiS5smE6HIBs|Xx=lA;W{)zGnK>-D$Kza1grhAsG?b#^ zcXR8e7?`55ESOyX01@wAG4Zp+vzvESal8^8n0&GQee1fv@fr(uk}I)~Cn3n=@UIT| zp|8)VHOBjr!0-SaeR3BkH)TBY0Qo0OBpSnmvQY=rk-U}6T}!d@Mi}Vv|!l{>Qjc* z)-^)7JC5dI%{^?;#zLzDxaWD~{XHu3*()~1iJx%eo}Seyw~geC#6w{G*gS)dm8z!6 zaxz2`C{g8{F(8sNimiOIz>fnXD=_)lx}U?fZd}@zmoO#+5HpXudz#GFQeoyhIrBf| zo3}5n-gK?h4#U*cR;dgs=9|#CQ*~XD^L>wn zbsbgB%vLPO=mAm+u&%elf3okyFB;CVTIo_ojxwdAIZ!&1Ywqt0e$Iagd?1$7YI-|K zcQ7%}=0*pW!W(+bNu-45g%aqY)XdQo#?ki2o*n{Y|Wjx*0u zTYBtzwc)k5{?QDPC_-iA0q8viW8K&bSBF`9XCTN^dHb#hUOfTtSUQua?>BQrWV9;F zCY=?u>U>rc72l)>dQ zCf&&R>U}@LpQu{gqe*Qrb)Clr2g-BnOk1gJr;AV2q;0_fMhBtoOz_x-OqFBUH8K8iuc|Fzy87TEVlQS6Gw~4 zCmZ9HPf>%K=XDJ#<4x3arKy@5qz(7CZ3K4qru~ae(O{NMLf7rG%NE;wov9P|IPQNM zCwhq|@_kB=x^jQEH|#~>FCSrz9#r1SMXPe zO}?>VG!iQq+7^h$>K8vFaqF7oBG&EhB4pgbqils^%IEpl-8%8L`W_OZ*|2WaWOcZ4 z8U!2Mb*9|k#UeYxq%sUf18{z|lG?Gu89w_Bzb-ypccqU|ZM&Jn1vzIc`c!*(u=Wx( zq?wBt;|(H}!}^{n(XezZP_qT&Y3b~0f?qIiDQC(YFmA^+J72{LH14d3qn12^YL!^B zT`445Yk4J2tC5aF0i07YBp}Hv#v=**YuD-TMXk(FE=0wdIglajdsE7W22mLSMpQRA zt&`Bjr*f6WyiFLo^4^C{?DzJ^- zH;teGxx)tP-%m;`g{kVFvsdjgvuXYi+oWsU)k{tO~;wnEKgrS`1Y=E z_EG)6ye08_NrvBExsKNI2*>(7&Ot5H5*Rf;=c%Kemu5^S$lMXZJCbg01Tx6 z0F8cCi@;W+E?SZ0k@Yd0TDo^f8>oB=iqd;cYvKO3VYs$Zs}#Jf(VT8ldV+92Dzjnn zR$mQF{ul9|h1pVBfm@O?0O`U09(`-F&@^37!wvRpsa8b@8W{qdW7@Q*w$pWZCVR~; z3zoQy4bK?MbNUL$>Z(z@+@&VAJlk2Y)jT<7-Y)nyTt_+FV7cX6oRU2_&O3Cg{u|XS z{we7v{u2KH5BazIe7!@>hs)pTk>~-&eXFR`^xJD&sVwXYv_tMF8$usIJu1$lrrcOU z%;gKpGOnwP)x!%IwBF-#Z61IB016kwPiQo&9d7Ey4&aRxt^2&5FnWr`)<0%eTbqmR zPsCE)+uOznkhdi9#(z5X2<1qSvrMi)=R6GhRUKiju25USbF?@)2b@<;Ixt#Ti@TnG z;g5uV9q^m~0Bh+GsQW|y_EqGPI#)q+6bo}aMTd~F24FeC{_cHy;-{GmJ7q$v4<1Tm z`1_xwSMdyAYPCy<4(~7K2NW!+M+T zPh1>yCbi}5y)7n?NnzCO>Ljs~m%e9oT2DO6sR% zkrTP2@RQ;`vEi>1+smcNC)m&*wFwyTz4#qTuep8?{8Ed>o)nJi_VyuZCIoUg%Of6u z0nL0Z;g5%U`a-uYZeg;TZH8N;v^w|4d=K;5zMEf(-v&M({4&zKJ@Eek#1UUTlegQi z?U)q0l!2TKovNf94}6|YaAL7FFxZH?O6SnznT<>6eY4TmBBgeXChm&b}D9(_a$CL2}=9y$)(kM@zj~ z((3vs;%O~`k24G^j+n<%dR1%vF3B|*H7^iLBxd|>h|9te(6)Z2u6U!u`YomM>5@w{ zvdD@prh@C`jAJE$>53HN8Kj=~{{Vy3%i2?n;-d9;zh7HwXIS1zHSA*bBnc4`c|8QZ zKm_`C$FQiiO=d}Nrm+#b*-iesI8Q6=eL(A01S{eH0JQ1~($5)SvBunxGqjb>KG#L? z-Sxcbaep?RblsAs&`Ft2cLGW0IP27MYga01^EIdS(B5;S7tYq7*F!*T(W8nKoWGk8 zlHDyx3`aqdcmRL(srSj@sWn)xFQmAR?&*QMvv}B~s-rmvpcolE{d-n+&kE|1%5;yl zMwe&^6EF@y#zDty@kOoXqo>O4sJu*s2<$|sC5OMKrC{mvYj=OSoHC*97c*@?xb8Gt z{{RhZS~QaCw$fbLUa^YaMq*wPo0NhHTFnfR6aOn$bbv73IY_`%{Tty<@TF&vwWg3w1FgU|00EVh>;k|On zcIwcVX(T&YBEf+>9(tPm!mO&&ovI_AP`-u#0EBw2*M@vdbvs7S+2JBvV7X?`83fl; zrE41ZiZx4(JHr}8i8`+EzGl#;%W|^UBQR+7nMAu0sGGCp&f%^K_MQ`y! z(?-*0x3<&bf(Z#}=0wD;)8+RA9V?Pja(aoTm67L~pM$UT?Mi(`^%EqGAu4W^^4#|9 zKb={y(PGqfYi%|wxUC_YMH1ghlA*i(2iJz2h)4?+N zC~eRYA`pLi2*(4{J%wgme$ko+iG6vY>KakJw0JB38788lncH@3Qhu(&N;~*{ME0AehKhjiM1O$KZ#cAw)WRM;dsG}NJrgSaClxb z)O~9YXGzK3T#MgRf%wI5@dsYHvY*46a|``QD0or6NYL|w-GCqGwR9c`Zx?C4A!s~7 z;plZeBF@k(<6#d3nCh>dI_L5|E77c_*X%wdY91fcbO<&3Tg3v**aQo1PbveF017e= zNX|V+8(t6i&*0DaMLa>^om=7L>2GHN`*yC8jj*vNB=O1PILOcCi=9qr@~sGN+Sum2 zL*f4b2WVPtrn}&O5;exsCc1#lmwcb~c)$z?L+es_$M(F`wZ9GOo)ghLAqCC!R=#w$ zklVAE?ZzV{9)*b~zZvPluOhRw@eSqMrIxl)omkrHHlT=RO~eL|Ju(MQ$B%mSPleta z@t4AXhZmkA(QRyA;%Qnqt){dy`RmC(VaRStCmH7%>@lCQrw@I-N2}2zg3^3Z<4Coo zvG5kDe`R}l8hLi9F_xn%EP(yqdSr@;=e3x}1XlM_EN)s! zcW374RQeA}oCz5cRh$_a$!3$4hz^90(-l?~#yz`Co>Wk}AQ_bj&e7?gU+}4!;mjAd zw+k$BH_g3HGmK}R-t;P5JW>%N42(R0ee8M;)Y;x9x%)ywK$QTSJg)<$J5grEpi1)@ zWb)H!C^t>z@T1UrR3RW_nmI!sIxwo}NI#WC_T(_SdDt6)Yt56b!sMxNbLxTX33UR1gUPP9*6$` zuThJc5;1XiIwvP|ZoEjj>J1Ss-<=Vf?M1RVbcs_L&#CWCMXf~G^EHGZB(gg!Y8W&x z!{-^~_o(7#wwZ;z(=c}2R#CjK=h~blg3>vMoM4`Dh=$F`8#(;X`$dy*iEsJJ6*FNnG}PDRy?n#N_5tjw-S_j9zyB^2*FYmaZN0n8SbTte5Kv8 zCHvg<`q2g3#ECw_C1xtfIm-6P^s7vrNDYVDS+C|}50En)LCGfv9ebYjVlTAGVdlN8 zzE?Y(sKl-4PhdM#R~ECvCAYh`*(p=BDZnK5{Ha=BJVqh71ItgE76;`6s5tMQ^;Z>z zlgaYgg9TlsS~X%BM;%Qyq(IC2<->fcROG40LVan->h}otvxR|(59X*Xw2nchM>pCc z@?w<{)yVTDPmzaiG5XU&WNnqVEoT$P>Q45QW}~{eSQXgCC}$W@2L%5BcnWmW+&=jv zof$&m;@OUAP!#!#7Xd)|{{W|@QUQX}JDYf-xRyw+OP%h$5OIP)sV$+nOJCnWKv_?h zH>n*@txkqjhDfbdQ+gH40L6XsY4+j-Wtgdy!nr^X@pLVUU{pw>$&b!mqC&;TQJ?eD zo=`UHg9hSPy0e?deV10?KzriZ+FP(sTT{phohdeV#H=nS$@fOq3DkFd8OI{KNRYv*|!?M{Nb*mOF^!VgbaYryV*9k~<_@b-5RLa_zb|$uWWa z^HE&R%B(If^AfIAM+ct5q>FSmUQ?uil3k3QR2pbku^T*U>ncfw-I6=xQG2(TVpUzr z9I#w66Xm(VA9aREKjBk(NOqt`Mq+W3#y-CF8~IU3=g%Ubf0U`}NbG43QW-Y}C2$Tp z;9w8&rHIJ{=`>^&3xz)Z^&>)2u{3O0kCf-P^`}OmRIE;@8|8L!oc{oY0wE}h#n7oZ z{p5WJ_dlgRM0AtqLc1_j5sdwD+N6;Asq)AhCu@9weh1cwBU6~CZM>Yg=Lgb&7?Bl+ z=20T=C9rT$`#kobLR^<15_n>xABHL68r^r9(a1P54xg85Ng3pJZylmn)9Fue!Mwy=jDVq!IUVXp6EIj7Ron?a zQ5fL&r=So+357hghj5XIW<36M)`~{T-~a}CbDFbn98B5V<|XDTjKO0&ixtU9 zHsB2R#Z|(@Z3+mBzuoG^Pw@R|$sBGh@23`s;L-qHhD0hrD z7Z?ghL*AH&Mr1`I5wt4)@PXEbc-2dt%Gm7L$E8QKkOoIzT$4{-icZ#0a1L|EeJBE1 zZ<(W87Evb$GGKh9^vyz&yhy+T2vfCBaw$ZTNTLqHmmt-C${6z(*af)5)cOkPk(=<1l*9x8EwD3 zag2}~ADQ%`DH1jfG8qX!^3Ack*!xp*>;pS|yS{V-sPv=+?*Pn;gTN!22Xe`g+CAvK z9PU2U;UXz9thr6!eDy)ztEmh^w4qeC9f`-~QmGE@^W}DoU{Eq)mR;cIcTx^Ml%hM4 zA#oa&F@v!OC`DHnD?a4=JC32T(66YeVz}~^S!55i=PWw=8UUFUSrp?TjuH29nwQL& z{L@5VY5+0E1GuX3xo6s{M{-EQf_*6r*@(6q3QriNVW(o$yAbWTSqx+Y!*h&rO*c{` zaxy;9Q|Dz)p8m$6R*Fe>qrNs}S3HyHO^B;Tq32vP5a*Hj5%^Uk7i98DaK&MP5k>;5!_q=q6b!-*W>_neQVBnCE_72(R30o5Dt4_dJrT+2Lb94^t4ROLE#q!(jj zh{-1Kk~fx|mFlF_(D_crGjFh{-b9QT6Vq`1qM?U;id`ED4o-Th9mQCCgtfO>iYjIE zyYC0%oO%jPHc}jH#m%_LEP_n9jQ*8o7=Upc(gYy*)>}jkrCA(ZUJhnSF`kzBl&vOiNIf^U>i)lwW3f;|7y12ZZ zgm!GPvBG(!awFrDk6I&|X<Rf=e#SUnB*q3u zZ^E6J3^p@7KWUCu1&>APpKjGCwQFg7xi-rpkCdt5PpPU)aeEklAQlWUCf~b{QA=q0 zxk9#frtzL5rMY#RqI8^AT+LLw*T%&Jb(#Pb-D{Qw@`>7l5x!~l{3{n79 z?S$C`ZB^tCTD3DxZv@S61{u&P80Q(zX_po(K#JHp1{rxveeOSp=xDviV1hYeh_%Iw z?JI}#2P^^O6-326?qQX-iAe>I@OxGGG!|UkjZ#(ekT6*Z$v%Rr{edjt5nGcXRwbk@ zlFWaHniB?@ojZrRPq9q-P6@GFfuv8>z^;z zk5f&Rq_GPd0Fk%M1E(Y(tv+j#5y3Eo6B$)g$tMJ6p=(4-wDM%$(#X5{;S?O7#;uli zok)ytz$P*}jCB;rrM4FBCDg(_tWM=$xGB?{gw(q+*)?P7--W+r)jSa#bE=360=EUZ z1o|58tToRJM`a$Ds%j|z05J;@QI+gY?!Se2@4$=b^-qV8+uPj9EI}7(2Oy9zc&}9O z--Y1SG|4W4tK35n@{nV3$>$#R{Ur#~#^n^M^FMki{s{S4PubU$Udh_$seBdqtsjMT z2eh>bb7%+_@JOF4566sG&>s%wi`d98=as^s!VU^8De{3Y<7fpj0k z-X?i1FJvG=a_!7()MFh_@~>9V{tft&+r+CbwJeu9RMzSup4pC1pkdm+TC5c++^O99 z3?$_`UiQb)p8`BP;7wD+cRJt19bQ#SIJT*`n1zs&$81-vd_2{EXb*)N)ISlt4P#^C zUk@XBPo_mGtd}u*6)Ff}$IZ=n4x6ND{vXg{(kv|{cuED7iGE{VweXX|`hJTpop0km zh}Sv{cM_y9TulD}C`Lc)4toz%f%@0GPL3}dg>a_%V3)mhfA}XYSyQD_?^gCZ&)O^F z*X-5te(y!q{5|m7Sn%e#<(1S-_DqVW?wI85ob#M^UU@j>ej?fUM@55AgTh+EUCAU1 zBSjJ7GJ1k*(Ed070Kq@LEc`d{!1%xL_r~@fG0~ZP+kh^Wrt;4v#{fSZ;c|YxYsPK# z%e(aw+*`>C4g+n#HS|0oTLo7K8dxgMT#erU0Il`(7A0M$C1c2c;Gvpam;V5=cZu)Q zOp@f;TMLsEaRwhFE9X72w>j;M_OHgzHe9&+ zW+vOQe(xVjf_SHq$Co-e$vD~GzZkMT4Ti}LsztOrNaH7B9B=do+Lqc#rrxGL^qh<>s1=EEK?@=T% z6p`hXk5L+{5G29=RU^f6Kt`Q6Gv^y{t^UnQkTOq;fKVwiGi~{kj+}ogYBwl~J;@@) z8sW<3IHcz}_NZjFo&)B-<=lUJ9BYyF_N&Ir?H1m27b@?wcb=f+kM4?#?32wBMFGT& z{70Ta{{U;+tC5VPNQqfOfP`dYl7AY7O10v@M%cqz1##i#!hm5sP=EL8Ij6c_h(RsLZq_nPH=twsl_Hk{)-0nWG8WKZf{O% zb+EOxjx~k}V^JyGPb}H(^c5+(v5po=esH{#oDgYP3JV;p7~ER4Ag?PS+zmiOD9^AI_zjd3b z_NvUNW@m?TtF948UERs{rD&zN23R9Iqd5*6fDiMg#Hzr$OSu%0APdm3Q42$*-J#cC`Dp%oC=nS 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%0AmB1_01c=J_+!4y>j{< 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

( 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

tvX)G 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�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%0ALtgk^>RAY7$O@-!bLv+k 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

XA)@AkIT%AD9t^+D8~Q!M2|pLnKZJ3~`?0 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

k;^IY?j_jhZ}C# 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⪼Zl?db?OwVCA``G6N779~r1 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%0D+!PeQ02Il~mjhp~eTT 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 -?3ae#FiIQ|k&U4A8TF@#BYR@0 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

dRUoy5GfZH^MutYy!&if`@vB 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 HS(Akqz&?tdgs!)^KzP8 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

J(Yx8}1yg&`WcJ?_A9KrOt;D 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%0A8%eZe@XP8Zsl^SIo{6aO?D@ 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

HKPi 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 literal 0 HcmV?d00001 diff --git a/users/arkag/readme.md b/users/arkag/readme.md index 76a5c4525b..c685892f86 100644 --- a/users/arkag/readme.md +++ b/users/arkag/readme.md @@ -1,3 +1,26 @@ +# Shot on Pixel 2 XL with Cheap Lamp at Work + +![mmm, tasty](mechmini2.jpg) + +# I don't know what I'm doing + +Some links: +* [Layout File: Mech Mini 2](layout_mm2) +* [Userspace Header](arkag_h) +* [Userspace Main](arkag_c) + +Here's a list of some things I have working with my currently [keyboard](mm2_home): + +* Reactive (sort of) fading while typing, ported from [Velocikey](https://github.com/qmk/qmk_firmware/pull/3754). +* OS Switching, storing to EEPROM +* OS Specific Macros and Shortcuts(WIN+SHIFT+S for Windows and CMD+SHIFT+4 for MacOS) +* Flashing RGB LED on OS change +* Hex Unicode Macros dependent on OS(half works on Windows due to [WinCompose](https://github.com/SamHocevar/wincompose) not functioning properly just yet). +* "Sleep" function activates after 3 minutes (breathing). +* Markdown style macros for surround type __eve__ ~~ryw~~ *her* **eee** (apparently only certain places support underline and strikethrough ಠ__ಠ) + +# License Stuff + Copyright 2018 arkag arkag@pm.me This program is free software: you can redistribute it and/or modify @@ -12,3 +35,8 @@ 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 . + +[arkag_c]: /users/arkag/arkag.c +[arkag_h]: /users/arkag/arkag.h +[layout_mm2]: /keyboards/mechmini/v2/keymaps/arkag/keymap.c +[mm2_home]: https://cartel.ltd/projects/mechmini2/ From 223081bf2b201a53fb0383d6be0cacb8cde39140 Mon Sep 17 00:00:00 2001 From: wanleg <32079073+wanleg@users.noreply.github.com> Date: Tue, 25 Sep 2018 15:39:41 -0700 Subject: [PATCH 031/269] Keymap: 4x4 pro micro (#3976) * 4x4 - pro micro version * pro-micro setup on 4x4 * tap dance LCTL/RESET key * remove test file * more research * revert a couple un-intended edits * opt_defs version of adding custom rules.mk variables * cleanup * cleanup * cleanup * cleanup * layout edits * layout edits * keymap edit * numpad layout change * got tap dance layer-switch working * keymap changes * temporary revert * restore previous settings * misc fixes * layer order change * fix layout matrix * Update tapdances.c --- keyboards/4x4/4x4.h | 4 +- layouts/community/ortho_4x12/wanleg/config.h | 19 ++++- layouts/community/ortho_4x12/wanleg/keymap.c | 17 +++++ users/wanleg/rules.mk | 12 +-- users/wanleg/tapdances.c | 77 ++++++++++++++++++-- users/wanleg/wanleg.c | 6 ++ users/wanleg/wanleg.h | 51 +++++++++---- 7 files changed, 158 insertions(+), 28 deletions(-) diff --git a/keyboards/4x4/4x4.h b/keyboards/4x4/4x4.h index db67ab34e9..ec75c3e280 100644 --- a/keyboards/4x4/4x4.h +++ b/keyboards/4x4/4x4.h @@ -43,7 +43,7 @@ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, ___, ___, ___, ___}, \ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, ___, ___, ___, ___}, \ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, ___, ___, ___, ___}, \ - { K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, K3a, K3b, ___, ___, ___, ___} \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, ___, ___, ___, ___} \ } #define LAYOUT_ortho_4x16( \ @@ -56,7 +56,7 @@ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e, K0f }, \ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e, K1f }, \ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, K2f }, \ - { K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f } \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f } \ } #endif diff --git a/layouts/community/ortho_4x12/wanleg/config.h b/layouts/community/ortho_4x12/wanleg/config.h index 0d2cc591e3..2444b8b976 100644 --- a/layouts/community/ortho_4x12/wanleg/config.h +++ b/layouts/community/ortho_4x12/wanleg/config.h @@ -1,7 +1,7 @@ #ifndef CONFIG_USER_H #define CONFIG_USER_H -//QMK DFU settings (ProMicro boards) +//QMK DFU settings (ProMicro boards with QMK bootloader) // set top left key as bootloader mode escape key on Lets Split rev2 #if defined(KEYBOARD_lets_split_rev2) #define QMK_LED B0 @@ -13,10 +13,25 @@ #endif // set top left key as bootloader mode escape key on 4x4 48key layout -#if defined(KEYBOARD_4x4) +#if defined(KEYBOARD_4x4) && !defined(PRO_MICRO) #define QMK_LED B0 #define QMK_ESC_OUTPUT C6 // usually COL #define QMK_ESC_INPUT B2 // usually ROW #endif +// use alternate settings for 4x4 board using ProMicro instead of Micro +// usage: make 4x4:wanleg PM=yes +#if defined(KEYBOARD_4x4) && defined(PRO_MICRO) +#define QMK_ESC_OUTPUT F4 // usually COL +#define QMK_ESC_INPUT D1 // usually ROW +#define QMK_LED B0 + +//need to undefine standard 4x4 array before defining alternate ProMicro array +#undef MATRIX_ROW_PINS +#undef MATRIX_COL_PINS +#define MATRIX_ROW_PINS { D1, D0, D4, C6 } +//last 4 elements of the column array are are not broken out on a ProMicro (included only to preserve array structure) +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7, F0, B7, D6, F1 } +#endif + #endif diff --git a/layouts/community/ortho_4x12/wanleg/keymap.c b/layouts/community/ortho_4x12/wanleg/keymap.c index f6030469c0..6fe8446f6d 100644 --- a/layouts/community/ortho_4x12/wanleg/keymap.c +++ b/layouts/community/ortho_4x12/wanleg/keymap.c @@ -15,6 +15,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______________Qwerty_Row__2_______________, KC_LCTL, KC_LGUI, KC_LALT, GHERKIN, SUBTER, SH_T(KC_SPC), SH_T(KC_SPC), SUPRA, KC_RGUI, KC_RALT, GHERKIN, KC_RCTL ), + +#elif defined(KEYBOARD_4x4) +[_GK] = LAYOUT_ortho_4x12_wrapper( + _______________GherkinLike_0_______________, + _______________GherkinLike_1_______________, + _______________GherkinLike_2_______________, + TD(RST_TAP_DANCE), KC_LGUI, KC_LALT, NUMPAD, NUMBER, ETCETERA, KC_SPC,DIRECTION, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL +), + +[PAD] = LAYOUT_ortho_4x4_wrapper( + _______________NUMPAD_Row__0_______________, + _______________NUMPAD_Row__1_______________, + _______________NUMPAD_Row__2_______________, + _______________NUMPAD_Row__3_______________ +), + #else [_GK] = LAYOUT_ortho_4x12_wrapper( _______________GherkinLike_0_______________, @@ -64,4 +80,5 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ______________ETCETERA_Row__2______________, ______________ETCETERA_Row__3______________ ), + }; diff --git a/users/wanleg/rules.mk b/users/wanleg/rules.mk index ac86769538..5630401315 100644 --- a/users/wanleg/rules.mk +++ b/users/wanleg/rules.mk @@ -1,8 +1,4 @@ -ifeq ($(strip $(KEYBOARD)), lets_split_rev2) -SRC += ../../keyboards/lets_split/lets_split.c -endif - -SRC += wanleg.c tapdances.c +SRC += wanleg.c tapdances.c TAP_DANCE_ENABLE = yes MOUSEKEY_ENABLE = yes @@ -12,3 +8,9 @@ MOUSEKEY_ENABLE = yes ifeq ($(strip $(dfu)), qmk) BOOTLOADER = qmk-dfu endif + +#use alternate settings for 4x4 board using ProMicro instead of Micro +#usage: make 4x4:wanleg PM=yes +ifeq ($(strip $(PM)), yes) + OPT_DEFS += -DPRO_MICRO +endif diff --git a/users/wanleg/tapdances.c b/users/wanleg/tapdances.c index 6a98b896a5..0778bf5f7e 100644 --- a/users/wanleg/tapdances.c +++ b/users/wanleg/tapdances.c @@ -36,7 +36,7 @@ int cur_dance (qk_tap_dance_state_t *state) { } ///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION END ///// ///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION START ///// -//instantialize an instance of 'tap' for the 'ENT' tap dance. +//instantiate 'tap' for the 'ENT' tap dance. static tap ENTtap_state = { .is_press_action = true, .state = 0 @@ -67,7 +67,7 @@ void ENT_reset (qk_tap_dance_state_t *state, void *user_data) { ENTtap_state.state = 0; } -//instanalize an instance of 'tap' for the 'DEL' tap dance. +//instantiate 'tap' for the 'DEL' tap dance. static tap DELtap_state = { .is_press_action = true, .state = 0 @@ -95,7 +95,7 @@ void DEL_reset (qk_tap_dance_state_t *state, void *user_data) { DELtap_state.state = 0; } -//instantialize an instance of 'tap' for the 'CAD' tap dance. +//instantiate 'tap' for the 'CAD' tap dance. static tap CADtap_state = { .is_press_action = true, .state = 0 @@ -107,7 +107,9 @@ void CAD_finished (qk_tap_dance_state_t *state, void *user_data) { case SINGLE_TAP: //register_code(KC_SPC); SEND_STRING(SS_LGUI("l")); + #ifdef BACKLIGHT_ENABLE backlight_set(3); + #endif break; case SINGLE_HOLD: //register_code(KC_NO); @@ -121,7 +123,9 @@ void CAD_finished (qk_tap_dance_state_t *state, void *user_data) { case DOUBLE_TAP: //register_code(KC_ENT); SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_DELETE)))); + #ifdef BACKLIGHT_ENABLE backlight_set(0); + #endif break; //case DOUBLE_HOLD: register_code(KC_NO); break; //register this keycode when button is tapped and then held case DOUBLE_HOLD: @@ -136,7 +140,9 @@ void CAD_reset (qk_tap_dance_state_t *state, void *user_data) { case SINGLE_TAP: //unregister_code(KC_SPC); SEND_STRING(SS_LGUI("l")); + #ifdef BACKLIGHT_ENABLE backlight_set(3); + #endif break; case SINGLE_HOLD: register_code(KC_NO); //(un)register this keycode when button is held and then released @@ -145,13 +151,71 @@ void CAD_reset (qk_tap_dance_state_t *state, void *user_data) { case DOUBLE_TAP: //register_code(KC_ENT); SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_DELETE)))); + #ifdef BACKLIGHT_ENABLE backlight_set(0); + #endif break; case DOUBLE_HOLD: register_code(KC_NO); //(un)register this keycode when button is tapped and then held, and then released case DOUBLE_SINGLE_TAP: unregister_code(KC_NO); } CADtap_state.state = 0; -} +} + +//instantiate 'tap' for the 'RST' tap dance. +static tap RSTtap_state = { + .is_press_action = true, + .state = 0 +}; + +void RST_finished (qk_tap_dance_state_t *state, void *user_data) { + RSTtap_state.state = cur_dance(state); + switch (RSTtap_state.state) { + case SINGLE_TAP: register_code(KC_LCTL); break; + case SINGLE_HOLD: register_code(KC_LCTL); break; + case DOUBLE_TAP: reset_keyboard(); break; + case DOUBLE_HOLD: register_code(KC_NO); break; + case DOUBLE_SINGLE_TAP: register_code(KC_LCTL); unregister_code(KC_LCTL); register_code(KC_LCTL); + } +} + +void RST_reset (qk_tap_dance_state_t *state, void *user_data) { + switch (RSTtap_state.state) { + case SINGLE_TAP: unregister_code(KC_LCTL); break; + case SINGLE_HOLD: unregister_code(KC_LCTL); break; + case DOUBLE_TAP: unregister_code(KC_NO); break; + case DOUBLE_HOLD: unregister_code(KC_NO); + case DOUBLE_SINGLE_TAP: unregister_code(KC_LCTL); + } + RSTtap_state.state = 0; +} + +//instantiate 'tap' for the 'LYR' tap dance. +static tap LYRtap_state = { + .is_press_action = true, + .state = 0 +}; + +void LYR_finished (qk_tap_dance_state_t *state, void *user_data) { + LYRtap_state.state = cur_dance(state); + switch (LYRtap_state.state) { + case SINGLE_TAP: register_code(KC_PSLS); break; + case SINGLE_HOLD: register_code(KC_NO); break; + case DOUBLE_TAP: set_single_persistent_default_layer(_GK); break; + case DOUBLE_HOLD: register_code(KC_NO); break; + case DOUBLE_SINGLE_TAP: register_code(KC_PSLS); unregister_code(KC_PSLS); register_code(KC_PSLS); + } +} + +void LYR_reset (qk_tap_dance_state_t *state, void *user_data) { + switch (LYRtap_state.state) { + case SINGLE_TAP: unregister_code(KC_PSLS); break; + case SINGLE_HOLD: unregister_code(KC_NO); break; + case DOUBLE_TAP: set_single_persistent_default_layer(_GK); break; + case DOUBLE_HOLD: unregister_code(KC_NO); + case DOUBLE_SINGLE_TAP: unregister_code(KC_PSLS); + } + LYRtap_state.state = 0; +} ///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION END ///// //Tap Dance Definitions @@ -162,8 +226,11 @@ qk_tap_dance_action_t tap_dance_actions[] = { ,[TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC) ,[ENT_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ENT_finished, ENT_reset) ,[DEL_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, DEL_finished, DEL_reset) + ,[RST_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, RST_finished, RST_reset) ,[CAD_TD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, CAD_finished, CAD_reset) + ,[LYR_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, LYR_finished, LYR_reset) + }; //In Layer declaration, add tap dance item in place of a key code -//TD(TD_SFT_CAPS) \ No newline at end of file +//TD(TD_SFT_CAPS) diff --git a/users/wanleg/wanleg.c b/users/wanleg/wanleg.c index 931546c153..f22c34ba30 100644 --- a/users/wanleg/wanleg.c +++ b/users/wanleg/wanleg.c @@ -41,6 +41,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case NUMPAD: + if (record->event.pressed) { + set_single_persistent_default_layer(PAD); + } + return false; + break; case SUBTER: if (record->event.pressed) { layer_on(SUB); diff --git a/users/wanleg/wanleg.h b/users/wanleg/wanleg.h index 8b98ec7ddf..65028751a9 100644 --- a/users/wanleg/wanleg.h +++ b/users/wanleg/wanleg.h @@ -25,7 +25,8 @@ enum userspace_layers { NUM75, DIR75, ETC75, - FN75 + FN75, + PAD, }; #elif KEYBOARD_xd75 enum userspace_layers { @@ -49,29 +50,31 @@ enum userspace_layers { gNUM, gDIR, gETC, + PAD, }; #else enum userspace_layers { _GK = 0, + PAD, _QW, - QW75, - GK75, - gGK, ONE, SUB, SUP, NUM, DIR, ETC, + gGK, gNUM, gDIR, gETC, + QW75, + GK75, SUB75, SUP75, NUM75, DIR75, ETC75, - FN75 + FN75, }; #endif @@ -95,7 +98,8 @@ enum userspace_custom_keycodes { NUMBER75, DIRECTION75, ETCETERA75, - FUNCTION75 + FUNCTION75, + NUMPAD, }; @@ -107,6 +111,8 @@ enum { ,ENT_TAP_DANCE ,DEL_TAP_DANCE ,CAD_TD + ,RST_TAP_DANCE + ,LYR_TAP_DANCE }; #endif @@ -123,6 +129,7 @@ enum { #define LAYOUT_ortho_5x10_wrapper(...) LAYOUT_ortho_5x10(__VA_ARGS__) #define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) #define LAYOUT_ortho_5x15_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__) +#define LAYOUT_ortho_4x4_wrapper(...) LAYOUT_ortho_4x4(__VA_ARGS__) // Blocks for each of the major keyboard layouts // Organized so we can quickly adapt and modify all of them @@ -141,7 +148,7 @@ enum { * | A | S | D | F | G | H | J | K | L | SPACE | * | | | | | | | | | |SFThold | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | Z | X | C | V/gNUM | B/gETC | N | M/gDIR | ,/GUI | ./ALT | BKSC | + * | Z | X | C | V/gNUM | B/gETC | N | M/gDIR | ,/GUI | ./ALT | BSPC | * | SFThold| | | | | | | | |CTRLhold| * '-----------------------------------------------------------------------------------------' */ @@ -168,7 +175,7 @@ enum { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | F11 | F12 | | | | ENTER | SHIFT | GUI | ./ALT | BKSC | + * | F11 | F12 | | | | ENTER | SHIFT | GUI | ./ALT | BSPC | * | | | | | | | | | |CTRLhold| * '-----------------------------------------------------------------------------------------' */ @@ -191,12 +198,12 @@ enum { /* Gherkin-Like * .-----------------------------------------------------------------------------------------------------------. - * | ESC | Q//ESC | W | E | R | T | Y | U | I | O | P | BACKSP | + * | ESC | Q//ESC | W | E | R | T | Y | U | I | O | P | BSPC | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | TAB | A | S | D | F | G | H | J | K | L | SPACE | ' | * | | | | | | | | | | |SFThold | | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * |SFT/CAPS| Z | X | C | V/NUM | B/ETC | N | M/DIR | ,/GUI | ./ALT | BKSC | ENT/SFT| + * |SFT/CAPS| Z | X | C | V/NUM | B/ETC | N | M/DIR | ,/GUI | ./ALT | BSPC | ENT/SFT| * | |SFThold | | | | | | | | |CTRLhold| | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | LCTRL | LGUI | ALT | ONEHAND| NUM | ETC | SPACE | DIR | RGUI | ALT | DEL | CTRL | @@ -210,7 +217,7 @@ enum { /* Qwerty * .-------------------------------------------------------------------------------------. - * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * | Esc | Q | W | E | R | T | Y | U | I | O | P | BSPC | * |-------+------+------+------+------+-------------+------+------+------+------+-------| * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | * |-------+------+------+------+------+------|------+------+------+------+------+-------| @@ -246,7 +253,7 @@ enum { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | F11 | F12 | | | | | | RGUI | ./ALT | BKSC | | + * | | F11 | F12 | | | | | | RGUI | ./ALT | BSPC | | * | | | | | | | | | | |CTRLhold| | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | | | gherkin| | | | ENTER | SHIFT | | | | | @@ -259,11 +266,11 @@ enum { /* Gherkin Numbers * .-----------------------------------------------------------------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | BACKSP | + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | BSPC | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BKSC | | + * | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BSPC | | * | | | | | | | | | | |CTRLhold| | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | | | | | | | ENTER | SHIFT | RGUI | | | | @@ -307,4 +314,20 @@ enum { #define ______________ETCETERA_Row__2______________ _______, _______________Gherkin_ETC_2_______________, _______ #define ______________ETCETERA_Row__3______________ _______, _______, _______, _______, _______, _______, LALT(LCTL(KC_DEL)), _______, _______, _______, _______, _______ +/* Single 4x4 board only + * .-----------------------------------. + * | 7 | 8 | 9 | BSPC | + * |--------+--------+--------+--------| + * | 4 | 5 | 6 | SPACE | + * |--------+--------+--------+--------| + * | 1 | 2 | 3 | ENTER | + * |--------+--------+--------+--------| + * | 0 |/ //_GK | . | - | + * '-----------------------------------' + */ + +#define _______________NUMPAD_Row__0_______________ KC_KP_7, KC_KP_8, KC_KP_9, KC_BSPC +#define _______________NUMPAD_Row__1_______________ KC_KP_4, KC_KP_5, KC_KP_6, KC_SPC +#define _______________NUMPAD_Row__2_______________ KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT +#define _______________NUMPAD_Row__3_______________ KC_KP_0, TD(LYR_TAP_DANCE), KC_KP_DOT, KC_PMNS #endif // !USERSPACE From 627ee050b491cc9d6ab57f90ac0f0779f6be47c9 Mon Sep 17 00:00:00 2001 From: holtenc Date: Tue, 25 Sep 2018 17:48:01 -0500 Subject: [PATCH 032/269] Keyboard: Remove BACKLIGHT BREATHING as default config for Prime Keyboards (#3979) * initial commit * Update readme.md * Update keymap.c added comment for description of function to control LED as layer indicator * corrected formatting as requested. * format for configurator * corrected info.json to propertly reflect layout in Configurator * updated layouts to reflect physical keyboard * comment out BACKLIGHT BREATHING in config.h --- keyboards/primekb/prime_l/config.h | 2 +- keyboards/primekb/prime_m/config.h | 2 +- keyboards/primekb/prime_o/config.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/primekb/prime_l/config.h b/keyboards/primekb/prime_l/config.h index 46dd3604e4..8e24578166 100644 --- a/keyboards/primekb/prime_l/config.h +++ b/keyboards/primekb/prime_l/config.h @@ -40,7 +40,7 @@ along with this program. If not, see . #define DIODE_DIRECTION COL2ROW #define BACKLIGHT_PIN B6 -#define BACKLIGHT_BREATHING +/*#define BACKLIGHT_BREATHING*/ #define BACKLIGHT_LEVELS 4 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ diff --git a/keyboards/primekb/prime_m/config.h b/keyboards/primekb/prime_m/config.h index 82a8037c99..366504375e 100644 --- a/keyboards/primekb/prime_m/config.h +++ b/keyboards/primekb/prime_m/config.h @@ -40,7 +40,7 @@ along with this program. If not, see . #define DIODE_DIRECTION COL2ROW #define BACKLIGHT_PIN B7 -#define BACKLIGHT_BREATHING +/*#define BACKLIGHT_BREATHING*/ #define BACKLIGHT_LEVELS 4 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ diff --git a/keyboards/primekb/prime_o/config.h b/keyboards/primekb/prime_o/config.h index 9f634474cf..eb897ef8fa 100644 --- a/keyboards/primekb/prime_o/config.h +++ b/keyboards/primekb/prime_o/config.h @@ -40,7 +40,7 @@ along with this program. If not, see . #define DIODE_DIRECTION COL2ROW #define BACKLIGHT_PIN B7 -#define BACKLIGHT_BREATHING +/*#define BACKLIGHT_BREATHING*/ #define BACKLIGHT_LEVELS 4 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ From 4d5705ea6ceeb11cd2adc018644ec87c51af4e86 Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Mon, 3 Sep 2018 08:26:53 +0100 Subject: [PATCH 033/269] Add new RGB matrix effect digital rain aka The Matrix --- quantum/rgb_matrix.c | 66 ++++++++++++++++++++++++++++++++++++++++++++ quantum/rgb_matrix.h | 1 + 2 files changed, 67 insertions(+) diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 197bc1ac5e..8ad00c37dd 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -510,6 +510,69 @@ void rgb_matrix_jellybean_raindrops( bool initialize ) { } } +void rgb_matrix_digital_rain( const bool initialize ) { + // algorithm ported from https://github.com/tremby/Kaleidoscope-LEDEffect-DigitalRain + const uint8_t drop_ticks = 28; + const uint8_t new_drop_probability = 24; + const uint8_t pure_green_intensity = 0xd0; + const uint8_t max_brightness_boost = 0xc0; + const uint8_t max_intensity = 0xff; + + static uint8_t map[MATRIX_COLS][MATRIX_ROWS] = {{0}}; + static uint8_t drop = 0; + + if (initialize) { + rgb_matrix_set_color_all(0, 0, 0); + memset(map, 0, sizeof map); + drop = 0; + } + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + if (row == 0 && drop == 0 && rand() < RAND_MAX / new_drop_probability) { + // top row, pixels have just fallen and we're + // making a new rain drop in this column + map[col][row] = max_intensity; + } + else if (map[col][row] > 0 && map[col][row] < max_intensity) { + // neither fully bright nor dark, decay it + map[col][row]--; + } + // set the pixel colour + uint8_t led, led_count; + map_row_column_to_led(row, col, &led, &led_count); + + if (map[col][row] > pure_green_intensity) { + const uint8_t boost = (uint8_t) ((uint16_t) max_brightness_boost + * (map[col][row] - pure_green_intensity) / (max_intensity - pure_green_intensity)); + rgb_matrix_set_color(led, boost, max_intensity, boost); + } + else { + const uint8_t green = (uint8_t) ((uint16_t) max_intensity * map[col][row] / pure_green_intensity); + rgb_matrix_set_color(led, 0, green, 0); + } + } + } + if (++drop > drop_ticks) { + // reset drop timer + drop = 0; + for (uint8_t row = MATRIX_ROWS - 1; row > 0; row--) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + // if ths is on the bottom row and bright allow decay + if (row == MATRIX_ROWS - 1 && map[col][row] == max_intensity) { + map[col][row]--; + } + // check if the pixel above is bright + if (map[col][row - 1] == max_intensity) { + // allow old bright pixel to decay + map[col][row - 1]--; + // make this pixel bright + map[col][row] = max_intensity; + } + } + } + } +} + void rgb_matrix_multisplash(void) { // if (g_any_key_hit < 0xFF) { HSV hsv = { .h = rgb_matrix_config.hue, .s = rgb_matrix_config.sat, .v = rgb_matrix_config.val }; @@ -685,6 +748,9 @@ void rgb_matrix_task(void) { case RGB_MATRIX_JELLYBEAN_RAINDROPS: rgb_matrix_jellybean_raindrops( initialize ); break; + case RGB_MATRIX_DIGITAL_RAIN: + rgb_matrix_digital_rain( initialize ); + break; #ifdef RGB_MATRIX_KEYPRESSES case RGB_MATRIX_SOLID_REACTIVE: rgb_matrix_solid_reactive(); diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index b91c9fba59..046d98790f 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -81,6 +81,7 @@ enum rgb_matrix_effects { RGB_MATRIX_RAINBOW_PINWHEELS, RGB_MATRIX_RAINBOW_MOVING_CHEVRON, RGB_MATRIX_JELLYBEAN_RAINDROPS, + RGB_MATRIX_DIGITAL_RAIN, #ifdef RGB_MATRIX_KEYPRESSES RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_SPLASH, From 7f1268f35edb24d57f424a1936265ced78eb3daa Mon Sep 17 00:00:00 2001 From: Savio Fernandes Date: Thu, 27 Sep 2018 02:03:42 +0800 Subject: [PATCH 034/269] Keymap: add artbycrunk iris layout (#3964) * version 1 * version 1.1 * version 1.2 --- keyboards/iris/keymaps/saviof/config.h | 39 +++++++++ keyboards/iris/keymaps/saviof/keymap.c | 107 +++++++++++++++++++++++++ keyboards/iris/keymaps/saviof/rules.mk | 3 + 3 files changed, 149 insertions(+) create mode 100644 keyboards/iris/keymaps/saviof/config.h create mode 100644 keyboards/iris/keymaps/saviof/keymap.c create mode 100644 keyboards/iris/keymaps/saviof/rules.mk diff --git a/keyboards/iris/keymaps/saviof/config.h b/keyboards/iris/keymaps/saviof/config.h new file mode 100644 index 0000000000..eb4c7328eb --- /dev/null +++ b/keyboards/iris/keymaps/saviof/config.h @@ -0,0 +1,39 @@ +/* +Copyright 2018 Savio Fernandes + +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 + +/* Use I2C or Serial, not both */ + +//#define USE_SERIAL +#define USE_I2C + +/* Select hand configuration */ + +//#define MASTER_LEFT +#define MASTER_RIGHT +// #define BACKLIGHT_BREATHING +// #define EE_HANDS + +#define TAPPING_TERM 200 + +// #undef RGBLED_NUM +// #define RGBLIGHT_ANIMATIONS +// #define RGBLED_NUM 30 +// #define RGBLIGHT_HUE_STEP 8 +// #define RGBLIGHT_SAT_STEP 8 +// #define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/iris/keymaps/saviof/keymap.c b/keyboards/iris/keymaps/saviof/keymap.c new file mode 100644 index 0000000000..a63e606821 --- /dev/null +++ b/keyboards/iris/keymaps/saviof/keymap.c @@ -0,0 +1,107 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _ADJ 3 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJ, +}; + +//Tap Dance Declarations +enum { + TD_SPC_ENT = 0 +}; + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT) +}; + +#define KC_ KC_TRNS + +#define KC_LOWR LT(_LOWER, KC_LEFT) //LOWER +#define KC_RASE LT(_RAISE, KC_RIGHT) //RAISE +#define KC_ADJT LT(_ADJ, KC_LGUI) //RAISE +#define KC_SCET TD(TD_SPC_ENT) +#define KC_RST RESET +#define KC_BL_S BL_STEP +#define KC_DBUG DEBUG +#define KC_RTOG RGB_TOG +#define KC_RMOD RGB_MOD +#define KC_LMOD RGB_RMOD +#define KC_RHUI RGB_HUI +#define KC_RHUD RGB_HUD +#define KC_RSAI RGB_SAI +#define KC_RSAD RGB_SAD +#define KC_RVAI RGB_VAI +#define KC_RVAD RGB_VAD +#define KC_BTOG BL_TOGG +#define KC_BLVL BL_STEP +#define KC_BRTG BL_BRTG + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT_kc( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + TAB , Q , W , E , R , T , Y , U , I , O , P ,DEL , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + LSFT, A , S , D , F , G , H , J , K , L ,SCLN,QUOT, + //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| + LCTL, Z , X , C , V , B ,HOME, END , N , M ,COMM,DOT ,SLSH,RSFT, + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + ADJT,LOWR, SPC, SCET,RASE, ENT + // `----+----+----' `----+----+----' + ), + + [_LOWER] = LAYOUT_kc( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + TILD,EXLM, AT ,HASH, DLR,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + RST , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + DEL , ,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE, + //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| + BL_S, , , ,DOWN,LCBR,LPRN, RPRN,RCBR, P1 , P2 , P3 ,MINS, , + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + , ,DEL , DEL , , P0 + // `----+----+----' `----+----+----' + ), + + [_RAISE] = LAYOUT_kc( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + ,MPRV,MNXT,VOLU,PGUP,UNDS, EQL ,HOME, , , ,BSLS, + //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| + MUTE,MSTP,MPLY,VOLD,PGDN,MINS, , ,PLUS,END , , , , , + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + , , , , , + // `----+----+----' `----+----+----' + ), + + [_ADJ] = LAYOUT_kc( + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + ,LMOD, , , , , , , , , , , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + RTOG,RMOD,RHUI,RSAI,RVAI, , BTOG,BLVL,BRTG, , , , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + ,DBUG,RHUD,RSAD,RVAD, , , , , , , , + //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| + BL_S,RST , , , , , , , , , , , , , + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + , , , , , + // `----+----+----' `----+----+----' + ) + +}; diff --git a/keyboards/iris/keymaps/saviof/rules.mk b/keyboards/iris/keymaps/saviof/rules.mk new file mode 100644 index 0000000000..0e1023be1a --- /dev/null +++ b/keyboards/iris/keymaps/saviof/rules.mk @@ -0,0 +1,3 @@ +RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = yes +TAP_DANCE_ENABLE=yes From f3551747b3cd071bc242fd646f32567fb89f5356 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Daisuke Date: Thu, 27 Sep 2018 03:04:31 +0900 Subject: [PATCH 035/269] Keymap: Add Koba's keymap for Ergo42. (#3965) * Keymap: Add Koba's keymap for Ergo42. * Fix: Remove unnecessary #define. * Fix: Rename readme files to lowercase. --- keyboards/ergo42/keymaps/koba/config.h | 33 ++++++ keyboards/ergo42/keymaps/koba/keymap.c | 128 +++++++++++++++++++++ keyboards/ergo42/keymaps/koba/readme.md | 57 +++++++++ keyboards/ergo42/keymaps/koba/readme_ja.md | 62 ++++++++++ 4 files changed, 280 insertions(+) create mode 100644 keyboards/ergo42/keymaps/koba/config.h create mode 100644 keyboards/ergo42/keymaps/koba/keymap.c create mode 100644 keyboards/ergo42/keymaps/koba/readme.md create mode 100644 keyboards/ergo42/keymaps/koba/readme_ja.md diff --git a/keyboards/ergo42/keymaps/koba/config.h b/keyboards/ergo42/keymaps/koba/config.h new file mode 100644 index 0000000000..360d6a5621 --- /dev/null +++ b/keyboards/ergo42/keymaps/koba/config.h @@ -0,0 +1,33 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + diff --git a/keyboards/ergo42/keymaps/koba/keymap.c b/keyboards/ergo42/keymaps/koba/keymap.c new file mode 100644 index 0000000000..f05f78b9e7 --- /dev/null +++ b/keyboards/ergo42/keymaps/koba/keymap.c @@ -0,0 +1,128 @@ +/* Copyright 2018 Daisuke Kobayashi + * + * 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 +#include "keymap_jp.h" + +enum { + _WIN, + _MACOS, + _LOWER, + _RAISE, + _FUNC +}; + +#define KC_KNA KC_LANG1 +#define KC_EISU KC_LANG2 +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) +#define FN MO(_FUNC) +#define WIN DF(_WIN) +#define MACOS DF(_MACOS) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* WIN + * ,------------------------------------------------. ,------------------------------------------------. + * | Esc | Tab | Q | W | E | R | T | | Y | U | I | O | P | @ ` | Bksp | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Del | Ctrl | A | S | D | F | G | | H | J | K | L | ; + | ; * |Enter | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | H/Z |Shift | Z | X | C | V | B | | N | M | , < | . > | / ? | Up |Shift | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Fn | Ctrl | Win | Alt | Mhen |LOWER |Space | |Space |RAISE | Henk | Menu | Left | Down |Right | + * `------------------------------------------------' `------------------------------------------------' + */ + [_WIN] = LAYOUT( \ + KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_BSPC, \ + KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, KC_ENT, \ + KC_ZKHK, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, \ + FN, KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, LOWER, KC_SPC, KC_SPC, RAISE, KC_HENK, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT \ + ), + + /* MACOS + * ,------------------------------------------------. ,------------------------------------------------. + * | Esc | Tab | Q | W | E | R | T | | Y | U | I | O | P | @ ` | Bksp | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Del | Ctrl | A | S | D | F | G | | H | J | K | L | ; + | ; * |Enter | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Caps |Shift | Z | X | C | V | B | | N | M | , < | . > | / ? | Up |Shift | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Fn | Ctrl | Opt | Cmd | Eisu |LOWER |Space | |Space |RAISE | Kana | Cmd | Left | Down |Right | + * `------------------------------------------------' `------------------------------------------------' + */ + [_MACOS] = LAYOUT( \ + KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_BSPC, \ + KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, KC_ENT, \ + KC_CAPS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, \ + FN, KC_LCTL, KC_LALT, KC_LGUI, KC_EISU, LOWER, KC_SPC, KC_SPC, RAISE, KC_KNA, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT \ + ), + + /* LOWER + * ,------------------------------------------------. ,------------------------------------------------. + * | | | ! | " | # | $ | % | | & | ' | ( | ) | | = | | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | | | XXXX | XXXX | XXXX | { | ( | | ) | } | XXXX | ~ | | | _ | | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | | | XXXX | XXXX | XXXX | XXXX | XXXX | | XXXX | XXXX | XXXX | XXXX | XXXX | PgUp | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | | | Home | PgDn | End | + * `------------------------------------------------' `------------------------------------------------' + */ + [_LOWER] = LAYOUT( \ + _______, _______, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), JP_EQL, _______, \ + _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, JP_LCBR, JP_LPRN, JP_RPRN, JP_RCBR, XXXXXXX, JP_TILD, JP_PIPE, JP_UNDS, _______, \ + _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \ + ), + + /* RAISE + * ,------------------------------------------------. ,------------------------------------------------. + * | | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | | | F11 | F12 | XXXX | [ | ( | | ) | ] | XXXX | ^ | \ | \ | | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + [_RAISE] = LAYOUT( \ + _______, _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, _______, \ + _______, _______, KC_F11, KC_F12, XXXXXXX, JP_LBRC, JP_LPRN, JP_RPRN, JP_RBRC, XXXXXXX, JP_CIRC, KC_JYEN, KC_RO, _______, \ + _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + + /* FUNC + * ,------------------------------------------------. ,------------------------------------------------. + * |Reset | | XXXX | XXXX | XXXX | XXXX | XXXX | |PrtSc |SLock |Pause | XXXX | XXXX | XXXX | | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | | | XXXX | XXXX | XXXX | XXXX | >Win | | Ins | XXXX | XXXX | XXXX | XXXX | XXXX | | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | | | XXXX | XXXX | XXXX | XXXX | >Mac | | XXXX | XXXX | XXXX | XXXX | XXXX | Vol+ | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | Vol- | Play | + * `------------------------------------------------' `------------------------------------------------' + */ + [_FUNC] = LAYOUT( \ + RESET, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_SLCK, KC_PAUS, XXXXXXX, XXXXXXX, XXXXXXX, _______, \ + _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, WIN, KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \ + _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MACOS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_VOLD, KC_MPLY \ + ) +}; + diff --git a/keyboards/ergo42/keymaps/koba/readme.md b/keyboards/ergo42/keymaps/koba/readme.md new file mode 100644 index 0000000000..1fe0543902 --- /dev/null +++ b/keyboards/ergo42/keymaps/koba/readme.md @@ -0,0 +1,57 @@ +# Keymap for Ergo42 + +## About + +This keymap is for Ergo42. + +- JIS layout. +- Independent Windows layout/MacOS layout layers. +- Bottom row keys arranged like a standard keyboard. +- Arrow keys are designed in the inverted-T. + +## Layout + +![keyboard-layout](https://user-images.githubusercontent.com/1042121/45888288-aa35ed00-bdf8-11e8-8741-71fe9a0fadc6.png) + +## Windows mode/MacOS mode + +|mode |key | +|------------|------------| +|Windows mode|Function + g| +|MacOS mode |Function + b| + +When switching mode, the following keys switches. + +|Windows |MacOS | +|---------------|------------| +|Alt |Command(GUI)| +|Windows(GUI) |Option(Alt) | +|Menu(App) |Command(GUI)| +|Muhenkan |Eisu | +|Henkan |Kana | +|Hankaku/Zenkaku|Caps | + +## Layers + +|No.|Name |Description | +|---|--------|---------------------------| +| 4 |Function|Mode switch, Media | +| 3 |Raise |Number, Function | +| 2 |Lower |Symbol, Home/End, PgUp/PgDn| +| 1 |MacOS |MacOS layout | +| 0 |Windows |Windows layout | + +When power is turn on, No.0 Windows layer becomes enabled. + +## Windows/MacOS layers + +Standard layers for Windows mode/MacOS mode. + +## Raise/Lower layers + +Layer enabled during pressing Raise or Lower key. + +## Function layer + +Layer enabled during pressing Function key. + diff --git a/keyboards/ergo42/keymaps/koba/readme_ja.md b/keyboards/ergo42/keymaps/koba/readme_ja.md new file mode 100644 index 0000000000..e1dbda821f --- /dev/null +++ b/keyboards/ergo42/keymaps/koba/readme_ja.md @@ -0,0 +1,62 @@ +# Keymap for Ergo42 + +## 概要 + +Ergo42 用キーマップです。 + +- JIS 配列 +- 独立した Windows 配列/MacOS 配列レイヤー +- 普通のキーボード配列に似せた最下段キー +- 逆 T 字 (凸型) 配列の矢印キー + +## レイアウト + +![keyboard-layout](https://user-images.githubusercontent.com/1042121/45888288-aa35ed00-bdf8-11e8-8741-71fe9a0fadc6.png) + +## Windows モード/MacOS モード + +|モード |キー | +|--------------|------------| +|Windows モード|Function + g| +|MacOS モード |Function + b| + +モードを切り替えることで下記のキーが切り替わります。 + +|Windows |MacOS | +|------------|------------| +|Alt |Command(GUI)| +|Windows(GUI)|Option(Alt) | +|Menu(App) |Command(GUI)| +|無変換 |英数 | +|変換 |かな | +|半角/全角 |Caps | + +## レイヤー + +|No.|名称 |内容 | +|---|--------|--------------------------| +| 4 |Function|モード切替, メディア | +| 3 |Raise |数字, ファンクションキー | +| 2 |Lower |記号, Home/End, PgUp/PgDn | +| 1 |MacOS |MacOS 配列 | +| 0 |Windows |Windows 配列 | + +電源 ON により No.0 の Windows レイヤーが有効になります。 + +## Windows/MacOS レイヤー + +Windows モード/MacOS モードの標準レイヤー。 + +## Raise/Lower レイヤー + +Raise キーまたは Lower キーを押している間だけ有効になるレイヤー。 + +普通のキーボードの最上段キー (数字/記号) に加えて、標準レイヤーに入らなかった記号キーが3つ (`[{`, `]}`, `\_`) 入っています。 +括弧キー `[{`, `]}` は `(`, `)` を加えて、左右対称に配置しました。 + +## Function レイヤー + +Function キーを押している間だけ有効になるレイヤー。 + +Windows モード/MacOS モードの切り替え、メディア系の操作、標準レイヤーに入らなかった機能キーのレイヤーです。 + From 722f06ff8c7c77843cc5be14d9fdb7d68a16ebf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Wed, 26 Sep 2018 20:08:56 +0200 Subject: [PATCH 036/269] Keymap: Update whitefox/konstantin keymap (#3980) * Rename constexpr keymap folder to konstantin * Replace numpad comma with Unicode comma * Rename tap dance constants * Move record->event.pressed check into switch * Use RShift as a dedicated Fn key --- .../{constexpr => konstantin}/config.h | 4 +- .../{constexpr => konstantin}/keymap.c | 50 ++++++++++--------- .../{constexpr => konstantin}/rules.mk | 0 3 files changed, 29 insertions(+), 25 deletions(-) rename keyboards/whitefox/keymaps/{constexpr => konstantin}/config.h (100%) rename keyboards/whitefox/keymaps/{constexpr => konstantin}/keymap.c (80%) rename keyboards/whitefox/keymaps/{constexpr => konstantin}/rules.mk (100%) diff --git a/keyboards/whitefox/keymaps/constexpr/config.h b/keyboards/whitefox/keymaps/konstantin/config.h similarity index 100% rename from keyboards/whitefox/keymaps/constexpr/config.h rename to keyboards/whitefox/keymaps/konstantin/config.h index b4bc05acf5..ad40105a7c 100644 --- a/keyboards/whitefox/keymaps/constexpr/config.h +++ b/keyboards/whitefox/keymaps/konstantin/config.h @@ -2,9 +2,9 @@ #define FORCE_NKRO -#define TAPPING_TOGGLE 2 -#define TAPPING_TERM 200 #define PERMISSIVE_HOLD +#define TAPPING_TERM 200 +#define TAPPING_TOGGLE 2 #define MOUSEKEY_DELAY 50 #define MOUSEKEY_INTERVAL 15 diff --git a/keyboards/whitefox/keymaps/constexpr/keymap.c b/keyboards/whitefox/keymaps/konstantin/keymap.c similarity index 80% rename from keyboards/whitefox/keymaps/constexpr/keymap.c rename to keyboards/whitefox/keymaps/konstantin/keymap.c index b19f1c81fa..6998798e3c 100644 --- a/keyboards/whitefox/keymaps/constexpr/keymap.c +++ b/keyboards/whitefox/keymaps/konstantin/keymap.c @@ -1,12 +1,14 @@ #include QMK_KEYBOARD_H +#define FN MO(L_FN) #define FN_CAPS LT(L_FN, KC_CAPS) -#define FN_CTRL TD(TD_FN_CTRL) -#define RL_ALT TD(TD_RL_ALT) // Unused +#define FN_RCTL TD(TD_FN_RCTL) // Unused +#define RLALT TD(TD_RLALT) // Unused #define TOP LCTL(KC_HOME) #define BOTTOM LCTL(KC_END) +#define UC_COMM UC(0x002C) #define UC_LPRN UC(0x0028) #define UC_RPRN UC(0x0029) #define UC_EQLS UC(0x003D) @@ -32,19 +34,21 @@ enum custom_keycodes { bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (!record->event.pressed) { return true; } - switch (keycode) { case CLEAR: - SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); + if (record->event.pressed) { + SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); + } return false; case NUMPAD: - layer_invert(L_NUMPAD); - bool num_lock = host_keyboard_leds() & 1<event.pressed) { + layer_invert(L_NUMPAD); + bool num_lock = host_keyboard_leds() & 1< Date: Thu, 27 Sep 2018 03:13:19 +0900 Subject: [PATCH 037/269] Keyboard: Crkbd stands for Corne Keyboard, not helidox (#3985) --- keyboards/crkbd/info.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/crkbd/info.json b/keyboards/crkbd/info.json index d74bb49430..45a0255c1a 100644 --- a/keyboards/crkbd/info.json +++ b/keyboards/crkbd/info.json @@ -1,5 +1,5 @@ { - "keyboard_name": "crkbd (helidox) rev. 1", + "keyboard_name": "crkbd rev. 1", "url": "", "maintainer": "qmk", "width": 15, From dbdbbbd5c9b1458f682eec661d0a17f91dccb4dc Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Wed, 26 Sep 2018 12:17:54 -0700 Subject: [PATCH 038/269] Keyboard: Refactor XMMX keyboard to XMMX and Toad (#3955) * pull out toad keyboard and get it compiling * refactor xmmx * use the correct LAYOUT macros * move LED code out to toad.c file * move LED code out to xmmx.c file * adjust for correct number of columns and pins used * remove led set user --- keyboards/toad/config.h | 54 +++++++++++ .../keymaps/ansi_wk}/keymap.c | 19 +--- .../keymaps/ansi_wkl}/keymap.c | 21 +--- .../toad => toad/keymaps/default}/keymap.c | 21 +--- .../keymaps/iso_wk}/keymap.c | 21 +--- .../keymaps/iso_wkl}/keymap.c | 21 +--- keyboards/toad/readme.md | 14 +++ keyboards/toad/rules.mk | 56 +++++++++++ keyboards/toad/toad.c | 18 ++++ keyboards/toad/toad.h | 91 ++++++++++++++++++ .../{xmmx_ansi_wk => ansi_wk}/keymap.c | 21 +--- .../{xmmx_ansi_wkl => ansi_wkl}/keymap.c | 21 +--- keyboards/xmmx/keymaps/default/keymap.c | 21 +--- .../keymaps/{xmmx_iso_wk => iso_wk}/keymap.c | 21 +--- .../{xmmx_iso_wkl => iso_wkl}/keymap.c | 21 +--- keyboards/xmmx/readme.md | 8 +- keyboards/xmmx/xmmx.c | 17 ++++ keyboards/xmmx/xmmx.h | 96 +------------------ 18 files changed, 276 insertions(+), 286 deletions(-) create mode 100644 keyboards/toad/config.h rename keyboards/{xmmx/keymaps/toad_ansi_wk => toad/keymaps/ansi_wk}/keymap.c (68%) rename keyboards/{xmmx/keymaps/toad_ansi_wkl => toad/keymaps/ansi_wkl}/keymap.c (67%) rename keyboards/{xmmx/keymaps/toad => toad/keymaps/default}/keymap.c (69%) rename keyboards/{xmmx/keymaps/toad_iso_wk => toad/keymaps/iso_wk}/keymap.c (68%) rename keyboards/{xmmx/keymaps/toad_iso_wkl => toad/keymaps/iso_wkl}/keymap.c (67%) create mode 100644 keyboards/toad/readme.md create mode 100644 keyboards/toad/rules.mk create mode 100644 keyboards/toad/toad.c create mode 100644 keyboards/toad/toad.h rename keyboards/xmmx/keymaps/{xmmx_ansi_wk => ansi_wk}/keymap.c (73%) rename keyboards/xmmx/keymaps/{xmmx_ansi_wkl => ansi_wkl}/keymap.c (73%) rename keyboards/xmmx/keymaps/{xmmx_iso_wk => iso_wk}/keymap.c (73%) rename keyboards/xmmx/keymaps/{xmmx_iso_wkl => iso_wkl}/keymap.c (73%) diff --git a/keyboards/toad/config.h b/keyboards/toad/config.h new file mode 100644 index 0000000000..f1d32c15b6 --- /dev/null +++ b/keyboards/toad/config.h @@ -0,0 +1,54 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6776 +#define DEVICE_VER 0x0001 +#define MANUFACTURER farmakon +#define PRODUCT "TOAD" +#define DESCRIPTION "TOAD" + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 14 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B0, F6, F5, F4, F1, F0 } +#define MATRIX_COL_PINS { B3, B2, B1, E6, B7, C7, C6, D4, D6, D7, B4, D0, D1, F7 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* number of backlight levels */ + +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 0 +#endif + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 0 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif + +#endif diff --git a/keyboards/xmmx/keymaps/toad_ansi_wk/keymap.c b/keyboards/toad/keymaps/ansi_wk/keymap.c similarity index 68% rename from keyboards/xmmx/keymaps/toad_ansi_wk/keymap.c rename to keyboards/toad/keymaps/ansi_wk/keymap.c index 5e61dfffbb..a4fd348f0e 100644 --- a/keyboards/xmmx/keymaps/toad_ansi_wk/keymap.c +++ b/keyboards/toad/keymaps/ansi_wk/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - TOAD_KEYMAP_ANSI_WK( + LAYOUT_ansi_wk( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, \ @@ -12,19 +12,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -void led_set_user(uint8_t usb_led) { - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/keymaps/toad_ansi_wkl/keymap.c b/keyboards/toad/keymaps/ansi_wkl/keymap.c similarity index 67% rename from keyboards/xmmx/keymaps/toad_ansi_wkl/keymap.c rename to keyboards/toad/keymaps/ansi_wkl/keymap.c index 7778b06521..7fb6b3b599 100644 --- a/keyboards/xmmx/keymaps/toad_ansi_wkl/keymap.c +++ b/keyboards/toad/keymaps/ansi_wkl/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - TOAD_KEYMAP_ANSI_WKL( + LAYOUT_ansi_wkl( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/keymaps/toad/keymap.c b/keyboards/toad/keymaps/default/keymap.c similarity index 69% rename from keyboards/xmmx/keymaps/toad/keymap.c rename to keyboards/toad/keymaps/default/keymap.c index c13dc8f671..4c30bdc442 100644 --- a/keyboards/xmmx/keymaps/toad/keymap.c +++ b/keyboards/toad/keymaps/default/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - TOAD_KEYMAP( + LAYOUT_all( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/keymaps/toad_iso_wk/keymap.c b/keyboards/toad/keymaps/iso_wk/keymap.c similarity index 68% rename from keyboards/xmmx/keymaps/toad_iso_wk/keymap.c rename to keyboards/toad/keymaps/iso_wk/keymap.c index c51ff862a0..2025504321 100644 --- a/keyboards/xmmx/keymaps/toad_iso_wk/keymap.c +++ b/keyboards/toad/keymaps/iso_wk/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - TOAD_KEYMAP_ISO_WK( + LAYOUT_iso_wk( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/keymaps/toad_iso_wkl/keymap.c b/keyboards/toad/keymaps/iso_wkl/keymap.c similarity index 67% rename from keyboards/xmmx/keymaps/toad_iso_wkl/keymap.c rename to keyboards/toad/keymaps/iso_wkl/keymap.c index efcebc713b..1659d7b384 100644 --- a/keyboards/xmmx/keymaps/toad_iso_wkl/keymap.c +++ b/keyboards/toad/keymaps/iso_wkl/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - TOAD_KEYMAP_ISO_WKL( + LAYOUT_iso_wkl( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/toad/readme.md b/keyboards/toad/readme.md new file mode 100644 index 0000000000..3f3bff5b5b --- /dev/null +++ b/keyboards/toad/readme.md @@ -0,0 +1,14 @@ +# Toad + +Toad: 70% Mechanical Keyboard PCB. + +Toad schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/70_Keyboard-d4f6baf4792d4ada9c0571fa3713e461) + +For more informations on the Toad please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=91388.0) + +Make examples for these keyboards (after setting up your build environment): + + make toad:default + + +See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. diff --git a/keyboards/toad/rules.mk b/keyboards/toad/rules.mk new file mode 100644 index 0000000000..ee87c6e8d4 --- /dev/null +++ b/keyboards/toad/rules.mk @@ -0,0 +1,56 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +AUDIO_ENABLE ?= no +RGBLIGHT_ENABLE ?= no \ No newline at end of file diff --git a/keyboards/toad/toad.c b/keyboards/toad/toad.c new file mode 100644 index 0000000000..bc4db0339e --- /dev/null +++ b/keyboards/toad/toad.c @@ -0,0 +1,18 @@ +#include "toad.h" + +void led_set_user(uint8_t usb_led) { + + //LED1 + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 6); PORTB &= ~(1 << 6); + } else { + DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); + } + + //LED2 + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + DDRB |= (1 << 5); PORTB &= ~(1 << 5); + } else { + DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); + } +} diff --git a/keyboards/toad/toad.h b/keyboards/toad/toad.h new file mode 100644 index 0000000000..154068e42a --- /dev/null +++ b/keyboards/toad/toad.h @@ -0,0 +1,91 @@ +#ifndef TOAD +#define TOAD + +#include "quantum.h" + +// 70% keyboard: default - all keys +#define LAYOUT_all( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, \ + K500, K501, K502, K507, K510, K511, K512, K513 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413 }, \ + { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \ +} + +// 70% keyboard: ANSI Winkey +#define LAYOUT_ansi_wk( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ + K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \ + K500, K501, K502, K507, K510, K511, K512, K513 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \ + { K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ + { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \ +} + +// 70% keyboard: ANSI Winkeyless +#define LAYOUT_ansi_wkl( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ + K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \ + K500, K502, K507, K511, K513 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \ + { K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ + { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 } \ +} + +// 70% keyboard: ISO Winkey +#define LAYOUT_iso_wk( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \ + K500, K501, K502, K507, K510, K511, K512, K513 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ + { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \ +} + +// 70% keyboard: ISO Winkeyless +#define LAYOUT_iso_wkl( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \ + K500, K502, K507, K511, K513 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ + { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 } \ +} + +#endif diff --git a/keyboards/xmmx/keymaps/xmmx_ansi_wk/keymap.c b/keyboards/xmmx/keymaps/ansi_wk/keymap.c similarity index 73% rename from keyboards/xmmx/keymaps/xmmx_ansi_wk/keymap.c rename to keyboards/xmmx/keymaps/ansi_wk/keymap.c index 20d55c1fd5..abdba99ba7 100644 --- a/keyboards/xmmx/keymaps/xmmx_ansi_wk/keymap.c +++ b/keyboards/xmmx/keymaps/ansi_wk/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP_ANSI_WK( + LAYOUT_ansi_wk( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/keymaps/xmmx_ansi_wkl/keymap.c b/keyboards/xmmx/keymaps/ansi_wkl/keymap.c similarity index 73% rename from keyboards/xmmx/keymaps/xmmx_ansi_wkl/keymap.c rename to keyboards/xmmx/keymaps/ansi_wkl/keymap.c index 3c8ba436f0..aeb61ff2ca 100644 --- a/keyboards/xmmx/keymaps/xmmx_ansi_wkl/keymap.c +++ b/keyboards/xmmx/keymaps/ansi_wkl/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP_ANSI_WKL( + LAYOUT_ansi_wkl( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/keymaps/default/keymap.c b/keyboards/xmmx/keymaps/default/keymap.c index 6b0a114328..a7522fe25a 100644 --- a/keyboards/xmmx/keymaps/default/keymap.c +++ b/keyboards/xmmx/keymaps/default/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( + LAYOUT_all( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/keymaps/xmmx_iso_wk/keymap.c b/keyboards/xmmx/keymaps/iso_wk/keymap.c similarity index 73% rename from keyboards/xmmx/keymaps/xmmx_iso_wk/keymap.c rename to keyboards/xmmx/keymaps/iso_wk/keymap.c index ee68253c7e..882cb224a6 100644 --- a/keyboards/xmmx/keymaps/xmmx_iso_wk/keymap.c +++ b/keyboards/xmmx/keymaps/iso_wk/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP_ISO_WK( + LAYOUT_iso_wk( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/keymaps/xmmx_iso_wkl/keymap.c b/keyboards/xmmx/keymaps/iso_wkl/keymap.c similarity index 73% rename from keyboards/xmmx/keymaps/xmmx_iso_wkl/keymap.c rename to keyboards/xmmx/keymaps/iso_wkl/keymap.c index c27914e451..18ba79e1f9 100644 --- a/keyboards/xmmx/keymaps/xmmx_iso_wkl/keymap.c +++ b/keyboards/xmmx/keymaps/iso_wkl/keymap.c @@ -1,8 +1,8 @@ -#include "xmmx.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP_ISO_WKL( + LAYOUT_iso_wkl( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, \ @@ -11,20 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT ) }; - -void led_set_user(uint8_t usb_led) { - - //LED1 - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRB |= (1 << 6); PORTB &= ~(1 << 6); - } else { - DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); - } - - //LED2 - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRB |= (1 << 5); PORTB &= ~(1 << 5); - } else { - DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); - } -} diff --git a/keyboards/xmmx/readme.md b/keyboards/xmmx/readme.md index cf16231e17..8f94df4b92 100644 --- a/keyboards/xmmx/readme.md +++ b/keyboards/xmmx/readme.md @@ -1,20 +1,14 @@ -XMMX and Toad -======== +# XMMX XMMX: Tenkeyless Mechanical Keyboard PCB designed to fit Filco Majestouch TKL and Cooler Master Quickfire Rapid cases -Toad: 70% Mechanical Keyboard PCB. XMMX schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/XMMX-0447d28c1e4644b88fd04905d983684d) -Toad schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/70_Keyboard-d4f6baf4792d4ada9c0571fa3713e461) For more informations on the XMMX please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=93422.0) -For more informations on the Toad please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=91388.0) Make examples for these keyboards (after setting up your build environment): make xmmx:default - make xmmx:toad - See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. diff --git a/keyboards/xmmx/xmmx.c b/keyboards/xmmx/xmmx.c index 399ae4eb44..4d410e90a0 100644 --- a/keyboards/xmmx/xmmx.c +++ b/keyboards/xmmx/xmmx.c @@ -1 +1,18 @@ #include "xmmx.h" + +void led_set_user(uint8_t usb_led) { + + //LED1 + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 6); PORTB &= ~(1 << 6); + } else { + DDRB &= ~(1 << 6); PORTB &= ~(1 << 6); + } + + //LED2 + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + DDRB |= (1 << 5); PORTB &= ~(1 << 5); + } else { + DDRB &= ~(1 << 5); PORTB &= ~(1 << 5); + } +} diff --git a/keyboards/xmmx/xmmx.h b/keyboards/xmmx/xmmx.h index ad6ae30146..22d0f1480d 100644 --- a/keyboards/xmmx/xmmx.h +++ b/keyboards/xmmx/xmmx.h @@ -4,7 +4,7 @@ #include "quantum.h" // 80% keyboard: default - all keys -#define KEYMAP( \ +#define LAYOUT_all( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013, K114, K115, K116, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \ @@ -21,7 +21,7 @@ } // 80% keyboard: ANSI Winkey -#define KEYMAP_ANSI_WK( \ +#define LAYOUT_ansi_wk( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \ @@ -38,7 +38,7 @@ } // 80% keyboard: ANSI Winkeyless -#define KEYMAP_ANSI_WKL( \ +#define LAYOUT_ansi_wkl( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \ @@ -55,7 +55,7 @@ } // 80% keyboard: ISO Winkey -#define KEYMAP_ISO_WK( \ +#define LAYOUT_iso_wk( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, \ @@ -72,7 +72,7 @@ } // 80% keyboard: ISO Winkeyless -#define KEYMAP_ISO_WKL( \ +#define LAYOUT_iso_wkl( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, \ @@ -88,90 +88,4 @@ { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513, K514, K515, K516 } \ } - -// 70% keyboard: default - all keys -#define TOAD_KEYMAP( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ - K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, \ - K500, K501, K502, K507, K510, K511, K512, K513 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ - { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413 }, \ - { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \ -} - -// 70% keyboard: ANSI Winkey -#define TOAD_KEYMAP_ANSI_WK( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ - K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \ - K500, K501, K502, K507, K510, K511, K512, K513 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \ - { K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ - { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \ -} - -// 70% keyboard: ANSI Winkeyless -#define TOAD_KEYMAP_ANSI_WKL( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ - K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \ - K500, K502, K507, K511, K513 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \ - { K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ - { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 } \ -} - -// 70% keyboard: ISO Winkey -#define TOAD_KEYMAP_ISO_WK( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ - K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \ - K500, K501, K502, K507, K510, K511, K512, K513 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ - { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ - { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \ -} - -// 70% keyboard: ISO Winkeyless -#define TOAD_KEYMAP_ISO_WKL( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ - K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \ - K500, K502, K507, K511, K513 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ - { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \ - { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 } \ -} - #endif From 96648a133de7f297157b7d447be59354c1200c09 Mon Sep 17 00:00:00 2001 From: mtdjr Date: Wed, 26 Sep 2018 15:23:30 -0400 Subject: [PATCH 039/269] Keymap: mtdjr userspace changes and Nyquist keymap addition (#3940) * holefully correct error in mtdjr userspace for layer_state_set_user * return state and wrap rgb actions in their own conditional * mtdjr nyquist and userspace updates * mtdjr updates as requested --- keyboards/nyquist/keymaps/mtdjr/config.h | 36 +++++++++++++ keyboards/nyquist/keymaps/mtdjr/keymap.c | 64 ++++++++++++++++++++++++ keyboards/nyquist/keymaps/mtdjr/rules.mk | 2 + users/mtdjr/mtdjr.c | 2 +- users/mtdjr/mtdjr.h | 2 +- 5 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 keyboards/nyquist/keymaps/mtdjr/config.h create mode 100644 keyboards/nyquist/keymaps/mtdjr/keymap.c create mode 100644 keyboards/nyquist/keymaps/mtdjr/rules.mk diff --git a/keyboards/nyquist/keymaps/mtdjr/config.h b/keyboards/nyquist/keymaps/mtdjr/config.h new file mode 100644 index 0000000000..0fa606f296 --- /dev/null +++ b/keyboards/nyquist/keymaps/mtdjr/config.h @@ -0,0 +1,36 @@ +/* +Copyright 2017 Danny Nguyen + +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 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 12 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/nyquist/keymaps/mtdjr/keymap.c b/keyboards/nyquist/keymaps/mtdjr/keymap.c new file mode 100644 index 0000000000..668e7964b5 --- /dev/null +++ b/keyboards/nyquist/keymaps/mtdjr/keymap.c @@ -0,0 +1,64 @@ +#include QMK_KEYBOARD_H +#include "mtdjr.h" + +extern keymap_config_t keymap_config; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_kc ( +// ,-----------------------------. .-----------------------------. + GESC, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + TAB, Q , W , E , R , T , Y , U , I , O , P ,QUOT, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + RASE, A , S , D , F , G , H , J , K , L ,SCLN, ENT, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + LSFT, Z , X , C , V , B , N , M ,COMM, DOT,SLSH,xxxx, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + LOWR,LCTL,LALT,LGUI, SPC, SPC, SPC, SPC,LEFT,DOWN, UP ,RGHT +// '-----------------------------' '-----------------------------' +), + + [_LOWER] = LAYOUT_kc( +// ,-----------------------------. .-----------------------------. + TILD,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,UNDS,PLUS, DEL, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,LBRC,RBRC,BSLS, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + ,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx, , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + xxxx,UNDO, CUT,XCPY,XINS,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + , , , , , , , ,MNXT,VOLD,VOLU,MPLY +// '-----------------------------' '-----------------------------' +), + + [_RAISE] = LAYOUT_kc( +// ,-----------------------------. .-----------------------------. + xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,MINS, EQL, , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,LCBR,RCBR,PIPE, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + ,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx, , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + , , , , , , , ,MNXT,VOLD,VOLU,MPLY +// '-----------------------------' '-----------------------------' +), + + [_ADJUST] = LAYOUT_kc( +// ,-----------------------------. .-----------------------------. + xxxx,ROOT,PPLY,PSEF,xxxx,xxxx, F1 , F2 , F3 , F4 , F5 , F6 , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + xxxx,xxxx,xxxx,xxxx, RST,xxxx, F7 , F8 , F9 , F10, F11, F12, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + , RGB,RHUI,RSAI,RVAI, MOD, xxxx,xxxx,xxxx,xxxx,xxxx, , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + xxxx,RBTH,RHUD,RSAD,RVAD,RMOD, xxxx,xxxx,xxxx,xxxx,xxxx, BLB, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + ,xxxx,xxxx,xxxx, , , , ,BLOF, BLD, BLI,BLON +// '-----------------------------' '-----------------------------' +) + +}; diff --git a/keyboards/nyquist/keymaps/mtdjr/rules.mk b/keyboards/nyquist/keymaps/mtdjr/rules.mk new file mode 100644 index 0000000000..d7463419b4 --- /dev/null +++ b/keyboards/nyquist/keymaps/mtdjr/rules.mk @@ -0,0 +1,2 @@ +RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = yes diff --git a/users/mtdjr/mtdjr.c b/users/mtdjr/mtdjr.c index d8d6871a17..c31b077b46 100644 --- a/users/mtdjr/mtdjr.c +++ b/users/mtdjr/mtdjr.c @@ -5,7 +5,7 @@ #endif #ifndef RGB_MODE - #define RGB_MODE 16 + #define RGB_MODE 2 #endif #ifndef RGB_HUE #define RGB_HUE 285 diff --git a/users/mtdjr/mtdjr.h b/users/mtdjr/mtdjr.h index 3efcb45ec2..85ca1596dc 100644 --- a/users/mtdjr/mtdjr.h +++ b/users/mtdjr/mtdjr.h @@ -95,7 +95,7 @@ enum user_tapdance { #define KC_BLD BL_DEC #define KC_BLB BL_BRTG #define KC_BLON BL_ON -#define KB_BLOF BL_OFF +#define KC_BLOF BL_OFF #endif From c7ce0d21dc07e1154b6a40cd621eb2eef075483b Mon Sep 17 00:00:00 2001 From: Florian Didron Date: Tue, 25 Sep 2018 11:32:23 +0900 Subject: [PATCH 040/269] Moves animation calculation logic out of the for loops --- quantum/rgb_matrix.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 8ad00c37dd..5fb59af8c0 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -438,10 +438,12 @@ void rgb_matrix_cycle_up_down(void) { void rgb_matrix_dual_beacon(void) { HSV hsv = { .h = rgb_matrix_config.hue, .s = rgb_matrix_config.sat, .v = rgb_matrix_config.val }; RGB rgb; - rgb_led led; + Point point; + double cos_value = cos(g_tick * PI / 128) / 32; + double sin_value = sin(g_tick * PI / 128) / 112; for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { - led = g_rgb_leds[i]; - hsv.h = ((led.point.y - 32.0)* cos(g_tick * PI / 128) / 32 + (led.point.x - 112.0) * sin(g_tick * PI / 128) / (112)) * (180) + rgb_matrix_config.hue; + point = g_rgb_leds[i].point; + hsv.h = ((point.y - 32.0)* cos_value + (point.x - 112.0) * sin_value) * (180) + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -450,10 +452,12 @@ void rgb_matrix_dual_beacon(void) { void rgb_matrix_rainbow_beacon(void) { HSV hsv = { .h = rgb_matrix_config.hue, .s = rgb_matrix_config.sat, .v = rgb_matrix_config.val }; RGB rgb; - rgb_led led; + Point point; + double cos_value = cos(g_tick * PI / 128); + double sin_value = sin(g_tick * PI / 128); for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { - led = g_rgb_leds[i]; - hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.y - 32.0)* cos(g_tick * PI / 128) + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.x - 112.0) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; + point = g_rgb_leds[i].point; + hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (point.y - 32.0)* cos_value + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (point.x - 112.0) * sin_value + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -462,10 +466,12 @@ void rgb_matrix_rainbow_beacon(void) { void rgb_matrix_rainbow_pinwheels(void) { HSV hsv = { .h = rgb_matrix_config.hue, .s = rgb_matrix_config.sat, .v = rgb_matrix_config.val }; RGB rgb; - rgb_led led; + Point point; + double cos_value = cos(g_tick * PI / 128); + double sin_value = sin(g_tick * PI / 128); for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { - led = g_rgb_leds[i]; - hsv.h = (2 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.y - 32.0)* cos(g_tick * PI / 128) + (2 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (66 - abs(led.point.x - 112.0)) * sin(g_tick * PI / 128) + rgb_matrix_config.hue; + point = g_rgb_leds[i].point; + hsv.h = (2 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (point.y - 32.0)* cos_value + (2 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (66 - abs(point.x - 112.0)) * sin_value + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } @@ -474,12 +480,14 @@ void rgb_matrix_rainbow_pinwheels(void) { void rgb_matrix_rainbow_moving_chevron(void) { HSV hsv = { .h = rgb_matrix_config.hue, .s = rgb_matrix_config.sat, .v = rgb_matrix_config.val }; RGB rgb; - rgb_led led; + Point point; + uint8_t r = 128; + double cos_value = cos(r * PI / 128); + double sin_value = sin(r * PI / 128); + double multiplier = (g_tick / 256.0 * 224); for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { - led = g_rgb_leds[i]; - // uint8_t r = g_tick; - uint8_t r = 128; - hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * abs(led.point.y - 32.0)* sin(r * PI / 128) + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.x - (g_tick / 256.0 * 224)) * cos(r * PI / 128) + rgb_matrix_config.hue; + point = g_rgb_leds[i].point; + hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * abs(point.y - 32.0)* sin_value + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (point.x - multiplier) * cos_value + rgb_matrix_config.hue; rgb = hsv_to_rgb( hsv ); rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); } From ec0297027d5ad180af06d41dbfa351d313fe91e8 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Wed, 26 Sep 2018 19:19:38 -0700 Subject: [PATCH 041/269] Bugfix for 60_ansi_tsangan and 60_iso_tsangan layouts (#3987) This corrects the matrix macro reference for both of the keymap.c files in layouts/default. --- .../60_ansi_tsangan/default_60_ansi_tsangan/keymap.c | 12 ++++++------ .../60_iso_tsangan/default_60_iso_tsangan/keymap.c | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c b/layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c index 8f7f5f8c6f..e4562ede51 100644 --- a/layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c +++ b/layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c @@ -1,11 +1,11 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_60_ansi( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC , - KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS , - KC_CAPS , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT , - KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT , - KC_LCTL , KC_LGUI , KC_LALT , KC_SPC , KC_RALT , KC_RGUI , KC_RCTL + [0] = LAYOUT_60_ansi_tsangan( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL ) }; diff --git a/layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c b/layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c index 204a12d33d..94d7630207 100644 --- a/layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c +++ b/layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c @@ -1,11 +1,11 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_60_iso( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTRL, KC_LALT, KC_LGUI, KC_SPACE, KC_RGUI, KC_RALT, KC_RCTL + [0] = LAYOUT_60_iso_tsangan( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL ) }; From 12ad59f99de0ecd2c81b92587c2858b3fb39523c Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Wed, 26 Sep 2018 22:09:05 -0700 Subject: [PATCH 042/269] Keyboard: Treasure Macropad (#3988) * port macropad over to qmk * add bootloader size --- keyboards/macropad/config.h | 224 +++++++++++++++++++ keyboards/macropad/info.json | 12 + keyboards/macropad/keymaps/default/config.h | 19 ++ keyboards/macropad/keymaps/default/keymap.c | 64 ++++++ keyboards/macropad/keymaps/default/readme.md | 1 + keyboards/macropad/macropad.c | 43 ++++ keyboards/macropad/macropad.h | 40 ++++ keyboards/macropad/readme.md | 13 ++ keyboards/macropad/rules.mk | 81 +++++++ 9 files changed, 497 insertions(+) create mode 100644 keyboards/macropad/config.h create mode 100644 keyboards/macropad/info.json create mode 100644 keyboards/macropad/keymaps/default/config.h create mode 100644 keyboards/macropad/keymaps/default/keymap.c create mode 100644 keyboards/macropad/keymaps/default/readme.md create mode 100644 keyboards/macropad/macropad.c create mode 100644 keyboards/macropad/macropad.h create mode 100644 keyboards/macropad/readme.md create mode 100644 keyboards/macropad/rules.mk diff --git a/keyboards/macropad/config.h b/keyboards/macropad/config.h new file mode 100644 index 0000000000..00f2e78110 --- /dev/null +++ b/keyboards/macropad/config.h @@ -0,0 +1,224 @@ +/* +Copyright 2018 MechMerlin + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Treasure +#define PRODUCT Macropad Type 9 +#define DESCRIPTION A custom macropad + +/* key matrix size */ +#define MATRIX_ROWS 3 +#define MATRIX_COLS 3 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { E6, D7, C6 } +#define MATRIX_COL_PINS { D1, D0, D4 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B5 +// #define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 10 + +// #define RGB_DI_PIN E2 +// #ifdef RGB_DI_PIN +// #define RGBLIGHT_ANIMATIONS +// #define RGBLED_NUM 16 +// #define RGBLIGHT_HUE_STEP 8 +// #define RGBLIGHT_SAT_STEP 8 +// #define RGBLIGHT_VAL_STEP 8 +// #endif + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + diff --git a/keyboards/macropad/info.json b/keyboards/macropad/info.json new file mode 100644 index 0000000000..f946ed153e --- /dev/null +++ b/keyboards/macropad/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Macropad", + "url": "", + "maintainer": "qmk", + "width": 3, + "height": 3, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}] + } + } +} diff --git a/keyboards/macropad/keymaps/default/config.h b/keyboards/macropad/keymaps/default/config.h new file mode 100644 index 0000000000..a3ed4f762a --- /dev/null +++ b/keyboards/macropad/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 MechMerlin + * + * 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 + +// place overrides here diff --git a/keyboards/macropad/keymaps/default/keymap.c b/keyboards/macropad/keymaps/default/keymap.c new file mode 100644 index 0000000000..300d5b1e4c --- /dev/null +++ b/keyboards/macropad/keymaps/default/keymap.c @@ -0,0 +1,64 @@ +/* Copyright 2018 MechMerlin + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( /* Base */ + KC_0, KC_1, KC_2, \ + KC_3, KC_4, KC_5, \ + KC_6, KC_7, KC_8 \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/macropad/keymaps/default/readme.md b/keyboards/macropad/keymaps/default/readme.md new file mode 100644 index 0000000000..bd3d78af21 --- /dev/null +++ b/keyboards/macropad/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for macropad diff --git a/keyboards/macropad/macropad.c b/keyboards/macropad/macropad.c new file mode 100644 index 0000000000..0219746e12 --- /dev/null +++ b/keyboards/macropad/macropad.c @@ -0,0 +1,43 @@ +/* Copyright 2018 MechMerlin + * + * 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 "macropad.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/macropad/macropad.h b/keyboards/macropad/macropad.h new file mode 100644 index 0000000000..94471d7c57 --- /dev/null +++ b/keyboards/macropad/macropad.h @@ -0,0 +1,40 @@ +/* Copyright 2018 MechMerlin + * + * 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 . + */ +#ifndef MACROPAD_H +#define MACROPAD_H + +#include "quantum.h" + +/* This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT( \ + K00, K01, K02, \ + K10, K11, K12, \ + K20, K21, K22 \ +) \ +{ \ + { K00, K01, K02 }, \ + { K10, K11, K12 }, \ + { K20, K21, K22 }, \ +} + +#endif diff --git a/keyboards/macropad/readme.md b/keyboards/macropad/readme.md new file mode 100644 index 0000000000..204ec1fd23 --- /dev/null +++ b/keyboards/macropad/readme.md @@ -0,0 +1,13 @@ +# Macropad + +3x3 Macropad. + +Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin) +Hardware Supported: Treasure Macropad Type-9 +Hardware Availability: [Treasure](http://macropad.co/) + +Make example for this keyboard (after setting up your build environment): + + make macropad:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/macropad/rules.mk b/keyboards/macropad/rules.mk new file mode 100644 index 0000000000..599974d25a --- /dev/null +++ b/keyboards/macropad/rules.mk @@ -0,0 +1,81 @@ +# MCU name +#MCU = at90usb1286 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) From f70f45ee677a2a39a759052a356e0c5d82e25424 Mon Sep 17 00:00:00 2001 From: James Laird-Wah Date: Fri, 28 Sep 2018 00:40:18 +1000 Subject: [PATCH 043/269] RGB Matrix refactoring to open up for new drivers (#3913) * rgb_matrix: use a driver ops struct This is intended to avoid #ifdef proliferation on adding more drivers, eg. model01, which use different architectures. * rgb_matrix: document driver struct members * rgb_matrix: remove unused LED testing code * rgb_matrix: don't build into IS31x drivers unless being used * rgb_matrix: refactor make config options This ensures that the necessary files are included for any custom RGB_MATRIX_ENABLE value, without having to add entries here for specific boards. This particularly affects model01 because its controller is integrated and won't be used anywhere else, so it's preferable not to put it in common_features.mk. This now validates the value of RGB_MATRIX_ENABLE. It was necessary to fix an error in ergodox_ez rules.mk using the wrong comment separator, yielding an invalid value. * IS31x drivers: don't write the control registers all the time This is only needed when they are changed. This is done in init() and board- or keymap-specific code is free to make further changes. * rgb_matrix: move structs from chip drivers to rgb_matrix_drivers.c This approach is specific to the rgb_matrix functionality, so keep it neatly separated from the raw chip drivers. --- common_features.mk | 24 ++++---- drivers/issi/is31fl3731.c | 1 - drivers/issi/is31fl3733.c | 3 +- keyboards/ergodox_ez/rules.mk | 2 +- quantum/rgb_matrix.c | 113 ++-------------------------------- quantum/rgb_matrix.h | 17 ++++- quantum/rgb_matrix_drivers.c | 82 ++++++++++++++++++++++++ 7 files changed, 113 insertions(+), 129 deletions(-) create mode 100644 quantum/rgb_matrix_drivers.c diff --git a/common_features.mk b/common_features.mk index 7af7789808..6c835abde6 100644 --- a/common_features.mk +++ b/common_features.mk @@ -114,37 +114,35 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) endif endif -ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) +RGB_MATRIX_ENABLE ?= no +VALID_MATRIX_TYPES := yes IS31FL3731L IS31FL3733L custom +ifneq ($(strip $(RGB_MATRIX_ENABLE)), no) +ifeq ($(filter $(RGB_MATRIX_ENABLE),$(VALID_MATRIX_TYPES)),) + $(error RGB_MATRIX_ENABLE="$(RGB_MATRIX_ENABLE)" is not a valid matrix type) +endif OPT_DEFS += -DRGB_MATRIX_ENABLE - OPT_DEFS += -DIS31FL3731 - COMMON_VPATH += $(DRIVER_PATH)/issi - SRC += is31fl3731.c - SRC += i2c_master.c SRC += $(QUANTUM_DIR)/color.c SRC += $(QUANTUM_DIR)/rgb_matrix.c + SRC += $(QUANTUM_DIR)/rgb_matrix_drivers.c CIE1931_CURVE = yes endif +ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) + RGB_MATRIX_ENABLE = IS31FL3731 +endif + ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731) - OPT_DEFS += -DRGB_MATRIX_ENABLE OPT_DEFS += -DIS31FL3731 COMMON_VPATH += $(DRIVER_PATH)/issi SRC += is31fl3731.c SRC += i2c_master.c - SRC += $(QUANTUM_DIR)/color.c - SRC += $(QUANTUM_DIR)/rgb_matrix.c - CIE1931_CURVE = yes endif ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733) - OPT_DEFS += -DRGB_MATRIX_ENABLE OPT_DEFS += -DIS31FL3733 COMMON_VPATH += $(DRIVER_PATH)/issi SRC += is31fl3733.c SRC += i2c_master.c - SRC += $(QUANTUM_DIR)/color.c - SRC += $(QUANTUM_DIR)/rgb_matrix.c - CIE1931_CURVE = yes endif ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) diff --git a/drivers/issi/is31fl3731.c b/drivers/issi/is31fl3731.c index 4d0d6b8a5e..c9155f5a37 100644 --- a/drivers/issi/is31fl3731.c +++ b/drivers/issi/is31fl3731.c @@ -268,4 +268,3 @@ void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 ) } } } - diff --git a/drivers/issi/is31fl3733.c b/drivers/issi/is31fl3733.c index 4098b54689..c198ec5174 100644 --- a/drivers/issi/is31fl3733.c +++ b/drivers/issi/is31fl3733.c @@ -24,10 +24,10 @@ #include "wait.h" #endif -#include "is31fl3733.h" #include #include "i2c_master.h" #include "progmem.h" +#include "rgb_matrix.h" // This is a 7-bit address, that gets left-shifted and bit 0 // set to 0 for write, 1 for read (as per I2C protocol) @@ -250,4 +250,3 @@ void IS31FL3733_update_led_control_registers( uint8_t addr1, uint8_t addr2 ) } } } - diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk index dfbdba10d6..ef2aefbb9a 100644 --- a/keyboards/ergodox_ez/rules.mk +++ b/keyboards/ergodox_ez/rules.mk @@ -83,6 +83,6 @@ SWAP_HANDS_ENABLE= yes # Allow swapping hands of keyboard SLEEP_LED_ENABLE = no API_SYSEX_ENABLE = no RGBLIGHT_ENABLE = yes -RGB_MATRIX_ENABLE = no // enable later +RGB_MATRIX_ENABLE = no # enable later LAYOUTS = ergodox diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 5fb59af8c0..807e4d62d1 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -18,7 +18,6 @@ #include "rgb_matrix.h" -#include "i2c_master.h" #include "progmem.h" #include "config.h" #include "eeprom.h" @@ -111,29 +110,15 @@ void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led_i, uint8_t } void rgb_matrix_update_pwm_buffers(void) { -#ifdef IS31FL3731 - IS31FL3731_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); - IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); -#elif defined(IS31FL3733) - IS31FL3733_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); - IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); -#endif + rgb_matrix_driver.flush(); } void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) { -#ifdef IS31FL3731 - IS31FL3731_set_color( index, red, green, blue ); -#elif defined(IS31FL3733) - IS31FL3733_set_color( index, red, green, blue ); -#endif + rgb_matrix_driver.set_color(index, red, green, blue); } void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) { -#ifdef IS31FL3731 - IS31FL3731_set_color_all( red, green, blue ); -#elif defined(IS31FL3733) - IS31FL3733_set_color_all( red, green, blue ); -#endif + rgb_matrix_driver.set_color_all(red, green, blue); } bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) { @@ -196,47 +181,6 @@ void rgb_matrix_test(void) { } } -// This tests the LEDs -// Note that it will change the LED control registers -// in the LED drivers, and leave them in an invalid -// state for other backlight effects. -// ONLY USE THIS FOR TESTING LEDS! -void rgb_matrix_single_LED_test(void) { - static uint8_t color = 0; // 0,1,2 for R,G,B - static uint8_t row = 0; - static uint8_t column = 0; - - static uint8_t tick = 0; - tick++; - - if ( tick > 2 ) - { - tick = 0; - column++; - } - if ( column > MATRIX_COLS ) - { - column = 0; - row++; - } - if ( row > MATRIX_ROWS ) - { - row = 0; - color++; - } - if ( color > 2 ) - { - color = 0; - } - - uint8_t led[8], led_count; - map_row_column_to_led(row,column,led,&led_count); - for(uint8_t i = 0; i < led_count; i++) { - rgb_matrix_set_color_all( 40, 40, 40 ); - rgb_matrix_test_led( led[i], color==0, color==1, color==2 ); - } -} - // All LEDs off void rgb_matrix_all_off(void) { rgb_matrix_set_color_all( 0, 0, 0 ); @@ -817,7 +761,7 @@ void rgb_matrix_indicators_user(void) {} // } void rgb_matrix_init(void) { - rgb_matrix_setup_drivers(); + rgb_matrix_driver.init(); // TODO: put the 1 second startup delay here? @@ -841,33 +785,6 @@ void rgb_matrix_init(void) { eeconfig_debug_rgb_matrix(); // display current eeprom values } -void rgb_matrix_setup_drivers(void) { - // Initialize TWI - i2c_init(); -#ifdef IS31FL3731 - IS31FL3731_init( DRIVER_ADDR_1 ); - IS31FL3731_init( DRIVER_ADDR_2 ); -#elif defined (IS31FL3733) - IS31FL3733_init( DRIVER_ADDR_1 ); -#endif - - for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) { - bool enabled = true; - // This only caches it for later -#ifdef IS31FL3731 - IS31FL3731_set_led_control_register( index, enabled, enabled, enabled ); -#elif defined (IS31FL3733) - IS31FL3733_set_led_control_register( index, enabled, enabled, enabled ); -#endif - } - // This actually updates the LED drivers -#ifdef IS31FL3731 - IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); -#elif defined (IS31FL3733) - IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); -#endif -} - // Deals with the messy details of incrementing an integer uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { int16_t new_value = value; @@ -910,28 +827,6 @@ uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max ) { // } // } -void rgb_matrix_test_led( uint8_t index, bool red, bool green, bool blue ) { - for ( int i=0; i. + */ + +#include "rgb_matrix.h" + +/* Each driver needs to define the struct + * const rgb_matrix_driver_t rgb_matrix_driver; + * All members must be provided. + * Keyboard custom drivers can define this in their own files, it should only + * be here if shared between boards. + */ + +#if defined(IS31FL3731) || defined(IS31FL3733) + +#include "i2c_master.h" + +static void init( void ) +{ + i2c_init(); +#ifdef IS31FL3731 + IS31FL3731_init( DRIVER_ADDR_1 ); + IS31FL3731_init( DRIVER_ADDR_2 ); +#else + IS31FL3733_init( DRIVER_ADDR_1 ); +#endif + for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) { + bool enabled = true; + // This only caches it for later +#ifdef IS31FL3731 + IS31FL3731_set_led_control_register( index, enabled, enabled, enabled ); +#else + IS31FL3733_set_led_control_register( index, enabled, enabled, enabled ); +#endif + } + // This actually updates the LED drivers +#ifdef IS31FL3731 + IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +#else + IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +#endif +} + +#ifdef IS31FL3731 +static void flush( void ) +{ + IS31FL3731_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +} + +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = init, + .flush = flush, + .set_color = IS31FL3731_set_color, + .set_color_all = IS31FL3731_set_color_all, +}; +#else +static void flush( void ) +{ + IS31FL3733_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +} + +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = init, + .flush = flush, + .set_color = IS31FL3733_set_color, + .set_color_all = IS31FL3733_set_color_all, +}; +#endif + +#endif From 13e166d9c42845e2622605e94d4a0c38fa5443a0 Mon Sep 17 00:00:00 2001 From: Wilba6582 Date: Fri, 28 Sep 2018 00:40:44 +1000 Subject: [PATCH 044/269] RAMA U80-A, wilba.tech WT60-A, WT65-A, WT80-A, IS31FL3736 driver (#3925) * Initial commit of RAMA U80-A * Initial commit of RAMA U80-A * Moved IS31FL3736 driver, minor cleanups * Superficial stuff * Review changes * Refactored to use common code. --- drivers/issi/is31fl3736.c | 306 ++++++++++++++++++ drivers/issi/is31fl3736.h | 172 ++++++++++ keyboards/rama/readme.md | 2 + keyboards/rama/u80_a/config.h | 187 +++++++++++ keyboards/rama/u80_a/info.json | 13 + keyboards/rama/u80_a/keymaps/default/keymap.c | 22 ++ keyboards/rama/u80_a/readme.md | 15 + keyboards/rama/u80_a/rules.mk | 68 ++++ keyboards/rama/u80_a/u80_a.c | 17 + keyboards/rama/u80_a/u80_a.h | 43 +++ keyboards/wilba_tech/wt60_a/config.h | 187 +++++++++++ keyboards/wilba_tech/wt60_a/info.json | 16 + .../keymaps/ansi_split_bs_rshift/keymap.c | 38 +++ .../wt60_a/keymaps/default/keymap.c | 38 +++ keyboards/wilba_tech/wt60_a/readme.md | 15 + keyboards/wilba_tech/wt60_a/rules.mk | 68 ++++ keyboards/wilba_tech/wt60_a/wt60_a.c | 17 + keyboards/wilba_tech/wt60_a/wt60_a.h | 52 +++ keyboards/wilba_tech/wt65_a/config.h | 187 +++++++++++ keyboards/wilba_tech/wt65_a/info.json | 13 + .../wt65_a/keymaps/default/keymap.c | 37 +++ keyboards/wilba_tech/wt65_a/readme.md | 15 + keyboards/wilba_tech/wt65_a/rules.mk | 68 ++++ keyboards/wilba_tech/wt65_a/wt65_a.c | 17 + keyboards/wilba_tech/wt65_a/wt65_a.h | 41 +++ keyboards/wilba_tech/wt80_a/config.h | 187 +++++++++++ keyboards/wilba_tech/wt80_a/info.json | 13 + .../wt80_a/keymaps/default/keymap.c | 22 ++ keyboards/wilba_tech/wt80_a/readme.md | 15 + keyboards/wilba_tech/wt80_a/rules.mk | 68 ++++ keyboards/wilba_tech/wt80_a/wt80_a.c | 17 + keyboards/wilba_tech/wt80_a/wt80_a.h | 43 +++ keyboards/wilba_tech/wt_main.c | 55 ++++ keyboards/wilba_tech/wt_mono_backlight.c | 116 +++++++ keyboards/wilba_tech/wt_mono_backlight.h | 33 ++ 35 files changed, 2223 insertions(+) create mode 100644 drivers/issi/is31fl3736.c create mode 100644 drivers/issi/is31fl3736.h create mode 100644 keyboards/rama/u80_a/config.h create mode 100644 keyboards/rama/u80_a/info.json create mode 100644 keyboards/rama/u80_a/keymaps/default/keymap.c create mode 100644 keyboards/rama/u80_a/readme.md create mode 100644 keyboards/rama/u80_a/rules.mk create mode 100644 keyboards/rama/u80_a/u80_a.c create mode 100644 keyboards/rama/u80_a/u80_a.h create mode 100644 keyboards/wilba_tech/wt60_a/config.h create mode 100644 keyboards/wilba_tech/wt60_a/info.json create mode 100644 keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c create mode 100644 keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c create mode 100644 keyboards/wilba_tech/wt60_a/readme.md create mode 100644 keyboards/wilba_tech/wt60_a/rules.mk create mode 100644 keyboards/wilba_tech/wt60_a/wt60_a.c create mode 100644 keyboards/wilba_tech/wt60_a/wt60_a.h create mode 100644 keyboards/wilba_tech/wt65_a/config.h create mode 100644 keyboards/wilba_tech/wt65_a/info.json create mode 100644 keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c create mode 100644 keyboards/wilba_tech/wt65_a/readme.md create mode 100644 keyboards/wilba_tech/wt65_a/rules.mk create mode 100644 keyboards/wilba_tech/wt65_a/wt65_a.c create mode 100644 keyboards/wilba_tech/wt65_a/wt65_a.h create mode 100644 keyboards/wilba_tech/wt80_a/config.h create mode 100644 keyboards/wilba_tech/wt80_a/info.json create mode 100644 keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c create mode 100644 keyboards/wilba_tech/wt80_a/readme.md create mode 100644 keyboards/wilba_tech/wt80_a/rules.mk create mode 100644 keyboards/wilba_tech/wt80_a/wt80_a.c create mode 100644 keyboards/wilba_tech/wt80_a/wt80_a.h create mode 100644 keyboards/wilba_tech/wt_main.c create mode 100644 keyboards/wilba_tech/wt_mono_backlight.c create mode 100644 keyboards/wilba_tech/wt_mono_backlight.h diff --git a/drivers/issi/is31fl3736.c b/drivers/issi/is31fl3736.c new file mode 100644 index 0000000000..c5d4310971 --- /dev/null +++ b/drivers/issi/is31fl3736.c @@ -0,0 +1,306 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 . + */ + + +#ifdef __AVR__ +#include +#include +#include +#else +#include "wait.h" +#endif + +#include "is31fl3736.h" +#include +#include "i2c_master.h" +#include "progmem.h" + + + +// This is a 7-bit address, that gets left-shifted and bit 0 +// set to 0 for write, 1 for read (as per I2C protocol) +// The address will vary depending on your wiring: +// 00 <-> GND +// 01 <-> SCL +// 10 <-> SDA +// 11 <-> VCC +// ADDR1 represents A1:A0 of the 7-bit address. +// ADDR2 represents A3:A2 of the 7-bit address. +// The result is: 0b101(ADDR2)(ADDR1) +#define ISSI_ADDR_DEFAULT 0x50 + +#define ISSI_COMMANDREGISTER 0xFD +#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE +#define ISSI_INTERRUPTMASKREGISTER 0xF0 +#define ISSI_INTERRUPTSTATUSREGISTER 0xF1 + +#define ISSI_PAGE_LEDCONTROL 0x00 //PG0 +#define ISSI_PAGE_PWM 0x01 //PG1 +#define ISSI_PAGE_AUTOBREATH 0x02 //PG2 +#define ISSI_PAGE_FUNCTION 0x03 //PG3 + +#define ISSI_REG_CONFIGURATION 0x00 //PG3 +#define ISSI_REG_GLOBALCURRENT 0x01 //PG3 +#define ISSI_REG_RESET 0x11// PG3 +#define ISSI_REG_SWPULLUP 0x0F //PG3 +#define ISSI_REG_CSPULLUP 0x10 //PG3 + +#ifndef ISSI_TIMEOUT + #define ISSI_TIMEOUT 100 +#endif + +#ifndef ISSI_PERSISTENCE + #define ISSI_PERSISTENCE 0 +#endif + +// Transfer buffer for TWITransmitData() +uint8_t g_twi_transfer_buffer[20]; + +// These buffers match the IS31FL3736 PWM registers. +// The control buffers match the PG0 LED On/Off registers. +// Storing them like this is optimal for I2C transfers to the registers. +// We could optimize this and take out the unused registers from these +// buffers and the transfers in IS31FL3736_write_pwm_buffer() but it's +// probably not worth the extra complexity. +uint8_t g_pwm_buffer[DRIVER_COUNT][192]; +bool g_pwm_buffer_update_required = false; + +uint8_t g_led_control_registers[DRIVER_COUNT][24] = { { 0 }, { 0 } }; +bool g_led_control_registers_update_required = false; + +void IS31FL3736_write_register( uint8_t addr, uint8_t reg, uint8_t data ) +{ + g_twi_transfer_buffer[0] = reg; + g_twi_transfer_buffer[1] = data; + + #if ISSI_PERSISTENCE > 0 + for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) + break; + } + #else + i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT); + #endif +} + +void IS31FL3736_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer ) +{ + // assumes PG1 is already selected + + // transmit PWM registers in 12 transfers of 16 bytes + // g_twi_transfer_buffer[] is 20 bytes + + // iterate over the pwm_buffer contents at 16 byte intervals + for ( int i = 0; i < 192; i += 16 ) { + g_twi_transfer_buffer[0] = i; + // copy the data from i to i+15 + // device will auto-increment register for data after the first byte + // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer + for ( int j = 0; j < 16; j++ ) { + g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j]; + } + + #if ISSI_PERSISTENCE > 0 + for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) + break; + } + #else + i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT); + #endif + } +} + +void IS31FL3736_init( uint8_t addr ) +{ + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + // Unlock the command register. + IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 ); + + // Select PG0 + IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL ); + // Turn off all LEDs. + for ( int i = 0x00; i <= 0x17; i++ ) + { + IS31FL3736_write_register( addr, i, 0x00 ); + } + + // Unlock the command register. + IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 ); + + // Select PG1 + IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM ); + // Set PWM on all LEDs to 0 + // No need to setup Breath registers to PWM as that is the default. + for ( int i = 0x00; i <= 0xBF; i++ ) + { + IS31FL3736_write_register( addr, i, 0x00 ); + } + + // Unlock the command register. + IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 ); + + // Select PG3 + IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION ); + // Set global current to maximum. + IS31FL3736_write_register( addr, ISSI_REG_GLOBALCURRENT, 0xFF ); + // Disable software shutdown. + IS31FL3736_write_register( addr, ISSI_REG_CONFIGURATION, 0x01 ); + + // Wait 10ms to ensure the device has woken up. + #ifdef __AVR__ + _delay_ms( 10 ); + #else + wait_ms(10); + #endif +} + +void IS31FL3736_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) +{ + if ( index >= 0 && index < DRIVER_LED_TOTAL ) { + is31_led led = g_is31_leds[index]; + + g_pwm_buffer[led.driver][led.r] = red; + g_pwm_buffer[led.driver][led.g] = green; + g_pwm_buffer[led.driver][led.b] = blue; + g_pwm_buffer_update_required = true; + } +} + +void IS31FL3736_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) +{ + for ( int i = 0; i < DRIVER_LED_TOTAL; i++ ) + { + IS31FL3736_set_color( i, red, green, blue ); + } +} + +void IS31FL3736_set_led_control_register( uint8_t index, bool red, bool green, bool blue ) +{ + is31_led led = g_is31_leds[index]; + + // IS31FL3733 + // The PWM register for a matrix position (0x00 to 0xBF) can be + // divided by 8 to get the LED control register (0x00 to 0x17), + // then mod 8 to get the bit position within that register. + + // IS31FL3736 + // The PWM register for a matrix position (0x00 to 0xBF) is interleaved, so: + // A1=0x00 A2=0x02 A3=0x04 A4=0x06 A5=0x08 A6=0x0A A7=0x0C A8=0x0E + // B1=0x10 B2=0x12 B3=0x14 + // But also, the LED control registers (0x00 to 0x17) are also interleaved, so: + // A1-A4=0x00 A5-A8=0x01 + // So, the same math applies. + + uint8_t control_register_r = led.r / 8; + uint8_t control_register_g = led.g / 8; + uint8_t control_register_b = led.b / 8; + + uint8_t bit_r = led.r % 8; + uint8_t bit_g = led.g % 8; + uint8_t bit_b = led.b % 8; + + if ( red ) { + g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r); + } else { + g_led_control_registers[led.driver][control_register_r] &= ~(1 << bit_r); + } + if ( green ) { + g_led_control_registers[led.driver][control_register_g] |= (1 << bit_g); + } else { + g_led_control_registers[led.driver][control_register_g] &= ~(1 << bit_g); + } + if ( blue ) { + g_led_control_registers[led.driver][control_register_b] |= (1 << bit_b); + } else { + g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b); + } + + g_led_control_registers_update_required = true; + +} + +void IS31FL3736_mono_set_brightness( int index, uint8_t value ) +{ + if ( index >= 0 && index < 96 ) { + // Index in range 0..95 -> A1..A8, B1..B8, etc. + // Map index 0..95 to registers 0x00..0xBE (interleaved) + uint8_t pwm_register = index * 2; + g_pwm_buffer[0][pwm_register] = value; + g_pwm_buffer_update_required = true; + } +} + +void IS31FL3736_mono_set_brightness_all( uint8_t value ) +{ + for ( int i = 0; i < 96; i++ ) + { + IS31FL3736_mono_set_brightness( i, value ); + } +} + +void IS31FL3736_mono_set_led_control_register( uint8_t index, bool enabled ) +{ + // Index in range 0..95 -> A1..A8, B1..B8, etc. + + // Map index 0..95 to registers 0x00..0xBE (interleaved) + uint8_t pwm_register = index * 2; + // Map register 0x00..0xBE (interleaved) into control register and bit + uint8_t control_register = pwm_register / 8; + uint8_t bit = pwm_register % 8; + + if ( enabled ) { + g_led_control_registers[0][control_register] |= (1 << bit); + } else { + g_led_control_registers[0][control_register] &= ~(1 << bit); + } + + g_led_control_registers_update_required = true; +} + +void IS31FL3736_update_pwm_buffers( uint8_t addr1, uint8_t addr2 ) +{ + if ( g_pwm_buffer_update_required ) + { + // Firstly we need to unlock the command register and select PG1 + IS31FL3736_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 ); + IS31FL3736_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM ); + + IS31FL3736_write_pwm_buffer( addr1, g_pwm_buffer[0] ); + //IS31FL3736_write_pwm_buffer( addr2, g_pwm_buffer[1] ); + } + g_pwm_buffer_update_required = false; +} + +void IS31FL3736_update_led_control_registers( uint8_t addr1, uint8_t addr2 ) +{ + if ( g_led_control_registers_update_required ) + { + // Firstly we need to unlock the command register and select PG0 + IS31FL3736_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 ); + IS31FL3736_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL ); + for ( int i=0; i<24; i++ ) + { + IS31FL3736_write_register(addr1, i, g_led_control_registers[0][i] ); + //IS31FL3736_write_register(addr2, i, g_led_control_registers[1][i] ); + } + } +} + diff --git a/drivers/issi/is31fl3736.h b/drivers/issi/is31fl3736.h new file mode 100644 index 0000000000..cff50fd0d8 --- /dev/null +++ b/drivers/issi/is31fl3736.h @@ -0,0 +1,172 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include +#include + + +// Simple interface option. +// If these aren't defined, just define them to make it compile + + +#ifndef DRIVER_COUNT +#define DRIVER_COUNT 2 +#endif + +#ifndef DRIVER_LED_TOTAL +#define DRIVER_LED_TOTAL 96 +#endif + + +typedef struct is31_led { + uint8_t driver:2; + uint8_t r; + uint8_t g; + uint8_t b; +} __attribute__((packed)) is31_led; + +extern const is31_led g_is31_leds[DRIVER_LED_TOTAL]; + +void IS31FL3736_init( uint8_t addr ); +void IS31FL3736_write_register( uint8_t addr, uint8_t reg, uint8_t data ); +void IS31FL3736_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer ); + +void IS31FL3736_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ); +void IS31FL3736_set_color_all( uint8_t red, uint8_t green, uint8_t blue ); + +void IS31FL3736_set_led_control_register( uint8_t index, bool red, bool green, bool blue ); + +void IS31FL3736_mono_set_brightness( int index, uint8_t value ); +void IS31FL3736_mono_set_brightness_all( uint8_t value ); +void IS31FL3736_mono_set_led_control_register( uint8_t index, bool enabled ); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void IS31FL3736_update_pwm_buffers( uint8_t addr1, uint8_t addr2 ); +void IS31FL3736_update_led_control_registers( uint8_t addr1, uint8_t addr2 ); + +#define A_1 0x00 +#define A_2 0x02 +#define A_3 0x04 +#define A_4 0x06 +#define A_5 0x08 +#define A_6 0x0A +#define A_7 0x0C +#define A_8 0x0E + +#define B_1 0x10 +#define B_2 0x12 +#define B_3 0x14 +#define B_4 0x16 +#define B_5 0x18 +#define B_6 0x1A +#define B_7 0x1C +#define B_8 0x1E + +#define C_1 0x20 +#define C_2 0x22 +#define C_3 0x24 +#define C_4 0x26 +#define C_5 0x28 +#define C_6 0x2A +#define C_7 0x2C +#define C_8 0x2E + +#define D_1 0x30 +#define D_2 0x32 +#define D_3 0x34 +#define D_4 0x36 +#define D_5 0x38 +#define D_6 0x3A +#define D_7 0x3C +#define D_8 0x3E + +#define E_1 0x40 +#define E_2 0x42 +#define E_3 0x44 +#define E_4 0x46 +#define E_5 0x48 +#define E_6 0x4A +#define E_7 0x4C +#define E_8 0x4E + +#define F_1 0x50 +#define F_2 0x52 +#define F_3 0x54 +#define F_4 0x56 +#define F_5 0x58 +#define F_6 0x5A +#define F_7 0x5C +#define F_8 0x5E + +#define G_1 0x60 +#define G_2 0x62 +#define G_3 0x64 +#define G_4 0x66 +#define G_5 0x68 +#define G_6 0x6A +#define G_7 0x6C +#define G_8 0x6E + +#define H_1 0x70 +#define H_2 0x72 +#define H_3 0x74 +#define H_4 0x76 +#define H_5 0x78 +#define H_6 0x7A +#define H_7 0x7C +#define H_8 0x7E + +#define I_1 0x80 +#define I_2 0x82 +#define I_3 0x84 +#define I_4 0x86 +#define I_5 0x88 +#define I_6 0x8A +#define I_7 0x8C +#define I_8 0x8E + +#define J_1 0x90 +#define J_2 0x92 +#define J_3 0x94 +#define J_4 0x96 +#define J_5 0x98 +#define J_6 0x9A +#define J_7 0x9C +#define J_8 0x9E + +#define K_1 0xA0 +#define K_2 0xA2 +#define K_3 0xA4 +#define K_4 0xA6 +#define K_5 0xA8 +#define K_6 0xAA +#define K_7 0xAC +#define K_8 0xAE + +#define L_1 0xB0 +#define L_2 0xB2 +#define L_3 0xB4 +#define L_4 0xB6 +#define L_5 0xB8 +#define L_6 0xBA +#define L_7 0xBC +#define L_8 0xBE + diff --git a/keyboards/rama/readme.md b/keyboards/rama/readme.md index 4625eb1ef5..c7ddf6d111 100644 --- a/keyboards/rama/readme.md +++ b/keyboards/rama/readme.md @@ -6,4 +6,6 @@ Firmware for keyboards designed by [RAMA WORKS](https://rama.works) [RAMA M60-A](https://rama.works/#/m60-a/) +[RAMA U80-A](https://rama.works/#/tkl-a/) + [RAMA M10-B](https://www.massdrop.com/buy/rama-m10-a?mode=guest_open) diff --git a/keyboards/rama/u80_a/config.h b/keyboards/rama/u80_a/config.h new file mode 100644 index 0000000000..bfd9728283 --- /dev/null +++ b/keyboards/rama/u80_a/config.h @@ -0,0 +1,187 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x5241 // "RW" +#define PRODUCT_ID 0x080A // 80-A +#define DEVICE_VER 0x0001 +#define MANUFACTURER RAMA.WORKS +#define PRODUCT RAMA U80-A +#define DESCRIPTION RAMA U80-A Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 17 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F1, F0, E6, F4, F6, F7 } +#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4, B7, B0 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION ROW2COL + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + diff --git a/keyboards/rama/u80_a/info.json b/keyboards/rama/u80_a/info.json new file mode 100644 index 0000000000..cb61c89b88 --- /dev/null +++ b/keyboards/rama/u80_a/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "RAMA U80-A", + "url": "https://rama.works/#/tkl-a/", + "maintainer": "Wilba", + "bootloader": "atmel-dfu", + "width": 18.25, + "height": 6.5, + "layouts": { + "LAYOUT_all": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5}, {"x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}] + } + } +} diff --git a/keyboards/rama/u80_a/keymaps/default/keymap.c b/keyboards/rama/u80_a/keymaps/default/keymap.c new file mode 100644 index 0000000000..cf9225e3e5 --- /dev/null +++ b/keyboards/rama/u80_a/keymaps/default/keymap.c @@ -0,0 +1,22 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [1] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; + diff --git a/keyboards/rama/u80_a/readme.md b/keyboards/rama/u80_a/readme.md new file mode 100644 index 0000000000..c98d00cb6b --- /dev/null +++ b/keyboards/rama/u80_a/readme.md @@ -0,0 +1,15 @@ +# RAMA U80-A + +![RAMA U80-A](https://something.com/something.jpg) + +A TKL keyboard. [More info at RAMA WORKS](https://rama.works/#/tkl-a/) + +Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582) +Hardware Supported: RAMA U80-A PCB +Hardware Availability: [RAMA WORKS Store](https://ramaworks.store/) + +Make example for this keyboard (after setting up your build environment): + + make rama/u80_a:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/rama/u80_a/rules.mk b/keyboards/rama/u80_a/rules.mk new file mode 100644 index 0000000000..99224c247c --- /dev/null +++ b/keyboards/rama/u80_a/rules.mk @@ -0,0 +1,68 @@ +# project specific files +SRC = drivers/issi/is31fl3736.c \ + drivers/avr/i2c_master.c \ + keyboards/wilba_tech/wt_mono_backlight.c \ + keyboards/wilba_tech/wt_main.c + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section +BOOTLOADER = atmel-dfu + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches diff --git a/keyboards/rama/u80_a/u80_a.c b/keyboards/rama/u80_a/u80_a.c new file mode 100644 index 0000000000..ccff6d62c9 --- /dev/null +++ b/keyboards/rama/u80_a/u80_a.c @@ -0,0 +1,17 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 . + */ + +// Nothing to see here, move along... ;-) diff --git a/keyboards/rama/u80_a/u80_a.h b/keyboards/rama/u80_a/u80_a.h new file mode 100644 index 0000000000..26403ef347 --- /dev/null +++ b/keyboards/rama/u80_a/u80_a.h @@ -0,0 +1,43 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "quantum.h" + +#define ____ KC_NO + +// Right switch of split backspace is at 3,13 and is the only switch +// whose physical position doesn't match switch matrix position :-( +// However, it also makes no sense to view the physical as 18 columns, +// so the numbering goes 00 to 16. Deal with it. + +#define LAYOUT_all( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K313, K114, K115, K116, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \ + K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, \ + K500, K501, K502, K506, K510, K511, K512, K513, K514, K515, K516 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, ____, ____ }, \ + { K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415, ____ }, \ + { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \ +} + diff --git a/keyboards/wilba_tech/wt60_a/config.h b/keyboards/wilba_tech/wt60_a/config.h new file mode 100644 index 0000000000..95f4c786e6 --- /dev/null +++ b/keyboards/wilba_tech/wt60_a/config.h @@ -0,0 +1,187 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x6582 // wilba.tech +#define PRODUCT_ID 0x060A // 60-A +#define DEVICE_VER 0x0001 +#define MANUFACTURER wilba.tech +#define PRODUCT wilba.tech WT60-A +#define DESCRIPTION wilba.tech WT60-A + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F0, E6, F4, F6, F7 } +#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION ROW2COL + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + diff --git a/keyboards/wilba_tech/wt60_a/info.json b/keyboards/wilba_tech/wt60_a/info.json new file mode 100644 index 0000000000..3b3614a8bf --- /dev/null +++ b/keyboards/wilba_tech/wt60_a/info.json @@ -0,0 +1,16 @@ +{ + "keyboard_name": "wilba.tech WT60-A", + "url": "https://wilba.tech", + "maintainer": "Wilba", + "bootloader": "atmel-dfu", + "width": 15, + "height": 5, + "layouts": { + "LAYOUT_60_ansi": { + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + }, + "LAYOUT_60_ansi_split_bs_rshift": { + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + } + } +} \ No newline at end of file diff --git a/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c b/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c new file mode 100644 index 0000000000..95e01fc2ca --- /dev/null +++ b/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c @@ -0,0 +1,38 @@ +// ANSI split backspace/right shift layout for WT60-A +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// Default layer +[0] = LAYOUT_60_ansi_split_bs_rshift( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL), + +// Fn1 Layer +[1] = LAYOUT_60_ansi_split_bs_rshift( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +// Fn2 Layer +[2] = LAYOUT_60_ansi_split_bs_rshift( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +// Fn3 Layer +[3] = LAYOUT_60_ansi_split_bs_rshift( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; diff --git a/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c new file mode 100644 index 0000000000..566736f5e3 --- /dev/null +++ b/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c @@ -0,0 +1,38 @@ +// Default layout for WT60-A +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// Default layer +[0] = LAYOUT_60_ansi( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL), + +// Fn1 Layer +[1] = LAYOUT_60_ansi( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL , + KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +// Fn2 Layer +[2] = LAYOUT_60_ansi( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +// Fn3 Layer +[3] = LAYOUT_60_ansi( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; diff --git a/keyboards/wilba_tech/wt60_a/readme.md b/keyboards/wilba_tech/wt60_a/readme.md new file mode 100644 index 0000000000..d7a73165d4 --- /dev/null +++ b/keyboards/wilba_tech/wt60_a/readme.md @@ -0,0 +1,15 @@ +# WILBA.TECH WT60-A + +![WILBA.TECH WT60-A](https://wilba.tech) + +WT60-A is a keyboard PCB supporting 60% layout. [More info at wilba.tech](https://wilba.tech/) + +Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582) +Hardware Supported: WILBA.TECH WT65-A +Hardware Availability: Custom keyboard group buys + +Make example for this keyboard (after setting up your build environment): + + make wilba_tech/wt60_a:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/wilba_tech/wt60_a/rules.mk b/keyboards/wilba_tech/wt60_a/rules.mk new file mode 100644 index 0000000000..99224c247c --- /dev/null +++ b/keyboards/wilba_tech/wt60_a/rules.mk @@ -0,0 +1,68 @@ +# project specific files +SRC = drivers/issi/is31fl3736.c \ + drivers/avr/i2c_master.c \ + keyboards/wilba_tech/wt_mono_backlight.c \ + keyboards/wilba_tech/wt_main.c + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section +BOOTLOADER = atmel-dfu + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches diff --git a/keyboards/wilba_tech/wt60_a/wt60_a.c b/keyboards/wilba_tech/wt60_a/wt60_a.c new file mode 100644 index 0000000000..ccff6d62c9 --- /dev/null +++ b/keyboards/wilba_tech/wt60_a/wt60_a.c @@ -0,0 +1,17 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 . + */ + +// Nothing to see here, move along... ;-) diff --git a/keyboards/wilba_tech/wt60_a/wt60_a.h b/keyboards/wilba_tech/wt60_a/wt60_a.h new file mode 100644 index 0000000000..8ac8d92167 --- /dev/null +++ b/keyboards/wilba_tech/wt60_a/wt60_a.h @@ -0,0 +1,52 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "quantum.h" + +#define ____ KC_NO + +#define LAYOUT_60_ansi_split_bs_rshift( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K213, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ + K400, K401, K402, K406, K410, K411, K412, K413 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \ + { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \ + { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413 } \ +} + +#define LAYOUT_60_ansi( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \ + K400, K401, K402, K406, K410, K411, K412, K413 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, ____ }, \ + { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, ____ }, \ + { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413 } \ +} + + + diff --git a/keyboards/wilba_tech/wt65_a/config.h b/keyboards/wilba_tech/wt65_a/config.h new file mode 100644 index 0000000000..fa919f186b --- /dev/null +++ b/keyboards/wilba_tech/wt65_a/config.h @@ -0,0 +1,187 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x6582 // wilba.tech +#define PRODUCT_ID 0x065A // 65-A +#define DEVICE_VER 0x0001 +#define MANUFACTURER wilba.tech +#define PRODUCT wilba.tech WT65-A +#define DESCRIPTION wilba.tech WT65-A + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F0, E6, F4, F6, F7 } +#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION ROW2COL + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + diff --git a/keyboards/wilba_tech/wt65_a/info.json b/keyboards/wilba_tech/wt65_a/info.json new file mode 100644 index 0000000000..f2b18dadd1 --- /dev/null +++ b/keyboards/wilba_tech/wt65_a/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "wilba.tech WT65-A", + "url": "https://wilba.tech", + "maintainer": "Wilba", + "bootloader": "atmel-dfu", + "width": 16, + "height": 5, + "layouts": { + "LAYOUT_all": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15, "y":1}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Fn", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}] + } + } +} \ No newline at end of file diff --git a/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c new file mode 100644 index 0000000000..c5ae811680 --- /dev/null +++ b/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c @@ -0,0 +1,37 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + // Default layer + [0] = LAYOUT_all( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + // Fn1 Layer + [1] = LAYOUT_all( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, KC_TRNS, + KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + // Fn2 Layer + [2] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + // Fn3 Layer + [3] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; + diff --git a/keyboards/wilba_tech/wt65_a/readme.md b/keyboards/wilba_tech/wt65_a/readme.md new file mode 100644 index 0000000000..1551b55b57 --- /dev/null +++ b/keyboards/wilba_tech/wt65_a/readme.md @@ -0,0 +1,15 @@ +# WILBA.TECH WT65-A + +![WILBA.TECH WT65-A](https://wilba.tech) + +WT65-A is a keyboard PCB supporting 65% layout with 0.25U blocker. [More info at wilba.tech](https://wilba.tech/) + +Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582) +Hardware Supported: WILBA.TECH WT65-A +Hardware Availability: Custom keyboard group buys + +Make example for this keyboard (after setting up your build environment): + + make wilba_tech/wt65_a:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/wilba_tech/wt65_a/rules.mk b/keyboards/wilba_tech/wt65_a/rules.mk new file mode 100644 index 0000000000..99224c247c --- /dev/null +++ b/keyboards/wilba_tech/wt65_a/rules.mk @@ -0,0 +1,68 @@ +# project specific files +SRC = drivers/issi/is31fl3736.c \ + drivers/avr/i2c_master.c \ + keyboards/wilba_tech/wt_mono_backlight.c \ + keyboards/wilba_tech/wt_main.c + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section +BOOTLOADER = atmel-dfu + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches diff --git a/keyboards/wilba_tech/wt65_a/wt65_a.c b/keyboards/wilba_tech/wt65_a/wt65_a.c new file mode 100644 index 0000000000..ccff6d62c9 --- /dev/null +++ b/keyboards/wilba_tech/wt65_a/wt65_a.c @@ -0,0 +1,17 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 . + */ + +// Nothing to see here, move along... ;-) diff --git a/keyboards/wilba_tech/wt65_a/wt65_a.h b/keyboards/wilba_tech/wt65_a/wt65_a.h new file mode 100644 index 0000000000..9c3e6e12be --- /dev/null +++ b/keyboards/wilba_tech/wt65_a/wt65_a.h @@ -0,0 +1,41 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "quantum.h" + +#define ____ KC_NO + +// Right switch of split backspace is at 2,13 and is the only switch +// whose physical position doesn't match switch matrix position :-( +// However, it also makes no sense to view the physical as 16 columns, +// so the numbering goes 00 to 14. Deal with it. + +#define LAYOUT_all( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K213, K014, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \ + K400, K401, K402, K406, K410, K411, K412, K413, K414 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \ + { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \ + { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413, K414 } \ +} + diff --git a/keyboards/wilba_tech/wt80_a/config.h b/keyboards/wilba_tech/wt80_a/config.h new file mode 100644 index 0000000000..9687cb6d68 --- /dev/null +++ b/keyboards/wilba_tech/wt80_a/config.h @@ -0,0 +1,187 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x6582 // wilba.tech +#define PRODUCT_ID 0x080A // 80-A +#define DEVICE_VER 0x0001 +#define MANUFACTURER wilba.tech +#define PRODUCT wilba.tech WT80-A +#define DESCRIPTION wilba.tech WT80-A + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 17 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F1, F0, E6, F4, F6, F7 } +#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4, B7, B0 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION ROW2COL + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + diff --git a/keyboards/wilba_tech/wt80_a/info.json b/keyboards/wilba_tech/wt80_a/info.json new file mode 100644 index 0000000000..a43acb2f5a --- /dev/null +++ b/keyboards/wilba_tech/wt80_a/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "wilba.tech WT80-A", + "url": "https://wilba.tech", + "maintainer": "Wilba", + "bootloader": "atmel-dfu", + "width": 18.25, + "height": 6.5, + "layouts": { + "LAYOUT_all": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5}, {"x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}] + } + } +} diff --git a/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c new file mode 100644 index 0000000000..cf9225e3e5 --- /dev/null +++ b/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c @@ -0,0 +1,22 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [1] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; + diff --git a/keyboards/wilba_tech/wt80_a/readme.md b/keyboards/wilba_tech/wt80_a/readme.md new file mode 100644 index 0000000000..011805748f --- /dev/null +++ b/keyboards/wilba_tech/wt80_a/readme.md @@ -0,0 +1,15 @@ +# WILBA.TECH WT80-A + +![WILBA.TECH WT80-A](https://wilba./tech) + +WT80-A is a keyboard PCB supporting TKL layout with 0.25U gaps. [More info at wilba.tech](https://wilba.tech/) + +Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582) +Hardware Supported: WILBA.TECH WT80-A +Hardware Availability: Custom keyboard group buys + +Make example for this keyboard (after setting up your build environment): + + make wilba_tech/wt80_a:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/wilba_tech/wt80_a/rules.mk b/keyboards/wilba_tech/wt80_a/rules.mk new file mode 100644 index 0000000000..99224c247c --- /dev/null +++ b/keyboards/wilba_tech/wt80_a/rules.mk @@ -0,0 +1,68 @@ +# project specific files +SRC = drivers/issi/is31fl3736.c \ + drivers/avr/i2c_master.c \ + keyboards/wilba_tech/wt_mono_backlight.c \ + keyboards/wilba_tech/wt_main.c + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section +BOOTLOADER = atmel-dfu + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches diff --git a/keyboards/wilba_tech/wt80_a/wt80_a.c b/keyboards/wilba_tech/wt80_a/wt80_a.c new file mode 100644 index 0000000000..ccff6d62c9 --- /dev/null +++ b/keyboards/wilba_tech/wt80_a/wt80_a.c @@ -0,0 +1,17 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 . + */ + +// Nothing to see here, move along... ;-) diff --git a/keyboards/wilba_tech/wt80_a/wt80_a.h b/keyboards/wilba_tech/wt80_a/wt80_a.h new file mode 100644 index 0000000000..26403ef347 --- /dev/null +++ b/keyboards/wilba_tech/wt80_a/wt80_a.h @@ -0,0 +1,43 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "quantum.h" + +#define ____ KC_NO + +// Right switch of split backspace is at 3,13 and is the only switch +// whose physical position doesn't match switch matrix position :-( +// However, it also makes no sense to view the physical as 18 columns, +// so the numbering goes 00 to 16. Deal with it. + +#define LAYOUT_all( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K313, K114, K115, K116, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \ + K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, \ + K500, K501, K502, K506, K510, K511, K512, K513, K514, K515, K516 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, ____, ____ }, \ + { K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415, ____ }, \ + { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \ +} + diff --git a/keyboards/wilba_tech/wt_main.c b/keyboards/wilba_tech/wt_main.c new file mode 100644 index 0000000000..f514dbefcd --- /dev/null +++ b/keyboards/wilba_tech/wt_main.c @@ -0,0 +1,55 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 "quantum.h" +#include "keyboards/wilba_tech/wt_mono_backlight.h" + +void bootmagic_lite(void) +{ + // The lite version of TMK's bootmagic. + // 100% less potential for accidentally making the + // keyboard do stupid things. + + // We need multiple scans because debouncing can't be turned off. + matrix_scan(); + wait_ms(DEBOUNCING_DELAY); + wait_ms(DEBOUNCING_DELAY); + matrix_scan(); + + // If the Esc (matrix 0,0) is held down on power up, + // reset the EEPROM valid state and jump to bootloader. + if ( matrix_get_row(0) & (1<<0) ) { + // Set the TMK/QMK EEPROM state as invalid. + eeconfig_disable(); + // Jump to bootloader. + bootloader_jump(); + } +} + +void matrix_init_kb(void) +{ + bootmagic_lite(); + backlight_init_drivers(); + backlight_timer_init(); + backlight_timer_enable(); + matrix_init_user(); +} + +void matrix_scan_kb(void) +{ + backlight_update_pwm_buffers(); + matrix_scan_user(); +} diff --git a/keyboards/wilba_tech/wt_mono_backlight.c b/keyboards/wilba_tech/wt_mono_backlight.c new file mode 100644 index 0000000000..bf485bce1f --- /dev/null +++ b/keyboards/wilba_tech/wt_mono_backlight.c @@ -0,0 +1,116 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 "wt_mono_backlight.h" +#include "drivers/avr/i2c_master.h" +#include "drivers/issi/is31fl3736.h" + +#include + +#define ISSI_ADDR_DEFAULT 0x50 + +bool g_suspend_state = false; + +// Global tick at 20 Hz +uint32_t g_tick = 0; +uint8_t g_config_effect_speed = 0; +uint8_t g_config_brightness = 255; + +void backlight_init_drivers(void) +{ + // Initialize I2C + i2c_init(); + IS31FL3736_init( ISSI_ADDR_DEFAULT ); + + for ( uint8_t index = 0; index < 96; index++ ) { + IS31FL3736_mono_set_led_control_register( index, true ); + } + IS31FL3736_update_led_control_registers( ISSI_ADDR_DEFAULT, 0x00 ); +} + + +// This is (F_CPU/1024) / 20 Hz +// = 15625 Hz / 20 Hz +// = 781 +#define TIMER3_TOP 781 + +void backlight_timer_init(void) +{ + static uint8_t backlight_timer_is_init = 0; + if ( backlight_timer_is_init ) { + return; + } + backlight_timer_is_init = 1; + + // Timer 3 setup + TCCR3B = _BV(WGM32) | // CTC mode OCR3A as TOP + _BV(CS32) | _BV(CS30); // prescale by /1024 + // Set TOP value + uint8_t sreg = SREG; + cli(); + + OCR3AH = (TIMER3_TOP >> 8) & 0xff; + OCR3AL = TIMER3_TOP & 0xff; + SREG = sreg; +} + +void backlight_timer_enable(void) +{ + TIMSK3 |= _BV(OCIE3A); +} + +void backlight_timer_disable(void) +{ + TIMSK3 &= ~_BV(OCIE3A); +} + +void backlight_set_suspend_state(bool state) +{ + g_suspend_state = state; +} + +void backlight_effect_cycle_all(void) +{ + uint8_t offset = ( g_tick << g_config_effect_speed ) & 0xFF; + + backlight_set_brightness_all( offset ); +} + +ISR(TIMER3_COMPA_vect) +{ + // delay 1 second before driving LEDs or doing anything else + static uint8_t startup_tick = 0; + if ( startup_tick < 20 ) { + startup_tick++; + return; + } + + g_tick++; + + //backlight_effect_cycle_all(); + backlight_set_brightness_all( 255 ); +} + +void backlight_update_pwm_buffers(void) +{ + IS31FL3736_update_pwm_buffers(ISSI_ADDR_DEFAULT,0x00); +} + +void backlight_set_brightness_all( uint8_t value ) +{ + IS31FL3736_mono_set_brightness_all( value ); +} + diff --git a/keyboards/wilba_tech/wt_mono_backlight.h b/keyboards/wilba_tech/wt_mono_backlight.h new file mode 100644 index 0000000000..70031bedc7 --- /dev/null +++ b/keyboards/wilba_tech/wt_mono_backlight.h @@ -0,0 +1,33 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include +#include + +void backlight_init_drivers(void); + +void backlight_timer_init(void); +void backlight_timer_enable(void); +void backlight_timer_disable(void); + +void backlight_set_suspend_state(bool state); + +void backlight_update_pwm_buffers(void); + +void backlight_set_brightness_all( uint8_t value ); + From 8b2591c707abe670dbd1ab21237870bc989d0614 Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Thu, 27 Sep 2018 19:47:26 +0100 Subject: [PATCH 045/269] Keymap: Clean-up of dshields keymaps. (#3983) --- keyboards/model01/keymaps/dshields/config.h | 3 -- keyboards/model01/keymaps/dshields/rules.mk | 3 +- keyboards/planck/keymaps/dshields/config.h | 15 +------ keyboards/planck/keymaps/dshields/keymap.c | 44 --------------------- 4 files changed, 2 insertions(+), 63 deletions(-) diff --git a/keyboards/model01/keymaps/dshields/config.h b/keyboards/model01/keymaps/dshields/config.h index 86a4dd5314..4d609e4368 100644 --- a/keyboards/model01/keymaps/dshields/config.h +++ b/keyboards/model01/keymaps/dshields/config.h @@ -1,8 +1,5 @@ #pragma once -#define _______ KC_TRNS -#define XXXXXXX KC_NO - #define USB_MAX_POWER_CONSUMPTION 100 #define ONESHOT_TAP_TOGGLE 2 #define ONESHOT_TIMEOUT 3000 diff --git a/keyboards/model01/keymaps/dshields/rules.mk b/keyboards/model01/keymaps/dshields/rules.mk index 4d1abd88ad..6c605daecf 100644 --- a/keyboards/model01/keymaps/dshields/rules.mk +++ b/keyboards/model01/keymaps/dshields/rules.mk @@ -1,2 +1 @@ -# used by default keymap -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +MOUSEKEY_ENABLE = yes diff --git a/keyboards/planck/keymaps/dshields/config.h b/keyboards/planck/keymaps/dshields/config.h index 9ba854ef04..b149530b8d 100644 --- a/keyboards/planck/keymaps/dshields/config.h +++ b/keyboards/planck/keymaps/dshields/config.h @@ -1,15 +1,4 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -#define QMK_ESC_OUTPUT F1 -#define QMK_ESC_INPUT D5 -#define QMK_LED E6 -#define QMK_SPEAKER C6 - -#define _______ KC_TRNS -#define XXXXXXX KC_NO +#pragma once #define USB_MAX_POWER_CONSUMPTION 100 #define ONESHOT_TAP_TOGGLE 2 @@ -39,5 +28,3 @@ // mod-tap keys #define MT_SPC SFT_T(KC_SPC) -#endif - diff --git a/keyboards/planck/keymaps/dshields/keymap.c b/keyboards/planck/keymaps/dshields/keymap.c index a39dc5e776..11abaa6b07 100644 --- a/keyboards/planck/keymaps/dshields/keymap.c +++ b/keyboards/planck/keymaps/dshields/keymap.c @@ -17,68 +17,24 @@ enum planck_keycodes { DYNAMIC_MACRO_RANGE = SAFE_RANGE }; #endif const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Default - * ,-----------------------------------------------------------------------------------. - * | Q | W | E | R | T | Esc | Bksp | Y | U | I | O | P | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | A | S | D | F | G | Tab | Enter| H | J | K | L | ; | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Z | X | C | V | B | Shift|DmPlay| N | M | , | . | / | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Super| Alt | Fun | Lower| Space | Raise| Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ [DEF] = LAYOUT_planck_grid( KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P , KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_Z, KC_X, KC_C, KC_V, KC_B, OSM_SFT, DM_PLAY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM_CTL, KC_LGUI, OSM_ALT, OSL_FUN, OSL_LWR, MT_SPC, MT_SPC, OSL_RSE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT ), - /* Lower - * ,-----------------------------------------------------------------------------------. - * | ! | @ | # | $ | % | | | ^ | & | * | ( | ) | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | ~ | | | | | | | _ | + | | { | } | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | " | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Home | PgDn | PgUp | End | - * `-----------------------------------------------------------------------------------' - */ [LWR] = LAYOUT_planck_grid( KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILD, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DQUO, KC_PIPE, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END ), - /* Raise - * ,-----------------------------------------------------------------------------------. - * | 1 | 2 | 3 | 4 | 5 | | | 6 | 7 | 8 | 9 | 0 | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | ` | | | | | | | - | = | | [ | ] | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | ' | \ | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Home | PgDn | PgUp | End | - * `-----------------------------------------------------------------------------------' - */ [RSE] = LAYOUT_planck_grid( KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0 , KC_GRV, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END ), - /* Function - * ,-----------------------------------------------------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | Reset|Delete| F6 | F7 | F8 | F9 | F10 | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | F11 | F12 | F13 | F14 | F15 | | | |MsWhLt|MsWhDn|MsWhUp|MsWhRt| - * |------+------+------+------+------+------|------+------+------+------+------+------| - * |BlTggl|BlStep| | | |DmStrt|DmStop| | |MsBtn1|MsBtn2|MsBtn3| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | |MsLeft|MsDown| MsUp |MsRght| - * `-----------------------------------------------------------------------------------' - */ [FUN] = LAYOUT_planck_grid( KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 , KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, From 8ef747accf6e59ff50a3dde1cb34f56e4edce9fe Mon Sep 17 00:00:00 2001 From: skullydazed Date: Thu, 27 Sep 2018 13:32:01 -0700 Subject: [PATCH 046/269] Treat too-large firmwares as an error, not a warning (#3956) * Treat too-large firmwares as an error, not a warning * switch the order of printing * I think I have it * adjust the formatting some more --- message.mk | 6 +++--- tmk_core/rules.mk | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/message.mk b/message.mk index 427925dac1..6894dd8cb5 100644 --- a/message.mk +++ b/message.mk @@ -77,6 +77,6 @@ endef MSG_MAKE_TEST = $(eval $(call GENERATE_MSG_MAKE_TEST))$(MSG_MAKE_TEST_ACTUAL) MSG_TEST = Testing $(BOLD)$(TEST_NAME)$(NO_COLOR) MSG_CHECK_FILESIZE = Checking file size of $(TARGET).hex -MSG_FILE_TOO_BIG = $(ERROR_COLOR)Your file is too big!$(NO_COLOR) $(CURRENT_SIZE)/$(MAX_SIZE) ($(OVER_SIZE) over)\n -MSG_FILE_TOO_SMALL = Your file is too small! $(CURRENT_SIZE)/$(MAX_SIZE)\n -MSG_FILE_JUST_RIGHT = File size is fine - $(CURRENT_SIZE)/$(MAX_SIZE) ($(FREE_SIZE) free)\n +MSG_FILE_TOO_BIG = $(ERROR_COLOR)The firmware is too large!$(NO_COLOR) $(CURRENT_SIZE)/$(MAX_SIZE) ($(OVER_SIZE) bytes over)\n +MSG_FILE_TOO_SMALL = The firmware is too small! $(CURRENT_SIZE)/$(MAX_SIZE)\n +MSG_FILE_JUST_RIGHT = The firmware size is fine - $(CURRENT_SIZE)/$(MAX_SIZE) ($(FREE_SIZE) bytes free)\n diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 5b1858b718..f1ef733f69 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -378,7 +378,7 @@ check-size: $(eval OVER_SIZE=$(shell expr $(CURRENT_SIZE) - $(MAX_SIZE))) if [ $(MAX_SIZE) -gt 0 ] && [ $(CURRENT_SIZE) -gt 0 ]; then \ $(SILENT) || printf "$(MSG_CHECK_FILESIZE)" | $(AWK_CMD); \ - if [ $(CURRENT_SIZE) -gt $(MAX_SIZE) ]; then $(PRINT_WARNING_PLAIN); $(SILENT) || printf " * $(MSG_FILE_TOO_BIG)" ; else $(PRINT_OK); $(SILENT) || printf " * $(MSG_FILE_JUST_RIGHT)"; fi \ + if [ $(CURRENT_SIZE) -gt $(MAX_SIZE) ]; then printf "\n * $(MSG_FILE_TOO_BIG)"; $(PRINT_ERROR_PLAIN); else $(PRINT_OK); $(SILENT) || printf " * $(MSG_FILE_JUST_RIGHT)"; fi \ fi else check-size: From a65085a89354e89ddd3517aa63c74ef6dd32ca8b Mon Sep 17 00:00:00 2001 From: Pekaso Date: Fri, 28 Sep 2018 10:06:19 +0900 Subject: [PATCH 047/269] Keyboard: [Fortitude60] LED fix and Serial improvement (#3982) * arrangement Underglow * modified serial function references from helix * Remove defines (ws2812_*REG) --- keyboards/fortitude60/config.h | 1 + .../fortitude60/keymaps/default/config.h | 1 - .../fortitude60/keymaps/default/keymap.c | 4 +- .../fortitude60/keymaps/default/rules.mk | 1 + keyboards/fortitude60/rev1/config.h | 11 +- keyboards/fortitude60/rev1/rules.mk | 1 - keyboards/fortitude60/serial.c | 455 +++++++++++++----- keyboards/fortitude60/serial.h | 86 +++- keyboards/fortitude60/serial_config.h | 14 + 9 files changed, 422 insertions(+), 152 deletions(-) create mode 100644 keyboards/fortitude60/serial_config.h diff --git a/keyboards/fortitude60/config.h b/keyboards/fortitude60/config.h index 863722d7d0..27a44ab928 100644 --- a/keyboards/fortitude60/config.h +++ b/keyboards/fortitude60/config.h @@ -19,5 +19,6 @@ along with this program. If not, see . #define CONFIG_H #include "config_common.h" +#include #endif // CONFIG_H diff --git a/keyboards/fortitude60/keymaps/default/config.h b/keyboards/fortitude60/keymaps/default/config.h index b356791fc8..1748373481 100644 --- a/keyboards/fortitude60/keymaps/default/config.h +++ b/keyboards/fortitude60/keymaps/default/config.h @@ -28,7 +28,6 @@ along with this program. If not, see . // #define MASTER_RIGHT #define EE_HANDS -#define USE_SERIAL_PD2 /* #undef RGBLED_NUM */ /* #define RGBLIGHT_ANIMATIONS */ /* #define RGBLED_NUM 12 */ diff --git a/keyboards/fortitude60/keymaps/default/keymap.c b/keyboards/fortitude60/keymaps/default/keymap.c index 18d2527e45..9d724a8ec6 100644 --- a/keyboards/fortitude60/keymaps/default/keymap.c +++ b/keyboards/fortitude60/keymaps/default/keymap.c @@ -119,9 +119,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------. ,-----------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | * |------+------+------+------+------+------. ,------+------+------+------+------+------| - * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * | ` | 1 | ↑ | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+------. ,------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | | | + * | Del | ← | ↓ | → | F4 | F5 | | F6 | - | = | [ | ] | | | * |------+------+------+------+------+------+-------------+------+------+------+------+------+------| * | | F7 | F8 | F9 | F10 | F11 | | | F12 |ISO # |ISO / | | | | * `-------------+------+------+------+------+------+------+------+------+------+------+-------------' diff --git a/keyboards/fortitude60/keymaps/default/rules.mk b/keyboards/fortitude60/keymaps/default/rules.mk index e0ed6f0c2d..1964bd0a7c 100644 --- a/keyboards/fortitude60/keymaps/default/rules.mk +++ b/keyboards/fortitude60/keymaps/default/rules.mk @@ -1 +1,2 @@ RGBLIGHT_ENABLE = no +BACKLIGHT_ENABLE = no \ No newline at end of file diff --git a/keyboards/fortitude60/rev1/config.h b/keyboards/fortitude60/rev1/config.h index 4ba195ff8e..8c6f21afe6 100644 --- a/keyboards/fortitude60/rev1/config.h +++ b/keyboards/fortitude60/rev1/config.h @@ -64,12 +64,11 @@ along with this program. If not, see . ) /* ws2812 RGB LED */ -/* #define RGB_DI_PIN D3 */ -/* #define RGBLIGHT_TIMER */ -/* #define RGBLED_NUM 16 // Number of LEDs */ -/* #define ws2812_PORTREG PORTD */ -/* #define ws2812_DDRREG DDRD */ - +#ifdef RGBLIGHT_ENABLE + #define RGB_DI_PIN B5 + #define RGBLIGHT_TIMER + #define RGBLED_NUM 18 // Number of LEDs */ +#endif /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboards/fortitude60/rev1/rules.mk b/keyboards/fortitude60/rev1/rules.mk index bd518d8f27..e69de29bb2 100644 --- a/keyboards/fortitude60/rev1/rules.mk +++ b/keyboards/fortitude60/rev1/rules.mk @@ -1 +0,0 @@ -BACKLIGHT_ENABLE = yes diff --git a/keyboards/fortitude60/serial.c b/keyboards/fortitude60/serial.c index 46dfad021d..cea1a5f6ca 100644 --- a/keyboards/fortitude60/serial.c +++ b/keyboards/fortitude60/serial.c @@ -9,34 +9,128 @@ #include #include #include +#include #include #include "serial.h" +//#include -#ifndef USE_I2C +#ifdef USE_SERIAL -// Serial pulse period in microseconds. Its probably a bad idea to lower this -// value. -#define SERIAL_DELAY 24 +#ifndef SERIAL_USE_MULTI_TRANSACTION +/* --- USE Simple API (OLD API, compatible with let's split serial.c) */ + #if SERIAL_SLAVE_BUFFER_LENGTH > 0 + uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; + #endif + #if SERIAL_MASTER_BUFFER_LENGTH > 0 + uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; + #endif + uint8_t volatile status0 = 0; -uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; -uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; +SSTD_t transactions[] = { + { (uint8_t *)&status0, + #if SERIAL_MASTER_BUFFER_LENGTH > 0 + sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer, + #else + 0, (uint8_t *)NULL, + #endif + #if SERIAL_SLAVE_BUFFER_LENGTH > 0 + sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer + #else + 0, (uint8_t *)NULL, + #endif + } +}; -#define SLAVE_DATA_CORRUPT (1<<0) -volatile uint8_t status = 0; +void serial_master_init(void) +{ soft_serial_initiator_init(transactions); } + +void serial_slave_init(void) +{ soft_serial_target_init(transactions); } + +// 0 => no error +// 1 => slave did not respond +// 2 => checksum error +int serial_update_buffers() +{ return soft_serial_transaction(); } + +#endif // Simple API (OLD API, compatible with let's split serial.c) + +#define ALWAYS_INLINE __attribute__((always_inline)) +#define NO_INLINE __attribute__((noinline)) +#define _delay_sub_us(x) __builtin_avr_delay_cycles(x) + +// Serial pulse period in microseconds. +#define TID_SEND_ADJUST 14 + +#define SELECT_SERIAL_SPEED 1 +#if SELECT_SERIAL_SPEED == 0 + // Very High speed + #define SERIAL_DELAY 4 // micro sec + #define READ_WRITE_START_ADJUST 33 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles +#elif SELECT_SERIAL_SPEED == 1 + // High speed + #define SERIAL_DELAY 6 // micro sec + #define READ_WRITE_START_ADJUST 30 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles +#elif SELECT_SERIAL_SPEED == 2 + // Middle speed + #define SERIAL_DELAY 12 // micro sec + #define READ_WRITE_START_ADJUST 30 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles +#elif SELECT_SERIAL_SPEED == 3 + // Low speed + #define SERIAL_DELAY 24 // micro sec + #define READ_WRITE_START_ADJUST 30 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles +#elif SELECT_SERIAL_SPEED == 4 + // Very Low speed + #define SERIAL_DELAY 50 // micro sec + #define READ_WRITE_START_ADJUST 30 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles +#else +#error Illegal Serial Speed +#endif + + +#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2) +#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2) + +#define SLAVE_INT_WIDTH_US 1 +#ifndef SERIAL_USE_MULTI_TRANSACTION + #define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY +#else + #define SLAVE_INT_ACK_WIDTH_UNIT 2 + #define SLAVE_INT_ACK_WIDTH 4 +#endif + +static SSTD_t *Transaction_table = NULL; inline static void serial_delay(void) { _delay_us(SERIAL_DELAY); } +inline static +void serial_delay_half1(void) { + _delay_us(SERIAL_DELAY_HALF1); +} + +inline static +void serial_delay_half2(void) { + _delay_us(SERIAL_DELAY_HALF2); +} + +inline static void serial_output(void) ALWAYS_INLINE; inline static void serial_output(void) { SERIAL_PIN_DDR |= SERIAL_PIN_MASK; } // make the serial pin an input with pull-up resistor +inline static void serial_input_with_pullup(void) ALWAYS_INLINE; inline static -void serial_input(void) { +void serial_input_with_pullup(void) { SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } @@ -46,190 +140,305 @@ uint8_t serial_read_pin(void) { return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); } +inline static void serial_low(void) ALWAYS_INLINE; inline static void serial_low(void) { SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; } +inline static void serial_high(void) ALWAYS_INLINE; inline static void serial_high(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } -void serial_master_init(void) { - serial_output(); - serial_high(); +void soft_serial_initiator_init(SSTD_t *sstd_table) +{ + Transaction_table = sstd_table; + serial_output(); + serial_high(); } -void serial_slave_init(void) { - serial_input(); +void soft_serial_target_init(SSTD_t *sstd_table) +{ + Transaction_table = sstd_table; + serial_input_with_pullup(); -#ifndef USE_SERIAL_PD2 - // Enable INT0 - EIMSK |= _BV(INT0); - // Trigger on falling edge of INT0 - EICRA &= ~(_BV(ISC00) | _BV(ISC01)); +#if SERIAL_PIN_MASK == _BV(PD0) + // Enable INT0 + EIMSK |= _BV(INT0); + // Trigger on falling edge of INT0 + EICRA &= ~(_BV(ISC00) | _BV(ISC01)); +#elif SERIAL_PIN_MASK == _BV(PD2) + // Enable INT2 + EIMSK |= _BV(INT2); + // Trigger on falling edge of INT2 + EICRA &= ~(_BV(ISC20) | _BV(ISC21)); #else - // Enable INT2 - EIMSK |= _BV(INT2); - // Trigger on falling edge of INT2 - EICRA &= ~(_BV(ISC20) | _BV(ISC21)); + #error unknown SERIAL_PIN_MASK value #endif } -// Used by the master to synchronize timing with the slave. +// Used by the sender to synchronize timing with the reciver. +static void sync_recv(void) NO_INLINE; static void sync_recv(void) { - serial_input(); - // This shouldn't hang if the slave disconnects because the - // serial line will float to high if the slave does disconnect. + for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) { + } + // This shouldn't hang if the target disconnects because the + // serial line will float to high if the target does disconnect. while (!serial_read_pin()); - serial_delay(); } -// Used by the slave to send a synchronization signal to the master. +// Used by the reciver to send a synchronization signal to the sender. +static void sync_send(void)NO_INLINE; static void sync_send(void) { - serial_output(); - serial_low(); serial_delay(); - serial_high(); } // Reads a byte from the serial line -static -uint8_t serial_read_byte(void) { - uint8_t byte = 0; - serial_input(); - for ( uint8_t i = 0; i < 8; ++i) { - byte = (byte << 1) | serial_read_pin(); - serial_delay(); - _delay_us(1); +static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) NO_INLINE; +static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) { + uint8_t byte, i, p, pb; + + _delay_sub_us(READ_WRITE_START_ADJUST); + for( i = 0, byte = 0, p = 0; i < bit; i++ ) { + serial_delay_half1(); // read the middle of pulses + if( serial_read_pin() ) { + byte = (byte << 1) | 1; p ^= 1; + } else { + byte = (byte << 1) | 0; p ^= 0; + } + _delay_sub_us(READ_WRITE_WIDTH_ADJUST); + serial_delay_half2(); } + /* recive parity bit */ + serial_delay_half1(); // read the middle of pulses + pb = serial_read_pin(); + _delay_sub_us(READ_WRITE_WIDTH_ADJUST); + serial_delay_half2(); + + *pterrcount += (p != pb)? 1 : 0; return byte; } // Sends a byte with MSB ordering -static -void serial_write_byte(uint8_t data) { - uint8_t b = 8; - serial_output(); - while( b-- ) { - if(data & (1 << b)) { - serial_high(); - } else { - serial_low(); +void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE; +void serial_write_chunk(uint8_t data, uint8_t bit) { + uint8_t b, p; + for( p = 0, b = 1<<(bit-1); b ; b >>= 1) { + if(data & b) { + serial_high(); p ^= 1; + } else { + serial_low(); p ^= 0; + } + serial_delay(); } + /* send parity bit */ + if(p & 1) { serial_high(); } + else { serial_low(); } serial_delay(); + + serial_low(); // sync_send() / senc_recv() need raise edge +} + +static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE; +static +void serial_send_packet(uint8_t *buffer, uint8_t size) { + for (uint8_t i = 0; i < size; ++i) { + uint8_t data; + data = buffer[i]; + sync_send(); + serial_write_chunk(data,8); } } -// interrupt handle to be used by the slave device +static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) NO_INLINE; +static +uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) { + uint8_t pecount = 0; + for (uint8_t i = 0; i < size; ++i) { + uint8_t data; + sync_recv(); + data = serial_read_chunk(&pecount, 8); + buffer[i] = data; + } + return pecount == 0; +} + +inline static +void change_sender2reciver(void) { + sync_send(); //0 + serial_delay_half1(); //1 + serial_low(); //2 + serial_input_with_pullup(); //2 + serial_delay_half1(); //3 +} + +inline static +void change_reciver2sender(void) { + sync_recv(); //0 + serial_delay(); //1 + serial_low(); //3 + serial_output(); //3 + serial_delay_half1(); //4 +} + +// interrupt handle to be used by the target device ISR(SERIAL_PIN_INTERRUPT) { - sync_send(); - uint8_t checksum = 0; - for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { - serial_write_byte(serial_slave_buffer[i]); - sync_send(); - checksum += serial_slave_buffer[i]; - } - serial_write_byte(checksum); - sync_send(); +#ifndef SERIAL_USE_MULTI_TRANSACTION + serial_low(); + serial_output(); + SSTD_t *trans = Transaction_table; +#else + // recive transaction table index + uint8_t tid; + uint8_t pecount = 0; + sync_recv(); + tid = serial_read_chunk(&pecount,4); + if(pecount> 0) + return; + serial_delay_half1(); - // wait for the sync to finish sending - serial_delay(); + serial_high(); // response step1 low->high + serial_output(); + _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT*SLAVE_INT_ACK_WIDTH); + SSTD_t *trans = &Transaction_table[tid]; + serial_low(); // response step2 ack high->low +#endif - // read the middle of pulses - _delay_us(SERIAL_DELAY/2); + // target send phase + if( trans->target2initiator_buffer_size > 0 ) + serial_send_packet((uint8_t *)trans->target2initiator_buffer, + trans->target2initiator_buffer_size); + // target switch to input + change_sender2reciver(); - uint8_t checksum_computed = 0; - for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { - serial_master_buffer[i] = serial_read_byte(); - sync_send(); - checksum_computed += serial_master_buffer[i]; - } - uint8_t checksum_received = serial_read_byte(); - sync_send(); - - serial_input(); // end transaction - - if ( checksum_computed != checksum_received ) { - status |= SLAVE_DATA_CORRUPT; + // target recive phase + if( trans->initiator2target_buffer_size > 0 ) { + if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer, + trans->initiator2target_buffer_size) ) { + *trans->status = TRANSACTION_ACCEPTED; + } else { + *trans->status = TRANSACTION_DATA_ERROR; + } } else { - status &= ~SLAVE_DATA_CORRUPT; + *trans->status = TRANSACTION_ACCEPTED; } + + sync_recv(); //weit initiator output to high } -inline -bool serial_slave_DATA_CORRUPT(void) { - return status & SLAVE_DATA_CORRUPT; -} - -// Copies the serial_slave_buffer to the master and sends the -// serial_master_buffer to the slave. +///////// +// start transaction by initiator +// +// int soft_serial_transaction(int sstd_index) // // Returns: -// 0 => no error -// 1 => slave did not respond -int serial_update_buffers(void) { - // this code is very time dependent, so we need to disable interrupts +// TRANSACTION_END +// TRANSACTION_NO_RESPONSE +// TRANSACTION_DATA_ERROR +// this code is very time dependent, so we need to disable interrupts +#ifndef SERIAL_USE_MULTI_TRANSACTION +int soft_serial_transaction(void) { + SSTD_t *trans = Transaction_table; +#else +int soft_serial_transaction(int sstd_index) { + SSTD_t *trans = &Transaction_table[sstd_index]; +#endif cli(); - // signal to the slave that we want to start a transaction + // signal to the target that we want to start a transaction serial_output(); serial_low(); - _delay_us(1); + _delay_us(SLAVE_INT_WIDTH_US); - // wait for the slaves response - serial_input(); - serial_high(); - _delay_us(SERIAL_DELAY); +#ifndef SERIAL_USE_MULTI_TRANSACTION + // wait for the target response + serial_input_with_pullup(); + _delay_us(SLAVE_INT_RESPONSE_TIME); - // check if the slave is present + // check if the target is present if (serial_read_pin()) { - // slave failed to pull the line low, assume not present + // target failed to pull the line low, assume not present + serial_output(); + serial_high(); + *trans->status = TRANSACTION_NO_RESPONSE; sei(); - return 1; + return TRANSACTION_NO_RESPONSE; } - // if the slave is present syncronize with it - sync_recv(); +#else + // send transaction table index + sync_send(); + _delay_sub_us(TID_SEND_ADJUST); + serial_write_chunk(sstd_index, 4); + serial_delay_half1(); - uint8_t checksum_computed = 0; - // receive data from the slave - for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { - serial_slave_buffer[i] = serial_read_byte(); - sync_recv(); - checksum_computed += serial_slave_buffer[i]; - } - uint8_t checksum_received = serial_read_byte(); - sync_recv(); - - if (checksum_computed != checksum_received) { - sei(); - return 2; + // wait for the target response (step1 low->high) + serial_input_with_pullup(); + while( !serial_read_pin() ) { + _delay_sub_us(2); } - uint8_t checksum = 0; - // send data to the slave - for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { - serial_write_byte(serial_master_buffer[i]); - sync_recv(); - checksum += serial_master_buffer[i]; + // check if the target is present (step2 high->low) + for( int i = 0; serial_read_pin(); i++ ) { + if (i > SLAVE_INT_ACK_WIDTH + 1) { + // slave failed to pull the line low, assume not present + serial_output(); + serial_high(); + *trans->status = TRANSACTION_NO_RESPONSE; + sei(); + return TRANSACTION_NO_RESPONSE; + } + _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT); + } +#endif + + // initiator recive phase + // if the target is present syncronize with it + if( trans->target2initiator_buffer_size > 0 ) { + if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer, + trans->target2initiator_buffer_size) ) { + serial_output(); + serial_high(); + *trans->status = TRANSACTION_DATA_ERROR; + sei(); + return TRANSACTION_DATA_ERROR; + } + } + + // initiator switch to output + change_reciver2sender(); + + // initiator send phase + if( trans->initiator2target_buffer_size > 0 ) { + serial_send_packet((uint8_t *)trans->initiator2target_buffer, + trans->initiator2target_buffer_size); } - serial_write_byte(checksum); - sync_recv(); // always, release the line when not in use - serial_output(); - serial_high(); + sync_send(); + *trans->status = TRANSACTION_END; sei(); - return 0; + return TRANSACTION_END; } +#ifdef SERIAL_USE_MULTI_TRANSACTION +int soft_serial_get_and_clean_status(int sstd_index) { + SSTD_t *trans = &Transaction_table[sstd_index]; + cli(); + int retval = *trans->status; + *trans->status = 0;; + sei(); + return retval; +} #endif + +#endif \ No newline at end of file diff --git a/keyboards/fortitude60/serial.h b/keyboards/fortitude60/serial.h index 361f1881b6..d008980556 100644 --- a/keyboards/fortitude60/serial.h +++ b/keyboards/fortitude60/serial.h @@ -1,32 +1,80 @@ -#ifndef MY_SERIAL_H -#define MY_SERIAL_H +#ifndef SOFT_SERIAL_H +#define SOFT_SERIAL_H -#include "config.h" #include -/* TODO: some defines for interrupt setup */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND +// ///////////////////////////////////////////////////////////////// +// Need Soft Serial defines in serial_config.h +// ///////////////////////////////////////////////////////////////// +// ex. +// #define SERIAL_PIN_DDR DDRD +// #define SERIAL_PIN_PORT PORTD +// #define SERIAL_PIN_INPUT PIND +// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2 +// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2 +// +// //// USE Simple API (OLD API, compatible with let's split serial.c) +// ex. +// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 +// #define SERIAL_MASTER_BUFFER_LENGTH 1 +// +// //// USE flexible API (using multi-type transaction function) +// #define SERIAL_USE_MULTI_TRANSACTION +// +// ///////////////////////////////////////////////////////////////// -#ifndef USE_SERIAL_PD2 -#define SERIAL_PIN_MASK _BV(PD0) -#define SERIAL_PIN_INTERRUPT INT0_vect -#else -#define SERIAL_PIN_MASK _BV(PD2) -#define SERIAL_PIN_INTERRUPT INT2_vect -#endif -#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 -#define SERIAL_MASTER_BUFFER_LENGTH 1 - -// Buffers for master - slave communication +#ifndef SERIAL_USE_MULTI_TRANSACTION +/* --- USE Simple API (OLD API, compatible with let's split serial.c) */ +#if SERIAL_SLAVE_BUFFER_LENGTH > 0 extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; +#endif +#if SERIAL_MASTER_BUFFER_LENGTH > 0 extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; +#endif void serial_master_init(void); void serial_slave_init(void); int serial_update_buffers(void); -bool serial_slave_data_corrupt(void); +#endif // USE Simple API + +// Soft Serial Transaction Descriptor +typedef struct _SSTD_t { + uint8_t *status; + uint8_t initiator2target_buffer_size; + uint8_t *initiator2target_buffer; + uint8_t target2initiator_buffer_size; + uint8_t *target2initiator_buffer; +} SSTD_t; + +// initiator is transaction start side +void soft_serial_initiator_init(SSTD_t *sstd_table); +// target is interrupt accept side +void soft_serial_target_init(SSTD_t *sstd_table); + +// initiator resullt +#define TRANSACTION_END 0 +#define TRANSACTION_NO_RESPONSE 0x1 +#define TRANSACTION_DATA_ERROR 0x2 +#ifndef SERIAL_USE_MULTI_TRANSACTION +int soft_serial_transaction(void); +#else +int soft_serial_transaction(int sstd_index); #endif + +// target status +// *SSTD_t.status has +// initiator: +// TRANSACTION_END +// or TRANSACTION_NO_RESPONSE +// or TRANSACTION_DATA_ERROR +// target: +// TRANSACTION_DATA_ERROR +// or TRANSACTION_ACCEPTED +#define TRANSACTION_ACCEPTED 0x4 +#ifdef SERIAL_USE_MULTI_TRANSACTION +int soft_serial_get_and_clean_status(int sstd_index); +#endif + +#endif /* SOFT_SERIAL_H */ \ No newline at end of file diff --git a/keyboards/fortitude60/serial_config.h b/keyboards/fortitude60/serial_config.h new file mode 100644 index 0000000000..96a54afbd8 --- /dev/null +++ b/keyboards/fortitude60/serial_config.h @@ -0,0 +1,14 @@ +#ifndef SOFT_SERIAL_CONFIG_H +#define SOFT_SERIAL_CONFIG_H + +/* Soft Serial defines */ +#define SERIAL_PIN_DDR DDRD +#define SERIAL_PIN_PORT PORTD +#define SERIAL_PIN_INPUT PIND +#define SERIAL_PIN_MASK _BV(PD2) +#define SERIAL_PIN_INTERRUPT INT2_vect + +#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 +#define SERIAL_MASTER_BUFFER_LENGTH 1 + +#endif /* SOFT_SERIAL_CONFIG_H */ \ No newline at end of file From 246d539f295c70846aa4ecaf9cfbe79b959bf3c7 Mon Sep 17 00:00:00 2001 From: Ethan Madden Date: Thu, 27 Sep 2018 18:09:23 -0700 Subject: [PATCH 048/269] Keymap: add clicky support to jetpacktuxedo keymap (#3990) controlled by dip 3 with pitch modulated by the knob --- keyboards/planck/keymaps/jetpacktuxedo/config.h | 2 ++ keyboards/planck/keymaps/jetpacktuxedo/keymap.c | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/keyboards/planck/keymaps/jetpacktuxedo/config.h b/keyboards/planck/keymaps/jetpacktuxedo/config.h index f216dc02dc..7efe97a573 100644 --- a/keyboards/planck/keymaps/jetpacktuxedo/config.h +++ b/keyboards/planck/keymaps/jetpacktuxedo/config.h @@ -2,6 +2,7 @@ #ifdef AUDIO_ENABLE #define STARTUP_SONG SONG(PLANCK_SOUND) + #define AUDIO_CLICKY #endif /* @@ -30,3 +31,4 @@ // Most tactile encoders have detents every 4 stages #define ENCODER_RESOLUTION 4 + diff --git a/keyboards/planck/keymaps/jetpacktuxedo/keymap.c b/keyboards/planck/keymaps/jetpacktuxedo/keymap.c index 2994c0c077..1324056862 100644 --- a/keyboards/planck/keymaps/jetpacktuxedo/keymap.c +++ b/keyboards/planck/keymaps/jetpacktuxedo/keymap.c @@ -189,6 +189,13 @@ uint8_t muse_offset = 70; uint16_t muse_tempo = 20; void encoder_update(bool clockwise) { + if (is_clicky_on()) { + if (clockwise) { + clicky_freq_up(); + } else { + clicky_freq_down(); + } + } else if (muse_mode) { if (IS_LAYER_ON(_RAISE)) { if (clockwise) { @@ -248,6 +255,12 @@ void dip_update(uint8_t index, bool active) { stop_all_notes(); #endif } + case 2: + if (active) { + clicky_on(); + } else { + clicky_off(); + } } } From edeace279b1cdc5a5450cc5b41d49b341a3a121f Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Thu, 27 Sep 2018 18:12:32 -0700 Subject: [PATCH 049/269] Make Audio Clicky's randomness a float Rather than a define, but read from the define. This way, a smart coder could externally configure the randomness, changing it on the fly This is also a precursor step to adding full on support for configurable randomness. --- quantum/process_keycode/process_clicky.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c index 36578047ad..8238c263f9 100644 --- a/quantum/process_keycode/process_clicky.c +++ b/quantum/process_keycode/process_clicky.c @@ -20,6 +20,7 @@ #endif // !AUDIO_CLICKY_FREQ_RANDOMNESS float clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; +float clicky_rand = AUDIO_CLICKY_FREQ_RANDOMNESS; float clicky_song[][2] = {{AUDIO_CLICKY_FREQ_DEFAULT, 3}, {AUDIO_CLICKY_FREQ_DEFAULT, 1}}; // 3 and 1 --> durations extern audio_config_t audio_config; @@ -33,8 +34,8 @@ void clicky_play(void) { #ifndef NO_MUSIC_MODE if (music_activated || midi_activated) return; #endif // !NO_MUSIC_MODE - clicky_song[0][0] = 2.0f * clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); - clicky_song[1][0] = clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); + clicky_song[0][0] = 2.0f * clicky_freq * (1.0f + clicky_rand * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); + clicky_song[1][0] = clicky_freq * (1.0f + clicky_rand * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); PLAY_SONG(clicky_song); } From baebbc096702c3ecc0ee89b4fbf5749e79f02375 Mon Sep 17 00:00:00 2001 From: Takeshi ISHII <2170248+mtei@users.noreply.github.com> Date: Fri, 28 Sep 2018 11:02:12 +0900 Subject: [PATCH 050/269] add 'mavrdude' target into tmk_core/avr.mk (#3986) * add 'mavrdude' target into tmk_core/avr.mk I made it a little convenient when writing the same binary to multiple Pro Micro. * rename target name 'mavrdude' to 'avrdude-loop' * modify docs/flashing.md about avrdude-loop * mdify docs/flashing.md again * modifi docs/flashing.md 3rd --- docs/flashing.md | 6 ++++++ tmk_core/avr.mk | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/flashing.md b/docs/flashing.md index e5fe59f8f0..66c08a3610 100644 --- a/docs/flashing.md +++ b/docs/flashing.md @@ -78,6 +78,12 @@ or make ::avrdude +or if you want to flash multiple boards, use the following command + + make ::avrdude-loop + +When you're done flashing boards, you'll need to hit Ctrl + C or whatever the correct keystroke is for your operating system to break the loop. + ## Halfkay Halfkay is a super-slim protocol developed by PJRC that uses HID, and come on all Teensys (namely the 2.0). diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk index 2f955b18fe..add904c9c5 100644 --- a/tmk_core/avr.mk +++ b/tmk_core/avr.mk @@ -169,7 +169,8 @@ dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep fi $(DFU_PROGRAMMER) $(MCU) reset -avrdude: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware +define EXEC_AVRDUDE + USB= ;\ if $(GREP) -q -s Microsoft /proc/version; then \ echo 'ERROR: AVR flashing cannot be automated within the Windows Subsystem for Linux (WSL) currently. Instead, take the .hex file generated and flash it using AVRDUDE, AVRDUDESS, or XLoader.'; \ else \ @@ -191,6 +192,15 @@ avrdude: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware sleep 1; \ avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex; \ fi +endef + +avrdude: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware + $(call EXEC_AVRDUDE) + +avrdude-loop: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware + while true; do \ + $(call EXEC_AVRDUDE) ; \ + done # Convert hex to bin. bin: $(BUILD_DIR)/$(TARGET).hex From 96c9ebc2e48b8f327bca2a2d5db77c0ab2ef6c8a Mon Sep 17 00:00:00 2001 From: Chiang Fong Lee Date: Sat, 18 Aug 2018 12:19:29 +0800 Subject: [PATCH 051/269] Revert "Split Common: Serial Backlight LED fix (#3586)" This reverts commit 3eabd7946ec5e47d12d603d591e8d8658d82fa42. --- quantum/split_common/matrix.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c index 3d2983f2ef..ff6738b58f 100644 --- a/quantum/split_common/matrix.c +++ b/quantum/split_common/matrix.c @@ -355,24 +355,6 @@ void matrix_slave_scan(void) { for (int i = 0; i < ROWS_PER_HAND; ++i) { serial_slave_buffer[i] = matrix[offset+i]; } -#endif -#ifdef USE_I2C -#ifdef BACKLIGHT_ENABLE - // Read backlight level sent from master and update level on slave - backlight_set(i2c_slave_buffer[0]); -#endif - for (int i = 0; i < ROWS_PER_HAND; ++i) { - i2c_slave_buffer[i+1] = matrix[offset+i]; - } -#else // USE_SERIAL - for (int i = 0; i < ROWS_PER_HAND; ++i) { - serial_slave_buffer[i] = matrix[offset+i]; - } - -#ifdef BACKLIGHT_ENABLE - // Read backlight level sent from master and update level on slave - backlight_set(serial_master_buffer[SERIAL_BACKLIT_START]); -#endif #endif matrix_slave_scan_user(); } From 7d2d0c6795eaaa87d4e13fc159807b64ca2d71f9 Mon Sep 17 00:00:00 2001 From: Chiang Fong Lee Date: Sat, 18 Aug 2018 12:46:12 +0800 Subject: [PATCH 052/269] split_common: fix backlight update for serial boards --- quantum/split_common/split_util.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index 13b09d5b81..7c87de4d9b 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -106,14 +106,14 @@ void keyboard_slave_loop(void) { // Read Backlight Info #ifdef BACKLIGHT_ENABLE - if (BACKLIT_DIRTY) { - #ifdef USE_I2C + #ifdef USE_I2C + if (BACKLIT_DIRTY) { backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]); - #else // USE_SERIAL - backlight_set(serial_master_buffer[SERIAL_BACKLIT_START]); - #endif - BACKLIT_DIRTY = false; - } + BACKLIT_DIRTY = false; + } + #else // USE_SERIAL + backlight_set(serial_master_buffer[SERIAL_BACKLIT_START]); + #endif #endif // Read RGB Info #ifdef RGBLIGHT_ENABLE From b382076ad1a6d857b6f185077b5f3635801b4ad6 Mon Sep 17 00:00:00 2001 From: James Laird-Wah Date: Fri, 28 Sep 2018 13:53:36 +1000 Subject: [PATCH 053/269] Keyboard: keyboardio model01: rgbmatrix support (#3989) * model01: implement RGB matrix feature LEDs can still be individually controlled if this is switched off. * model01: use fast banked LED setting commands * model01: update default keymap to use RGB matrix * model01: update RGB matrix support to match common_features.mk * rgb_matrix: include This was missing after commit 4d5705ea6ceeb11cd2adc018644ec87c51af4e86 which introduces a use of memset(). * model01: make g_rgb_leds weak This allows users to override which LEDs are configured as modifiers, or tweak the x/y coordinates, should they so choose. --- keyboards/model01/config.h | 3 + keyboards/model01/keymaps/default/keymap.c | 57 ++++++-- keyboards/model01/leds.c | 144 ++++++++++++++++++--- keyboards/model01/leds.h | 9 +- keyboards/model01/rules.mk | 4 +- quantum/rgb_matrix.c | 1 + 6 files changed, 182 insertions(+), 36 deletions(-) diff --git a/keyboards/model01/config.h b/keyboards/model01/config.h index 796653f459..167310731f 100644 --- a/keyboards/model01/config.h +++ b/keyboards/model01/config.h @@ -33,3 +33,6 @@ along with this program. If not, see . /* The scanners already debounce for us */ #define DEBOUNCING_DELAY 0 + +/* RGB matrix constants */ +#define DRIVER_LED_TOTAL 64 diff --git a/keyboards/model01/keymaps/default/keymap.c b/keyboards/model01/keymaps/default/keymap.c index cdc050cd90..a6e5303fe8 100644 --- a/keyboards/model01/keymaps/default/keymap.c +++ b/keyboards/model01/keymaps/default/keymap.c @@ -26,7 +26,7 @@ enum { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [DEF] = LAYOUT( RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , TG(NUM), - KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , _______, _______, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL , + KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_MOD, _______, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL , KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB , KC_ENT , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_ESC , _______, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS, KC_LCTL, KC_RCTL, @@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [FUN] = LAYOUT( _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , - KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, _______, KC_MPRV, KC_MNXT, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 , + KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_TOG, KC_MPRV, KC_MNXT, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 , KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, _______, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______, KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_BSLS, KC_PIPE, _______, _______, @@ -73,21 +73,52 @@ LAYOUT( ) */ +static void set_numpad_colours(int on, void (*write)(int, uint8_t, uint8_t, uint8_t)) { + if (!on) { + for (int i=44; i<=60; i++) + write(i, 0, 0, 0); + write(63, 0, 0, 0); + return; + } + + /* main number keys */ + for (int i=44; i<=47; i++) + write(i, 255, 0, 0); + for (int i=49; i<=54; i++) + write(i, 255, 0, 0); + + /* accessory keys */ + write(48, 128, 128, 0); + for (int i=55; i<=59; i++) + write(i, 128, 128, 0); + + // enter + write(63, 0, 128, 0); + + // num key + write(60, 128, 0, 128); +} + +#ifdef RGB_MATRIX_ENABLE +/* the RGB matrix effects will overwrite the numpad indicator. + * this handy mechanism allows to override the matrix effects. + */ +void rgb_matrix_indicators_user(void) { + if (layer_state & (1< #include #include +#include +#include #include "model01.h" #define I2C_TIMEOUT 1000 -#define LINCOR(i) pgm_read_byte(&CIE1931_CURVE[i]) - -int set_all_leds_to_raw(uint8_t r, uint8_t g, uint8_t b) { +void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b) { uint8_t buf[] = { TWI_CMD_LED_SET_ALL_TO, b, g, r }; - int ret = 0; - ret |= i2c_transmit(I2C_ADDR(LEFT), buf, sizeof(buf), I2C_TIMEOUT); - ret |= i2c_transmit(I2C_ADDR(RIGHT), buf, sizeof(buf), I2C_TIMEOUT); + i2c_transmit(I2C_ADDR(LEFT), buf, sizeof(buf), I2C_TIMEOUT); + i2c_transmit(I2C_ADDR(RIGHT), buf, sizeof(buf), I2C_TIMEOUT); _delay_us(10); - return ret; } -int set_all_leds_to(uint8_t r, uint8_t g, uint8_t b) { - return set_all_leds_to_raw(LINCOR(r), LINCOR(g), LINCOR(b)); -} - -int set_led_to_raw(uint8_t led, uint8_t r, uint8_t g, uint8_t b) { +void set_led_to(int led, uint8_t r, uint8_t g, uint8_t b) { uint8_t buf[] = { TWI_CMD_LED_SET_ONE_TO, led & 0x1f, b, g, r }; int hand = (led >= 32) ? RIGHT : LEFT; - int ret = i2c_transmit(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT); + i2c_transmit(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT); _delay_us(10); - return ret; } -int set_led_to(uint8_t led, uint8_t r, uint8_t g, uint8_t b) { - return set_led_to_raw(led, LINCOR(r), LINCOR(g), LINCOR(b)); +#ifdef RGB_MATRIX_ENABLE + +__attribute__ ((weak)) +const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = { + {{0x73}, { 3, 35}, 0}, + {{0x72}, { 0, 26}, 0}, + {{0x71}, { 0, 17}, 0}, + {{0x70}, { 0, 6}, 0}, + {{0x60}, { 14, 5}, 0}, + {{0x61}, { 15, 16}, 0}, + {{0x62}, { 16, 25}, 0}, + {{0x63}, { 17, 34}, 0}, + {{0x53}, { 31, 29}, 0}, + {{0x52}, { 31, 19}, 0}, + {{0x51}, { 30, 11}, 0}, + {{0x50}, { 30, 1}, 0}, + {{0x40}, { 45, 0}, 0}, + {{0x41}, { 45, 8}, 0}, + {{0x42}, { 46, 17}, 0}, + {{0x43}, { 46, 27}, 0}, + {{0x33}, { 60, 27}, 0}, + {{0x32}, { 60, 18}, 0}, + {{0x31}, { 60, 9}, 0}, + {{0x30}, { 60, 0}, 0}, + {{0x20}, { 74, 2}, 0}, + {{0x21}, { 74, 11}, 0}, + {{0x22}, { 75, 20}, 0}, + {{0x23}, { 74, 28}, 0}, + {{0x12}, { 89, 30}, 0}, + {{0x11}, { 89, 19}, 0}, + {{0x10}, { 89, 7}, 0}, + {{0x00}, { 70, 38}, 1}, + {{0x01}, { 82, 41}, 1}, + {{0x02}, { 93, 45}, 1}, + {{0x03}, {104, 50}, 1}, + {{0x13}, { 74, 64}, 1}, + {{0x67}, {149, 64}, 1}, + {{0x77}, {119, 50}, 1}, + {{0x76}, {130, 45}, 1}, + {{0x75}, {141, 41}, 1}, + {{0x74}, {153, 38}, 1}, + {{0x64}, {134, 7}, 0}, + {{0x65}, {134, 19}, 0}, + {{0x66}, {134, 30}, 0}, + {{0x57}, {149, 28}, 0}, + {{0x56}, {148, 20}, 0}, + {{0x55}, {149, 11}, 0}, + {{0x54}, {149, 2}, 0}, + {{0x44}, {163, 0}, 0}, + {{0x45}, {163, 9}, 0}, + {{0x46}, {163, 18}, 0}, + {{0x47}, {163, 27}, 0}, + {{0x37}, {177, 27}, 0}, + {{0x36}, {177, 17}, 0}, + {{0x35}, {178, 8}, 0}, + {{0x34}, {178, 0}, 0}, + {{0x24}, {193, 1}, 0}, + {{0x25}, {193, 11}, 0}, + {{0x26}, {192, 19}, 0}, + {{0x27}, {192, 29}, 0}, + {{0x17}, {206, 34}, 0}, + {{0x16}, {207, 25}, 0}, + {{0x15}, {208, 16}, 0}, + {{0x14}, {209, 5}, 0}, + {{0x04}, {224, 6}, 0}, + {{0x05}, {223, 17}, 0}, + {{0x06}, {223, 26}, 0}, + {{0x07}, {220, 35}, 0}, +}; + +static struct { + uint8_t b; + uint8_t g; + uint8_t r; +} __attribute__((packed)) led_state[64]; + +static void set_color(int index, uint8_t r, uint8_t g, uint8_t b) { + led_state[index].r = r; + led_state[index].g = g; + led_state[index].b = b; } +static void set_color_all(uint8_t r, uint8_t g, uint8_t b) { + for (int i=0; i +#include -int set_all_leds_to(uint8_t r, uint8_t g, uint8_t b); -int set_led_to(uint8_t led, uint8_t r, uint8_t g, uint8_t b); - -/* Raw (gamma uncorrected) LED values */ -int set_all_leds_to_raw(uint8_t r, uint8_t g, uint8_t b); -int set_led_to_raw(uint8_t led, uint8_t r, uint8_t g, uint8_t b); +void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b); +void set_led_to(int led, uint8_t r, uint8_t g, uint8_t b); diff --git a/keyboards/model01/rules.mk b/keyboards/model01/rules.mk index cab7065ff8..49ab981d14 100644 --- a/keyboards/model01/rules.mk +++ b/keyboards/model01/rules.mk @@ -59,4 +59,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode CUSTOM_MATRIX = yes -CIE1931_CURVE = yes + +# You can set RGB_MATRIX_ENABLE = no in your rules.mk to disable this and save the Flash +RGB_MATRIX_ENABLE = custom # Enable RGB matrix effects (+10000). diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 807e4d62d1..b282284a13 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -21,6 +21,7 @@ #include "progmem.h" #include "config.h" #include "eeprom.h" +#include #include rgb_config_t rgb_matrix_config; From a173eda6d28bd09b2d59448a6532edb7a6c8e358 Mon Sep 17 00:00:00 2001 From: Wilba6582 Date: Fri, 28 Sep 2018 14:09:14 +1000 Subject: [PATCH 054/269] Improved dynamic keymaps (#3972) * Improved dynamic keymaps * K&R sucks --- keyboards/zeal60/zeal60.c | 9 ++++---- keyboards/zeal60/zeal60_api.h | 2 +- quantum/dynamic_keymap.c | 42 +++++++++++++---------------------- quantum/dynamic_keymap.h | 7 ++---- 4 files changed, 22 insertions(+), 38 deletions(-) diff --git a/keyboards/zeal60/zeal60.c b/keyboards/zeal60/zeal60.c index e516c4dbfc..092235ca61 100644 --- a/keyboards/zeal60/zeal60.c +++ b/keyboards/zeal60/zeal60.c @@ -81,9 +81,9 @@ void raw_hid_receive( uint8_t *data, uint8_t length ) dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] ); break; } - case id_dynamic_keymap_clear_all: + case id_dynamic_keymap_reset: { - dynamic_keymap_clear_all(); + dynamic_keymap_reset(); break; } #endif // DYNAMIC_KEYMAP_ENABLE @@ -171,9 +171,8 @@ void matrix_init_kb(void) #endif // RGB_BACKLIGHT_ENABLED #ifdef DYNAMIC_KEYMAP_ENABLE - // This saves "empty" keymaps so it falls back to the keymaps - // in the firmware (aka. progmem/flash) - dynamic_keymap_clear_all(); + // This resets the keymaps in EEPROM to what is in flash. + dynamic_keymap_reset(); #endif // Save the magic number last, in case saving was interrupted diff --git a/keyboards/zeal60/zeal60_api.h b/keyboards/zeal60/zeal60_api.h index baa8ac09f8..eaac3ad7ce 100644 --- a/keyboards/zeal60/zeal60_api.h +++ b/keyboards/zeal60/zeal60_api.h @@ -24,7 +24,7 @@ enum zeal60_command_id id_set_keyboard_value, id_dynamic_keymap_get_keycode, id_dynamic_keymap_set_keycode, - id_dynamic_keymap_clear_all, + id_dynamic_keymap_reset, id_backlight_config_set_value, id_backlight_config_get_value, id_backlight_config_save, diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c index 9f18612d56..2c989d6918 100644 --- a/quantum/dynamic_keymap.c +++ b/quantum/dynamic_keymap.c @@ -16,6 +16,8 @@ #include "config.h" #include "keymap.h" // to get keymaps[][][] +#include "tmk_core/common/eeprom.h" +#include "progmem.h"// to read default from flash #include "dynamic_keymap.h" @@ -29,8 +31,6 @@ #error DYNAMIC_KEYMAP_LAYER_COUNT not defined #endif -#define KC_EENULL 0xFFFF // TODO: move to enum quantum_keycodes - void *dynamic_keymap_key_to_eeprom_address(uint8_t layer, uint8_t row, uint8_t column) { // TODO: optimize this with some left shifts @@ -55,16 +55,15 @@ void dynamic_keymap_set_keycode(uint8_t layer, uint8_t row, uint8_t column, uint eeprom_update_byte(address+1, (uint8_t)(keycode & 0xFF)); } -void dynamic_keymap_clear_all(void) +void dynamic_keymap_reset(void) { - // Save "empty" keymaps. - for ( int layer = 0; layer < DYNAMIC_KEYMAP_LAYER_COUNT; layer++ ) - { - for ( int row = 0; row < MATRIX_ROWS; row++ ) - { - for ( int column = 0; column < MATRIX_COLS; column++ ) - { - dynamic_keymap_set_keycode(layer, row, column, KC_EENULL); + // Reset the keymaps in EEPROM to what is in flash. + // All keyboards using dynamic keymaps should define a layout + // for the same number of layers as DYNAMIC_KEYMAP_LAYER_COUNT. + for ( int layer = 0; layer < DYNAMIC_KEYMAP_LAYER_COUNT; layer++ ) { + for ( int row = 0; row < MATRIX_ROWS; row++ ) { + for ( int column = 0; column < MATRIX_COLS; column++ ) { + dynamic_keymap_set_keycode(layer, row, column, pgm_read_word(&keymaps[layer][row][column])); } } } @@ -73,24 +72,13 @@ void dynamic_keymap_clear_all(void) // This overrides the one in quantum/keymap_common.c uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) { - // This used to test EEPROM for magic bytes, but it was redundant. - // Test for EEPROM usage change (fresh install, address change, etc.) - // externally and call dynamic_keymap_default_save() if ( layer < DYNAMIC_KEYMAP_LAYER_COUNT && - key.row < MATRIX_ROWS && // possibly redundant - key.col < MATRIX_COLS ) // possibly redundant - { - uint16_t keycode = dynamic_keymap_get_keycode(layer, key.row, key.col); - - // If keycode is not "empty", return it, otherwise - // drop down to return the one in flash - if ( keycode != KC_EENULL) - { - return keycode; - } + key.row < MATRIX_ROWS && + key.col < MATRIX_COLS ) { + return dynamic_keymap_get_keycode(layer, key.row, key.col); + } else { + return KC_NO; } - - return pgm_read_word(&keymaps[layer][key.row][key.col]); } #endif // DYNAMIC_KEYMAP_ENABLE diff --git a/quantum/dynamic_keymap.h b/quantum/dynamic_keymap.h index b0133aeb85..bd76adae20 100644 --- a/quantum/dynamic_keymap.h +++ b/quantum/dynamic_keymap.h @@ -13,9 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - -#ifndef DYNAMIC_KEYMAP_H -#define DYNAMIC_KEYMAP_H +#pragma once #include #include @@ -23,9 +21,8 @@ void *dynamic_keymap_key_to_eeprom_address(uint8_t layer, uint8_t row, uint8_t column); uint16_t dynamic_keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t column); void dynamic_keymap_set_keycode(uint8_t layer, uint8_t row, uint8_t column, uint16_t keycode); -void dynamic_keymap_clear_all(void); +void dynamic_keymap_reset(void); // This overrides the one in quantum/keymap_common.c // uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key); -#endif //DYNAMIC_KEYMAP_H From 31afdd81a1e7cdb8808c8eb32e0ebe69c3d15f5c Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 07:15:20 -0700 Subject: [PATCH 055/269] Optimize size of JC65/v32a keyboard --- keyboards/jc65/v32a/config.h | 7 ++++--- keyboards/jc65/v32a/rules.mk | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/keyboards/jc65/v32a/config.h b/keyboards/jc65/v32a/config.h index dc6d280f52..466cb7a28e 100644 --- a/keyboards/jc65/v32a/config.h +++ b/keyboards/jc65/v32a/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -43,4 +42,6 @@ along with this program. If not, see . /* key combination for command */ #define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) -#endif +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + diff --git a/keyboards/jc65/v32a/rules.mk b/keyboards/jc65/v32a/rules.mk index 1ea19fe00e..5c8e63283d 100644 --- a/keyboards/jc65/v32a/rules.mk +++ b/keyboards/jc65/v32a/rules.mk @@ -26,7 +26,7 @@ F_CPU = 12000000 # Bootloader # This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded +# different sizes, comment this out, and the correct address will be loaded # automatically (+60). See bootloader.mk for all options. BOOTLOADER = bootloadHID From a4bdab68370bc1497a7d5aa32d05bd8a6b3c3c14 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 07:09:46 -0700 Subject: [PATCH 056/269] Optimize size of Hadron keyboard --- keyboards/hadron/config.h | 17 ++++-------- keyboards/hadron/keymaps/default/rules.mk | 4 +-- keyboards/hadron/rules.mk | 32 +++++++++++------------ keyboards/hadron/ver0/config.h | 7 ++--- keyboards/hadron/ver2/config.h | 7 ++--- keyboards/hadron/ver2/rules.mk | 2 +- 6 files changed, 27 insertions(+), 42 deletions(-) diff --git a/keyboards/hadron/config.h b/keyboards/hadron/config.h index 0c19d6c791..9111ad7279 100644 --- a/keyboards/hadron/config.h +++ b/keyboards/hadron/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -30,7 +29,7 @@ along with this program. If not, see . -//#define AUDIO_VOICES +//#define AUDIO_VOICES //#define BACKLIGHT_PIN B7 @@ -71,13 +70,7 @@ along with this program. If not, see . //#define NO_ACTION_LAYER //#define NO_ACTION_TAPPING //#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION -#ifdef SUBPROJECT_ver0 - #include "ver0/config.h" -#endif -#ifdef SUBPROJECT_ver2 - #include "ver2/config.h" -#endif +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + -#endif diff --git a/keyboards/hadron/keymaps/default/rules.mk b/keyboards/hadron/keymaps/default/rules.mk index 1f3975255a..4d08544f3a 100644 --- a/keyboards/hadron/keymaps/default/rules.mk +++ b/keyboards/hadron/keymaps/default/rules.mk @@ -21,6 +21,4 @@ SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file +EXTRAFLAGS += -flto diff --git a/keyboards/hadron/rules.mk b/keyboards/hadron/rules.mk index 66a900825a..1f835e0660 100644 --- a/keyboards/hadron/rules.mk +++ b/keyboards/hadron/rules.mk @@ -44,30 +44,30 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # Atmel DFU loader 4096 # LUFA bootloader 4096 # USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=512 +BOOTLOADER = halfkay # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= no # Commands for debug and configuration -NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality -MIDI_ENABLE ?= no # MIDI controls -AUDIO_ENABLE ?= no # Audio output on port C6 -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. API_SYSEX_ENABLE = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SRC = i2c.c \ ssd1306.c -DEFAULT_FOLDER = hadron/ver2 \ No newline at end of file +DEFAULT_FOLDER = hadron/ver2 diff --git a/keyboards/hadron/ver0/config.h b/keyboards/hadron/ver0/config.h index 039d4f1c71..2157a52cee 100644 --- a/keyboards/hadron/ver0/config.h +++ b/keyboards/hadron/ver0/config.h @@ -14,10 +14,7 @@ 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 . */ -#ifndef VER0_CONFIG_H -#define VER0_CONFIG_H - -#include "../config.h" +#pragma once /* USB Device descriptor parameter */ #define DEVICE_VER 0x0001 @@ -32,4 +29,4 @@ along with this program. If not, see . #define UNUSED_PINS -#endif + diff --git a/keyboards/hadron/ver2/config.h b/keyboards/hadron/ver2/config.h index 71a0ab5b3f..5ee3f931ff 100644 --- a/keyboards/hadron/ver2/config.h +++ b/keyboards/hadron/ver2/config.h @@ -14,10 +14,7 @@ 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 . */ -#ifndef VER2_CONFIG_H -#define VER2_CONFIG_H - -#include "../config.h" +#pragma once /* USB Device descriptor parameter */ #define DEVICE_VER 0x0002 @@ -32,4 +29,4 @@ along with this program. If not, see . #define UNUSED_PINS -#endif + diff --git a/keyboards/hadron/ver2/rules.mk b/keyboards/hadron/ver2/rules.mk index a3952a5d33..521493b3d3 100644 --- a/keyboards/hadron/ver2/rules.mk +++ b/keyboards/hadron/ver2/rules.mk @@ -1 +1 @@ -#AUDIO_ENABLE ?= yes # Audio output on port C6 \ No newline at end of file +#AUDIO_ENABLE = yes # Audio output on port C6 From 8847b2abbff5c6d55cf43402d394e9db751f728f Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 07:24:08 -0700 Subject: [PATCH 057/269] Optimize size of Vitamins_Included keyboard --- keyboards/vitamins_included/config.h | 10 +--------- keyboards/vitamins_included/keymaps/default/config.h | 7 +------ keyboards/vitamins_included/keymaps/default/keymap.c | 12 +++--------- keyboards/vitamins_included/keymaps/default/rules.mk | 4 +--- keyboards/vitamins_included/rules.mk | 5 ++--- 5 files changed, 8 insertions(+), 30 deletions(-) diff --git a/keyboards/vitamins_included/config.h b/keyboards/vitamins_included/config.h index 27924ae46c..abbb310563 100644 --- a/keyboards/vitamins_included/config.h +++ b/keyboards/vitamins_included/config.h @@ -16,20 +16,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" -#if !defined(NO_DEBUG) && !defined(CONSOLE_ENABLE) -#define NO_DEBUG -#endif // !NO_DEBUG -#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE) -#define NO_PRINT -#endif // !NO_PRINT #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION #define DISABLE_LEADER -#endif diff --git a/keyboards/vitamins_included/keymaps/default/config.h b/keyboards/vitamins_included/keymaps/default/config.h index 35f641a94a..aba9fa7d40 100644 --- a/keyboards/vitamins_included/keymaps/default/config.h +++ b/keyboards/vitamins_included/keymaps/default/config.h @@ -18,10 +18,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" +#pragma once /* Use I2C or Serial, not both */ @@ -40,5 +37,3 @@ along with this program. If not, see . SONG(COLEMAK_SOUND) \ } #endif - -#endif diff --git a/keyboards/vitamins_included/keymaps/default/keymap.c b/keyboards/vitamins_included/keymaps/default/keymap.c index f25e2fd32e..13b48e7640 100644 --- a/keyboards/vitamins_included/keymaps/default/keymap.c +++ b/keyboards/vitamins_included/keymaps/default/keymap.c @@ -1,6 +1,4 @@ #include QMK_KEYBOARD_H -#include "action_layer.h" -#include "eeconfig.h" extern keymap_config_t keymap_config; @@ -141,28 +139,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistent_default_layer_set(1UL<<_QWERTY); + set_single_persistent_default_layer(_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistent_default_layer_set(1UL<<_COLEMAK); + set_single_persistent_default_layer(_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistent_default_layer_set(1UL<<_DVORAK); + set_single_persistent_default_layer(_DVORAK); } return false; break; diff --git a/keyboards/vitamins_included/keymaps/default/rules.mk b/keyboards/vitamins_included/keymaps/default/rules.mk index 457a3d01d4..8b13789179 100644 --- a/keyboards/vitamins_included/keymaps/default/rules.mk +++ b/keyboards/vitamins_included/keymaps/default/rules.mk @@ -1,3 +1 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif + diff --git a/keyboards/vitamins_included/rules.mk b/keyboards/vitamins_included/rules.mk index 2291b21161..8ac39dffbc 100644 --- a/keyboards/vitamins_included/rules.mk +++ b/keyboards/vitamins_included/rules.mk @@ -56,7 +56,7 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration +COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls @@ -64,7 +64,6 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -USE_I2C = no # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend @@ -74,4 +73,4 @@ LAYOUTS = ortho_4x12 DEFAULT_FOLDER = vitamins_included/rev1 -EXTRAFLAGS += -flto \ No newline at end of file +EXTRAFLAGS += -flto From ebc143297c24bdd894340ffece2d93f15fbd5c1c Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 07:18:43 -0700 Subject: [PATCH 058/269] Optimize size of Pearl keyboard --- keyboards/pearl/config.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboards/pearl/config.h b/keyboards/pearl/config.h index 9f7a148f98..c0594bf91a 100644 --- a/keyboards/pearl/config.h +++ b/keyboards/pearl/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef PEARL_CONFIG_H -#define PEARL_CONFIG_H +#pragma once #include "config_common.h" @@ -46,4 +45,6 @@ along with this program. If not, see . /* key combination for command */ #define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) -#endif +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + From 9ade35a9fedbc6e4e77f422ed5fb514348e754ad Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 07:00:11 -0700 Subject: [PATCH 059/269] Optimize size of USB_USB BLE Converter --- keyboards/converter/usb_usb/ble/config.h | 8 ++++---- keyboards/converter/usb_usb/ble/rules.mk | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/keyboards/converter/usb_usb/ble/config.h b/keyboards/converter/usb_usb/ble/config.h index 45aa778d57..5333e17c82 100644 --- a/keyboards/converter/usb_usb/ble/config.h +++ b/keyboards/converter/usb_usb/ble/config.h @@ -1,13 +1,13 @@ -#ifndef CONFIG_BLE_H -#define CONFIG_BLE_H +#pragma once #undef PRODUCT #define PRODUCT QMK BLE Adapter #undef DESCRIPTION -#define DESCRIPTION +#define DESCRIPTION // Turn off the mode leds on the BLE module #define ADAFRUIT_BLE_ENABLE_MODE_LEDS 0 #define ADAFRUIT_BLE_ENABLE_POWER_LED 0 -#endif +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION diff --git a/keyboards/converter/usb_usb/ble/rules.mk b/keyboards/converter/usb_usb/ble/rules.mk index 16090962d9..84aa767f54 100644 --- a/keyboards/converter/usb_usb/ble/rules.mk +++ b/keyboards/converter/usb_usb/ble/rules.mk @@ -1,3 +1,23 @@ BLUETOOTH = AdafruitBLE ADAFRUIT_BLE_ENABLE = yes F_CPU = 8000000 + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) + +EXTRAFLAGS += -flto From 8454fa5e9faab3a969168447d42369828f8ade91 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 09:04:30 -0700 Subject: [PATCH 060/269] Update Document Templates to reflect newer wording and URLs (#4006) * Add pragma once info to contributing guidelines * Fix links in readme template to match doc site * Revert changes to contributing doc as somebody already changed it --- docs/documentation_templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation_templates.md b/docs/documentation_templates.md index 18829ed0f0..ba3830b64c 100644 --- a/docs/documentation_templates.md +++ b/docs/documentation_templates.md @@ -36,7 +36,7 @@ Make example for this keyboard (after setting up your build environment): make planck/rev4:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). ``` There needs to be two spaces at the end of the `Keyboard Maintainer` and `Hardware Supported` lines for it to render correctly with Markdown. From fa47f5fb15cca3bea9ab4de1001fcfecd43dac19 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 09:27:51 -0700 Subject: [PATCH 061/269] Update to the Userspace documentation (#4005) * Overhaul to Userspace Documentation * Formatting issues * Additionaly formatting fixes * Add Readme info * Additionaly Readme info * Formatting fixes --- docs/feature_userspace.md | 190 ++++++++++++++++++++++++++++---------- 1 file changed, 139 insertions(+), 51 deletions(-) diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md index 5f7c05b83b..b7fc9d8099 100644 --- a/docs/feature_userspace.md +++ b/docs/feature_userspace.md @@ -5,15 +5,12 @@ If you use more than one keyboard with a similar keymap, you might see the benef * `/users//` (added to the path automatically) * `readme.md` (optional, recommended) * `rules.mk` (included automatically) + * `config.h` (included automatically) * `.h` (optional) * `.c` (optional) - * `config.h` (optional) + * `cool_rgb_stuff.c` (optional) + * `cool_rgb_stuff.h` (optional) -`.c` will need to be added to the SRC in `rules.mk` like this: - - SRC += .c - -Additional files may be added in the same way - it's recommended you have one named ``.c/.h though. All this only happens when you build a keymap named ``, like this: @@ -23,82 +20,179 @@ For example, make planck:jack -Will include the `/users/jack/` folder in the path, along with `/users/jack/rules.mk`. +Will include the `/users/jack/` folder in the path, along with `/users/jack/rules.mk`. + +!> This `name` can be [overridden](#override-default-userspace), if needed. + +## `Rules.mk` + +The `rules.mk` is one of the two files that gets processed automatically. This is how you add additional source files (such as `.c`) will be added when compiling. + +It's highly recommended that you use `.c` as the default source file to be added. And to add it, you need to add it the SRC in `rules.mk` like this: + + SRC += .c + +Additional files may be added in the same way - it's recommended you have one named ``.c/.h to start off with, though. + +The `/users//rules.mk` file will be included in the build _after_ the `rules.mk` from your keymap. This allows you to have features in your userspace `rules.mk` that depend on individual QMK features that may or may not be available on a specific keyboard. + +For example, if you have RGB control features shared between all your keyboards that support RGB lighting, you can add support for that if the RGBLIGHT feature is enabled: +```make +ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) + # Include my fancy rgb functions source here + SRC += cool_rgb_stuff.c +endif +``` + +Alternatively, you can `define RGB_ENABLE` in your keymap's `rules.mk` and then check for the variable in your userspace's `rules.mk` like this: +```make +ifdef RGB_ENABLE + # Include my fancy rgb functions source here + SRC += cool_rgb_stuff.c +endif +``` + +### Override default userspace + +By default the userspace used will be the same as the keymap name. In some situations this isn't desirable. For instance, if you use the [layout](feature_layouts.md) feature you can't use the same name for different keymaps (e.g. ANSI and ISO). You can name your layouts `mylayout-ansi` and `mylayout-iso` and add the following line to your layout's `rules.mk`: + +``` +USER_NAME := mylayout +``` + +This is also useful if you have multiple different keyboards with different features physically present on the board (such as one with RGB Lights, and one with Audio, or different number of LEDs, or connected to a different PIN on the controller). + +## Configuration Options (`config.h`) Additionally, `config.h` here will be processed like the same file in your keymap folder. This is handled separately from the `.h` file. The reason for this, is that `.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `` file in any `config.h` files will result in compile issues. -So you should use the `config.h` for QMK settings, and the `.h` file for user or keymap specific settings. +!>You should use the `config.h` for [configuration options](config_options.md), and the `.h` file for user or keymap specific settings (such as the enum for layer or keycodes) -`/users//rules.mk` will be included in the build _after_ the `rules.mk` from your keymap. This allows you to have features in your userspace `rules.mk` that depend on individual QMK features that may or may not be available on a specific keyboard. For example, if you have RGB control features shared between all your keyboards that support RGB lighting, you can `define RGB_ENABLE` in your keymap `rules.mk` and then check for the variable in your userspace `rules.mk` like this: -```make -ifdef RGB_ENABLE - # Include my fancy rgb functions source here -endif -``` -Because of this, any time you turn on QMK features in your `users//rules.mk`, you should conditionally enable them only if the flag isn't already defined, like this: -```make -ifndef TAP_DANCE_ENABLE - TAP_DANCE_ENABLE = yes -endif -``` -This will ensure that you can explicitly turn off features for an individual keymap. -## Readme +## Readme (`readme.md`) Please include authorship (your name, github username, email), and optionally [a license that's GPL compatible](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses). -## `Config.h` +You can use this as a template: +``` +Copyright @ -If you do add a `config,h` file, you want to make sure that it only gets processed once. So you may want to start off with something like this: +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. -```c -#ifndef USERSPACE_CONFIG_H -#define USERSPACE_CONFIG_H +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. -// Put normal config.h settings here: - -#endif // !USERSPACE_CONFIG_H +You should have received a copy of the GNU General Public License +along with this program. If not, see . ``` -You can use any option hre that you could use in your keymap's `config.h` file. You can find a list of vales [here](config_options.md). +You'd want to replace the year, name, email and github username with your info. -## Example +Additionally, this is a good place to document your code, if you wish to share it with others. -For a brief example, checkout `/users/_example/` , or for a more detailed examples check out [`template.h`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.h) and [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) in `/users/drashna/` . +# Examples -### Consolidated Macros +For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna). +For a more complicaed example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace. -If you wanted to consolidate macros and other functions into your userspace for all of your keymaps, you can do that. The issue is that you then cannot call any function defined in your userspace, or it gets complicated. To better handle this, you can call the functions here and create new functions to use in individual keymaps. + +## Customized Functions + +QMK has a bunch of [functions](custom_quantum_functions.md) that have [`_quantum`, `_kb`, and `_user` versions](custom_quantum_functions.md#a-word-on-core-vs-keyboards-vs-keymap) that you can use. You will pretty much always want to use the user version of these functions. But the problem is that if you use them in your userspace, then you don't have a version that you can use in your keymap. + +However, you can actually add support for keymap version, so that you can use it in both your userspace and your keymap! + + +For instance, lets looks at the `layer_state_set_user` function. Lets enable the [Tri Layer State](ref_functions.md#olkb-tri-layers) functionalitly to all of our boards, and then still have your `keymap.c` still able to use this functionality. + +In your `` file, you'd want to add this: +```c +__attribute__ ((weak)) +uint32_t layer_state_set_keymap (uint32_t state) { + return state; +} + +uint32_t layer_state_set_user (uint32_t state) { + state = update_tri_layer_state(state, 2, 3, 5); + return layer_state_set_keymap (state); +} +``` +The `__attribute__ ((weak))` part tells the compiler that this is a placce holder function that can then be replaced by a version in your `keymap.c`. That way, you don't need to add it to your `keymap.c`, but if you do, you won't get any conflicts because the function is the same name. + +The `_keymap` part here doesn't matter, it just needs to be something other than `_quantum`, `_kb`, or `_user`, since those are already in use. So you could use `layer_state_set_mine`, `layer_state_set_fn`, or anything else. + +You can see a list of this and other common functions in [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) in [`users/drashna`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna). + +## Custom Features + +Since the Userspace feature can support a staggering number of boards, you may have boards that you want to enable certain functionality for, but not for others. And you can actually create "features" that you can enable or disable in your own userspace. + +For instance, if you wanted to have a bunch of macros available, but only on certain boards (to save space), you could "hide" them being a `#ifdef MACROS_ENABLED`, and then enable it per board. To do this, add this to your rules.mk +```make +ifeq ($(strip $(MACROS_ENABLED)), yes) + OPT_DEFS += -DMACROS_ENABLED +endif +``` +The `OPT_DEFS` setting causee `MACROS_ENABLED` to be defined for your keyboards (note the `-D` in front of the name), and you could use `#ifdef MACROS_ENABLED` to check the status in your c/h files, and handle that code based on that. + +Then you add `MACROS_ENABLED = yes` to the `rules.mk` for you keymap to enable this feature and the code in your userspace. + +And in your `process_record_user` function, you'd do something like this: +```c +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { +#ifdef MACROS_ENABLED + case MACRO1: + if (!record->event.pressed) { + SEND_STRING("This is macro 1!"); + } + break; + case MACRO2: + if (!record->event.pressed) { + SEND_STRING("This is macro 2!"); + } + break; +#endif + } + return true; +} +``` + + +## Consolidated Macros + +If you wanted to consolidate macros and other functions into your userspace for all of your keymaps, you can do that. This builds upon the [Customized Functions](#customized-functions) example above. This lets you maintain a bunch of macros that are shared between the different keyboards, and allow for keyboard specific macros, too. First, you'd want to go through all of your `keymap.c` files and replace `process_record_user` with `process_record_keymap` instead. This way, you can still use keyboard specific codes on those boards, and use your custom "global" keycodes as well. You'll also want to replace `SAFE_RANGE` with `NEW_SAFE_RANGE` so that you wont have any overlapping keycodes Then add `#include ` to all of your keymap.c files. This allows you to use these new keycodes without having to redefine them in each keymap. Once you've done that, you'll want to set the keycode definitions that you need to the `.h` file. For instance: -``` -#ifndef USERSPACE -#define USERSPACE +```c +#pragma once #include "quantum.h" +#include "action.h" +#include "version.h" // Define all of enum custom_keycodes { KC_MAKE = SAFE_RANGE, NEW_SAFE_RANGE //use "NEW_SAFE_RANGE" for keymap specific codes }; - -#endif ``` Now you want to create the `.c` file, and add this content to it: -``` +```c #include ".h" -#include "quantum.h" -#include "action.h" -#include "version.h" __attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { @@ -126,14 +220,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } ``` -This will add a new `KC_MAKE` keycode that can be used in any of your keymaps. And this keycode will output `make :`, making frequent compiling easier. And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time. +This will add a new `KC_MAKE` keycode that can be used in any of your keymaps. And this keycode will output `make :`, making frequent compiling easier. And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time. Additionally, this should flash the newly compiled firmware automatically, using the correct utility, based on the bootloader settings (or default to just generating the HEX file). However, it should be noted that this may not work on all systems. AVRDUDE doesn't work on WSL, namely (and will dump the HEX in the ".build" folder instead). -## Override default userspace -By default the userspace used will be the same as the keymap name. In some situations this isn't desirable. For instance, if you use the [layout](feature_layouts.md) feature you can't use the same name for different keymaps (e.g. ANSI and ISO). You can name your layouts `mylayout-ansi` and `mylayout-iso` and add the following line to your layout's `rules.mk`: - -``` -USER_NAME := mylayout -``` From 7fe03d085c2ecaa324779093eceb1a12313ca25d Mon Sep 17 00:00:00 2001 From: yiancar Date: Fri, 28 Sep 2018 17:33:11 +0100 Subject: [PATCH 062/269] Update quantum matrix to support both AVR and Chibios ARM (#3968) * Update quantum matrix to support both AVR and Chibios ARM - Addition of STM32 pin definitions - Created abstruction layer defines to control GPIO (This is a bit pointless for Chibios as we are creating a PAL ontop of a PAL but it is necessary for uniformity with AVR) - Modified matrix.c to use the above functions * minor ifdef fix * Rename of functions and docs - Added documentation. - Renamed functions according to Jack's spec. * Massdrop fix * Update matrix.c * Update quantum.h * Update quantum.h * Update quantum.h * Update internals_gpio_control.md --- docs/internals_gpio_control.md | 23 ++++ quantum/config_common.h | 199 ++++++++++++++++++++++++--------- quantum/matrix.c | 49 +++----- quantum/quantum.h | 69 ++++++++++-- 4 files changed, 244 insertions(+), 96 deletions(-) create mode 100644 docs/internals_gpio_control.md diff --git a/docs/internals_gpio_control.md b/docs/internals_gpio_control.md new file mode 100644 index 0000000000..21643d30c9 --- /dev/null +++ b/docs/internals_gpio_control.md @@ -0,0 +1,23 @@ +# GPIO Control + +QMK has a GPIO control abstraction layer which is micro-controller agnostic. This is done to allow easy access to pin control across different platforms. + +## Functions + +The following functions can provide basic control of GPIOs and are found in `quantum/quantum.h`. + +|Function |Description | +|----------------------|------------------------------------------------------------------| +|`setPinInput(pin)` |Set pin as input with high impedance (High-Z) | +|`setPinInputHigh(pin)`|Set pin as input with build in pull-up | +|`setPinInputLow(pin)` |Set pin as input with build in pull-down (Supported only on STM32)| +|`setPinOutput(pin)` |Set pin as output | +|`writePinHige(pin)` |Set pin level as high, assuming it is an output | +|`writePinLow(pin)` |Set pin level as low, assuming it is an output | +|`writePin(pin, level)`|Set pin level, assuming it is an output | +|`readPin(pin)` |Returns the level of the pin | + +## Advance settings + +Each micro-controller can have multiple advance settings regarding its GPIO. This abstraction layer does not limit the use of architecture specific functions. Advance users should consult the datasheet of there desired device and include any needed libraries. For AVR the standard avr/io.h library is used and for STM32 the Chibios [PAL library](http://chibios.sourceforge.net/docs3/hal/group___p_a_l.html) is used. + diff --git a/quantum/config_common.h b/quantum/config_common.h index f6f51b367d..288617255f 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -23,57 +23,154 @@ #define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */ #ifdef __AVR__ - /* I/O pins */ - #ifndef F0 - #define B0 0x30 - #define B1 0x31 - #define B2 0x32 - #define B3 0x33 - #define B4 0x34 - #define B5 0x35 - #define B6 0x36 - #define B7 0x37 - #define C0 0x60 - #define C1 0x61 - #define C2 0x62 - #define C3 0x63 - #define C4 0x64 - #define C5 0x65 - #define C6 0x66 - #define C7 0x67 - #define D0 0x90 - #define D1 0x91 - #define D2 0x92 - #define D3 0x93 - #define D4 0x94 - #define D5 0x95 - #define D6 0x96 - #define D7 0x97 - #define E0 0xC0 - #define E1 0xC1 - #define E2 0xC2 - #define E3 0xC3 - #define E4 0xC4 - #define E5 0xC5 - #define E6 0xC6 - #define E7 0xC7 - #define F0 0xF0 - #define F1 0xF1 - #define F2 0xF2 - #define F3 0xF3 - #define F4 0xF4 - #define F5 0xF5 - #define F6 0xF6 - #define F7 0xF7 - #define A0 0x00 - #define A1 0x01 - #define A2 0x02 - #define A3 0x03 - #define A4 0x04 - #define A5 0x05 - #define A6 0x06 - #define A7 0x07 - #endif + /* I/O pins */ + #ifndef F0 + #define B0 0x30 + #define B1 0x31 + #define B2 0x32 + #define B3 0x33 + #define B4 0x34 + #define B5 0x35 + #define B6 0x36 + #define B7 0x37 + #define C0 0x60 + #define C1 0x61 + #define C2 0x62 + #define C3 0x63 + #define C4 0x64 + #define C5 0x65 + #define C6 0x66 + #define C7 0x67 + #define D0 0x90 + #define D1 0x91 + #define D2 0x92 + #define D3 0x93 + #define D4 0x94 + #define D5 0x95 + #define D6 0x96 + #define D7 0x97 + #define E0 0xC0 + #define E1 0xC1 + #define E2 0xC2 + #define E3 0xC3 + #define E4 0xC4 + #define E5 0xC5 + #define E6 0xC6 + #define E7 0xC7 + #define F0 0xF0 + #define F1 0xF1 + #define F2 0xF2 + #define F3 0xF3 + #define F4 0xF4 + #define F5 0xF5 + #define F6 0xF6 + #define F7 0xF7 + #define A0 0x00 + #define A1 0x01 + #define A2 0x02 + #define A3 0x03 + #define A4 0x04 + #define A5 0x05 + #define A6 0x06 + #define A7 0x07 + #endif +#elif defined(PROTOCOL_CHIBIOS) + #define A0 PAL_LINE(GPIOA, 0) + #define A1 PAL_LINE(GPIOA, 1) + #define A2 PAL_LINE(GPIOA, 2) + #define A3 PAL_LINE(GPIOA, 3) + #define A4 PAL_LINE(GPIOA, 4) + #define A5 PAL_LINE(GPIOA, 5) + #define A6 PAL_LINE(GPIOA, 6) + #define A7 PAL_LINE(GPIOA, 7) + #define A8 PAL_LINE(GPIOA, 8) + #define A9 PAL_LINE(GPIOA, 9) + #define A10 PAL_LINE(GPIOA, 10) + #define A11 PAL_LINE(GPIOA, 11) + #define A12 PAL_LINE(GPIOA, 12) + #define A13 PAL_LINE(GPIOA, 13) + #define A14 PAL_LINE(GPIOA, 14) + #define A15 PAL_LINE(GPIOA, 15) + #define B0 PAL_LINE(GPIOB, 0) + #define B1 PAL_LINE(GPIOB, 1) + #define B2 PAL_LINE(GPIOB, 2) + #define B3 PAL_LINE(GPIOB, 3) + #define B4 PAL_LINE(GPIOB, 4) + #define B5 PAL_LINE(GPIOB, 5) + #define B6 PAL_LINE(GPIOB, 6) + #define B7 PAL_LINE(GPIOB, 7) + #define B8 PAL_LINE(GPIOB, 8) + #define B9 PAL_LINE(GPIOB, 9) + #define B10 PAL_LINE(GPIOB, 10) + #define B11 PAL_LINE(GPIOB, 11) + #define B12 PAL_LINE(GPIOB, 12) + #define B13 PAL_LINE(GPIOB, 13) + #define B14 PAL_LINE(GPIOB, 14) + #define B15 PAL_LINE(GPIOB, 15) + #define C0 PAL_LINE(GPIOC, 0) + #define C1 PAL_LINE(GPIOC, 1) + #define C2 PAL_LINE(GPIOC, 2) + #define C3 PAL_LINE(GPIOC, 3) + #define C4 PAL_LINE(GPIOC, 4) + #define C5 PAL_LINE(GPIOC, 5) + #define C6 PAL_LINE(GPIOC, 6) + #define C7 PAL_LINE(GPIOC, 7) + #define C8 PAL_LINE(GPIOC, 8) + #define C9 PAL_LINE(GPIOC, 9) + #define C10 PAL_LINE(GPIOC, 10) + #define C11 PAL_LINE(GPIOC, 11) + #define C12 PAL_LINE(GPIOC, 12) + #define C13 PAL_LINE(GPIOC, 13) + #define C14 PAL_LINE(GPIOC, 14) + #define C15 PAL_LINE(GPIOC, 15) + #define D0 PAL_LINE(GPIOD, 0) + #define D1 PAL_LINE(GPIOD, 1) + #define D2 PAL_LINE(GPIOD, 2) + #define D3 PAL_LINE(GPIOD, 3) + #define D4 PAL_LINE(GPIOD, 4) + #define D5 PAL_LINE(GPIOD, 5) + #define D6 PAL_LINE(GPIOD, 6) + #define D7 PAL_LINE(GPIOD, 7) + #define D8 PAL_LINE(GPIOD, 8) + #define D9 PAL_LINE(GPIOD, 9) + #define D10 PAL_LINE(GPIOD, 10) + #define D11 PAL_LINE(GPIOD, 11) + #define D12 PAL_LINE(GPIOD, 12) + #define D13 PAL_LINE(GPIOD, 13) + #define D14 PAL_LINE(GPIOD, 14) + #define D15 PAL_LINE(GPIOD, 15) + #define E0 PAL_LINE(GPIOE, 0) + #define E1 PAL_LINE(GPIOE, 1) + #define E2 PAL_LINE(GPIOE, 2) + #define E3 PAL_LINE(GPIOE, 3) + #define E4 PAL_LINE(GPIOE, 4) + #define E5 PAL_LINE(GPIOE, 5) + #define E6 PAL_LINE(GPIOE, 6) + #define E7 PAL_LINE(GPIOE, 7) + #define E8 PAL_LINE(GPIOE, 8) + #define E9 PAL_LINE(GPIOE, 9) + #define E10 PAL_LINE(GPIOE, 10) + #define E11 PAL_LINE(GPIOE, 11) + #define E12 PAL_LINE(GPIOE, 12) + #define E13 PAL_LINE(GPIOE, 13) + #define E14 PAL_LINE(GPIOE, 14) + #define E15 PAL_LINE(GPIOE, 15) + #define F0 PAL_LINE(GPIOF, 0) + #define F1 PAL_LINE(GPIOF, 1) + #define F2 PAL_LINE(GPIOF, 2) + #define F3 PAL_LINE(GPIOF, 3) + #define F4 PAL_LINE(GPIOF, 4) + #define F5 PAL_LINE(GPIOF, 5) + #define F6 PAL_LINE(GPIOF, 6) + #define F7 PAL_LINE(GPIOF, 7) + #define F8 PAL_LINE(GPIOF, 8) + #define F9 PAL_LINE(GPIOF, 9) + #define F10 PAL_LINE(GPIOF, 10) + #define F11 PAL_LINE(GPIOF, 11) + #define F12 PAL_LINE(GPIOF, 12) + #define F13 PAL_LINE(GPIOF, 13) + #define F14 PAL_LINE(GPIOF, 14) + #define F15 PAL_LINE(GPIOF, 15) #endif /* USART configuration */ diff --git a/quantum/matrix.c b/quantum/matrix.c index 3600d4e7b5..9b5ce33d23 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -1,5 +1,5 @@ /* -Copyright 2012-2017 Jun Wako, Jack Humbert +Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar 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 @@ -16,15 +16,13 @@ along with this program. If not, see . */ #include #include -#if defined(__AVR__) -#include -#endif #include "wait.h" #include "print.h" #include "debug.h" #include "util.h" #include "matrix.h" #include "timer.h" +#include "quantum.h" /* Set 0 if debouncing isn't needed */ @@ -60,8 +58,8 @@ along with this program. If not, see . #endif #if (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW) -static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; -static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; +static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; #endif /* matrix state(1:on, 0:off) */ @@ -271,9 +269,7 @@ uint8_t matrix_key_count(void) static void init_cols(void) { for(uint8_t x = 0; x < MATRIX_COLS; x++) { - uint8_t pin = col_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + setPinInputHigh(col_pins[x]); } } @@ -293,8 +289,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { // Select the col pin to read (active low) - uint8_t pin = col_pins[col_index]; - uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); + uint8_t pin_state = readPin(col_pins[col_index]); // Populate the matrix row with the state of the col pin current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); @@ -308,24 +303,19 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) static void select_row(uint8_t row) { - uint8_t pin = row_pins[row]; - _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + setPinOutput(row_pins[row]); + writePinLow(row_pins[row]); } static void unselect_row(uint8_t row) { - uint8_t pin = row_pins[row]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + setPinInputHigh(row_pins[row]); } static void unselect_rows(void) { for(uint8_t x = 0; x < MATRIX_ROWS; x++) { - uint8_t pin = row_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + setPinInput(row_pins[x]); } } @@ -334,9 +324,7 @@ static void unselect_rows(void) static void init_rows(void) { for(uint8_t x = 0; x < MATRIX_ROWS; x++) { - uint8_t pin = row_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + setPinInputHigh(row_pins[x]); } } @@ -356,7 +344,7 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) matrix_row_t last_row_value = current_matrix[row_index]; // Check row pin state - if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0) + if (readPin(row_pins[row_index]) == 0) { // Pin LO, set col bit current_matrix[row_index] |= (ROW_SHIFTER << current_col); @@ -382,24 +370,19 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) static void select_col(uint8_t col) { - uint8_t pin = col_pins[col]; - _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + setPinOutput(col_pins[col]); + writePinLow(col_pins[col]); } static void unselect_col(uint8_t col) { - uint8_t pin = col_pins[col]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + setPinInputHigh(col_pins[col]); } static void unselect_cols(void) { for(uint8_t x = 0; x < MATRIX_COLS; x++) { - uint8_t pin = col_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + setPinInputHigh(col_pins[x]); } } diff --git a/quantum/quantum.h b/quantum/quantum.h index 7cf16d81e6..6833332117 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -1,4 +1,4 @@ -/* Copyright 2016-2017 Erez Zukerman, Jack Humbert +/* Copyright 2016-2018 Erez Zukerman, Jack Humbert, Yiancar * * 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 @@ -17,9 +17,12 @@ #define QUANTUM_H #if defined(__AVR__) -#include -#include -#include + #include + #include + #include +#endif +#if defined(PROTOCOL_CHIBIOS) + #include "hal.h" #endif #include "wait.h" #include "matrix.h" @@ -33,11 +36,11 @@ #ifdef RGBLIGHT_ENABLE #include "rgblight.h" #else - #ifdef RGB_MATRIX_ENABLE - /* dummy define RGBLIGHT_MODE_xxxx */ - #define RGBLIGHT_H_DUMMY_DEFINE - #include "rgblight.h" - #endif + #ifdef RGB_MATRIX_ENABLE + /* dummy define RGBLIGHT_MODE_xxxx */ + #define RGBLIGHT_H_DUMMY_DEFINE + #include "rgblight.h" + #endif #endif #ifdef SPLIT_KEYBOARD @@ -76,9 +79,9 @@ extern uint32_t default_layer_state; #ifdef AUDIO_ENABLE #include "audio.h" #include "process_audio.h" - #ifdef AUDIO_CLICKY - #include "process_clicky.h" - #endif // AUDIO_CLICKY + #ifdef AUDIO_CLICKY + #include "process_clicky.h" + #endif // AUDIO_CLICKY #endif #ifdef STENO_ENABLE @@ -133,6 +136,48 @@ extern uint32_t default_layer_state; #include "hd44780.h" #endif +//Function substitutions to ease GPIO manipulation +#ifdef __AVR__ + #define pin_t uint8_t + #define setPinInput(pin) _SFR_IO8((pin >> 4) + 1) &= ~ _BV(pin & 0xF) + #define setPinInputHigh(pin) ({\ + _SFR_IO8((pin >> 4) + 1) &= ~ _BV(pin & 0xF);\ + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);\ + }) + #define setPinInputLow(pin) _Static_assert(0, "AVR Processors cannot impliment an input as pull low") + #define setPinOutput(pin) _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF) + + #define writePinHigh(pin) _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF) + #define writePinLow(pin) _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF) + static inline void writePin(pin_t pin, uint8_t level){ + if (level){ + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); + } else { + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); + } + } + + #define readPin(pin) (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) +#elif defined(PROTOCOL_CHIBIOS) + #define pin_t ioline_t + #define setPinInput(pin) palSetLineMode(pin, PAL_MODE_INPUT) + #define setPinInputHigh(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLUP) + #define setPinInputLow(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN) + #define setPinOutput(pin) palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL) + + #define writePinHigh(pin) palSetLine(pin) + #define writePinLow(pin) palClearLine(pin) + static inline void writePin(pin_t pin, uint8_t level){ + if (level){ + palSetLine(pin); + } else { + palClearLine(pin); + } + } + + #define readPin(pin) palReadLine(pin) +#endif + #define STRINGIZE(z) #z #define ADD_SLASH_X(y) STRINGIZE(\x ## y) #define SYMBOL_STR(x) ADD_SLASH_X(x) From daa11dc414d505076ebdf147a4e2c800b8a06190 Mon Sep 17 00:00:00 2001 From: Wilba6582 Date: Sat, 29 Sep 2018 02:01:00 +1000 Subject: [PATCH 063/269] Changed VID/PID, added commands, refactoring --- keyboards/rama/m60_a/config.h | 4 +- keyboards/zeal60/zeal60.c | 146 ++++++++++++++++------------------ keyboards/zeal60/zeal60_api.h | 9 ++- 3 files changed, 80 insertions(+), 79 deletions(-) diff --git a/keyboards/rama/m60_a/config.h b/keyboards/rama/m60_a/config.h index 45e7d88963..03794965fc 100644 --- a/keyboards/rama/m60_a/config.h +++ b/keyboards/rama/m60_a/config.h @@ -18,8 +18,8 @@ #include "config_common.h" // USB Device descriptor parameter -#define VENDOR_ID 0xFEED // This is same as Zeal60 for now -#define PRODUCT_ID 0x6060 // This is same as Zeal60 for now +#define VENDOR_ID 0x5241 // "RW" +#define PRODUCT_ID 0x060A // 60-A #define DEVICE_VER 0x0001 #define MANUFACTURER RAMA.WORKS #define PRODUCT RAMA M60-A diff --git a/keyboards/zeal60/zeal60.c b/keyboards/zeal60/zeal60.c index 092235ca61..be54f75f3d 100644 --- a/keyboards/zeal60/zeal60.c +++ b/keyboards/zeal60/zeal60.c @@ -38,6 +38,14 @@ void eeprom_set_valid(bool valid) eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF); } +void eeprom_reset(void) +{ + // Set the Zeal60 specific EEPROM state as invalid. + eeprom_set_valid(false); + // Set the TMK/QMK EEPROM state as invalid. + eeconfig_disable(); +} + #ifdef RAW_ENABLE void raw_hid_receive( uint8_t *data, uint8_t length ) @@ -54,7 +62,7 @@ void raw_hid_receive( uint8_t *data, uint8_t length ) } case id_get_keyboard_value: { - if ( command_data[0] == 0x01 ) + if ( command_data[0] == id_uptime ) { uint32_t value = timer_read32(); command_data[1] = (value >> 24 ) & 0xFF; @@ -104,6 +112,21 @@ void raw_hid_receive( uint8_t *data, uint8_t length ) break; } #endif // RGB_BACKLIGHT_ENABLED + case id_eeprom_reset: + { + eeprom_reset(); + break; + } + case id_bootloader_jump: + { + // Need to send data back before the jump + // Informs host that the command is handled + raw_hid_send( data, length ); + // Give host time to read it + wait_ms(100); + bootloader_jump(); + break; + } default: { // Unhandled message. @@ -119,6 +142,37 @@ void raw_hid_receive( uint8_t *data, uint8_t length ) #endif +void main_init(void) +{ + // If the EEPROM has the magic, the data is good. + // OK to load from EEPROM. + if (eeprom_is_valid()) { +#if RGB_BACKLIGHT_ENABLED + backlight_config_load(); +#endif // RGB_BACKLIGHT_ENABLED + } else { +#if RGB_BACKLIGHT_ENABLED + // If the EEPROM has not been saved before, or is out of date, + // save the default values to the EEPROM. Default values + // come from construction of the zeal_backlight_config instance. + backlight_config_save(); +#endif // RGB_BACKLIGHT_ENABLED +#ifdef DYNAMIC_KEYMAP_ENABLE + // This resets the keymaps in EEPROM to what is in flash. + dynamic_keymap_reset(); +#endif + // Save the magic number last, in case saving was interrupted + eeprom_set_valid(true); + } +#if RGB_BACKLIGHT_ENABLED + // Initialize LED drivers for backlight. + backlight_init_drivers(); + + backlight_timer_init(); + backlight_timer_enable(); +#endif // RGB_BACKLIGHT_ENABLED +} + void bootmagic_lite(void) { // The lite version of TMK's bootmagic. @@ -131,19 +185,10 @@ void bootmagic_lite(void) wait_ms(DEBOUNCING_DELAY); matrix_scan(); - // If the Esc and space bar are held down on power up, + // If the Esc (matrix 0,0) is held down on power up, // reset the EEPROM valid state and jump to bootloader. - // Assumes Esc is at [0,0] and spacebar is at [4,7]. - // This isn't very generalized, but we need something that doesn't - // rely on user's keymaps in firmware or EEPROM. - if ( ( matrix_get_row(0) & (1<<0) ) && - ( matrix_get_row(4) & (1<<7) ) ) - { - // Set the Zeal60 specific EEPROM state as invalid. - eeprom_set_valid(false); - // Set the TMK/QMK EEPROM state as invalid. - eeconfig_disable(); - // Jump to bootloader. + if ( matrix_get_row(0) & (1<<0) ) { + eeprom_reset(); bootloader_jump(); } } @@ -151,42 +196,7 @@ void bootmagic_lite(void) void matrix_init_kb(void) { bootmagic_lite(); - - // If the EEPROM has the magic, the data is good. - // OK to load from EEPROM. - if (eeprom_is_valid()) - { -#if RGB_BACKLIGHT_ENABLED - backlight_config_load(); -#endif // RGB_BACKLIGHT_ENABLED - // TODO: do something to "turn on" keymaps in EEPROM? - } - else - { -#if RGB_BACKLIGHT_ENABLED - // If the EEPROM has not been saved before, or is out of date, - // save the default values to the EEPROM. Default values - // come from construction of the zeal_backlight_config instance. - backlight_config_save(); -#endif // RGB_BACKLIGHT_ENABLED - -#ifdef DYNAMIC_KEYMAP_ENABLE - // This resets the keymaps in EEPROM to what is in flash. - dynamic_keymap_reset(); -#endif - - // Save the magic number last, in case saving was interrupted - eeprom_set_valid(true); - } - -#if RGB_BACKLIGHT_ENABLED - // Initialize LED drivers for backlight. - backlight_init_drivers(); - - backlight_timer_init(); - backlight_timer_enable(); -#endif // RGB_BACKLIGHT_ENABLED - + main_init(); matrix_init_user(); } @@ -205,29 +215,22 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) process_record_backlight(keycode, record); #endif // BACKLIGHT_ENABLED - switch(keycode) - { + switch(keycode) { case FN_MO13: - if (record->event.pressed) - { + if (record->event.pressed) { layer_on(1); update_tri_layer(1, 2, 3); - } - else - { + } else { layer_off(1); update_tri_layer(1, 2, 3); } return false; break; case FN_MO23: - if (record->event.pressed) - { + if (record->event.pressed) { layer_on(2); update_tri_layer(1, 2, 3); - } - else - { + } else { layer_off(2); update_tri_layer(1, 2, 3); } @@ -247,8 +250,7 @@ uint16_t keymap_function_id_to_action( uint16_t function_id ) if ( function_id >= 0x0F00 && function_id <= 0x0FFF ) { uint8_t id = function_id & 0xFF; - switch ( id ) - { + switch ( id ) { case TRIPLE_TAP_1_3: case TRIPLE_TAP_2_3: { @@ -293,24 +295,16 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { case TRIPLE_TAP_1_3: case TRIPLE_TAP_2_3: - if (record->event.pressed) - { + if (record->event.pressed) { layer_on( id == TRIPLE_TAP_1_3 ? 1 : 2 ); - - if (record->tap.count && !record->tap.interrupted) - { - if (record->tap.count >= 3) - { + if (record->tap.count && !record->tap.interrupted) { + if (record->tap.count >= 3) { layer_invert(3); } - } - else - { + } else { record->tap.count = 0; } - } - else - { + } else { layer_off( id == TRIPLE_TAP_1_3 ? 1 : 2 ); } break; diff --git a/keyboards/zeal60/zeal60_api.h b/keyboards/zeal60/zeal60_api.h index eaac3ad7ce..a65bf2f509 100644 --- a/keyboards/zeal60/zeal60_api.h +++ b/keyboards/zeal60/zeal60_api.h @@ -28,6 +28,13 @@ enum zeal60_command_id id_backlight_config_set_value, id_backlight_config_get_value, id_backlight_config_save, - + id_eeprom_reset, + id_bootloader_jump, id_unhandled = 0xFF, }; + +enum zeal60_keyboard_value_id +{ + id_uptime = 0x01 +}; + From f1b2d46eafbec2b834dc4bcb5ba2dac9f913eed8 Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Fri, 28 Sep 2018 11:34:40 -0700 Subject: [PATCH 064/269] Spell-check update for Userspace documentation Because leaving review comments on a PR that's already been merged doesn't make any sense. --- docs/feature_userspace.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md index b7fc9d8099..5a9fc287b3 100644 --- a/docs/feature_userspace.md +++ b/docs/feature_userspace.md @@ -100,7 +100,7 @@ Additionally, this is a good place to document your code, if you wish to share i # Examples For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna). -For a more complicaed example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace. +For a more complicated example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace. ## Customized Functions @@ -124,7 +124,7 @@ uint32_t layer_state_set_user (uint32_t state) { return layer_state_set_keymap (state); } ``` -The `__attribute__ ((weak))` part tells the compiler that this is a placce holder function that can then be replaced by a version in your `keymap.c`. That way, you don't need to add it to your `keymap.c`, but if you do, you won't get any conflicts because the function is the same name. +The `__attribute__ ((weak))` part tells the compiler that this is a placeholder function that can then be replaced by a version in your `keymap.c`. That way, you don't need to add it to your `keymap.c`, but if you do, you won't get any conflicts because the function is the same name. The `_keymap` part here doesn't matter, it just needs to be something other than `_quantum`, `_kb`, or `_user`, since those are already in use. So you could use `layer_state_set_mine`, `layer_state_set_fn`, or anything else. @@ -140,7 +140,7 @@ ifeq ($(strip $(MACROS_ENABLED)), yes) OPT_DEFS += -DMACROS_ENABLED endif ``` -The `OPT_DEFS` setting causee `MACROS_ENABLED` to be defined for your keyboards (note the `-D` in front of the name), and you could use `#ifdef MACROS_ENABLED` to check the status in your c/h files, and handle that code based on that. +The `OPT_DEFS` setting causes `MACROS_ENABLED` to be defined for your keyboards (note the `-D` in front of the name), and you could use `#ifdef MACROS_ENABLED` to check the status in your c/h files, and handle that code based on that. Then you add `MACROS_ENABLED = yes` to the `rules.mk` for you keymap to enable this feature and the code in your userspace. @@ -220,7 +220,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } ``` -This will add a new `KC_MAKE` keycode that can be used in any of your keymaps. And this keycode will output `make :`, making frequent compiling easier. And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time. +This will add a new `KC_MAKE` keycode that can be used in any of your keymaps. And this keycode will output `make :`, making frequent compiling easier. And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time. Additionally, this should flash the newly compiled firmware automatically, using the correct utility, based on the bootloader settings (or default to just generating the HEX file). However, it should be noted that this may not work on all systems. AVRDUDE doesn't work on WSL, namely (and will dump the HEX in the ".build" folder instead). From cb468e030712731cffb288cb6d8433cf3b953491 Mon Sep 17 00:00:00 2001 From: Ethan Madden Date: Fri, 28 Sep 2018 12:44:15 -0700 Subject: [PATCH 065/269] Keymap: Clicky frequency modulation (#4012) Also worked around my busted dipswitch 2... --- .../planck/keymaps/jetpacktuxedo/keymap.c | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/keyboards/planck/keymaps/jetpacktuxedo/keymap.c b/keyboards/planck/keymaps/jetpacktuxedo/keymap.c index 1324056862..b344bd0767 100644 --- a/keyboards/planck/keymaps/jetpacktuxedo/keymap.c +++ b/keyboards/planck/keymaps/jetpacktuxedo/keymap.c @@ -188,15 +188,24 @@ uint16_t muse_counter = 0; uint8_t muse_offset = 70; uint16_t muse_tempo = 20; +extern float clicky_rand; + void encoder_update(bool clockwise) { if (is_clicky_on()) { - if (clockwise) { - clicky_freq_up(); + if (IS_LAYER_ON(_RAISE)) { + if (clockwise) { + clicky_rand += 0.5f; + } else { + clicky_rand -= 0.5f; + } } else { - clicky_freq_down(); + if (clockwise) { + clicky_freq_up(); + } else { + clicky_freq_down(); + } } - } else - if (muse_mode) { + } else if (muse_mode) { if (IS_LAYER_ON(_RAISE)) { if (clockwise) { muse_offset++; @@ -255,7 +264,8 @@ void dip_update(uint8_t index, bool active) { stop_all_notes(); #endif } - case 2: + break; + case 3: if (active) { clicky_on(); } else { From e4eeb1eb230a4d92f1c88197b71a07b342966e73 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 13:32:54 -0700 Subject: [PATCH 066/269] Fix RGB Matrix feature processing in common_features.mk Specifically, an "L" got appended to the controller names for te "valid types", but did not get appended to the blocks that include the specific drives. So, this breaks anything that isn't "Yes". --- common_features.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common_features.mk b/common_features.mk index 6c835abde6..65ff6b5b38 100644 --- a/common_features.mk +++ b/common_features.mk @@ -115,7 +115,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) endif RGB_MATRIX_ENABLE ?= no -VALID_MATRIX_TYPES := yes IS31FL3731L IS31FL3733L custom +VALID_MATRIX_TYPES := yes IS31FL3731 IS31FL3733 custom ifneq ($(strip $(RGB_MATRIX_ENABLE)), no) ifeq ($(filter $(RGB_MATRIX_ENABLE),$(VALID_MATRIX_TYPES)),) $(error RGB_MATRIX_ENABLE="$(RGB_MATRIX_ENABLE)" is not a valid matrix type) From e2dee054d0649cb7b5b051a04a9bd82d14a0fdcd Mon Sep 17 00:00:00 2001 From: Takuya Urakawa Date: Sat, 29 Sep 2018 10:30:44 +0900 Subject: [PATCH 067/269] add st-link_cli flashing (#3899) * add st-link_cli support * format names --- tmk_core/chibios.mk | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index 25c49204bc..014c8d502a 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk @@ -198,10 +198,13 @@ ifneq ("$(SERIAL)","") DFU_ARGS += -S $(SERIAL) endif +ST_LINK_ARGS ?= + # List any extra directories to look for libraries here. EXTRALIBDIRS = $(RULESPATH)/ld DFU_UTIL ?= dfu-util +ST_LINK_CLI ?= st-link_cli # Generate a .qmk for the QMK-FF qmk: $(BUILD_DIR)/$(TARGET).bin @@ -230,5 +233,8 @@ qmk: $(BUILD_DIR)/$(TARGET).bin dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin +st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter + $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst + bin: $(BUILD_DIR)/$(TARGET).bin sizeafter $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; From 239f02408e219567be060be7e65e92e888304ed0 Mon Sep 17 00:00:00 2001 From: patrickmt <40182064+patrickmt@users.noreply.github.com> Date: Fri, 28 Sep 2018 21:32:15 -0400 Subject: [PATCH 068/269] Massdrop keyboard updates for SEND_STRING, syscalls, stdio, debug prints, Auto Shift (#3973) * Update for SEND_STRING usage Update for SEND_STRING usage. Sending keyboard reports (kbd, nkro) now obey the minimum polling time. While attempting to send a keyboard report and waiting for a USB poll, other functions of the keyboard, including LED effects and power management, will continue to operate at their intended intervals. * Updates for send string, syscalls, stdio, debug prints, auto shift Now properly waiting for previous keys sent over USB to complete before sending new. Added heap to linker and now compiling with syscalls support. Removed custom string functions and now using stdio. dprintf now works as intended through virtser device. * CTRL and ALT keymap updates CTRL mac keymap updated ALT default and mac keymap updated ALT rules.mk added Auto Shift with default no * Code cleanup as per discussion with vomindoraan Code cleanup as per discussion with vomindoraan --- keyboards/massdrop/alt/alt.h | 10 + .../massdrop/alt/keymaps/default/keymap.c | 35 +-- keyboards/massdrop/alt/keymaps/mac/keymap.c | 33 +-- keyboards/massdrop/alt/rules.mk | 1 + keyboards/massdrop/ctrl/ctrl.h | 10 + .../massdrop/ctrl/keymaps/default/keymap.c | 39 +-- keyboards/massdrop/ctrl/keymaps/mac/keymap.c | 41 +-- keyboards/massdrop/ctrl/rules.mk | 1 + .../1.0.70/gcc/gcc/samd51j18a_flash.ld | 16 +- tmk_core/arm_atsam.mk | 2 +- tmk_core/common/arm_atsam/printf.h | 2 +- tmk_core/common/print.h | 2 +- tmk_core/protocol/arm_atsam.mk | 1 - .../protocol/arm_atsam/arm_atsam_protocol.h | 1 - tmk_core/protocol/arm_atsam/d51_util.h | 10 + tmk_core/protocol/arm_atsam/main_arm_atsam.c | 136 +++++---- tmk_core/protocol/arm_atsam/usb/spfssf.c | 268 ------------------ tmk_core/protocol/arm_atsam/usb/spfssf.h | 57 ---- tmk_core/protocol/arm_atsam/usb/udi_cdc.c | 8 +- tmk_core/protocol/arm_atsam/usb/udi_cdc.h | 10 +- tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c | 10 +- tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h | 2 + 22 files changed, 175 insertions(+), 520 deletions(-) delete mode 100644 tmk_core/protocol/arm_atsam/usb/spfssf.c delete mode 100644 tmk_core/protocol/arm_atsam/usb/spfssf.h diff --git a/keyboards/massdrop/alt/alt.h b/keyboards/massdrop/alt/alt.h index 387985512b..8dfed8d2d6 100644 --- a/keyboards/massdrop/alt/alt.h +++ b/keyboards/massdrop/alt/alt.h @@ -22,3 +22,13 @@ { K45, KC_NO, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, }, \ { K59, K60, K61, KC_NO, KC_NO, KC_NO, K62, KC_NO, KC_NO, KC_NO, K63, K64, K65, K66, K67, }, \ } + +#define TOGGLE_FLAG_AND_PRINT(var, name) { \ + if (var) { \ + dprintf(name " disabled\r\n"); \ + var = !var; \ + } else { \ + var = !var; \ + dprintf(name " enabled\r\n"); \ + } \ + } diff --git a/keyboards/massdrop/alt/keymaps/default/keymap.c b/keyboards/massdrop/alt/keymaps/default/keymap.c index 0cbce86293..a5c443ffcd 100644 --- a/keyboards/massdrop/alt/keymaps/default/keymap.c +++ b/keyboards/massdrop/alt/keymaps/default/keymap.c @@ -136,8 +136,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case L_T_BR: if (record->event.pressed) { led_animation_breathing = !led_animation_breathing; - if (led_animation_breathing) - { + if (led_animation_breathing) { gcr_breathe = gcr_desired; led_animation_breathe_cur = BREATHE_MIN_STEP; breathe_dir = 1; @@ -151,50 +150,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; case U_T_AUTO: if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { - usb_extra_manual = !usb_extra_manual; - CDC_print("USB extra port manual mode "); - CDC_print(usb_extra_manual ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode"); } return false; case U_T_AGCR: if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { - usb_gcr_auto = !usb_gcr_auto; - CDC_print("USB GCR auto mode "); - CDC_print(usb_gcr_auto ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode"); } return false; case DBG_TOG: if (record->event.pressed) { - debug_enable = !debug_enable; - CDC_print("Debug mode "); - CDC_print(debug_enable ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode"); } return false; case DBG_MTRX: if (record->event.pressed) { - debug_matrix = !debug_matrix; - CDC_print("Debug matrix "); - CDC_print(debug_matrix ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix"); } return false; case DBG_KBD: if (record->event.pressed) { - debug_keyboard = !debug_keyboard; - CDC_print("Debug keyboard "); - CDC_print(debug_keyboard ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard"); } return false; case DBG_MOU: if (record->event.pressed) { - debug_mouse = !debug_mouse; - CDC_print("Debug mouse "); - CDC_print(debug_mouse ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse"); } return false; case MD_BOOT: @@ -209,4 +190,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { default: return true; //Process all other keycodes normally } -} \ No newline at end of file +} diff --git a/keyboards/massdrop/alt/keymaps/mac/keymap.c b/keyboards/massdrop/alt/keymaps/mac/keymap.c index e886290e7e..d6978fd801 100644 --- a/keyboards/massdrop/alt/keymaps/mac/keymap.c +++ b/keyboards/massdrop/alt/keymaps/mac/keymap.c @@ -136,8 +136,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case L_T_BR: if (record->event.pressed) { led_animation_breathing = !led_animation_breathing; - if (led_animation_breathing) - { + if (led_animation_breathing) { gcr_breathe = gcr_desired; led_animation_breathe_cur = BREATHE_MIN_STEP; breathe_dir = 1; @@ -151,50 +150,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; case U_T_AUTO: if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { - usb_extra_manual = !usb_extra_manual; - CDC_print("USB extra port manual mode "); - CDC_print(usb_extra_manual ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode"); } return false; case U_T_AGCR: if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { - usb_gcr_auto = !usb_gcr_auto; - CDC_print("USB GCR auto mode "); - CDC_print(usb_gcr_auto ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode"); } return false; case DBG_TOG: if (record->event.pressed) { - debug_enable = !debug_enable; - CDC_print("Debug mode "); - CDC_print(debug_enable ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode"); } return false; case DBG_MTRX: if (record->event.pressed) { - debug_matrix = !debug_matrix; - CDC_print("Debug matrix "); - CDC_print(debug_matrix ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix"); } return false; case DBG_KBD: if (record->event.pressed) { - debug_keyboard = !debug_keyboard; - CDC_print("Debug keyboard "); - CDC_print(debug_keyboard ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard"); } return false; case DBG_MOU: if (record->event.pressed) { - debug_mouse = !debug_mouse; - CDC_print("Debug mouse "); - CDC_print(debug_mouse ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse"); } return false; case MD_BOOT: diff --git a/keyboards/massdrop/alt/rules.mk b/keyboards/massdrop/alt/rules.mk index daf6795852..c5539158f5 100644 --- a/keyboards/massdrop/alt/rules.mk +++ b/keyboards/massdrop/alt/rules.mk @@ -30,3 +30,4 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) VIRTSER_ENABLE = no # USB Serial Driver RAW_ENABLE = no # Raw device +AUTO_SHIFT_ENABLE = no # Auto Shift diff --git a/keyboards/massdrop/ctrl/ctrl.h b/keyboards/massdrop/ctrl/ctrl.h index dc7c7eabe5..c83efca16d 100644 --- a/keyboards/massdrop/ctrl/ctrl.h +++ b/keyboards/massdrop/ctrl/ctrl.h @@ -30,3 +30,13 @@ { K59, K60, K61, K62, K63, K76, K50, K33 }, \ { K72, K73, K74, K75, K85, K86, K87, }, \ } + +#define TOGGLE_FLAG_AND_PRINT(var, name) { \ + if (var) { \ + dprintf(name " disabled\r\n"); \ + var = !var; \ + } else { \ + var = !var; \ + dprintf(name " enabled\r\n"); \ + } \ + } diff --git a/keyboards/massdrop/ctrl/keymaps/default/keymap.c b/keyboards/massdrop/ctrl/keymaps/default/keymap.c index 9bfb7fec58..88c1ac3123 100644 --- a/keyboards/massdrop/ctrl/keymaps/default/keymap.c +++ b/keyboards/massdrop/ctrl/keymaps/default/keymap.c @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \ - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ ), [1] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, \ @@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, \ L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ ), /* [X] = LAYOUT( @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ ), */ }; @@ -139,8 +139,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case L_T_BR: if (record->event.pressed) { led_animation_breathing = !led_animation_breathing; - if (led_animation_breathing) - { + if (led_animation_breathing) { gcr_breathe = gcr_desired; led_animation_breathe_cur = BREATHE_MIN_STEP; breathe_dir = 1; @@ -154,50 +153,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; case U_T_AUTO: if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { - usb_extra_manual = !usb_extra_manual; - CDC_print("USB extra port manual mode "); - CDC_print(usb_extra_manual ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode"); } return false; case U_T_AGCR: if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { - usb_gcr_auto = !usb_gcr_auto; - CDC_print("USB GCR auto mode "); - CDC_print(usb_gcr_auto ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode"); } return false; case DBG_TOG: if (record->event.pressed) { - debug_enable = !debug_enable; - CDC_print("Debug mode "); - CDC_print(debug_enable ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode"); } return false; case DBG_MTRX: if (record->event.pressed) { - debug_matrix = !debug_matrix; - CDC_print("Debug matrix "); - CDC_print(debug_matrix ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix"); } return false; case DBG_KBD: if (record->event.pressed) { - debug_keyboard = !debug_keyboard; - CDC_print("Debug keyboard "); - CDC_print(debug_keyboard ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard"); } return false; case DBG_MOU: if (record->event.pressed) { - debug_mouse = !debug_mouse; - CDC_print("Debug mouse "); - CDC_print(debug_mouse ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse"); } return false; case MD_BOOT: diff --git a/keyboards/massdrop/ctrl/keymaps/mac/keymap.c b/keyboards/massdrop/ctrl/keymaps/mac/keymap.c index a03f891e8c..6c5dfe19c0 100644 --- a/keyboards/massdrop/ctrl/keymaps/mac/keymap.c +++ b/keyboards/massdrop/ctrl/keymaps/mac/keymap.c @@ -33,15 +33,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ ), [1] = LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MSTP, KC_VOLU, \ L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, \ L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ ), /* [X] = LAYOUT( @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ ), */ }; @@ -139,8 +139,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case L_T_BR: if (record->event.pressed) { led_animation_breathing = !led_animation_breathing; - if (led_animation_breathing) - { + if (led_animation_breathing) { gcr_breathe = gcr_desired; led_animation_breathe_cur = BREATHE_MIN_STEP; breathe_dir = 1; @@ -154,50 +153,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; case U_T_AUTO: if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { - usb_extra_manual = !usb_extra_manual; - CDC_print("USB extra port manual mode "); - CDC_print(usb_extra_manual ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode"); } return false; case U_T_AGCR: if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { - usb_gcr_auto = !usb_gcr_auto; - CDC_print("USB GCR auto mode "); - CDC_print(usb_gcr_auto ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode"); } return false; case DBG_TOG: if (record->event.pressed) { - debug_enable = !debug_enable; - CDC_print("Debug mode "); - CDC_print(debug_enable ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode"); } return false; case DBG_MTRX: if (record->event.pressed) { - debug_matrix = !debug_matrix; - CDC_print("Debug matrix "); - CDC_print(debug_matrix ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix"); } return false; case DBG_KBD: if (record->event.pressed) { - debug_keyboard = !debug_keyboard; - CDC_print("Debug keyboard "); - CDC_print(debug_keyboard ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard"); } return false; case DBG_MOU: if (record->event.pressed) { - debug_mouse = !debug_mouse; - CDC_print("Debug mouse "); - CDC_print(debug_mouse ? "enabled" : "disabled"); - CDC_print("\r\n"); + TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse"); } return false; case MD_BOOT: diff --git a/keyboards/massdrop/ctrl/rules.mk b/keyboards/massdrop/ctrl/rules.mk index daf6795852..c5539158f5 100644 --- a/keyboards/massdrop/ctrl/rules.mk +++ b/keyboards/massdrop/ctrl/rules.mk @@ -30,3 +30,4 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) VIRTSER_ENABLE = no # USB Serial Driver RAW_ENABLE = no # Raw device +AUTO_SHIFT_ENABLE = no # Auto Shift diff --git a/lib/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld b/lib/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld index 3d114f5b7b..35db619717 100644 --- a/lib/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld +++ b/lib/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld @@ -35,7 +35,7 @@ SEARCH_DIR(.) /* Memory Spaces Definitions */ MEMORY { - //rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 +/*rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000*/ rom (rx) : ORIGIN = 0x00004000, LENGTH = 0x0003C000 ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 bkupram (rwx) : ORIGIN = 0x47000000, LENGTH = 0x00002000 @@ -45,6 +45,9 @@ MEMORY /* The stack size used by the application. NOTE: you need to adjust according to your application. */ STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0x8000; +/* The heap size used by the application. */ +HEAP_SIZE = DEFINED(HEAP_SIZE) ? HEAP_SIZE : DEFINED(__heap_size__) ? __heap_size__ : 0x800; + _srom = ORIGIN(rom); _lrom = LENGTH(rom); _erom = ORIGIN(rom) + LENGTH(rom); @@ -153,6 +156,17 @@ SECTIONS _ezero = .; } > ram + /* .heap section for syscalls */ + .heap (NOLOAD) : + { + . = ALIGN(4); + _end = .; + end = .; + _heap_start = .; + . = . + HEAP_SIZE; + _heap_end = .; + } > ram + /* stack section */ .stack (NOLOAD): { diff --git a/tmk_core/arm_atsam.mk b/tmk_core/arm_atsam.mk index ef412d59d6..06823fb629 100644 --- a/tmk_core/arm_atsam.mk +++ b/tmk_core/arm_atsam.mk @@ -36,7 +36,7 @@ LDFLAGS +=-Wl,--gc-sections LDFLAGS += -Wl,-Map="%OUT%%PROJ_NAME%.map" LDFLAGS += -Wl,--start-group LDFLAGS += -Wl,--end-group -LDFLAGS += -Wl,--gc-sections +LDFLAGS += --specs=rdimon.specs LDFLAGS += -T$(LIB_PATH)/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld OPT_DEFS += -DPROTOCOL_ARM_ATSAM diff --git a/tmk_core/common/arm_atsam/printf.h b/tmk_core/common/arm_atsam/printf.h index 582c83bf54..3206b40bdb 100644 --- a/tmk_core/common/arm_atsam/printf.h +++ b/tmk_core/common/arm_atsam/printf.h @@ -1,8 +1,8 @@ #ifndef _PRINTF_H_ #define _PRINTF_H_ -#define __xprintf dpf int dpf(const char *_Format, ...); +#define __xprintf dpf #endif //_PRINTF_H_ diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h index 9cbe67bad6..d945276572 100644 --- a/tmk_core/common/print.h +++ b/tmk_core/common/print.h @@ -29,7 +29,7 @@ #include #include "util.h" -#if defined(PROTOCOL_CHIBIOS) +#if defined(PROTOCOL_CHIBIOS) || defined(PROTOCOL_ARM_ATSAM) #define PSTR(x) x #endif diff --git a/tmk_core/protocol/arm_atsam.mk b/tmk_core/protocol/arm_atsam.mk index d535b64cd7..04e02790a0 100644 --- a/tmk_core/protocol/arm_atsam.mk +++ b/tmk_core/protocol/arm_atsam.mk @@ -10,7 +10,6 @@ SRC += $(ARM_ATSAM_DIR)/spi.c SRC += $(ARM_ATSAM_DIR)/startup.c SRC += $(ARM_ATSAM_DIR)/usb/main_usb.c -SRC += $(ARM_ATSAM_DIR)/usb/spfssf.c SRC += $(ARM_ATSAM_DIR)/usb/udc.c SRC += $(ARM_ATSAM_DIR)/usb/udi_cdc.c SRC += $(ARM_ATSAM_DIR)/usb/udi_hid.c diff --git a/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h b/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h index be73beccd7..2ba0991749 100644 --- a/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h +++ b/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h @@ -36,7 +36,6 @@ along with this program. If not, see . #include "issi3733_driver.h" #include "./usb/compiler.h" #include "./usb/udc.h" -#include "./usb/spfssf.h" #include "./usb/udi_cdc.h" #endif //MD_BOOTLOADER diff --git a/tmk_core/protocol/arm_atsam/d51_util.h b/tmk_core/protocol/arm_atsam/d51_util.h index 465889c7cb..7a35f7989f 100644 --- a/tmk_core/protocol/arm_atsam/d51_util.h +++ b/tmk_core/protocol/arm_atsam/d51_util.h @@ -32,6 +32,16 @@ along with this program. If not, see . #define m15_on REG_PORT_OUTSET1 = 0x40000000 //PB30 High #define m15_off REG_PORT_OUTCLR1 = 0x40000000 //PB30 Low +//Debug Port PB23 +#define m27_ena REG_PORT_DIRSET1 = 0x800000 //PB23 Output +#define m27_on REG_PORT_OUTSET1 = 0x800000 //PB23 High +#define m27_off REG_PORT_OUTCLR1 = 0x800000 //PB23 Low + +//Debug Port PB31 +#define m28_ena REG_PORT_DIRSET1 = 0x80000000 //PB31 Output +#define m28_on REG_PORT_OUTSET1 = 0x80000000 //PB31 High +#define m28_off REG_PORT_OUTCLR1 = 0x80000000 //PB31 Low + #define m15_loop(M15X) {uint8_t M15L=M15X; while(M15L--){m15_on;CLK_delay_us(1);m15_off;}} void m15_print(uint32_t x); diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c index 8cc7767038..676dac4ea3 100644 --- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c +++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c @@ -31,6 +31,7 @@ along with this program. If not, see . //From keyboard's directory #include "config_led.h" +void main_subtasks(void); uint8_t keyboard_leds(void); void send_keyboard(report_keyboard_t *report); void send_mouse(report_mouse_t *report); @@ -65,7 +66,7 @@ void send_keyboard(report_keyboard_t *report) if (!keymap_config.nkro) { #endif //NKRO_ENABLE - dprint("s-kbd\r\n"); + while (udi_hid_kbd_b_report_trans_ongoing) { main_subtasks(); } //Run other tasks while waiting for USB to be free irqflags = __get_PRIMASK(); __disable_irq(); @@ -81,7 +82,7 @@ void send_keyboard(report_keyboard_t *report) } else { - dprint("s-nkro\r\n"); + while (udi_hid_nkro_b_report_trans_ongoing) { main_subtasks(); } //Run other tasks while waiting for USB to be free irqflags = __get_PRIMASK(); __disable_irq(); @@ -102,8 +103,6 @@ void send_mouse(report_mouse_t *report) #ifdef MOUSEKEY_ENABLE uint32_t irqflags; - dprint("s-mou\r\n"); - irqflags = __get_PRIMASK(); __disable_irq(); __DMB(); @@ -120,8 +119,6 @@ void send_mouse(report_mouse_t *report) void send_system(uint16_t data) { #ifdef EXTRAKEY_ENABLE - dprintf("s-exks %i\r\n", data); - uint32_t irqflags; irqflags = __get_PRIMASK(); @@ -142,8 +139,6 @@ void send_system(uint16_t data) void send_consumer(uint16_t data) { #ifdef EXTRAKEY_ENABLE - dprintf("s-exkc %i\r\n",data); - uint32_t irqflags; irqflags = __get_PRIMASK(); @@ -160,6 +155,77 @@ void send_consumer(uint16_t data) #endif //EXTRAKEY_ENABLE } +uint8_t g_drvid; + +void main_subtask_usb_state(void) +{ + if (usb_state == USB_STATE_POWERDOWN) + { + uint32_t timer_led = timer_read32(); + + led_on; + if (led_enabled) + { + for (g_drvid = 0; g_drvid < ISSI3733_DRIVER_COUNT; g_drvid++) + { + I2C3733_Control_Set(0); + } + } + while (usb_state == USB_STATE_POWERDOWN) + { + if (timer_read32() - timer_led > 1000) led_off; //Good to indicate went to sleep, but only for a second + } + if (led_enabled) + { + for (g_drvid = 0; g_drvid < ISSI3733_DRIVER_COUNT; g_drvid++) + { + I2C3733_Control_Set(1); + } + } + led_off; + } +} + +void main_subtask_led(void) +{ + led_matrix_task(); +} + +void main_subtask_power_check(void) +{ + static uint64_t next_5v_checkup = 0; + + if (CLK_get_ms() > next_5v_checkup) + { + next_5v_checkup = CLK_get_ms() + 5; + + v_5v = adc_get(ADC_5V); + v_5v_avg = 0.9 * v_5v_avg + 0.1 * v_5v; + + gcr_compute(); + } +} + +void main_subtask_usb_extra_device(void) +{ + static uint64_t next_usb_checkup = 0; + + if (CLK_get_ms() > next_usb_checkup) + { + next_usb_checkup = CLK_get_ms() + 10; + + USB_HandleExtraDevice(); + } +} + +void main_subtasks(void) +{ + main_subtask_usb_state(); + main_subtask_led(); + main_subtask_power_check(); + main_subtask_usb_extra_device(); +} + int main(void) { led_ena; @@ -201,9 +267,8 @@ int main(void) i2c_led_q_init(); - uint8_t drvid; - for (drvid=0;drvid 1000) led_off; //Good to indicate went to sleep, but only for a second - } - if (led_enabled) - { - for (drvid=0;drvid next_5v_checkup) - { - next_5v_checkup = CLK_get_ms() + 5; - - v_5v = adc_get(ADC_5V); - v_5v_avg = 0.9 * v_5v_avg + 0.1 * v_5v; - - gcr_compute(); - } - - if (CLK_get_ms() > next_usb_checkup) - { - next_usb_checkup = CLK_get_ms() + 10; - - USB_HandleExtraDevice(); - } + main_subtasks(); //Note these tasks will also be run while waiting for USB keyboard polling intervals #ifdef VIRTSER_ENABLE if (CLK_get_ms() > next_print) { next_print = CLK_get_ms() + 250; - //dpf("5v=%i 5vu=%i dlow=%i dhi=%i gca=%i gcd=%i\r\n",v_5v,v_5v_avg,v_5v_avg-V5_LOW,v_5v_avg-V5_HIGH,gcr_actual,gcr_desired); + dprintf("5v=%u 5vu=%u dlow=%u dhi=%u gca=%u gcd=%u\r\n",v_5v,v_5v_avg,v_5v_avg-V5_LOW,v_5v_avg-V5_HIGH,gcr_actual,gcr_desired); } #endif //VIRTSER_ENABLE } diff --git a/tmk_core/protocol/arm_atsam/usb/spfssf.c b/tmk_core/protocol/arm_atsam/usb/spfssf.c deleted file mode 100644 index 449a8bb7d0..0000000000 --- a/tmk_core/protocol/arm_atsam/usb/spfssf.c +++ /dev/null @@ -1,268 +0,0 @@ -#include "samd51j18a.h" -#include "stdarg.h" -#include "spfssf.h" -#include "usb_util.h" - -int vspf(char *_Dest, const char *_Format, va_list va) -{ - //va_list va; //Variable argument list variable - char *d = _Dest; //Pointer to dest - - //va_start(va,_Format); //Initialize the variable argument list - while (*_Format) //While not end of format string - { - if (*_Format == SPF_SPEC_START) //If current format string character is the specifier start character - { - _Format++; //Skip over the character - while (*_Format && *_Format <= 64) _Format++; //Forward past any options - if (*_Format == SPF_SPEC_START) *d++ = *_Format; //If the character is the specifier start character, output the character and advance dest - else if (*_Format == SPF_SPEC_LONG) //If the character is the long type - { - _Format++; //Skip over the character - if (*_Format == SPF_SPEC_DECIMAL) //If the character is the decimal type - { - int64_t buf = va_arg(va,int64_t); //Get the next value from the va list - //if (buf < 0) { *d++ = '-'; buf = -buf; } //If the given number is negative, add a negative sign to the dest and invert number - //spf_uint2str_32_3t(&d,buf,32); //Perform the conversion - d += UTIL_ltoa_radix(buf, d, 10); - } - else if (*_Format == SPF_SPEC_UNSIGNED) //If the character is the unsigned type - { - uint64_t num = va_arg(va,uint64_t); //Get the next value from the va list - //spf_uint2str_32_3t(&d,num,32); //Perform the conversion - d += UTIL_ltoa_radix(num, d, 10); - } - else if (*_Format == SPF_SPEC_UHINT || *_Format == SPF_SPEC_UHINT_UP) //If the character is the unsigned type - { - uint64_t buf = va_arg(va,uint64_t); //Get the next value from the va list - //spf_uint2hex_32(&d,(unsigned long) buf); - d += UTIL_ltoa_radix(buf, d, 16); - } - else //If the character was not a known type - { - *d++ = SPF_SPEC_START; //Output the start specifier - *d++ = SPF_SPEC_LONG; //Output the long type - *d++ = *_Format; //Output the unknown type - } - } - else if (*_Format == SPF_SPEC_DECIMAL) //If the character is the decimal type - { - int buf = va_arg(va,int); //Get the next value from the va list - //if (buf < 0) { *d++ = '-'; buf = -buf; } //If the given number is negative, add a negative sign to the dest and invert number - //spf_uint2str_32_3t(&d,buf,16); //Perform the conversion - d += UTIL_itoa(buf, d); - } - else if (*_Format == SPF_SPEC_INT) //If the character is the integer type - { - int buf = va_arg(va,int); //Get the next value from the va list - //if (buf < 0) { *d++ = '-'; buf = -buf; } //If the given number is negative, add a negative sign to the dest and inverted number - //spf_uint2str_32_3t(&d,buf,16); //Perform the conversion - d += UTIL_itoa(buf, d); - } - else if (*_Format == SPF_SPEC_UINT) //If the character is the unsigned integer type - { - int buf = va_arg(va,int); //Get the next value from the va list - //spf_uint2str_32_3t(&d,buf,16); //Perform the conversion - d += UTIL_utoa(buf, d); - } - else if (*_Format == SPF_SPEC_STRING) //If the character is the string type - { - char *buf = va_arg(va,char*); //Get the next value from the va list - while (*buf) *d++ = *buf++; //Perform the conversion (simply output characters and adcance pointers) - } - else if (*_Format == SPF_SPEC_UHINT || *_Format == SPF_SPEC_UHINT_UP) //If the character is the short type - { - int buf = va_arg(va,unsigned int); //Get the next value from the va list - //spf_uint2hex_32(&d,(unsigned long) buf); //Perform the conversion - d += UTIL_utoa(buf, d); - } - else //If the character type is unknown - { - *d++ = SPF_SPEC_START; //Output the start specifier - *d++ = *_Format; //Output the unknown type - } - } - else *d++ = *_Format; //If the character is unknown, output it to dest and advance dest - _Format++; //Advance the format buffer pointer to next character - } - //va_end(va); //End the variable argument list - - *d = '\0'; //Cap off the destination string with a zero - - return d - _Dest; //Return the length of the destintion buffer -} - -int spf(char *_Dest, const char *_Format, ...) -{ - va_list va; //Variable argument list variable - int result; - - va_start(va,_Format); //Initialize the variable argument list - result = vspf(_Dest, _Format, va); - va_end(va); - return result; -} - -//sscanf string to number (integer types) -int64_t ssf_ston(const char **_Src, uint32_t count, uint32_t *conv_count) -{ - int64_t value = 0; //Return value accumulator - uint32_t counter=count; //Counter to keep track of numbers converted - const char* p; //Pointer to first non space character - - while (*(*_Src) == SSF_SKIP_SPACE) (*_Src)++; //Forward through the whitespace to next non whitespace - - p = (*_Src); //Set pointer to first non space character - if (*p == '+' || *p == '-') (*_Src)++; //Skip over sign if any - while (*(*_Src) >= ASCII_NUM_START && - *(*_Src) <= ASCII_NUM_END && - counter) //While the source character is a digit and counter is not zero - { - value *= 10; //Multiply result by 10 to make room for next 1's place number - value += *(*_Src)++ - ASCII_NUM_START; //Add source number to value - counter--; //Decrement counter - } - if (counter - count == 0) return 0; //If no number conversion were performed, return 0 - if (*p == '-') value = -value; //If the number given was negative, make the result negative - - if (conv_count) (*conv_count)++; //Increment the converted count - return value; //Return the value -} - -uint64_t ssf_hton(const char **_Src, uint32_t count,uint32_t *conv_count) -{ - int64_t value=0; //Return value accumulator - uint32_t counter=count; //Counter to keep track of numbers converted - //const char* p; //Pointer to first non space character - char c; - - while (*(*_Src) == SSF_SKIP_SPACE) (*_Src)++; //Forward through the whitespace to next non whitespace - - //p = (*_Src); //Set pointer to first non space character - - while (counter) - { - c = *(*_Src)++; - if (c >= 'a' && c <= 'f') c -= ('a'-'A'); //toupper - if (c < '0' || (c > '9' && c < 'A') || c > 'F') break; - value *= 16; //Multiply result by 10 to make room for next 1's place number - c = c - '0'; - if (c > 9) c -= 7; - value += c; //Add source number to value - counter--; //Decrement counter - } - - if (counter - count == 0) return 0; //If no number conversion were performed, return 0 - //if (*p == '-') value = -value; //If the number given was negative, make the result negative - - if (conv_count) (*conv_count)++; //Increment the converted count - return value; -} - -//sscanf -int ssf(const char *_Src, const char *_Format, ...) -{ - va_list va; //Variable argument list variable - unsigned char looking_for=0; //Static char specified in format to be found in source - uint32_t conv_count=0; //Count of conversions made - - va_start(va,_Format); //Initialize the variable argument list - while (*_Format) //While the format string has not been fully read - { - if (looking_for != 0) //If we are looking for a matching character in the source string - { - while (*_Src != looking_for && *_Src) _Src++; //While the character is not found in the source string and not the end of the source - // string, increment the pointer position - if (*_Src == looking_for) _Src++; //If the character was found, step over it - else break; //Else the end was reached and the scan is now invalid (Could not find static character) - looking_for = 0; //Clear the looking for character - } - if (*_Format == SSF_SPEC_START) //If the current format character is the specifier start character - { - _Format++; //Step over the specifier start character - if (*_Format == SSF_SPEC_DECIMAL) //If the decimal specifier type is found - { - int *value=va_arg(va,int*); //User given destination address - //*value = (int)ssf_ston(&_Src,5,&conv_count); //Run conversion - *value = (int)ssf_ston(&_Src,10,&conv_count); //Run conversion - } - else if (*_Format == SSF_SPEC_LONG) //If the long specifier type is found - { - _Format++; //Skip over the specifier type - if (*_Format == SSF_SPEC_DECIMAL) //If the decimal specifier type is found - { - int64_t *value=va_arg(va,int64_t*); //User given destination address - //*value = (int64_t)ssf_ston(&_Src,10,&conv_count); //Run conversion - *value = (int64_t)ssf_ston(&_Src,19,&conv_count); //Run conversion - } - else if (*_Format == SSF_SPEC_UHINT) //If the decimal specifier type is found - { - uint64_t *value=va_arg(va,uint64_t *); //User given destination address - //*value = (uint64_t int)ssf_hton(&_Src,12,&conv_count); //Run conversion - *value = (uint64_t)ssf_hton(&_Src,16,&conv_count); //Run conversion - } - } - else if (*_Format == SSF_SPEC_SHORTINT) //If the short int specifier type is found - { - _Format++; //Skip over the specifier type - if (*_Format == SSF_SPEC_SHORTINT) //If the short int specifier type is found - { - _Format++; //Skip over the specifier type - if (*_Format == SSF_SPEC_DECIMAL) //If the decimal specifier type is found - { - unsigned char *value=va_arg(va,unsigned char*); //User given destination address - //*value = (unsigned char)ssf_ston(&_Src,3,&conv_count); //Run conversion - *value = (unsigned char)ssf_ston(&_Src,5,&conv_count); //Run conversion - } - } - } - else if (*_Format == SSF_SPEC_STRING) //If the specifier type is string - { - char *value=va_arg(va,char*); //User given destination address, max chars read pointer - while (*_Src == SSF_SKIP_SPACE) _Src++; //Forward through the whitespace to next non whitespace - while (*_Src != SSF_SKIP_SPACE && *_Src) *value++ = *_Src++; //While any character but space and not end of string and not end location, copy char to dest - *value = 0; //Cap off the string pointer with zero - conv_count++; //Increment the converted count - } - else if (*_Format == SSF_SPEC_VERSION) //If the specifier type is string - { - char *value=va_arg(va,char*); //User given destination address, max chars read pointer - while (*_Src == SSF_SKIP_SPACE) _Src++; //Forward through the whitespace to next non whitespace - while (*_Src != SSF_DELIM_COMMA && *_Src) *value++ = *_Src++; //While any character but space and not end of string and not end location, copy char to dest - *value = 0; //Cap off the string pointer with zero - conv_count++; //Increment the converted count - } - else if (*_Format >= ASCII_NUM_START && *_Format <= ASCII_NUM_END) - { - uint32_t len = (uint32_t)ssf_ston(&_Format,3,NULL); //Convert the given length - if (*_Format == SSF_SPEC_STRING) //If the specifier type is string - { - char *value=va_arg(va,char*),*e; //User given destination address, max chars read pointer - while (*_Src == SSF_SKIP_SPACE) _Src++; //Forward through the whitespace to next non whitespace - e = (char*)_Src+len; //Set a maximum length pointer location - while (*_Src != SSF_SKIP_SPACE && *_Src && _Src != e) *value++ = *_Src++; //While any character but space and not end of string and not end location, copy char to dest - *value = 0; //Cap off the string pointer with zero - conv_count++; //Increment the converted count - } - else if (*_Format == SSF_SPEC_VERSION) //If the specifier type is string - { - char *value=va_arg(va,char*),*e; //User given destination address, max chars read pointer - while (*_Src == SSF_SKIP_SPACE) _Src++; //Forward through the whitespace to next non whitespace - e = (char*)_Src+len; //Set a maximum length pointer location - while (*_Src != SSF_DELIM_COMMA && *_Src && _Src != e) *value++ = *_Src++; //While any character but space and not end of string and not end location, copy char to dest - *value = 0; //Cap off the string pointer with zero - conv_count++; //Increment the converted count - } - } - else if (*_Format == SSF_SPEC_START) looking_for = *_Format; //If another start specifier character is found, output a specifier character - else break; //Scan is now invalid (Uknown type specified) - } - else if (*_Format == SSF_SKIP_SPACE) { } //If a space is found, ignore it - else looking_for = *_Format; //If any other character is found, it is static and should be found in src as well - _Format++; //Skip over current format character - } - - va_end(va); //End the variable argument list - return conv_count; //Return the number of conversions made -} - diff --git a/tmk_core/protocol/arm_atsam/usb/spfssf.h b/tmk_core/protocol/arm_atsam/usb/spfssf.h deleted file mode 100644 index 337a904dfe..0000000000 --- a/tmk_core/protocol/arm_atsam/usb/spfssf.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef ____spfssf_h -#define ____spfssf_h - -#include - -#define sprintf spf -#define sscanf ssf - -#define SIZEOF_OFFSET 1 - -#ifndef NULL -#define NULL 0 -#endif - -#define SPF_NONE 0 - -#define SPF_SPEC_START 37 //% -#define SPF_SPEC_DECIMAL 100 //d 16bit dec signed (-32767 to 32767) DONE same as i -#define SPF_SPEC_INT 105 //i 16bit dec signed (-32767 to 32767) DONE same as d -#define SPF_SPEC_UINT 117 //u 16bit dec unsigned (0 to 65535) DONE -#define SPF_SPEC_STRING 115 //s variable length (abcd...) DONE -#define SPF_SPEC_UHINT 120 //x 16bit hex lwrc (7fa) DONE -#define SPF_SPEC_UHINT_UP 88 //x 16bit hex lwrc (7fa) DONE -#define SPF_SPEC_LONG 108 //l start of either ld or lu DONE -#define SPF_SPEC_DECIMAL 100 //ld 32bit dec signed (-2147483647 to 2147483647) DONE -#define SPF_SPEC_UNSIGNED 117 //lu 32bit dec unsigned (0 to 4294967295) DONE -#define SPF_SPEC_UHINT 120 //lx 32bit hex unsigned (0 to ffffffff) DONE - -#define SSF_SPEC_START 37 //% -#define SSF_SPEC_SHORTINT 104 //h 8bit dec signed (-127 to 127) DONE -#define SSF_LEN_SHORTINT 3 //hhd -#define SSF_SPEC_DECIMAL 100 //d 16bit dec signed (-32767 to 32767) DONE -#define SSF_LEN_DECIMAL 5 //32767 -#define SSF_SPEC_INT 105 //i 16bit dec signed (-32767 to 32767) DONE -#define SSF_LEN_INT 5 //32767 -#define SSF_SPEC_LONG 108 //l start of either ld or lu DONE -#define SSF_SPEC_DECIMAL 100 //ld 32bit dec signed (-2147483647 to 2147483647) DONE -#define SSF_SPEC_UHINT 120 //lx 32bit hex unsigned DONE -#define SSF_LEN_LDECIMAL 10 //2147483647 -#define SSF_SPEC_STRING 115 //s variable length (abcd...) DONE -#define SSF_SKIP_SPACE 32 //space - -#define SSF_SPEC_VERSION 118 //v collect to comma delimiter - special -#define SSF_DELIM_COMMA 44 //, - -#define ASCII_NUM_START 48 //0 -#define ASCII_NUM_END 58 //9 - -#define T_UINT32_0_LIMIT 14 -#define T_UINT32_1_LIMIT 27 - -int vspf(char *_Dest, const char *_Format, va_list va); -int spf(char *_Dest, const char *_Format, ...); -int ssf(const char *_Src, const char *_Format, ...); - -#endif //____spfssf_h - diff --git a/tmk_core/protocol/arm_atsam/usb/udi_cdc.c b/tmk_core/protocol/arm_atsam/usb/udi_cdc.c index b4159d3251..15f0f760cc 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_cdc.c +++ b/tmk_core/protocol/arm_atsam/usb/udi_cdc.c @@ -54,7 +54,6 @@ #include #include "udi_cdc_conf.h" #include "udi_device_conf.h" -#include "spfssf.h" #include "stdarg.h" #include "tmk_core/protocol/arm_atsam/clks.h" @@ -1259,7 +1258,6 @@ uint32_t CDC_print(char *printbuf) return 1; } - char printbuf[CDC_PRINTBUF_SIZE]; int dpf(const char *_Format, ...) @@ -1267,8 +1265,8 @@ int dpf(const char *_Format, ...) va_list va; //Variable argument list variable int result; - va_start(va,_Format); //Initialize the variable argument list - result = vspf(printbuf, _Format, va); + va_start(va, _Format); //Initialize the variable argument list + result = vsnprintf(printbuf, CDC_PRINTBUF_SIZE, _Format, va); va_end(va); CDC_print(printbuf); @@ -1377,8 +1375,6 @@ void CDC_init(void) printbuf[0]=0; } -char printbuf[CDC_PRINTBUF_SIZE]; - #endif //CDC line 62 //@} diff --git a/tmk_core/protocol/arm_atsam/usb/udi_cdc.h b/tmk_core/protocol/arm_atsam/usb/udi_cdc.h index 6b70e96d0e..e134cf2360 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_cdc.h +++ b/tmk_core/protocol/arm_atsam/usb/udi_cdc.h @@ -57,8 +57,8 @@ #include "udi.h" // Check the number of port -#ifndef UDI_CDC_PORT_NB -# define UDI_CDC_PORT_NB 1 +#ifndef UDI_CDC_PORT_NB +# define UDI_CDC_PORT_NB 1 #endif #if (UDI_CDC_PORT_NB > 1) # error UDI_CDC_PORT_NB must be at most 1 @@ -86,9 +86,6 @@ extern UDC_DESC_STORAGE udi_api_t udi_api_cdc_data; //! CDC data endpoints size for FS speed (8B, 16B, 32B, 64B) #define UDI_CDC_DATA_EPS_FS_SIZE CDC_RX_SIZE -#define CDC_PRINT_BUF_SIZE 256 -extern char printbuf[CDC_PRINT_BUF_SIZE]; - //@} /** @@ -371,9 +368,6 @@ uint32_t CDC_print(char *printbuf); uint32_t CDC_input(void); void CDC_init(void); -#define __xprintf dpf -int dpf(const char *_Format, ...); - #ifdef __cplusplus } #endif diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c index 18f69350c0..1a6f7905e6 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c @@ -45,6 +45,7 @@ */ #include "samd51j18a.h" +#include "d51_util.h" #include "conf_usb.h" #include "usb_protocol.h" #include "udd.h" @@ -86,7 +87,7 @@ bool udi_hid_kbd_b_report_valid; COMPILER_WORD_ALIGNED uint8_t udi_hid_kbd_report[UDI_HID_KBD_REPORT_SIZE]; -static bool udi_hid_kbd_b_report_trans_ongoing; +volatile bool udi_hid_kbd_b_report_trans_ongoing; COMPILER_WORD_ALIGNED static uint8_t udi_hid_kbd_report_trans[UDI_HID_KBD_REPORT_SIZE]; @@ -186,8 +187,7 @@ bool udi_hid_kbd_send_report(void) return false; } - memcpy(udi_hid_kbd_report_trans, udi_hid_kbd_report, - UDI_HID_KBD_REPORT_SIZE); + memcpy(udi_hid_kbd_report_trans, udi_hid_kbd_report, UDI_HID_KBD_REPORT_SIZE); udi_hid_kbd_b_report_valid = false; udi_hid_kbd_b_report_trans_ongoing = udd_ep_run(UDI_HID_KBD_EP_IN | USB_EP_DIR_IN, @@ -249,7 +249,7 @@ bool udi_hid_nkro_b_report_valid; COMPILER_WORD_ALIGNED uint8_t udi_hid_nkro_report[UDI_HID_NKRO_REPORT_SIZE]; -static bool udi_hid_nkro_b_report_trans_ongoing; +volatile bool udi_hid_nkro_b_report_trans_ongoing; COMPILER_WORD_ALIGNED static uint8_t udi_hid_nkro_report_trans[UDI_HID_NKRO_REPORT_SIZE]; @@ -355,7 +355,7 @@ bool udi_hid_nkro_send_report(void) return false; } - memcpy(udi_hid_nkro_report_trans, udi_hid_nkro_report,UDI_HID_NKRO_REPORT_SIZE); + memcpy(udi_hid_nkro_report_trans, udi_hid_nkro_report, UDI_HID_NKRO_REPORT_SIZE); udi_hid_nkro_b_report_valid = false; udi_hid_nkro_b_report_trans_ongoing = udd_ep_run(UDI_HID_NKRO_EP_IN | USB_EP_DIR_IN, diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h index 9a2741534d..babfdb7a78 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h @@ -60,6 +60,7 @@ extern "C" { #ifdef KBD extern UDC_DESC_STORAGE udi_api_t udi_api_hid_kbd; extern bool udi_hid_kbd_b_report_valid; +extern volatile bool udi_hid_kbd_b_report_trans_ongoing; extern uint8_t udi_hid_kbd_report_set; bool udi_hid_kbd_send_report(void); #endif //KBD @@ -70,6 +71,7 @@ bool udi_hid_kbd_send_report(void); #ifdef NKRO extern UDC_DESC_STORAGE udi_api_t udi_api_hid_nkro; extern bool udi_hid_nkro_b_report_valid; +extern volatile bool udi_hid_nkro_b_report_trans_ongoing; bool udi_hid_nkro_send_report(void); #endif //NKRO From ab83aedfabd7f11d914466d008ab5938b3e0107f Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 19:22:31 -0700 Subject: [PATCH 069/269] Second attempt to reduce the size of the USB BLE Converter (#4010) * Disable Leader to reduce firmware size for Travis * Additionaly fixes to USB_USB\BLE Keyboard converter * Disable One Shots to get USB to USB BLE converter to fit --- keyboards/converter/usb_usb/ble/config.h | 2 + keyboards/converter/usb_usb/ble/rules.mk | 2 +- keyboards/converter/usb_usb/keymap.c | 288 ----------------------- 3 files changed, 3 insertions(+), 289 deletions(-) delete mode 100644 keyboards/converter/usb_usb/keymap.c diff --git a/keyboards/converter/usb_usb/ble/config.h b/keyboards/converter/usb_usb/ble/config.h index 5333e17c82..3bf3b2963a 100644 --- a/keyboards/converter/usb_usb/ble/config.h +++ b/keyboards/converter/usb_usb/ble/config.h @@ -11,3 +11,5 @@ #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION +#define NO_ACTION_ONESHOT + diff --git a/keyboards/converter/usb_usb/ble/rules.mk b/keyboards/converter/usb_usb/ble/rules.mk index 84aa767f54..f5ab3880bf 100644 --- a/keyboards/converter/usb_usb/ble/rules.mk +++ b/keyboards/converter/usb_usb/ble/rules.mk @@ -4,7 +4,7 @@ F_CPU = 8000000 BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = no # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = no # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/converter/usb_usb/keymap.c b/keyboards/converter/usb_usb/keymap.c deleted file mode 100644 index 16f2a28092..0000000000 --- a/keyboards/converter/usb_usb/keymap.c +++ /dev/null @@ -1,288 +0,0 @@ -/* -Copyright 2017 Balz Guenat - -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 "keymap_common.h" - - -const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { - /* 0: plain Qwerty without layer switching - * ,---------------. ,---------------. ,---------------. - * |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24| - * ,---. |---------------| |---------------| |---------------| ,-----------. ,---------------. ,-------. - * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|Pwr| | Help | - * `---' `---------------' `---------------' `---------------' `-----------' `---------------' `-------' - * ,-----------------------------------------------------------. ,-----------. ,---------------. ,-------. - * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |Stp|Agn| - * |-----------------------------------------------------------| |-----------| |---------------| |-------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |Mnu|Und| - * |-----------------------------------------------------------| `-----------' |---------------| |-------| - * |CapsL | A| S| D| F| G| H| J| K| L| ;| :| #|Retn| | 4| 5| 6|KP,| |Sel|Cpy| - * |-----------------------------------------------------------| ,---. |---------------| |-------| - * |Shft| <| Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|KP=| |Exe|Pst| - * |-----------------------------------------------------------| ,-----------. |---------------| |-------| - * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut| - * `-----------------------------------------------------------' `-----------' `---------------' `-------' - */ - // KEYMAP_ALL( - // F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, - // ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, - // GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, - // TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO, - // CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY, - // LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE, - // LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT - // ), - KEYMAP_ALL( - F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO, - FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY, - LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE, - LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT - ), - KEYMAP_ALL( - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, - GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, - CAPS,MPRV,VOLU,MNXT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, - TRNS,MUTE,VOLD,MPLY,TRNS,TRNS,LEFT,DOWN,UP, RGHT,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS - ), -}; - -// const action_t fn_actions[] PROGMEM = {}; - -const action_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_MOMENTARY(1), -}; - - - -/* - * Keymap samples - */ -#if 0 - /* ANSI layout - * ,---. ,---------------. ,---------------. ,---------------. ,-----------. - * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| - * `---' `---------------' `---------------' `---------------' `-----------' - * ,-----------------------------------------------------------. ,-----------. ,---------------. - * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp| |Ins|Hom|PgU| |NmL| /| *| -| - * |-----------------------------------------------------------| |-----------| |---------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| - * |-----------------------------------------------------------| `-----------' |-----------| | - * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| Return| | 4| 5| 6| | - * |-----------------------------------------------------------| ,---. |---------------| - * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| | - * |-----------------------------------------------------------| ,-----------. |-----------| | - * |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent| - * `-----------------------------------------------------------' `-----------' `---------------' - */ - KEYMAP( - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, - LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS, - LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3, - LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT - ), - - /* ISO layout - * ,---. ,---------------. ,---------------. ,---------------. ,-----------. - * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| - * `---' `---------------' `---------------' `---------------' `-----------' - * ,-----------------------------------------------------------. ,-----------. ,---------------. - * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| ^| Bsp| |Ins|Hom|PgU| |NmL| /| *| -| - * |-----------------------------------------------------------| |-----------| |---------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Retn| |Del|End|PgD| | 7| 8| 9| +| - * |------------------------------------------------------` | `-----------' |-----------| | - * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #| | | 4| 5| 6| | - * |-----------------------------------------------------------| ,---. |---------------| - * |Shft|\ | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3|Ent| - * |-----------------------------------------------------------| ,-----------. |-----------| | - * |Ctl|Gui|Alt| Space |HNK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| | - * `-----------------------------------------------------------' `-----------' `---------------' - */ - KEYMAP_ISO( - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PPLS, - LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6, - LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3, PENT, - LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT - ), - - /* JIS layout - * ,---. ,---------------. ,---------------. ,---------------. ,-----------. - * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| - * `---' `---------------' `---------------' `---------------' `-----------' - * ,-----------------------------------------------------------. ,-----------. ,---------------. - * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| ^|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| - * |-----------------------------------------------------------| |-----------| |---------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| @| [| Retn| |Del|End|PgD| | 7| 8| 9| +| - * |------------------------------------------------------` | `-----------' |-----------| | - * |CapsL | A| S| D| F| G| H| J| K| L| ;| :| ]| | | 4| 5| 6| | - * |-----------------------------------------------------------| ,---. |---------------| - * |Shft | Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|Ent| - * |-----------------------------------------------------------| ,-----------. |-----------| | - * |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| | - * `-----------------------------------------------------------' `-----------' `---------------' - */ - KEYMAP_JIS( - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JPY, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, ENT, DEL, END, PGDN, P7, P8, P9, PPLS, - LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6, - LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PENT, - LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT - ), - - /* Colemak http://colemak.com - * ,-----------------------------------------------------------. - * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| - * |-----------------------------------------------------------| - * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| - * |-----------------------------------------------------------| - * |BackSp| A| R| S| T| D| H| N| E| I| O| '|Return | - * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| K| M| ,| ,| /|Shift | - * |-----------------------------------------------------------| - * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| - * `----------------------------------------------------------' - */ - KEYMAP_ALL( - F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, - TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO, - BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY, - LSFT,NUBS,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE, - LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT - ), - - /* Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard - * ,-----------------------------------------------------------. - * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backspa| - * |-----------------------------------------------------------| - * |Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| \| - * |-----------------------------------------------------------| - * |BackSp| A| O| E| U| I| D| H| T| N| S| -|Return | - * |-----------------------------------------------------------| - * |Shift | ;| Q| J| K| X| B| M| Wl V| Z|Shift | - * |-----------------------------------------------------------| - * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| - * `-----------------------------------------------------------' - */ - KEYMAP_ALL( - F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, - TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO, - CAPS,A, O, E, U, I, D, H, T, N, S, MINS, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY, - LSFT,NUBS,SCLN,Q, J, K, X, B, M, W, V, Z, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE, - LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT - ), - - /* Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/ - * ,-----------------------------------------------------------. - * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| - * |-----------------------------------------------------------| - * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| - * |-----------------------------------------------------------| - * |CapsLo| A| S| H| T| G| Y| N| E| O| I| '|Return | - * |-----------------------------------------------------------| - * |Shift | Z| X| M| C| V| K| L| ,| ,| /|Shift | - * |-----------------------------------------------------------| - * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| - * `-----------------------------------------------------------' - */ - KEYMAP_ALL( - F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, - TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO, - CAPS,A, S, H, T, G, Y, N, E, O, I, QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY, - LSFT,NUBS,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE, - LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT - ), - - -/* - * SpaceFN layout - * http://geekhack.org/index.php?topic=51069.0 - */ -const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* 0: plain Qwerty - * ,---------------. ,---------------. ,---------------. - * |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24| - * ,---. |---------------| |---------------| |---------------| ,-----------. ,---------------. ,-------. - * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|Pwr| | Help | - * `---' `---------------' `---------------' `---------------' `-----------' `---------------' `-------' - * ,-----------------------------------------------------------. ,-----------. ,---------------. ,-------. - * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |Stp|Agn| - * |-----------------------------------------------------------| |-----------| |---------------| |-------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |Mnu|Und| - * |-----------------------------------------------------------| `-----------' |---------------| |-------| - * |LCtrl | A| S| D| F| G| H| J| K| L| ;| :| #|Retn| | 4| 5| 6|KP,| |Sel|Cpy| - * |-----------------------------------------------------------| ,---. |---------------| |-------| - * |Shft| <| Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|KP=| |Exe|Pst| - * |-----------------------------------------------------------| ,-----------. |---------------| |-------| - * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut| - * `-----------------------------------------------------------' `-----------' `---------------' `-------' - */ - [0] = KEYMAP_ALL( - F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, - ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO, - LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY, - LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE, - LCTL,LGUI,LALT,MHEN,HANJ, FN0, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT - ), - - /* 1: SpaceFN - * ,-----------------------------------------------------------. - * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete | - * |-----------------------------------------------------------| - * |Caps | | |Esc| | | |Hom|Up |End|Psc|Slk|Pau|Ins | - * |-----------------------------------------------------------| - * | | | | | | |PgU|Lef|Dow|Rig| | | | - * |-----------------------------------------------------------| - * | | | | | |Spc|PgD|` |~ | |Men| | - * |-----------------------------------------------------------| - * | | | | | | | | | - * `-----------------------------------------------------------' - */ - [1] = KEYMAP_ALL( - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, - TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, - GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, - CAPS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS, INS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, - TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS - ), -}; - -const action_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE), - [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde -}; - -#endif From 3d767e4aab5a6c87cb334a22ffaa9b6ad8e76393 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 10:37:50 -0700 Subject: [PATCH 070/269] Disable Moueskeys to reduce Vitamins Included firmware size --- keyboards/vitamins_included/config.h | 2 +- keyboards/vitamins_included/rules.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/vitamins_included/config.h b/keyboards/vitamins_included/config.h index abbb310563..bcaf777c77 100644 --- a/keyboards/vitamins_included/config.h +++ b/keyboards/vitamins_included/config.h @@ -23,5 +23,5 @@ along with this program. If not, see . #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION -#define DISABLE_LEADER + diff --git a/keyboards/vitamins_included/rules.mk b/keyboards/vitamins_included/rules.mk index 8ac39dffbc..4f6d497a6b 100644 --- a/keyboards/vitamins_included/rules.mk +++ b/keyboards/vitamins_included/rules.mk @@ -53,7 +53,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = no # Commands for debug and configuration From 20a10bd0846d502069203419f57e36fd7467df5e Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 28 Sep 2018 19:23:13 -0700 Subject: [PATCH 071/269] Size fix for Hadron, take 2 (#4009) * Add Link Time Optimization to reduce firmware size * Disable Mousekeys on Hadron to save room --- keyboards/hadron/keymaps/default/rules.mk | 2 +- keyboards/hadron/rules.mk | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/keyboards/hadron/keymaps/default/rules.mk b/keyboards/hadron/keymaps/default/rules.mk index 4d08544f3a..545ffa75c1 100644 --- a/keyboards/hadron/keymaps/default/rules.mk +++ b/keyboards/hadron/keymaps/default/rules.mk @@ -5,7 +5,7 @@ # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = no # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = no # Commands for debug and configuration diff --git a/keyboards/hadron/rules.mk b/keyboards/hadron/rules.mk index 1f835e0660..2a8b780450 100644 --- a/keyboards/hadron/rules.mk +++ b/keyboards/hadron/rules.mk @@ -71,3 +71,5 @@ SRC = i2c.c \ ssd1306.c DEFAULT_FOLDER = hadron/ver2 + +EXTRAFLAGS += -flto From daf0cc60bff54be948c923cdc40aa80b82a27f6d Mon Sep 17 00:00:00 2001 From: patrickmt <40182064+patrickmt@users.noreply.github.com> Date: Fri, 28 Sep 2018 22:34:56 -0400 Subject: [PATCH 072/269] CTRL keyboard bootloader_jump support Adds support for CTRL keyboards to enter bootloader via bootloader_jump() --- .../1.0.70/gcc/gcc/samd51j18a_flash.ld | 3 ++ tmk_core/common/arm_atsam/bootloader.c | 32 ++++++++++--------- tmk_core/protocol/arm_atsam/md_bootloader.h | 7 ++++ tmk_core/protocol/arm_atsam/startup.c | 11 +++++++ 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/lib/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld b/lib/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld index 35db619717..1c63547863 100644 --- a/lib/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld +++ b/lib/arm_atsam/packs/atmel/SAMD51_DFP/1.0.70/gcc/gcc/samd51j18a_flash.ld @@ -51,6 +51,9 @@ HEAP_SIZE = DEFINED(HEAP_SIZE) ? HEAP_SIZE : DEFINED(__heap_size__) ? __heap_siz _srom = ORIGIN(rom); _lrom = LENGTH(rom); _erom = ORIGIN(rom) + LENGTH(rom); +_sram = ORIGIN(ram); +_lram = LENGTH(ram); +_eram = ORIGIN(ram) + LENGTH(ram); /* Section Definitions */ SECTIONS diff --git a/tmk_core/common/arm_atsam/bootloader.c b/tmk_core/common/arm_atsam/bootloader.c index 9701a62196..ba71bfeb0b 100644 --- a/tmk_core/common/arm_atsam/bootloader.c +++ b/tmk_core/common/arm_atsam/bootloader.c @@ -16,25 +16,27 @@ #include "bootloader.h" #include "samd51j18a.h" +#include "md_bootloader.h" //Set watchdog timer to reset. Directs the bootloader to stay in programming mode. -void bootloader_jump(void) -{ - //Keyboards released with certain bootloader can not enter bootloader from app until workaround is created - uint8_t ver_no_jump[] = "v2.18Jun 22 2018 17:28:08"; - uint8_t *ver_check = ver_no_jump; - uint8_t *boot_check = (uint8_t *)0x21A0; - while (*ver_check && *boot_check == *ver_check) - { - ver_check++; - boot_check++; +void bootloader_jump(void) { +#ifdef KEYBOARD_massdrop_ctrl + //CTRL keyboards released with bootloader version below must use RAM method. Otherwise use WDT method. + uint8_t ver_ram_method[] = "v2.18Jun 22 2018 17:28:08"; //The version to match (NULL terminated by compiler) + uint8_t *ver_check = ver_ram_method; //Pointer to version match string for traversal + uint8_t *ver_rom = (uint8_t *)0x21A0; //Pointer to address in ROM where this specific bootloader version would exist + + while (*ver_check && *ver_rom == *ver_check) { //While there are check version characters to match and bootloader's version matches check's version + ver_check++; //Move check version pointer to next character + ver_rom++; //Move ROM version pointer to next character } - if (!*ver_check) - { - //Version match - //Software workaround would go here - return; //No software restart method implemented... must use hardware reset button + + if (!*ver_check) { //If check version pointer is NULL, all characters have matched + *MAGIC_ADDR = BOOTLOADER_MAGIC; //Set magic number into RAM + NVIC_SystemReset(); //Perform system reset + while (1) {} //Won't get here } +#endif WDT->CTRLA.bit.ENABLE = 0; while (WDT->SYNCBUSY.bit.ENABLE) {} diff --git a/tmk_core/protocol/arm_atsam/md_bootloader.h b/tmk_core/protocol/arm_atsam/md_bootloader.h index 1316876c84..956145c313 100644 --- a/tmk_core/protocol/arm_atsam/md_bootloader.h +++ b/tmk_core/protocol/arm_atsam/md_bootloader.h @@ -7,6 +7,13 @@ extern uint32_t _erom; #define BOOTLOADER_SERIAL_MAX_SIZE 20 //DO NOT MODIFY! +#ifdef KEYBOARD_massdrop_ctrl +//WARNING: These are only for CTRL bootloader release "v2.18Jun 22 2018 17:28:08" for bootloader_jump support +extern uint32_t _eram; +#define BOOTLOADER_MAGIC 0x3B9ACA00 +#define MAGIC_ADDR (uint32_t *)(&_eram - 4) +#endif + #ifdef MD_BOOTLOADER #define MCU_HZ 48000000 diff --git a/tmk_core/protocol/arm_atsam/startup.c b/tmk_core/protocol/arm_atsam/startup.c index a62d02f1ca..f29fac179b 100644 --- a/tmk_core/protocol/arm_atsam/startup.c +++ b/tmk_core/protocol/arm_atsam/startup.c @@ -28,6 +28,7 @@ */ #include "samd51.h" +#include "md_bootloader.h" /* Initialize segments */ extern uint32_t _sfixed; @@ -500,6 +501,16 @@ const DeviceVectors exception_table = { */ void Reset_Handler(void) { +#ifdef KEYBOARD_massdrop_ctrl + /* WARNING: This is only for CTRL bootloader release "v2.18Jun 22 2018 17:28:08" for bootloader_jump support */ + if (*MAGIC_ADDR == BOOTLOADER_MAGIC) { + /* At this point, the bootloader's memory is initialized properly, so undo the jump to here, then jump back */ + *MAGIC_ADDR = 0x00000000; /* Change value to prevent potential bootloader entrance loop */ + __set_MSP(0x20008818); /* MSP according to bootloader */ + SCB->VTOR = 0x00000000; /* Vector table back to bootloader's */ + asm("bx %0"::"r"(0x00001267)); /* Jump past bootloader RCAUSE check using THUMB */ + } +#endif uint32_t *pSrc, *pDest; /* Initialize the relocate segment */ From 9f8bbe2f3f30c39f1ed44a6a2de63f39b405391f Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Sat, 29 Sep 2018 08:47:16 -0700 Subject: [PATCH 073/269] Keyboard: converter/hp_46010a: Configurator support (#4017) --- keyboards/converter/hp_46010a/info.json | 115 ++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/keyboards/converter/hp_46010a/info.json b/keyboards/converter/hp_46010a/info.json index de68a12285..91dcf97ecc 100644 --- a/keyboards/converter/hp_46010a/info.json +++ b/keyboards/converter/hp_46010a/info.json @@ -3,4 +3,119 @@ "keyboard_folder": "converter/HP_46010A", "url": "https://deskthority.net/wiki/HP_46010A", "maintainer": "listofoptions", + "width": 22, + "height": 7, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"Reset", "x":0, "y":0}, + {"label":"Stop", "x":1, "y":0}, + {"label":"F1", "x":2.5, "y":0, "w":1.25}, + {"label":"F2", "x":3.75, "y":0, "w":1.25}, + {"label":"F3", "x":5, "y":0, "w":1.25}, + {"label":"F4", "x":6.25, "y":0, "w":1.25}, + {"label":"Menu", "x":7.5, "y":0}, + {"label":"User", "x":8.5, "y":0}, + {"label":"F5", "x":9.5, "y":0, "w":1.25}, + {"label":"F6", "x":10.75, "y":0, "w":1.25}, + {"label":"F7", "x":12, "y":0, "w":1.25}, + {"label":"F8", "x":13.25, "y":0, "w":1.25}, + {"label":"Clear line", "x":15, "y":0}, + {"label":"Clear display", "x":16, "y":0}, + {"x":18, "y":0}, + {"x":19, "y":0}, + {"x":20, "y":0}, + {"x":21, "y":0}, + {"label":"`", "x":0, "y":2, "w":1.25}, + {"label":"1", "x":1.25, "y":2}, + {"label":"2", "x":2.25, "y":2}, + {"label":"3", "x":3.25, "y":2}, + {"label":"4", "x":4.25, "y":2}, + {"label":"5", "x":5.25, "y":2}, + {"label":"6", "x":6.25, "y":2}, + {"label":"7", "x":7.25, "y":2}, + {"label":"8", "x":8.25, "y":2}, + {"label":"9", "x":9.25, "y":2}, + {"label":"0", "x":10.25, "y":2}, + {"label":"-", "x":11.25, "y":2}, + {"label":"=", "x":12.25, "y":2}, + {"label":"Backspace", "x":13.25, "y":2, "w":1.5}, + {"label":"Insert line", "x":15, "y":2}, + {"label":"Delete line", "x":16, "y":2}, + {"label":"*", "x":18, "y":2}, + {"label":"/", "x":19, "y":2}, + {"label":"+", "x":20, "y":2}, + {"label":"-", "x":21, "y":2}, + {"label":"Tab", "x":0, "y":3, "w":1.75}, + {"label":"Q", "x":1.75, "y":3}, + {"label":"W", "x":2.75, "y":3}, + {"label":"E", "x":3.75, "y":3}, + {"label":"R", "x":4.75, "y":3}, + {"label":"T", "x":5.75, "y":3}, + {"label":"Y", "x":6.75, "y":3}, + {"label":"U", "x":7.75, "y":3}, + {"label":"I", "x":8.75, "y":3}, + {"label":"O", "x":9.75, "y":3}, + {"label":"P", "x":10.75, "y":3}, + {"label":"[", "x":11.75, "y":3}, + {"label":"]", "x":12.75, "y":3}, + {"label":"\\", "x":13.75, "y":3}, + {"label":"Insert char", "x":15, "y":3}, + {"label":"Delete char", "x":16, "y":3}, + {"label":"7", "x":18, "y":3}, + {"label":"8", "x":19, "y":3}, + {"label":"9", "x":20, "y":3}, + {"label":"Enter", "x":21, "y":3}, + {"label":"Caps Lock", "x":0, "y":4}, + {"label":"Ctrl", "x":1, "y":4}, + {"label":"A", "x":2, "y":4}, + {"label":"S", "x":3, "y":4}, + {"label":"D", "x":4, "y":4}, + {"label":"F", "x":5, "y":4}, + {"label":"G", "x":6, "y":4}, + {"label":"H", "x":7, "y":4}, + {"label":"J", "x":8, "y":4}, + {"label":"K", "x":9, "y":4}, + {"label":"L", "x":10, "y":4}, + {"label":";", "x":11, "y":4}, + {"label":"'", "x":12, "y":4}, + {"label":"Return", "x":13, "y":4, "w":1.75}, + {"label":"Cursor", "x":15, "y":4}, + {"label":"Prev", "x":16, "y":4}, + {"label":"4", "x":18, "y":4}, + {"label":"5", "x":19, "y":4}, + {"label":"6", "x":20, "y":4}, + {"label":",", "x":21, "y":4}, + {"label":"Del", "x":0, "y":5}, + {"label":"Shift", "x":1.25, "y":5, "w":1.25}, + {"label":"Z", "x":2.5, "y":5}, + {"label":"X", "x":3.5, "y":5}, + {"label":"C", "x":4.5, "y":5}, + {"label":"V", "x":5.5, "y":5}, + {"label":"B", "x":6.5, "y":5}, + {"label":"N", "x":7.5, "y":5}, + {"label":"M", "x":8.5, "y":5}, + {"label":",", "x":9.5, "y":5}, + {"label":".", "x":10.5, "y":5}, + {"label":"/", "x":11.5, "y":5}, + {"label":"Shift", "x":12.5, "y":5, "w":1.25}, + {"label":"Select", "x":14, "y":5}, + {"label":"Up", "x":15, "y":5}, + {"label":"Next", "x":16, "y":5}, + {"label":"1", "x":18, "y":5}, + {"label":"2", "x":19, "y":5}, + {"label":"3", "x":20, "y":5}, + {"label":"Tab", "x":21, "y":5, "h":2}, + {"label":"Win", "x":0, "y":6}, + {"label":"Extend Char", "x":2.5, "y":6}, + {"x":3.5, "y":6, "w":8}, + {"label":"Extend Char", "x":11.5, "y":6}, + {"label":"Left", "x":14, "y":6}, + {"label":"Down", "x":15, "y":6}, + {"label":"Right", "x":16, "y":6}, + {"label":"0", "x":18, "y":6, "w":2}, + {"label":".", "x":20, "y":6} + ] + } + } } From 1da2f8d5467e5a9b9300437d2afc86d2c1f63370 Mon Sep 17 00:00:00 2001 From: Shaleen Jain Date: Sat, 29 Sep 2018 21:19:51 +0530 Subject: [PATCH 074/269] Keymap: tada68: add shalzz's layout (#4019) --- keyboards/tada68/keymaps/shalzz/config.h | 4 ++ keyboards/tada68/keymaps/shalzz/keymap.c | 53 +++++++++++++++++++++++ keyboards/tada68/keymaps/shalzz/readme.md | 43 ++++++++++++++++++ keyboards/tada68/keymaps/shalzz/rules.mk | 12 +++++ 4 files changed, 112 insertions(+) create mode 100644 keyboards/tada68/keymaps/shalzz/config.h create mode 100644 keyboards/tada68/keymaps/shalzz/keymap.c create mode 100644 keyboards/tada68/keymaps/shalzz/readme.md create mode 100644 keyboards/tada68/keymaps/shalzz/rules.mk diff --git a/keyboards/tada68/keymaps/shalzz/config.h b/keyboards/tada68/keymaps/shalzz/config.h new file mode 100644 index 0000000000..3214a33fb4 --- /dev/null +++ b/keyboards/tada68/keymaps/shalzz/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define DISABLE_SPACE_CADET_ROLLOVER +#define GRAVE_ESC_ALT_OVERRIDE diff --git a/keyboards/tada68/keymaps/shalzz/keymap.c b/keyboards/tada68/keymaps/shalzz/keymap.c new file mode 100644 index 0000000000..e2b4c170e5 --- /dev/null +++ b/keyboards/tada68/keymaps/shalzz/keymap.c @@ -0,0 +1,53 @@ +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del | + * |----------------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp| + * |----------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |FN |Alt|Ctrl|Lef|Dow|Rig | + * `----------------------------------------------------------------' + * + * Note: Shift + Esc = ~ + * Win + Esc = ` + */ +[_BL] = LAYOUT_ansi( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,KC_DEL, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSPC,KC_UP,KC_PGDN, \ + KC_LCTL, KC_LGUI,KC_LALT, LT(_BL, KC_SPC), MO(_FL),KC_RALT,KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT), + + /* Keymap _FL: Function Layer + * ,----------------------------------------------------------------. + * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |PRSC| + * |----------------------------------------------------------------| + * | | |Up | | | | | | | | | | | |Ins | + * |----------------------------------------------------------------| + * | |<- |Dn | ->| | |<- |Dn |Up | ->| | | |Hme | + * |----------------------------------------------------------------| + * | ( | | |Bl-|BL |BL+| | |VU-|VU+|MUT| ) | |End | + * |----------------------------------------------------------------| + * | | | | | | | | | | | + * `----------------------------------------------------------------' + */ +[_FL] = LAYOUT_ansi( + _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, \ + _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_INS, \ + _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP,KC_RGHT,_______,_______, _______,KC_HOME, \ + KC_LPRN,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,_______,KC_VOLD,KC_VOLU,KC_MUTE,KC_RPRN, _______, KC_END, \ + _______,_______,_______, _______, _______,_______,_______,_______,_______, _______), +}; diff --git a/keyboards/tada68/keymaps/shalzz/readme.md b/keyboards/tada68/keymaps/shalzz/readme.md new file mode 100644 index 0000000000..3e4cf60673 --- /dev/null +++ b/keyboards/tada68/keymaps/shalzz/readme.md @@ -0,0 +1,43 @@ +# Shalzz's Unix layout + +This layout is based on the Unix Layout with a few changes. + +``` + Base Layer +,----------------------------------------------------------------. +|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | +|----------------------------------------------------------------| +|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del | +|----------------------------------------------------------------| +|CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp| +|----------------------------------------------------------------| +|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| +|----------------------------------------------------------------| +|Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig | +`----------------------------------------------------------------' +Note: Shift + Esc = ~ + Win + Esc = ` + Fn + LShift = ( + Fn + RShift = ) + + Fn Layer +,----------------------------------------------------------------. +| | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |PRSC| +|----------------------------------------------------------------| +| | |Up | | | | | | | | | | | |Ins | +|----------------------------------------------------------------| +| |<- |Dn | ->| | |<- |Dn |Up | ->| | | |Hme | +|----------------------------------------------------------------| +| ( | | |Bl-|BL |BL+| | |VU-|VU+|MUT| ) | |End | +|----------------------------------------------------------------| +| | | | | | | | | | | +`----------------------------------------------------------------' + +``` + +The changes that were applied over the Unix layout: + +* Left and Right Shift when pressed alone emit `(` and `)` respectively. Hold shift for normal behaviour. +* Fn + Left and Right Shift also act as actual `(` and `)` keys respectively. +* Changed PrintSc to `Fn+`` +* Fixed Holding down space activating the function layer instead of the lower layer. diff --git a/keyboards/tada68/keymaps/shalzz/rules.mk b/keyboards/tada68/keymaps/shalzz/rules.mk new file mode 100644 index 0000000000..1df3af955d --- /dev/null +++ b/keyboards/tada68/keymaps/shalzz/rules.mk @@ -0,0 +1,12 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +AUDIO_ENABLE = no # Audio output on port C6 +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend From 4f6495108087da13d7ee44c1f6ced03ebdfb934d Mon Sep 17 00:00:00 2001 From: marksard <38324387+marksard@users.noreply.github.com> Date: Sun, 30 Sep 2018 02:25:03 +0900 Subject: [PATCH 075/269] Keymap: Fixed a possible of buffer overflow. (#4016) Update inline funnction to static inline function. Fixed error of if enabe ADJUST_MACRO_ENABLE. --- .../helix/rev2/keymaps/five_rows_jis/keymap.c | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c b/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c index 141b222753..df00366e39 100644 --- a/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c +++ b/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c @@ -214,7 +214,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #endif #ifdef SSD1306OLED -char keylog[20] = {}; +char keylog[24] = {}; const char code_to_name[60] = { ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', @@ -223,7 +223,7 @@ const char code_to_name[60] = { 'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ', ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '}; -inline void set_keylog(uint16_t keycode, keyrecord_t *record) +static inline void set_keylog(uint16_t keycode, keyrecord_t *record) { char name = ' '; uint8_t leds = host_keyboard_leds(); @@ -246,6 +246,12 @@ inline void set_keylog(uint16_t keycode, keyrecord_t *record) } #endif +#ifdef RGBLIGHT_ENABLE +#define RGBLIGHT(mode) rgblight_mode(mode) +#else +#define RGBLIGHT(mode) +#endif + // define variables for reactive RGB int RGB_current_mode; #ifdef ADJUST_MACRO_ENABLE @@ -263,12 +269,6 @@ void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { #define ADJUST_MACRO(layer1, layer2, layer3) #endif -#ifdef RGBLIGHT_ENABLE -#define RGBLIGHT(mode) rgblight_mode(mode) -#else -#define RGBLIGHT(mode) -#endif - bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef SSD1306OLED if (record->event.pressed) { @@ -344,7 +344,7 @@ void matrix_scan_user(void) { iota_gfx_task(); // this is what updates the display continuously } -inline void matrix_update(struct CharacterMatrix *dest, +static inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { if (memcmp(dest->display, source->display, sizeof(dest->display))) { memcpy(dest->display, source->display, sizeof(dest->display)); @@ -367,13 +367,15 @@ const char helix_logo[]={ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4, 0}; -inline void render_logo(struct CharacterMatrix *matrix) { + +static inline void render_logo(struct CharacterMatrix *matrix) { matrix_write(matrix, helix_logo); } const char mac_win_logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}}; -inline void render_status(struct CharacterMatrix *matrix) { + +static inline void render_status(struct CharacterMatrix *matrix) { char buf[20]; // Render to mode icon From cd215209efb0e236b691b51c3397495d4449623b Mon Sep 17 00:00:00 2001 From: Takeshi ISHII <2170248+mtei@users.noreply.github.com> Date: Sun, 30 Sep 2018 02:40:54 +0900 Subject: [PATCH 076/269] Helix led_test keymap reduce size (#4023) * Helix: make rgblight modes selectable. No change in build result. * edit the comment of helix/rev2/keymaps/default/keymap.c * Helix led_test keymap: reduced the size. --- keyboards/helix/config.h | 13 +++++++++++++ keyboards/helix/rev2/keymaps/default/keymap.c | 2 +- keyboards/helix/rev2/keymaps/led_test/config.h | 16 +++++++++++++--- .../helix/rev2/keymaps/led_test/led_test_init.c | 4 ++-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/keyboards/helix/config.h b/keyboards/helix/config.h index fbfbd32804..b79093d871 100644 --- a/keyboards/helix/config.h +++ b/keyboards/helix/config.h @@ -48,4 +48,17 @@ along with this program. If not, see . #define DISABLE_LEADER #endif // USE_Link_Time_Optimization +#if defined(LED_ANIMATIONS) || defined(RGBLIGHT_ANIMATIONS) + #undef RGBLIGHT_ANIMATIONS + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + #define RGBLIGHT_EFFECT_RGB_TEST + #define RGBLIGHT_EFFECT_ALTERNATING +#endif + #endif /* CONFIG_H */ diff --git a/keyboards/helix/rev2/keymaps/default/keymap.c b/keyboards/helix/rev2/keymaps/default/keymap.c index dca9be9a47..087bd8e517 100644 --- a/keyboards/helix/rev2/keymaps/default/keymap.c +++ b/keyboards/helix/rev2/keymaps/default/keymap.c @@ -512,7 +512,7 @@ void music_scale_user(void) // hook point for 'led_test' keymap // 'default' keymap's led_test_init() is empty function, do nothing -// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(35); +// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST); __attribute__ ((weak)) void led_test_init(void) {} diff --git a/keyboards/helix/rev2/keymaps/led_test/config.h b/keyboards/helix/rev2/keymaps/led_test/config.h index 0438254528..094195fc6e 100644 --- a/keyboards/helix/rev2/keymaps/led_test/config.h +++ b/keyboards/helix/rev2/keymaps/led_test/config.h @@ -21,9 +21,19 @@ along with this program. If not, see . #ifndef CONFIG_USER_H #define CONFIG_USER_H -// if you need more program area, try uncomment follow line -#include "serial_config_simpleapi.h" - // place overrides here +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#undef RGBLIGHT_EFFECT_BREATHING +#undef RGBLIGHT_EFFECT_RAINBOW_MOOD +#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL +#undef RGBLIGHT_EFFECT_SNAKE +#undef RGBLIGHT_EFFECT_KNIGHT +#undef RGBLIGHT_EFFECT_CHRISTMAS +#undef RGBLIGHT_EFFECT_STATIC_GRADIENT +//#undef RGBLIGHT_EFFECT_RGB_TEST // led_test keymap need only this. +#undef RGBLIGHT_EFFECT_ALTERNATING + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/led_test/led_test_init.c b/keyboards/helix/rev2/keymaps/led_test/led_test_init.c index 1d9cb4ebde..85f5d1aa7e 100644 --- a/keyboards/helix/rev2/keymaps/led_test/led_test_init.c +++ b/keyboards/helix/rev2/keymaps/led_test/led_test_init.c @@ -5,7 +5,7 @@ void led_test_init(void) { static int scan_count = 0; if( scan_count == 2 ) { rgblight_enable_noeeprom(); - rgblight_mode_noeeprom(35); + rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST); } if( scan_count < 3 ) scan_count ++; } @@ -15,6 +15,6 @@ void led_test_init(void) { // can use this? void startup_user(void) { rgblight_enable_noeeprom(); - rgblight_mode_noeeprom(35); + rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST); } #endif From 68854f0735ecfa69e383c1f7c93211a6ad89e13b Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Sat, 29 Sep 2018 12:44:12 -0700 Subject: [PATCH 077/269] Keyboard: converter/hp_46010a: rename layout macro to LAYOUT (#4024) Messed up in my previous PR (#4017) by providing the wrong matrix name. Fixing by changing the matrix name instead, because there's only one at this point. Thought it made more sense this way. --- keyboards/converter/hp_46010a/hp_46010a.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/keyboards/converter/hp_46010a/hp_46010a.h b/keyboards/converter/hp_46010a/hp_46010a.h index db64ce24a5..fd5adfc639 100644 --- a/keyboards/converter/hp_46010a/hp_46010a.h +++ b/keyboards/converter/hp_46010a/hp_46010a.h @@ -35,7 +35,7 @@ along with this program. If not, see . * `-----------------------------------------------------------------------------------' `-------------------' */ -#define LAYOUT_HP_46010A( \ +#define LAYOUT( \ KEY_RES, KEY_STOP, KEY_F1, KEY_F2, KEY_F3, KEY_F4,KEY_MENU,KEY_USER, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_CLRL, KEY_CLRD, KEY_B1, KEY_B2, KEY_B3, KEY_B4, \ KEY_GRAV, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINU, KEY_PLUS, KEY_BACK, KEY_INSL, KEY_DELL, KEY_MULT, KEY_DIV, KEY_ADD, KEY_SUBT, \ KEY_TAB, KEY_Q,KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_LBRA, KEY_RBRA, KEY_PIPE, KEY_INSC, KEY_DELC, KEY_P7, KEY_P8, KEY_P9, KEY_PADE, \ @@ -58,5 +58,3 @@ along with this program. If not, see . {KEY_B1, KEY_P0, KEY_B2, KC_NO, KEY_B3, KEY_PDOT, KEY_B4, KC_NO }, \ {KEY_B, KEY_V, KEY_C, KEY_X, KEY_Z, KEY_PRNT, KEY_DELE, KEY_N }, \ } - -#define LAYOUT LAYOUT_HP_46010A From 92d95ba1e1223538f8c16fe2d17a23fa0dd67725 Mon Sep 17 00:00:00 2001 From: izzy84075 Date: Sat, 29 Sep 2018 12:44:54 -0700 Subject: [PATCH 078/269] Keyboard: Add basic support for the YD68 / YD68v2 PCBs. (#4020) * Add basic support for the YD68 / YD68v2. Keymap and WS2812 underlighting work. Capslock LED should work, though I don't have one populated to test. Backlight LEDs are not set up, as they're not on a hardware PWM pin, could be set up as software. * Fix Imgur link * Fix default keymap to match the stock firmware * Fix the Hardware Supported line and add a short description --- keyboards/yd68/config.h | 224 +++++++++++++++++++++++ keyboards/yd68/info.json | 13 ++ keyboards/yd68/keymaps/default/config.h | 19 ++ keyboards/yd68/keymaps/default/keymap.c | 65 +++++++ keyboards/yd68/keymaps/default/readme.md | 1 + keyboards/yd68/readme.md | 15 ++ keyboards/yd68/rules.mk | 81 ++++++++ keyboards/yd68/yd68.c | 73 ++++++++ keyboards/yd68/yd68.h | 62 +++++++ 9 files changed, 553 insertions(+) create mode 100644 keyboards/yd68/config.h create mode 100644 keyboards/yd68/info.json create mode 100644 keyboards/yd68/keymaps/default/config.h create mode 100644 keyboards/yd68/keymaps/default/keymap.c create mode 100644 keyboards/yd68/keymaps/default/readme.md create mode 100644 keyboards/yd68/readme.md create mode 100644 keyboards/yd68/rules.mk create mode 100644 keyboards/yd68/yd68.c create mode 100644 keyboards/yd68/yd68.h diff --git a/keyboards/yd68/config.h b/keyboards/yd68/config.h new file mode 100644 index 0000000000..1b4d7f7a13 --- /dev/null +++ b/keyboards/yd68/config.h @@ -0,0 +1,224 @@ +/* +Copyright 2018 Ryan "Izzy" Bales + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0002 +#define MANUFACTURER YANG +#define PRODUCT YD68v2 +#define DESCRIPTION 65% board with Bluetooth + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B5, C6, C7, D7, B4 } +#define MATRIX_COL_PINS { B6, F7, F6, F5, F4, F1, F0, E6, B0, B7, D0, D1, D2, D3, D5 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + +#define RGB_DI_PIN B3 +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 10 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + diff --git a/keyboards/yd68/info.json b/keyboards/yd68/info.json new file mode 100644 index 0000000000..b392f03865 --- /dev/null +++ b/keyboards/yd68/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "YD68", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 5, + "layouts": { + "LAYOUT_ansi": { + "key_count": 68, + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Win", "x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + } + } +} \ No newline at end of file diff --git a/keyboards/yd68/keymaps/default/config.h b/keyboards/yd68/keymaps/default/config.h new file mode 100644 index 0000000000..405f935500 --- /dev/null +++ b/keyboards/yd68/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 Ryan "Izzy" Bales + * + * 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 + +// place overrides here diff --git a/keyboards/yd68/keymaps/default/keymap.c b/keyboards/yd68/keymaps/default/keymap.c new file mode 100644 index 0000000000..290aa0d61e --- /dev/null +++ b/keyboards/yd68/keymaps/default/keymap.c @@ -0,0 +1,65 @@ +/* Copyright 2018 Ryan "Izzy" Bales + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + YD68_BT_PWR = SAFE_RANGE, + YD68_RGB_PWR, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_ansi( /* Base */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_HOME, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,KC_END, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGUP, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,KC_UP, KC_PGDN, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_RCTRL,KC_LEFT,KC_DOWN,KC_RGHT \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case YD68_BT_PWR: + if (record->event.pressed) { + // when keycode YD68_BT_PWR is pressed + } else { + // when keycode YD68_BT_PWR is released + } + break; + case YD68_RGB_PWR: + if (record->event.pressed) { + // when keycode YD68_RGB_PWR is pressed + PORTE ^= (1<<2); + } else { + // when keycode YD68_RGB_PWR is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/yd68/keymaps/default/readme.md b/keyboards/yd68/keymaps/default/readme.md new file mode 100644 index 0000000000..877e64f18b --- /dev/null +++ b/keyboards/yd68/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for yd68 \ No newline at end of file diff --git a/keyboards/yd68/readme.md b/keyboards/yd68/readme.md new file mode 100644 index 0000000000..7e5e83bcc9 --- /dev/null +++ b/keyboards/yd68/readme.md @@ -0,0 +1,15 @@ +# yd68 + +[yd68](https://imgur.com/gallery/Ygo668L) + +A 68-key board with RGB underlighting and bluetooth. + +Keyboard Maintainer: [Izzy84075](https://github.com/izzy84075) +Hardware Supported: YD68/YD68v2 +Hardware Availability: [KBDFans](https://kbdfans.cn/collections/diy-kit/products/yd68-65-bluetooth-custom-keyboard-pcb) + +Make example for this keyboard (after setting up your build environment): + + make yd68:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/yd68/rules.mk b/keyboards/yd68/rules.mk new file mode 100644 index 0000000000..197402e8ab --- /dev/null +++ b/keyboards/yd68/rules.mk @@ -0,0 +1,81 @@ +# MCU name +#MCU = at90usb1286 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) diff --git a/keyboards/yd68/yd68.c b/keyboards/yd68/yd68.c new file mode 100644 index 0000000000..f34661dd37 --- /dev/null +++ b/keyboards/yd68/yd68.c @@ -0,0 +1,73 @@ +/* Copyright 2018 Ryan "Izzy" Bales + * + * 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 "yd68.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + //Capslock LED Output Low + DDRD |= (1<<4); + PORTD &= ~(1<<4); + + //Backlight LEDs Output Low + DDRD |= (1<<6); + PORTD &= ~(1<<6); + + //RGB power output low + DDRE |= (1<<2); + PORTE &= ~(1<<2); + + //Bluetooth power output high + DDRB |= (1<<2); + PORTB |= (1<<2); + + //RGB data output low + DDRB |= (1<<3); + PORTB &= ~(1<<3); + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + if (usb_led & (1<. + */ +#ifndef YD68_H +#define YD68_H + +#include "quantum.h" + +#define XXX KC_NO + +/* This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +/* YD68 ANSI layout + * ,----------------------------------------------------------------. + * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0e | 48 | + * |----------------------------------------------------------------| + * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | 1e | + * |----------------------------------------------------------------| + * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | 2e | + * |----------------------------------------------------------------| + * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c | 3d| 3e | + * |----------------------------------------------------------------| + * | 40 | 41 | 42 | 46 | 49| 4a| 4b| 4c| 4d| 4e | + * `----------------------------------------------------------------' + */ +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array + +#define LAYOUT_ansi( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k48, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \ + k40, k41, k42, k46, k49, k4a, k4b, k4c, k4d, k4e \ +) \ +{ \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, XXX, k0e}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e}, \ + {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \ + {k40, k41, k42, XXX, XXX, XXX, k46, XXX, k48, k49, k4a, k4b, k4c, k4d, k4e} \ +} + +#endif From 170507896d4d7fe12e1fa2c31ab8589e4cbdf7ba Mon Sep 17 00:00:00 2001 From: Yan-Fa Li Date: Sat, 29 Sep 2018 16:16:21 -0700 Subject: [PATCH 079/269] Keyboard: Update info.json to match LAYOUT (#4027) * Update info.json to match LAYOUT * update mf68_ble info.json LAYOUT -> LAYOUT_68_ansi --- keyboards/mf68/info.json | 2 +- keyboards/mf68_ble/info.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/mf68/info.json b/keyboards/mf68/info.json index d41c2176a9..fae15aaf5f 100644 --- a/keyboards/mf68/info.json +++ b/keyboards/mf68/info.json @@ -5,7 +5,7 @@ "width": 17.25, "height": 5, "layouts": { - "LAYOUT": { + "LAYOUT_68_ansi": { "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}] } } diff --git a/keyboards/mf68_ble/info.json b/keyboards/mf68_ble/info.json index 1f8aaed924..4cd9b2c83c 100644 --- a/keyboards/mf68_ble/info.json +++ b/keyboards/mf68_ble/info.json @@ -5,7 +5,7 @@ "width": 17.25, "height": 5, "layouts": { - "LAYOUT": { + "LAYOUT_68_ansi": { "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}] } } From 3875d6f5815bf263cb3ee5d18b74c5ec8ab865f2 Mon Sep 17 00:00:00 2001 From: Alexander Kagno Date: Sat, 29 Sep 2018 18:51:06 -0600 Subject: [PATCH 080/269] Keymap: Added Leader Key Functionality (#4025) * deleting arkag branch, forcibly moving changes over to master * fade_color function added, not tested * added half functions some stuff * surround_type function implemented and working. * added flashing function and removed fading, flashing supports infinite flashing along with controlled number flashes * added a fade state machine and functionality * build optimizations, changed fade to bounce between bounds rather than roll over, added a HALMAK layout * changes to sleep breath function, changed how I will switch to HALMAK * support for halmak added * support for activity detection added, condensed fading and flashing state machines, removed support for HALMAK and COLEMAK because arkag is stupid * changed sleep and inactive behaviors, now the color shifting reverses on state change, yay! save_color and reset_color are made to enable layer color changing to look cooler. * reformatted some if statements in state detection * changes to force fade to pause on boot, or plug in. * Attempting to move over to userspace, pushing to repository for help * userspace stuff.... * userspace stuff.... * layout changes, working userspace, Removed left side shift and replaced it with a MT() for LSFT and SPC. Userspace seems to be working properly now! HURRAY * Layout change Removed space/shift and reset modifiers to what they were originally. Added homerow modifiers. * Removed excessive tabs in files * Moved mods on homerow around... * changes recommended by @drashna * removed homerow mods, more flashy lighting! * changed delays for lighting. * velocikey code retro fit into userspace to match typing speed currently "working" but isn't as reactive as I want. * Readme and other documentation hidden throughout code * Added a pretty picture * pretty picture actually added * More readme updates * Velocikey now working inside my userspace! * Changed repo macro and fixed readme * Removed media layer, moved media control to LAZY layer * fixed more merge issues when I had to merge... * implemented some leader key stuff * removed merge garbage... * changes requested by @drashna, leader key switch from macros --- keyboards/mechmini/v2/keymaps/arkag/config.h | 2 +- keyboards/mechmini/v2/keymaps/arkag/keymap.c | 14 +- keyboards/mechmini/v2/keymaps/arkag/rules.mk | 1 + users/arkag/arkag.c | 261 ++++++++----------- users/arkag/config.h | 5 +- 5 files changed, 117 insertions(+), 166 deletions(-) diff --git a/keyboards/mechmini/v2/keymaps/arkag/config.h b/keyboards/mechmini/v2/keymaps/arkag/config.h index f5f3a90fa7..e89adc0978 100644 --- a/keyboards/mechmini/v2/keymaps/arkag/config.h +++ b/keyboards/mechmini/v2/keymaps/arkag/config.h @@ -3,5 +3,5 @@ // save me space! #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION -#define DISABLE_LEADER +// #define DISABLE_LEADER #define NO_MUSIC_MODE diff --git a/keyboards/mechmini/v2/keymaps/arkag/keymap.c b/keyboards/mechmini/v2/keymaps/arkag/keymap.c index 7038f220c4..29e125394b 100644 --- a/keyboards/mechmini/v2/keymaps/arkag/keymap.c +++ b/keyboards/mechmini/v2/keymaps/arkag/keymap.c @@ -8,10 +8,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_2u_space_ortho( - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_LEAD, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, QUOTE, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT, - M_PMOD, LRALT, M_SMOD, LOWER, RAISE, KC_SPC, KC_SLSH, LAZY, KC_LEFT, KC_DOWN, KC_RGHT), + M_PMOD, LRALT, M_SMOD, LOWER, RAISE, KC_SPC, KC_SLSH, KC_BSLS, KC_LEFT, KC_DOWN, KC_RGHT), [_RAISE] = LAYOUT_2u_space_ortho( GRAVE, KC_1, KC_2, THREE, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, @@ -20,10 +20,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, KEEB, _______, _______, _______, M_OS, KC_PSLS, KC_PMNS, KC_PAST), [_LOWER] = LAYOUT_2u_space_ortho( - _______, _______, _______, _______, _______, _______, _______, M_ULIN, M_ITAL, _______, M_P_B, M_C_A_D, - _______, _______, STRIKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_CAPS, KC_DEL, _______, _______, _______, M_BOLD, _______, _______, _______, _______, KC_PGUP, _______, - _______, _______, _______, _______, _______, _______, KC_BSLS, M_CALC, KC_HOME, KC_PGDN, KC_END), + KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, M_P_B, M_C_A_D, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_CAPS, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), [_KEEB] = LAYOUT_2u_space_ortho( KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, @@ -35,5 +35,5 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, M_TM, _______, M_SNIPT, M_SHRUG, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, M_GGT, _______, M_UF, M_LOD, M_REPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, M_TF, M_LENNY, _______, KC_VOLU, KC_MPLY, - _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), + _______, _______, _______, _______, _______, _______, M_CALC, _______, KC_MPRV, KC_VOLD, KC_MNXT), }; diff --git a/keyboards/mechmini/v2/keymaps/arkag/rules.mk b/keyboards/mechmini/v2/keymaps/arkag/rules.mk index d6c210e9e8..c1d5afa1eb 100644 --- a/keyboards/mechmini/v2/keymaps/arkag/rules.mk +++ b/keyboards/mechmini/v2/keymaps/arkag/rules.mk @@ -11,6 +11,7 @@ AUDIO_ENABLE = no RGBLIGHT_ENABLE = yes TAP_DANCE_ENABLE = yes UNICODE_ENABLE = yes +LEADER_ENABLE = yes # save me space! EXTRAFLAGS += -flto diff --git a/users/arkag/arkag.c b/users/arkag/arkag.c index a35e13ed6b..212d06de67 100644 --- a/users/arkag/arkag.c +++ b/users/arkag/arkag.c @@ -370,10 +370,115 @@ void matrix_init_user(void) { set_os(current_os, false); } +LEADER_EXTERNS(); + void matrix_scan_user(void) { check_state(); flash_rgb(); fade_rgb(); + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + // begin OS functions + SEQ_TWO_KEYS(KC_P, KC_B) { + if (current_os == OS_WIN) { + SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_PAUSE) SS_UP(X_LGUI)); + } else { + } + } + SEQ_THREE_KEYS(KC_C, KC_A, KC_D) { + if (current_os == OS_WIN) { + SEND_STRING(SS_DOWN(X_LCTRL) SS_DOWN(X_LALT) SS_TAP(X_DELETE) SS_UP(X_LALT) SS_UP(X_LCTRL)); + } else { + } + } + SEQ_FOUR_KEYS(KC_C, KC_A, KC_L, KC_C) { + if (current_os == OS_WIN) { + SEND_STRING(SS_TAP(X_CALCULATOR)); + } else if (current_os == OS_MAC) { + SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_SPACE) SS_UP(X_LGUI) "calculator" SS_TAP(X_ENTER)); + } + } + // end OS functions + + // begin format functions + SEQ_ONE_KEY(KC_B) { + surround_type(4, KC_8, true); + } + SEQ_ONE_KEY(KC_I) { + surround_type(2, KC_8, true); + } + SEQ_ONE_KEY(KC_U) { + surround_type(4, KC_MINS, true); + } + SEQ_ONE_KEY(KC_S) { + surround_type(4, KC_GRAVE, true); + } + SEQ_TWO_KEYS(KC_S, KC_S) { + if (current_os == OS_MAC) { + long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_4}); + } else if (current_os == OS_WIN) { + long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_S}); + } else { + return; + } + } + SEQ_ONE_KEY(KC_C) { + surround_type(2, KC_GRAVE, false); + } + SEQ_TWO_KEYS(KC_C, KC_C) { + surround_type(6, KC_GRAVE, false); + } + // end format functions + + // start fancy functions + SEQ_THREE_KEYS(KC_C, KC_C, KC_C) { + surround_type(6, KC_GRAVE, false); + pri_mod(true); + tap_key(KC_V); + pri_mod(false); + tap_key(KC_RGHT); + tap_key(KC_RGHT); + tap_key(KC_RGHT); + tap_key(KC_ENTER); + } + // end fancy functions + + // start typing functions + SEQ_TWO_KEYS(KC_T, KC_M) { + // ™ + send_unicode_hex_string("2122"); + } + SEQ_THREE_KEYS(KC_G, KC_G, KC_T) { + SEND_STRING("@GrahamGoldenTech.com"); + } + SEQ_THREE_KEYS(KC_L, KC_O, KC_D) { + // ಠ__ಠ + send_unicode_hex_string("0CA0 005F 005F 0CA0"); + } + SEQ_FOUR_KEYS(KC_R, KC_E, KC_P, KC_O) { + SEND_STRING("https://github.com/qmk/qmk_firmware/tree/master/users/arkag"); + } + SEQ_FOUR_KEYS(KC_F, KC_L, KC_I, KC_P) { + // (╯‵Д′)╯彡┻━┻ + send_unicode_hex_string("0028 256F 2035 0414 2032 0029 256F 5F61 253B 2501 253B"); + } + SEQ_FIVE_KEYS(KC_U, KC_F, KC_L, KC_I, KC_P) { + // ┬─┬ノ( º _ º ノ) + send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 0020 30CE 0029"); + } + SEQ_FIVE_KEYS(KC_L, KC_E, KC_N, KC_N, KC_Y) { + // ( ͡° ͜ʖ ͡°) + send_unicode_hex_string("0028 0020 0361 00B0 0020 035C 0296 0020 0361 00B0 0029"); + } + SEQ_FIVE_KEYS(KC_S, KC_H, KC_R, KC_U, KC_G) { + // ¯\_(ツ)_/¯ + send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); + } + // end typing functions + + } } bool process_record_user(uint16_t keycode, keyrecord_t *record) { @@ -394,138 +499,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; - case M_P_B: - if (record->event.pressed) { - if (current_os == OS_WIN) { - SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_PAUSE) SS_UP(X_LGUI)); - } else { - } - } - return false; - - case M_C_A_D: - if (record->event.pressed) { - if (current_os == OS_WIN) { - SEND_STRING(SS_DOWN(X_LCTRL) SS_DOWN(X_LALT) SS_TAP(X_DELETE) SS_UP(X_LALT) SS_UP(X_LCTRL)); - } else { - } - } - return false; - - case M_CALC: - if (record->event.pressed) { - if (current_os == OS_WIN) { - SEND_STRING(SS_TAP(X_CALCULATOR)); - } else if (current_os == OS_MAC) { - SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_SPACE) SS_UP(X_LGUI) "calculator" SS_TAP(X_ENTER)); - } - } - return false; - case M_OS: if (record->event.pressed) { set_os((current_os+1) % _OS_COUNT, true); } return false; - case M_LOD: - if (record->event.pressed) { - send_unicode_hex_string("0CA0 005F 005F 0CA0"); - } - return false; - - case M_LENNY: - if (record->event.pressed) { - send_unicode_hex_string("0028 0020 0361 00B0 0020 035C 0296 0020 0361 00B0 0029"); - } - return false; - - - case M_TF: - if (record->event.pressed) { - send_unicode_hex_string("0028 256F 2035 0414 2032 0029 256F 5F61 253B 2501 253B"); - } - return false; - - case M_UF: - if (record->event.pressed) { - send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 0020 30CE 0029"); - } - return false; - - case M_SHRUG: - if (record->event.pressed) { - send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); - } - return false; - - case M_TM: - if (record->event.pressed) { - send_unicode_hex_string("2122"); - } - return false; - - case M_REPO: - if (record->event.pressed) { - SEND_STRING("https://github.com/qmk/qmk_firmware/tree/master/users/arkag"); - } - return false; - - case M_GGT: - if (record->event.pressed) { - SEND_STRING("@GrahamGoldenTech.com"); - } - return false; - - case M_SNIPT: - if (record->event.pressed) { - surround_type(6, KC_GRAVE, false); - pri_mod(true); - tap_key(KC_V); - pri_mod(false); - tap_key(KC_RGHT); - tap_key(KC_RGHT); - tap_key(KC_RGHT); - tap_key(KC_ENTER); - } - return false; - - case M_BOLD: - if (record->event.pressed) { - surround_type(4, KC_8, true); - } - return false; - - case M_ITAL: - if (record->event.pressed) { - surround_type(2, KC_8, true); - } - return false; - - case M_ULIN: - if (record->event.pressed) { - surround_type(4, KC_MINS, true); - } - return false; - - case KC_LSFT: - if (record->event.pressed) { - save_color(underglow); - underglow = mod_color(underglow, true, 75); - SEND_STRING(SS_DOWN(X_LSHIFT)); - } else { - reset_color(); - SEND_STRING(SS_UP(X_LSHIFT)); - } - return false; - - case MEDIA: - case LAZY: - case KEEB: - case RAISE: - case LOWER: - return true; - default: if (record->event.pressed) { state = active; @@ -535,36 +514,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } -uint32_t layer_state_set_user(uint32_t state) { - switch (biton32(state)) { - case _LAZY: - save_color(underglow); - underglow = mod_color(underglow, true, 50); - break; - case _MEDIA: - save_color(underglow); - underglow = mod_color(underglow, true, 150); - break; - case _KEEB: - save_color(underglow); - underglow = mod_color(underglow, false, 150); - break; - case _LOWER: - save_color(underglow); - underglow = mod_color(underglow, false, 100); - break; - case _RAISE: - save_color(underglow); - underglow = mod_color(underglow, true, 100); - break; - default: - reset_color(); - break; - } - set_color(underglow, false); - return state; -} - //Tap Dance Definitions qk_tap_dance_action_t tap_dance_actions[] = { [TD_3_GRV_ACT] = ACTION_TAP_DANCE_FN (dance_3), diff --git a/users/arkag/config.h b/users/arkag/config.h index e715e5534e..2e0a9ad019 100644 --- a/users/arkag/config.h +++ b/users/arkag/config.h @@ -1,5 +1,6 @@ #pragma once -#define TAPPING_TERM 200 +#define TAPPING_TERM 200 +#define LEADER_TIMEOUT 250 -#define IGNORE_MOD_TAP_INTERRUPT +#define LEADER_PER_KEY_TIMING From 6734cd9c5c7b63677d3d4cf9bef8ccf878fd3551 Mon Sep 17 00:00:00 2001 From: Wilba6582 Date: Mon, 1 Oct 2018 00:31:23 +1000 Subject: [PATCH 081/269] Keyboard: Zeal60: Fix getting backlight values "id_*_indicator_row_col" (#4030) --- keyboards/zeal60/rgb_backlight.c | 33 ++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/keyboards/zeal60/rgb_backlight.c b/keyboards/zeal60/rgb_backlight.c index 9f62a8d381..ce8b1cb179 100644 --- a/keyboards/zeal60/rgb_backlight.c +++ b/keyboards/zeal60/rgb_backlight.c @@ -916,6 +916,31 @@ void backlight_set_indicator_index( uint8_t *index, uint8_t row, uint8_t column } } +void backlight_get_indicator_row_col( uint8_t index, uint8_t *row, uint8_t *column ) +{ + if ( index == 255 || index == 254 ) + { + // Special value, 255=none, 254=all + *row = index; + *column = 0; + return; + } + for ( uint8_t r = 0; r < MATRIX_ROWS; r++ ) + { + for ( uint8_t c = 0; c < MATRIX_COLS; c++ ) + { + uint8_t i = 255; + map_row_column_to_led( r, c, &i ); + if ( i == index ) + { + *row = r; + *column = c; + return; + } + } + } +} + // Some helpers for setting/getting HSV void _set_color( HSV *color, uint8_t *data ) { @@ -1146,7 +1171,7 @@ void backlight_config_get_value( uint8_t *data ) } case id_caps_lock_indicator_row_col: { - //*value_data = g_config.caps_lock_indicator.index; + backlight_get_indicator_row_col( g_config.caps_lock_indicator.index, &(value_data[0]), &(value_data[1]) ); break; } case id_layer_1_indicator_color: @@ -1156,7 +1181,7 @@ void backlight_config_get_value( uint8_t *data ) } case id_layer_1_indicator_row_col: { - //*value_data = g_config.layer_1_indicator.index; + backlight_get_indicator_row_col( g_config.layer_1_indicator.index, &(value_data[0]), &(value_data[1]) ); break; } case id_layer_2_indicator_color: @@ -1166,7 +1191,7 @@ void backlight_config_get_value( uint8_t *data ) } case id_layer_2_indicator_row_col: { - //*value_data = g_config.layer_2_indicator.index; + backlight_get_indicator_row_col( g_config.layer_2_indicator.index, &(value_data[0]), &(value_data[1]) ); break; } case id_layer_3_indicator_color: @@ -1176,7 +1201,7 @@ void backlight_config_get_value( uint8_t *data ) } case id_layer_3_indicator_row_col: { - //*value_data = g_config.layer_3_indicator.index; + backlight_get_indicator_row_col( g_config.layer_3_indicator.index, &(value_data[0]), &(value_data[1]) ); break; } case id_alphas_mods: From 66ef1e3d6770e388d631d25e4cd1c6b1640cea24 Mon Sep 17 00:00:00 2001 From: Wilba6582 Date: Mon, 1 Oct 2018 01:35:10 +1000 Subject: [PATCH 082/269] RAMA M6-B and IS31FL3218 driver (#4021) * Initial RAMA M6-B commit. * Moved IS31FL3218 driver, minor cleanups * Refactor, added dynamic keymap. * Added dynamic keymaps to RAMA M6-A * Refactor M6-A and M6-B to use common code. * Formatting * Cleanup * Cleanup * Changes from review --- drivers/issi/is31fl3218.c | 102 ++++++ .../config.h => drivers/issi/is31fl3218.h | 16 +- keyboards/rama/m6_a/config.h | 24 +- keyboards/rama/m6_a/keymaps/default/keymap.c | 316 +----------------- keyboards/rama/m6_a/m6_a.c | 31 +- keyboards/rama/m6_a/readme.md | 2 +- keyboards/rama/m6_a/rules.mk | 44 ++- keyboards/rama/m6_b/config.h | 129 +++++++ keyboards/rama/m6_b/info.json | 19 ++ keyboards/rama/m6_b/keymaps/default/keymap.c | 16 + keyboards/rama/m6_b/m6_b.c | 230 +++++++++++++ keyboards/rama/m6_b/m6_b.h | 28 ++ keyboards/rama/m6_b/m6_b_api.h | 39 +++ keyboards/rama/m6_b/readme.md | 15 + keyboards/rama/m6_b/rgb_backlight.c | 139 ++++++++ keyboards/rama/m6_b/rgb_backlight.h | 34 ++ keyboards/rama/m6_b/rules.mk | 77 +++++ quantum/dynamic_keymap.c | 2 +- 18 files changed, 885 insertions(+), 378 deletions(-) create mode 100644 drivers/issi/is31fl3218.c rename keyboards/rama/m6_a/keymaps/default/config.h => drivers/issi/is31fl3218.h (67%) create mode 100644 keyboards/rama/m6_b/config.h create mode 100644 keyboards/rama/m6_b/info.json create mode 100644 keyboards/rama/m6_b/keymaps/default/keymap.c create mode 100644 keyboards/rama/m6_b/m6_b.c create mode 100644 keyboards/rama/m6_b/m6_b.h create mode 100644 keyboards/rama/m6_b/m6_b_api.h create mode 100644 keyboards/rama/m6_b/readme.md create mode 100644 keyboards/rama/m6_b/rgb_backlight.c create mode 100644 keyboards/rama/m6_b/rgb_backlight.h create mode 100644 keyboards/rama/m6_b/rules.mk diff --git a/drivers/issi/is31fl3218.c b/drivers/issi/is31fl3218.c new file mode 100644 index 0000000000..db44f72564 --- /dev/null +++ b/drivers/issi/is31fl3218.c @@ -0,0 +1,102 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 "is31fl3218.h" +#include "i2c_master.h" + +// This is the full 8-bit address +#define ISSI_ADDRESS 0b10101000 + +// These are the register addresses +#define ISSI_REG_SHUTDOWN 0x00 +#define ISSI_REG_PWM 0x01 +#define ISSI_REG_CONTROL 0x13 +#define ISSI_REG_UPDATE 0x16 +#define ISSI_REG_RESET 0x17 + +// Default timeout if no I2C response +#define ISSI_TIMEOUT 100 + +// Reusable buffer for transfers +uint8_t g_twi_transfer_buffer[20]; + +// IS31FL3218 has 18 PWM outputs and a fixed I2C address, so no chaining. +// If used as RGB LED driver, LEDs are assigned RGB,RGB,RGB,RGB,RGB,RGB +uint8_t g_pwm_buffer[18]; +bool g_pwm_buffer_update_required = false; + +void IS31FL3218_write_register( uint8_t reg, uint8_t data ) +{ + g_twi_transfer_buffer[0] = reg; + g_twi_transfer_buffer[1] = data; + i2c_transmit( ISSI_ADDRESS, g_twi_transfer_buffer, 2, ISSI_TIMEOUT); +} + +void IS31FL3218_write_pwm_buffer( uint8_t *pwm_buffer ) +{ + g_twi_transfer_buffer[0] = ISSI_REG_PWM; + for ( int i=0; i<18; i++ ) { + g_twi_transfer_buffer[1+i] = pwm_buffer[i]; + } + + i2c_transmit( ISSI_ADDRESS, g_twi_transfer_buffer, 19, ISSI_TIMEOUT); +} + +void IS31FL3218_init(void) +{ + // In case we ever want to reinitialize (?) + IS31FL3218_write_register( ISSI_REG_RESET, 0x00 ); + + // Turn off software shutdown + IS31FL3218_write_register( ISSI_REG_SHUTDOWN, 0x01 ); + + // Set all PWM values to zero + for ( uint8_t i = 0; i < 18; i++ ) { + IS31FL3218_write_register( ISSI_REG_PWM+i, 0x00 ); + } + + // Enable all channels + for ( uint8_t i = 0; i < 3; i++ ) { + IS31FL3218_write_register( ISSI_REG_CONTROL+i, 0b00111111 ); + } + + // Load PWM registers and LED Control register data + IS31FL3218_write_register( ISSI_REG_UPDATE, 0x01 ); +} + +void IS31FL3218_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) +{ + g_pwm_buffer[index * 3 + 0] = red; + g_pwm_buffer[index * 3 + 1] = green; + g_pwm_buffer[index * 3 + 2] = blue; + g_pwm_buffer_update_required = true; +} + +void IS31FL3218_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) +{ + for ( int i = 0; i < 6; i++ ) { + IS31FL3218_set_color( i, red, green, blue ); + } +} + +void IS31FL3218_update_pwm_buffers(void) +{ + if ( g_pwm_buffer_update_required ) { + IS31FL3218_write_pwm_buffer( g_pwm_buffer ); + // Load PWM registers and LED Control register data + IS31FL3218_write_register( ISSI_REG_UPDATE, 0x01 ); + } + g_pwm_buffer_update_required = false; +} diff --git a/keyboards/rama/m6_a/keymaps/default/config.h b/drivers/issi/is31fl3218.h similarity index 67% rename from keyboards/rama/m6_a/keymaps/default/config.h rename to drivers/issi/is31fl3218.h index d150575c1a..2d24e51463 100644 --- a/keyboards/rama/m6_a/keymaps/default/config.h +++ b/drivers/issi/is31fl3218.h @@ -1,4 +1,4 @@ -/* Copyright 2018 Wilba +/* Copyright 2018 Jason Williams (Wilba) * * 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 @@ -13,12 +13,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#pragma once -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#include +#include -#include "../../config.h" - -// place overrides here - -#endif +void IS31FL3218_init(void); +void IS31FL3218_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ); +void IS31FL3218_set_color_all( uint8_t red, uint8_t green, uint8_t blue ); +void IS31FL3218_update_pwm_buffers(void); diff --git a/keyboards/rama/m6_a/config.h b/keyboards/rama/m6_a/config.h index 0c5355f4a8..8d77f5339d 100644 --- a/keyboards/rama/m6_a/config.h +++ b/keyboards/rama/m6_a/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -187,4 +186,23 @@ along with this program. If not, see . /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 -#endif +#define RGB_BACKLIGHT_ENABLED 0 + +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 + + +// EEPROM usage + +// TODO: refactor with new user EEPROM code (coming soon) +#define EEPROM_MAGIC 0x451F +#define EEPROM_MAGIC_ADDR 32 +// Bump this every time we change what we store +// This will automatically reset the EEPROM with defaults +// and avoid loading invalid data from the EEPROM +#define EEPROM_VERSION 0x07 +#define EEPROM_VERSION_ADDR 34 + +// Backlight config starts after EEPROM version +#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35 +// Dynamic keymap starts after backlight config (35+37) +#define DYNAMIC_KEYMAP_EEPROM_ADDR 72 diff --git a/keyboards/rama/m6_a/keymaps/default/keymap.c b/keyboards/rama/m6_a/keymaps/default/keymap.c index 6b15f3cd10..7a408fa8aa 100644 --- a/keyboards/rama/m6_a/keymaps/default/keymap.c +++ b/keyboards/rama/m6_a/keymaps/default/keymap.c @@ -3,322 +3,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT( - TO(1), KC_A, KC_B, KC_C, KC_D, KC_E), + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6), LAYOUT( - TO(2), KC_F, KC_G, KC_H, KC_I, KC_J), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), LAYOUT( - TO(3), KC_K, KC_L, KC_M, KC_N, KC_O), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), LAYOUT( - TO(4), KC_P, KC_Q, KC_R, KC_S, KC_T), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) }; - LAYOUT( - TO(5), KC_U, KC_V, KC_W, KC_X, KC_Y), - - LAYOUT( - TO(0), KC_Z, KC_1, KC_2, KC_3, KC_4)}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - //keyevent_t event = record->event; - - switch (id) - { - case 0: - if (record->event.pressed) - { - return MACRO(T(T), T(G), T(L), T(H), T(F), T(ENT), END); - } - break; - case 1: - if (record->event.pressed) - { - return MACRO(T(T), T(G), T(G), T(ENT), END); - } - break; - case 2: - if (record->event.pressed) - { - return MACRO(D(NO), T(L), U(NO), END); - } - break; - case 3: - if (record->event.pressed) - { - return MACRO(D(LCTL), T(Z), U(LCTL), END); - } - break; - case 4: - if (record->event.pressed) - { - return MACRO(D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END); - } - break; - case 5: - if (record->event.pressed) - { - return MACRO(D(LCTL), T(X), U(LCTL), END); - } - break; - case 6: - if (record->event.pressed) - { - return MACRO(D(LCTL), T(C), U(LCTL), END); - } - break; - case 7: - if (record->event.pressed) - { - return MACRO(D(LCTL), T(V), U(LCTL), END); - } - break; - } - return MACRO_NONE; -} - -// M6-A LEDs are connected to D6, B6, F5, B4, C7, F7 -// This is 1-based because I copied it from Knops code. -void set_switch_led(int ledId, bool state) -{ - if (state) - { - switch (ledId) - { - case 1: - PORTD |= (1 << 6); - break; - case 2: - PORTB |= (1 << 6); - break; - case 3: - PORTF |= (1 << 5); - break; - case 4: - PORTB |= (1 << 4); - break; - case 5: - PORTC |= (1 << 7); - break; - case 6: - PORTF |= (1 << 7); - break; - } - } - else - { - switch (ledId) - { - case 1: - PORTD &= ~(1 << 6); - break; - case 2: - PORTB &= ~(1 << 6); - break; - case 3: - PORTF &= ~(1 << 5); - break; - case 4: - PORTB &= ~(1 << 4); - break; - case 5: - PORTC &= ~(1 << 7); - break; - case 6: - PORTF &= ~(1 << 7); - break; - } - } -} - -void set_layer_led(int layerId) -{ - // UNUSED -} - -void led_set_layer(int layer); - -void matrix_init_user(void) -{ - led_init_ports(); - led_set_layer(0); -} - -void matrix_scan_user(void) -{ -} - -// M6-A LEDs are connected to D6, B6, F5, B4, C7, F7 -void led_init_ports() -{ - // Switch #1 - DDRD |= (1 << 6); - PORTD &= ~(1 << 6); - - // Switch #2 - DDRB |= (1 << 6); - PORTB &= ~(1 << 6); - - // Switch #3 - DDRF |= (1 << 5); - PORTF &= ~(1 << 5); - - // Switch #4 - DDRB |= (1 << 4); - PORTB &= ~(1 << 4); - - // Switch #5 - DDRC |= (1 << 7); - PORTC &= ~(1 << 7); - - // Switch #6 - DDRF |= (1 << 7); - PORTF &= ~(1 << 7); -} - -void led_set_user(uint8_t usb_led) -{ - - if (usb_led & (1 << USB_LED_NUM_LOCK)) - { - } - else - { - } - - if (usb_led & (1 << USB_LED_CAPS_LOCK)) - { - } - else - { - } - - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) - { - } - else - { - } - - if (usb_led & (1 << USB_LED_COMPOSE)) - { - } - else - { - } - - if (usb_led & (1 << USB_LED_KANA)) - { - } - else - { - } -} - -void led_set_layer(int layer) -{ - switch (layer) - { - case 0: - set_switch_led(1, true); - set_switch_led(2, false); - set_switch_led(3, false); - set_switch_led(4, false); - set_switch_led(5, false); - set_switch_led(6, false); - break; - case 1: - set_switch_led(1, false); - set_switch_led(2, true); - set_switch_led(3, false); - set_switch_led(4, false); - set_switch_led(5, false); - set_switch_led(6, false); - break; - case 2: - set_switch_led(1, false); - set_switch_led(2, false); - set_switch_led(3, true); - set_switch_led(4, false); - set_switch_led(5, false); - set_switch_led(6, false); - break; - case 3: - set_switch_led(1, false); - set_switch_led(2, false); - set_switch_led(3, false); - set_switch_led(4, true); - set_switch_led(5, false); - set_switch_led(6, false); - break; - case 4: - set_switch_led(1, false); - set_switch_led(2, false); - set_switch_led(3, false); - set_switch_led(4, false); - set_switch_led(5, true); - set_switch_led(6, false); - break; - case 5: - set_switch_led(1, false); - set_switch_led(2, false); - set_switch_led(3, false); - set_switch_led(4, false); - set_switch_led(5, false); - set_switch_led(6, true); - break; - default: - set_switch_led(1, true); - set_switch_led(2, true); - set_switch_led(3, true); - set_switch_led(4, true); - set_switch_led(5, true); - set_switch_led(6, true); - break; - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) -{ - switch (keycode) - { - case TO(0): - if (record->event.pressed) - { - led_set_layer(0); - } - break; - case TO(1): - if (record->event.pressed) - { - led_set_layer(1); - } - break; - case TO(2): - if (record->event.pressed) - { - led_set_layer(2); - } - break; - case TO(3): - if (record->event.pressed) - { - led_set_layer(3); - } - break; - case TO(4): - if (record->event.pressed) - { - led_set_layer(4); - } - break; - case TO(5): - if (record->event.pressed) - { - led_set_layer(5); - } - break; - } - return true; -} diff --git a/keyboards/rama/m6_a/m6_a.c b/keyboards/rama/m6_a/m6_a.c index 1c84ea2b83..fa19003600 100644 --- a/keyboards/rama/m6_a/m6_a.c +++ b/keyboards/rama/m6_a/m6_a.c @@ -1,4 +1,4 @@ -/* Copyright 2018 Wilba +/* Copyright 2018 Jason Williams (Wilba) * * 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 @@ -13,32 +13,3 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "m6_a.h" -/* -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - matrix_init_user(); -} - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - - matrix_scan_user(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware - - return process_record_user(keycode, record); -} - -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - led_set_user(usb_led); -} -*/ diff --git a/keyboards/rama/m6_a/readme.md b/keyboards/rama/m6_a/readme.md index 5dd2b92e19..ceaf6a88de 100644 --- a/keyboards/rama/m6_a/readme.md +++ b/keyboards/rama/m6_a/readme.md @@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment): make rama/m6_a:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/rama/m6_a/rules.mk b/keyboards/rama/m6_a/rules.mk index ca2a2a5f80..ed85ac36d0 100644 --- a/keyboards/rama/m6_a/rules.mk +++ b/keyboards/rama/m6_a/rules.mk @@ -1,5 +1,7 @@ +# project specific files +SRC = keyboards/rama/m6_b/m6_b.c + # MCU name -#MCU = at90usb1286 MCU = atmega32u4 # Processor frequency. @@ -38,31 +40,27 @@ F_USB = $(F_CPU) # Interrupt driven control endpoint task(+60) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - +# Boot Section +BOOTLOADER = atmel-dfu # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config) -UNICODE_ENABLE ?= no # Unicode -BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE ?= no # Audio output on port C6 -FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches + +RAW_ENABLE = yes +DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/rama/m6_b/config.h b/keyboards/rama/m6_b/config.h new file mode 100644 index 0000000000..1adaad3f9e --- /dev/null +++ b/keyboards/rama/m6_b/config.h @@ -0,0 +1,129 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x5241 // "RW" +#define PRODUCT_ID 0x006B // 6-B +#define DEVICE_VER 0x0001 +#define MANUFACTURER RAMA.WORKS +#define PRODUCT RAMA M6-B +#define DESCRIPTION RAMA M6-B Macropad + +/* key matrix size */ +#define MATRIX_ROWS 1 +#define MATRIX_COLS 6 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { E6 } +#define MATRIX_COL_PINS { D4, B5, F4, D7, C6, F6 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#define RGB_BACKLIGHT_ENABLED 1 + +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 + + +// EEPROM usage + +// TODO: refactor with new user EEPROM code (coming soon) +#define EEPROM_MAGIC 0x451F +#define EEPROM_MAGIC_ADDR 32 +// Bump this every time we change what we store +// This will automatically reset the EEPROM with defaults +// and avoid loading invalid data from the EEPROM +#define EEPROM_VERSION 0x07 +#define EEPROM_VERSION_ADDR 34 + +// Backlight config starts after EEPROM version +#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35 +// Dynamic keymap starts after backlight config (35+37) +#define DYNAMIC_KEYMAP_EEPROM_ADDR 72 diff --git a/keyboards/rama/m6_b/info.json b/keyboards/rama/m6_b/info.json new file mode 100644 index 0000000000..c88a3cc618 --- /dev/null +++ b/keyboards/rama/m6_b/info.json @@ -0,0 +1,19 @@ +{ + "keyboard_name": "m6-b", + "url": "", + "maintainer": "qmk", + "width": 3, + "height": 2, + "layouts": { + "LAYOUT": { + "layout": [ + { "x": 0, "y": 0 }, + { "x": 1, "y": 0 }, + { "x": 2, "y": 0 }, + { "x": 0, "y": 1 }, + { "x": 1, "y": 1 }, + { "x": 2, "y": 1 } + ] + } + } +} diff --git a/keyboards/rama/m6_b/keymaps/default/keymap.c b/keyboards/rama/m6_b/keymaps/default/keymap.c new file mode 100644 index 0000000000..7a408fa8aa --- /dev/null +++ b/keyboards/rama/m6_b/keymaps/default/keymap.c @@ -0,0 +1,16 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6), + + LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), + + LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), + + LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) }; + diff --git a/keyboards/rama/m6_b/m6_b.c b/keyboards/rama/m6_b/m6_b.c new file mode 100644 index 0000000000..e7cd2f6287 --- /dev/null +++ b/keyboards/rama/m6_b/m6_b.c @@ -0,0 +1,230 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 "m6_b.h" +#include "m6_b_api.h" + +// Check that no backlight functions are called +#if RGB_BACKLIGHT_ENABLED +#include "rgb_backlight.h" +#endif // RGB_BACKLIGHT_ENABLED + +#include "raw_hid.h" +#include "dynamic_keymap.h" +#include "timer.h" +#include "tmk_core/common/eeprom.h" + +bool eeprom_is_valid(void) +{ + return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC && + eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION); +} + +void eeprom_set_valid(bool valid) +{ + eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF); + eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF); +} + +void eeprom_reset(void) +{ + // Set the keyboard-specific EEPROM state as invalid. + eeprom_set_valid(false); + // Set the TMK/QMK EEPROM state as invalid. + eeconfig_disable(); +} + +#ifdef RAW_ENABLE + +void raw_hid_receive( uint8_t *data, uint8_t length ) +{ + uint8_t *command_id = &(data[0]); + uint8_t *command_data = &(data[1]); + switch ( *command_id ) + { + case id_get_protocol_version: + { + command_data[0] = PROTOCOL_VERSION >> 8; + command_data[1] = PROTOCOL_VERSION & 0xFF; + break; + } + case id_get_keyboard_value: + { + if ( command_data[0] == id_uptime ) + { + uint32_t value = timer_read32(); + command_data[1] = (value >> 24 ) & 0xFF; + command_data[2] = (value >> 16 ) & 0xFF; + command_data[3] = (value >> 8 ) & 0xFF; + command_data[4] = value & 0xFF; + } + else + { + *command_id = id_unhandled; + } + break; + } +#ifdef DYNAMIC_KEYMAP_ENABLE + case id_dynamic_keymap_get_keycode: + { + uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] ); + command_data[3] = keycode >> 8; + command_data[4] = keycode & 0xFF; + break; + } + case id_dynamic_keymap_set_keycode: + { + dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] ); + break; + } + case id_dynamic_keymap_reset: + { + dynamic_keymap_reset(); + break; + } +#endif // DYNAMIC_KEYMAP_ENABLE +#if RGB_BACKLIGHT_ENABLED + case id_backlight_config_set_value: + { + //backlight_config_set_value(command_data); + break; + } + case id_backlight_config_get_value: + { + //backlight_config_get_value(command_data); + break; + } + case id_backlight_config_save: + { + //backlight_config_save(); + break; + } +#endif // RGB_BACKLIGHT_ENABLED + case id_eeprom_reset: + { + eeprom_reset(); + break; + } + case id_bootloader_jump: + { + // Need to send data back before the jump + // Informs host that the command is handled + raw_hid_send( data, length ); + // Give host time to read it + wait_ms(100); + bootloader_jump(); + break; + } + default: + { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + + // Return same buffer with values changed + raw_hid_send( data, length ); + +} + +#endif + +void main_init(void) +{ + // If the EEPROM has the magic, the data is good. + // OK to load from EEPROM. + if (eeprom_is_valid()) { +#if RGB_BACKLIGHT_ENABLED + //backlight_config_load(); +#endif // RGB_BACKLIGHT_ENABLED + } else { +#if RGB_BACKLIGHT_ENABLED + // If the EEPROM has not been saved before, or is out of date, + // save the default values to the EEPROM. Default values + // come from construction of the zeal_backlight_config instance. + //backlight_config_save(); +#endif // RGB_BACKLIGHT_ENABLED +#ifdef DYNAMIC_KEYMAP_ENABLE + // This resets the keymaps in EEPROM to what is in flash. + dynamic_keymap_reset(); +#endif + // Save the magic number last, in case saving was interrupted + eeprom_set_valid(true); + } +#if RGB_BACKLIGHT_ENABLED + // Initialize LED drivers for backlight. + backlight_init_drivers(); + + backlight_timer_init(); + backlight_timer_enable(); +#endif // RGB_BACKLIGHT_ENABLED +} + +void bootmagic_lite(void) +{ + // The lite version of TMK's bootmagic. + // 100% less potential for accidentally making the + // keyboard do stupid things. + + // We need multiple scans because debouncing can't be turned off. + matrix_scan(); + wait_ms(DEBOUNCING_DELAY); + wait_ms(DEBOUNCING_DELAY); + matrix_scan(); + + // If the Esc (matrix 0,0) is held down on power up, + // reset the EEPROM valid state and jump to bootloader. + if ( matrix_get_row(0) & (1<<0) ) { + eeprom_reset(); + bootloader_jump(); + } +} + +void matrix_init_kb(void) { + bootmagic_lite(); + main_init(); + matrix_init_user(); +} + +void matrix_scan_kb(void) { +#if RGB_BACKLIGHT_ENABLED + // This only updates the LED driver buffers if something has changed. + backlight_update_pwm_buffers(); +#endif // BACKLIGHT_ENABLED + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + led_set_user(usb_led); +} + +void suspend_power_down_kb(void) +{ +#if RGB_BACKLIGHT_ENABLED + //backlight_set_suspend_state(true); +#endif // BACKLIGHT_ENABLED +} + +void suspend_wakeup_init_kb(void) +{ +#if RGB_BACKLIGHT_ENABLED + //backlight_set_suspend_state(false); +#endif // BACKLIGHT_ENABLED +} diff --git a/keyboards/rama/m6_b/m6_b.h b/keyboards/rama/m6_b/m6_b.h new file mode 100644 index 0000000000..bd4158bcb1 --- /dev/null +++ b/keyboards/rama/m6_b/m6_b.h @@ -0,0 +1,28 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05) \ + { \ + {K00, K01, K02, K03, K04, K05}, \ + } + diff --git a/keyboards/rama/m6_b/m6_b_api.h b/keyboards/rama/m6_b/m6_b_api.h new file mode 100644 index 0000000000..041fd6e6ee --- /dev/null +++ b/keyboards/rama/m6_b/m6_b_api.h @@ -0,0 +1,39 @@ +/* Copyright 2017 Jason Williams (Wilba) + * + * 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 + +#define PROTOCOL_VERSION 0x0001 + +enum m6_b_command_id +{ + id_get_protocol_version = 0x01, // always 0x01 + id_get_keyboard_value, + id_set_keyboard_value, + id_dynamic_keymap_get_keycode, + id_dynamic_keymap_set_keycode, + id_dynamic_keymap_reset, + id_backlight_config_set_value, + id_backlight_config_get_value, + id_backlight_config_save, + id_eeprom_reset, + id_bootloader_jump, + id_unhandled = 0xFF, +}; + +enum m6_b_keyboard_value_id +{ + id_uptime = 0x01 +}; diff --git a/keyboards/rama/m6_b/readme.md b/keyboards/rama/m6_b/readme.md new file mode 100644 index 0000000000..d6bdd0c4c2 --- /dev/null +++ b/keyboards/rama/m6_b/readme.md @@ -0,0 +1,15 @@ +# RAMA M6-B + +![RAMA M6-B](https://static1.squarespace.com/static/563c788ae4b099120ae219e2/t/59fc7b1053450adf5bf9a852/1515932239307/RAMA-RAMA-M6-DSA-XO-CAPS.73-3_1.jpg?format=1500w) + +A 6-key companion keyboard. [More info at RAMA WORKS](https://rama.works/m6a) + +Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582) +Hardware Supported: RAMA M6-B PCB +Hardware Availability: [RAMA WORKS Store](https://ramaworks.store/) + +Make example for this keyboard (after setting up your build environment): + + make rama/m6_b:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/rama/m6_b/rgb_backlight.c b/keyboards/rama/m6_b/rgb_backlight.c new file mode 100644 index 0000000000..8f7ac06303 --- /dev/null +++ b/keyboards/rama/m6_b/rgb_backlight.c @@ -0,0 +1,139 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 . + */ +#if RGB_BACKLIGHT_ENABLED + +#include "rgb_backlight.h" +//#include "rgb_backlight_api.h" + +#include +#include +#include +#include "progmem.h" + +#include "quantum/color.h" +#include "drivers/avr/i2c_master.h" +#include "drivers/issi/is31fl3218.h" + +bool g_suspend_state = false; + +// Global tick at 20 Hz +uint32_t g_tick = 0; +uint8_t g_config_effect_speed = 0; +uint8_t g_config_brightness = 255; + +void backlight_update_pwm_buffers(void) +{ + IS31FL3218_update_pwm_buffers(); +} + +void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) +{ + IS31FL3218_set_color( index, red, green, blue ); +} + +void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) +{ + IS31FL3218_set_color_all( red, green, blue ); +} + + +// This is (F_CPU/1024) / 20 Hz +// = 15625 Hz / 20 Hz +// = 781 +#define TIMER3_TOP 260 + +void backlight_timer_init(void) +{ + static uint8_t backlight_timer_is_init = 0; + if ( backlight_timer_is_init ) + { + return; + } + backlight_timer_is_init = 1; + + // Timer 3 setup + TCCR3B = _BV(WGM32) | // CTC mode OCR3A as TOP + _BV(CS32) | _BV(CS30); // prescale by /1024 + // Set TOP value + uint8_t sreg = SREG; + cli(); + + OCR3AH = (TIMER3_TOP >> 8) & 0xff; + OCR3AL = TIMER3_TOP & 0xff; + SREG = sreg; +} + +void backlight_timer_enable(void) +{ + TIMSK3 |= _BV(OCIE3A); +} + +void backlight_timer_disable(void) +{ + TIMSK3 &= ~_BV(OCIE3A); +} + +void backlight_set_suspend_state(bool state) +{ + g_suspend_state = state; +} + +void backlight_effect_cycle_all(void) +{ + uint8_t hueOffset = ( g_tick << g_config_effect_speed ) & 0xFF; + uint8_t satOffset = 127; + // Relies on hue being 8-bit and wrapping + for ( int i=0; i<6; i++ ) + { + HSV hsv = { .h = hueOffset, .s = satOffset, .v = g_config_brightness }; + RGB rgb = hsv_to_rgb( hsv ); + backlight_set_color( i, rgb.r, rgb.g, rgb.b ); + } +} + +ISR(TIMER3_COMPA_vect) +{ + // delay 1 second before driving LEDs or doing anything else + static uint8_t startup_tick = 0; + if ( startup_tick < 20 ) + { + startup_tick++; + return; + } + + g_tick++; + + if ( g_suspend_state ) + { + backlight_set_color_all( 0, 0, 0 ); + } + else + { + //HSV hsv = { .h = 240, .s = 255, .v = g_config_brightness }; + //RGB rgb = hsv_to_rgb( hsv ); + //backlight_set_color_all( rgb.r, rgb.g, rgb.b ); + backlight_effect_cycle_all(); + } +} + +void backlight_init_drivers(void) +{ + // Initialize I2C + i2c_init(); + IS31FL3218_init(); +} + +#endif // RGB_BACKLIGHT_ENABLED diff --git a/keyboards/rama/m6_b/rgb_backlight.h b/keyboards/rama/m6_b/rgb_backlight.h new file mode 100644 index 0000000000..bbf605284b --- /dev/null +++ b/keyboards/rama/m6_b/rgb_backlight.h @@ -0,0 +1,34 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 + +#if RGB_BACKLIGHT_ENABLED +#else +#error rgb_backlight.h included when RGB_BACKLIGHT_ENABLED == 0 +#endif // RGB_BACKLIGHT_ENABLED + +#include +#include + +#include "quantum/color.h" + +void backlight_init_drivers(void); +void backlight_update_pwm_buffers(void); +void backlight_timer_init(void); +void backlight_timer_enable(void); +void backlight_timer_disable(void); +void backlight_set_suspend_state(bool state); + diff --git a/keyboards/rama/m6_b/rules.mk b/keyboards/rama/m6_b/rules.mk new file mode 100644 index 0000000000..8226debd45 --- /dev/null +++ b/keyboards/rama/m6_b/rules.mk @@ -0,0 +1,77 @@ +# project specific files +SRC = rgb_backlight.c \ + quantum/color.c \ + drivers/issi/is31fl3218.c \ + drivers/avr/i2c_master.c + + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Boot Section +BOOTLOADER = atmel-dfu + +# Do not put the microcontroller into power saving mode +# when we get USB suspend event. We want it to keep updating +# backlight effects. +OPT_DEFS += -DNO_SUSPEND_POWER_DOWN + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches + +RAW_ENABLE = yes +DYNAMIC_KEYMAP_ENABLE = yes +CIE1931_CURVE = yes diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c index 2c989d6918..ee39a20251 100644 --- a/quantum/dynamic_keymap.c +++ b/quantum/dynamic_keymap.c @@ -17,7 +17,7 @@ #include "config.h" #include "keymap.h" // to get keymaps[][][] #include "tmk_core/common/eeprom.h" -#include "progmem.h"// to read default from flash +#include "progmem.h" // to read default from flash #include "dynamic_keymap.h" From a7d46f1b0f4d18699a38898ff68114204d4c087d Mon Sep 17 00:00:00 2001 From: Erovia Date: Sun, 30 Sep 2018 20:14:06 +0200 Subject: [PATCH 083/269] Keymap: Add ErgoDone keymap with QWERTY and COLEMAK Mod-DH (#3884) * Custom keymap for the ErgoDone The keymap supports QWERTY and COLEMAK MOD-DH with LED indication. * Enable Space Cadet Shift * Fix after-boot layer indicator LED * Implement keyboard suspend, move layer LED handling to function, unify identation * Add readme.md with layout * Optimize LED handling, add include guard Read the default layer via the proper EEPROM function, so the calling of bootmagic() is no longer necessary. Fix bug when the CapsLock LED wasn't working anymore after a layer switch. --- keyboards/ergodone/keymaps/erovia/config.h | 3 + keyboards/ergodone/keymaps/erovia/keymap.c | 233 ++++++++++++++++++++ keyboards/ergodone/keymaps/erovia/readme.md | 76 +++++++ keyboards/ergodone/keymaps/erovia/rules.mk | 1 + 4 files changed, 313 insertions(+) create mode 100644 keyboards/ergodone/keymaps/erovia/config.h create mode 100644 keyboards/ergodone/keymaps/erovia/keymap.c create mode 100644 keyboards/ergodone/keymaps/erovia/readme.md create mode 100644 keyboards/ergodone/keymaps/erovia/rules.mk diff --git a/keyboards/ergodone/keymaps/erovia/config.h b/keyboards/ergodone/keymaps/erovia/config.h new file mode 100644 index 0000000000..60c6ad4a12 --- /dev/null +++ b/keyboards/ergodone/keymaps/erovia/config.h @@ -0,0 +1,3 @@ +#pragma once + +#define DISABLE_SPACE_CADET_ROLLOVER diff --git a/keyboards/ergodone/keymaps/erovia/keymap.c b/keyboards/ergodone/keymaps/erovia/keymap.c new file mode 100644 index 0000000000..627805afb0 --- /dev/null +++ b/keyboards/ergodone/keymaps/erovia/keymap.c @@ -0,0 +1,233 @@ +#include QMK_KEYBOARD_H +#include "version.h" +#include "bootmagic.h" + +#define QWERTY 0 // qwerty layer +#define COLEMAK 1 // colemak layer +#define FN 2 // function layer + +enum custom_keycodes { + QWRTY = SAFE_RANGE, // can always be here + CLMK, + VRSN, + FNCTN +}; + +/* false: Caps Lock LED is off + true: Caps Lock LED is on */ +bool CAPS_LED = false; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Qwerty layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | Mute | | { | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------| + * | Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | ] | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Caps | LGui | | Ins | Del | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[QWERTY] = LAYOUT_ergodox( // layer 0 : qwerty + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_COPY, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MUTE, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1, + KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT, + KC_CAPS, KC_LGUI, + KC_HOME, + KC_SPC, KC_BSPC, KC_END, + // right hand + KC_PASTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLEP, + KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, + KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + KC_DOWN, KC_UP, KC_MINS, KC_EQL, KC_RCTL, + KC_INS, KC_DEL, + KC_PGUP, + KC_PGDN, KC_TAB, KC_ENT +), +/* Keymap 1: Colemak layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | F | P | B | Mute | | { | J | L | U | Y | ; | \ | + * |--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------| + * | Esc | A | R | S | T | G |------| |------| M | N | E | I | O | ' | + * |--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------| + * | LShift | Z | X | C | D | V | | | ] | K | H | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Caps | LGui | | Ins | Del | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +[COLEMAK] = LAYOUT_ergodox( // layer 1 : colemak + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_COPY, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_MUTE, + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, + KC_LSPO, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_FN1, + KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT, + KC_CAPS, KC_LGUI, + KC_HOME, + KC_SPC, KC_BSPC, KC_END, + // right hand + KC_PASTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLEP, + KC_LBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, + KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE, + KC_RBRC, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + KC_DOWN, KC_UP, KC_MINS, KC_EQL, KC_RCTL, + KC_INS, KC_DEL, + KC_PGUP, + KC_PGDN, KC_TAB, KC_ENT +), +/* Keymap 2: Function Layer + * + * ,---------------------------------------------------. ,--------------------------------------------------. + * |Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | + * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| + * | | | | Prev | Play | Next | | | | | | | | | | + * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | |VolDn | VolUp|------| |------| |QWRTY | CLMK | | | | + * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `-----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// Functions +[FN] = LAYOUT_ergodox( + // left hand + VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, QWRTY, CLMK, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(FN) // FN1 - Momentary Layer 1 +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case VRSN: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + return false; + break; + case QWRTY: + if (record->event.pressed) { + set_single_persistent_default_layer(QWERTY); + } + return false; + break; + case CLMK: + if (record->event.pressed) { + set_single_persistent_default_layer(COLEMAK); + } + return false; + break; + case KC_CAPS: + if (record->event.pressed) { + // Turn LED1 On/Off for Caps Lock + if (CAPS_LED) { + ergodox_right_led_1_off(); + CAPS_LED = false; + } else { + ergodox_right_led_1_on(); + CAPS_LED = true; + } + } + return true; + break; + } + return true; +}; + +// Set LED according to the default layer +void default_layer_led_set(void) { + switch (biton32(eeconfig_read_default_layer())) { + case COLEMAK: + // LED2 for COLEMAK + ergodox_right_led_2_on(); + break; + case QWERTY: + // LED3 for QWERTY + ergodox_right_led_3_on(); + break; + }; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + default_layer_led_set(); +}; + +uint32_t layer_state_set_user(uint32_t state) { + ergodox_led_all_off(); + switch (biton32(state)) { + case FN: + // Red led on Pro Micro for Fn layer + ergodox_board_led_on(); + break; + }; + + if (CAPS_LED) { + ergodox_right_led_1_on(); + } + + default_layer_led_set(); + + return state; +}; + +void suspend_power_down_user(void) { + ergodox_led_all_off(); +}; + +void suspend_wakeup_init_user(void) { + default_layer_led_set(); +}; diff --git a/keyboards/ergodone/keymaps/erovia/readme.md b/keyboards/ergodone/keymaps/erovia/readme.md new file mode 100644 index 0000000000..160c875983 --- /dev/null +++ b/keyboards/ergodone/keymaps/erovia/readme.md @@ -0,0 +1,76 @@ +# Erovia's ErdoDone Keymap + +My personal ErgoDone keymap based on the *default* keymap. + +**Features** + +* Qwerty and Colemak Mod-DH support +* Space Cadet Shift +* LED indicator for: active layout, CapsLock, Function layer + +## QWERTY (Normal) Layer +``` +,--------------------------------------------------. ,--------------------------------------------------. +| ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | E | R | T | Mute | | { | Y | U | I | O | P | \ | +|--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------| +| Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | +|--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | ] | N | M | , | . | / | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | Caps | LGui | | Ins | Del | + ,------|------|------| |------+--------+------. + | | | Home | | PgUp | | | + | Space|Backsp|------| |------| Tab |Enter | + | |ace | End | | PgDn | | | + `--------------------' `----------------------' +``` + +## Colemak Layer +Switch from `Fn1` layer. +``` +,--------------------------------------------------. ,--------------------------------------------------. +| ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | F | P | B | Mute | | { | J | L | U | Y | ; | \ | +|--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------| +| Esc | A | R | S | T | G |------| |------| M | N | E | I | O | ' | +|--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------| +| LShift | Z | X | C | D | V | | | ] | K | H | , | . | / | RShift | +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | Caps | LGui | | Ins | Del | + ,------|------|------| |------+--------+------. + | | | Home | | PgUp | | | + | Space|Backsp|------| |------| Tab |Enter | + | |ace | End | | PgDn | | | + `--------------------' `----------------------' +``` + +## Function Layer +``` +,---------------------------------------------------. ,--------------------------------------------------. +|Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | +|---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| +| | | | Prev | Play | Next | | | | | | | | | | +|---------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | | | |VolDn | VolUp|------| |------| |QWRTY | CLMK | | | | +|---------+------+------+------+------+------| | | |------+------+------+------+------+--------| +| | | | | | | | | | | | | | | | +`---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `-----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` diff --git a/keyboards/ergodone/keymaps/erovia/rules.mk b/keyboards/ergodone/keymaps/erovia/rules.mk new file mode 100644 index 0000000000..f7b7da719e --- /dev/null +++ b/keyboards/ergodone/keymaps/erovia/rules.mk @@ -0,0 +1 @@ +COMMAND_ENABLE = no # Commands for debug and configuration From a6c85f1c2383616e875e7cdc6ce31873d6fb0ce3 Mon Sep 17 00:00:00 2001 From: OlliGranlund Date: Sun, 30 Sep 2018 23:50:16 +0300 Subject: [PATCH 084/269] Keymap: add olligranlund Iris + satan layouts (#4031) * init * function layout planning * nordic keymap v1.0 * Added latest satan layouts, updated readmes * Cleaning code * Renamed ISO -> iso --- .../iris/keymaps/olligranlund_nordic/config.h | 36 +++++ .../iris/keymaps/olligranlund_nordic/keymap.c | 131 ++++++++++++++++++ .../keymaps/olligranlund_nordic/readme.md | 11 ++ .../iris/keymaps/olligranlund_nordic/rules.mk | 2 + .../satan/keymaps/olligranlund_iso/config.h | 17 +++ .../satan/keymaps/olligranlund_iso/keymap.c | 99 +++++++++++++ .../satan/keymaps/olligranlund_iso/readme.md | 18 +++ .../satan/keymaps/olligranlund_iso/rules.mk | 17 +++ 8 files changed, 331 insertions(+) create mode 100644 keyboards/iris/keymaps/olligranlund_nordic/config.h create mode 100644 keyboards/iris/keymaps/olligranlund_nordic/keymap.c create mode 100644 keyboards/iris/keymaps/olligranlund_nordic/readme.md create mode 100644 keyboards/iris/keymaps/olligranlund_nordic/rules.mk create mode 100644 keyboards/satan/keymaps/olligranlund_iso/config.h create mode 100644 keyboards/satan/keymaps/olligranlund_iso/keymap.c create mode 100644 keyboards/satan/keymaps/olligranlund_iso/readme.md create mode 100644 keyboards/satan/keymaps/olligranlund_iso/rules.mk diff --git a/keyboards/iris/keymaps/olligranlund_nordic/config.h b/keyboards/iris/keymaps/olligranlund_nordic/config.h new file mode 100644 index 0000000000..259f2a7424 --- /dev/null +++ b/keyboards/iris/keymaps/olligranlund_nordic/config.h @@ -0,0 +1,36 @@ +/* +Copyright 2017 Danny Nguyen + +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 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +//#define USE_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 18 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/iris/keymaps/olligranlund_nordic/keymap.c b/keyboards/iris/keymaps/olligranlund_nordic/keymap.c new file mode 100644 index 0000000000..65ed6d289b --- /dev/null +++ b/keyboards/iris/keymaps/olligranlund_nordic/keymap.c @@ -0,0 +1,131 @@ +#include QMK_KEYBOARD_H +#include "keymap_swedish.h" + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST +}; + +#define KC_ KC_TRNS + +#define KC_LOWER LOWER +#define KC_RAISE RAISE +#define KC_ADJ ADJUST +#define KC_RST RESET + +#define KC_AA NO_AA +#define KC_AE NO_AE +#define KC_OE NO_OSLH + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ +LT(_LOWER, KC_TAB),KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_AA, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_OE, KC_AE, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, RAISE, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + KC_LGUI, KC_LALT, KC_SPC, KC_ENT, ADJUST, KC_RALT + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_LOWER] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + NO_TILD, KC_EXLM, NO_AT, KC_HASH, NO_DLR, KC_PERC, NO_CIRC, NO_AMPR, NO_ASTR, NO_SLSH, NO_LPRN, NO_RPRN, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDOWN, NO_LCBR, NO_RCBR, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, NO_BSLS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, NO_LBRC, NO_RBRC, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_GRAVE, KC_CIRC, KC_QUOTE, NO_LESS, NO_GRTR, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_RAISE] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + NO_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, NO_MINS, NO_ASTR, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, NO_PLUS, NO_SLSH, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_0, KC_TRNS, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_ADJUST] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + BL_TOGG, BL_STEP, BL_BRTG, RGB_TOG, RGB_RMOD, RGB_MOD, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + BL_DEC, _______, BL_INC, RGB_VAD, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + _______, _______, _______, _______, _______, _______ + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ) +}; + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/iris/keymaps/olligranlund_nordic/readme.md b/keyboards/iris/keymaps/olligranlund_nordic/readme.md new file mode 100644 index 0000000000..72eccde102 --- /dev/null +++ b/keyboards/iris/keymaps/olligranlund_nordic/readme.md @@ -0,0 +1,11 @@ +# Iris Nordic Layout +### by Oliver Granlund + +![Finished product](https://i.imgur.com/zqSBc3t.jpg) + +This is for those who insist to use keyboard with ÅÄÖ. Also thought about the +gaming aspect with this keyboard, therefore space on left side. + +At first I thought about having backspace in the upper right corner of the +slave side, but that made it really clunky to fix your text. Thumbs should take +care of this job instead. diff --git a/keyboards/iris/keymaps/olligranlund_nordic/rules.mk b/keyboards/iris/keymaps/olligranlund_nordic/rules.mk new file mode 100644 index 0000000000..d7463419b4 --- /dev/null +++ b/keyboards/iris/keymaps/olligranlund_nordic/rules.mk @@ -0,0 +1,2 @@ +RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = yes diff --git a/keyboards/satan/keymaps/olligranlund_iso/config.h b/keyboards/satan/keymaps/olligranlund_iso/config.h new file mode 100644 index 0000000000..eab4c8e975 --- /dev/null +++ b/keyboards/satan/keymaps/olligranlund_iso/config.h @@ -0,0 +1,17 @@ +// Backlight configuration +#undef BACKLIGHT_LEVELS +#define BACKLIGHT_LEVELS 10 + +// Underlight configuration +#undef RGB_DI_PIN +#define RGB_DI_PIN B2 +#undef RGBLED_NUM +#define RGBLED_NUM 16 // Number of LEDs +#undef RGBLIGHT_HUE_STEP +#define RGBLIGHT_HUE_STEP 8 +#undef RGBLIGHT_SAT_STEP +#define RGBLIGHT_SAT_STEP 8 +#undef RGBLIGHT_VAL_STEP +#define RGBLIGHT_VAL_STEP 8 + +#define RGBLIGHT_ANIMATIONS diff --git a/keyboards/satan/keymaps/olligranlund_iso/keymap.c b/keyboards/satan/keymaps/olligranlund_iso/keymap.c new file mode 100644 index 0000000000..5016d43779 --- /dev/null +++ b/keyboards/satan/keymaps/olligranlund_iso/keymap.c @@ -0,0 +1,99 @@ +#include QMK_KEYBOARD_H + +#define BASE 0 // Default layer +#define MOUSE 1 // Space layer +#define NUMPAD 2 // Alt layer +#define CAPS 3 // Caps layer + +// General shortenings +#define ESCA KC_ESC +#define MINS KC_MINS +#define EQUL KC_EQL +#define BSPC KC_BSPC +#define DELE KC_DEL +#define LBRC KC_LBRC +#define RBRC KC_RBRC +#define ALTR KC_RALT +#define SCLN KC_SCLN +#define QUOT KC_QUOT +#define NUHS KC_NUHS +#define ENTE KC_ENT +#define NUBS KC_NUBS // Less/ greater sign +#define COMM KC_COMM // Comma +#define FSTO KC_DOT // Full stop +#define SLSH KC_SLSH +#define ALTL KC_LALT +#define GUIL KC_LGUI +#define GUIR KC_RGUI +#define MENO KC_MENU + +// Special Actions and Media Keys +#define INSE KC_INS // Insert here +#define HOME KC_HOME // Go to beginning of line +#define ENDI KC_END // go to end of line +#define PSCR KC_PSCR // Print Screen +#define SLCK KC_SLCK // go to end of line +#define PGDN KC_PGDN // go to end of line +#define PGUP KC_PGUP // go to end of line +#define PLPS KC_MPLY // Play/Pause +#define PAUS KC_PAUS // Pause button +#define MUTE KC_MUTE // Mute sound +#define VOLU KC_VOLU // Volume increase +#define VOLD KC_VOLD // Volume decrease +#define MNXT KC_MNXT // next track +#define MPRV KC_MPRV // prev track +#define MSTP KC_MSTP // stop playing +#define MSEL KC_MSEL // Select media (Start playing it) +#define MAIL KC_MAIL // Open default mail app +#define CALC KC_CALC // Open default calculator app +#define MYCM KC_MYCM // Open default file manager + +// increase readability +#define _______ KC_TRNS +#define XXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Keymap BASE: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| R | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | R | + * |-----------------------------------------------------------| + * |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | + * `-----------------------------------------------------------| + */ + +[ BASE ] = KEYMAP_ISO_SPLITRSHIFT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, XXXXX, \ + LT(CAPS, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \ + KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, XXXXX, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(CAPS), TG(NUMPAD), TG(MOUSE)), + +[ MOUSE ] = KEYMAP( // Mouse controls + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXX,\ + _______, _______, _______, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_U, KC_MS_BTN2, _______, _______, _______, _______,\ + _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXX,\ + _______, _______, _______, _______, _______, _______, _______, _______), + +[ NUMPAD ] = KEYMAP( //Numpad and alt shortcuts + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXX,\ + _______, BL_TOGG, BL_DEC, BL_INC, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, _______, _______,\ + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, _______,\ + _______, _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_7, KC_8, KC_9, KC_0, _______, _______, XXXXX,\ + _______, _______, _______, _______, _______, _______, _______, _______), + +[ CAPS ] = KEYMAP( // Main "function" key, arrows, media control + KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, XXXXX,\ + _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, PGDN, KC_UP, PGUP, PSCR, SLCK, PAUS, _______,\ + _______, KC__VOLDOWN, KC__MUTE, KC__VOLUP, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXX,\ + _______, _______, _______, _______, _______, _______, _______, _______) + +}; diff --git a/keyboards/satan/keymaps/olligranlund_iso/readme.md b/keyboards/satan/keymaps/olligranlund_iso/readme.md new file mode 100644 index 0000000000..e0801ef858 --- /dev/null +++ b/keyboards/satan/keymaps/olligranlund_iso/readme.md @@ -0,0 +1,18 @@ +# ISO layout for the Satan GH60 +### Originally by Ben James, forked by Oliver Granlund + +![Finished product](https://i.imgur.com/s5HAgr6.jpg) + +I've wanted to make this as close to a P0ker as possible, but some macros in +the P0ker don't make sense... + +Some of the features: +* Caps activates special features when held: + * Arrow keys directly under right hand + * Volume control + * Fn keys on number row + * PageUp/PageDn/Home/other general buttons +* Mouse control +* Numpad (works so much better if this would be ortho) +### RGB-strip +![Behind the scenes](https://i.imgur.com/reHLXrc.jpg) diff --git a/keyboards/satan/keymaps/olligranlund_iso/rules.mk b/keyboards/satan/keymaps/olligranlund_iso/rules.mk new file mode 100644 index 0000000000..c96deccaa9 --- /dev/null +++ b/keyboards/satan/keymaps/olligranlund_iso/rules.mk @@ -0,0 +1,17 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend From a398d2cece1ee69006cf26e9a86fbf38e1acb0d1 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Sun, 30 Sep 2018 22:06:29 -0700 Subject: [PATCH 085/269] Keymap: Add noroadsleft keymap for KC60 (#3876) * Add personal KC60 keymap * Update personal KC60 keymap * Keymap update 2018-05-30 01:53 UTC-7 * Added macro: T_PEEKR * Added macro for MacOS Select All; modified MacOS function layer * Added git branch-name macro * Added GitHub signature macro * Added readme files * Added Quake 2 and System layers * Refactored keymap readme * Refactored to add userspace files; added Colemak layer * Minor code cleanup; updated readme files * Reverted use of userspace Decided not to make use of the Userspace feature at this time. Reverted its addition, and updated the readme files where needed (they were linking to userspace files). * Updated per review comments by @drashna * Refactor buggy macros I'm still not sure these work properly * Fix Windows shortcuts * Fix Mac shortcuts, possibly Untested; still may be broken. * Remove PREVENT_STUCK_MODIFIERS from config.h Deprecated by #3107 --- keyboards/kc60/keymaps/noroadsleft/config.h | 8 + keyboards/kc60/keymaps/noroadsleft/keymap.c | 393 ++++++++++++++++++ keyboards/kc60/keymaps/noroadsleft/readme.md | 29 ++ .../kc60/keymaps/noroadsleft/readme_ch1.md | 70 ++++ .../kc60/keymaps/noroadsleft/readme_ch2.md | 26 ++ .../kc60/keymaps/noroadsleft/readme_ch3.md | 39 ++ .../kc60/keymaps/noroadsleft/readme_ch4.md | 54 +++ .../kc60/keymaps/noroadsleft/readme_ch5.md | 84 ++++ .../kc60/keymaps/noroadsleft/readme_git.md | 56 +++ keyboards/kc60/keymaps/noroadsleft/rules.mk | 2 + 10 files changed, 761 insertions(+) create mode 100644 keyboards/kc60/keymaps/noroadsleft/config.h create mode 100644 keyboards/kc60/keymaps/noroadsleft/keymap.c create mode 100644 keyboards/kc60/keymaps/noroadsleft/readme.md create mode 100644 keyboards/kc60/keymaps/noroadsleft/readme_ch1.md create mode 100644 keyboards/kc60/keymaps/noroadsleft/readme_ch2.md create mode 100644 keyboards/kc60/keymaps/noroadsleft/readme_ch3.md create mode 100644 keyboards/kc60/keymaps/noroadsleft/readme_ch4.md create mode 100644 keyboards/kc60/keymaps/noroadsleft/readme_ch5.md create mode 100644 keyboards/kc60/keymaps/noroadsleft/readme_git.md create mode 100644 keyboards/kc60/keymaps/noroadsleft/rules.mk diff --git a/keyboards/kc60/keymaps/noroadsleft/config.h b/keyboards/kc60/keymaps/noroadsleft/config.h new file mode 100644 index 0000000000..e216d050b1 --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/config.h @@ -0,0 +1,8 @@ +#pragma once + +#define PERMISSIVE_HOLD // https://docs.qmk.fm/#/feature_advanced_keycodes?id=permissive-hold + +// Enable single-color backlighting +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 5 +#define BREATHING_PERIOD 4 diff --git a/keyboards/kc60/keymaps/noroadsleft/keymap.c b/keyboards/kc60/keymaps/noroadsleft/keymap.c new file mode 100644 index 0000000000..f28f2144f0 --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/keymap.c @@ -0,0 +1,393 @@ +#include QMK_KEYBOARD_H +#include +//#include +#include + + +/********************** +** LAYER DEFINITIONS ** +**********************/ +enum layers_keymap { + // BASE LAYERS + _QWERTY = 0, + _DVORAK, + _COLEMAK, + _MAC, + _QUAKE2, + _QUAKE2_DVORAK, + _QUAKE2_CONSOLE, + + // FUNCTION LAYERS + _FUNCWIN, + _FUNCMAC, + _FUNCQ2, + + // OTHER LAYERS + _NUMPAD, + _MACROS, + _SYSTEM +}; + +// LAYER SHORT CODES +#define _QW _QWERTY +#define _DV _DVORAK +#define _CM _COLEMAK +#define _MC _MAC +#define _Q2 _QUAKE2 +#define _QD _QUAKE2_DVORAK +#define _QC _QUAKE2_CONSOLE +#define _FW _FUNCWIN +#define _FM _FUNCMAC +#define _FQ _FUNCQ2 +#define _NP _NUMPAD +#define _MA _MACROS +#define _SY _SYSTEM + + +// KEYCODE DEFINITIONS +#define NO_CHNG KC_TRNS // Note for me for keys I need to leave as Pass-through + +#define FW_CAPS LT(_FUNCWIN, KC_CAPS) // _FUNCWIN when held, Caps Lock when tapped +#define FM_CAPS LT(_FUNCMAC, KC_CAPS) // _FUNCMAC when held, Caps Lock when tapped +#define Q2_CAPS LT(_FUNCQ2, KC_CAPS) // _FUNCQ2 when held, Caps Lock when tapped + +#define WN_SALL LCTL(DV_A) // Windows/Linux Select All +#define WN_UNDO LCTL(DV_Z) // Windows/Linux Undo +#define WN_CUT LCTL(DV_X) // Windows/Linux Cut +#define WN_COPY LCTL(DV_C) // Windows/Linux Copy +#define WN_PSTE LCTL(DV_V) // Windows/Linux Paste + +#define MC_PSCR LGUI(LSFT(KC_3)) // MacOS Print Screen (Command + Shift + 3) +#define MC_HOME LGUI(KC_LEFT) // MacOS Home (Command + Left Arrow) +#define MC_END LGUI(KC_RGHT) // MacOS End (Command + Right Arrow) +#define MC_SALL LGUI(KC_A) // MacOS Select All +//#define MC_UNDO LGUI(KC_Z) // MacOS Undo // replaced by macro +#define MC_CUT LGUI(KC_X) // MacOS Cut +#define MC_COPY LGUI(KC_C) // MacOS Copy +//#define MC_PSTE LGUI(KC_V) // MacOS Paste // replaced by macro + + +// MACRO DEFINITIONS +enum custom_keycodes { + F_CAPS = SAFE_RANGE, + T_L3DED, + G_PUSH, + G_FTCH, + G_COMM, + G_RST, + G_C10R, + G_BRCH, + SIGNA, + GO_Q2, + Q2_ON, + Q2_OFF, + Q2_ESC, + Q2_GRV, + MC_UNDO, + MC_PSTE +}; + + +// define modifiers +#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) +#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL)) +#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)) +#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)) + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + uint8_t modifiers = get_mods(); + switch(keycode) { + // these are our macros! + case F_CAPS: + /* + Objective: write a macro that checks the current layers that are + enabled, and activates the appropriate function layer. + */ + if ( biton32(layer_state) == _MAC ) { + if (record->event.pressed) { + layer_on(_FUNCMAC); + } else { + layer_off(_FUNCMAC); + } + } else { + if (record->event.pressed) { + layer_on(_FUNCWIN); + } else { + layer_off(_FUNCWIN); + } + }; + return false; + break; + case T_L3DED: + if (record->event.pressed) { + SEND_STRING("lavak3DED "); + }; + return false; + break; + case G_PUSH: + if (record->event.pressed) { + SEND_STRING("git push origin "); + }; + return false; + break; + case G_FTCH: + if (record->event.pressed) { + SEND_STRING("git fetch upstream"); + }; + return false; + break; + case G_COMM: + if (record->event.pressed) { + SEND_STRING("git commit -m \"\"" SS_TAP(X_LEFT)); + layer_off(_MACROS); + }; + return false; + break; + case G_RST: + if (record->event.pressed) { + SEND_STRING("git histt -n 10" SS_TAP(X_ENTER) "git reset --soft "); + layer_off(_MACROS); + }; + return false; + break; + case G_C10R: + if (record->event.pressed) { + SEND_STRING("cf/"); + layer_off(_MACROS); + }; + return false; + break; + case G_BRCH: + if (record->event.pressed) { + SEND_STRING("$(git branch-name)"); + layer_off(_MACROS); + }; + return false; + break; + case SIGNA: + if (record->event.pressed) { + SEND_STRING("\\- @noroadsleft" SS_TAP(X_ENTER)); + layer_off(_MACROS); + }; + return false; + break; + case GO_Q2: + if (record->event.pressed) { + //default_layer_set(_QWERTY); + layer_move(_QWERTY); // TO(_QWERTY); + layer_on(_QUAKE2); + //layer_off(_SYSTEM); + }; + return false; + break; + case Q2_ON: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_ENTER)); + layer_on(_DVORAK); + layer_on(_QUAKE2_DVORAK); + }; + return false; + break; + case Q2_OFF: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_ENTER)); + layer_move(_QWERTY); // TO(_QWERTY); + layer_on(_QUAKE2); + }; + return false; + break; + case Q2_ESC: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_ESCAPE)); + layer_move(_QWERTY); // TO(_QWERTY); + layer_on(_QUAKE2); + }; + return false; + break; + case Q2_GRV: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_GRAVE)); + layer_on(_DVORAK); + layer_on(_QUAKE2_DVORAK); + layer_on(_QUAKE2_CONSOLE); + }; + return false; + break; + case MC_UNDO: + if (record->event.pressed) { + if ( modifiers & MODS_SHIFT_MASK ) { + SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) SS_UP(X_LSHIFT) ); + } else { + SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) ); + } + }; + return false; + break; + case MC_PSTE: + if (record->event.pressed) { + if ( modifiers & MODS_SHIFT_MASK ) { + SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_DOWN(X_LALT) SS_TAP(X_V) SS_UP(X_LALT) SS_UP(X_LGUI) SS_UP(X_LSHIFT) ); + } else { + SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_V) SS_UP(X_LGUI) ); + } + }; + return false; + break; + } // switch() + return true; +}; + + +// KEYMAPS +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /**************** + ** BASE LAYERS ** + ****************/ + + /* QWERTY */ + [_QWERTY] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + FW_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \ + ), + + /* Dvorak */ + [_DVORAK] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \ + FW_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \ + ), + + /* Colemak */ + [_COLEMAK] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \ + FW_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \ + ), + + /**************** + ** OS OVERLAYS ** + ****************/ + + /* Mac */ + [_MAC] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + FM_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, MO(_FM), _______ \ + ), + + /********************* + ** QUAKE 2 OVERLAYS ** + *********************/ + + /* Quake 2 */ + [_QUAKE2] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_ON, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \ + ), + + [_QUAKE2_DVORAK] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + Q2_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_OFF, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \ + ), + + [_QUAKE2_CONSOLE] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + Q2_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \ + ), + + /******************** + ** FUNCTION LAYERS ** + ********************/ + + /* Windows Fn layer */ + [_FUNCWIN] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + _______, KC_CALC, KC_APP, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \ + NO_CHNG, WN_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_PENT, \ + _______, WN_UNDO, WN_CUT, WN_COPY, WN_PSTE, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, TG(_SY), _______, \ + _______, _______, _______, TG(_NP), _______, TG(_MA), NO_CHNG, _______ \ + ), + + /* MacOS Fn layer */ + [_FUNCMAC] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + _______, _______, _______, _______, _______, _______, KC_INS, MC_HOME, KC_UP, MC_END, KC_PGUP, MC_PSCR, _______, _______, \ + NO_CHNG, MC_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, \ + _______, MC_UNDO, MC_CUT, MC_COPY, MC_PSTE, _______, _______, _______, _______, _______, TG(_SY), _______, \ + _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______ \ + ), + + /* Quake 2 Fn layer */ + [_FUNCQ2] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + Q2_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \ + NO_CHNG, _______, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_ENT, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(_SY), _______, \ + _______, _______, _______, _______, _______, _______, NO_CHNG, _______ \ + ), + + /***************** + ** OTHER LAYERS ** + *****************/ + + /* Numpad layer */ + [_NUMPAD] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, _______, _______, \ + _______, _______, _______, _______, KC_E, KC_F, _______, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS, KC_PEQL, _______, \ + _______, _______, _______, _______, KC_C, KC_D, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PMNS, KC_PENT, \ + _______, _______, _______, _______, KC_A, KC_B, _______, KC_P0, _______, KC_PDOT, _______, _______, \ + _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______ \ + ), + + /* Macro layer */ + [_MACROS] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + TG(_MA), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, G_PUSH, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, G_RST, G_FTCH, G_COMM, _______, _______, _______, _______, T_L3DED, _______, _______, _______, \ + _______, _______, _______, G_C10R, _______, G_BRCH, SIGNA, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, NO_CHNG, _______ \ + ), + + /* System layer */ + [_SYSTEM] = LAYOUT_60_ansi( + // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + TG(_SY), TO(_QW), TO(_DV), TO(_CM), GO_Q2, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, TG(_MC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_CHNG, XXXXXXX \ + ), + +}; diff --git a/keyboards/kc60/keymaps/noroadsleft/readme.md b/keyboards/kc60/keymaps/noroadsleft/readme.md new file mode 100644 index 0000000000..737fdc06bb --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/readme.md @@ -0,0 +1,29 @@ +# @noroadsleft's KC60 keymap + +### Last updated: September 2, 2018, 1:03 PM UTC-0700 + +![](https://i.imgur.com/tzhXQYI.jpg) + +I am a full-time Dvorak typist, and occasional semi-serious FPS gamer. The layers are oriented towards a mix of typing and gaming. + + +---- + +# Outline + +- [Base Layers](./readme_ch1.md) + - Layer 0: QWERTY `_QW` + - Layer 1: Hardware Dvorak `_DV` + - Layer 2: Hardware Colemak `_CM` +- [OS Overlays](./readme_ch2.md) + - Layer 3: MacOS Overlay `_MC` +- [Quake 2 Overlays](./readme_ch3.md) + - Layers 4, 5 and 6: Quake 2 `_Q2`, Quake 2 Dvorak `_QD`, and Quake 2 Console `_QC` +- [Function Layers](./readme_ch4.md) + - Layer 7: Windows Fn layer `_FW` + - Layer 8: MacOS-oriented Fn layer `_FM` + - Layer 9: Quake 2 Fn layer `_FQ` +- [Other Layers](./readme_ch5.md) + - Layer 10: Numpad layer `_NP` + - Layer 11: Macro layer `_MA` + - Layer 12: System layer `_SY` diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md new file mode 100644 index 0000000000..bee0709f48 --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md @@ -0,0 +1,70 @@ +# @noroadsleft's KC60 keymap + +- [Table of Contents](./readme.md) + 1. **Base Layers** + 2. [**OS Overlays**](./readme_ch2.md) + 3. [Quake 2 Overlays](./readme_ch3.md) + 4. [Function Layers](./readme_ch4.md) + 5. [Other Layers](./readme_ch5.md) + +### Last updated: September 2, 2018, 1:03 PM UTC-0700 + + +---- + +## Layer 0: QWERTY - `_QW` + +Standard QWERTY layout, with three QMK features: + +- The `Menu` key has been replaced by `MO(_FW)`, which moves to my Windows Fn layer when held. +- The `Caps Lock` key has been replaced with a dual function `LT()` key, which opens the Windows Fn layer when held, and is `Caps Lock` when tapped +- The `Escape` key has been replaced with a `KC_GESC` `` ` ~ `` key when used with a `Fn` key or a `Shift` key + +###### For the rest of this readme, the physical location of keys will be referred to by their function in a US QWERTY layout. + +![QWERTY layer](https://i.imgur.com/2eVsefw.png) + +Keycode(s) Sent | Notes +:---------------------------------------------------- | :---- +[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key. +`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped. +`MO(_FW)` | Opens the Windows Fn layer when held. + + +---- + +## Layer 1: Hardware Dvorak - `_DV` + +### Accessed by holding either `Fn` and tapping `/?` key, then tapping `2@`. + +A hardware-based Dvorak Simplified layout. At my weekend job, I use a shared computer that runs MacOS Sierra, in US QWERTY layout. In this layer, I can leave the system in QWERTY, plug my keyboard in, and still type in Dvorak. + +![Hardware Dvorak layer](https://i.imgur.com/a6hYedB.png) + +Keycode(s) Sent | Notes +:---------------------------------------------------- | :---- +[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key. +`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped. +`MO(_FW)` | Opens the Windows Fn layer when held. + + +---- + +## Layer 2: Hardware Colemak `_CM` + +### Accessed by holding either `Fn` and tapping `/?` key, then tapping `3#`. + +A hardware-based Colemak layout. Been thinking of trying it, so it's here. + +![Hardware Colemak layer](https://i.imgur.com/dbQ6HDW.png) + +Keycode(s) Sent | Notes +:---------------------------------------------------- | :---- +[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key. +`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped. +`MO(_FW)` | Opens the Windows Fn layer when held. + + +---- + +Next Chapter: [OS Overlays](./readme_ch2.md) diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md new file mode 100644 index 0000000000..75a4fc5244 --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md @@ -0,0 +1,26 @@ +# @noroadsleft's KC60 keymap + +- [Table of Contents](./readme.md) + 1. [Base Layers](./readme_ch1.md) + 2. **OS Overlays** + 3. [Quake 2 Overlays](./readme_ch3.md) + 4. [Function Layers](./readme_ch4.md) + 5. [Other Layers](./readme_ch5.md) + +### Last updated: September 2, 2018, 1:03 PM UTC-0700 + + +---- + +## Layer 3: Layer 3: MacOS Overlay `_MC` + +### Toggled by holding either `Fn` and tapping `/?` key, then tapping `W`. + +This layer overrides the `Fn` keys on whichever base layer is currently enabled, sending the keyboard to the MacOS-oriented Fn layer `_FM`, instead of the Windows Fn layer `_FW`. + +![MacOS Overlay](https://i.imgur.com/lxsEVpm.png) + + +---- + +Next Chapter: [Quake 2 Overlays](./readme_ch3.md) diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md new file mode 100644 index 0000000000..80549ba5ce --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md @@ -0,0 +1,39 @@ +# @noroadsleft's KC60 keymap + +- [Table of Contents](./readme.md) + 1. [Base Layers](./readme_ch1.md) + 2. [OS Overlays](./readme_ch2.md) + 3. **Quake 2 Overlays** + 4. [Function Layers](./readme_ch4.md) + 5. [Other Layers](./readme_ch5.md) + +### Last updated: September 2, 2018, 1:03 PM UTC-0700 + + +---- + +## Layers 4, 5 and 6: Quake 2 `_Q2`, Quake 2 Dvorak `_QD`, and Quake 2 Console `_QC` + +### Accessed by holding either `Fn` key and tapping the `/?` key, then tapping `4$` + +These layers were born out of the confusion I have had trying to use the in-game chat and the console in [Quake 2](https://en.wikipedia.org/wiki/Quake_II). When Quake 2 came out, alternate keyboard layouts weren't really a thing. As a result, all in-game text input is hard-locked to US QWERTY, regardless of what the operating system is using for its input method. + +I'm attempting to solve this by some creative use of QMK's macro feature. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L386), is a [macro](./keymap.c#L175-183) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that has some keycodes with some creative layer switching. + +When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./keymap.c#L184-L191) I've created sends the keycode for `Enter`, then follows with enabling the Hardware Dvorak layer and its corresponding overlay. Now the game is in text chat mode, and my keyboard is in Dvorak. When I hit `Enter` again, another `Enter` [keycode macro](./keymap.c#L192-L199) is sent, which sends the message, then the macro brings me back to the standard QWERTY+Quake 2 setup. Hitting `Escape` instead runs a [macro](./keymap.c#L200-L207) that cancels the sending of the message, and undoes the layers. + +I have been testing this configuration for a few months. Sometimes I end up still in Dvorak mode without any text input systems (in-game chat or the console) running, but it pretty much always happens when I'm focused on the game, so I don't know the cause yet. + +### Layer 4: Quake 2 +![Quake 2](https://i.imgur.com/WEZ9p2u.png) + +### Layer 5: Quake 2 Dvorak +![Quake 2 Dvorak](https://i.imgur.com/rhugHN4.png) + +### Layer 6: Quake 2 Console +![Quake 2 Console](https://i.imgur.com/dRTAjcy.png) + + +---- + +Next Chapter: [Function Layers](./readme_ch4.md) diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md new file mode 100644 index 0000000000..f1b50846d9 --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md @@ -0,0 +1,54 @@ +# @noroadsleft's KC60 keymap + +- [Table of Contents](./readme.md) + 1. [Base Layers](./readme_ch1.md) + 2. [OS Overlays](./readme_ch2.md) + 3. [Quake 2 Overlays](./readme_ch3.md) + 4. **Function Layers** + 5. [Other Layers](./readme_ch5.md) + +### Last updated: September 2, 2018, 1:03 PM UTC-0700 + + +---- + +## Layer 7: Windows Fn layer - `_FW` + +### Accessed by holding either `Fn` key in Layer 0 + +Arrows, Navigation keys (Insert, Home, Page Up, etc.), and Function keys are here. Also has keys for Calculator, Menu, Volume Control, and shortcuts for Select All, Undo, Cut, Copy, and Paste. Numpad Enter for when I'm working in Adobe Photoshop, because it treats Numpad Enter differently from the regular Enter key. + +![Windows Fn layer](https://i.imgur.com/XwCshcz.png) + + +---- + +## Layer 8: MacOS-oriented Fn layer - `_FM` + +### Accessed by holding either `Fn` key in Layer 1 + +Based on my Windows Fn layer, but swaps a few functions for a MacOS environment. Arrow, Navigation, and Function keys are basically unchanged from Layer 2. This layer enables using either `Fn` key as a sort of simulated `Command` key, which I find easier to reach and use. + +![MacOS-oriented Fn layer](https://i.imgur.com/Z11kRu2.png) + + +---- + +## Layer 9: Quake 2 Fn layer - `_FQ` + +### Accessed by holding either `Fn` key while either Quake 2 overlay is active. + +Based on the Windows function layer, but removes some functions that are pointless to have while in the game. + +![Quake 2 Fn layer](https://i.imgur.com/9PG7yWb.png) + +Keycode(s) Sent | Notes +:-------------------------------- | :---- +[`Q2_GRV`](./keymap.c#L208-L216) | Sends `KC_GRV`, then enables the Dvorak, Quake 2 Dvorak, and Quake 2 Console layers. + + + + +---- + +Next Chapter: [Other Layers](./readme_ch5.md) diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md new file mode 100644 index 0000000000..64102eb88d --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md @@ -0,0 +1,84 @@ +# @noroadsleft's KC60 keymap + +- [Table of Contents](./readme.md) + 1. [Base Layers](./readme_ch1.md) + 2. [OS Overlays](./readme_ch2.md) + 3. [Quake 2 Overlays](./readme_ch3.md) + 4. [Function Layers](./readme_ch4.md) + 5. **Other Layers** + +### Last updated: September 2, 2018, 1:03 PM UTC-0700 + + +---- + +## Layer 10: Numpad layer - `_NP` + +### Accessed by holding either `Fn` key and tapping `Space`, from any of the Base Layers + +Puts a Numpad on the right-hand side of the keyboard. A through F included for hexadecimal input. Tapping `Space` returns to the previous Base Layer. + +![Numpad layer](https://i.imgur.com/fKVRkGH.png) + + +---- + +## Layer 11: Macro layer - `_MA` + +### Accessed by holding the `Fn` key and tapping the right-side `Win` key + +Has some macros that I use in Git, and some frequently-typed strings. + +Tapping `Esc` exits the Macro layer, if the macro used doesn't do it automatically. + +![Macro layer](https://i.imgur.com/wgbsluI.png) + + +### Macros + +[![lavak3DED](https://static-cdn.jtvnw.net/emoticons/v1/821796/1.0)](./keymap.c#L122-L127) +Inputs: `lavak3DED ` +Twitch emote for [a streamer I watch a lot](https://www.twitch.tv/lavak3_). + +[G_PUSH](./keymap.c#L128-L133) +Inputs: `git push origin ` +Everything from here down is related to Git or GitHub. + +[G_FTCH](./keymap.c#L134-L139) +Inputs: `git fetch upstream` + +[G_COMM](./keymap.c#L140-L146) +Inputs: `git commit -m ""` `[Left]` +Readies a `git commit` command, moves the cursor between the quotation marks, then disables the Macro layer. + +[G_RST](./keymap.c#L147-L153) +Inputs: `git histt -n 10`, Enter, `git reset --soft ` +Runs a [git alias](./readme_git.md) that shows my last ten commits, then readies a `git reset --soft`. For when I commit something too soon. Disables the Macro layer when complete. + +[G_C10R](./keymap.c#L154-L160) +Inputs: `cf/` +A branch prefix I use for my current work in QMK. Disables the Macro layer when finished. + +[G_BRCH](./keymap.c#L161-L167) +Inputs: `$(git branch-name)` +A [git alias](./readme_git.md) that returns the name of the current branch. Disables the Macro layer when finished. + +[SIGNA](./keymap.c#L168-L174) +Inputs: `\- @noroadsleft` `[Enter]` +Sometimes on GitHub, I sign my comments. Types my GitHub name in Markdown syntax, and then taps the `Enter` key. Disables the Macro layer when finished. + + +---- + +### Layer 12: System layer - `_SY` + +#### Accessed by holding either `Fn` key and tapping the `/?` key + +This is where I change my keyboard function. Base layer select on `1` through `3`, Backlight controls on `C` through `N`, Reset on `8*`, Debug on `0)`. + +![System layer](https://i.imgur.com/95ovTBn.png) + + +---- + +[Back to the index.](./) diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_git.md b/keyboards/kc60/keymaps/noroadsleft/readme_git.md new file mode 100644 index 0000000000..585d9c8909 --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/readme_git.md @@ -0,0 +1,56 @@ +# @noroadsleft's Git aliases + +[Return to the directory index.](./) + +``` +[alias] + # change branches + co = checkout + cob = checkout -b + + # sync master + sync = "!f() { if [ $(git branch-name) != "master" ]; then git checkout master; fi; git pull upstream master; git push origin master; }; f" + + # Return the last five commits on the branch, in a more compact format + hist = log --pretty=format:\"%C(yellow)%h%Creset %Cgreen%ad%Creset%n %w(100,0,3)%s%d [%an]%n\" --graph --date=iso-local -n 5 + histm = log --pretty=format:\"%C(yellow)%h%Creset %w(100,0,3)%s%d [%an]\" --graph --date=iso-local -n 5 + histt = log --pretty=format:\"%C(yellow)%h%Creset %<(88,trunc)%s [%an]\" --graph --date=iso-local -n 5 + histb = log --reverse --pretty=format:\"- %<(98,trunc)%s [%an]\" --date=iso-local -n 5 + + # compact diff + df = "diff --compact-summary" + + # Short-form status + st = "!git status --short" + + # Returns the name of the current branch + branch-name = "!git rev-parse --abbrev-ref HEAD" + + # short-form of the above + bn = "!git branch-name" + + po = "push origin ($(git branch-name))" + + # List the stashes + sl = "stash list" + + # Show the contents of a numbered stash + # Syntax: + # git st-show + st-show = "!f() { git stash show stash@{$1} -p; }; f" + + # Apply a stash, without deleting it from the list of stashes + # Syntax: + # git st-copy + st-copy = "!f() { git stash apply stash@{$1}; }; f" + + # Unstage a file + unstage = "reset HEAD" + + # Restore a file to the state it was in when checked out + restore = "checkout --" + + # Compare local master repo to its upstream branch. If anything is returned, local branch has diverged from upstream. + cm = "!f() { git fetch upstream master; git diff $(git branch-name) upstream/master --compact-summary; }; f" + cml = "!f() { git fetch upstream master; git diff $(git branch-name) upstream/master; }; f" +``` diff --git a/keyboards/kc60/keymaps/noroadsleft/rules.mk b/keyboards/kc60/keymaps/noroadsleft/rules.mk new file mode 100644 index 0000000000..9d78fc0fb3 --- /dev/null +++ b/keyboards/kc60/keymaps/noroadsleft/rules.mk @@ -0,0 +1,2 @@ +# https://github.com/qmk/qmk_firmware/issues/3448#issuecomment-406636125 +EXTRAFLAGS += -flto From 9d949389f92b6b397ed62246b60ead86d80a57a1 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 1 Oct 2018 08:09:05 -0700 Subject: [PATCH 086/269] Adds default value for TAPPING_TERM if Tap Dance is enabled (#2785) * Force require TAPPING_TERM if Tap Dance is enabled * Handle lack of TAPPING_TERM more gracefully --- quantum/process_keycode/process_tap_dance.c | 4 ++++ quantum/quantum.h | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 8337806912..b55ace5ba8 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -16,6 +16,10 @@ #include "quantum.h" #include "action_tapping.h" +#ifndef TAPPING_TERM +#define TAPPING_TERM 200 +#endif + #ifndef NO_ACTION_ONESHOT uint8_t get_oneshot_mods(void); #endif diff --git a/quantum/quantum.h b/quantum/quantum.h index 6833332117..87a61356c7 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -31,7 +31,7 @@ #include "backlight.h" #endif #if !defined(RGBLIGHT_ENABLE) && !defined(RGB_MATRIX_ENABLE) - #include "rgb.h" + #include "rgb.h" #endif #ifdef RGBLIGHT_ENABLE #include "rgblight.h" @@ -108,7 +108,9 @@ extern uint32_t default_layer_state; #include "process_unicodemap.h" #endif -#include "process_tap_dance.h" +#ifdef TAP_DANCE_ENABLE + #include "process_tap_dance.h" +#endif #ifdef PRINTING_ENABLE #include "process_printer.h" From 3907ed034bec6730d8bff401ac632161540ea3cb Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 1 Oct 2018 08:09:57 -0700 Subject: [PATCH 087/269] Fix YMDK NP21 keyboard to use proper keyboard level functions (#3042) * Use proper function levels * Add matrix init functions * Convert KEYMAP to LAYOUT Or @mechmerlin is going to hunt me down and harm me... probably :) * Fix conflict issues --- keyboards/ymdk_np21/keymaps/default/keymap.c | 7 +++---- keyboards/ymdk_np21/matrix.c | 11 +++++++++++ keyboards/ymdk_np21/ymdk_np21.c | 6 ++++-- keyboards/ymdk_np21/ymdk_np21.h | 4 +--- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/keyboards/ymdk_np21/keymaps/default/keymap.c b/keyboards/ymdk_np21/keymaps/default/keymap.c index e79d326b7c..3ade30479f 100644 --- a/keyboards/ymdk_np21/keymaps/default/keymap.c +++ b/keyboards/ymdk_np21/keymaps/default/keymap.c @@ -1,5 +1,4 @@ -#include "ymdk_np21.h" -#include "action_layer.h" +#include QMK_KEYBOARD_H #define _NP 0 #define _BL 1 @@ -21,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Enter| Enter| + | + | - | FN | * `-----------------------------------------' */ -[_NP] = KEYMAP( \ +[_NP] = LAYOUT( \ KC_KP_0, KC_KP_1, KC_KP_4, KC_KP_7, KC_NUMLOCK, KC_ESC, \ KC_DOT, KC_KP_2, KC_KP_5, KC_KP_8, KC_KP_SLASH, KC_TAB, \ KC_KP_DOT, KC_KP_3, KC_KP_6, KC_KP_9, KC_KP_ASTERISK, KC_BSPACE, \ @@ -38,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | BL_DEC | BL_DEC | BL_INC | BL_INC | | | * `---------------------------------------------' */ -[_BL] = KEYMAP( \ +[_BL] = LAYOUT( \ BL_BRTG, _______, _______, _______, _______, _______, \ _______, BL_OFF, BL_TOGG, BL_ON, _______, _______, \ _______, _______, _______, _______, _______, _______, \ diff --git a/keyboards/ymdk_np21/matrix.c b/keyboards/ymdk_np21/matrix.c index a9e9cb5397..b2bfb2f0bb 100644 --- a/keyboards/ymdk_np21/matrix.c +++ b/keyboards/ymdk_np21/matrix.c @@ -91,12 +91,23 @@ uint8_t matrix_scan(void) { return 1; } +__attribute__ ((weak)) +void matrix_scan_user(void) {}; + +__attribute__ ((weak)) void matrix_scan_kb(void) { // Looping keyboard code goes here // This runs every cycle (a lot) matrix_scan_user(); }; +__attribute__ ((weak)) +void matrix_init_user(void) {}; + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} // declarations void matrix_set_row_status(uint8_t row) { DDRB = (1 << row); diff --git a/keyboards/ymdk_np21/ymdk_np21.c b/keyboards/ymdk_np21/ymdk_np21.c index 670083a116..c1b11b4046 100644 --- a/keyboards/ymdk_np21/ymdk_np21.c +++ b/keyboards/ymdk_np21/ymdk_np21.c @@ -34,7 +34,7 @@ extern rgblight_config_t rgblight_config; // @Override void matrix_init_kb(void) { // call user level keymaps, if any - // matrix_init_user(); + matrix_init_user(); } #ifdef BACKLIGHT_ENABLE @@ -67,7 +67,7 @@ void rgblight_set(void) { } bool rgb_init = false; -void matrix_scan_user(void) { +void matrix_scan_kb(void) { // if LEDs were previously on before poweroff, turn them back on if (rgb_init == false && rgblight_config.enable) { i2c_init(); @@ -77,4 +77,6 @@ void matrix_scan_user(void) { rgblight_task(); /* Nothing else for now. */ + + matrix_scan_user(); } diff --git a/keyboards/ymdk_np21/ymdk_np21.h b/keyboards/ymdk_np21/ymdk_np21.h index babdc84831..728406d6e5 100644 --- a/keyboards/ymdk_np21/ymdk_np21.h +++ b/keyboards/ymdk_np21/ymdk_np21.h @@ -25,7 +25,7 @@ along with this program. If not, see . void matrix_init_user(void); // TODO port this to other PS2AVRGB boards -#define KEYMAP_GRID( \ +#define LAYOUT( \ K01, K02, K03, K04, K05, K06, \ K11, K12, K13, K14, K15, K16, \ K21, K22, K23, K24, K25, K26, \ @@ -38,6 +38,4 @@ void matrix_init_user(void); // TODO port this to other PS2AVRGB boards { K36, K35, K34, K33, K32, K31 } \ } -#define KEYMAP KEYMAP_GRID - #endif From 45a4a0a7fc32f521ad6487c19201340b81aaad5c Mon Sep 17 00:00:00 2001 From: Andrew Kannan Date: Mon, 1 Oct 2018 12:25:16 -0400 Subject: [PATCH 088/269] Keyboard: Adding initial luddite keyboard framework (#4029) * Adding initial luddite keyboard framework * Use pragma and update readme * Remove duplicate macro definitions --- keyboards/luddite/README.md | 18 +++++++ keyboards/luddite/config.h | 48 ++++++++++++++++++ keyboards/luddite/keymaps/default/keymap.c | 32 ++++++++++++ keyboards/luddite/luddite.c | 1 + keyboards/luddite/luddite.h | 21 ++++++++ keyboards/luddite/rules.mk | 59 ++++++++++++++++++++++ 6 files changed, 179 insertions(+) create mode 100644 keyboards/luddite/README.md create mode 100644 keyboards/luddite/config.h create mode 100644 keyboards/luddite/keymaps/default/keymap.c create mode 100644 keyboards/luddite/luddite.c create mode 100644 keyboards/luddite/luddite.h create mode 100644 keyboards/luddite/rules.mk diff --git a/keyboards/luddite/README.md b/keyboards/luddite/README.md new file mode 100644 index 0000000000..72666dda5f --- /dev/null +++ b/keyboards/luddite/README.md @@ -0,0 +1,18 @@ +# Luddite + +Luddite 60% keyboard with backlight and RGB underglow. + +* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/luddite) + +Keyboard Maintainer: QMK Community +Hardware Supported: Luddite PCB +Hardware Availability: [Luddite project on 40% Keyboards](http://www.40percent.club/search/label/luddite) + +Make example for this keyboard (after setting up your build environment): + + make luddite:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +First pass at adding support for the luddite keyboard. Compiles but completely +untested. Intended to kick-start development. diff --git a/keyboards/luddite/config.h b/keyboards/luddite/config.h new file mode 100644 index 0000000000..62ff72bb03 --- /dev/null +++ b/keyboards/luddite/config.h @@ -0,0 +1,48 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0A0C +#define DEVICE_VER 0x1001 +#define MANUFACTURER di0ib +#define PRODUCT Luddite +#define DESCRIPTION Luddite Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 8 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { D3, D2, D1, D0, D4, C6, D7, E6 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6 } +#define UNUSED_PINS + +/* number of backlight levels */ +#define BACKLIGHT_PIN B5 +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 4 +#endif + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN B4 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 8 // Number of LEDs +// #define RGBLIGHT_HUE_STEP 10 +// #define RGBLIGHT_SAT_STEP 17 +// #define RGBLIGHT_VAL_STEP 17 diff --git a/keyboards/luddite/keymaps/default/keymap.c b/keyboards/luddite/keymaps/default/keymap.c new file mode 100644 index 0000000000..4d6ae0d524 --- /dev/null +++ b/keyboards/luddite/keymaps/default/keymap.c @@ -0,0 +1,32 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BASE 0 +#define _FN1 1 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_60_ansi( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL , KC_LGUI , KC_LALT , KC_SPC , KC_RALT , KC_RGUI , MO(_FN1) , KC_RCTL + ), + + [_FN1] = LAYOUT_60_ansi( + KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, \ + RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ + BL_INC, BL_DEC, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_GRV, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/luddite/luddite.c b/keyboards/luddite/luddite.c new file mode 100644 index 0000000000..3e720ad571 --- /dev/null +++ b/keyboards/luddite/luddite.c @@ -0,0 +1 @@ +#include "luddite.h" diff --git a/keyboards/luddite/luddite.h b/keyboards/luddite/luddite.h new file mode 100644 index 0000000000..1ba743e9e7 --- /dev/null +++ b/keyboards/luddite/luddite.h @@ -0,0 +1,21 @@ +#pragma once + +#include "quantum.h" + +#define LAYOUT_60_ansi( \ + K00, K01, K02, K03, K04, K05, K06, K07, K10, K11, K12, K13, K14, K15, \ + K16, K17, K20, K21, K22, K23, K24, K25, K26, K27, K30, K31, K32, K33, \ + K34, K35, K36, K37, K40, K41, K42, K43, K44, K45, K46, K47, K50, \ + K51, K52, K53, K54, K55, K56, K57, K60, K61, K62, K63, K64, \ + K65, K66, K67, K70, K71, K72, K73, K74\ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { K10, K11, K12, K13, K14, K15, K16, K17 }, \ + { K20, K21, K22, K23, K24, K25, K26, K27 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37 }, \ + { K40, K41, K42, K43, K44, K45, K46, K47 }, \ + { K50, K51, K52, K53, K54, K55, K56, K57 }, \ + { K60, K61, K62, K63, K64, K65, K66, K67 }, \ + { K70, K71, K72, K73, K74 }, \ +} + diff --git a/keyboards/luddite/rules.mk b/keyboards/luddite/rules.mk new file mode 100644 index 0000000000..2f7d847bf0 --- /dev/null +++ b/keyboards/luddite/rules.mk @@ -0,0 +1,59 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = caterina + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes + +LAYOUTS = 60_ansi From 285ed08867931e967d2660f6179a57d247191d4c Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Mon, 1 Oct 2018 09:34:20 -0700 Subject: [PATCH 089/269] Keyboard: Rename macropad to treasure/type9 (#4035) * rename macropad keyboard to type9 under the treasure directory * fixup the readme * rename macropad to type9 * moar renames --- keyboards/macropad/keymaps/default/readme.md | 1 - keyboards/{macropad => treasure/type9}/config.h | 2 +- keyboards/{macropad => treasure/type9}/info.json | 2 +- .../{macropad => treasure/type9}/keymaps/default/config.h | 0 .../{macropad => treasure/type9}/keymaps/default/keymap.c | 0 keyboards/treasure/type9/keymaps/default/readme.md | 1 + keyboards/{macropad => treasure/type9}/readme.md | 4 ++-- keyboards/{macropad => treasure/type9}/rules.mk | 0 keyboards/{macropad/macropad.c => treasure/type9/type9.c} | 2 +- keyboards/{macropad/macropad.h => treasure/type9/type9.h} | 4 ++-- 10 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 keyboards/macropad/keymaps/default/readme.md rename keyboards/{macropad => treasure/type9}/config.h (99%) rename keyboards/{macropad => treasure/type9}/info.json (90%) rename keyboards/{macropad => treasure/type9}/keymaps/default/config.h (100%) rename keyboards/{macropad => treasure/type9}/keymaps/default/keymap.c (100%) create mode 100644 keyboards/treasure/type9/keymaps/default/readme.md rename keyboards/{macropad => treasure/type9}/readme.md (92%) rename keyboards/{macropad => treasure/type9}/rules.mk (100%) rename keyboards/{macropad/macropad.c => treasure/type9/type9.c} (98%) rename keyboards/{macropad/macropad.h => treasure/type9/type9.h} (96%) diff --git a/keyboards/macropad/keymaps/default/readme.md b/keyboards/macropad/keymaps/default/readme.md deleted file mode 100644 index bd3d78af21..0000000000 --- a/keyboards/macropad/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for macropad diff --git a/keyboards/macropad/config.h b/keyboards/treasure/type9/config.h similarity index 99% rename from keyboards/macropad/config.h rename to keyboards/treasure/type9/config.h index 00f2e78110..55f0a85956 100644 --- a/keyboards/macropad/config.h +++ b/keyboards/treasure/type9/config.h @@ -24,7 +24,7 @@ along with this program. If not, see . #define PRODUCT_ID 0x0000 #define DEVICE_VER 0x0001 #define MANUFACTURER Treasure -#define PRODUCT Macropad Type 9 +#define PRODUCT Type 9 #define DESCRIPTION A custom macropad /* key matrix size */ diff --git a/keyboards/macropad/info.json b/keyboards/treasure/type9/info.json similarity index 90% rename from keyboards/macropad/info.json rename to keyboards/treasure/type9/info.json index f946ed153e..7e7b1d0bda 100644 --- a/keyboards/macropad/info.json +++ b/keyboards/treasure/type9/info.json @@ -1,5 +1,5 @@ { - "keyboard_name": "Macropad", + "keyboard_name": "Type-9", "url": "", "maintainer": "qmk", "width": 3, diff --git a/keyboards/macropad/keymaps/default/config.h b/keyboards/treasure/type9/keymaps/default/config.h similarity index 100% rename from keyboards/macropad/keymaps/default/config.h rename to keyboards/treasure/type9/keymaps/default/config.h diff --git a/keyboards/macropad/keymaps/default/keymap.c b/keyboards/treasure/type9/keymaps/default/keymap.c similarity index 100% rename from keyboards/macropad/keymaps/default/keymap.c rename to keyboards/treasure/type9/keymaps/default/keymap.c diff --git a/keyboards/treasure/type9/keymaps/default/readme.md b/keyboards/treasure/type9/keymaps/default/readme.md new file mode 100644 index 0000000000..94784baccd --- /dev/null +++ b/keyboards/treasure/type9/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for Type-9 diff --git a/keyboards/macropad/readme.md b/keyboards/treasure/type9/readme.md similarity index 92% rename from keyboards/macropad/readme.md rename to keyboards/treasure/type9/readme.md index 204ec1fd23..7c567f91b9 100644 --- a/keyboards/macropad/readme.md +++ b/keyboards/treasure/type9/readme.md @@ -1,4 +1,4 @@ -# Macropad +# Type-9 3x3 Macropad. @@ -8,6 +8,6 @@ Hardware Availability: [Treasure](http://macropad.co/) Make example for this keyboard (after setting up your build environment): - make macropad:default + make treasure/type9:default See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/macropad/rules.mk b/keyboards/treasure/type9/rules.mk similarity index 100% rename from keyboards/macropad/rules.mk rename to keyboards/treasure/type9/rules.mk diff --git a/keyboards/macropad/macropad.c b/keyboards/treasure/type9/type9.c similarity index 98% rename from keyboards/macropad/macropad.c rename to keyboards/treasure/type9/type9.c index 0219746e12..58a9c8f52d 100644 --- a/keyboards/macropad/macropad.c +++ b/keyboards/treasure/type9/type9.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "macropad.h" +#include "type9.h" void matrix_init_kb(void) { // put your keyboard start-up code here diff --git a/keyboards/macropad/macropad.h b/keyboards/treasure/type9/type9.h similarity index 96% rename from keyboards/macropad/macropad.h rename to keyboards/treasure/type9/type9.h index 94471d7c57..4e3c235d11 100644 --- a/keyboards/macropad/macropad.h +++ b/keyboards/treasure/type9/type9.h @@ -13,8 +13,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#ifndef MACROPAD_H -#define MACROPAD_H +#ifndef TYPE9_H +#define TYPE9_H #include "quantum.h" From b3f6aa9480a5ddb0b0ba0d611d988121c0ff848b Mon Sep 17 00:00:00 2001 From: Anthony Som Date: Mon, 1 Oct 2018 17:39:45 +0100 Subject: [PATCH 090/269] Correct small typo A small typo (it -> in) that I noticed while reading through the documentation --- docs/flashing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/flashing.md b/docs/flashing.md index 66c08a3610..1edbe22253 100644 --- a/docs/flashing.md +++ b/docs/flashing.md @@ -2,7 +2,7 @@ There are quite a few different types of bootloaders that keyboards use, and just about all of the use a different flashing method. Luckily, projects like the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) aim to be compatible with all the different types without having to think about it much, but this article will describe the different types of bootloaders, and available methods for flashing them. -If you have a bootloader selected with the `BOOTLOADER` variable in your `rules.mk`, QMK will automatically calculate if your .hex file is the right size to be flashed to the device, and output the total size it bytes (along with the max). To run this process manually, compile with the target `check-size`, eg `make planck/rev4:default:check-size`. +If you have a bootloader selected with the `BOOTLOADER` variable in your `rules.mk`, QMK will automatically calculate if your .hex file is the right size to be flashed to the device, and output the total size in bytes (along with the max). To run this process manually, compile with the target `check-size`, eg `make planck/rev4:default:check-size`. ## DFU From da6c58175a74e4bb5a6c67f7e8b63567c14800d7 Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Fri, 28 Sep 2018 09:33:51 +0100 Subject: [PATCH 091/269] Make digital rain RGB matrix effect #define configurable. --- docs/feature_rgb_matrix.md | 1 + keyboards/model01/keymaps/dshields/config.h | 1 + keyboards/planck/keymaps/dshields/config.h | 1 + quantum/rgb_matrix.c | 8 ++++++-- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 4f827f8dc9..809d034bdc 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -140,6 +140,7 @@ These are the effects that are currently available: RGB_MATRIX_RAINBOW_PINWHEELS, RGB_MATRIX_RAINBOW_MOVING_CHEVRON, RGB_MATRIX_JELLYBEAN_RAINDROPS, + RGB_MATRIX_DIGITAL_RAIN, #ifdef RGB_MATRIX_KEYPRESSES RGB_MATRIX_SOLID_REACTIVE, RGB_MATRIX_SPLASH, diff --git a/keyboards/model01/keymaps/dshields/config.h b/keyboards/model01/keymaps/dshields/config.h index 4d609e4368..4de2d3cbb3 100644 --- a/keyboards/model01/keymaps/dshields/config.h +++ b/keyboards/model01/keymaps/dshields/config.h @@ -1,5 +1,6 @@ #pragma once +#define RGB_DIGITAL_RAIN_DROPS 18 #define USB_MAX_POWER_CONSUMPTION 100 #define ONESHOT_TAP_TOGGLE 2 #define ONESHOT_TIMEOUT 3000 diff --git a/keyboards/planck/keymaps/dshields/config.h b/keyboards/planck/keymaps/dshields/config.h index b149530b8d..512e2fbc64 100644 --- a/keyboards/planck/keymaps/dshields/config.h +++ b/keyboards/planck/keymaps/dshields/config.h @@ -1,5 +1,6 @@ #pragma once +#define RGB_DIGITAL_RAIN_DROPS 24 #define USB_MAX_POWER_CONSUMPTION 100 #define ONESHOT_TAP_TOGGLE 2 #define ONESHOT_TIMEOUT 3000 diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index b282284a13..f0c2ddfdfb 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -50,6 +50,11 @@ rgb_config_t rgb_matrix_config; #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 #endif +#ifndef RGB_DIGITAL_RAIN_DROPS + // lower the number for denser effect/wider keyboard + #define RGB_DIGITAL_RAIN_DROPS 24 +#endif + bool g_suspend_state = false; // Global tick at 20 Hz @@ -466,7 +471,6 @@ void rgb_matrix_jellybean_raindrops( bool initialize ) { void rgb_matrix_digital_rain( const bool initialize ) { // algorithm ported from https://github.com/tremby/Kaleidoscope-LEDEffect-DigitalRain const uint8_t drop_ticks = 28; - const uint8_t new_drop_probability = 24; const uint8_t pure_green_intensity = 0xd0; const uint8_t max_brightness_boost = 0xc0; const uint8_t max_intensity = 0xff; @@ -481,7 +485,7 @@ void rgb_matrix_digital_rain( const bool initialize ) { } for (uint8_t col = 0; col < MATRIX_COLS; col++) { for (uint8_t row = 0; row < MATRIX_ROWS; row++) { - if (row == 0 && drop == 0 && rand() < RAND_MAX / new_drop_probability) { + if (row == 0 && drop == 0 && rand() < RAND_MAX / RGB_DIGITAL_RAIN_DROPS) { // top row, pixels have just fallen and we're // making a new rain drop in this column map[col][row] = max_intensity; From 4318797d198b58bb807b3e436c7d8924d8b4a6fe Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 27 Aug 2018 09:16:54 -0700 Subject: [PATCH 092/269] Add user level to default_layer_state_set --- tmk_core/common/action_layer.c | 11 ++++++++++- tmk_core/common/action_layer.h | 2 ++ users/drashna/drashna.c | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index 62375dfbfe..b8dcb34f3a 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c @@ -15,13 +15,22 @@ */ uint32_t default_layer_state = 0; +/** \brief Default Layer State Set At user Level + * + * FIXME: Needs docs + */ +__attribute__((weak)) +uint32_t default_layer_state_set_user(uint32_t state) { + return state; +} + /** \brief Default Layer State Set At Keyboard Level * * FIXME: Needs docs */ __attribute__((weak)) uint32_t default_layer_state_set_kb(uint32_t state) { - return state; + return default_layer_state_set_user(state); } /** \brief Default Layer State Set diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h index 7bf116be2d..6d48321f92 100644 --- a/tmk_core/common/action_layer.h +++ b/tmk_core/common/action_layer.h @@ -31,6 +31,8 @@ void default_layer_set(uint32_t state); __attribute__((weak)) uint32_t default_layer_state_set_kb(uint32_t state); +__attribute__((weak)) +uint32_t default_layer_state_set_user(uint32_t state); #ifndef NO_ACTION_LAYER /* bitwise operation */ diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 7bb272a267..9489fb4567 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -403,8 +403,8 @@ uint32_t layer_state_set_user(uint32_t state) { } -uint32_t default_layer_state_set_kb(uint32_t state) { - return default_layer_state_set_keymap (state); +uint32_t default_layer_state_set_user(uint32_t state) { + return default_layer_state_set_keymap(state); } From e885c793bcffcba03e18e93e41120b21cdfb6b75 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 1 Oct 2018 17:53:14 -0700 Subject: [PATCH 093/269] Add Function level EECONFIG code for EEPROM (#3084) * Add Function level EEPROM configuration Add kb and user functions for EEPROM, and example of how to use it. * Bug fixes and demo * Additional cleanup * Add EEPROM reset macro to example * Forgot init function in list * Move eeconfig_init_quantum function to quantum.c and actually set default layer * See if removing weak quantum function fixes issue * Fix travis compile error * Remove ifdef blocks from EECONFIG so settings are always set * Fix for ARM EEPROM updates * Fix merge issues * Fix potential STM32 EEPROM issues --- docs/custom_quantum_functions.md | 140 +++++++++ .../ergodox_ez/keymaps/rgb_layer/config.h | 24 ++ .../ergodox_ez/keymaps/rgb_layer/keymap.c | 271 ++++++++++++++++++ quantum/quantum.c | 3 + tmk_core/common/eeconfig.c | 107 +++++-- tmk_core/common/eeconfig.h | 44 ++- 6 files changed, 547 insertions(+), 42 deletions(-) create mode 100644 keyboards/ergodox_ez/keymaps/rgb_layer/config.h create mode 100644 keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md index 10c5c75a2d..f8b84cd6b3 100644 --- a/docs/custom_quantum_functions.md +++ b/docs/custom_quantum_functions.md @@ -244,3 +244,143 @@ uint32_t layer_state_set_user(uint32_t state) { * Keymap: `uint32_t layer_state_set_user(uint32_t state)` The `state` is the bitmask of the active layers, as explained in the [Keymap Overview](keymap.md#keymap-layer-status) + + +# Persistent Configuration (EEPROM) + +This allows you to configure persistent settings for your keyboard. These settings are stored in the EEPROM of your controller, and are retained even after power loss. The settings can be read with `eeconfig_read_kb` and `eeconfig_read_user`, and can be written to using `eeconfig_update_kb` and `eeconfig_update_user`. This is useful for features that you want to be able to toggle (like toggling rgb layer indication). Additionally, you can use `eeconfig_init_kb` and `eeconfig_init_user` to set the default values for the EEPROM. + +The complicated part here, is that there are a bunch of ways that you can store and access data via EEPROM, and there is no "correct" way to do this. However, you only have a DWORD (4 bytes) for each function. + +Keep in mind that EEPROM has a limited number of writes. While this is very high, it's not the only thing writing to the EEPROM, and if you write too often, you can potentially drastically shorten the life of your MCU. + +* If you don't understand the example, then you may want to avoid using this feature, as it is rather complicated. + +### Example Implementation + +This is an example of how to add settings, and read and write it. We're using the user keymap for the example here. This is a complex function, and has a lot going on. In fact, it uses a lot of the above functions to work! + + +In your keymap.c file, add this to the top: +``` +typedef union { + uint32_t raw; + struct { + bool rgb_layer_change :1; + }; +} user_config_t; + +user_config_t user_config; +``` + +This sets up a 32 bit structure that we can store settings with in memory, and write to the EEPROM. Using this removes the need to define variables, since they're defined in this structure. Remember that `bool` (boolean) values use 1 bit, `uint8_t` uses 8 bits, `uint16_t` uses up 16 bits. You can mix and match, but changing the order can cause issues, as it will change the values that are read and written. + +We're using `rgb_layer_change`, for the `layer_state_set_*` function, and use `matrix_init_user` and `process_record_user` to configure everything. + +Now, using the `matrix_init_user` code above, you want to add `eeconfig_read_user()` to it, to populate the structure you've just created. And you can then immediately use this structure to control functionality in your keymap. And It should look like: +``` +void matrix_init_user(void) { + // Call the keymap level matrix init. + + // Read the user config from EEPROM + user_config.raw = eeconfig_read_user(); + + // Set default layer, if enabled + if (user_config.rgb_layer_change) { + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom_cyan(); + rgblight_mode_noeeprom(1); + } +} +``` +The above function will use the EEPROM config immediately after reading it, to set the default layer's RGB color. The "raw" value of it is converted in a usable structure based on the "union" that you created above. + +``` +uint32_t layer_state_set_user(uint32_t state) { + switch (biton32(state)) { + case _RAISE: + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); } + break; + case _LOWER: + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_red(); rgblight_mode_noeeprom(1); } + break; + case _PLOVER: + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(1); } + break; + case _ADJUST: + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); } + break; + default: // for any other layers, or the default layer + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); } + break; + } + return state; +} +``` +This will cause the RGB underglow to be changed ONLY if the value was enabled. Now to configure this value, create a new keycode for `process_record_user` called `RGB_LYR` and `EPRM`. Additionally, we want to make sure that if you use the normal RGB codes, that it turns off Using the example above, make it look this: +``` + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case FOO: + if (record->event.pressed) { + // Do something when pressed + } else { + // Do something else when release + } + return false; // Skip all further processing of this key + case KC_ENTER: + // Play a tone when enter is pressed + if (record->event.pressed) { + PLAY_NOTE_ARRAY(tone_qwerty); + } + return true; // Let QMK send the enter press/release events + case EPRM: + if (record->event.pressed) { + eeconfig_init(); // resets the EEPROM to default + } + return false; + case RGB_LYR: // This allows me to use underglow as layer indication, or as normal + if (record->event.pressed) { + user_config.rgb_layer_change ^= 1; // Toggles the status + eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM + if (user_config.rgb_layer_change) { // if layer state indication is enabled, + layer_state_set(layer_state); // then immediately update the layer color + } + } + return false; break; + case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference) + if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled + if (user_config.rgb_layer_change) { // only if this is enabled + user_config.rgb_layer_change = false; // disable it, and + eeconfig_update_user(user_config.raw); // write the setings to EEPROM + } + } + return true; break; + default: + return true; // Process all other keycodes normally + } +} +``` +And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. For example, if you want to set rgb layer indication by default, and save the default valued. + +``` +void eeconfig_init_user(void) { // EEPROM is getting reset! + user_config.rgb_layer_change = true; // We want this enabled by default + eeconfig_update_user(user_config.raw); // Write default value to EEPROM now + + // use the non noeeprom versions, to write these values to EEPROM too + rgblight_enable(); // Enable RGB by default + rgblight_sethsv_cyan(); // Set it to CYAN by default + rgblight_mode(1); // set to solid by default +} +``` + +And you're done. The RGB layer indication will only work if you want it to. And it will be saved, even after unplugging the board. And if you use any of the RGB codes, it will disable the layer indication, so that it stays on the mode and color that you set it to. + +### 'EECONFIG' Function Documentation + +* Keyboard/Revision: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)` and `void eeconfig_update_kb(uint32_t val)` +* Keymap: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)` and `void eeconfig_update_user(uint32_t val)` + +The `val` is the value of the data that you want to write to EEPROM. And the `eeconfig_read_*` function return a 32 bit (DWORD) value from the EEPROM. diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/config.h b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h new file mode 100644 index 0000000000..59302b8003 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h @@ -0,0 +1,24 @@ +#ifndef KEYMAP_CONFIG_H +#define KEYMAP_CONFIG_H + + + #define RGBLIGHT_SLEEP + + +#ifndef QMK_KEYS_PER_SCAN +#define QMK_KEYS_PER_SCAN 4 +#endif // !QMK_KEYS_PER_SCAN + +#define IGNORE_MOD_TAP_INTERRUPT +#undef PERMISSIVE_HOLD +#undef PREVENT_STUCK_MODIFIERS + + +#define FORCE_NKRO + +#ifndef TAPPING_TOGGLE +#define TAPPING_TOGGLE 1 +#endif + +#endif // !USERSPACE_CONFIG_H + diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c b/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c new file mode 100644 index 0000000000..384d7d0945 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c @@ -0,0 +1,271 @@ +#include QMK_KEYBOARD_H +#include "version.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + EPRM, + VRSN, + RGB_SLD, + RGB_LYR +}; + +typedef union { + uint32_t raw; + struct { + bool rgb_layer_change :1; + }; +} user_config_t; + +user_config_t user_config; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = LAYOUT_ergodox( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + ALT_T(KC_APP), KC_LGUI, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, TT(SYMB), + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,---------------------------------------------------. ,--------------------------------------------------. + * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | EPRM | | | | | | | . | 0 | = | | + * `-----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |Animat| LYR | |Toggle|Solid | + * ,------|------|------| |------+------+------. + * |Bright|Bright| | | |Hue- |Hue+ | + * |ness- |ness+ |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = LAYOUT_ergodox( + // left hand + VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + RESET, KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + EPRM,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + RGB_MOD,RGB_LYR, + KC_TRNS, + RGB_VAD,RGB_VAI,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + RGB_TOG, RGB_SLD, + KC_TRNS, + KC_TRNS, RGB_HUD, RGB_HUI +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = LAYOUT_ergodox( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +void eeconfig_init_user(void) { + rgblight_enable(); + rgblight_sethsv_cyan(); + rgblight_mode(1); + user_config.rgb_layer_change = true; + eeconfig_update_user(user_config.raw); +} + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + // dynamically generate these. + case EPRM: + if (record->event.pressed) { + eeconfig_init(); + } + return false; + break; + case VRSN: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + return false; + break; + case RGB_SLD: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_mode(1); + #endif + } + return false; + break; + case RGB_LYR: // This allows me to use underglow as layer indication, or as normal + if (record->event.pressed) { + user_config.rgb_layer_change ^= 1; // Toggles the status + eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM + if (user_config.rgb_layer_change) { // if layer state indication is enabled, + layer_state_set(layer_state); // then immediately update the layer color + } + } + return false; break; + case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference) + if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled + if (user_config.rgb_layer_change) { // only if this is enabled + user_config.rgb_layer_change = false; // disable it, and + eeconfig_update_user(user_config.raw); // write the setings to EEPROM + } + } + return true; break; + } + return true; +} + +void matrix_init_user(void) { + // Call the keymap level matrix init. + + // Read the user config from EEPROM + user_config.raw = eeconfig_read_user(); + + // Set default layer, if enabled + if (user_config.rgb_layer_change) { + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom_cyan(); + rgblight_mode_noeeprom(1); + } +} + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + +}; + +uint32_t layer_state_set_user(uint32_t state) { + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (biton32(state)) { + case SYMB: + ergodox_right_led_1_on(); + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_red(); rgblight_mode_noeeprom(1); } + break; + case MDIA: + ergodox_right_led_2_on(); + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(1); } + break; + case 3: + ergodox_right_led_3_on(); + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_blue(); rgblight_mode_noeeprom(1); } + break; + case 4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_orange(); rgblight_mode_noeeprom(1); } + break; + case 5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_yellow(); rgblight_mode_noeeprom(1); } + break; + case 6: + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_pink(); rgblight_mode_noeeprom(1); } + break; + case 7: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); } + break; + default: // for any other layers, or the default layer + if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); } + break; + } + return state; +} + diff --git a/quantum/quantum.c b/quantum/quantum.c index 84ccbdeaba..eed59f811e 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -945,6 +945,9 @@ void tap_random_base64(void) { } void matrix_init_quantum() { + if (!eeconfig_is_enabled() && !eeconfig_is_disabled()) { + eeconfig_init(); + } #ifdef BACKLIGHT_ENABLE backlight_init_ports(); #endif diff --git a/tmk_core/common/eeconfig.c b/tmk_core/common/eeconfig.c index 35de574a96..0fec410a9c 100644 --- a/tmk_core/common/eeconfig.c +++ b/tmk_core/common/eeconfig.c @@ -8,32 +8,54 @@ #include "eeprom_stm32.h" #endif +extern uint32_t default_layer_state; +/** \brief eeconfig enable + * + * FIXME: needs doc + */ +__attribute__ ((weak)) +void eeconfig_init_user(void) { + // Reset user EEPROM value to blank, rather than to a set value + eeconfig_update_user(0); +} + +__attribute__ ((weak)) +void eeconfig_init_kb(void) { + // Reset Keyboard EEPROM value to blank, rather than to a set value + eeconfig_update_kb(0); + + eeconfig_init_user(); +} + + +/* + * FIXME: needs doc + */ +void eeconfig_init_quantum(void) { +#ifdef STM32F303xC + EEPROM_format(); +#endif + eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); + eeprom_update_byte(EECONFIG_DEBUG, 0); + eeprom_update_byte(EECONFIG_DEFAULT_LAYER, 0); + default_layer_state = 0; + eeprom_update_byte(EECONFIG_KEYMAP, 0); + eeprom_update_byte(EECONFIG_MOUSEKEY_ACCEL, 0); + eeprom_update_byte(EECONFIG_BACKLIGHT, 0); + eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default + eeprom_update_dword(EECONFIG_RGBLIGHT, 0); + eeprom_update_byte(EECONFIG_STENOMODE, 0); + + eeconfig_init_kb(); +} + /** \brief eeconfig initialization * * FIXME: needs doc */ -void eeconfig_init(void) -{ -#ifdef STM32F303xC - EEPROM_format(); -#endif - eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); - eeprom_update_byte(EECONFIG_DEBUG, 0); - eeprom_update_byte(EECONFIG_DEFAULT_LAYER, 0); - eeprom_update_byte(EECONFIG_KEYMAP, 0); - eeprom_update_byte(EECONFIG_MOUSEKEY_ACCEL, 0); -#ifdef BACKLIGHT_ENABLE - eeprom_update_byte(EECONFIG_BACKLIGHT, 0); -#endif -#ifdef AUDIO_ENABLE - eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default -#endif -#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) - eeprom_update_dword(EECONFIG_RGBLIGHT, 0); -#endif -#ifdef STENO_ENABLE - eeprom_update_byte(EECONFIG_STENOMODE, 0); -#endif +void eeconfig_init(void) { + + eeconfig_init_quantum(); } /** \brief eeconfig enable @@ -54,7 +76,7 @@ void eeconfig_disable(void) #ifdef STM32F303xC EEPROM_format(); #endif - eeprom_update_word(EECONFIG_MAGIC, 0xFFFF); + eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF); } /** \brief eeconfig is enabled @@ -66,6 +88,15 @@ bool eeconfig_is_enabled(void) return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER); } +/** \brief eeconfig is disabled + * + * FIXME: needs doc + */ +bool eeconfig_is_disabled(void) +{ + return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER_OFF); +} + /** \brief eeconfig read debug * * FIXME: needs doc @@ -99,7 +130,6 @@ uint8_t eeconfig_read_keymap(void) { return eeprom_read_byte(EECONFIG_KEYMA */ void eeconfig_update_keymap(uint8_t val) { eeprom_update_byte(EECONFIG_KEYMAP, val); } -#ifdef BACKLIGHT_ENABLE /** \brief eeconfig read backlight * * FIXME: needs doc @@ -110,9 +140,8 @@ uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BA * FIXME: needs doc */ void eeconfig_update_backlight(uint8_t val) { eeprom_update_byte(EECONFIG_BACKLIGHT, val); } -#endif -#ifdef AUDIO_ENABLE + /** \brief eeconfig read audio * * FIXME: needs doc @@ -123,4 +152,28 @@ uint8_t eeconfig_read_audio(void) { return eeprom_read_byte(EECONFIG_AUDIO) * FIXME: needs doc */ void eeconfig_update_audio(uint8_t val) { eeprom_update_byte(EECONFIG_AUDIO, val); } -#endif + + +/** \brief eeconfig read kb + * + * FIXME: needs doc + */ +uint32_t eeconfig_read_kb(void) { return eeprom_read_dword(EECONFIG_KEYBOARD); } +/** \brief eeconfig update kb + * + * FIXME: needs doc + */ + +void eeconfig_update_kb(uint32_t val) { eeprom_update_dword(EECONFIG_KEYBOARD, val); } +/** \brief eeconfig read user + * + * FIXME: needs doc + */ +uint32_t eeconfig_read_user(void) { return eeprom_read_dword(EECONFIG_USER); } +/** \brief eeconfig update user + * + * FIXME: needs doc + */ +void eeconfig_update_user(uint32_t val) { eeprom_update_dword(EECONFIG_USER, val); } + + diff --git a/tmk_core/common/eeconfig.h b/tmk_core/common/eeconfig.h index fa498df48c..a45cb8b12d 100644 --- a/tmk_core/common/eeconfig.h +++ b/tmk_core/common/eeconfig.h @@ -23,36 +23,41 @@ along with this program. If not, see . #define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEED +#define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF /* eeprom parameteter address */ #if !defined(STM32F303xC) #define EECONFIG_MAGIC (uint16_t *)0 -#define EECONFIG_DEBUG (uint8_t *)2 -#define EECONFIG_DEFAULT_LAYER (uint8_t *)3 -#define EECONFIG_KEYMAP (uint8_t *)4 -#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5 -#define EECONFIG_BACKLIGHT (uint8_t *)6 -#define EECONFIG_AUDIO (uint8_t *)7 +#define EECONFIG_DEBUG (uint8_t *)2 +#define EECONFIG_DEFAULT_LAYER (uint8_t *)3 +#define EECONFIG_KEYMAP (uint8_t *)4 +#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5 +#define EECONFIG_BACKLIGHT (uint8_t *)6 +#define EECONFIG_AUDIO (uint8_t *)7 #define EECONFIG_RGBLIGHT (uint32_t *)8 #define EECONFIG_UNICODEMODE (uint8_t *)12 #define EECONFIG_STENOMODE (uint8_t *)13 // EEHANDS for two handed boards -#define EECONFIG_HANDEDNESS (uint8_t *)14 +#define EECONFIG_HANDEDNESS (uint8_t *)14 +#define EECONFIG_KEYBOARD (uint32_t *)15 +#define EECONFIG_USER (uint32_t *)19 #else /* STM32F3 uses 16byte block. Reconfigure memory map */ #define EECONFIG_MAGIC (uint16_t *)0 -#define EECONFIG_DEBUG (uint8_t *)1 -#define EECONFIG_DEFAULT_LAYER (uint8_t *)2 -#define EECONFIG_KEYMAP (uint8_t *)3 -#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)4 -#define EECONFIG_BACKLIGHT (uint8_t *)5 -#define EECONFIG_AUDIO (uint8_t *)6 +#define EECONFIG_DEBUG (uint8_t *)1 +#define EECONFIG_DEFAULT_LAYER (uint8_t *)2 +#define EECONFIG_KEYMAP (uint8_t *)3 +#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)4 +#define EECONFIG_BACKLIGHT (uint8_t *)5 +#define EECONFIG_AUDIO (uint8_t *)6 #define EECONFIG_RGBLIGHT (uint32_t *)7 -#define EECONFIG_UNICODEMODE (uint8_t *)9 +#define EECONFIG_UNICODEMODE (uint8_t *)9 #define EECONFIG_STENOMODE (uint8_t *)10 // EEHANDS for two handed boards -#define EECONFIG_HANDEDNESS (uint8_t *)11 +#define EECONFIG_HANDEDNESS (uint8_t *)11 +#define EECONFIG_KEYBOARD (uint32_t *)12 +#define EECONFIG_USER (uint32_t *)14 #endif /* debug bit */ @@ -73,8 +78,12 @@ along with this program. If not, see . bool eeconfig_is_enabled(void); +bool eeconfig_is_disabled(void); void eeconfig_init(void); +void eeconfig_init_quantum(void); +void eeconfig_init_kb(void); +void eeconfig_init_user(void); void eeconfig_enable(void); @@ -99,4 +108,9 @@ uint8_t eeconfig_read_audio(void); void eeconfig_update_audio(uint8_t val); #endif +uint32_t eeconfig_read_kb(void); +void eeconfig_update_kb(uint32_t val); +uint32_t eeconfig_read_user(void); +void eeconfig_update_user(uint32_t val); + #endif From 26f4e7031a643ce2760ae7b6df3bd2c79710451a Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 1 Oct 2018 17:53:47 -0700 Subject: [PATCH 094/269] Add tap_code function (#3784) * Add tap_code * formatting * Doc clarification * Rename variable to make more consistent --- docs/feature_macros.md | 4 ++++ tmk_core/common/action.h | 1 + 2 files changed, 5 insertions(+) diff --git a/docs/feature_macros.md b/docs/feature_macros.md index 6731530812..ba5d91882f 100644 --- a/docs/feature_macros.md +++ b/docs/feature_macros.md @@ -228,6 +228,10 @@ This sends the `` keydown event to the computer. Some examples would be `KC_ Parallel to `register_code` function, this sends the `` keyup event to the computer. If you don't use this, the key will be held down until it's sent. +### `tap_code();` + +This will send `register_code()` and then `unregister_code()`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it). + ### `clear_keyboard();` This will clear all mods and keys currently pressed. diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h index 0322c73ed1..833febe9ce 100644 --- a/tmk_core/common/action.h +++ b/tmk_core/common/action.h @@ -88,6 +88,7 @@ void process_record(keyrecord_t *record); void process_action(keyrecord_t *record, action_t action); void register_code(uint8_t code); void unregister_code(uint8_t code); +inline void tap_code(uint8_t code) { register_code(code); unregister_code(code); } void register_mods(uint8_t mods); void unregister_mods(uint8_t mods); //void set_mods(uint8_t mods); From f5ae3760c6be7e927fba74aca4a0cf21a44113af Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 1 Oct 2018 17:56:04 -0700 Subject: [PATCH 095/269] Add send_unicode_hex_string function (#3828) * Add send_string_unicode function Co-authored-by: kdb424 Co-authored-by: Konstantin * Clean up code based on feedback * Fix includes --- docs/feature_unicode.md | 7 ++++- .../process_keycode/process_unicode_common.c | 28 +++++++++++++++++++ .../process_keycode/process_unicode_common.h | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/docs/feature_unicode.md b/docs/feature_unicode.md index ecad6c60c7..278b93ad79 100644 --- a/docs/feature_unicode.md +++ b/docs/feature_unicode.md @@ -19,7 +19,7 @@ table. TBD Unicode input in QMK works by inputing a sequence of characters to the OS, -sort of like macro. Unfortunately, each OS has different ideas on how Unicode is inputted. +sort of like macro. Unfortunately, each OS has different ideas on how Unicode is input. This is the current list of Unicode input method in QMK: @@ -29,6 +29,11 @@ This is the current list of Unicode input method in QMK: * UC_WIN: (not recommended) Windows built-in Unicode input. To enable: create registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad`, set its value to 1, and reboot. This method is not recommended because of reliability and compatibility issue, use WinCompose method below instead. * UC_WINC: Windows Unicode input using WinCompose. Requires [WinCompose](https://github.com/samhocevar/wincompose). Works reliably under many (all?) variations of Windows. +To type multiple characters for things like (ノಠ痊ಠ)ノ彡┻━┻, you can use `send_unicode_hex_string()` much like `SEND_STRING()` except you would use hex values seperated by spaces. +For example, the table flip seen above would be `send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B")` + +There are many ways to get a hex code, but an easy one is [this site](https://r12a.github.io/app-conversion/). Just make sure to convert to hexadecimal, and that is your string. + # Additional Language Support In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware. diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c index 7f34ad57cf..e6620b7ea9 100644 --- a/quantum/process_keycode/process_unicode_common.c +++ b/quantum/process_keycode/process_unicode_common.c @@ -16,6 +16,8 @@ #include "process_unicode_common.h" #include "eeprom.h" +#include +#include static uint8_t input_mode; uint8_t mods; @@ -120,3 +122,29 @@ void register_hex(uint16_t hex) { unregister_code(hex_to_keycode(digit)); } } + +void send_unicode_hex_string(const char *str) +{ + if (!str) { return; } // Safety net + + while (*str) { + // Find the next code point (token) in the string + for (; *str == ' '; str++); + size_t n = strcspn(str, " "); // Length of the current token + char code_point[n+1]; + strncpy(code_point, str, n); + code_point[n] = '\0'; // Make sure it's null-terminated + + // Normalize the code point: make all hex digits lowercase + for (char *p = code_point; *p; p++) { + *p = tolower((unsigned char)*p); + } + + // Send the code point as a Unicode input string + unicode_input_start(); + send_string(code_point); + unicode_input_finish(); + + str += n; // Move to the first ' ' (or '\0') after the current token + } +} diff --git a/quantum/process_keycode/process_unicode_common.h b/quantum/process_keycode/process_unicode_common.h index 4d2b04fb39..814b60c573 100644 --- a/quantum/process_keycode/process_unicode_common.h +++ b/quantum/process_keycode/process_unicode_common.h @@ -31,6 +31,7 @@ uint8_t get_unicode_input_mode(void); void unicode_input_start(void); void unicode_input_finish(void); void register_hex(uint16_t hex); +void send_unicode_hex_string(const char *str); #define UC_OSX 0 // Mac OS X #define UC_LNX 1 // Linux From 1512a6bfd48fb75619a1f77394d41bdca7ea28b1 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 1 Oct 2018 18:00:14 -0700 Subject: [PATCH 096/269] Keymap: Update to drashna keymaps and userspace (#3992) * Enabled unicode support and send_unicode function * Unicode cleanup * More unicode tweaking * Update EEPROM stuff * Account for keyboard macros * Switch Equal to Plus on Ergodox * more tweaks * Minor Unicode tweaks * Correct matrix printing for keylogger * Fix unicode functions * Fix unicode mode set since it actually uses EEPROM * Re-add DISABLE_LEADER * Ergodox is easier to hit the tapping term, fix that * Fix stupid type on unicode mode check * Preliminary CRKBD/HeliDox support * Fixes to Helidox * Cleanup userspace from old merge stuff * Remove CCCV sounds * Make Mode NOEEPROM Again --- keyboards/crkbd/keymaps/drashna/config.h | 43 +++ keyboards/crkbd/keymaps/drashna/glcdfont.c | 244 ++++++++++++++++++ keyboards/crkbd/keymaps/drashna/keymap.c | 173 +++++++++++++ keyboards/crkbd/keymaps/drashna/rules.mk | 30 +++ layouts/community/ergodox/drashna/keymap.c | 18 +- layouts/community/ergodox/drashna/rules.mk | 4 +- users/drashna/config.h | 10 +- users/drashna/drashna.c | 75 +++--- users/drashna/drashna.h | 28 +- users/drashna/rgb_stuff.c | 5 +- users/drashna/rules.mk | 7 +- users/drashna/send_unicode.c | 58 +++++ .../{drashna_unicode.h => send_unicode.h} | 10 +- 13 files changed, 639 insertions(+), 66 deletions(-) create mode 100644 keyboards/crkbd/keymaps/drashna/config.h create mode 100644 keyboards/crkbd/keymaps/drashna/glcdfont.c create mode 100644 keyboards/crkbd/keymaps/drashna/keymap.c create mode 100644 keyboards/crkbd/keymaps/drashna/rules.mk create mode 100644 users/drashna/send_unicode.c rename users/drashna/{drashna_unicode.h => send_unicode.h} (90%) diff --git a/keyboards/crkbd/keymaps/drashna/config.h b/keyboards/crkbd/keymaps/drashna/config.h new file mode 100644 index 0000000000..366f013dca --- /dev/null +++ b/keyboards/crkbd/keymaps/drashna/config.h @@ -0,0 +1,43 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 + + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#define SSD1306OLED + +#define USE_SERIAL_PD2 + +// #define TAPPING_FORCE_HOLD +// #define TAPPING_TERM 100 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 27 +#define RGBLIGHT_LIMIT_VAL 120 +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 diff --git a/keyboards/crkbd/keymaps/drashna/glcdfont.c b/keyboards/crkbd/keymaps/drashna/glcdfont.c new file mode 100644 index 0000000000..4e7b27bc0c --- /dev/null +++ b/keyboards/crkbd/keymaps/drashna/glcdfont.c @@ -0,0 +1,244 @@ +// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. +// See gfxfont.h for newer custom bitmap font info. + +#ifndef FONT5X7_H +#define FONT5X7_H + +#ifdef __AVR__ + #include + #include +#elif defined(ESP8266) + #include +#else + #define PROGMEM +#endif + +// Standard ASCII 5x7 font + +static const unsigned char font[] PROGMEM = { +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, +0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, +0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, +0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, +0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, +0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, +0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, +0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, +0x00, 0x18, 0x24, 0x18, 0x00, 0x00, +0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, +0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, +0x26, 0x29, 0x79, 0x29, 0x26, 0x00, +0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, +0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, +0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, +0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, +0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, +0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, +0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, +0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, +0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, +0x60, 0x60, 0x60, 0x60, 0x60, 0x00, +0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, +0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, +0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, +0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, +0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, +0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, +0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, +0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, +0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, +0x00, 0x07, 0x00, 0x07, 0x00, 0x00, +0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, +0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, +0x23, 0x13, 0x08, 0x64, 0x62, 0x00, +0x36, 0x49, 0x56, 0x20, 0x50, 0x00, +0x00, 0x08, 0x07, 0x03, 0x00, 0x00, +0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, +0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, +0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, +0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, +0x00, 0x80, 0x70, 0x30, 0x00, 0x00, +0x08, 0x08, 0x08, 0x08, 0x08, 0x00, +0x00, 0x00, 0x60, 0x60, 0x00, 0x00, +0x20, 0x10, 0x08, 0x04, 0x02, 0x00, +0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, +0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, +0x72, 0x49, 0x49, 0x49, 0x46, 0x00, +0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, +0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, +0x27, 0x45, 0x45, 0x45, 0x39, 0x00, +0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, +0x41, 0x21, 0x11, 0x09, 0x07, 0x00, +0x36, 0x49, 0x49, 0x49, 0x36, 0x00, +0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, +0x00, 0x00, 0x14, 0x00, 0x00, 0x00, +0x00, 0x40, 0x34, 0x00, 0x00, 0x00, +0x00, 0x08, 0x14, 0x22, 0x41, 0x00, +0x14, 0x14, 0x14, 0x14, 0x14, 0x00, +0x00, 0x41, 0x22, 0x14, 0x08, 0x00, +0x02, 0x01, 0x59, 0x09, 0x06, 0x00, +0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, +0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, +0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, +0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, +0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, +0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, +0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, +0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, +0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, +0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, +0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, +0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, +0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, +0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, +0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, +0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, +0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, +0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, +0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, +0x26, 0x49, 0x49, 0x49, 0x32, 0x00, +0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, +0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, +0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, +0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, +0x63, 0x14, 0x08, 0x14, 0x63, 0x00, +0x03, 0x04, 0x78, 0x04, 0x03, 0x00, +0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, +0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, +0x02, 0x04, 0x08, 0x10, 0x20, 0x00, +0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, +0x04, 0x02, 0x01, 0x02, 0x04, 0x00, +0x40, 0x40, 0x40, 0x40, 0x40, 0x00, +0x00, 0x03, 0x07, 0x08, 0x00, 0x00, +0x20, 0x54, 0x54, 0x78, 0x40, 0x00, +0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, +0x38, 0x44, 0x44, 0x44, 0x28, 0x00, +0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, +0x38, 0x54, 0x54, 0x54, 0x18, 0x00, +0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, +0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, +0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, +0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, +0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, +0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, +0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, +0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, +0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, +0x38, 0x44, 0x44, 0x44, 0x38, 0x00, +0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, +0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, +0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, +0x48, 0x54, 0x54, 0x54, 0x24, 0x00, +0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, +0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, +0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, +0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, +0x44, 0x28, 0x10, 0x28, 0x44, 0x00, +0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, +0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, +0x00, 0x08, 0x36, 0x41, 0x00, 0x00, +0x00, 0x00, 0x77, 0x00, 0x00, 0x00, +0x00, 0x41, 0x36, 0x08, 0x00, 0x00, +0x02, 0x01, 0x02, 0x04, 0x02, 0x00, +0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF, +0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00, +0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE, +0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0, +0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF, +0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70, +0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E, +0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0, +0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E, +0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, +0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, +0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, +0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, +0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, +0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, +0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, +0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, +0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x03, +0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE, +0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F, +0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07, +0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D, +0x0B, 0x07, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, +0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07, +0x01, 0x01, 0x01, 0x03, 0x06, 0x06, +0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E, +0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30, +0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC, +0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8, +0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0, +0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC, +0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8, +0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0, +0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC, +0x7C, 0x38, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, +0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, +0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, +0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, +0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, +0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, +0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, +0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x03, 0x07, +0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, +0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C, +0x78, 0x70, 0x70, 0x70, 0x70, 0x70, +0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E, +0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38, +0x38, 0x18, 0x0C, 0x06, 0x03, 0x01, +0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F, +0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03, +0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00, +0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E, +0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F, +0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C, +0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#endif // FONT5X7_H diff --git a/keyboards/crkbd/keymaps/drashna/keymap.c b/keyboards/crkbd/keymaps/drashna/keymap.c new file mode 100644 index 0000000000..7bced8de33 --- /dev/null +++ b/keyboards/crkbd/keymaps/drashna/keymap.c @@ -0,0 +1,173 @@ +#include QMK_KEYBOARD_H +#include "drashna.h" +#ifdef PROTOCOL_LUFA + #include "lufa.h" + #include "split_util.h" +#endif +#ifdef SSD1306OLED + #include "ssd1306.h" +#endif + +extern keymap_config_t keymap_config; +extern uint8_t is_master; + +#ifdef RGBLIGHT_ENABLE +//Following line allows macro to read current RGB settings +extern rgblight_config_t rgblight_config; +#endif + +enum crkbd_keycodes { + RGBRST = NEW_SAFE_RANGE +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_wrapper( + KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, + KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, + KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF, + LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + ), + [_COLEMAK] = LAYOUT_wrapper( + KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, + KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, + KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF, + LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + ), + [_DVORAK] = LAYOUT_wrapper( + KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, + KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, + KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF, + LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + ), + [_WORKMAN] = LAYOUT_wrapper( + KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, + KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, + KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF, + LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + ), + + [_MODS] = LAYOUT_wrapper( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT, + _______, _______, _______, _______, _______, _______ + ), + + [_LOWER] = LAYOUT_wrapper( + KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_BSPC, + KC_F11, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE, + KC_F12, _________________LOWER_L3__________________, _________________LOWER_R3__________________, _______, + _______, _______, _______, _______, _______, _______ + ), + + [_RAISE] = LAYOUT_wrapper( \ + KC_GRV, _________________RAISE_L1__________________, _________________RAISE_R1__________________, KC_BSPC, + _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS, + _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______, + _______, _______, _______, _______, _______, _______ //`--------------------' `--------------------' + ), + + [_ADJUST] = LAYOUT_wrapper( \ + KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET, + VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EPRM, + TG_MODS, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, KC_MPLY, + _______, _______, _______, _______, _______, _______ + ) +}; + +int RGB_current_mode; + +void matrix_init_keymap(void) { + #ifdef RGBLIGHT_ENABLE + RGB_current_mode = rgblight_config.mode; + #endif + //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h + #ifdef SSD1306OLED + iota_gfx_init(!has_usb()); // turns on the display + #endif + + DDRD &= ~(1<<5); + PORTD &= ~(1<<5); + + DDRB &= ~(1<<0); + PORTB &= ~(1<<0);} + +//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h +#ifdef SSD1306OLED + +// When add source files to SRC in rules.mk, you can use functions. +const char *read_layer_state(void); +const char *read_logo(void); +void set_keylog(uint16_t keycode, keyrecord_t *record); +const char *read_keylog(void); +const char *read_keylogs(void); + +// const char *read_mode_icon(bool swap); +// const char *read_host_led_state(void); +// void set_timelog(void); +// const char *read_timelog(void); + +void matrix_scan_keymap(void) { + iota_gfx_task(); +} + +void matrix_render_user(struct CharacterMatrix *matrix) { + if (is_master) { + // If you want to change the display of OLED, you need to change here + matrix_write_ln(matrix, read_layer_state()); + matrix_write_ln(matrix, read_keylog()); + matrix_write_ln(matrix, read_keylogs()); + //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui)); + //matrix_write_ln(matrix, read_host_led_state()); + //matrix_write_ln(matrix, read_timelog()); + } else { + matrix_write(matrix, read_logo()); + } +} + +void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { + if (memcmp(dest->display, source->display, sizeof(dest->display))) { + memcpy(dest->display, source->display, sizeof(dest->display)); + dest->dirty = true; + } +} + +void iota_gfx_task_user(void) { + struct CharacterMatrix matrix; + matrix_clear(&matrix); + matrix_render_user(&matrix); + matrix_update(&display, &matrix); +} + +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + set_keylog(keycode, record); + // set_timelog(); + } + + switch (keycode) { + case RGB_MOD: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + rgblight_mode_noeeprom(RGB_current_mode); + rgblight_step(); + RGB_current_mode = rgblight_config.mode; + } + #endif + return false; + break; + case RGBRST: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + eeconfig_update_rgblight_default(); + rgblight_enable(); + RGB_current_mode = rgblight_config.mode; + } + #endif + break; + } + return true; +} + +#endif diff --git a/keyboards/crkbd/keymaps/drashna/rules.mk b/keyboards/crkbd/keymaps/drashna/rules.mk new file mode 100644 index 0000000000..f490aa2ea8 --- /dev/null +++ b/keyboards/crkbd/keymaps/drashna/rules.mk @@ -0,0 +1,30 @@ + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SWAP_HANDS_ENABLE = no # Enable one-hand typing + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +# If you want to change the display of OLED, you need to change here +SRC += ./lib/rgb_state_reader.c \ + ./lib/layer_state_reader.c \ + ./lib/logo_reader.c \ + ./lib/keylogger.c \ + # ./lib/mode_icon_reader.c \ + # ./lib/host_led_state_reader.c \ + # ./lib/timelogger.c \ diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c index 4d7700f199..15153c4692 100644 --- a/layouts/community/ergodox/drashna/keymap.c +++ b/layouts/community/ergodox/drashna/keymap.c @@ -57,11 +57,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_QWERTY] = LAYOUT_ergodox_pretty_wrapper( // left hand // right hand - KC_EQL, ________________NUMBER_LEFT________________, _______, _______, ________________NUMBER_RIGHT_______________, KC_MINS, + KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, KC_TAB, _________________QWERTY_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS, KC_C1R3, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF, - KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, KC_NO, + KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, UC_IRNY, __________________ERGODOX_THUMB_CLUSTER_____________________ ), /* Keymap 0: COLEMAK layer @@ -89,11 +89,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Otherwise, it needs KC_* [_COLEMAK] = LAYOUT_ergodox_pretty_wrapper( // left hand // right hand - KC_EQL, ________________NUMBER_LEFT________________, _______, _______, ________________NUMBER_RIGHT_______________, KC_MINS, + KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS, KC_C1R3, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF, - KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, KC_NO, + KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, UC_IRNY, __________________ERGODOX_THUMB_CLUSTER_____________________ ), /* Keymap 0: DVORAK Layout @@ -121,11 +121,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Otherwise, it needs KC_* [_DVORAK] = LAYOUT_ergodox_pretty_wrapper( // left hand // right hand - KC_EQL, ________________NUMBER_LEFT________________, _______, _______, ________________NUMBER_RIGHT_______________, KC_BSLS, + KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_BSLS, KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH, KC_C1R3, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_MINS, KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF, - KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, KC_NO, + KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, UC_IRNY, __________________ERGODOX_THUMB_CLUSTER_____________________ ), /* Keymap 0: WORKMAN layer @@ -153,11 +153,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Otherwise, it needs KC_* [_WORKMAN] = LAYOUT_ergodox_pretty_wrapper( // left hand - KC_EQL, ________________NUMBER_LEFT________________, _______, _______, ________________NUMBER_RIGHT_______________, KC_MINS, + KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS, KC_C1R3, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF, - KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, KC_NO, + KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, UC_IRNY, __________________ERGODOX_THUMB_CLUSTER_____________________ ), @@ -197,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_GAMEPAD] = LAYOUT_ergodox_pretty_wrapper( KC_ESC, KC_NO, KC_1, KC_2, KC_3, HYPR(KC_Q), HYPR(KC_GRV), KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, - KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T, UC_SHRG, UC_DISA, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, KC_I, KC_O, KC_NO, KC_NO, KC_NO, KC_NO, KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS, TG(_GAMEPAD), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO, KC_GRV, KC_U, KC_I, KC_Y, KC_T, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, diff --git a/layouts/community/ergodox/drashna/rules.mk b/layouts/community/ergodox/drashna/rules.mk index 30d513c911..8bf53950e4 100644 --- a/layouts/community/ergodox/drashna/rules.mk +++ b/layouts/community/ergodox/drashna/rules.mk @@ -8,8 +8,8 @@ endif CONSOLE_ENABLE = no BOOTMAGIC_ENABLE = yes -UNICODE_ENABLE = no -UNICDOEMAP_ENABLE = yes +UNICODE_ENABLE = yes +UNICDOEMAP_ENABLE = no MACROS_ENABLED = no RGBLIGHT_TWINKLE = no diff --git a/users/drashna/config.h b/users/drashna/config.h index 92efcc5c74..3ddec93b13 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -55,7 +55,11 @@ #ifdef TAPPING_TERM #undef TAPPING_TERM #endif // TAPPING_TERM -#define TAPPING_TERM 175 +#ifdef KEYBOARD_ergodox_ez + #define TAPPING_TERM 185 +#else + #define TAPPING_TERM 175 +#endif // Disable action_get_macro and fn_actions, since we don't use these @@ -63,4 +67,8 @@ #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION +#define DISABLE_LEADER + #define MACRO_TIMER 5 + + diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 9489fb4567..aad9fab611 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -21,6 +21,7 @@ along with this program. If not, see . userspace_config_t userspace_config; +uint16_t copy_paste_timer; // Helper Functions @@ -131,7 +132,7 @@ void led_set_keymap(uint8_t usb_led) {} // Call user matrix init, set default RGB colors and then // call the keymap's init function void matrix_init_user(void) { - userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE); + userspace_config.raw = eeprom_read_dword(EECONFIG_USERSPACE); #ifdef BOOTLOADER_CATERINA @@ -143,7 +144,9 @@ void matrix_init_user(void) { #endif #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) - set_unicode_input_mode(UC_WINC); + if (eeprom_read_byte(EECONFIG_UNICODEMODE) != UC_WIN) { + set_unicode_input_mode(UC_WIN); + } #endif //UNICODE_ENABLE matrix_init_keymap(); } @@ -173,17 +176,12 @@ void shutdown_user (void) { shutdown_keymap(); } -void suspend_power_down_user(void) -{ +void suspend_power_down_user(void) { suspend_power_down_keymap(); } -void suspend_wakeup_init_user(void) -{ +void suspend_wakeup_init_user(void) { suspend_wakeup_init_keymap(); - #ifdef KEYBOARD_ergodox_ez - wait_ms(10); - #endif } @@ -216,7 +214,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // If console is enabled, it will print the matrix position and status of each key pressed #ifdef KEYLOGGER_ENABLE - xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed); + #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2) + xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed); + #else + xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed); + #endif #endif //KEYLOGGER_ENABLE switch (keycode) { @@ -249,7 +251,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader if (!record->event.pressed) { send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP -#if (defined(BOOTLOADER_DFU) || defined(BOOTLOADER_LUFA_DFU) || defined(BOOTLOADER_QMK_DFU)) +#if defined(__ARM__) + ":dfu-util" +#elif defined(BOOTLOADER_DFU) ":dfu" #elif defined(BOOTLOADER_HALFKAY) ":teensy" @@ -291,7 +295,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // to save on firmware space, since it's limited. #ifdef MACROS_ENABLED case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros - if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); } + if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); } #ifdef RGBLIGHT_ENABLE userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18); #endif //RGBLIGHT_ENABLE @@ -342,45 +346,40 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_LCTL); tap(KC_C); unregister_code(KC_LCTL); -#ifdef AUDIO_ENABLE - PLAY_SONG(tone_copy); -#endif } else { // Tap, paste register_code(KC_LCTL); tap(KC_V); unregister_code(KC_LCTL); -#ifdef AUDIO_ENABLE - PLAY_SONG(tone_paste); -#endif } } return false; break; #ifdef UNICODE_ENABLE - case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻ + case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻ if (record->event.pressed) { - register_code(KC_RSFT); - tap(KC_9); - unregister_code(KC_RSFT); - process_unicode((0x256F | QK_UNICODE), record); // Arm - process_unicode((0x00B0 | QK_UNICODE), record); // Eye - process_unicode((0x25A1 | QK_UNICODE), record); // Mouth - process_unicode((0x00B0 | QK_UNICODE), record); // Eye - register_code(KC_RSFT); - tap(KC_0); - unregister_code(KC_RSFT); - process_unicode((0x256F | QK_UNICODE), record); // Arm - tap(KC_SPC); - process_unicode((0x0361 | QK_UNICODE), record); // Flippy - tap(KC_SPC); - process_unicode((0x253B | QK_UNICODE), record); // Table - process_unicode((0x2501 | QK_UNICODE), record); // Table - process_unicode((0x253B | QK_UNICODE), record); // Table + send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B"); } return false; break; -#endif // UNICODE_ENABLE - + case UC_TABL: // ┬─┬ノ( º _ ºノ) + if (record->event.pressed) { + send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029"); + } + return false; + break; + case UC_SHRG: // ¯\_(ツ)_/¯ + if (record->event.pressed) { + send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); + } + return false; + break; + case UC_DISA: // ಠ_ಠ + if (record->event.pressed) { + send_unicode_hex_string("0CA0 005F 0CA0"); + } + return false; + break; +#endif } return process_record_keymap(keycode, record) && #ifdef RGBLIGHT_ENABLE diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index de8c3ba947..49e3fc870b 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -19,9 +19,13 @@ along with this program. If not, see . #include "quantum.h" #include "version.h" #include "eeprom.h" +#include "send_unicode.h" + #ifdef RGB_MATRIX_ENABLE #include "rgb_matrix.h" #endif + + // Define layer names enum userspace_layers { _QWERTY = 0, @@ -59,19 +63,26 @@ inline void tap(uint16_t keycode){ register_code(keycode); unregister_code(keyco bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed); bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); -#define EECONFIG_USERSPACE (uint8_t *)19 +#define EECONFIG_USERSPACE (uint32_t *)19 typedef union { - uint8_t raw; + uint32_t raw; struct { bool rgb_layer_change :1; bool is_overwatch :1; bool nuke_switch :1; + uint8_t unicode_mod :4; }; } userspace_config_t; +#if defined(KEYMAP_SAFE_RANGE) + #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE +#else + #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE +#endif + enum userspace_custom_keycodes { - EPRM = SAFE_RANGE, // Resets EEPROM do defaults (as in eeconfig_init) + EPRM = PLACEHOLDER_SAFE_RANGE, // Resets EEPROM do defaults (as in eeconfig_init) VRSN, // Prints QMK Firmware and board info KC_QWERTY, // Sets default layer to QWERTY KC_COLEMAK, // Sets default layer to COLEMAK @@ -99,13 +110,14 @@ enum userspace_custom_keycodes { KC_SECRET_5, // test5 KC_CCCV, // Hold to copy, tap to paste KC_NUKE, // NUCLEAR LAUNCH DETECTED!!! - -#ifdef UNICODE_ENABLE - UC_FLIP, // Table flip (not working?) -#endif //UNICODE_ENABLE + UC_FLIP, // (ಠ痊ಠ)┻━┻ + UC_TABL, // ┬─┬ノ( º _ ºノ) + UC_SHRG, // ¯\_(ツ)_/¯ + UC_DISA, // ಠ_ಠ NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes }; + #define LOWER MO(_LOWER) #define RAISE MO(_RAISE) #define ADJUST MO(_ADJUST) @@ -153,6 +165,8 @@ enum userspace_custom_keycodes { #define MG_NKRO MAGIC_TOGGLE_NKRO +#define UC_IRNY UC(0x2E2E) +#define UC_CLUE UC(0x203D) #ifdef TAP_DANCE_ENABLE enum { diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index 03c55b1323..4a1a8de692 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -230,7 +230,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { userspace_config.rgb_layer_change ^= 1; xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); - eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); + eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); if (userspace_config.rgb_layer_change) { layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better) } @@ -243,7 +243,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (userspace_config.rgb_layer_change) { userspace_config.rgb_layer_change = false; xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); - eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); + eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); } } return true; break; @@ -273,6 +273,7 @@ void matrix_init_rgb(void) { default: rgblight_sethsv_noeeprom_cyan(); break; } + rgblight_mode_noeeprom(1); } } diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index e299f24a1e..3d6213eff2 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk @@ -1,4 +1,3 @@ - SRC += drashna.c ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") @@ -9,7 +8,7 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) SRC += tap_dances.c endif -EXTRAFLAGS += -flto +EXTRAFLAGS += -flto ifeq ($(strip $(NO_SECRETS)), yes) OPT_DEFS += -DNO_SECRETS @@ -37,3 +36,7 @@ ifdef CONSOLE_ENABLE OPT_DEFS += -DKEYLOGGER_ENABLE endif endif + +ifeq ($(strip $(UNICODE_ENABLE)), yes) + SRC += send_unicode.c +endif diff --git a/users/drashna/send_unicode.c b/users/drashna/send_unicode.c new file mode 100644 index 0000000000..cacfe1dc85 --- /dev/null +++ b/users/drashna/send_unicode.c @@ -0,0 +1,58 @@ +// Written by konstantin: vomindoraan +#include "send_unicode.h" +#include +#include + +__attribute__((weak)) +void send_unicode_hex_string(const char* str) { + if (!str) { return; } // Safety net + + while (*str) { + // Find the next code point (token) in the string + for (; *str == ' '; str++); + size_t n = strcspn(str, " "); // Length of the current token + char code_point[n+1]; + strncpy(code_point, str, n); + code_point[n] = '\0'; // Make sure it's null-terminated + + // Normalize the code point: make all hex digits lowercase + for (char *p = code_point; *p; p++) { + *p = tolower((unsigned char)*p); + } + + // Send the code point as a Unicode input string + unicode_input_start(); + send_string(code_point); + unicode_input_finish(); + + str += n; // Move to the first ' ' (or '\0') after the current token + } +} + +// (ノಠ痊ಠ)ノ彡┻━┻ +// send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B"); + +//Old code +// (╯°□°)╯ ︵ ┻━┻ + #if 0 + register_code(KC_RSFT); + tap(KC_9); + unregister_code(KC_RSFT); + process_unicode((0x256F | QK_UNICODE), record); // Arm + process_unicode((0x00B0 | QK_UNICODE), record); // Eye + process_unicode((0x25A1 | QK_UNICODE), record); // Mouth + process_unicode((0x00B0 | QK_UNICODE), record); // Eye + register_code(KC_RSFT); + tap(KC_0); + unregister_code(KC_RSFT); + process_unicode((0x256F | QK_UNICODE), record); // Arm + tap(KC_SPC); + process_unicode((0x0361 | QK_UNICODE), record); // Flippy + tap(KC_SPC); + process_unicode((0x253B | QK_UNICODE), record); // Table + process_unicode((0x2501 | QK_UNICODE), record); // Table + process_unicode((0x253B | QK_UNICODE), record); // Table + #endif + + +// If you need a good converter: https://r12a.github.io/app-conversion/ diff --git a/users/drashna/drashna_unicode.h b/users/drashna/send_unicode.h similarity index 90% rename from users/drashna/drashna_unicode.h rename to users/drashna/send_unicode.h index 3d1bc03f9b..818b6e571b 100644 --- a/users/drashna/drashna_unicode.h +++ b/users/drashna/send_unicode.h @@ -1,10 +1,11 @@ -#ifndef UNICODE_USERSPACE_H -#define UNICODE_USERSPACE_H +#pragma once +#include "quantum.h" +void send_unicode_hex_string(const char* str); /* use X(n) to call the */ - +#ifdef UNICODEMAP_ENABLE enum unicode_name { THINK, // thinking face 🤔 GRIN, // grinning face 😊 @@ -67,5 +68,4 @@ const uint32_t PROGMEM unicode_map[] = { [IRONY] = 0x02E2E, [DEGREE] = 0x000B0 }; - - #endif +#endif // UNICODEMAP_ENABLE From 713ec91147aa56849f9e2ff93ee98ef1eb6eebc0 Mon Sep 17 00:00:00 2001 From: Yan-Fa Li Date: Mon, 1 Oct 2018 19:50:14 -0700 Subject: [PATCH 097/269] Add C hint to inline code --- docs/custom_quantum_functions.md | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md index f8b84cd6b3..b077e4b78d 100644 --- a/docs/custom_quantum_functions.md +++ b/docs/custom_quantum_functions.md @@ -27,7 +27,7 @@ The first step to creating your own custom keycode(s) is to enumerate them. This Here is an example of enumerating 2 keycodes. After adding this block to your `keymap.c` you will be able to use `FOO` and `BAR` inside your keymap. -``` +```c enum my_keycodes { FOO = SAFE_RANGE, BAR @@ -44,7 +44,7 @@ These function are called every time a key is pressed or released. This example does two things. It defines the behavior for a custom keycode called `FOO`, and it supplements our Enter key by playing a tone whenever it is pressed. -``` +```c bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case FOO: @@ -75,16 +75,16 @@ The `keycode` argument is whatever is defined in your keymap, eg `MO(1)`, `KC_L` The `record` argument contains information about the actual press: -``` +```c keyrecord_t record { -+-keyevent_t event { -| +-keypos_t key { -| | +-uint8_t col -| | +-uint8_t row -| | } -| +-bool pressed -| +-uint16_t time -| } + keyevent_t event { + keypos_t key { + uint8_t col + uint8_t row + } + bool pressed + uint16_t time + } } ``` @@ -100,7 +100,7 @@ This allows you to control the 5 LED's defined as part of the USB Keyboard spec. ### Example `led_set_user()` Implementation -``` +```c void led_set_user(uint8_t usb_led) { if (usb_led & (1< Date: Mon, 1 Oct 2018 20:35:09 -0700 Subject: [PATCH 098/269] Keyboard: DZ60 cleanup (#3994) * DZ60: Deleted K214 from LAYOUT_all * DZ60: Delete matrix LAYOUT_2_shifts; replace with LAYOUT_all After the deletion of K214 from LAYOUT_all, LAYOUT_all and LAYOUT_2_shifts are identical. Deprecated LAYOUT_2_shifts in favor of LAYOUT_all. * DZ60: refactor 256k_HHKB and itsaferbie keymaps to use LAYOUT_60_hhkb macro Both keymaps previously used the LAYOUT_hhkb macro. After comparing the macros, the only difference between them was that LAYOUT_hhkb included the place of the ISO Backslash key. Neither keymap used this key, so both were refactored to use LAYOUT_60_hhkb instead. LAYOUT_hhkb is now essentially unused by any keymaps in the repo. (More on that in a moment.) * DZ60: bugfix for dbroqua keymap This keymap had two layers that used the LAYOUT_true_hhkb macro and a third that used LAYOUT_hhkb. These macros have the same number of keys, but represent different physical layouts. As the "main" layers used LAYOUT_true_hhkb, switched the third layer to LAYOUT_true_hhkb as well. The LAYOUT_hhkb macro is now unused by any DZ60 keymaps in the repo, and can be safely deleted. * DZ60: bugfix for 60_ansi_arrow_fkeys, 60_plus_arrows, and stephengrier keymaps All three keymaps had one layer in LAYOUT_all and one in LAYOUT_directional. Only difference between these macros is LAYOUT_all excludes the ISO Backslash position. As none of the keymaps used this position, all layers were switched to use LAYOUT_directional. * DZ60: added layout mock-ups to dz60.h Documenting the physical layouts that go with each matrix. * DZ60: replace TMK SHIFT_ESC with QMK Grave Escape Replaced all instances of keycodes that called TMK's ACTION_FUNCTION(SHIFT_ESC) with QMK's KC_GESC, and added config.h files so KC_GESC behaves as the deprecated TMK function did, except for the default keymap, which I thought should have the QMK standard behavior. * DZ60: delete SHIFT_ESC code blocks Deleted ACTION_FUNCTION(SHIFT_ESC) code blocks from keymaps that didn't use the functionality it provided. * DZ60: deleted unused MODS_CTRL_MASk definitions Was used in the now-deleted SHIFT_ESC code blocks. Interestingly named MODS_CTRL_MASK when it was actually checking the Shift keys. *shrug* * DZ60: refactor jkbone keymap to use process_record_user Replaced TMK action_function keycodes with QMK process_record_user equivalents. * DZ60: delete unused layout macros The macros LAYOUT_hhkb, LAYOUT_directional_625_space, and LAYOUT_60_ansi_split_bs_rshift_5x1u were unused by any keymaps in the repo, and have thus been deleted. * DZ60: refactor iso_6u_space and iso_7u_space keymaps Both keymaps refactored to use the LAYOUT_60_iso macro. * DZ60: refactor dz60.h Updated the notation of the switch arguments. Format is now: `k` where `` is `[0-4]` and `` is `[0-9a-e]`. * DZ60: refactor LAYOUT_60_iso_5x1u matrix Updated matrix so `KC_ENT` belongs on the home row, which is consistent with LAYOUT_60_iso for the DZ60 as well as the ISO community layouts. * DZ60: fix white space in dz60.h I hate when indentation is inconsistent within a file. --- keyboards/dz60/dz60.h | 320 ++++++++++-------- keyboards/dz60/info.json | 22 +- keyboards/dz60/keymaps/256k_HHKB/keymap.c | 20 +- .../dz60/keymaps/60_ansi_arrow_fkeys/config.h | 1 + .../dz60/keymaps/60_ansi_arrow_fkeys/keymap.c | 42 +-- .../dz60/keymaps/60_plus_arrows/keymap.c | 40 +-- .../dz60/keymaps/Ansi_plus_fn_arrows/config.h | 1 + .../dz60/keymaps/Ansi_plus_fn_arrows/keymap.c | 38 +-- keyboards/dz60/keymaps/dbroqua/keymap.c | 2 +- keyboards/dz60/keymaps/default/keymap.c | 38 +-- keyboards/dz60/keymaps/eric/keymap.c | 36 -- keyboards/dz60/keymaps/f3d3/keymap.c | 40 +-- keyboards/dz60/keymaps/frogger/keymap.c | 8 +- keyboards/dz60/keymaps/hailbreno/keymap.c | 16 +- keyboards/dz60/keymaps/iso_6u_space/keymap.c | 102 ++---- keyboards/dz60/keymaps/iso_7u_space/keymap.c | 105 +++--- keyboards/dz60/keymaps/iso_uk/keymap.c | 36 -- keyboards/dz60/keymaps/iso_vim_arrow/keymap.c | 44 +-- keyboards/dz60/keymaps/itsaferbie/keymap.c | 12 +- keyboards/dz60/keymaps/jkbone/keymap.c | 73 ++-- keyboards/dz60/keymaps/krusli/keymap.c | 1 - keyboards/dz60/keymaps/macos_arrow/keymap.c | 8 +- keyboards/dz60/keymaps/stephengrier/config.h | 1 + keyboards/dz60/keymaps/stephengrier/keymap.c | 42 +-- keyboards/dz60/keymaps/weeheavy/keymap.c | 6 +- 25 files changed, 349 insertions(+), 705 deletions(-) create mode 100644 keyboards/dz60/keymaps/60_ansi_arrow_fkeys/config.h create mode 100644 keyboards/dz60/keymaps/Ansi_plus_fn_arrows/config.h create mode 100644 keyboards/dz60/keymaps/stephengrier/config.h diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h index 3d0b0dd527..6d80b2c7cb 100644 --- a/keyboards/dz60/dz60.h +++ b/keyboards/dz60/dz60.h @@ -7,173 +7,221 @@ // 标准配列 +/* Standard arrangement / LAYOUT + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ + * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │ + * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───┼───┤ + * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │ + * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘ +*/ #define LAYOUT( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \ - K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \ + k40, k41, k43, k44, k46, k48, k4a, k4b, k4c, k4d, k4e \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \ - { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ -} - -#define LAYOUT_hhkb( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \ - K401, K403, K406, K411, K413 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \ - { KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \ + { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \ } +/* LAYOUT_true_hhkb + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ + * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │ + * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴┬─────┴───┤ + * │▓▓▓▓▓│41 │43 │46 (6u) │4a │4b │▓▓▓▓▓▓▓▓▓│ + * └─────┴───┴─────┴───────────────────────┴─────┴───┴─────────┘ +*/ #define LAYOUT_true_hhkb( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \ - K401, K403, K406, K410, K411 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \ + k41, k43, k46, k4a, k4b \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \ - { KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, KC_NO, KC_NO } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \ + { KC_NO, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, KC_NO, KC_NO } \ } +/* LAYOUT_60_hhkb + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ + * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │ + * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──────┬┴───┴┬───┬─┴───┤ + * │▓▓▓▓▓│41 │43 │46 (7u) │4b │4d │▓▓▓▓▓│ + * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ +*/ #define LAYOUT_60_hhkb( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \ - K401, K403, K406, K411, K413 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \ + k41, k43, k46, k4b, k4d \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \ - { KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO } \ -} - -#define LAYOUT_2_shifts( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \ - K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \ - { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \ + { KC_NO, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, KC_NO, k4b, KC_NO, k4d, KC_NO } \ } // 带方向配列 +/* Directional arrangement | LAYOUT_directional + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤ + * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3c │3d │3e │ + * ├────┬──┴─┬─┴──┬┴───┴───┼───┴┬──┴───┴───┼───┼───┼───┼───┼───┤ + * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │ + * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘ +*/ #define LAYOUT_directional( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \ - K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \ + k40, k41, k43, k44, k46, k48, k4a, k4b, k4c, k4d, k4e \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \ - { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \ + { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \ } +/* LAYOUT_all + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤ + * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3c │3d │3e │ + * ├───┴┬──┴─┬─┴──┬┴───┴───┼───┴┬──┴───┴───┼───┼───┼───┼───┼───┤ + * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │ + * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘ +*/ #define LAYOUT_all( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \ - K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, 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, k3d, k3e, \ + k40, k41, k43, k44, k46, k48, k4a, k4b, k4c, k4d, k4e \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \ - { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \ + { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \ } +/* LAYOUT_60_ansi + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ + * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │40 │41 │43 │46 │4a │4b │4d │4e │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ +*/ #define LAYOUT_60_ansi( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ - K400, K401, K403, K406, K410, K411, K413, K414 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k40, k41, k43, k46, k4a, k4b, k4d, k4e \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \ - { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413, K414 } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \ + { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \ } +/* LAYOUT_60_iso + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │40 │41 │43 │46 │4a │4b │4d │4e │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ +*/ #define LAYOUT_60_iso( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ - K400, K401, K403, K406, K410, K411, K413, K414 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k40, k41, k43, k46, k4a, k4b, k4d, k4e \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \ - { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413, K414 } \ -} - -#define LAYOUT_directional_625_space( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \ - K400, K401, K403, K406, K410, K411, K412, K413, K414 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \ - { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414 } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \ + { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \ } +/* LAYOUT_60_iso_5x1u + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┬───┤ + * │40 │41 │43 │46 │4a │4b │4c │4d │4e │ + * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘ +*/ #define LAYOUT_60_iso_5x1u( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K213, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ - K400, K401, K403, K406, K410, K411, K412, K413, K414 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k40, k41, k43, k46, k4a, k4b, k4c, k4d, k4e \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \ - { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414 } \ -} - -#define LAYOUT_60_ansi_split_bs_rshift_5x1u( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \ - K400, K401, K403, K406, K410, K411, K412, K413, K414 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \ - { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414 } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \ + { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d, k4e } \ } #endif diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json index 54d6753757..4855c3b81a 100644 --- a/keyboards/dz60/info.json +++ b/keyboards/dz60/info.json @@ -9,25 +9,17 @@ "key_count": 67, "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}] }, - "LAYOUT_hhkb": { - "key_count": 61, - "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Ctrl", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Alt", "x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"x":10, "y":4, "w":1.5}, {"label":"Alt", "x":11.5, "y":4}] - }, "LAYOUT_true_hhkb": { "key_count": 61, "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Ctrl", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Alt", "x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"x":10, "y":4, "w":1.5}, {"label":"Alt", "x":11.5, "y":4}] }, - "LAYOUT_2_shifts": { - "key_count": 68, - "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}] - }, "LAYOUT_directional": { "key_count": 67, "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}] }, "LAYOUT_all": { - "key_count": 69, - "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}] + "key_count": 68, + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}] }, "LAYOUT_60_ansi": { "key_count": 61, @@ -41,17 +33,9 @@ "key_count": 60, "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"label":"\\", "x":13, "y":0}, {"label":"`", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}] }, - "LAYOUT_directional_625_space": { - "key_count": 65, - "layout": [{"label":"K000", "x":0, "y":0}, {"label":"K001", "x":1, "y":0}, {"label":"K002", "x":2, "y":0}, {"label":"K003", "x":3, "y":0}, {"label":"K004", "x":4, "y":0}, {"label":"K005", "x":5, "y":0}, {"label":"K006", "x":6, "y":0}, {"label":"K007", "x":7, "y":0}, {"label":"K008", "x":8, "y":0}, {"label":"K009", "x":9, "y":0}, {"label":"K010", "x":10, "y":0}, {"label":"K011", "x":11, "y":0}, {"label":"K012", "x":12, "y":0}, {"label":"K013", "x":13, "y":0}, {"label":"K014", "x":14, "y":0}, {"label":"K100", "x":0, "y":1, "w":1.5}, {"label":"K102", "x":1.5, "y":1}, {"label":"K103", "x":2.5, "y":1}, {"label":"K104", "x":3.5, "y":1}, {"label":"K105", "x":4.5, "y":1}, {"label":"K106", "x":5.5, "y":1}, {"label":"K107", "x":6.5, "y":1}, {"label":"K108", "x":7.5, "y":1}, {"label":"K109", "x":8.5, "y":1}, {"label":"K110", "x":9.5, "y":1}, {"label":"K111", "x":10.5, "y":1}, {"label":"K112", "x":11.5, "y":1}, {"label":"K113", "x":12.5, "y":1}, {"label":"K114", "x":13.5, "y":1, "w":1.5}, {"label":"K200", "x":0, "y":2, "w":1.75}, {"label":"K202", "x":1.75, "y":2}, {"label":"K203", "x":2.75, "y":2}, {"label":"K204", "x":3.75, "y":2}, {"label":"K205", "x":4.75, "y":2}, {"label":"K206", "x":5.75, "y":2}, {"label":"K207", "x":6.75, "y":2}, {"label":"K208", "x":7.75, "y":2}, {"label":"K209", "x":8.75, "y":2}, {"label":"K210", "x":9.75, "y":2}, {"label":"K211", "x":10.75, "y":2}, {"label":"K212", "x":11.75, "y":2}, {"label":"K213", "x":12.75, "y":2, "w":2.25}, {"label":"K300", "x":0, "y":3, "w":2}, {"label":"K301", "x":2, "y":3}, {"label":"K302", "x":3, "y":3}, {"label":"K303", "x":4, "y":3}, {"label":"K304", "x":5, "y":3}, {"label":"K305", "x":6, "y":3}, {"label":"K306", "x":7, "y":3}, {"label":"K307", "x":8, "y":3}, {"label":"K308", "x":9, "y":3}, {"label":"K309", "x":10, "y":3}, {"label":"K310", "x":11, "y":3}, {"label":"K312", "x":12, "y":3}, {"label":"K313", "x":13, "y":3}, {"label":"K314", "x":14, "y":3}, {"label":"K400", "x":0, "y":4, "w":1.25}, {"label":"K401", "x":1.25, "y":4, "w":1.25}, {"label":"K403", "x":2.5, "y":4, "w":1.25}, {"label":"K406", "x":3.75, "y":4, "w":6.25}, {"label":"K410", "x":10, "y":4}, {"label":"K411", "x":11, "y":4}, {"label":"K412", "x":12, "y":4}, {"label":"K413", "x":13, "y":4}, {"label":"K414", "x":14, "y":4}] - }, "LAYOUT_60_iso_5x1u": { "key_count": 63, - "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"|", "x":12.75, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"~", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}] - }, - "LAYOUT_60_ansi_split_bs_rshift_5x1u": { - "key_count": 64, - "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"label":"\\", "x":13, "y":0}, {"label":"`", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}] + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"|", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"~", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}] } } } diff --git a/keyboards/dz60/keymaps/256k_HHKB/keymap.c b/keyboards/dz60/keymaps/256k_HHKB/keymap.c index f426e3d1fb..1448e4ddce 100644 --- a/keyboards/dz60/keymaps/256k_HHKB/keymap.c +++ b/keyboards/dz60/keymaps/256k_HHKB/keymap.c @@ -29,11 +29,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ - [_DEFAULT] = LAYOUT_hhkb( + [_DEFAULT] = LAYOUT_60_hhkb( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), KC_LGUI, KC_LALT, KC_SPC, MO(_ALTFN), MO(_LIGHTS)), @@ -55,12 +55,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `---------------------------------------------------------------------------------------------------------------------' */ - [_ALTFN] = LAYOUT_hhkb( + [_ALTFN] = LAYOUT_60_hhkb( MO(_MOUSEFN), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, KC_PSCR, KC_CAPS, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_UP, KC_VOLD, KC_VOLU, KC_DEL, ______, ______, ______, ______, ______, ______, ______, KC_HOME, KC_END, KC_LEFT, KC_DOWN, KC_RIGHT, ______, - ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MPRV, KC_MNXT, KC_MPLY, ______, ______, + ______, ______, ______, ______, ______, ______, ______, ______, KC_MPRV, KC_MNXT, KC_MPLY, ______, ______, ______, ______, ______, ______, ______), @@ -85,12 +85,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ - [_MOUSEFN] = LAYOUT_hhkb( + [_MOUSEFN] = LAYOUT_60_hhkb( ______, KC_ACL0, KC_ACL1, KC_ACL2, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MS_UP, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, ______, - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______), @@ -116,11 +116,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_FN] = LAYOUT_hhkb( + [_FN] = LAYOUT_60_hhkb( ______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, ______, KC_CAPS, ______, ______, ______, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, KC_DEL, ______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______, - ______, ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______, + ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______, ______, ______, ______, ______, ______), @@ -146,11 +146,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LIGHTS] = LAYOUT_hhkb( + [_LIGHTS] = LAYOUT_60_hhkb( RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, ______, ______, ______, ______, ______, ______, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, RGB_HUD, RGB_SAD, RGB_VAD, ______, ______, ______, ______, ______, ______, ______, ______, ______, - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______), }; diff --git a/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/config.h b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/config.h new file mode 100644 index 0000000000..9560d51a6f --- /dev/null +++ b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/config.h @@ -0,0 +1 @@ +#define GRAVE_ESC_GUI_OVERRIDE # Always send Escape if GUI is pressed diff --git a/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c index 76804670c8..0d3b653638 100644 --- a/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c +++ b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c @@ -1,7 +1,5 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - #define ______ KC_TRNS const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -20,11 +18,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ - LAYOUT_2_shifts( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, + LAYOUT_directional( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT ), @@ -50,37 +48,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______ ), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/60_plus_arrows/keymap.c b/keyboards/dz60/keymaps/60_plus_arrows/keymap.c index a4b2dc29e1..f38cdb2853 100644 --- a/keyboards/dz60/keymaps/60_plus_arrows/keymap.c +++ b/keyboards/dz60/keymaps/60_plus_arrows/keymap.c @@ -1,7 +1,5 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - #define ______ KC_TRNS const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -20,11 +18,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ - LAYOUT_2_shifts( + LAYOUT_directional( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1), KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT ), @@ -50,37 +48,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______ ), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/config.h b/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/config.h new file mode 100644 index 0000000000..9560d51a6f --- /dev/null +++ b/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/config.h @@ -0,0 +1 @@ +#define GRAVE_ESC_GUI_OVERRIDE # Always send Escape if GUI is pressed diff --git a/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c b/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c index 778a5ac038..4c6552675a 100644 --- a/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c +++ b/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c @@ -1,11 +1,9 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, @@ -25,37 +23,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/dbroqua/keymap.c b/keyboards/dz60/keymaps/dbroqua/keymap.c index c6c77210d8..0b4deae51e 100644 --- a/keyboards/dz60/keymaps/dbroqua/keymap.c +++ b/keyboards/dz60/keymaps/dbroqua/keymap.c @@ -64,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | * `-----------------------------------------------------------------' */ - [_SFX] = LAYOUT_hhkb( + [_SFX] = LAYOUT_true_hhkb( ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ ______, BL_TOGG,BL_STEP,BL_DEC, BL_INC, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ ______, RGB_TOG,RGB_MOD,______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ diff --git a/keyboards/dz60/keymaps/default/keymap.c b/keyboards/dz60/keymaps/default/keymap.c index 426b10989d..1d375a3c63 100644 --- a/keyboards/dz60/keymaps/default/keymap.c +++ b/keyboards/dz60/keymaps/default/keymap.c @@ -1,11 +1,9 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, @@ -25,37 +23,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/eric/keymap.c b/keyboards/dz60/keymaps/eric/keymap.c index d2cabebe74..a384de480c 100644 --- a/keyboards/dz60/keymaps/eric/keymap.c +++ b/keyboards/dz60/keymaps/eric/keymap.c @@ -1,7 +1,5 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layer 0 @@ -56,37 +54,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC) -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/f3d3/keymap.c b/keyboards/dz60/keymaps/f3d3/keymap.c index 85bb05a1d4..1e92aabc18 100644 --- a/keyboards/dz60/keymaps/f3d3/keymap.c +++ b/keyboards/dz60/keymaps/f3d3/keymap.c @@ -1,7 +1,5 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layer 0 @@ -18,7 +16,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ - LAYOUT_2_shifts( + LAYOUT_all( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, @@ -42,44 +40,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ - LAYOUT_2_shifts( + LAYOUT_all( KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_TOGG, BL_DEC, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/frogger/keymap.c b/keyboards/dz60/keymaps/frogger/keymap.c index 86a4687913..75e805cd91 100644 --- a/keyboards/dz60/keymaps/frogger/keymap.c +++ b/keyboards/dz60/keymaps/frogger/keymap.c @@ -1,7 +1,5 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - #define ______ KC_TRNS #define LAYER_1 1 @@ -24,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ - LAYOUT_2_shifts( + LAYOUT_all( KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, @@ -52,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_MPRV, KC_MPLY, KC_MNXT, */ - LAYOUT_2_shifts( + LAYOUT_all( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, KC_DEL, ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, ______, ______, KC_UP, ______, ______, ______, ______, ______, @@ -78,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ - LAYOUT_2_shifts( + LAYOUT_all( RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, RESET, ______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, ______, ______, ______, ______, ______, diff --git a/keyboards/dz60/keymaps/hailbreno/keymap.c b/keyboards/dz60/keymaps/hailbreno/keymap.c index cc718c3935..edc22a5a24 100644 --- a/keyboards/dz60/keymaps/hailbreno/keymap.c +++ b/keyboards/dz60/keymaps/hailbreno/keymap.c @@ -44,7 +44,7 @@ enum keycodes { * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------------' - [LAYOUT] = LAYOUT_2_shifts( + [LAYOUT] = LAYOUT_all( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -67,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | Alt | Gui | Backspace | Fn2 | Space | Alt | App | Left| Down|Right| * `-----------------------------------------------------------------------------------------' */ -[_QWERTY] = LAYOUT_2_shifts( +[_QWERTY] = LAYOUT_all( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, LT(_FUNC,KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, @@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | Alt | Gui | Backspace | Fn2 | Space | Alt | App | Left| Down|Right| * `-----------------------------------------------------------------------------------------' */ -[_COLEMAK] = LAYOUT_2_shifts( +[_COLEMAK] = LAYOUT_all( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_DEL, LT(_FUNC,KC_CAPS), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, @@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | Alt | Gui | Backspace | Fn2 | Space | Alt | App | Left| Down|Right| * `-----------------------------------------------------------------------------------------' */ -[_DVORAK] = LAYOUT_2_shifts( +[_DVORAK] = LAYOUT_all( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, KC_TAB, KC_QUOTE, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_DEL, LT(_FUNC,KC_CAPS), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, @@ -127,7 +127,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | Home| PgDn| End | * `-----------------------------------------------------------------------------------------' */ -[_FUNC] = LAYOUT_2_shifts( +[_FUNC] = LAYOUT_all( _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_INS, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_CIRC, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_TILD, _______, @@ -147,7 +147,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------------' */ -[_FUNC2] = LAYOUT_2_shifts( +[_FUNC2] = LAYOUT_all( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -167,7 +167,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------------' */ -[_RGB] = LAYOUT_2_shifts( +[_RGB] = LAYOUT_all( _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -187,7 +187,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | |Qwerty|Colemk|Dvorak| * `-----------------------------------------------------------------------------------------' */ -[_ADJUST] = LAYOUT_2_shifts( +[_ADJUST] = LAYOUT_all( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, diff --git a/keyboards/dz60/keymaps/iso_6u_space/keymap.c b/keyboards/dz60/keymaps/iso_6u_space/keymap.c index 15ad72f3e4..e0085b4904 100644 --- a/keyboards/dz60/keymaps/iso_6u_space/keymap.c +++ b/keyboards/dz60/keymaps/iso_6u_space/keymap.c @@ -1,74 +1,44 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * _______ can be used in place of KC_TRNS (transparent) * + * XXXXXXX can be used in place of KC_NO (No Operation) * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* ISO 6u layout layer 0 -* ,-----------------------------------------------------------------------------------------. -* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | ´ | BSPC | -* |-----------------------------------------------------------------------------------------+ -* | Tab | Q | W | E | R | T | Z | U | I | O | P | P | Ü | * | | -* |-------------------------------------------------------------------------------------| + -* | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ä | # |Enter | -* |-----------------------------------------------------------------------------------------+ -* | Shift| < | Y | X | C | V | B | N | M | , | . | . | - | RShift | -* |-----------------------------------------------------------------------------------------+ -* | LCtrl | LGUI | LAlt | Space | RAlt | RGUI | Layer_2 | RCtrl | -* `-----------------------------------------------------------------------------------------' -*/ - LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT,KC_RGUI, KC_NO, MO(2), KC_RCTL), + /* ISO 6u layout layer 0 (UK Layout shown) + * ,-----------------------------------------------------------. + * |Esc|1 !|2 "|3 £|4 $|5 %|6 ^|7 &|8 *|9 (|0 )|- _|= +| Bksp | + * |-----------------------------------------------------------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P |[ {|] }|Enter| + * |------------------------------------------------------. | + * | Fn1 | A | S | D | F | G | H | J | K | L |; :|' @|# ~| | + * |-----------------------------------------------------------| + * |Sft |\ || Z | X | C | V | B | N | M |, <|. >|/ ?| Shift | + * |-----------------------------------------------------------| + * |Ctrl |GUI|Alt | Space |Alt |GUI|Fn2|Ctrl | + * `-----------------------------------------------------------' + */ + [0] = LAYOUT_60_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(2), KC_RCTL), - LAYOUT( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL, - KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LSFT, KC_NO, KC_NO, KC_NO, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LCTL, KC_LGUI, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_NO, KC_RCTL), + [1] = LAYOUT_60_iso( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LCTL, KC_LGUI, KC_LGUI, XXXXXXX, KC_RALT, KC_RGUI, _______, KC_RCTL), + + [2] = LAYOUT_60_iso( + KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, + XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX), - LAYOUT( - KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), M(12), KC_NO, KC_DEL, - KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/iso_7u_space/keymap.c b/keyboards/dz60/keymaps/iso_7u_space/keymap.c index 2de2445987..016fe9a6a5 100644 --- a/keyboards/dz60/keymaps/iso_7u_space/keymap.c +++ b/keyboards/dz60/keymaps/iso_7u_space/keymap.c @@ -1,76 +1,47 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * _______ can be used in place of KC_TRNS (transparent) * + * XXXXXXX can be used in place of KC_NO (No Operation) * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* ISO 7u layout layer 0 -* ,-----------------------------------------------------------------------------------------. -* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | ´ | BSPC | -* |-----------------------------------------------------------------------------------------+ -* | Tab | Q | W | E | R | T | Z | U | I | O | P | P | Ü | * | | -* |-------------------------------------------------------------------------------------| + -* | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ä | # |Enter | -* |-----------------------------------------------------------------------------------------+ -* | Shift| < | Y | X | C | V | B | N | M | , | . | . | - | RShift | -* |-----------------------------------------------------------------------------------------+ -* | LCtrl | LGUI | LAlt | Space | RAlt | Layer_2 | RCtrl | -* `-----------------------------------------------------------------------------------------' -*/ + /* ISO 7u layout layer 0 + * ,-----------------------------------------------------------. + * |Esc|1 !|2 "|3 £|4 $|5 %|6 ^|7 &|8 *|9 (|0 )|- _|= +| Bksp | + * |-----------------------------------------------------------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P |[ {|] }|Enter| + * |------------------------------------------------------. | + * | Fn1 | A | S | D | F | G | H | J | K | L |; :|' @|# ~| | + * |-----------------------------------------------------------| + * |Sft |\ || Z | X | C | V | B | N | M |, <|. >|/ ?| Shift | + * |-----------------------------------------------------------| + * |Ctrl |GUI|Alt | Space |Alt |Fn2|Ctrl | + * `-----------------------------------------------------------' + */ + [0] = LAYOUT_60_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, XXXXXXX, KC_RALT, MO(2), KC_RCTL + ), - LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_NO, KC_RALT, KC_NO, MO(2), KC_RCTL), + [1] = LAYOUT_60_iso( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_PGDN, KC_LGUI, KC_LGUI, XXXXXXX, XXXXXXX, KC_RGUI, _______, KC_RCTL + ), + [2] = LAYOUT_60_iso( + KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, + XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX + ), - LAYOUT( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL, - KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_PGUP, KC_NO, KC_NO, KC_NO, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_PGDOWN, KC_LGUI, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_NO, KC_RCTL), - - LAYOUT( - KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, - KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/iso_uk/keymap.c b/keyboards/dz60/keymaps/iso_uk/keymap.c index 1c15a59df8..13e6e18594 100644 --- a/keyboards/dz60/keymaps/iso_uk/keymap.c +++ b/keyboards/dz60/keymaps/iso_uk/keymap.c @@ -18,8 +18,6 @@ #define MO_FN MO(1) #define MO_FN MO(1) -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_60_iso( @@ -50,37 +48,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c b/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c index 9e85a89eee..4dad9e19f5 100644 --- a/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c +++ b/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c @@ -1,7 +1,5 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* ISO 5x1u layout (ISO German keyboard layout shown) @@ -23,8 +21,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ LAYOUT_60_iso_5x1u( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, - MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT ), @@ -32,44 +30,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT_60_iso_5x1u( KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, - KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_DEL, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_DEL, KC_NO, KC_NO, KC_LSFT, BL_TOGG, KC_APP, KC_PAUS, KC_INS, KC_NO, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_RSFT, KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END ), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/itsaferbie/keymap.c b/keyboards/dz60/keymaps/itsaferbie/keymap.c index ecc99cc751..de30e05382 100644 --- a/keyboards/dz60/keymaps/itsaferbie/keymap.c +++ b/keyboards/dz60/keymaps/itsaferbie/keymap.c @@ -9,25 +9,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_DEFAULT] = LAYOUT_hhkb( + [_DEFAULT] = LAYOUT_60_hhkb( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_LIGHTS)), - [_FN] = LAYOUT_hhkb( + [_FN] = LAYOUT_60_hhkb( ______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_CAPS, ______, ______, ______, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, RESET, ______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______, - ______, ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______, + ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______, ______, ______, ______, ______, ______), - [_LIGHTS] = LAYOUT_hhkb( + [_LIGHTS] = LAYOUT_60_hhkb( RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, ______, ______, ______, ______, ______, ______, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, RGB_HUD, RGB_SAD, RGB_VAD, ______, ______, ______, ______, ______, ______, ______, ______, ______, - ______, ______, ______, ______, BL_DEC, BL_TOGG, BL_INC, ______, ______, ______, ______, ______, ______, ______, + ______, ______, ______, BL_DEC, BL_TOGG, BL_INC, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______), }; diff --git a/keyboards/dz60/keymaps/jkbone/keymap.c b/keyboards/dz60/keymaps/jkbone/keymap.c index ecc391785f..1efcbe38f4 100644 --- a/keyboards/dz60/keymaps/jkbone/keymap.c +++ b/keyboards/dz60/keymaps/jkbone/keymap.c @@ -1,7 +1,6 @@ #include QMK_KEYBOARD_H #define ____ KC_TRNS -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) #define FL_ESC LT(_FL, KC_ESC) #define FL MO(_FL) @@ -11,60 +10,56 @@ enum layers_idx { _FL // Functions }; -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = LAYOUT_60_iso_5x1u( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, - FL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, - KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, FL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT - ), - [_ML] = LAYOUT_60_iso_5x1u( - ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, - ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, - ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, - ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, - KC_LGUI, KC_LALT, KC_LCTL, ____, ____, ____, ____, ____, ____ - ), - [_FL] = LAYOUT_60_iso_5x1u( - RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, - ____, ____, DF(_BL), DF(_ML), ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, - ____, ____, ____, ____, ____, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, ____, ____, ____, - ____, F(3), F(2), F(1), F(0), ____, ____, ____, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, ____, - ____, ____, ____, ____, ____, ____, ____, ____, ____ - ) -}; - -enum function_id { - RGB_VAZ, +enum custom_keycodes { + RGB_VAZ = SAFE_RANGE, RGB_OAZ, RGB_WAN, RGB_000 }; -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(RGB_VAZ), - [1] = ACTION_FUNCTION(RGB_OAZ), - [2] = ACTION_FUNCTION(RGB_WAN), - [3] = ACTION_FUNCTION(RGB_000) +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BL] = LAYOUT_60_iso_5x1u( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + FL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS,KC_ENT, + KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, FL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT + ), + [_ML] = LAYOUT_60_iso_5x1u( + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + KC_LGUI, KC_LALT, KC_LCTL, ____, ____, ____, ____, ____, ____ + ), + [_FL] = LAYOUT_60_iso_5x1u( + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + ____, ____, DF(_BL), DF(_ML), ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, ____, ____, ____, ____, + ____, RGB_000, RGB_WAN, RGB_OAZ, RGB_VAZ, ____, ____, ____, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, ____, + ____, ____, ____, ____, ____, ____, ____, ____, ____ + ) }; -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch (id) { - case RGB_VAZ: +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case RGB_VAZ: rgblight_enable(); rgblight_setrgb(0, 204, 33); break; - case RGB_OAZ: + case RGB_OAZ: rgblight_enable(); rgblight_setrgb(229, 65, 0); break; - case RGB_WAN: + case RGB_WAN: rgblight_enable(); rgblight_setrgb(255, 255, 255); break; - case RGB_000: + case RGB_000: rgblight_disable(); break; + } } -} + return true; +}; diff --git a/keyboards/dz60/keymaps/krusli/keymap.c b/keyboards/dz60/keymaps/krusli/keymap.c index 36e7b801a3..0ad6f1b2b5 100644 --- a/keyboards/dz60/keymaps/krusli/keymap.c +++ b/keyboards/dz60/keymaps/krusli/keymap.c @@ -1,6 +1,5 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) #define _______ KC_TRNS const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { diff --git a/keyboards/dz60/keymaps/macos_arrow/keymap.c b/keyboards/dz60/keymaps/macos_arrow/keymap.c index 7106092a47..81d61a59ae 100644 --- a/keyboards/dz60/keymaps/macos_arrow/keymap.c +++ b/keyboards/dz60/keymaps/macos_arrow/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | Alt | Gui | Space / _NL |Gui/_ML| Alt | Left| Down|Right| * `-----------------------------------------------------------------------------------------' */ - [_BL] = LAYOUT_2_shifts( + [_BL] = LAYOUT_all( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, LT(_FL, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, @@ -44,7 +44,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | * `-----------------------------------------------------------------------------------------' */ - [_FL] = LAYOUT_2_shifts( + [_FL] = LAYOUT_all( _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______, @@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | * `-----------------------------------------------------------------------------------------' */ - [_ML] = LAYOUT_2_shifts( + [_ML] = LAYOUT_all( KC_MEDIA_EJECT, BR_DOWN, BR_UP, _______, _______, _______, _______, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | * `-----------------------------------------------------------------------------------------' */ - [_NL] = LAYOUT_2_shifts( + [_NL] = LAYOUT_all( _______, _______, _______, _______, _______, _______, _______, _______, KC_PERCENT, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_LEFT_ANGLE_BRACKET, KC_RIGHT_ANGLE_BRACKET, KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, KC_ASTERISK, KC_0, KC_1, KC_2, KC_3, _______, RESET, _______, _______, _______, _______, _______, _______, _______, KC_DOT, KC_MINS, KC_4, KC_5, KC_6, _______, diff --git a/keyboards/dz60/keymaps/stephengrier/config.h b/keyboards/dz60/keymaps/stephengrier/config.h new file mode 100644 index 0000000000..9560d51a6f --- /dev/null +++ b/keyboards/dz60/keymaps/stephengrier/config.h @@ -0,0 +1 @@ +#define GRAVE_ESC_GUI_OVERRIDE # Always send Escape if GUI is pressed diff --git a/keyboards/dz60/keymaps/stephengrier/keymap.c b/keyboards/dz60/keymaps/stephengrier/keymap.c index d9403f59e2..f6bbe78932 100644 --- a/keyboards/dz60/keymaps/stephengrier/keymap.c +++ b/keyboards/dz60/keymaps/stephengrier/keymap.c @@ -1,7 +1,5 @@ #include QMK_KEYBOARD_H -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) - #define ______ KC_TRNS const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -20,11 +18,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------------' */ - LAYOUT_2_shifts( - F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, + LAYOUT_directional( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1), KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT ), @@ -50,37 +48,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______ ), }; - -enum function_id { - SHIFT_ESC, -}; - -const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint8_t shift_esc_shift_mask; - switch (id) { - case SHIFT_ESC: - shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; - if (record->event.pressed) { - if (shift_esc_shift_mask) { - add_key(KC_GRV); - send_keyboard_report(); - } else { - add_key(KC_ESC); - send_keyboard_report(); - } - } else { - if (shift_esc_shift_mask) { - del_key(KC_GRV); - send_keyboard_report(); - } else { - del_key(KC_ESC); - send_keyboard_report(); - } - } - break; - } -} diff --git a/keyboards/dz60/keymaps/weeheavy/keymap.c b/keyboards/dz60/keymaps/weeheavy/keymap.c index a98e3eeb20..cb9697e107 100644 --- a/keyboards/dz60/keymaps/weeheavy/keymap.c +++ b/keyboards/dz60/keymaps/weeheavy/keymap.c @@ -12,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Base layer - ANSI QWERTY -[L0] = LAYOUT_2_shifts( +[L0] = LAYOUT_all( KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXX, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, @@ -20,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(L1), KC_SPC, KC_RALT, MO(L2), KC_LEFT, KC_DOWN, KC_RIGHT), // Utility layer - RGB and multimedia control -[L1] = LAYOUT_2_shifts( +[L1] = LAYOUT_all( ____, 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_MOD, RGB_M_K, RGB_M_R, ____, ____, KC_PSCR, ____, KC_PAUS, ____, ____, ____, ____, ____, RGB_HUI, RGB_HUD, ____, ____, ____, ____, KC_INS, KC_HOME, KC_PGUP, ____, ____, ____, @@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ____, RGB_VAI, RGB_VAD, ____, ____, ____, ____, ____, KC_MPRV, KC_VOLD, KC_MNXT), // Setup layer - Reset an additional "b" button -[L2] = LAYOUT_2_shifts( +[L2] = LAYOUT_all( RESET, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_B, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, RESET, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, From 9f2e39732f2458b1bfe5d546581da508c2be577e Mon Sep 17 00:00:00 2001 From: Rebecca Le <543859+sevenseacat@users.noreply.github.com> Date: Tue, 2 Oct 2018 11:43:43 +0800 Subject: [PATCH 099/269] Keyboard: Add support for the KBD4x (#4036) * Generate a new project for the KBD4x * Specify the possible layouts for the KBD4x - MIT and grid * Fill out the readme for the KBD4x * Configure the default keymap and wiring configuration as specified on http://qmkeyboard.cn/ * Add info.json for QMK Configurator * Enable backlight support for the KBD4x * Standardise on LAYOUT_planck_mit/LAYOUT_ortho_4x12 layout names * Add whitespace so the Readme will render correctly * Disable mouse keys support for the KBD4x to make the firmware small enough --- keyboards/kbd4x/config.h | 223 ++++++++++++++++++++++ keyboards/kbd4x/info.json | 112 +++++++++++ keyboards/kbd4x/kbd4x.c | 43 +++++ keyboards/kbd4x/kbd4x.h | 48 +++++ keyboards/kbd4x/keymaps/default/config.h | 19 ++ keyboards/kbd4x/keymaps/default/keymap.c | 52 +++++ keyboards/kbd4x/keymaps/default/readme.md | 1 + keyboards/kbd4x/readme.md | 15 ++ keyboards/kbd4x/rules.mk | 81 ++++++++ 9 files changed, 594 insertions(+) create mode 100644 keyboards/kbd4x/config.h create mode 100644 keyboards/kbd4x/info.json create mode 100644 keyboards/kbd4x/kbd4x.c create mode 100644 keyboards/kbd4x/kbd4x.h create mode 100644 keyboards/kbd4x/keymaps/default/config.h create mode 100644 keyboards/kbd4x/keymaps/default/keymap.c create mode 100644 keyboards/kbd4x/keymaps/default/readme.md create mode 100644 keyboards/kbd4x/readme.md create mode 100644 keyboards/kbd4x/rules.mk diff --git a/keyboards/kbd4x/config.h b/keyboards/kbd4x/config.h new file mode 100644 index 0000000000..b967ab8f75 --- /dev/null +++ b/keyboards/kbd4x/config.h @@ -0,0 +1,223 @@ +/* +Copyright 2018 sevenseacat + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER KBDFans +#define PRODUCT KBD4x +#define DESCRIPTION A compact 40% (12x4) ortholinear keyboard kit. + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D0, D1, D2, D3 } +#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, B3, B1, B0, D5, B7, C7 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B6 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 + +#define RGB_DI_PIN E2 +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ diff --git a/keyboards/kbd4x/info.json b/keyboards/kbd4x/info.json new file mode 100644 index 0000000000..78d011e2c7 --- /dev/null +++ b/keyboards/kbd4x/info.json @@ -0,0 +1,112 @@ +{ + "keyboard_name": "kbd4x", + "url": "", + "maintainer": "qmk", + "width": 14, + "height": 4, + "layouts": { + "LAYOUT_planck_mit": { + "layout": [ + {"label":"ESC", "x":0, "y":0}, + {"label":"Q", "x":1, "y":0}, + {"label":"W", "x":2, "y":0}, + {"label":"E", "x":3, "y":0}, + {"label":"R", "x":4, "y":0}, + {"label":"T", "x":5, "y":0}, + {"label":"Y", "x":6, "y":0}, + {"label":"U", "x":7, "y":0}, + {"label":"I", "x":8, "y":0}, + {"label":"O", "x":9, "y":0}, + {"label":"P", "x":10, "y":0}, + {"label":"BKSP", "x":11, "y":0}, + {"label":"TAB", "x":0, "y":1}, + {"label":"A", "x":1, "y":1}, + {"label":"S", "x":2, "y":1}, + {"label":"D", "x":3, "y":1}, + {"label":"F", "x":4, "y":1}, + {"label":"G", "x":5, "y":1}, + {"label":"H", "x":6, "y":1}, + {"label":"J", "x":7, "y":1}, + {"label":"K", "x":8, "y":1}, + {"label":"L", "x":9, "y":1}, + {"label":";", "x":10, "y":1}, + {"label":"'", "x":11, "y":1}, + {"label":"SHIFT", "x":0, "y":2}, + {"label":"Z", "x":1, "y":2}, + {"label":"X", "x":2, "y":2}, + {"label":"C", "x":3, "y":2}, + {"label":"V", "x":4, "y":2}, + {"label":"B", "x":5, "y":2}, + {"label":"N", "x":6, "y":2}, + {"label":"M", "x":7, "y":2}, + {"label":",", "x":8, "y":2}, + {"label":".", "x":9, "y":2}, + {"label":"UP", "x":10, "y":2}, + {"label":"ENTER", "x":11, "y":2}, + {"label":"LCTRL", "x":0, "y":3}, + {"label":"LGUI", "x":1, "y":3}, + {"label":"1", "x":2, "y":3}, + {"label":"2", "x":3, "y":3}, + {"label":"3", "x":4, "y":3}, + {"label":"SPACE", "x":5, "y":3, "w":2}, + {"label":"MO(1)", "x":7, "y":3}, + {"label":"/", "x":8, "y":3}, + {"label":"LEFT", "x":9, "y":3}, + {"label":"DOWN", "x":10, "y":3}, + {"label":"RIGHT", "x":11, "y":3}, + ] + }, + "LAYOUT_ortho_4x12": { + "layout": [ + {"label":"ESC", "x":0, "y":0}, + {"label":"Q", "x":1, "y":0}, + {"label":"W", "x":2, "y":0}, + {"label":"E", "x":3, "y":0}, + {"label":"R", "x":4, "y":0}, + {"label":"T", "x":5, "y":0}, + {"label":"Y", "x":6, "y":0}, + {"label":"U", "x":7, "y":0}, + {"label":"I", "x":8, "y":0}, + {"label":"O", "x":9, "y":0}, + {"label":"P", "x":10, "y":0}, + {"label":"BKSP", "x":11, "y":0}, + {"label":"TAB", "x":0, "y":1}, + {"label":"A", "x":1, "y":1}, + {"label":"S", "x":2, "y":1}, + {"label":"D", "x":3, "y":1}, + {"label":"F", "x":4, "y":1}, + {"label":"G", "x":5, "y":1}, + {"label":"H", "x":6, "y":1}, + {"label":"J", "x":7, "y":1}, + {"label":"K", "x":8, "y":1}, + {"label":"L", "x":9, "y":1}, + {"label":";", "x":10, "y":1}, + {"label":"'", "x":11, "y":1}, + {"label":"SHIFT", "x":0, "y":2}, + {"label":"Z", "x":1, "y":2}, + {"label":"X", "x":2, "y":2}, + {"label":"C", "x":3, "y":2}, + {"label":"V", "x":4, "y":2}, + {"label":"B", "x":5, "y":2}, + {"label":"N", "x":6, "y":2}, + {"label":"M", "x":7, "y":2}, + {"label":",", "x":8, "y":2}, + {"label":".", "x":9, "y":2}, + {"label":"UP", "x":10, "y":2}, + {"label":"ENTER", "x":11, "y":2}, + {"label":"LCTRL", "x":0, "y":3}, + {"label":"LGUI", "x":1, "y":3}, + {"label":"1", "x":2, "y":3}, + {"label":"2", "x":3, "y":3}, + {"label":"3", "x":4, "y":3}, + {"label":"SPACE", "x":5, "y":3}, + {"label":"MO(2)", "x":6, "y":3}, + {"label":"MO(1)", "x":7, "y":3}, + {"label":"/", "x":8, "y":3}, + {"label":"LEFT", "x":9, "y":3}, + {"label":"DOWN", "x":10, "y":3}, + {"label":"RIGHT", "x":11, "y":3}, + ] + } + } +} diff --git a/keyboards/kbd4x/kbd4x.c b/keyboards/kbd4x/kbd4x.c new file mode 100644 index 0000000000..84ada250d7 --- /dev/null +++ b/keyboards/kbd4x/kbd4x.c @@ -0,0 +1,43 @@ +/* Copyright 2018 sevenseacat + * + * 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 "kbd4x.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/kbd4x/kbd4x.h b/keyboards/kbd4x/kbd4x.h new file mode 100644 index 0000000000..d7a851e3eb --- /dev/null +++ b/keyboards/kbd4x/kbd4x.h @@ -0,0 +1,48 @@ +/* Copyright 2018 sevenseacat + * + * 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 . + */ +#ifndef KBD4X_H +#define KBD4X_H + +#include "quantum.h" + +#define LAYOUT_planck_mit( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k37, k38, k39, k3a, k3b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, KC_NO, k37, k38, k39, k3a, k3b } \ +} + +// The PCB does support a grid layout, but the case does not. +#define LAYOUT_ortho_4x12( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \ +} + +#endif diff --git a/keyboards/kbd4x/keymaps/default/config.h b/keyboards/kbd4x/keymaps/default/config.h new file mode 100644 index 0000000000..7f3bd7dd52 --- /dev/null +++ b/keyboards/kbd4x/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 sevenseacat + * + * 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 + +// place overrides here diff --git a/keyboards/kbd4x/keymaps/default/keymap.c b/keyboards/kbd4x/keymaps/default/keymap.c new file mode 100644 index 0000000000..ad49b37998 --- /dev/null +++ b/keyboards/kbd4x/keymaps/default/keymap.c @@ -0,0 +1,52 @@ +/* Copyright 2018 sevenseacat + * + * 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 ___ KC_TRNS + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + KBD4X = SAFE_RANGE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_planck_mit( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENTER, + KC_LCTL, KC_LGUI, KC_1, KC_2, KC_3, KC_SPACE, MO(1), KC_SLSH, KC_LEFT, KC_DOWN, KC_RIGHT + ), + + [1] = LAYOUT_planck_mit( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, ___, + ___, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, ___, ___, ___, ___, ___, ___, RESET, + ___, BL_TOGG, BL_STEP, ___, ___, ___, ___, ___, ___, ___, ___, ___, + ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +void led_set_user(uint8_t usb_led) { +} diff --git a/keyboards/kbd4x/keymaps/default/readme.md b/keyboards/kbd4x/keymaps/default/readme.md new file mode 100644 index 0000000000..a950a25ace --- /dev/null +++ b/keyboards/kbd4x/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for kbd4x diff --git a/keyboards/kbd4x/readme.md b/keyboards/kbd4x/readme.md new file mode 100644 index 0000000000..42dc450248 --- /dev/null +++ b/keyboards/kbd4x/readme.md @@ -0,0 +1,15 @@ +# KBD4x + +![KBD4x](https://cdn.shopify.com/s/files/1/1473/3902/products/1_ef8d3ad0-fc70-4d4f-9e36-8438c781a581_1800x1800.jpg) + +A compact 40% (12x4) ortholinear keyboard kit sold by KBDFans. + +Keyboard Maintainer: ![sevenseacat](https://github.com/sevenseacat) +Hardware Supported: KBD4x PCB +Hardware Availability: https://kbdfans.cn/collections/diy-kit/products/kbd4x-custom-mechanical-keyboard-hot-swap-diy-kit + +Make example for this keyboard (after setting up your build environment): + + make kbd4x:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/kbd4x/rules.mk b/keyboards/kbd4x/rules.mk new file mode 100644 index 0000000000..6cfd92bc63 --- /dev/null +++ b/keyboards/kbd4x/rules.mk @@ -0,0 +1,81 @@ +# MCU name +#MCU = at90usb1286 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) From 1a33054a3586fa69812a249762e24ecc08a40423 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 2 Oct 2018 07:54:18 -0700 Subject: [PATCH 100/269] Reduce firmware size of KBD8x to fix Travis Compile issues --- keyboards/kbd8x/config.h | 5 ++--- keyboards/kbd8x/kbd8x.h | 8 +++----- keyboards/kbd8x/keymaps/default/config.h | 9 +-------- keyboards/kbd8x/keymaps/default_backlighting/config.h | 9 +-------- keyboards/kbd8x/keymaps/default_backlighting/rules.mk | 2 +- keyboards/kbd8x/rules.mk | 3 +-- 6 files changed, 9 insertions(+), 27 deletions(-) diff --git a/keyboards/kbd8x/config.h b/keyboards/kbd8x/config.h index c021fb40b5..7749e04724 100644 --- a/keyboards/kbd8x/config.h +++ b/keyboards/kbd8x/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -196,4 +195,4 @@ along with this program. If not, see . /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 -#endif + diff --git a/keyboards/kbd8x/kbd8x.h b/keyboards/kbd8x/kbd8x.h index 02a7436446..f28b8ca7a1 100644 --- a/keyboards/kbd8x/kbd8x.h +++ b/keyboards/kbd8x/kbd8x.h @@ -13,8 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#ifndef KBD8X_H -#define KBD8X_H +#pragma once #include "quantum.h" #include "led.h" @@ -31,7 +30,7 @@ inline void scroll_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); } // LAYOUT depicting all possible switch positions. -// LAYOUT_all supports ISO, split backspace and split left/right shift. +// LAYOUT_all supports ISO, split backspace and split left/right shift. #define LAYOUT_all( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K3D, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K5B, K5C, K3E, \ @@ -49,7 +48,7 @@ inline void scroll_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); } { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E } \ } -// LAYOUT depicting only switch positions for a standard TKL ANSI keyboard. +// LAYOUT depicting only switch positions for a standard TKL ANSI keyboard. // TODO: Double check location of backspace key for 2u layout (It's either K1D or K1C). #define LAYOUT_tkl_ansi( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K3D, \ @@ -68,4 +67,3 @@ inline void scroll_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); } { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E } \ } -#endif diff --git a/keyboards/kbd8x/keymaps/default/config.h b/keyboards/kbd8x/keymaps/default/config.h index 63bef2a735..fa7db0bc10 100644 --- a/keyboards/kbd8x/keymaps/default/config.h +++ b/keyboards/kbd8x/keymaps/default/config.h @@ -14,11 +14,4 @@ * along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" - -// place overrides here - -#endif +#pragma once diff --git a/keyboards/kbd8x/keymaps/default_backlighting/config.h b/keyboards/kbd8x/keymaps/default_backlighting/config.h index 63bef2a735..fa7db0bc10 100644 --- a/keyboards/kbd8x/keymaps/default_backlighting/config.h +++ b/keyboards/kbd8x/keymaps/default_backlighting/config.h @@ -14,11 +14,4 @@ * along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" - -// place overrides here - -#endif +#pragma once diff --git a/keyboards/kbd8x/keymaps/default_backlighting/rules.mk b/keyboards/kbd8x/keymaps/default_backlighting/rules.mk index e806a1ca59..07b9f81fd0 100644 --- a/keyboards/kbd8x/keymaps/default_backlighting/rules.mk +++ b/keyboards/kbd8x/keymaps/default_backlighting/rules.mk @@ -1,7 +1,7 @@ #Build Options BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration diff --git a/keyboards/kbd8x/rules.mk b/keyboards/kbd8x/rules.mk index 46e9732ea7..e5925463ec 100644 --- a/keyboards/kbd8x/rules.mk +++ b/keyboards/kbd8x/rules.mk @@ -45,7 +45,6 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # Atmel DFU loader 4096 # LUFA bootloader 4096 # USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 BOOTLOADER = atmel-dfu @@ -53,7 +52,7 @@ BOOTLOADER = atmel-dfu # change yes to no to disable # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration From 5c2ac733afe9f6d68d2ad42c9d58fbff466a7874 Mon Sep 17 00:00:00 2001 From: Jarred Steenvoorden Date: Wed, 3 Oct 2018 01:14:37 +1000 Subject: [PATCH 101/269] Keymap: Adding my DZ60, Satan, XD75 kemaps and updates to userspace (#4039) * Update userspace with common config.h * Add my dz60, satan and xd75 keyboard keymaps * Fixing executable bits changed during last upstream merge * Cleanup unnecessary files and defines * Remove unnecessary defines from userspace config --- keyboards/dz60/keymaps/jarred/keymap.c | 21 +++++++++ keyboards/planck/keymaps/jarred/rules.mk | 4 -- keyboards/satan/keymaps/jarred/keymap.c | 22 ++++++++++ keyboards/satan/keymaps/jarred/readme.md | 1 + keyboards/xd75/keymaps/daniel/keymap.c | 29 +++++++++++++ keyboards/xd75/keymaps/daniel/readme.md | 1 + keyboards/xd75/keymaps/jarred/keymap.c | 37 ++++++++++++++++ keyboards/xd75/keymaps/jarred/readme.md | 1 + .../planck/keymaps => users}/jarred/config.h | 43 ++++++++++++------- users/jarred/jarred.c | 15 +++++++ users/jarred/jarred.h | 8 ++-- users/jarred/rules.mk | 15 +++++++ 12 files changed, 174 insertions(+), 23 deletions(-) create mode 100644 keyboards/dz60/keymaps/jarred/keymap.c delete mode 100644 keyboards/planck/keymaps/jarred/rules.mk create mode 100644 keyboards/satan/keymaps/jarred/keymap.c create mode 100644 keyboards/satan/keymaps/jarred/readme.md create mode 100644 keyboards/xd75/keymaps/daniel/keymap.c create mode 100644 keyboards/xd75/keymaps/daniel/readme.md create mode 100644 keyboards/xd75/keymaps/jarred/keymap.c create mode 100644 keyboards/xd75/keymaps/jarred/readme.md rename {keyboards/planck/keymaps => users}/jarred/config.h (54%) diff --git a/keyboards/dz60/keymaps/jarred/keymap.c b/keyboards/dz60/keymaps/jarred/keymap.c new file mode 100644 index 0000000000..9e68506831 --- /dev/null +++ b/keyboards/dz60/keymaps/jarred/keymap.c @@ -0,0 +1,21 @@ +#include QMK_KEYBOARD_H + +#define _QW 0 +#define _NV 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QW] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, + MO(_NV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, + KC_LSFT, XXXXXXX,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,XXXXXXX, + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT,KC_RGUI, XXXXXXX,KC_APP, KC_RCTL), + + [_NV] = LAYOUT( + KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,_______,_______, + _______,_______,_______,_______,KC_DEL ,KC_BSPC,_______,KC_HOME,KC_UP ,KC_END ,KC_INS ,_______,_______,_______, + _______,_______,_______,KC_LSFT,KC_LCTL,KC_ENT ,_______,KC_LEFT,KC_DOWN,KC_RGHT,KC_DEL ,KC_DEL , _______, + _______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,_______,_______,_______, + _______,_______,_______, _______,_______,_______, _______,_______,_______, RESET, _______) +}; diff --git a/keyboards/planck/keymaps/jarred/rules.mk b/keyboards/planck/keymaps/jarred/rules.mk deleted file mode 100644 index cd14c41e11..0000000000 --- a/keyboards/planck/keymaps/jarred/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -# Build options - -BACKLIGHT_ENABLE = no # Switch LEDs -MOUSEKEY_ENABLE = no # Emulates mouse key using keypresses diff --git a/keyboards/satan/keymaps/jarred/keymap.c b/keyboards/satan/keymaps/jarred/keymap.c new file mode 100644 index 0000000000..c6852e4eb5 --- /dev/null +++ b/keyboards/satan/keymaps/jarred/keymap.c @@ -0,0 +1,22 @@ +#include QMK_KEYBOARD_H + +#define _QW 0 +#define _NV 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QW] = LAYOUT_60_ansi( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ + MO(_NV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL), + +[_NV] = LAYOUT_60_ansi( + KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,_______, \ + _______,_______,_______,_______,KC_DEL ,KC_BSPC,_______,KC_HOME,KC_UP ,KC_END ,KC_INS ,_______,_______,_______, \ + _______,_______,_______,KC_LSFT,KC_LCTL,KC_ENT ,_______,KC_LEFT,KC_DOWN,KC_RGHT,KC_DEL ,KC_DEL , _______, \ + _______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______, RESET, _______), + +}; diff --git a/keyboards/satan/keymaps/jarred/readme.md b/keyboards/satan/keymaps/jarred/readme.md new file mode 100644 index 0000000000..522cb19b65 --- /dev/null +++ b/keyboards/satan/keymaps/jarred/readme.md @@ -0,0 +1 @@ +# Jarred's Satan GH60 layout diff --git a/keyboards/xd75/keymaps/daniel/keymap.c b/keyboards/xd75/keymaps/daniel/keymap.c new file mode 100644 index 0000000000..2804a6cd0d --- /dev/null +++ b/keyboards/xd75/keymaps/daniel/keymap.c @@ -0,0 +1,29 @@ +#include QMK_KEYBOARD_H + +#define _QW 0 +#define _NV 1 +#define _NM 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QW] = { + { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_GRV , KC_BSPC }, + { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, + { MO(_NV), KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , MO(_NM), KC_PGUP }, + { KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, KC_RSFT, KC_UP , KC_PGDN }, + { KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_SPC , KC_SPC , KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RGUI, KC_APP , KC_LEFT, KC_DOWN, KC_RGHT }, + }, + [_NV] = { + { KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______, _______ }, + { _______, _______, _______, _______, KC_DEL , KC_BSPC, _______, KC_HOME, KC_UP , KC_END , KC_INS , _______, _______, _______, _______ }, + { _______, _______, _______, KC_LSFT, KC_LCTL, KC_ENT , _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, + [_NM] = { + { _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + { _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + { _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + { _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + { RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + } +}; diff --git a/keyboards/xd75/keymaps/daniel/readme.md b/keyboards/xd75/keymaps/daniel/readme.md new file mode 100644 index 0000000000..3305d0f30b --- /dev/null +++ b/keyboards/xd75/keymaps/daniel/readme.md @@ -0,0 +1 @@ +# Daniels xd75 keymap diff --git a/keyboards/xd75/keymaps/jarred/keymap.c b/keyboards/xd75/keymaps/jarred/keymap.c new file mode 100644 index 0000000000..f851787118 --- /dev/null +++ b/keyboards/xd75/keymaps/jarred/keymap.c @@ -0,0 +1,37 @@ +#include QMK_KEYBOARD_H + +#define _QW 0 +#define _LW 1 +#define _NV 2 +#define _NM 3 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QW] = { + { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_MUTE, KC_VOLD, KC_VOLU, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC }, + { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_INS , KC_HOME, KC_PGUP, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC }, + { MO(_NV), KC_A , KC_S , KC_D , KC_F , KC_G , KC_DEL , KC_END , KC_PGDN, KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT }, + { KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , _______, KC_UP , _______, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT }, + { KC_LCTL, KC_LGUI, MO(_NM), KC_LALT, MO(_LW), KC_SPC , KC_LEFT, KC_DOWN, KC_RGHT, KC_ENT , MO(_LW), KC_RALT, KC_RGUI, KC_APP , KC_RCTL }, + }, + [_LW] = { + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , _______, _______, _______, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______ }, + { _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , _______, _______, _______, KC_F11 , KC_MINS, KC_EQL , KC_LBRC, KC_RBRC, KC_BSLS }, + { _______, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , _______, _______, _______, KC_F12 , KC_GRV , _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, + [_NV] = { + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, KC_DEL , KC_BSPC, _______, _______, _______, _______, KC_HOME, KC_UP , KC_END , KC_INS , _______ }, + { _______, _______, _______, KC_LSFT, KC_LCTL, KC_ENT , _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, + [_NM] = { + { _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______ }, + { RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + } +}; diff --git a/keyboards/xd75/keymaps/jarred/readme.md b/keyboards/xd75/keymaps/jarred/readme.md new file mode 100644 index 0000000000..4070bb3eed --- /dev/null +++ b/keyboards/xd75/keymaps/jarred/readme.md @@ -0,0 +1 @@ +# Jarreds xd75 keymap diff --git a/keyboards/planck/keymaps/jarred/config.h b/users/jarred/config.h similarity index 54% rename from keyboards/planck/keymaps/jarred/config.h rename to users/jarred/config.h index 9e8f404c15..f282088144 100644 --- a/keyboards/planck/keymaps/jarred/config.h +++ b/users/jarred/config.h @@ -14,24 +14,37 @@ * along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once -#include "config_common.h" +// Sets good default for the speed of the mouse. +#undef MOUSEKEY_INTERVAL +#undef MOUSEKEY_DELAY +#undef MOUSEKEY_TIME_TO_MAX +#undef MOUSEKEY_MAX_SPEED + +#define MOUSEKEY_INTERVAL 16 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 40 +#define MOUSEKEY_MAX_SPEED 5 + +#undef MOUSEKEY_WHEEL_MAX_SPEED +#undef MOUSEKEY_WHEEL_TIME_TO_MAX +#undef MOUSEKEY_WHEEL_DELAY + +#define MOUSEKEY_WHEEL_MAX_SPEED 4 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 255 +#define MOUSEKEY_WHEEL_DELAY 0 + +#undef TAPPING_TOGGLE +#undef TAPPING_TERM +#undef IGNORE_MOD_TAP_INTERRUPT + +#define TAPPING_TOGGLE 1 +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT #ifdef AUDIO_ENABLE #define STARTUP_SONG SONG(PLANCK_SOUND) #endif -#define TAPPING_TERM 200 - -#define MOUSEKEY_DELAY 0 -#define MOUSEKEY_INTERVAL 16 -#define MOUSEKEY_TIME_TO_MAX 40 -#define MOUSEKEY_MAX_SPEED 5 - -#define MOUSEKEY_WHEEL_DELAY 0 -#define MOUSEKEY_WHEEL_MAX_SPEED 4 -#define MOUSEKEY_WHEEL_TIME_TO_MAX 255 - -#endif +#define MACRO_TIMER 5 diff --git a/users/jarred/jarred.c b/users/jarred/jarred.c index f8413ca3b3..33162b6891 100644 --- a/users/jarred/jarred.c +++ b/users/jarred/jarred.c @@ -15,3 +15,18 @@ */ #include "jarred.h" +#include "version.h" + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + switch (keycode) { + case VRSN: // Prints firmware version + if (record->event.pressed) { + send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), MACRO_TIMER); + } + return false; + break; + } + + return true; +} diff --git a/users/jarred/jarred.h b/users/jarred/jarred.h index b1253f76a7..a6774ce264 100644 --- a/users/jarred/jarred.h +++ b/users/jarred/jarred.h @@ -19,9 +19,9 @@ #include "quantum.h" -// Use 7 wide characters for keymaps -#define _______ KC_TRNS -#define XXXXXXX KC_NO +enum userspace_custom_keycodes { + VRSN = SAFE_RANGE // Prints QMK Firmware and board info +}; // Layers #define _QW 0 @@ -72,7 +72,7 @@ #define NUMPAD_L1 RGB_TOG, RGB_MOD, _______, _______, RGB_HUD, RGB_HUI #define NUMPAD_L2 BL_TOGG, BL_STEP, BL_BRTG, _______, RGB_SAD, RGB_SAI #define NUMPAD_L3 _______, _______, _______, _______, RGB_VAD, RGB_VAI -#define NUMPAD_L4 RESET, _______, _______, _______, RGB_SPD, RGB_SPI +#define NUMPAD_L4 RESET, VRSN, _______, _______, RGB_SPD, RGB_SPI #define NUMPAD_R1 _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______ #define NUMPAD_R2 _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______ diff --git a/users/jarred/rules.mk b/users/jarred/rules.mk index 3c15cd0f9a..9a00cbf72b 100644 --- a/users/jarred/rules.mk +++ b/users/jarred/rules.mk @@ -1 +1,16 @@ SRC += jarred.c + +ifneq (,$(findstring planck,$(KEYBOARD))) + # Enable backlight for rev4 planck only + ifneq (,$(findstring rev4,$(KEYBOARD))) + BACKLIGHT_ENABLE = yes + BACKLIGHT_BREATHING = yes + else + BACKLIGHT_ENABLE = no + BACKLIGHT_BREATHING = no + endif + + AUDIO_ENABLE = yes +endif + +MOUSEKEY_ENABLE = no From 66b793730ead28e409cbc152606a769e1c7b6a0b Mon Sep 17 00:00:00 2001 From: Bramver Date: Tue, 2 Oct 2018 22:06:31 +0200 Subject: [PATCH 102/269] Keymap: Personal XD75 keymap added. (#4045) * Personal XD75 keymap added. Nothing fancy, has emojisupport. * Converted to spaces to follow guidelines * Fixed requested changes. Replacing include guards with pragma once. Omitting unnecessary lines. PR #4045 --- keyboards/xd75/keymaps/bramver/README.md | 43 +++++++++ keyboards/xd75/keymaps/bramver/config.h | 25 +++++ keyboards/xd75/keymaps/bramver/keymap.c | 115 +++++++++++++++++++++++ keyboards/xd75/keymaps/bramver/rules.mk | 7 ++ 4 files changed, 190 insertions(+) create mode 100644 keyboards/xd75/keymaps/bramver/README.md create mode 100644 keyboards/xd75/keymaps/bramver/config.h create mode 100644 keyboards/xd75/keymaps/bramver/keymap.c create mode 100644 keyboards/xd75/keymaps/bramver/rules.mk diff --git a/keyboards/xd75/keymaps/bramver/README.md b/keyboards/xd75/keymaps/bramver/README.md new file mode 100644 index 0000000000..2dcac5f0e3 --- /dev/null +++ b/keyboards/xd75/keymaps/bramver/README.md @@ -0,0 +1,43 @@ +# XD75 Layout + +Standard qwerty layout. +Limited emoji support and proper mouse settings. + +## Keymap + +``` +_BASE + | GESC | 1 | 2 | 3 | 4 | 5 | MPRV | MPLY | MNXT | 6 | 7 | 8 | 9 | 0 | BSPC | + | TAB | Q | W | E | R | T | MINS | EQL | BSLS | Y | U | I | O | P | ENT | + | MO(3) | A | S | D | F | G | LBRC | MUTE | RBRC | H | J | K | L | SCLN | QUOT | + | LSFT | Z | X | C | V | B | HOME | SLEP | END | N | M | COMM | DOT | SLSH | RSFT | + | LCTL | MO(4) | LALT | LGUI | SPC | SPC | MO(1) | DEL | MO(2) | SPC | LEFT | DOWN | UP | RGHT | RGUI | + +_LOWER + | _______ | _______ | _______ | _______ | _______ | _______ | BL_TOGG | BL_DEC | BL_INC | _______ | _______ | _______ | _______ | _______ | _______ | + | _______ | WH_L | BTN1 | MS_U | BTN2 | WH_U | BL_STEP | RGB_TOG | RGB_MOD | _______ | _______ | _______ | _______ | _______ | _______ | + | _______ | WH_R | MS_L | MS_D | MS_R | WH_D | RGB_HUI | RGB_HUD | RGB_SAI | _______ | LEFT | DOWN | UP | RGHT | _______ | + | _______ | _______ | _______ | _______ | _______ | _______ | RGB_SAD | RGB_VAI | RGB_VAD | _______ | _______ | _______ | _______ | _______ | _______ | + | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | + +_LINVERT + | _______ | _______ | _______ | _______ | _______ | _______ | BL_TOGG | BL_DEC | BL_INC | _______ | _______ | _______ | _______ | _______ | _______ | + | _______ | _______ | _______ | _______ | _______ | _______ | BL_STEP | RGB_TOG | RGB_MOD | WH_U | BTN1 | MS_U | BTN2 | WH_L | _______ | + | _______ | LEFT | DOWN | UP | RGHT | _______ | RGB_SAI | RGB_HUI | RGB_HUD | WH_D | MS_L | MS_D | MS_R | WH_R | _______ | + | _______ | _______ | _______ | _______ | _______ | _______ | RGB_SAD | RGB_VAI | RGB_VAD | _______ | _______ | _______ | _______ | _______ | _______ | + | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | + +_RAISE + | F1 | F2 | F3 | F4 | F5 | F6 | _______ | _______ | _______ | F7 | F8 | F9 | F10 | F11 | F12 | + | _______ | _______ | 7 | 8 | 9 | _______ | _______ | _______ | _______ | _______ | MUTE | VOLD | VOLU | _______ | _______ | + | _______ | _______ | 4 | 5 | 6 | _______ | _______ | _______ | _______ | _______ | MPRV | MPLY | MNXT | _______ | _______ | + | _______ | _______ | 1 | 2 | 3 | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | + | _______ | _______ | _______ | 0 | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | + +_EMOJIFY + | TO(0) | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | RESET | + | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | + | _______ | X(CELE) | X(PRAY) | X(NAIL) | X(OK) | X(THNK) | _______ | _______ | _______ | X(UNAM) | X(HEYE) | X(COOL) | X(EYES) | X(SMIR) | _______ | + | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | + | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | +``` \ No newline at end of file diff --git a/keyboards/xd75/keymaps/bramver/config.h b/keyboards/xd75/keymaps/bramver/config.h new file mode 100644 index 0000000000..2264af74c2 --- /dev/null +++ b/keyboards/xd75/keymaps/bramver/config.h @@ -0,0 +1,25 @@ +/* Copyright 2018 darm + * + * 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 + +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_INTERVAL 16 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_WHEEL_MAX_SPEED 8 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 +#define MOUSEKEY_WHEEL_DELAY 0 diff --git a/keyboards/xd75/keymaps/bramver/keymap.c b/keyboards/xd75/keymaps/bramver/keymap.c new file mode 100644 index 0000000000..831278d001 --- /dev/null +++ b/keyboards/xd75/keymaps/bramver/keymap.c @@ -0,0 +1,115 @@ +/* Copyright 2018 darm + * + * 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 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Layer shorthand +#define _BASE 0 +#define _LOWER 1 +#define _LINVERT 2 +#define _RAISE 3 +#define _EMOJIFY 4 + +enum emoji_map { + UNAM, // unamused 😒 + HEYE, // smiling face with heart shaped eyes 😍 + OK, // ok hand sign 👌 + SMIR, // smirk 😏 + PRAY, // pray 🙏 + CELE, // celebration 🙌 + COOL, // smile with sunglasses 😎 + EYES, // eyes + THNK, // BIG THONK + NAIL, // Nailcare 💅 +}; + +const uint32_t PROGMEM unicode_map[] = { + [UNAM] = 0x1F612, + [HEYE] = 0x1f60d, + [OK] = 0x1F44C, + [SMIR] = 0x1F60F, + [PRAY] = 0x1F64F, + [CELE] = 0x1F64C, + [COOL] = 0x1F60E, + [EYES] = 0x1F440, + [THNK] = 0x1F914, + [NAIL] = 0x1F485, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = { + { KC_GESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_MPRV , KC_MPLY , KC_MNXT , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC }, + { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_MINS , KC_EQL , KC_BSLS , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_ENT }, + { MO(3) , KC_A , KC_S , KC_D , KC_F , KC_G , KC_LBRC , KC_MUTE , KC_RBRC , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT }, + { KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_HOME , KC_SLEP , KC_END , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT }, + { KC_LCTL , MO(4) , KC_LALT , KC_LGUI , KC_SPC , KC_SPC , MO(1) , KC_DEL , MO(2) , KC_SPC , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , KC_RGUI }, + }, + + [_LOWER] = { + { _______ , _______ , _______ , _______ , _______ , _______ , BL_TOGG , BL_DEC , BL_INC , _______ , _______ , _______ , _______ , _______ , _______ }, + { _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , BL_STEP , RGB_TOG , RGB_MOD , _______ , _______ , _______ , _______ , _______ , _______ }, + { _______ , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , RGB_HUI , RGB_HUD , RGB_SAI , _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ }, + { _______ , _______ , _______ , _______ , _______ , _______ , RGB_SAD , RGB_VAI , RGB_VAD , _______ , _______ , _______ , _______ , _______ , _______ }, + { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ }, + }, + + [_LINVERT] = { + { _______ , _______ , _______ , _______ , _______ , _______ , BL_TOGG , BL_DEC , BL_INC , _______ , _______ , _______ , _______ , _______ , _______ }, + { _______ , _______ , _______ , _______ , _______ , _______ , BL_STEP , RGB_TOG , RGB_MOD , KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ }, + { _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , RGB_SAI , RGB_HUI , RGB_HUD , KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , _______ }, + { _______ , _______ , _______ , _______ , _______ , _______ , RGB_SAD , RGB_VAI , RGB_VAD , _______ , _______ , _______ , _______ , _______ , _______ }, + { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ }, + }, + + [_RAISE] = { + { KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , _______ , _______ , _______ , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 }, + { _______ , _______ , KC_7 , KC_8 , KC_9 , _______ , _______ , _______ , _______ , _______ , KC_MUTE , KC_VOLD , KC_VOLU , _______ , _______ }, + { _______ , _______ , KC_4 , KC_5 , KC_6 , _______ , _______ , _______ , _______ , _______ , KC_MPRV , KC_MPLY , KC_MNXT , _______ , _______ }, + { _______ , _______ , KC_1 , KC_2 , KC_3 , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ }, + { _______ , _______ , _______ , KC_0 , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ }, + }, + + [_EMOJIFY] = { + { TO(0) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , RESET }, + { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ }, + { _______ , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , _______ , _______ , _______ , X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , _______ }, + { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ }, + { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ }, + }, + +}; + +const uint16_t PROGMEM fn_actions[] = {}; + +void matrix_init_user(void) { + _delay_ms(20); // Gets rid of tick + set_unicode_input_mode(UC_LNX); +} + +/* Template for future layers + [_LAYER_NAME] = { + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + } +}; +*/ diff --git a/keyboards/xd75/keymaps/bramver/rules.mk b/keyboards/xd75/keymaps/bramver/rules.mk new file mode 100644 index 0000000000..1c3d4d8cd0 --- /dev/null +++ b/keyboards/xd75/keymaps/bramver/rules.mk @@ -0,0 +1,7 @@ +# Build options +BACKLIGHT_ENABLE = yes # Switch LEDs +MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses +RGBLIGHT_ENABLE = yes # LED strips +EXTRAKEY_ENABLE = yes # Use system and audio control key codes +TAP_DANCE_ENABLE = no # Use multi-tap features +UNICODEMAP_ENABLE = yes # Emojify me pls From 9aecf4ccfdbef6123bbf0a1e6670f85f4763ee89 Mon Sep 17 00:00:00 2001 From: Florian Didron Date: Tue, 2 Oct 2018 08:41:19 +0900 Subject: [PATCH 103/269] Adds a method allowing to set custom colors to the rgb matrix --- quantum/rgb_matrix.c | 7 +++++++ quantum/rgb_matrix.h | 1 + 2 files changed, 8 insertions(+) diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index f0c2ddfdfb..1f00e9d99b 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -903,3 +903,10 @@ void rgblight_mode(uint8_t mode) { uint32_t rgblight_get_mode(void) { return rgb_matrix_config.mode; } + +void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) { + rgb_matrix_config.hue = hue; + rgb_matrix_config.sat = sat; + rgb_matrix_config.val = val; + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index 45caaac423..d2450a7d99 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -128,6 +128,7 @@ uint32_t rgb_matrix_get_tick(void); void rgblight_toggle(void); void rgblight_step(void); +void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val); void rgblight_step_reverse(void); void rgblight_increase_hue(void); void rgblight_decrease_hue(void); From 1741e39e3463ac3cc6164656b0cc7afa8c33cc00 Mon Sep 17 00:00:00 2001 From: yiancar Date: Wed, 3 Oct 2018 00:03:50 +0100 Subject: [PATCH 104/269] New keyboard: Baguette (#4047) * Bagette Addition of Baguette a close group buy custom * Add json --- keyboards/baguette/baguette.c | 71 ++++++ keyboards/baguette/baguette.h | 59 +++++ keyboards/baguette/config.h | 224 +++++++++++++++++++ keyboards/baguette/info.json | 16 ++ keyboards/baguette/keymaps/default/keymap.c | 50 +++++ keyboards/baguette/keymaps/default/readme.md | 9 + keyboards/baguette/keymaps/iso/keymap.c | 50 +++++ keyboards/baguette/keymaps/iso/readme.md | 10 + keyboards/baguette/readme.md | 16 ++ keyboards/baguette/rules.mk | 81 +++++++ 10 files changed, 586 insertions(+) create mode 100644 keyboards/baguette/baguette.c create mode 100644 keyboards/baguette/baguette.h create mode 100644 keyboards/baguette/config.h create mode 100644 keyboards/baguette/info.json create mode 100644 keyboards/baguette/keymaps/default/keymap.c create mode 100644 keyboards/baguette/keymaps/default/readme.md create mode 100644 keyboards/baguette/keymaps/iso/keymap.c create mode 100644 keyboards/baguette/keymaps/iso/readme.md create mode 100644 keyboards/baguette/readme.md create mode 100644 keyboards/baguette/rules.mk diff --git a/keyboards/baguette/baguette.c b/keyboards/baguette/baguette.c new file mode 100644 index 0000000000..6a8df873ab --- /dev/null +++ b/keyboards/baguette/baguette.c @@ -0,0 +1,71 @@ +/* Copyright 2018 Yiancar + * + * 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 "baguette.h" + +void bootmagic_lite(void) +{ + // The lite version of TMK's bootmagic made by Wilba. + // 100% less potential for accidentally making the + // keyboard do stupid things. + + // We need multiple scans because debouncing can't be turned off. + matrix_scan(); + wait_ms(DEBOUNCING_DELAY); + matrix_scan(); + + // If the Esc and space bar are held down on power up, + // reset the EEPROM valid state and jump to bootloader. + // Assumes Esc is at [0,0] and spacebar is at [4,7]. + // This isn't very generalized, but we need something that doesn't + // rely on user's keymaps in firmware or EEPROM. + if ( ( matrix_get_row(0) & (1<<0) ) && + ( matrix_get_row(4) & (1<<7) ) ) + { + // Set the TMK/QMK EEPROM state as invalid. + eeconfig_disable(); + //eeprom_set_valid(false); + // Jump to bootloader. + bootloader_jump(); + } +} + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + bootmagic_lite(); + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/baguette/baguette.h b/keyboards/baguette/baguette.h new file mode 100644 index 0000000000..e3945bea7e --- /dev/null +++ b/keyboards/baguette/baguette.h @@ -0,0 +1,59 @@ +/* Copyright 2018 Yiancar + * + * 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 . + */ +#ifndef BAGUETTE_H +#define BAGUETTE_H + +#include "quantum.h" + +/* This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT_ansi( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \ + K42, K43, K47, K4B, K4C, K4D, K4E, K4F \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, KC_NO }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO }, \ + { KC_NO, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, K4E, K4F } \ +} + +#define LAYOUT_iso( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1F, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \ + K42, K43, K47, K4B, K4C, K4D, K4E, K4F \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO, KC_NO, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D, KC_NO, KC_NO }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO }, \ + { KC_NO, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, K4E, K4F } \ +} + +#endif diff --git a/keyboards/baguette/config.h b/keyboards/baguette/config.h new file mode 100644 index 0000000000..806f9fb4f6 --- /dev/null +++ b/keyboards/baguette/config.h @@ -0,0 +1,224 @@ +/* +Copyright 2018 Yiancar + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x5050 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Yiancar +#define PRODUCT Baguette +#define DESCRIPTION A French Custom + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 16 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B3, B2, B1, E6, D6 } +#define MATRIX_COL_PINS { B6, C6, C7, F7, F6, F5, F4, F1, F0, B0, D0, D1, D2, D3, D5, D4 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 5 + +// #define RGB_DI_PIN E2 +// #ifdef RGB_DI_PIN +// #define RGBLIGHT_ANIMATIONS +// #define RGBLED_NUM 16 +// #define RGBLIGHT_HUE_STEP 8 +// #define RGBLIGHT_SAT_STEP 8 +// #define RGBLIGHT_VAL_STEP 8 +// #endif + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + diff --git a/keyboards/baguette/info.json b/keyboards/baguette/info.json new file mode 100644 index 0000000000..777899a600 --- /dev/null +++ b/keyboards/baguette/info.json @@ -0,0 +1,16 @@ +{ + "keyboard_name": "Baguette", + "url": "", + "maintainer": "qmk", + "bootloader": "atmel-dfu", + "width": 19.75, + "height": 6.5, + "layouts": { + "LAYOUT_ansi": { + "layout": [{"label":"~", "x":3.25, "y":1.5}, {"label":"!", "x":4.25, "y":1.5}, {"label":"@", "x":5.25, "y":1.5}, {"label":"#", "x":6.25, "y":1.5}, {"label":"$", "x":7.25, "y":1.5}, {"label":"%", "x":8.25, "y":1.5}, {"label":"^", "x":9.25, "y":1.5}, {"label":"&", "x":10.25, "y":1.5}, {"label":"*", "x":11.25, "y":1.5}, {"label":"(", "x":12.25, "y":1.5}, {"label":")", "x":13.25, "y":1.5}, {"label":"_", "x":14.25, "y":1.5}, {"label":"+", "x":15.25, "y":1.5}, {"label":"|", "x":16.25, "y":1.5}, {"label":"Del", "x":17.25, "y":1.5}, {"label":"Insert", "x":18.75, "y":1.5}, {"label":"Tab", "x":3.25, "y":2.5, "w":1.5}, {"label":"Q", "x":4.75, "y":2.5}, {"label":"W", "x":5.75, "y":2.5}, {"label":"E", "x":6.75, "y":2.5}, {"label":"R", "x":7.75, "y":2.5}, {"label":"T", "x":8.75, "y":2.5}, {"label":"Y", "x":9.75, "y":2.5}, {"label":"U", "x":10.75, "y":2.5}, {"label":"I", "x":11.75, "y":2.5}, {"label":"O", "x":12.75, "y":2.5}, {"label":"P", "x":13.75, "y":2.5}, {"label":"{", "x":14.75, "y":2.5}, {"label":"}", "x":15.75, "y":2.5}, {"label":"|", "x":16.75, "y":2.5, "w":1.5}, {"label":"Delete", "x":18.75, "y":2.5}, {"label":"Control", "x":3.25, "y":3.5, "w":1.75}, {"label":"A", "x":5, "y":3.5}, {"label":"S", "x":6, "y":3.5}, {"label":"D", "x":7, "y":3.5}, {"label":"F", "x":8, "y":3.5}, {"label":"G", "x":9, "y":3.5}, {"label":"H", "x":10, "y":3.5}, {"label":"J", "x":11, "y":3.5}, {"label":"K", "x":12, "y":3.5}, {"label":"L", "x":13, "y":3.5}, {"label":":", "x":14, "y":3.5}, {"label":"\"", "x":15, "y":3.5}, {"label":"Enter", "x":16, "y":3.5, "w":2.25}, {"x":3.25, "y":4.5, "w":1.25}, {"x":4.5, "y":4.5}, {"label":"Z", "x":5.5, "y":4.5}, {"label":"X", "x":6.5, "y":4.5}, {"label":"C", "x":7.5, "y":4.5}, {"label":"V", "x":8.5, "y":4.5}, {"label":"B", "x":9.5, "y":4.5}, {"label":"N", "x":10.5, "y":4.5}, {"label":"M", "x":11.5, "y":4.5}, {"label":"<", "x":12.5, "y":4.5}, {"label":">", "x":13.5, "y":4.5}, {"label":"?", "x":14.5, "y":4.5}, {"x":15.5, "y":4.5}, {"label":"Shift", "x":16.5, "y":4.5, "w":1.25}, {"label":"\u2191", "x":17.75, "y":4.5}, {"label":"Win", "x":4.5, "y":5.5}, {"label":"Alt", "x":5.5, "y":5.5, "w":1.25}, {"x":6.75, "y":5.5, "w":6.25}, {"label":"Ctrl", "x":13, "y":5.5, "w":1.25}, {"label":"Fn", "x":14.25, "y":5.5}, {"label":"\u2190", "x":16.75, "y":5.5}, {"label":"\u2193", "x":17.75, "y":5.5}, {"label":"\u2192", "x":18.75, "y":5.5}] + }, + "LAYOUT_iso": { + "layout": [{"label":"~", "x":3.25, "y":1.5}, {"label":"!", "x":4.25, "y":1.5}, {"label":"@", "x":5.25, "y":1.5}, {"label":"#", "x":6.25, "y":1.5}, {"label":"$", "x":7.25, "y":1.5}, {"label":"%", "x":8.25, "y":1.5}, {"label":"^", "x":9.25, "y":1.5}, {"label":"&", "x":10.25, "y":1.5}, {"label":"*", "x":11.25, "y":1.5}, {"label":"(", "x":12.25, "y":1.5}, {"label":")", "x":13.25, "y":1.5}, {"label":"_", "x":14.25, "y":1.5}, {"label":"+", "x":15.25, "y":1.5}, {"label":"|", "x":16.25, "y":1.5}, {"label":"Del", "x":17.25, "y":1.5}, {"label":"Insert", "x":18.75, "y":1.5}, {"label":"Tab", "x":3.25, "y":2.5, "w":1.5}, {"label":"Q", "x":4.75, "y":2.5}, {"label":"W", "x":5.75, "y":2.5}, {"label":"E", "x":6.75, "y":2.5}, {"label":"R", "x":7.75, "y":2.5}, {"label":"T", "x":8.75, "y":2.5}, {"label":"Y", "x":9.75, "y":2.5}, {"label":"U", "x":10.75, "y":2.5}, {"label":"I", "x":11.75, "y":2.5}, {"label":"O", "x":12.75, "y":2.5}, {"label":"P", "x":13.75, "y":2.5}, {"label":"{", "x":14.75, "y":2.5}, {"label":"}", "x":15.75, "y":2.5}, {"label":"Enter", "x":17, "y":2.5, "w":1.25, "h":2}, {"label":"Delete", "x":18.75, "y":2.5}, {"label":"Control", "x":3.25, "y":3.5, "w":1.75}, {"label":"A", "x":5, "y":3.5}, {"label":"S", "x":6, "y":3.5}, {"label":"D", "x":7, "y":3.5}, {"label":"F", "x":8, "y":3.5}, {"label":"G", "x":9, "y":3.5}, {"label":"H", "x":10, "y":3.5}, {"label":"J", "x":11, "y":3.5}, {"label":"K", "x":12, "y":3.5}, {"label":"L", "x":13, "y":3.5}, {"label":":", "x":14, "y":3.5}, {"label":"\"", "x":15, "y":3.5}, {"x":16, "y":3.5}, {"x":3.25, "y":4.5, "w":1.25}, {"x":4.5, "y":4.5}, {"label":"Z", "x":5.5, "y":4.5}, {"label":"X", "x":6.5, "y":4.5}, {"label":"C", "x":7.5, "y":4.5}, {"label":"V", "x":8.5, "y":4.5}, {"label":"B", "x":9.5, "y":4.5}, {"label":"N", "x":10.5, "y":4.5}, {"label":"M", "x":11.5, "y":4.5}, {"label":"<", "x":12.5, "y":4.5}, {"label":">", "x":13.5, "y":4.5}, {"label":"?", "x":14.5, "y":4.5}, {"x":15.5, "y":4.5}, {"label":"Shift", "x":16.5, "y":4.5, "w":1.25}, {"label":"\u2191", "x":17.75, "y":4.5}, {"label":"Win", "x":4.5, "y":5.5}, {"label":"Alt", "x":5.5, "y":5.5, "w":1.25}, {"x":6.75, "y":5.5, "w":6.25}, {"label":"Ctrl", "x":13, "y":5.5, "w":1.25}, {"label":"Fn", "x":14.25, "y":5.5}, {"label":"\u2190", "x":16.75, "y":5.5}, {"label":"\u2193", "x":17.75, "y":5.5}, {"label":"\u2192", "x":18.75, "y":5.5}] + } + } +} diff --git a/keyboards/baguette/keymaps/default/keymap.c b/keyboards/baguette/keymaps/default/keymap.c new file mode 100644 index 0000000000..4dfcb837a5 --- /dev/null +++ b/keyboards/baguette/keymaps/default/keymap.c @@ -0,0 +1,50 @@ +/* Copyright 2018 Yiancar + * + * 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = LAYOUT_ansi( /* Base */ + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_INS,\ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,\ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS, KC_RSFT, KC_UP, \ + KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + +[1] = LAYOUT_ansi( /* FN */ + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,\ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS,\ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, BL_TOGG, BL_STEP, BL_BRTG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; + + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/baguette/keymaps/default/readme.md b/keyboards/baguette/keymaps/default/readme.md new file mode 100644 index 0000000000..1e74a02cd6 --- /dev/null +++ b/keyboards/baguette/keymaps/default/readme.md @@ -0,0 +1,9 @@ +# The default ANSI keymap for baguette + +Typical ANSI keymap. Please note: +- Left key from split backspace is connected to 2u key. +- Left key from split left Shift is connected to 2u key. +- Right key from split right Shift is connected to 2u key. +- Backlight control is on the Z, X and C keys of the FN layer. +- Reset key combination is FN + ]. +- Holding ESC and Space while plugging in the USB erases the EEPROM. diff --git a/keyboards/baguette/keymaps/iso/keymap.c b/keyboards/baguette/keymaps/iso/keymap.c new file mode 100644 index 0000000000..ea8baf08ee --- /dev/null +++ b/keyboards/baguette/keymaps/iso/keymap.c @@ -0,0 +1,50 @@ +/* Copyright 2018 Yiancar + * + * 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = LAYOUT_iso( /* Base */ + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_INS,\ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,\ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS, KC_RSFT, KC_UP, \ + KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + +[0] = LAYOUT_iso( /* FN */ + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,\ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS,\ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, BL_TOGG, BL_STEP, BL_BRTG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; + + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/baguette/keymaps/iso/readme.md b/keyboards/baguette/keymaps/iso/readme.md new file mode 100644 index 0000000000..9256820a5c --- /dev/null +++ b/keyboards/baguette/keymaps/iso/readme.md @@ -0,0 +1,10 @@ +# The default ISO keymap for baguette + +Typical ISO keymap. Please note: +- Left key from split backspace is connected to 2u key. +- Left key from split left Shift is connected to 2u key. +- Right key from split right Shift is connected to 2u key. +- Backlight control is on the Z, X and C keys of the FN layer. +- Reset key combination is FN + ]. +- Holding ESC and Space while plugging in the USB erases the EEPROM. + diff --git a/keyboards/baguette/readme.md b/keyboards/baguette/readme.md new file mode 100644 index 0000000000..d211af16a5 --- /dev/null +++ b/keyboards/baguette/readme.md @@ -0,0 +1,16 @@ +Baguette +======== + +![Baguette](https://cdn.discordapp.com/attachments/426880953143525384/479788409263489035/scecre2.png) + +This is a custom keyboard with backlight inspired by France. + +Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar) +Hardware Supported: ATMEGA 32u4 MCU with backlight support. +Hardware Availability: Closed group-buy please contact the runners (Tesletron and Enjoy) + +Make example for this keyboard (after setting up your build environment): + + make baguette:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/baguette/rules.mk b/keyboards/baguette/rules.mk new file mode 100644 index 0000000000..062ff1b22c --- /dev/null +++ b/keyboards/baguette/rules.mk @@ -0,0 +1,81 @@ +# MCU name +#MCU = at90usb1286 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) From 37cfd2c5009b932cfddec815c63c6846a5ef3854 Mon Sep 17 00:00:00 2001 From: takashiski Date: Wed, 3 Oct 2018 09:51:43 +0900 Subject: [PATCH 105/269] add JP keycode for MacOSX (#4033) --- quantum/keymap_extras/keymap_jp.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/quantum/keymap_extras/keymap_jp.h b/quantum/keymap_extras/keymap_jp.h index fb74bce8d4..b0235f1120 100644 --- a/quantum/keymap_extras/keymap_jp.h +++ b/quantum/keymap_extras/keymap_jp.h @@ -40,6 +40,9 @@ #define JP_HENK KC_INT4 // henkan #define JP_KANA KC_INT2 // katakana/hiragana|ro-mazi +#define JP_MKANA KC_LANG1 //kana on MacOSX +#define JP_MEISU KC_LANG2 //eisu on MacOSX + //Aliases for shifted symbols #define JP_DQT LSFT(KC_2) // " From 2d671a7e1a75bb9d03a40c0e440f897c7e52a15e Mon Sep 17 00:00:00 2001 From: Chris Johnston Date: Tue, 2 Oct 2018 22:16:49 -0700 Subject: [PATCH 106/269] Enable support for Linux Mint 18 with linux_install.sh (#4042) Enable support for ubuntu-derived linux-es in installer Checks /etc/os-release for mention of ubuntu and debian. Linux Mint uses ID_LIKE=ubuntu, not ID_LIKE=debian (as seen in Ubuntu 16.04, unsure about others) --- util/linux_install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/linux_install.sh b/util/linux_install.sh index 9b8b92d087..0e4e26fd96 100755 --- a/util/linux_install.sh +++ b/util/linux_install.sh @@ -4,7 +4,7 @@ if grep ID /etc/os-release | grep -qE "rhel|fedora"; then sudo dnf install gcc unzip wget zip dfu-util dfu-programmer avr-gcc \ avr-libc binutils-avr32-linux-gnu arm-none-eabi-gcc-cs \ arm-none-eabi-binutils-cs arm-none-eabi-newlib -elif grep ID /etc/os-release | grep -q debian; then +elif grep ID /etc/os-release | grep -qE 'debian|ubuntu'; then sudo apt-get update sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc \ dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi \ @@ -38,5 +38,5 @@ fi else echo "Sorry, we don't recognize your OS. Help us by contributing support!" echo - echo "https://docs.qmk.fm/contributing.html" + echo "https://docs.qmk.fm/#/contributing" fi From 76f0b3cc70d8d1173f9145abc4d2725fd8f47302 Mon Sep 17 00:00:00 2001 From: "James D. Marble" Date: Tue, 2 Oct 2018 20:13:04 -0700 Subject: [PATCH 107/269] Add missing F-keys to ergodox_infinity input_club F11 and F12 were in the ascii art, but not the actual mapping. This corrects the error. --- keyboards/ergodox_infinity/keymaps/input_club/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_infinity/keymaps/input_club/keymap.c b/keyboards/ergodox_infinity/keymaps/input_club/keymap.c index e77319d2c8..45ad1f51f7 100644 --- a/keyboards/ergodox_infinity/keymaps/input_club/keymap.c +++ b/keyboards/ergodox_infinity/keymaps/input_club/keymap.c @@ -93,7 +93,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | * +-----+-----+-----+ */ - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -120,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | * +-----+-----+-----+ */ - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, From d435dabefb6b6870de2e1d2a660c0e9be8fa25e5 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Wed, 3 Oct 2018 08:29:29 -0700 Subject: [PATCH 108/269] Keyboard: Mint60: Configurator support and readme cleanup (#4057) * Mint60: add Configurator support * Mint60: readme cleanup Fixed the imgur url so the photo shows up, and updated the links to the docs. --- keyboards/mint60/info.json | 78 ++++++++++++++++++++++++++++++++++++++ keyboards/mint60/readme.md | 4 +- 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/keyboards/mint60/info.json b/keyboards/mint60/info.json index e69de29bb2..f03e6371b1 100644 --- a/keyboards/mint60/info.json +++ b/keyboards/mint60/info.json @@ -0,0 +1,78 @@ +{ + "keyboard_name": "Mint60", + "url": "", + "maintainer": "eucalyn", + "width": 16, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"~", "x":0, "y":0}, + {"label":"!", "x":1, "y":0}, + {"label":"@", "x":2, "y":0}, + {"label":"#", "x":3, "y":0}, + {"label":"$", "x":4, "y":0}, + {"label":"%", "x":5, "y":0}, + {"label":"^", "x":7, "y":0}, + {"label":"&", "x":8, "y":0}, + {"label":"*", "x":9, "y":0}, + {"label":"(", "x":10, "y":0}, + {"label":")", "x":11, "y":0}, + {"label":"_", "x":12, "y":0}, + {"label":"+", "x":13, "y":0}, + {"label":"Backspace", "x":14, "y":0, "w":2}, + {"label":"Tab", "x":0, "y":1, "w":1.5}, + {"label":"Q", "x":1.5, "y":1}, + {"label":"W", "x":2.5, "y":1}, + {"label":"E", "x":3.5, "y":1}, + {"label":"R", "x":4.5, "y":1}, + {"label":"T", "x":5.5, "y":1}, + {"label":"Y", "x":7.5, "y":1}, + {"label":"U", "x":8.5, "y":1}, + {"label":"I", "x":9.5, "y":1}, + {"label":"O", "x":10.5, "y":1}, + {"label":"P", "x":11.5, "y":1}, + {"label":"{", "x":12.5, "y":1}, + {"label":"}", "x":13.5, "y":1}, + {"label":"|", "x":14.5, "y":1, "w":1.5}, + {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, + {"label":"A", "x":1.75, "y":2}, + {"label":"S", "x":2.75, "y":2}, + {"label":"D", "x":3.75, "y":2}, + {"label":"F", "x":4.75, "y":2}, + {"label":"G", "x":5.75, "y":2}, + {"label":"H", "x":7.75, "y":2}, + {"label":"J", "x":8.75, "y":2}, + {"label":"K", "x":9.75, "y":2}, + {"label":"L", "x":10.75, "y":2}, + {"label":":", "x":11.75, "y":2}, + {"label":"\"", "x":12.75, "y":2}, + {"label":"Enter", "x":13.75, "y":2, "w":2.25}, + {"label":"Shift", "x":0, "y":3, "w":2}, + {"label":"Z", "x":2, "y":3}, + {"label":"X", "x":3, "y":3}, + {"label":"C", "x":4, "y":3}, + {"label":"V", "x":5, "y":3}, + {"label":"B", "x":6, "y":3}, + {"label":"N", "x":8, "y":3}, + {"label":"M", "x":9, "y":3}, + {"label":"<", "x":10, "y":3}, + {"label":">", "x":11, "y":3}, + {"label":"?", "x":12, "y":3}, + {"label":"Shift", "x":13, "y":3}, + {"label":"Up", "x":14, "y":3}, + {"label":"Fn", "x":15, "y":3}, + {"label":"Esc", "x":0, "y":4}, + {"label":"Ctrl", "x":1, "y":4, "w":1.25}, + {"label":"Win", "x":2.25, "y":4, "w":1.25}, + {"label":"Alt", "x":3.5, "y":4, "w":1.25}, + {"label":"Space", "x":4.75, "y":4, "w":2.25}, + {"label":"Space", "x":7.75, "y":4, "w":2.75}, + {"label":"Win", "x":10.5, "y":4, "w":1.25}, + {"label":"Ctrl", "x":11.75, "y":4, "w":1.25}, + {"label":"Left", "x":13, "y":4}, + {"label":"Down", "x":14, "y":4}, + {"label":"Right", "x":15, "y":4}] + } + } +} diff --git a/keyboards/mint60/readme.md b/keyboards/mint60/readme.md index b8ae720f5b..1824c682f8 100644 --- a/keyboards/mint60/readme.md +++ b/keyboards/mint60/readme.md @@ -1,6 +1,6 @@ # Mint60 -![Mint60](https://imgur.com/a/8xnTS4U) +![Mint60](https://i.imgur.com/suOE8HN.jpg) A short description of the keyboard/project @@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment): make mint60:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). From b9c503085191ea1fb0f9d80c7d083e316e9f0f7c Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Wed, 3 Oct 2018 08:30:13 -0700 Subject: [PATCH 109/269] Keyboard: KBD4x: corrected info.json file (#4056) The `info.json` file for the KBD4x was invalid due to a couple of extra commas. --- keyboards/kbd4x/info.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/kbd4x/info.json b/keyboards/kbd4x/info.json index 78d011e2c7..f9952e7903 100644 --- a/keyboards/kbd4x/info.json +++ b/keyboards/kbd4x/info.json @@ -53,7 +53,7 @@ {"label":"/", "x":8, "y":3}, {"label":"LEFT", "x":9, "y":3}, {"label":"DOWN", "x":10, "y":3}, - {"label":"RIGHT", "x":11, "y":3}, + {"label":"RIGHT", "x":11, "y":3} ] }, "LAYOUT_ortho_4x12": { @@ -105,7 +105,7 @@ {"label":"/", "x":8, "y":3}, {"label":"LEFT", "x":9, "y":3}, {"label":"DOWN", "x":10, "y":3}, - {"label":"RIGHT", "x":11, "y":3}, + {"label":"RIGHT", "x":11, "y":3} ] } } From b1c2849500df4d8fedeaf3a4d01bec1a15cf4cd0 Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Wed, 3 Oct 2018 16:30:44 +0100 Subject: [PATCH 110/269] Keymap: Add RGB matrix keypress effects and reduce firmware size. (#4055) --- keyboards/model01/keymaps/dshields/config.h | 1 + keyboards/model01/keymaps/dshields/rules.mk | 2 ++ keyboards/planck/keymaps/dshields/config.h | 1 + keyboards/planck/keymaps/dshields/rules.mk | 1 + 4 files changed, 5 insertions(+) diff --git a/keyboards/model01/keymaps/dshields/config.h b/keyboards/model01/keymaps/dshields/config.h index 4de2d3cbb3..1c78217f2f 100644 --- a/keyboards/model01/keymaps/dshields/config.h +++ b/keyboards/model01/keymaps/dshields/config.h @@ -1,5 +1,6 @@ #pragma once +#define RGB_MATRIX_KEYPRESSES #define RGB_DIGITAL_RAIN_DROPS 18 #define USB_MAX_POWER_CONSUMPTION 100 #define ONESHOT_TAP_TOGGLE 2 diff --git a/keyboards/model01/keymaps/dshields/rules.mk b/keyboards/model01/keymaps/dshields/rules.mk index 6c605daecf..d3754cc1fc 100644 --- a/keyboards/model01/keymaps/dshields/rules.mk +++ b/keyboards/model01/keymaps/dshields/rules.mk @@ -1 +1,3 @@ MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = no +CONSOLE_ENABLE = no diff --git a/keyboards/planck/keymaps/dshields/config.h b/keyboards/planck/keymaps/dshields/config.h index 512e2fbc64..63434f60ca 100644 --- a/keyboards/planck/keymaps/dshields/config.h +++ b/keyboards/planck/keymaps/dshields/config.h @@ -1,5 +1,6 @@ #pragma once +#define RGB_MATRIX_KEYPRESSES #define RGB_DIGITAL_RAIN_DROPS 24 #define USB_MAX_POWER_CONSUMPTION 100 #define ONESHOT_TAP_TOGGLE 2 diff --git a/keyboards/planck/keymaps/dshields/rules.mk b/keyboards/planck/keymaps/dshields/rules.mk index 8799c78f06..033e3c9c4e 100644 --- a/keyboards/planck/keymaps/dshields/rules.mk +++ b/keyboards/planck/keymaps/dshields/rules.mk @@ -5,6 +5,7 @@ endif MOUSEKEY_ENABLE = yes # Mouse keys(+4700) COMMAND_ENABLE = no # Commands for debug and configuration CONSOLE_ENABLE = no # Console for debug(+400) +EXTRAKEY_ENABLE = no SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend API_SYSEX_ENABLE = no From 4d1d1b7196e4aec3f91cc17856aa15c9a92d6ace Mon Sep 17 00:00:00 2001 From: Jumail Mundekkat Date: Thu, 4 Oct 2018 01:32:56 +1000 Subject: [PATCH 111/269] Keyboard: Added JN68M keyboard to handwired (#4053) --- keyboards/handwired/jn68m/config.h | 54 +++++++++++++ keyboards/handwired/jn68m/info.json | 16 ++++ keyboards/handwired/jn68m/jn68m.c | 37 +++++++++ keyboards/handwired/jn68m/jn68m.h | 49 +++++++++++ .../handwired/jn68m/keymaps/default/config.h | 19 +++++ .../handwired/jn68m/keymaps/default/keymap.c | 75 +++++++++++++++++ keyboards/handwired/jn68m/readme.md | 14 ++++ keyboards/handwired/jn68m/rules.mk | 81 +++++++++++++++++++ 8 files changed, 345 insertions(+) create mode 100644 keyboards/handwired/jn68m/config.h create mode 100644 keyboards/handwired/jn68m/info.json create mode 100644 keyboards/handwired/jn68m/jn68m.c create mode 100644 keyboards/handwired/jn68m/jn68m.h create mode 100644 keyboards/handwired/jn68m/keymaps/default/config.h create mode 100644 keyboards/handwired/jn68m/keymaps/default/keymap.c create mode 100644 keyboards/handwired/jn68m/readme.md create mode 100644 keyboards/handwired/jn68m/rules.mk diff --git a/keyboards/handwired/jn68m/config.h b/keyboards/handwired/jn68m/config.h new file mode 100644 index 0000000000..22ab1158d7 --- /dev/null +++ b/keyboards/handwired/jn68m/config.h @@ -0,0 +1,54 @@ +/* +Copyright 2018 Jumail Mundekkat / MxBlue + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xC714 +#define PRODUCT_ID 0x1010 +#define DEVICE_VER 0x0001 +#define MANUFACTURER MxBlue +#define PRODUCT JN68M +#define DESCRIPTION Custom PCB for VA68M + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 16 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B0, B1, D5, D3, D2 } +#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, E6, D1 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) diff --git a/keyboards/handwired/jn68m/info.json b/keyboards/handwired/jn68m/info.json new file mode 100644 index 0000000000..ce95563e96 --- /dev/null +++ b/keyboards/handwired/jn68m/info.json @@ -0,0 +1,16 @@ +{ + "keyboard_name": "JN68M", + "url": "", + "maintainer": "qmk", + "bootloader": "atmel-dfu", + "width": 17.25, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}] + }, + "LAYOUT_splitbs": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}] + } + } +} diff --git a/keyboards/handwired/jn68m/jn68m.c b/keyboards/handwired/jn68m/jn68m.c new file mode 100644 index 0000000000..b61b17aa9b --- /dev/null +++ b/keyboards/handwired/jn68m/jn68m.c @@ -0,0 +1,37 @@ +/* Copyright 2018 Jumail Mundekkat / MxBlue + * + * 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 "jn68m.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} diff --git a/keyboards/handwired/jn68m/jn68m.h b/keyboards/handwired/jn68m/jn68m.h new file mode 100644 index 0000000000..d47f9f6c9c --- /dev/null +++ b/keyboards/handwired/jn68m/jn68m.h @@ -0,0 +1,49 @@ +/* Copyright 2018 Jumail Mundekkat / MxBlue + * + * 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 . + */ +#ifndef JN68M_H +#define JN68M_H + +#include "quantum.h" + +#define LAYOUT( \ + K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, K11, K12, K13, K14, K67, K68,\ + K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K69, K70,\ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, \ + K43, K44, K45, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, \ + K56, K57, K58, K59, K60, K61, K63, K64, K65, K66 \ +) { \ + { K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, K11, K12, K13, K14, K67, K68 }, \ + { K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K69, K70 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42,KC_NO,KC_NO,KC_NO}, \ + { K43, K44, K45, K46, K47, K48, K49, K50, K51, K52,KC_NO,K53, K54,KC_NO,K55,KC_NO}, \ + { K56, K57, K58,KC_NO,KC_NO,K59,KC_NO,KC_NO,KC_NO,K60,KC_NO,K61, K63, K64, K65, K66} \ +} + +#define LAYOUT_splitbs( \ + K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, K11, K12, K13, K14, K15, K67, K68,\ + K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K69, K70,\ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, \ + K43, K44, K45, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, \ + K56, K57, K58, K59, K60, K61, K63, K64, K65, K66 \ +) { \ + { K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, K11, K12, K13, K14, K67, K68 }, \ + { K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K69, K70 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K15,KC_NO,KC_NO}, \ + { K43, K44, K45, K46, K47, K48, K49, K50, K51, K52,KC_NO,K53, K54,KC_NO,K55,KC_NO}, \ + { K56, K57, K58,KC_NO,KC_NO,K59,KC_NO,KC_NO,KC_NO,K60,KC_NO,K61, K63, K64, K65, K66} \ +} + +#endif diff --git a/keyboards/handwired/jn68m/keymaps/default/config.h b/keyboards/handwired/jn68m/keymaps/default/config.h new file mode 100644 index 0000000000..4496c59100 --- /dev/null +++ b/keyboards/handwired/jn68m/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 REPLACE_WITH_YOUR_NAME + * + * 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 + +// place overrides here diff --git a/keyboards/handwired/jn68m/keymaps/default/keymap.c b/keyboards/handwired/jn68m/keymaps/default/keymap.c new file mode 100644 index 0000000000..98eede94cb --- /dev/null +++ b/keyboards/handwired/jn68m/keymaps/default/keymap.c @@ -0,0 +1,75 @@ +/* Copyright 2018 Jumail Mundekkat / MxBlue + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_INS, KC_PGUP, + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, + KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, KC_HOME, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS + ), + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/handwired/jn68m/readme.md b/keyboards/handwired/jn68m/readme.md new file mode 100644 index 0000000000..f219564cae --- /dev/null +++ b/keyboards/handwired/jn68m/readme.md @@ -0,0 +1,14 @@ +# JN68M + +A custom replacement PCB for the VA68M and a birthday present for a mate. +PCB designed by /u/Xelus22 + +Keyboard Maintainer: [MxBlue](https://github.com/mxblu) +Hardware Supported: ATMega32u4 +Hardware Availability: Unavailable unless you happen to be Justin ;) + +Make example for this keyboard (after setting up your build environment): + + make handwired/jn68m:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/handwired/jn68m/rules.mk b/keyboards/handwired/jn68m/rules.mk new file mode 100644 index 0000000000..42d85ada17 --- /dev/null +++ b/keyboards/handwired/jn68m/rules.mk @@ -0,0 +1,81 @@ +# MCU name +#MCU = at90usb1286 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) From 404db1d06fa9c0dd25fff3bfa1b2ebed7273a8fc Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Wed, 3 Oct 2018 08:33:14 -0700 Subject: [PATCH 112/269] handwired/ibm122m: refactor and Configurator support (#4054) * handwired/ibm122m: refactor Refactored layout macro and keymaps to more closely resemble the keyboard's physical layout. * handwired/ibm122m: add Configurator support --- keyboards/handwired/ibm122m/ibm122m.h | 15 +- keyboards/handwired/ibm122m/info.json | 136 ++++++++ .../ibm122m/keymaps/default/keymap.c | 22 +- .../handwired/ibm122m/keymaps/lukaus/keymap.c | 305 +++++++++--------- 4 files changed, 306 insertions(+), 172 deletions(-) diff --git a/keyboards/handwired/ibm122m/ibm122m.h b/keyboards/handwired/ibm122m/ibm122m.h index 93e18b4e60..a52bf4bc44 100644 --- a/keyboards/handwired/ibm122m/ibm122m.h +++ b/keyboards/handwired/ibm122m/ibm122m.h @@ -21,14 +21,13 @@ // The first section contains all of the arguments // The second converts the arguments into a two-dimensional array #define LAYOUT( \ - k09, k19, k1A, k29, k39, k3A, k49, k59, k5A, k69, k79, k7A, k3G, k3H, k2G, \ - k0A, k0B, k1B, k2A, k2B, k3B, k4A, k4B, k5B, k6A, k6B, k7B, k1G, k5G, k4G, \ -k31, k32, k34, k24, k25, k26, k27, k37, k38, k28, k2C, k2D, k2E, k3E, k3C, k3F, k2F, k2H, k2I, k20, \ -k21, k41, k42, k44, k45, k46, k47, k57, k58, k48, k4C, k4D, k4E, k5E, k5C, k6F, k4F, k4H, k4I, k40, \ -k51, k52, k62, k14, k15, k16, k17, k07, k08, k18, k1C, k1D, k1E, k0E, k6E, k1F, k1H, k1I, k10, \ -k11, k12, k73, k74, k64, k65, k66, k67, k77, k78, k68, k6C, k6D, k7E, k63, k0G, k61, k6H, k6I, k7J, \ -k02, k01, k00, k70, k71, k03, k72, k60, k0J, k1J, k7H, k7I, \ - k0F \ + k09, k19, k1A, k29, k39, k3A, k49, k59, k5A, k69, k79, k7A, \ + k0A, k0B, k1B, k2A, k2B, k3B, k4A, k4B, k5B, k6A, k6B, k7B, \ + k31, k32, k34, k24, k25, k26, k27, k37, k38, k28, k2C, k2D, k2E, k3E, k3C, k3F, k3G, k3H, k2G, k2F, k2H, k2I, k20, \ + k21, k41, k42, k44, k45, k46, k47, k57, k58, k48, k4C, k4D, k4E, k5E, k5C, k6F, k1G, k5G, k4G, k4F, k4H, k4I, k40, \ + k51, k52, k62, k14, k15, k16, k17, k07, k08, k18, k1C, k1D, k1E, k0E, k6E, k0G, k1F, k1H, k1I, k10, \ + k11, k12, k73, k74, k64, k65, k66, k67, k77, k78, k68, k6C, k6D, k7E, k63, k60, k0J, k1J, k61, k6H, k6I, k7J, \ + k02, k01, k00, k70, k71, k03, k72, k0F, k7H, k7I \ ) \ { \ { k00, k01, k02, k03, KC_NO, KC_NO, KC_NO, k07, k08, k09, k0A, k0B, KC_NO, KC_NO, k0E, k0F, k0G, KC_NO, KC_NO, k0J }, \ diff --git a/keyboards/handwired/ibm122m/info.json b/keyboards/handwired/ibm122m/info.json index e69de29bb2..b9ce9e8f83 100644 --- a/keyboards/handwired/ibm122m/info.json +++ b/keyboards/handwired/ibm122m/info.json @@ -0,0 +1,136 @@ +{ + "keyboard_name": "IBM Model M 122-key", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 24.75, + "height": 8, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"F13", "x":3.25, "y":0}, + {"label":"F14", "x":4.25, "y":0}, + {"label":"F15", "x":5.25, "y":0}, + {"label":"F16", "x":6.25, "y":0}, + {"label":"F17", "x":7.25, "y":0}, + {"label":"F18", "x":8.25, "y":0}, + {"label":"F19", "x":9.25, "y":0}, + {"label":"F20", "x":10.25, "y":0}, + {"label":"F21", "x":11.25, "y":0}, + {"label":"F22", "x":12.25, "y":0}, + {"label":"F23", "x":13.25, "y":0}, + {"label":"F24", "x":14.25, "y":0}, + {"label":"F1", "x":3.25, "y":1}, + {"label":"F2", "x":4.25, "y":1}, + {"label":"F3", "x":5.25, "y":1}, + {"label":"F4", "x":6.25, "y":1}, + {"label":"F5", "x":7.25, "y":1}, + {"label":"F6", "x":8.25, "y":1}, + {"label":"F7", "x":9.25, "y":1}, + {"label":"F8", "x":10.25, "y":1}, + {"label":"F9", "x":11.25, "y":1}, + {"label":"F10", "x":12.25, "y":1}, + {"label":"F11", "x":13.25, "y":1}, + {"label":"F12", "x":14.25, "y":1}, + {"label":"Esc", "x":0, "y":3}, + {"x":1, "y":3}, + {"label":"`", "x":2.25, "y":3}, + {"label":"1", "x":3.25, "y":3}, + {"label":"2", "x":4.25, "y":3}, + {"label":"3", "x":5.25, "y":3}, + {"label":"4", "x":6.25, "y":3}, + {"label":"5", "x":7.25, "y":3}, + {"label":"6", "x":8.25, "y":3}, + {"label":"7", "x":9.25, "y":3}, + {"label":"8", "x":10.25, "y":3}, + {"label":"9", "x":11.25, "y":3}, + {"label":"0", "x":12.25, "y":3}, + {"label":"-", "x":13.25, "y":3}, + {"label":"=", "x":14.25, "y":3}, + {"label":"Backspace", "x":15.25, "y":3, "w":2}, + {"label":"Insert", "x":17.5, "y":3}, + {"label":"Home", "x":18.5, "y":3}, + {"label":"Page Up", "x":19.5, "y":3}, + {"label":"Num Lock", "x":20.75, "y":3}, + {"label":"/", "x":21.75, "y":3}, + {"label":"*", "x":22.75, "y":3}, + {"label":"-", "x":23.75, "y":3}, + {"x":0, "y":4}, + {"x":1, "y":4}, + {"label":"Tab", "x":2.25, "y":4, "w":1.5}, + {"label":"Q", "x":3.75, "y":4}, + {"label":"W", "x":4.75, "y":4}, + {"label":"E", "x":5.75, "y":4}, + {"label":"R", "x":6.75, "y":4}, + {"label":"T", "x":7.75, "y":4}, + {"label":"Y", "x":8.75, "y":4}, + {"label":"U", "x":9.75, "y":4}, + {"label":"I", "x":10.75, "y":4}, + {"label":"O", "x":11.75, "y":4}, + {"label":"P", "x":12.75, "y":4}, + {"label":"[", "x":13.75, "y":4}, + {"label":"]", "x":14.75, "y":4}, + {"label":"Enter", "x":16, "y":4, "w":1.25, "h":2}, + {"label":"Delete", "x":17.5, "y":4}, + {"label":"End", "x":18.5, "y":4}, + {"label":"Page Down", "x":19.5, "y":4}, + {"label":"7", "x":20.75, "y":4}, + {"label":"8", "x":21.75, "y":4}, + {"label":"9", "x":22.75, "y":4}, + {"label":"+", "x":23.75, "y":4}, + {"x":0, "y":5}, + {"x":1, "y":5}, + {"label":"Caps Lock", "x":2.25, "y":5, "w":1.75}, + {"label":"A", "x":4, "y":5}, + {"label":"S", "x":5, "y":5}, + {"label":"D", "x":6, "y":5}, + {"label":"F", "x":7, "y":5}, + {"label":"G", "x":8, "y":5}, + {"label":"H", "x":9, "y":5}, + {"label":"J", "x":10, "y":5}, + {"label":"K", "x":11, "y":5}, + {"label":"L", "x":12, "y":5}, + {"label":";", "x":13, "y":5}, + {"label":"'", "x":14, "y":5}, + {"label":"#", "x":15, "y":5}, + {"label":"Up", "x":18.5, "y":5}, + {"label":"4", "x":20.75, "y":5}, + {"label":"5", "x":21.75, "y":5}, + {"label":"6", "x":22.75, "y":5}, + {"x":23.75, "y":5}, + {"x":0, "y":6}, + {"x":1, "y":6}, + {"label":"Shift", "x":2.25, "y":6, "w":1.25}, + {"label":"\\", "x":3.5, "y":6}, + {"label":"Z", "x":4.5, "y":6}, + {"label":"X", "x":5.5, "y":6}, + {"label":"C", "x":6.5, "y":6}, + {"label":"V", "x":7.5, "y":6}, + {"label":"B", "x":8.5, "y":6}, + {"label":"N", "x":9.5, "y":6}, + {"label":"M", "x":10.5, "y":6}, + {"label":",", "x":11.5, "y":6}, + {"label":".", "x":12.5, "y":6}, + {"label":"/", "x":13.5, "y":6}, + {"label":"Shift", "x":14.5, "y":6, "w":2.75}, + {"label":"Left", "x":17.5, "y":6}, + {"x":18.5, "y":6}, + {"label":"Right", "x":19.5, "y":6}, + {"label":"1", "x":20.75, "y":6}, + {"label":"2", "x":21.75, "y":6}, + {"label":"3", "x":22.75, "y":6}, + {"label":"Enter", "x":23.75, "y":6, "h":2}, + {"x":0, "y":7}, + {"x":1, "y":7}, + {"label":"Ctrl", "x":2.25, "y":7, "w":1.5}, + {"label":"Alt", "x":4.75, "y":7, "w":1.5}, + {"x":6.25, "y":7, "w":7}, + {"label":"AltGr", "x":13.25, "y":7, "w":1.5}, + {"label":"Ctrl", "x":15.75, "y":7, "w":1.5}, + {"label":"Down", "x":18.5, "y":7}, + {"label":"0", "x":20.75, "y":7, "w":2}, + {"label":".", "x":22.75, "y":7} + ] + } + } +} diff --git a/keyboards/handwired/ibm122m/keymaps/default/keymap.c b/keyboards/handwired/ibm122m/keymaps/default/keymap.c index 633df106e9..fc383498a1 100644 --- a/keyboards/handwired/ibm122m/keymaps/default/keymap.c +++ b/keyboards/handwired/ibm122m/keymaps/default/keymap.c @@ -16,16 +16,16 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -// Original Layer -[0] = LAYOUT( - KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_INS, KC_HOME, KC_PGUP, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_END, KC_PGDN, -KC_ESC, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, -KC_NO, KC_NO, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_ENTER, KC_P7, KC_P8, KC_P9, KC_PPLS, -KC_NO, KC_NO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOT, KC_BSLS, KC_P4, KC_P5, KC_P6, KC_BSPC, -KC_NO, KC_NO, KC_LSHIFT,KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, -KC_NO, KC_NO, KC_LCTRL, KC_LALT, KC_SPC, KC_RALT, KC_RCTRL, KC_LEFT, KC_NO, KC_RIGHT,KC_P0, KC_PDOT, - KC_DOWN), + // Original Layer + [0] = LAYOUT( + KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_ESC, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_NO, KC_NO, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_NO, KC_NO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, KC_BSPC, + KC_NO, KC_NO, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_NO, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_NO, KC_NO, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT + ), }; void matrix_init_user(void) { @@ -37,7 +37,7 @@ void matrix_scan_user(void) { } bool process_record_user(uint16_t keycode, keyrecord_t *record) { - + return true; } diff --git a/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c b/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c index 02b69bacf0..9cd58c0ec9 100644 --- a/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c +++ b/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c @@ -16,7 +16,7 @@ #include QMK_KEYBOARD_H enum custom_keycodes { - PLACEHOLDER = SAFE_RANGE, + PLACEHOLDER = SAFE_RANGE, DVP_ESC, // Grave escape basically i think DVP_AMPR, @@ -37,105 +37,104 @@ enum custom_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -// Programmer's Dvorak -[0] = LAYOUT( - KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_INS, KC_HOME, KC_PGUP, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_END, KC_PGDN, -KC_ESC, TO(1), DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, -KC_NO, TO(2), KC_TAB, KC_SCOLON,KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, DVP_AT, KC_ENTER, KC_P7, KC_P8, KC_P9, KC_PPLS, -KC_NO, KC_NO, MO(3), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_BSLS, KC_P4, KC_P5, KC_P6, MO(4), -LCTL(KC_F), KC_LALT, KC_LSHIFT,KC_ESC, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, -LCTL(KC_C), LCTL(KC_V), KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_LEFT, KC_BTN3, KC_RIGHT, KC_P0, KC_PDOT, - KC_DOWN -), + // Programmer's Dvorak + [0] = LAYOUT( + KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_ESC, TO(1), DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_NO, TO(2), KC_TAB, KC_SCOLON,KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, DVP_AT, KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_NO, KC_NO, MO(3), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, MO(4), + LCTL(KC_F), KC_LALT, KC_LSHIFT,KC_ESC, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_LEFT, KC_BTN3, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT, + LCTL(KC_C), LCTL(KC_V), KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, KC_P0, KC_PDOT + ), -// Qwerty layer + function -[1] = LAYOUT( - KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_INS, KC_HOME, KC_PGUP, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_END, KC_PGDN, -KC_ESC, TO(0), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, -KC_NO, KC_NO, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_ENTER, KC_P7, KC_P8, KC_P9, KC_PPLS, -KC_NO, KC_NO, MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOT, KC_BSLS, KC_P4, KC_P5, KC_P6, KC_BSPC, -KC_NO, KC_NO, KC_LSHIFT,KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, -KC_NO, KC_LALT,KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_LEFT, KC_WH_D, KC_RIGHT,KC_P0, KC_PDOT, - KC_DOWN -), -// Orirginal Layer -[2] = LAYOUT( - KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_INS, KC_HOME, KC_PGUP, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_END, KC_PGDN, -KC_ESC, TO(1), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, -KC_NO, TO(0), KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_ENTER, KC_P7, KC_P8, KC_P9, KC_PPLS, -KC_NO, KC_NO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOT, KC_BSLS, KC_P4, KC_P5, KC_P6, KC_BSPC, -KC_NO, KC_NO, KC_LSHIFT,KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, -KC_NO, KC_LALT,KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_LEFT, KC_WH_D, KC_RIGHT,KC_P0, KC_PDOT, - KC_DOWN -), + // Qwerty layer + function + [1] = LAYOUT( + KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_ESC, TO(0), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_NO, KC_NO, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_NO, KC_NO, MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOT, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, KC_BSPC, + KC_NO, KC_NO, KC_LSHIFT,KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_NO, KC_LALT,KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, KC_P0, KC_PDOT + ), + + // Orirginal Layer + [2] = LAYOUT( + KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_ESC, TO(1), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_NO, TO(0), KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_NO, KC_NO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOT, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, KC_BSPC, + KC_NO, KC_NO, KC_LSHIFT,KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_NO, KC_LALT,KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, KC_P0, KC_PDOT + ), + + // Function Layer + [3] = 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, + KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, + MU_TOG, KC_NO, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + MU_MOD, KC_NO, KC_TAB, KC_NO, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_NO, KC_NO, KC_PGUP, KC_DEL, KC_NO, KC_NO, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_PPLS, + KC_NO, KC_NO, KC_TRNS, KC_NO, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_SCOLON, KC_QUOT, KC_BSLS, KC_UP, LSFT(KC_E), LSFT(KC_F), KC_NO, KC_BSPC, + KC_NO, KC_LALT, KC_LSHIFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGDN, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT, + KC_NO, KC_NO, KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_CAPS, KC_DOWN, LSFT(KC_A), KC_PDOT + ), + + // Literally just the numpad is different + [4] = LAYOUT( + KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_ESC, TO(1), DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, TO(2), KC_TAB, KC_SCOLON,KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, DVP_AT, KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO, + KC_NO, KC_NO, TO(0), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_BSLS, KC_UP, KC_MS_L, KC_NO, KC_MS_R, KC_TRNS, + LCTL(KC_F), KC_LALT, KC_LSHIFT,KC_NO, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_LEFT, KC_BTN3, KC_RIGHT, KC_GT, KC_MS_D, KC_GT, KC_PENT, + LCTL(KC_C), LCTL(KC_V), KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, KC_BTN1, KC_PDOT + + ), + + /* + [4] = LAYOUT( + KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + MU_TOG, TO(0), KC_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + MU_MOD, KC_NO, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_PPLS, + KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_QUOT, KC_BSLS, KC_UP, LSFT(KC_E), LSFT(KC_F), KC_NO, KC_BSPC, + KC_NO, KC_LALT, KC_LSHIFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT, + KC_NO, KC_LGUI, KC_LCTRL, KC_LALT, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, LSFT(KC_A), KC_PDOT -// Function Layer -[3] = 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, KC_INS, KC_HOME, KC_PGUP, - KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_DEL, KC_END, KC_PGDN, -MU_TOG, KC_NO, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, -MU_MOD, KC_NO, KC_TAB, KC_NO, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_NO, KC_NO, KC_PGUP, KC_DEL, KC_NO, KC_NO, KC_LBRC, KC_RBRC,KC_ENTER, KC_NO, KC_NO, KC_NO, KC_PPLS, -KC_NO, KC_NO, KC_TRNS, KC_NO, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_SCOLON, KC_QUOT, KC_BSLS, LSFT(KC_E), LSFT(KC_F), KC_NO, KC_BSPC, -KC_NO, KC_LALT, KC_LSHIFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGDN, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT, -KC_NO, KC_NO, KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_CAPS, KC_LEFT, KC_WH_D, KC_RIGHT,LSFT(KC_A), KC_PDOT, - KC_DOWN -), -// Literally just the numpad is different -[4] = LAYOUT( - KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_INS, KC_HOME, KC_PGUP, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_END, KC_PGDN, -KC_ESC, TO(1), DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, -KC_NO, TO(2), KC_TAB, KC_SCOLON,KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, DVP_AT, KC_ENTER, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO, -KC_NO, KC_NO, TO(0), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_BSLS, KC_MS_L, KC_NO, KC_MS_R, KC_TRNS, -LCTL(KC_F), KC_LALT, KC_LSHIFT,KC_NO, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, KC_GT, KC_MS_D, KC_GT, KC_PENT, -LCTL(KC_C), LCTL(KC_V), KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_LEFT, KC_BTN3, KC_RIGHT, KC_BTN1, KC_PDOT, - KC_DOWN -), -/* -[4] = LAYOUT( - KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_INS, KC_HOME, KC_PGUP, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_END, KC_PGDN, -MU_TOG, TO(0), KC_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, -MU_MOD, KC_NO, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC,KC_ENTER, KC_NO, KC_NO, KC_NO, KC_PPLS, -KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_QUOT, KC_BSLS, LSFT(KC_E), LSFT(KC_F), KC_NO, KC_BSPC, -KC_NO, KC_LALT, KC_LSHIFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT, -KC_NO, KC_LGUI, KC_LCTRL, KC_LALT, KC_SPC, KC_RALT, KC_RCTRL, KC_LEFT, KC_WH_D, KC_RIGHT, LSFT(KC_A), KC_PDOT, - KC_DOWN -),*/ -/*[0] = LAYOUT( - KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_NO,TO(1),KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, - KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, TO(2),KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, - KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, - KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_BSPC,KC_4,KC_4,KC_4, KC_4, - KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, - KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, - KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, - KC_8, KC_SPC,KC_8,KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, TO(1) - -), -[1] = LAYOUT( - KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, TO(0),KC_NO,KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, - KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, TO(2),KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, - KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, - KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_BSPC,KC_Q,KC_R,KC_S, KC_T, - KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, - KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, - KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, - KC_A, KC_SPC,KC_C,KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, TO(0) -), -[2] = LAYOUT( - KC_LCTRL, KC_LALT, KC_C, KC_RALT, KC_E, KC_F, KC_G, KC_G, KC_H, KC_J, TO(0), TO(1), KC_M, KC_N, KC_QUOT, KC_DOWN, KC_UP, KC_R, KC_S, KC_ENTER, - KC_PPLS, KC_B, KC_C, KC_D, KC_A, KC_S, KC_D, KC_F, KC_J, KC_J, KC_K, KC_NO, KC_K, KC_L, KC_SCOLON, KC_P4, KC_DEL, KC_P5, KC_P6, KC_RIGHT, - KC_PMNS, KC_1, KC_C, KC_D, KC_1, KC_2, KC_3, KC_4, KC_7, KC_J, KC_K, KC_L, KC_8, KC_9, KC_0, KC_NLCK, KC_PGUP,KC_PSLS, KC_PAST, KC_T, - KC_A, KC_ESC, TO(0),KC_D, KC_GRV, KC_F, KC_G, KC_5, KC_6, KC_J, KC_K, KC_L, KC_EQL, KC_N, KC_MINUS, KC_BSPC, KC_INS, KC_HOME, KC_S, KC_T, - KC_PPLS, KC_NO, KC_TAB, KC_D, KC_Q, KC_W, KC_E, KC_R, KC_U, KC_J, KC_K, KC_L, KC_I, KC_O, KC_P, KC_P7, KC_PGDN,KC_P8, KC_P9, KC_T, - KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_T, KC_Y, KC_J, KC_K, KC_L, KC_RBRC, KC_N, KC_LBRC, KC_P, KC_END, KC_R, KC_S, KC_T, - KC_LEFT, KC_P1, KC_CAPS, KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_M, KC_J, KC_K, KC_L, KC_COMMA, KC_DOT, KC_BSLS, KC_PENT, KC_Q, KC_P2, KC_P3, KC_T, - KC_LGUI, KC_SPACE, KC_RCTRL, KC_LSHIFT, KC_E, KC_F, KC_G, KC_B, KC_N, KC_J, KC_K, KC_L, KC_M, KC_N, KC_SLSH, KC_P, KC_Q, KC_P0, KC_PDOT, KC_KP_ENTER ),*/ + /*[0] = LAYOUT( + KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_NO,TO(1),KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, + KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, TO(2),KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, + KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, + KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_BSPC,KC_4,KC_4,KC_4, KC_4, + KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, + KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, + KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, + KC_8, KC_SPC,KC_8,KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, TO(1) + + ), + [1] = LAYOUT( + KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, TO(0),KC_NO,KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, + KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, TO(2),KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, + KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, + KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_BSPC,KC_Q,KC_R,KC_S, KC_T, + KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, + KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, + KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T, + KC_A, KC_SPC,KC_C,KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, TO(0) + ), + [2] = LAYOUT( + KC_LCTRL, KC_LALT, KC_C, KC_RALT, KC_E, KC_F, KC_G, KC_G, KC_H, KC_J, TO(0), TO(1), KC_M, KC_N, KC_QUOT, KC_DOWN, KC_UP, KC_R, KC_S, KC_ENTER, + KC_PPLS, KC_B, KC_C, KC_D, KC_A, KC_S, KC_D, KC_F, KC_J, KC_J, KC_K, KC_NO, KC_K, KC_L, KC_SCOLON, KC_P4, KC_DEL, KC_P5, KC_P6, KC_RIGHT, + KC_PMNS, KC_1, KC_C, KC_D, KC_1, KC_2, KC_3, KC_4, KC_7, KC_J, KC_K, KC_L, KC_8, KC_9, KC_0, KC_NLCK, KC_PGUP,KC_PSLS, KC_PAST, KC_T, + KC_A, KC_ESC, TO(0),KC_D, KC_GRV, KC_F, KC_G, KC_5, KC_6, KC_J, KC_K, KC_L, KC_EQL, KC_N, KC_MINUS, KC_BSPC, KC_INS, KC_HOME, KC_S, KC_T, + KC_PPLS, KC_NO, KC_TAB, KC_D, KC_Q, KC_W, KC_E, KC_R, KC_U, KC_J, KC_K, KC_L, KC_I, KC_O, KC_P, KC_P7, KC_PGDN,KC_P8, KC_P9, KC_T, + KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_T, KC_Y, KC_J, KC_K, KC_L, KC_RBRC, KC_N, KC_LBRC, KC_P, KC_END, KC_R, KC_S, KC_T, + KC_LEFT, KC_P1, KC_CAPS, KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_M, KC_J, KC_K, KC_L, KC_COMMA, KC_DOT, KC_BSLS, KC_PENT, KC_Q, KC_P2, KC_P3, KC_T, + KC_LGUI, KC_SPACE, KC_RCTRL, KC_LSHIFT, KC_E, KC_F, KC_G, KC_B, KC_N, KC_J, KC_K, KC_L, KC_M, KC_N, KC_SLSH, KC_P, KC_Q, KC_P0, KC_PDOT, KC_KP_ENTER + ),*/ }; const uint16_t PROGMEM fn_actions[] = { @@ -166,7 +165,7 @@ void matrix_scan_user(void) { } -bool left_shift_down = false; +bool left_shift_down = false; bool right_shift_down = false; bool process_record_user(uint16_t keycode, keyrecord_t *record) { @@ -196,11 +195,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } break; - - + + case DVP_ESC: if (left_shift_down || right_shift_down) - { + { if(record->event.pressed) SEND_STRING("~"); return false; @@ -214,7 +213,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case DVP_AMPR: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -228,10 +227,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("&"); return false; } - break; - + break; + case DVP_LBRACKET: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -256,13 +255,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("["); return false; } - break; - + break; + case DVP_LCBR: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) - { + { if(left_shift_down) unregister_code(KC_LSHIFT); if(right_shift_down) @@ -270,7 +269,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_5); unregister_code(KC_5); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -284,10 +283,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("{"); return false; } - break; - + break; + case DVP_RCBR: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -298,7 +297,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_3); unregister_code(KC_3); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -312,11 +311,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("}"); return false; } - break; + break; case DVP_LPRN: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -327,7 +326,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_1); unregister_code(KC_1); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -341,10 +340,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("("); return false; } - break; -// + break; +// case DVP_AT: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -357,7 +356,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_6); unregister_code(KC_6); unregister_code(KC_LSHIFT); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -371,11 +370,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("@"); return false; } - break; + break; + - case DVP_EQUAL: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -386,7 +385,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_9); unregister_code(KC_9); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -400,10 +399,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("="); return false; } - break; - + break; + case DVP_ASTERISK: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -414,7 +413,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_0); unregister_code(KC_0); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -428,10 +427,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("*"); return false; } - break; - + break; + case DVP_RPRN: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -442,7 +441,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_2); unregister_code(KC_2); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -456,10 +455,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING(")"); return false; } - break; + break; case DVP_PLUS: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -470,7 +469,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_4); unregister_code(KC_4); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -483,10 +482,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("+"); } return false; - break; - + break; + case DVP_RBRACKET: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -497,7 +496,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_6); unregister_code(KC_6); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -510,10 +509,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("]"); } return false; - break; - + break; + case DVP_EXLM: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -524,7 +523,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_8); unregister_code(KC_8); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -537,10 +536,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("!"); } return false; - break; - + break; + case DVP_HASH: - if (left_shift_down || right_shift_down) + if (left_shift_down || right_shift_down) { if(record->event.pressed) { @@ -551,7 +550,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_GRAVE); unregister_code(KC_GRAVE); - + if(left_shift_down) register_code(KC_LSHIFT); if(right_shift_down) @@ -564,7 +563,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("#"); } return false; - break; + break; case SHFT_DOT: if(record->event.pressed) SEND_STRING(">"); @@ -575,10 +574,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("<"); break; - } - - - + } + + + return true; } From 5368235f223d0537c7456cd8d36d5430f4b58312 Mon Sep 17 00:00:00 2001 From: takashiski Date: Thu, 4 Oct 2018 00:34:43 +0900 Subject: [PATCH 113/269] Keyboard: Add namecard keyboard (#4044) * create namecard2x4 * create default keymaps * Update README * fixed typo and func remove dont need. * update infomation on readme * update missed point * remove explicit initialize * update default keymap's readme * add my name to copyright * change keymap style to LAYOUT macro and fixed typo LAYOUT macro --- keyboards/namecard2x4/config.h | 223 ++++++++++++++++++ keyboards/namecard2x4/info.json | 0 .../namecard2x4/keymaps/default/config.h | 19 ++ .../namecard2x4/keymaps/default/keymap.c | 60 +++++ .../namecard2x4/keymaps/default/readme.md | 9 + keyboards/namecard2x4/namecard2x4.c | 43 ++++ keyboards/namecard2x4/namecard2x4.h | 33 +++ keyboards/namecard2x4/readme.md | 24 ++ keyboards/namecard2x4/rules.mk | 81 +++++++ 9 files changed, 492 insertions(+) create mode 100644 keyboards/namecard2x4/config.h create mode 100644 keyboards/namecard2x4/info.json create mode 100644 keyboards/namecard2x4/keymaps/default/config.h create mode 100644 keyboards/namecard2x4/keymaps/default/keymap.c create mode 100644 keyboards/namecard2x4/keymaps/default/readme.md create mode 100644 keyboards/namecard2x4/namecard2x4.c create mode 100644 keyboards/namecard2x4/namecard2x4.h create mode 100644 keyboards/namecard2x4/readme.md create mode 100644 keyboards/namecard2x4/rules.mk diff --git a/keyboards/namecard2x4/config.h b/keyboards/namecard2x4/config.h new file mode 100644 index 0000000000..d0c26193c4 --- /dev/null +++ b/keyboards/namecard2x4/config.h @@ -0,0 +1,223 @@ +/* +Copyright 2018 takashiski + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER takashiski +#define PRODUCT namecard2x4 +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 2 +#define MATRIX_COLS 4 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B4,B5 } +#define MATRIX_COL_PINS { E6,D7,C6,D4 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define RGB_DI_PIN F4 +#define RGBLED_NUM 4 +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 10 +#define RGBLIGHT_VAL_STEP 10 + +//#define BACKLIGHT_PIN F4 +//#define BACKLIGHT_BREATHING +//#define BACKLIGHT_LEVELS 1 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + diff --git a/keyboards/namecard2x4/info.json b/keyboards/namecard2x4/info.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/namecard2x4/keymaps/default/config.h b/keyboards/namecard2x4/keymaps/default/config.h new file mode 100644 index 0000000000..dbacdcce58 --- /dev/null +++ b/keyboards/namecard2x4/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 takashiski + * + * 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 + +// place overrides here diff --git a/keyboards/namecard2x4/keymaps/default/keymap.c b/keyboards/namecard2x4/keymaps/default/keymap.c new file mode 100644 index 0000000000..1a0a727fc0 --- /dev/null +++ b/keyboards/namecard2x4/keymaps/default/keymap.c @@ -0,0 +1,60 @@ +/* Copyright 2018 takashiski + * + * 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 + +enum Layer +{ + DF, + LW, + RS +}; + + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[DF] = LAYOUT( + KC_1,KC_2,KC_3,LT(LW,KC_4), + KC_5,KC_6,KC_7,LT(RS,KC_8) + ), +[LW]= LAYOUT( + + RGB_VAD,RGB_VAI,RGB_HUI,RGB_HUD, + KC_TRNS,RGB_MOD,RGB_RMOD,KC_TRNS + ), +[RS]= LAYOUT( + + KC_MYCM,KC_MAIL,KC_VOLU,KC_MUTE, + KC_WSCH,KC_CALC,KC_VOLD,KC_TRNS + ) + +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/namecard2x4/keymaps/default/readme.md b/keyboards/namecard2x4/keymaps/default/readme.md new file mode 100644 index 0000000000..83601c9cf5 --- /dev/null +++ b/keyboards/namecard2x4/keymaps/default/readme.md @@ -0,0 +1,9 @@ +# The default keymap for namecard2x4 + +this is test keymap. + +| 1 | 2 | 3 | 4 | +| 5 | 6 | 7 | 8 | + +if hold 4, change to Backlight settings Layer. +if hold 8, change to Windows action Layer(Open my computer, Open calculater and others). diff --git a/keyboards/namecard2x4/namecard2x4.c b/keyboards/namecard2x4/namecard2x4.c new file mode 100644 index 0000000000..349923daf8 --- /dev/null +++ b/keyboards/namecard2x4/namecard2x4.c @@ -0,0 +1,43 @@ +/* Copyright 2018 takashiski + * + * 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 "namecard2x4.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/namecard2x4/namecard2x4.h b/keyboards/namecard2x4/namecard2x4.h new file mode 100644 index 0000000000..f2e27a0102 --- /dev/null +++ b/keyboards/namecard2x4/namecard2x4.h @@ -0,0 +1,33 @@ +/* Copyright 2018 takashiski + * + * 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 . + */ +#ifndef NAMECARD2X4_H +#define NAMECARD2X4_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define LAYOUT( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13 \ +) { \ + { k00, k01, k02, k03 }, \ + { k10, k11, k12, k13 }, \ +} + +#endif diff --git a/keyboards/namecard2x4/readme.md b/keyboards/namecard2x4/readme.md new file mode 100644 index 0000000000..ec98bc6736 --- /dev/null +++ b/keyboards/namecard2x4/readme.md @@ -0,0 +1,24 @@ +# namecard2x4 + +日本式名刺サイズのキーボードです(55x91mm)。 +Kailh PCB SocketとWS2812/SK6812に対応しています。 + +This keyboard is Japanese namecard size(55x91mm) keyboard. + +namecard2x4 has 8 switch and kailh PCB socket. + +![namecard2x4](https://i.imgur.com/Bi9SV9A.jpg) + +![namecard2x4 with case](https://i.imgur.com/yTv1vSz.jpg) + + + +Keyboard Maintainer: [takashiski](https://github.com/takashiski) + + +Make example for this keyboard (after setting up your build environment): + + make namecard2x4:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + diff --git a/keyboards/namecard2x4/rules.mk b/keyboards/namecard2x4/rules.mk new file mode 100644 index 0000000000..51d2cbcb2e --- /dev/null +++ b/keyboards/namecard2x4/rules.mk @@ -0,0 +1,81 @@ +# MCU name +#MCU = at90usb1286 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) + +#UNICODEMAP_ENABLE = yes # for emoji user +#RGBLIGHT_ENABLE = yes # uncomment if you want addressable led strips From e58ea882e40eff146b9cebf9e1c99e89f25260ac Mon Sep 17 00:00:00 2001 From: Jumail Mundekkat Date: Thu, 4 Oct 2018 01:36:40 +1000 Subject: [PATCH 114/269] Keyboard: Added split backspace layout for the b.mini (#4051) --- keyboards/bmini/bmini.h | 18 ++++++++++++++++++ keyboards/bmini/info.json | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/keyboards/bmini/bmini.h b/keyboards/bmini/bmini.h index 9a70f92046..7bdf66fd25 100644 --- a/keyboards/bmini/bmini.h +++ b/keyboards/bmini/bmini.h @@ -38,6 +38,24 @@ along with this program. If not, see . { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \ } +#define LAYOUT_splitbs( \ + K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \ + K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD4, KD0, \ + K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, \ + K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, KE0, \ + K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, \ + K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96 \ +){ \ + { K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KD0, KE0 }, \ + { K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \ + { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC_NO, KD2, KE2 }, \ + { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \ + { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KD4, KE4 }, \ + { K05, KC_NO, K25, K35, K45, K55, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KC5, KD5, KE5 }, \ + { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \ + { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \ +} + #define LAYOUT_kc( \ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \ diff --git a/keyboards/bmini/info.json b/keyboards/bmini/info.json index a047a3ef58..ab4d01c023 100644 --- a/keyboards/bmini/info.json +++ b/keyboards/bmini/info.json @@ -8,6 +8,10 @@ "LAYOUT": { "key_count": 84, "layout": [{"label":"K05", "x":0, "y":0}, {"label":"K25", "x":1, "y":0}, {"label":"K35", "x":2, "y":0}, {"label":"K45", "x":3, "y":0}, {"label":"K55", "x":4, "y":0}, {"label":"K06", "x":5, "y":0}, {"label":"KA6", "x":6, "y":0}, {"label":"KA7", "x":7, "y":0}, {"label":"K07", "x":8, "y":0}, {"label":"KB5", "x":9, "y":0}, {"label":"KC5", "x":10, "y":0}, {"label":"KD5", "x":11, "y":0}, {"label":"KE5", "x":12, "y":0}, {"label":"KD1", "x":13, "y":0}, {"label":"KE1", "x":14, "y":0}, {"label":"KE2", "x":15, "y":0}, {"label":"K04", "x":0, "y":1}, {"label":"K14", "x":1, "y":1}, {"label":"K24", "x":2, "y":1}, {"label":"K34", "x":3, "y":1}, {"label":"K44", "x":4, "y":1}, {"label":"K54", "x":5, "y":1}, {"label":"K16", "x":6, "y":1}, {"label":"KB6", "x":7, "y":1}, {"label":"KB7", "x":8, "y":1}, {"label":"K17", "x":9, "y":1}, {"label":"KA4", "x":10, "y":1}, {"label":"KB4", "x":11, "y":1}, {"label":"KC4", "x":12, "y":1}, {"label":"KE4", "x":13, "y":1, "w":2}, {"label":"KD0", "x":15, "y":1}, {"label":"K03", "x":0, "y":2, "w":1.5}, {"label":"K13", "x":1.5, "y":2}, {"label":"K23", "x":2.5, "y":2}, {"label":"K33", "x":3.5, "y":2}, {"label":"K43", "x":4.5, "y":2}, {"label":"K53", "x":5.5, "y":2}, {"label":"K26", "x":6.5, "y":2}, {"label":"KC6", "x":7.5, "y":2}, {"label":"KC7", "x":8.5, "y":2}, {"label":"K27", "x":9.5, "y":2}, {"label":"KA3", "x":10.5, "y":2}, {"label":"KB3", "x":11.5, "y":2}, {"label":"KC3", "x":12.5, "y":2}, {"label":"KD3", "x":13.5, "y":2, "w":1.5}, {"label":"K67", "x":15, "y":2}, {"label":"K02", "x":0, "y":3, "w":1.75}, {"label":"K12", "x":1.75, "y":3}, {"label":"K22", "x":2.75, "y":3}, {"label":"K32", "x":3.75, "y":3}, {"label":"K42", "x":4.75, "y":3}, {"label":"K52", "x":5.75, "y":3}, {"label":"K36", "x":6.75, "y":3}, {"label":"KD6", "x":7.75, "y":3}, {"label":"KD7", "x":8.75, "y":3}, {"label":"K37", "x":9.75, "y":3}, {"label":"KA2", "x":10.75, "y":3}, {"label":"KB2", "x":11.75, "y":3}, {"label":"KD2", "x":12.75, "y":3, "w":2.25}, {"label":"KE0", "x":15, "y":3}, {"label":"K01", "x":0, "y":4, "w":2.25}, {"label":"K11", "x":2.25, "y":4}, {"label":"K21", "x":3.25, "y":4}, {"label":"K31", "x":4.25, "y":4}, {"label":"K41", "x":5.25, "y":4}, {"label":"K51", "x":6.25, "y":4}, {"label":"K46", "x":7.25, "y":4}, {"label":"KE6", "x":8.25, "y":4}, {"label":"KE7", "x":9.25, "y":4}, {"label":"K47", "x":10.25, "y":4}, {"label":"KA1", "x":11.25, "y":4}, {"label":"KB1", "x":12.25, "y":4, "w":1.75}, {"label":"K86", "x":14, "y":4}, {"label":"K77", "x":15, "y":4}, {"label":"K00", "x":0, "y":5, "w":1.25}, {"label":"K10", "x":1.25, "y":5, "w":1.25}, {"label":"K20", "x":2.5, "y":5, "w":1.25}, {"label":"K56", "x":3.75, "y":5, "w":6.25}, {"label":"K57", "x":10, "y":5}, {"label":"KB0", "x":11, "y":5}, {"label":"KC0", "x":12, "y":5}, {"label":"K66", "x":13, "y":5}, {"label":"K76", "x":14, "y":5}, {"label":"K96", "x":15, "y":5}] + }, + "LAYOUT_splitbs": { + "key_count": 85, + "layout": [{"label":"K05", "x":0, "y":0}, {"label":"K25", "x":1, "y":0}, {"label":"K35", "x":2, "y":0}, {"label":"K45", "x":3, "y":0}, {"label":"K55", "x":4, "y":0}, {"label":"K06", "x":5, "y":0}, {"label":"KA6", "x":6, "y":0}, {"label":"KA7", "x":7, "y":0}, {"label":"K07", "x":8, "y":0}, {"label":"KB5", "x":9, "y":0}, {"label":"KC5", "x":10, "y":0}, {"label":"KD5", "x":11, "y":0}, {"label":"KE5", "x":12, "y":0}, {"label":"KD1", "x":13, "y":0}, {"label":"KE1", "x":14, "y":0}, {"label":"KE2", "x":15, "y":0}, {"label":"K04", "x":0, "y":1}, {"label":"K14", "x":1, "y":1}, {"label":"K24", "x":2, "y":1}, {"label":"K34", "x":3, "y":1}, {"label":"K44", "x":4, "y":1}, {"label":"K54", "x":5, "y":1}, {"label":"K16", "x":6, "y":1}, {"label":"KB6", "x":7, "y":1}, {"label":"KB7", "x":8, "y":1}, {"label":"K17", "x":9, "y":1}, {"label":"KA4", "x":10, "y":1}, {"label":"KB4", "x":11, "y":1}, {"label":"KC4", "x":12, "y":1}, {"label":"KE4", "x":13, "y":1}, {"label":"KD4", "x":14, "y":1}, {"label":"KD0", "x":15, "y":1}, {"label":"K03", "x":0, "y":2, "w":1.5}, {"label":"K13", "x":1.5, "y":2}, {"label":"K23", "x":2.5, "y":2}, {"label":"K33", "x":3.5, "y":2}, {"label":"K43", "x":4.5, "y":2}, {"label":"K53", "x":5.5, "y":2}, {"label":"K26", "x":6.5, "y":2}, {"label":"KC6", "x":7.5, "y":2}, {"label":"KC7", "x":8.5, "y":2}, {"label":"K27", "x":9.5, "y":2}, {"label":"KA3", "x":10.5, "y":2}, {"label":"KB3", "x":11.5, "y":2}, {"label":"KC3", "x":12.5, "y":2}, {"label":"KD3", "x":13.5, "y":2, "w":1.5}, {"label":"K67", "x":15, "y":2}, {"label":"K02", "x":0, "y":3, "w":1.75}, {"label":"K12", "x":1.75, "y":3}, {"label":"K22", "x":2.75, "y":3}, {"label":"K32", "x":3.75, "y":3}, {"label":"K42", "x":4.75, "y":3}, {"label":"K52", "x":5.75, "y":3}, {"label":"K36", "x":6.75, "y":3}, {"label":"KD6", "x":7.75, "y":3}, {"label":"KD7", "x":8.75, "y":3}, {"label":"K37", "x":9.75, "y":3}, {"label":"KA2", "x":10.75, "y":3}, {"label":"KB2", "x":11.75, "y":3}, {"label":"KD2", "x":12.75, "y":3, "w":2.25}, {"label":"KE0", "x":15, "y":3}, {"label":"K01", "x":0, "y":4, "w":2.25}, {"label":"K11", "x":2.25, "y":4}, {"label":"K21", "x":3.25, "y":4}, {"label":"K31", "x":4.25, "y":4}, {"label":"K41", "x":5.25, "y":4}, {"label":"K51", "x":6.25, "y":4}, {"label":"K46", "x":7.25, "y":4}, {"label":"KE6", "x":8.25, "y":4}, {"label":"KE7", "x":9.25, "y":4}, {"label":"K47", "x":10.25, "y":4}, {"label":"KA1", "x":11.25, "y":4}, {"label":"KB1", "x":12.25, "y":4, "w":1.75}, {"label":"K86", "x":14, "y":4}, {"label":"K77", "x":15, "y":4}, {"label":"K00", "x":0, "y":5, "w":1.25}, {"label":"K10", "x":1.25, "y":5, "w":1.25}, {"label":"K20", "x":2.5, "y":5, "w":1.25}, {"label":"K56", "x":3.75, "y":5, "w":6.25}, {"label":"K57", "x":10, "y":5}, {"label":"KB0", "x":11, "y":5}, {"label":"KC0", "x":12, "y":5}, {"label":"K66", "x":13, "y":5}, {"label":"K76", "x":14, "y":5}, {"label":"K96", "x":15, "y":5}] } } } From f01133d08918b3d1dd7b349309b02ffd37273f5c Mon Sep 17 00:00:00 2001 From: Filip Sund Date: Wed, 3 Oct 2018 19:12:27 +0200 Subject: [PATCH 115/269] Keyboard: Add handwired/pteron config and keymaps (#4060) * Added pteron files made via from kbfirmware.com. * Added readme. * Made some progress on Pteron keymap. * More keymap. * Updated bootloader, added some keymap illustrations. * Moved default keymap to FSund, made default keymap from default preonic keymap. * Fixed typo in default pteron keymap. * Made changes recommended by drashna. --- keyboards/handwired/pteron/config.h | 34 +++++ .../handwired/pteron/keymaps/FSund/keymap.c | 118 ++++++++++++++++++ .../handwired/pteron/keymaps/default/keymap.c | 104 +++++++++++++++ keyboards/handwired/pteron/pteron.c | 1 + keyboards/handwired/pteron/pteron.h | 17 +++ keyboards/handwired/pteron/readme.md | 15 +++ keyboards/handwired/pteron/rules.mk | 58 +++++++++ 7 files changed, 347 insertions(+) create mode 100644 keyboards/handwired/pteron/config.h create mode 100644 keyboards/handwired/pteron/keymaps/FSund/keymap.c create mode 100644 keyboards/handwired/pteron/keymaps/default/keymap.c create mode 100644 keyboards/handwired/pteron/pteron.c create mode 100644 keyboards/handwired/pteron/pteron.h create mode 100644 keyboards/handwired/pteron/readme.md create mode 100644 keyboards/handwired/pteron/rules.mk diff --git a/keyboards/handwired/pteron/config.h b/keyboards/handwired/pteron/config.h new file mode 100644 index 0000000000..9650839e30 --- /dev/null +++ b/keyboards/handwired/pteron/config.h @@ -0,0 +1,34 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER QMK Community +#define PRODUCT Pteron Keyboard +#define DESCRIPTION Pteron Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 12 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { D7, E6, B4, B5, B6 } +#define MATRIX_COL_PINS { F4, F6, F5, F7, B1, B3, C6, D4, D0, D1, D2, D3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 // 5 is default + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* prevent stuck modifiers */ +#define PREVENT_STUCK_MODIFIERS diff --git a/keyboards/handwired/pteron/keymaps/FSund/keymap.c b/keyboards/handwired/pteron/keymaps/FSund/keymap.c new file mode 100644 index 0000000000..f34beae063 --- /dev/null +++ b/keyboards/handwired/pteron/keymaps/FSund/keymap.c @@ -0,0 +1,118 @@ +#include QMK_KEYBOARD_H + +enum pteron_layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST +}; + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +// use S() to produce shifted versions of keys +// #define S(kc) LSFT(kc) // defined by default + +// alt gr +#define G(kc) RALT(kc) + +// custom keycodes +// use F_ prefix to avoid problems + +// NB! I use Norwegian keyboard layout on my machines, so the keymap probably +// doesn't make much sense for US/ANSI users + +#define F_FSLH S(KC_7) // forward slash +#define F_BSLH KC_EQL // backward slash +#define F_EQL S(KC_0) // equals sign +#define F_APOS KC_BSLS // ' +#define F_TIMES S(KC_BSLS) // * +#define F_PLUS KC_MINS // + +#define F_QUEST S(KC_MINS) // ? +#define F_HAT S(KC_RBRC) // ^ +#define F_TILD G(KC_RBRC) // ~ +#define F_UML KC_RBRC // ¨ (umlaut) +#define F_SECT S(KC_GRV) // section sign ("law sign") (shifted key below esc) +#define F_GRAVE S(KC_EQL) +#define F_ACUTE G(KC_EQL) + +#define KC_AA KC_LBRC +#define KC_OE KC_SCLN +#define KC_AE KC_QUOT + +// brackets +#define F_SBRL G(KC_8) // square bracket left +#define F_SBRR G(KC_9) // square bracket right +#define F_CBRL G(KC_7) // curly bracket left +#define F_CBRR G(KC_0) // curly bracket right +#define F_RBRL S(KC_8) // round bracket left +#define F_RBRR S(KC_9) // round bracket right +#define F_ABRL KC_NUBS // angle bracket left +#define F_ABRR S(KC_NUBS) // angle bracket right + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * +-----------------------------------------+ +-----------------------------------------+ + * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Å | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | A | S | D | F | G | | H | J | K | L | Ø | Æ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | Z | X | C | V | B | | N | M | , | . | - | Shft | + * +---------------------------+------+------+-------------+ +-------------+------+------+---------------------------+ + * | LOWR | Spc | Alt | Win | | Win | Alt | Spc | RISE | + * +---------------------------+ +---------------------------+ + */ + +[_QWERTY] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_AA, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_OE, KC_AE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT, + LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_ENT, RAISE + ), + +/* LOWER + * +-----------------------------------------+ +-----------------------------------------+ + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | \ | / | [ | ] | = | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F1 | F2 | F3 | F4 | F5 | | < | > | ( | ) | * | ~ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F6 | F7 | F8 | F9 | F10 | | F11 | F12 | { | } | + | | + * +---------------------------+------+------+-------------+ +-------------+------+------+---------------------------+ + * | | | | | | | | | | + * +---------------------------+ +---------------------------+ + */ + +[_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, F_BSLH, F_FSLH, F_SBRL, F_SBRR, F_EQL, KC_DEL, + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, F_ABRL, F_ABRR, F_RBRL, F_RBRR, F_TIMES, F_TILD, + _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, F_CBRL, F_CBRR, F_PLUS, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + +[_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_AA, + F_SECT, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), F_QUEST, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, F_APOS, + _______, S(KC_6), G(KC_2), G(KC_3), G(KC_4), G(KC_5), F_HAT, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + +[_ADJUST] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, F_UML, F_GRAVE, F_ACUTE, _______, RESET, _______, _______, _______, _______, KC_PSCR, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +uint32_t layer_state_set_user(uint32_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} diff --git a/keyboards/handwired/pteron/keymaps/default/keymap.c b/keyboards/handwired/pteron/keymaps/default/keymap.c new file mode 100644 index 0000000000..3079cc7afd --- /dev/null +++ b/keyboards/handwired/pteron/keymaps/default/keymap.c @@ -0,0 +1,104 @@ +#include QMK_KEYBOARD_H + +enum pteron_layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST +}; + + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * +-----------------------------------------+ +-----------------------------------------+ + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | + * +-------------+------+------+------+------| |------+------+------+------+-------------+ + * |Lower | SPC | Alt | GUI | | Alt | GUI | SPC |Raise | + * +---------------------------+ +---------------------------+ + */ +[_QWERTY] = LAYOUT( \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ + LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_RALT, KC_RGUI, KC_SPC, RAISE \ +), + +/* Lower + * +-----------------------------------------+ +-----------------------------------------+ + * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO ~ |ISO | | | | | + * +-------------+------+------+------+------| |------+------+------+------+-------------+ + * | | | | | | Next | Vol- | Vol+ | Play | + * +---------------------------+ +---------------------------+ + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \ + _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * +-----------------------------------------+ +-----------------------------------------+ + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO # |ISO / | | | | + * +-------------+------+------+------+------| |------+------+------+------+-------------+ + * | | | | | | Next | Vol- | Vol+ | Play | + * +---------------------------+ +---------------------------+ + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \ + _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * +-----------------------------------------+ +-----------------------------------------+ + * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | Reset| | | | | | | | | | | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | |Aud on|AudOff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|MusOff|MidiOn| |MidOff| | | | | | + * +-------------+------+------+------+------| |------+------+------+------+-------------+ + * | | | | | | | | | | + * +---------------------------+ +---------------------------+ + */ +[_ADJUST] = 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, \ + _______, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______ \ +) + +}; + +uint32_t layer_state_set_user(uint32_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} diff --git a/keyboards/handwired/pteron/pteron.c b/keyboards/handwired/pteron/pteron.c new file mode 100644 index 0000000000..972b45aa20 --- /dev/null +++ b/keyboards/handwired/pteron/pteron.c @@ -0,0 +1 @@ +#include "pteron.h" diff --git a/keyboards/handwired/pteron/pteron.h b/keyboards/handwired/pteron/pteron.h new file mode 100644 index 0000000000..f29c2619af --- /dev/null +++ b/keyboards/handwired/pteron/pteron.h @@ -0,0 +1,17 @@ +#pragma once + +#include "quantum.h" + +#define LAYOUT( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, \ + K402, K403, K404, K405, K406, K407, K408, K409 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 }, \ + { KC_NO, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, KC_NO, KC_NO } \ +} diff --git a/keyboards/handwired/pteron/readme.md b/keyboards/handwired/pteron/readme.md new file mode 100644 index 0000000000..a66d41edbb --- /dev/null +++ b/keyboards/handwired/pteron/readme.md @@ -0,0 +1,15 @@ +# Pteron + +![Pteron](https://i.imgur.com/9QhPlVD.jpg) + +An ergonomic keyboard heavily inspired by the [Atreus](https://github.com/technomancy/atreus), [Iris](https://github.com/keebio/iris-case) and [Atreis](https://github.com/dekonnection/atreis) keyboards. More info and files for laser cutting plates and case are in the [Pteron repository](https://github.com/FSund/pteron-keyboard). + +Keyboard Maintainer: [Filip Sund](https://github.com/FSund) +Hardware Supported: Pro Micro +Hardware Availability: Handwired, no PCB's available (for now) + +Make example for this keyboard (after setting up your build environment): + + make handwired/pteron:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/handwired/pteron/rules.mk b/keyboards/handwired/pteron/rules.mk new file mode 100644 index 0000000000..10218020e6 --- /dev/null +++ b/keyboards/handwired/pteron/rules.mk @@ -0,0 +1,58 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = caterina + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no +UNICODE_ENABLE = no +UNICODEMAP_ENABLE = no \ No newline at end of file From d55468c18d666870cfe095d32153e5e503e50649 Mon Sep 17 00:00:00 2001 From: Filip Sund Date: Wed, 3 Oct 2018 21:04:01 +0200 Subject: [PATCH 116/269] Keyboard: Added dactyl-manuform 4x6 and keymap. (#4058) * Added dactyl-manuform 4x6 and keymap. * Did changes recommended by drashna. --- .../4x5/keymaps/default/config.h | 5 +- .../4x5/keymaps/dvorak/config.h | 5 +- keyboards/handwired/dactyl_manuform/4x6/4x6.c | 14 +++ keyboards/handwired/dactyl_manuform/4x6/4x6.h | 36 ++++++++ .../handwired/dactyl_manuform/4x6/config.h | 40 +++++++++ .../4x6/keymaps/default/config.h | 31 +++++++ .../4x6/keymaps/default/keymap.c | 87 +++++++++++++++++++ .../handwired/dactyl_manuform/4x6/rules.mk | 21 +++++ .../dactyl_manuform/dactyl_manuform.h | 10 ++- 9 files changed, 237 insertions(+), 12 deletions(-) create mode 100644 keyboards/handwired/dactyl_manuform/4x6/4x6.c create mode 100644 keyboards/handwired/dactyl_manuform/4x6/4x6.h create mode 100644 keyboards/handwired/dactyl_manuform/4x6/config.h create mode 100644 keyboards/handwired/dactyl_manuform/4x6/keymaps/default/config.h create mode 100644 keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c create mode 100644 keyboards/handwired/dactyl_manuform/4x6/rules.mk diff --git a/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h index 216917ed71..682c7a868b 100644 --- a/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h +++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h @@ -18,8 +18,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once #include "../../config.h" @@ -33,5 +32,3 @@ along with this program. If not, see . // #define MASTER_LEFT // #define MASTER_RIGHT #define EE_HANDS - -#endif diff --git a/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/config.h b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/config.h index 216917ed71..682c7a868b 100644 --- a/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/config.h +++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/config.h @@ -18,8 +18,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once #include "../../config.h" @@ -33,5 +32,3 @@ along with this program. If not, see . // #define MASTER_LEFT // #define MASTER_RIGHT #define EE_HANDS - -#endif diff --git a/keyboards/handwired/dactyl_manuform/4x6/4x6.c b/keyboards/handwired/dactyl_manuform/4x6/4x6.c new file mode 100644 index 0000000000..1d305c8541 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/4x6/4x6.c @@ -0,0 +1,14 @@ +#include "4x6.h" + + +#ifdef SSD1306OLED +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + led_set_user(usb_led); +} +#endif + +void matrix_init_kb(void) { + matrix_init_user(); +}; + diff --git a/keyboards/handwired/dactyl_manuform/4x6/4x6.h b/keyboards/handwired/dactyl_manuform/4x6/4x6.h new file mode 100644 index 0000000000..25741be57b --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/4x6/4x6.h @@ -0,0 +1,36 @@ +#pragma once + +#include "dactyl_manuform.h" +#include "quantum.h" + +#ifdef USE_I2C +#include +#ifdef __AVR__ + #include + #include +#endif +#endif + +#define LAYOUT(\ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L32, L33, R32, R33, \ + L34, L35, R30, R31, \ + L44, L45, R40, R41, \ + L42, L43, R42, R43 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { KC_NO, KC_NO, L32, L33, L34, L35 }, \ + { KC_NO, KC_NO, L42, L43, L44, L45 }, \ +\ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, KC_NO, KC_NO }, \ + { R40, R41, R42, R43, KC_NO, KC_NO } \ +\ + } diff --git a/keyboards/handwired/dactyl_manuform/4x6/config.h b/keyboards/handwired/dactyl_manuform/4x6/config.h new file mode 100644 index 0000000000..d4a1922876 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/4x6/config.h @@ -0,0 +1,40 @@ +/* +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER tshort +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 10 +#define MATRIX_COLS 6 + +// row-driven +#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 } +#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW diff --git a/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/config.h new file mode 100644 index 0000000000..1fc2c617f6 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/config.h @@ -0,0 +1,31 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 + +/* Use I2C or Serial, not both */ +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS diff --git a/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c new file mode 100644 index 0000000000..ad23beef5c --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c @@ -0,0 +1,87 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +#define _BASE 0 +#define _RAISE 1 +#define _LOWER 2 + +// Fillers to make layering more clear + +#define ____ KC_TRNS + +#define SFT_ESC SFT_T(KC_ESC) +#define CTL_BSPC CTL_T(KC_BSPC) +#define ALT_SPC ALT_T(KC_SPC) +#define SFT_ENT SFT_T(KC_ENT) + +#define KC_ML KC_MS_LEFT +#define KC_MR KC_MS_RIGHT +#define KC_MU KC_MS_UP +#define KC_MD KC_MS_DOWN +#define KC_MB1 KC_MS_BTN1 +#define KC_MB2 KC_MS_BTN1 + +#define RAISE MO(_RAISE) +#define LOWER MO(_LOWER) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Base (qwerty) + * +-----------------------------------------+ +-----------------------------------------+ + * | ESC | q | w | e | r | t | | y | u | i | o | p | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | TAB | a | s | d | f | g | | h | j | k | l | ; | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | SHFT | z | x | c | v | b | | n | m | , | . | / | | + * +------+------+------+------+-------------+ +-------------+------+------+------+------+ + * | [ | ] | | | | + * +-------------+-------------+ +-------------+-------------+ + * | | | | | | + * |------+------| |------+------| + * | | | | | | + * +-------------+ +-------------+ + * +-------------+ +-------------+ + * | | | | | | + * |------+------| |------+------| + * | | | | | | + * +-------------+ +-------------+ + */ + +[_BASE] = LAYOUT( \ + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_BSLASH, \ + KC_LBRC,KC_RBRC, KC_PLUS,KC_EQL, \ + RAISE, KC_SPC, KC_ENT, LOWER, \ + KC_TAB, KC_HOME, KC_END, KC_DEL, \ + KC_BSPC,KC_GRV, KC_LGUI,KC_LALT \ +), + +[_LOWER] = LAYOUT( + _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, RESET, KC_PLUS, \ + _______,KC_HOME,KC_PGUP,KC_PGDN,KC_END ,KC_LPRN, KC_RPRN, KC_P4, KC_P5, KC_P6, KC_MINS,KC_PIPE, \ + _______,_______,_______,_______,_______,_______, _______, KC_P1, KC_P2, KC_P3, KC_EQL, KC_UNDS, \ + _______,KC_PSCR, _______, KC_P0, \ + _______,_______, _______,_______, \ + _______,_______, _______,_______, \ + _______,_______, _______,_______ \ +), + +[_RAISE] = LAYOUT( + _______,RESET, _______,_______,_______,KC_LBRC, KC_RBRC,_______,KC_NLCK,KC_INS, KC_SLCK,KC_MUTE, \ + _______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU, \ + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_VOLD, \ + _______,_______, KC_EQL, _______, \ + _______,_______, _______,_______, \ + _______,_______, _______,_______, \ + _______,_______, _______,_______ \ +) +}; + + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + diff --git a/keyboards/handwired/dactyl_manuform/4x6/rules.mk b/keyboards/handwired/dactyl_manuform/4x6/rules.mk new file mode 100644 index 0000000000..14b6e1e4e3 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/4x6/rules.mk @@ -0,0 +1,21 @@ + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + diff --git a/keyboards/handwired/dactyl_manuform/dactyl_manuform.h b/keyboards/handwired/dactyl_manuform/dactyl_manuform.h index 8b60097bc2..eea0757d59 100644 --- a/keyboards/handwired/dactyl_manuform/dactyl_manuform.h +++ b/keyboards/handwired/dactyl_manuform/dactyl_manuform.h @@ -1,13 +1,15 @@ #pragma once -#ifdef KEYBOARD_handwired_dactyl_manuform_6x6 - #include "6x6.h" +#ifdef KEYBOARD_handwired_dactyl_manuform_4x5 + #include "4x5.h" +#elif KEYBOARD_handwired_dactyl_manuform_4x6 + #include "4x6.h" #elif KEYBOARD_handwired_dactyl_manuform_5x6 #include "5x6.h" -#elif KEYBOARD_handwired_dactyl_manuform_4x5 - #include "4x5.h" #elif KEYBOARD_handwired_dactyl_manuform_5x7 #include "5x7.h" +#elif KEYBOARD_handwired_dactyl_manuform_6x6 + #include "6x6.h" #endif //void promicro_bootloader_jmp(bool program); From 9c4b6d21003290abd92644d882165a95ffee4470 Mon Sep 17 00:00:00 2001 From: Pittyolo Date: Wed, 3 Oct 2018 21:14:36 +0200 Subject: [PATCH 117/269] Keyboard: Adding Split Space support for Mechmini 1 (#4052) * Adding Split Space support * Adding my keymap * update * Made the requested updates * Made the requested update --- keyboards/mechmini/v1/keymaps/pitty/keymap.c | 54 ++++++++++++++++++++ keyboards/mechmini/v1/v1.h | 17 ++++++ 2 files changed, 71 insertions(+) create mode 100644 keyboards/mechmini/v1/keymaps/pitty/keymap.c diff --git a/keyboards/mechmini/v1/keymaps/pitty/keymap.c b/keyboards/mechmini/v1/keymaps/pitty/keymap.c new file mode 100644 index 0000000000..7db2dc1836 --- /dev/null +++ b/keyboards/mechmini/v1/keymaps/pitty/keymap.c @@ -0,0 +1,54 @@ +/* +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 _QWERTY 0 +#define _NMBR 1 +#define _NAV 2 +#define _MOUSE 3 +#define _FUNCT 4 + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_split_space( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_FUNCT, KC_ENT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LCTL, KC_LGUI, KC_LALT, LT(_NAV, KC_SPC), KC_BSPC, KC_RALT, TT(_MOUSE), TT(_NMBR) + ), + [_NAV] = LAYOUT_split_space( + _______, _______, KC_UP, _______, KC_LPRN, KC_RPRN, _______, KC_7, KC_8, KC_9, KC_KP_SLASH, KC_DEL, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LCBR, KC_RCBR, _______, KC_4, KC_5, KC_6, KC_KP_ASTERISK, + _______, _______, _______, _______, KC_LABK, KC_RABK, KC_GRV, KC_1, KC_2, KC_3, KC_KP_MINUS, + _______, _______, _______, _______, _______, _______, KC_KP_DOT, KC_KP_PLUS + ), + [_NMBR] = LAYOUT_split_space( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + _______, KC_4, KC_5, KC_6, _______, _______, _______, _______, _______, _______, _______, + _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, TO(_QWERTY), _______, _______, _______ + ), + [_MOUSE] = LAYOUT_split_space( + _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, + _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_R, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, TO(_QWERTY), _______, _______, _______ + ), + [_FUNCT] = LAYOUT_split_space( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, + _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, RGB_TOG, RGB_MOD, _______, _______, RESET + ) +}; diff --git a/keyboards/mechmini/v1/v1.h b/keyboards/mechmini/v1/v1.h index 501bd89c59..1e392b3530 100644 --- a/keyboards/mechmini/v1/v1.h +++ b/keyboards/mechmini/v1/v1.h @@ -40,4 +40,21 @@ along with this program. If not, see . { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ } +#define LAYOUT_split_space( \ + K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, \ + K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, \ + K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, \ + K00, K10, K20, K56, K57, KB0, KC0, K66 \ +) \ +{ \ + { K00, K10, K20, K56, KC_NO, KC_NO, K57, KC_NO, KB0, KC0, K66, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ +} + #endif From ac27b62fa17859b61a5b5f6c26b1e3113f219b39 Mon Sep 17 00:00:00 2001 From: takashiski Date: Thu, 4 Oct 2018 04:22:18 +0900 Subject: [PATCH 118/269] Keyboard: add info.json for qmk configurator (#4063) --- keyboards/namecard2x4/info.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/keyboards/namecard2x4/info.json b/keyboards/namecard2x4/info.json index e69de29bb2..3d6c332154 100644 --- a/keyboards/namecard2x4/info.json +++ b/keyboards/namecard2x4/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "namecard2x4", + "url": "https://skyhigh-works.hatenablog.com/", + "maintainer": "takashiski", + "bootloader": "atmel-dfu", + "width": 4, + "height": 2, + "layouts": { + "LAYOUT": { + "layout": [{"label":"1", "x":0, "y":0}, {"label":"2", "x":1, "y":0}, {"label":"3", "x":2, "y":0}, {"label":"4", "x":3, "y":0}, {"label":"5", "x":0, "y":1}, {"label":"6", "x":1, "y":1}, {"label":"7", "x":2, "y":1}, {"label":"8", "x":3, "y":1}] + } + } +} From 0d61e612f063b91568bf8098878051c4ea405ab3 Mon Sep 17 00:00:00 2001 From: martinakcsilla Date: Wed, 3 Oct 2018 23:38:02 +0200 Subject: [PATCH 119/269] process_ucis: Add a callback for success (#4067) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There is `qk_ucis_symbol_fallback` for the case where symbol lookup fails, but there wasn't one for the success case. This adds `qk_ucis_success`, called after successfully finishing the UCIS symbol input. Thanks to @drashna for the idea! Signed-off-by: Csilla Nagyné Martinák --- quantum/process_keycode/process_ucis.c | 8 ++++++++ quantum/process_keycode/process_ucis.h | 1 + 2 files changed, 9 insertions(+) diff --git a/quantum/process_keycode/process_ucis.c b/quantum/process_keycode/process_ucis.c index 86c0937f5e..5de2e41fc3 100644 --- a/quantum/process_keycode/process_ucis.c +++ b/quantum/process_keycode/process_ucis.c @@ -32,6 +32,10 @@ void qk_ucis_start_user(void) { unicode_input_finish(); } +__attribute__((weak)) +void qk_ucis_success(uint8_t symbol_index) { +} + static bool is_uni_seq(char *seq) { uint8_t i; @@ -142,6 +146,10 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) { } unicode_input_finish(); + if (symbol_found) { + qk_ucis_success(i); + } + qk_ucis_state.in_progress = false; return false; } diff --git a/quantum/process_keycode/process_ucis.h b/quantum/process_keycode/process_ucis.h index 3f736a709f..d4aa34cde7 100644 --- a/quantum/process_keycode/process_ucis.h +++ b/quantum/process_keycode/process_ucis.h @@ -45,6 +45,7 @@ extern const qk_ucis_symbol_t ucis_symbol_table[]; void qk_ucis_start(void); void qk_ucis_start_user(void); void qk_ucis_symbol_fallback (void); +void qk_ucis_success(uint8_t symbol_index); void register_ucis(const char *hex); bool process_ucis (uint16_t keycode, keyrecord_t *record); From f13ca593618b9f5ed6c175496a0d84633f541a94 Mon Sep 17 00:00:00 2001 From: Enochen Date: Wed, 3 Oct 2018 18:02:24 -0400 Subject: [PATCH 120/269] rn42 compilation error fix (#4050) * rn42 compile fix Fixes a compilation error * simpler rn42 compile fix good idea drashna :) --- keyboards/hhkb/rn42/rn42.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/hhkb/rn42/rn42.c b/keyboards/hhkb/rn42/rn42.c index 859e401490..154da4e101 100644 --- a/keyboards/hhkb/rn42/rn42.c +++ b/keyboards/hhkb/rn42/rn42.c @@ -1,7 +1,7 @@ #include #include "host.h" #include "host_driver.h" -#include "serial.h" +#include "../serial.h" #include "rn42.h" #include "print.h" #include "timer.h" From dad579c8f81bdde08e598f9d99249893d5d779a8 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 3 Oct 2018 22:33:06 -0700 Subject: [PATCH 121/269] Add mousekey_send to (un)register_code --- tmk_core/common/action.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 76d02bc9df..8bdcd54e32 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -777,6 +777,7 @@ void register_code(uint8_t code) #ifdef MOUSEKEY_ENABLE else if IS_MOUSEKEY(code) { mousekey_on(code); + mousekey_send(); } #endif } @@ -841,6 +842,7 @@ void unregister_code(uint8_t code) #ifdef MOUSEKEY_ENABLE else if IS_MOUSEKEY(code) { mousekey_off(code); + mousekey_send(); } #endif } From 26adf3706a7822e05977c0eadb6963c0db2e1c3b Mon Sep 17 00:00:00 2001 From: SpacebarRacecar <42380065+SpacebarRacecar@users.noreply.github.com> Date: Fri, 5 Oct 2018 00:00:33 +0200 Subject: [PATCH 122/269] Keymap: Added personal userspace and keymaps. (#4073) * added personal userspace, niu mini, planck and fc660c keymaps * removed unnecessary include and some other minor corrections --- .../fc660c/keymaps/spacebarracecar/README.md | 4 + .../fc660c/keymaps/spacebarracecar/config.h | 9 + .../fc660c/keymaps/spacebarracecar/keymap.c | 38 +++ .../fc660c/keymaps/spacebarracecar/rules.mk | 6 + .../niu_mini/keymaps/spacebarracecar/config.h | 0 .../niu_mini/keymaps/spacebarracecar/keymap.c | 126 ++++++++ .../keymaps/spacebarracecar/readme.md | 3 + .../niu_mini/keymaps/spacebarracecar/rules.mk | 22 ++ .../planck/keymaps/spacebarracecar/config.h | 3 + .../planck/keymaps/spacebarracecar/keymap.c | 148 +++++++++ .../planck/keymaps/spacebarracecar/readme.md | 4 + .../planck/keymaps/spacebarracecar/rules.mk | 23 ++ users/spacebarracecar/config.h | 0 users/spacebarracecar/rules.mk | 5 + users/spacebarracecar/spacebarracecar.c | 305 ++++++++++++++++++ users/spacebarracecar/spacebarracecar.h | 242 ++++++++++++++ 16 files changed, 938 insertions(+) create mode 100644 keyboards/fc660c/keymaps/spacebarracecar/README.md create mode 100644 keyboards/fc660c/keymaps/spacebarracecar/config.h create mode 100644 keyboards/fc660c/keymaps/spacebarracecar/keymap.c create mode 100644 keyboards/fc660c/keymaps/spacebarracecar/rules.mk create mode 100644 keyboards/niu_mini/keymaps/spacebarracecar/config.h create mode 100644 keyboards/niu_mini/keymaps/spacebarracecar/keymap.c create mode 100644 keyboards/niu_mini/keymaps/spacebarracecar/readme.md create mode 100644 keyboards/niu_mini/keymaps/spacebarracecar/rules.mk create mode 100644 keyboards/planck/keymaps/spacebarracecar/config.h create mode 100644 keyboards/planck/keymaps/spacebarracecar/keymap.c create mode 100644 keyboards/planck/keymaps/spacebarracecar/readme.md create mode 100644 keyboards/planck/keymaps/spacebarracecar/rules.mk create mode 100644 users/spacebarracecar/config.h create mode 100644 users/spacebarracecar/rules.mk create mode 100644 users/spacebarracecar/spacebarracecar.c create mode 100644 users/spacebarracecar/spacebarracecar.h diff --git a/keyboards/fc660c/keymaps/spacebarracecar/README.md b/keyboards/fc660c/keymaps/spacebarracecar/README.md new file mode 100644 index 0000000000..7d87ef8cf6 --- /dev/null +++ b/keyboards/fc660c/keymaps/spacebarracecar/README.md @@ -0,0 +1,4 @@ +# US International keymap for PCs with German set as input language + +This keymap emulates a US International layout including a deadkey layer on PCs that have German set as the input language. +This allows the use of the keyboard on any PC in Germany without the need of changing the input language. diff --git a/keyboards/fc660c/keymaps/spacebarracecar/config.h b/keyboards/fc660c/keymaps/spacebarracecar/config.h new file mode 100644 index 0000000000..9c9b00656b --- /dev/null +++ b/keyboards/fc660c/keymaps/spacebarracecar/config.h @@ -0,0 +1,9 @@ +#pragma once + +// higher value means deeper actuation point, less sensitive +// be careful and only make small adjustments (steps of 1 or 2). +// too high and keys will fail to actuate. too low and keys will actuate spontaneously. +// test all keys before further adjustment. +// this should probably stay in the range +/-5. +#undef ACTUATION_DEPTH_ADJUSTMENT +#define ACTUATION_DEPTH_ADJUSTMENT +2 diff --git a/keyboards/fc660c/keymaps/spacebarracecar/keymap.c b/keyboards/fc660c/keymaps/spacebarracecar/keymap.c new file mode 100644 index 0000000000..2cbef10bbf --- /dev/null +++ b/keyboards/fc660c/keymaps/spacebarracecar/keymap.c @@ -0,0 +1,38 @@ +#include QMK_KEYBOARD_H +#include "spacebarracecar.h" + +enum layers { + _BASE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT( + KC_ESC, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, DE_MINS,CU_EQL, KC_BSPC, KC_INS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, CU_Z, KC_U, KC_I, KC_O, KC_P, CU_LBRC,CU_RBRC,CU_BSLS, KC_DEL, + CU_NAV, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, CU_SCLN,CU_QUOT, KC_ENT, + CU_LSFT,CU_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, CU_COMM,CU_DOT, CU_SLSH,CU_RSFT, KC_UP, + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT + ), + + [_DEADKEY] = LAYOUT( + CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, CU_ED, + _______,CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, + _______,CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, CU_DDQ , + _______,CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, + _______,_______,_______, CU_DDQ, _______,_______,_______, _______,_______,_______ + ), + + [_NAV] = LAYOUT( + CU_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, CU_GAME, + _______,KC_PGDN,KC_UP, KC_PGUP,KC_HOME,XXXXXXX,XXXXXXX,XXXXXXX,GUIU, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, CU_ESCT, + _______,KC_LEFT,KC_DOWN,KC_RGHT,KC_END, XXXXXXX,XXXXXXX,GUIL, GUID, GUIR, XXXXXXX,XXXXXXX, KC_ENT, + _______,KC_MPRV,KC_MPLY,KC_MNXT,KC_VOLD,KC_VOLU,KC_MUTE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______, KC_PGUP, + RESET, _______,_______, _______, _______,_______,_______, KC_HOME,KC_PGDN,KC_END + ) + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return process_record_userspace(keycode, record); +} diff --git a/keyboards/fc660c/keymaps/spacebarracecar/rules.mk b/keyboards/fc660c/keymaps/spacebarracecar/rules.mk new file mode 100644 index 0000000000..8ee642a4a7 --- /dev/null +++ b/keyboards/fc660c/keymaps/spacebarracecar/rules.mk @@ -0,0 +1,6 @@ +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work + +# Userspace defines +GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/config.h b/keyboards/niu_mini/keymaps/spacebarracecar/config.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c new file mode 100644 index 0000000000..b850e5fda7 --- /dev/null +++ b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c @@ -0,0 +1,126 @@ +#include QMK_KEYBOARD_H +#include "spacebarracecar.h" + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +enum layers { + _BASE, + _LOWER, + _RAISE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Base Layer +,-----------------------------------------------------------------------------------------------------------------------. +|Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace| +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Shift |Y |X |C |V |B |N |M |, |. |/ |Shift | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|LCtrl | |Win |Alt |Lower |Space |Enter |Raise |AltGr |Win |Menu |RCtrl | +`-----------------------------------------------------------------------------------------------------------------------' +*/ + +[_BASE] = LAYOUT_ortho_4x12( + KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, + CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, + CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, + KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL +), + +/* Lower +,-----------------------------------------------------------------------------------------------------------------------. +|~ |! |" |# |$ |% |^ |& |* |( |) | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |? | | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------------------------------------------' +*/ +[_LOWER] = LAYOUT_ortho_4x12( + DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, + _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, + _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Raise +,-----------------------------------------------------------------------------------------------------------------------. +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------------------------------------------' +*/ + +[_RAISE] = LAYOUT_ortho_4x12( + CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Dead-Key +,-----------------------------------------------------------------------------------------------------------------------. +| | | | | | | |Ü | |Ö | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Ä |ß | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | |" |" | | | | | | +`-----------------------------------------------------------------------------------------------------------------------' +*/ + +[_DEADKEY] = LAYOUT_ortho_4x12( + KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, + _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, + _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, + _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______ +), + +/* Nav +,-----------------------------------------------------------------------------------------------------------------------. +|Caps Lock|PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | |RESET | | +`-----------------------------------------------------------------------------------------------------------------------' +*/ + +[_NAV] = LAYOUT_ortho_4x12( + CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, RGB_M_P, KC_ENT, + _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, RGB_TOG, RGB_MOD, RGB_HUI, CU_RGBV, _______, + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CU_GAME +) + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { +switch (keycode) { + case MO(_LOWER): + if (game){ + if(record->event.pressed) { + register_code(KC_SPC); + } else { + unregister_code(KC_SPC); + } + return false; + } else { + return true; + } + } + return process_record_userspace(keycode, record); +} diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/readme.md b/keyboards/niu_mini/keymaps/spacebarracecar/readme.md new file mode 100644 index 0000000000..88d7221869 --- /dev/null +++ b/keyboards/niu_mini/keymaps/spacebarracecar/readme.md @@ -0,0 +1,3 @@ +# US-International like Niu Mini layout for PCs with German set as input language + +This layout aims to provide a US-International like layout for PCs that have German set as Input Language. This is useful for users living in germany, because it enables the use of the Niu Mini on any pc without having to switch the input language. It's mostly based on the Planck default layout, but adds essential features for german input, like a dead key layer to access ä, ö, ü. diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk b/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk new file mode 100644 index 0000000000..b1d7055da7 --- /dev/null +++ b/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk @@ -0,0 +1,22 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +# Userspace defines +GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language diff --git a/keyboards/planck/keymaps/spacebarracecar/config.h b/keyboards/planck/keymaps/spacebarracecar/config.h new file mode 100644 index 0000000000..9b55fa93aa --- /dev/null +++ b/keyboards/planck/keymaps/spacebarracecar/config.h @@ -0,0 +1,3 @@ +#ifdef AUDIO_ENABLE + #define STARTUP_SONG SONG(NO_SOUND) +#endif diff --git a/keyboards/planck/keymaps/spacebarracecar/keymap.c b/keyboards/planck/keymaps/spacebarracecar/keymap.c new file mode 100644 index 0000000000..705f78f8ea --- /dev/null +++ b/keyboards/planck/keymaps/spacebarracecar/keymap.c @@ -0,0 +1,148 @@ +#include QMK_KEYBOARD_H +#include "spacebarracecar.h" + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +enum layers { + _BASE, + _LOWER, + _RAISE, + _MUSICMODE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Base Layer +,-----------------------------------------------------------------------------------------------------------------------. +|Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace| +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Shift |Y |X |C |V |B |N |M |, |. |/ |Shift | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|LCtrl | |Win |Alt |Lower |Space |Enter |Raise |AltGr |Win |Menu |RCtrl | +`-----------------------------------------------------------------------------------------------------------------------' +*/ + +[_BASE] = LAYOUT_ortho_4x12( + KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, + CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, + CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, + KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL +), + +/* Lower +,-----------------------------------------------------------------------------------------------------------------------. +|~ |! |" |# |$ |% |^ |& |* |( |) | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |? | | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------------------------------------------' +*/ +[_LOWER] = LAYOUT_ortho_4x12( + DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, + _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, + _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Raise +,-----------------------------------------------------------------------------------------------------------------------. +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | | +`-----------------------------------------------------------------------------------------------------------------------' +*/ + +[_RAISE] = LAYOUT_ortho_4x12( + CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +[_MUSICMODE] = LAYOUT_ortho_4x12( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LCTL, KC_LALT, KC_LGUI, KC_DOWN, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_MOD, MU_OFF +), + +/* Dead-Key +,-----------------------------------------------------------------------------------------------------------------------. +| | | | | | | |Ü | |Ö | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Ä |ß | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | |" |" | | | | | | +`-----------------------------------------------------------------------------------------------------------------------' +*/ + +[_DEADKEY] = LAYOUT_ortho_4x12( + KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, KC_BSPC, + CU_NAV, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, + CU_LSFT, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_RSFT, + KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL +), + +/* Nav +,-----------------------------------------------------------------------------------------------------------------------. +|Caps Lock|PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | |RESET | | +`-----------------------------------------------------------------------------------------------------------------------' +*/ + +[_NAV] = LAYOUT_ortho_4x12( + CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, + _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, MU_ON, XXXXXXX, XXXXXXX, XXXXXXX, _______, + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CU_GAME +) + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { +switch (keycode) { + case MO(_LOWER): + if (game){ + if(record->event.pressed) { + register_code(KC_SPC); + } else { + unregister_code(KC_SPC); + } + return false; + } else { + return true; + } + case MU_ON: + if(record->event.pressed) { + layer_off(_LOWER); + layer_off(_RAISE); + layer_off(_NAV); + layer_off(_DEADKEY); + layer_on(_MUSICMODE); + } + return true; + case MU_OFF: + if(record->event.pressed) { + layer_off(_MUSICMODE); + } + return true; + } + return process_record_userspace(keycode, record); +} diff --git a/keyboards/planck/keymaps/spacebarracecar/readme.md b/keyboards/planck/keymaps/spacebarracecar/readme.md new file mode 100644 index 0000000000..daa9c4ad2b --- /dev/null +++ b/keyboards/planck/keymaps/spacebarracecar/readme.md @@ -0,0 +1,4 @@ +# US-International like Planck layout for PCs with German set as input language + +This layout aims to provide a US-International like layout for PCs that have German set as Input Language. This is useful for users living in germany, because it enables the use of the planck on any pc without having to switch the input language. It's mostly based on the Planck default layout, but adds essential features for german input, like a dead key layer to access ä, ö, ü. + diff --git a/keyboards/planck/keymaps/spacebarracecar/rules.mk b/keyboards/planck/keymaps/spacebarracecar/rules.mk new file mode 100644 index 0000000000..fbdd1217c0 --- /dev/null +++ b/keyboards/planck/keymaps/spacebarracecar/rules.mk @@ -0,0 +1,23 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +# Userspace defines +GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language + diff --git a/users/spacebarracecar/config.h b/users/spacebarracecar/config.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/users/spacebarracecar/rules.mk b/users/spacebarracecar/rules.mk new file mode 100644 index 0000000000..319e887ae3 --- /dev/null +++ b/users/spacebarracecar/rules.mk @@ -0,0 +1,5 @@ +SRC += spacebarracecar.c + +ifeq ($(strip $(GERMAN_ENABLE)), yes) + OPT_DEFS += -DGERMAN_ENABLE +endif diff --git a/users/spacebarracecar/spacebarracecar.c b/users/spacebarracecar/spacebarracecar.c new file mode 100644 index 0000000000..404331f8df --- /dev/null +++ b/users/spacebarracecar/spacebarracecar.c @@ -0,0 +1,305 @@ +#include "spacebarracecar.h" + +#ifdef GERMAN_ENABLE +bool lshift = false; +bool rshift = false; +bool lshiftp = false; +bool rshiftp = false; +uint16_t lshift_timer = 0; +uint16_t rshift_timer = 0; + +uint8_t prev_indx = 0; +uint16_t prev_kcs[6] = {0, 0, 0, 0, 0, 0}; + +bool esct = false; + +void add_to_prev(uint16_t kc){ + for (int i=0; i0; i--){ + prev_kcs[i] = prev_kcs[i-1]; + } + prev_kcs[0] = kc; + } else { + prev_kcs[prev_indx] = kc; + prev_indx++; + } +} + +void unreg_prev(void){ + if (prev_indx == 0) + return; + for (int i=0; ievent.pressed) { + game = !game; + } + return false; + case KC_LGUI: + case KC_RGUI: + if (game) + return false; + else + return true; + case CU_NAV: + if(record->event.pressed) { + navesc = true; + navesc_timer = timer_read(); + layer_on(_NAV); + } else { + if (timer_elapsed(navesc_timer) < 200 && navesc) { + register_code(KC_ESC); + unregister_code(KC_ESC); + } + layer_off(_NAV); + } + return false; + + #ifdef RGBLIGHT_ENABLE + case CU_RGBV: + if(record->event.pressed) { + if (rgblight_get_val()+32>255) + rgblight_sethsv(rgblight_get_hue(), rgblight_get_sat(), 31); + else + rgblight_sethsv(rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val()+32); + } + return false; + #endif + + #ifdef GERMAN_ENABLE + case CU_LSFT: + if(record->event.pressed) { + lshiftp = true; + lshift_timer = timer_read(); + unregister_code(KC_LSFT); + register_code(KC_LSFT); + lshift = true; + } else { + if (timer_elapsed(lshift_timer) < 200 && lshiftp && !game) { + register_code(KC_LSFT); + register_code(KC_8); + unregister_code(KC_8); + unregister_code(KC_LSFT); + } + unreg_prev(); + if (!rshift) + unregister_code(KC_LSFT); + lshift = false; + } + return false; + case CU_RSFT: + if(record->event.pressed) { + rshiftp = true; + rshift_timer = timer_read(); + unregister_code(KC_LSFT); + register_code(KC_LSFT); + rshift = true; + } else { + if (timer_elapsed(rshift_timer) < 200 && rshiftp && !game) { + register_code(KC_LSFT); + register_code(KC_9); + unregister_code(KC_9); + unregister_code(KC_LSFT); + } + unreg_prev(); + if (!lshift) + unregister_code(KC_LSFT); + rshift = false; + } + return false; + case CU_ESCT: + if(record->event.pressed) { + esct = !esct; + } + return false; + case CU_AE: + UML(DE_AE) + case CU_OE: + UML(DE_OE) + case CU_UE: + UML(DE_UE) + case CU_SS: + if(record->event.pressed) { + timer_timeout(); + unregister_code(KC_LSFT); + register_code(DE_SS); + unregister_code(DE_SS); + if (lshift || rshift) + register_code(KC_LSFT); + layer_off(_DEADKEY); + } + return false; + case CU_DDQ: + if(record->event.pressed) { + timer_timeout(); + register_code(KC_LSFT); + register_code(KC_2); + unregister_code(KC_2); + if (!lshift && !rshift) + unregister_code(KC_LSFT); + layer_off(_DEADKEY); + } + return false; + case CU_ED: + if(record->event.pressed) { + timer_timeout(); + layer_off(_DEADKEY); + } + return false; + case CU_GRV: + if(record->event.pressed) { + timer_timeout(); + if (lshift || rshift){ + unregister_code(KC_LSFT); + register_code(DE_ALGR); + unregister_code(DE_PLUS); + register_code(DE_PLUS); + unregister_code(DE_PLUS); + unregister_code(DE_ALGR); + register_code(KC_LSFT); + } else { + register_code(KC_LSFT); + unregister_code(DE_ACUT); + register_code(DE_ACUT); + unregister_code(DE_ACUT); + unregister_code(KC_LSFT); + if (!esct) { + register_code(KC_SPC); + unregister_code(KC_SPC); + } + } + } + return false; + case CU_CIRC: + if(record->event.pressed) { + timer_timeout(); + unregister_code(KC_LSFT); + unregister_code(DE_CIRC); + register_code(DE_CIRC); + unregister_code(DE_CIRC); + if (!esct) { + register_code(KC_SPC); + unregister_code(KC_SPC); + } + if (lshift || rshift) + register_code(KC_LSFT); + } + return false; + case CU_QUOT: + if(record->event.pressed){ + timer_timeout(); + register_code(KC_LSFT); + if (lshift || rshift){ + layer_on(_DEADKEY); + } else { + unregister_code(DE_HASH); + register_code(DE_HASH); + add_to_prev(DE_HASH); + } + } else { + unregister_code(DE_HASH); + unreg_prev(); + if (lshift || rshift) + register_code(KC_LSFT); + else + unregister_code(KC_LSFT); + } + return false; + case CU_6: + if(record->event.pressed){ + timer_timeout(); + unregister_code(KC_LSFT); + if (lshift || rshift){ + unregister_code(DE_CIRC); + register_code(DE_CIRC); + unregister_code(DE_CIRC); + if (!esct) { + register_code(KC_SPC); + unregister_code(KC_SPC); + } + register_code(KC_LSFT); + } else { + register_code(DE_6); + } + } else { + unregister_code(DE_6); + } + return false; + case CU_COMM: + SHIFT_NO(DE_COMM, DE_LESS) + case CU_DOT: + SHIFT_NORM(DE_DOT, DE_LESS) + case CU_SLSH: + SHIFT_ALL(DE_7, DE_SS) + case CU_SCLN: + SHIFT_ALL(DE_COMM, DE_DOT) + case CU_3: + SHIFT_NO(DE_3, DE_HASH) + case CU_7: + SHIFT_NORM(DE_7, DE_6) + case CU_8: + SHIFT_NORM(DE_8, DE_PLUS) + case CU_9: + SHIFT_NORM(DE_9, DE_8) + case CU_0: + SHIFT_NORM(DE_0, DE_9) + case CU_EQL: + SHIFT_SWITCH(DE_0, DE_PLUS) + case CU_LBRC: + SHIFT_ALGR(DE_8, DE_7) + case CU_RBRC: + SHIFT_ALGR(DE_9, DE_0) + case CU_BSLS: + SHIFT_ALGR(DE_SS, DE_LESS) + case CU_Z: + CTRL(DE_Z, KC_Z) + case CU_Y: + CTRL(DE_Y, KC_Y) + case KC_LCTL: + case KC_RCTL: + if(!record->event.pressed) { + unregister_code(KC_Z); + unregister_code(KC_Y); + } + return true; + #endif + + default: + if(record->event.pressed) { + timer_timeout(); + + #ifdef GERMAN_ENABLE + if (lshift || rshift) + register_code(KC_LSFT); + else + unregister_code(KC_LSFT); + #endif + + } + return true; + } +} diff --git a/users/spacebarracecar/spacebarracecar.h b/users/spacebarracecar/spacebarracecar.h new file mode 100644 index 0000000000..42879d2efb --- /dev/null +++ b/users/spacebarracecar/spacebarracecar.h @@ -0,0 +1,242 @@ +#pragma once + +#include "quantum.h" +#include "keymap_german.h" + +enum userspace_layers { + _DEADKEY = 14, //change if more than 16 layers are required + _NAV +}; + +enum userspace_custom_keycodes { + CU_GAME = SAFE_RANGE, // Toggle game mode on/off + CU_NAV, // NAV | ESC + + #ifdef GERMAN_ENABLE + CU_LSFT, // LSFT | ( + CU_RSFT, // LSFT | ) + CU_COMM, // , | < + CU_DOT, // . | > + CU_SLSH, // / | ? + CU_SCLN, // ; | : + CU_QUOT, // ' | Enable deadkey layer + CU_GRV, // ` | ~ + CU_CIRC, // ^ + CU_3, // 3 | # + CU_6, // 6 | ^ + CU_7, // 7 | & + CU_8, // 8 | * + CU_9, // 9 | ( + CU_0, // 0 | ) + CU_EQL, // = | + + CU_LBRC, // [ | { + CU_RBRC, // ] | } + CU_BSLS, // \ | | + CU_Z, // Z | Y in conjunction with ctrl + CU_Y, // Y | Z in conjunction wiht ctrl + CU_ESCT, // Toggle escape of grv and circ on/off + // Deadkey Layer + CU_AE, // Ä + CU_OE, // Ö + CU_UE, // Ü + CU_SS, // ß + CU_DDQ, // " + CU_ED, // Escape deadkey layer + #endif + + #ifdef RGBLIGHT_ENABLE + CU_RGBV, // Cycle through RGB brightness + #endif + + NEW_SAFE_RANGE // Use for keymap specific keycodes +}; + +#ifdef GERMAN_ENABLE +// these save the current shift status +extern bool lshift; +extern bool rshift; +// stuff for custom space cadet shift +extern bool lshiftp; +extern bool rshiftp; +extern uint16_t lshift_timer; +extern uint16_t rshift_timer; + +extern uint8_t prev_indx; +extern uint16_t prev_kcs[6]; + +void add_to_prev(uint16_t kc); +void unreg_prev(void); + +extern bool esct; +#endif + +// stuff for nav esc +extern bool navesc; +extern uint16_t navesc_timer; + +extern bool game; + +void timer_timeout(void); + +bool process_record_userspace(uint16_t keycode, keyrecord_t *record); + +#define CTRLX LCTL(KC_X) +#define CTRLC LCTL(KC_C) +#define CTRLV LCTL(KC_V) + +#define GUIU LGUI(KC_UP) +#define GUID LGUI(KC_DOWN) +#define GUIL LGUI(KC_LEFT) +#define GUIR RGUI(KC_RIGHT) + +// +// Templates for Keys, with custom shifted and non shifted Characters +// + +// Normal shift status +#define SHIFT_NORM(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout(); \ + if (lshift || rshift) { \ + register_code(KC_LSFT); \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + unregister_code(KC_LSFT); \ + unregister_code(kc1); \ + register_code(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ +} \ +return false; + +// Inverted shift status +#define SHIFT_SWITCH(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout(); \ + if (lshift || rshift) { \ + unregister_code(KC_LSFT); \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + register_code(KC_LSFT); \ + unregister_code(kc1); \ + register_code(kc1); \ + add_to_prev(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ + unreg_prev(); \ + if (lshift || rshift) \ + register_code(KC_LSFT); \ + else \ + unregister_code(KC_LSFT); \ +} \ +return false; + +// All shift +#define SHIFT_ALL(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout(); \ + register_code(KC_LSFT); \ + if (lshift || rshift) { \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + unregister_code(kc1); \ + register_code(kc1); \ + add_to_prev(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ + unreg_prev(); \ + if (lshift || rshift) \ + register_code(KC_LSFT); \ + else \ + unregister_code(KC_LSFT); \ +} \ +return false; + +// All no shift +#define SHIFT_NO(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout(); \ + unregister_code(KC_LSFT); \ + if (lshift || rshift) { \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + unregister_code(kc1); \ + register_code(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ + unreg_prev(); \ + if (lshift || rshift) \ + register_code(KC_LSFT); \ + else \ + unregister_code(KC_LSFT); \ +} \ +return false; + +// All algr +#define SHIFT_ALGR(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout(); \ + unregister_code(KC_LSFT); \ + register_code(DE_ALGR); \ + if (lshift || rshift) { \ + unregister_code(kc2); \ + register_code(kc2); \ + unregister_code(kc2); \ + register_code(KC_LSFT); \ + } else { \ + unregister_code(kc1); \ + register_code(kc1); \ + unregister_code(kc1); \ + } \ + unregister_code(DE_ALGR); \ +} \ +return false; + +// Different keycode for ctrl +#define CTRL(kc1, kc2) \ +if(record->event.pressed) { \ + timer_timeout(); \ + if (lshift || rshift) \ + register_code(KC_LSFT); \ + else \ + unregister_code(KC_LSFT); \ + if (keyboard_report->mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))){ \ + register_code(kc2); \ + } else { \ + register_code(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ +} \ +return false; + +// Umlaute for deadkey layer +#define UML(kc) \ +if(record->event.pressed) { \ + timer_timeout(); \ + if (lshift || rshift) \ + register_code(KC_LSFT); \ + else \ + unregister_code(KC_LSFT); \ + register_code(kc); \ + unregister_code(kc); \ + layer_off(_DEADKEY); \ +} \ +return false; From 0c3137d8ff0b84ee6b39ea8b85aeb4f82fcd7a9c Mon Sep 17 00:00:00 2001 From: James Laird-Wah Date: Sat, 15 Sep 2018 22:28:25 +1000 Subject: [PATCH 123/269] rgb_matrix: continue calling rgb_matrix_indicators() when toggled off This allows user code to continue to use the matrix for indication, even when the RGB toggle is off, using rgb_matrix_set_color(). Without this change, it's impossible for user code to use the matrix when the toggle is off, as any changes get overwritten with black on the next task cycle, and the indicator code is not called at all. --- quantum/rgb_matrix.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 1f00e9d99b..26ee57f5c2 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -620,7 +620,8 @@ void rgb_matrix_custom(void) { void rgb_matrix_task(void) { static uint8_t toggle_enable_last = 255; if (!rgb_matrix_config.enable) { - rgb_matrix_all_off(); + rgb_matrix_all_off(); + rgb_matrix_indicators(); toggle_enable_last = rgb_matrix_config.enable; return; } From b4f26a46164996f5bce58fbf958145ae64e8ae59 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Thu, 4 Oct 2018 20:34:47 -0700 Subject: [PATCH 124/269] Keyboard: DZ60: add Plate B layouts (#4076) Adds maximized DZ60 Plate B layout macros in ANSI and ISO, featuring 2.25u Left Shift (1.25u/1u split for ISO) and 1.75u Right Shift with Inverted-T arrow keys. Also supports Split Spacebar and Split Backspace. --- keyboards/dz60/dz60.h | 56 +++++++++++++++++++++++++++++++++++++++- keyboards/dz60/info.json | 8 ++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h index 6d80b2c7cb..fac5fa32ff 100644 --- a/keyboards/dz60/dz60.h +++ b/keyboards/dz60/dz60.h @@ -70,7 +70,7 @@ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │ - * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──────┬┴───┴┬───┬─┴───┤ + * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ * │▓▓▓▓▓│41 │43 │46 (7u) │4b │4d │▓▓▓▓▓│ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ */ @@ -224,4 +224,58 @@ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d, k4e } \ } +/* LAYOUT_60_b_ansi (maximized DZ60 Plate B layout for ANSI) + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤ + * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3c │3d │3e │ + * ├────┬───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬───┼───┼───┤ + * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │ + * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘ +*/ +#define LAYOUT_60_b_ansi( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3c, k3d, k3e, \ + k40, k41, k43, k44, k46, k48, k4a, k4b, k4c, k4d, k4e \ +) { \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, KC_NO, k3c, k3d, k3e }, \ + { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \ +} + +/* LAYOUT_60_b_iso (maximized DZ60 Plate B layout for ISO) + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬──┴────┤ + * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3c │3d │3e │ + * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬───┼───┼───┤ + * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │ + * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘ +*/ +#define LAYOUT_60_b_iso( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3c, k3d, k3e, \ + k40, k41, k43, k44, k46, k48, k4a, k4b, k4c, k4d, k4e \ +) { \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, KC_NO, k3c, k3d, k3e }, \ + { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \ +} + #endif diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json index 4855c3b81a..56e3677b7a 100644 --- a/keyboards/dz60/info.json +++ b/keyboards/dz60/info.json @@ -36,6 +36,14 @@ "LAYOUT_60_iso_5x1u": { "key_count": 63, "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"|", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"~", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}] + }, + "LAYOUT_60_b_ansi": { + "key_count": 66, + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"\\", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"Alt", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}] + }, + "LAYOUT_60_b_iso": { + "key_count": 67, + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"#", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"\\", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}] } } } From 13d67200df2337a2b4dbe86574e77f0e1732aef6 Mon Sep 17 00:00:00 2001 From: eucalyn Date: Sat, 6 Oct 2018 00:43:04 +0900 Subject: [PATCH 125/269] Keyboard: set SAFE_RANGE (#4078) --- keyboards/mint60/keymaps/default/keymap.c | 2 +- keyboards/mint60/keymaps/eucalyn/keymap.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/mint60/keymaps/default/keymap.c b/keyboards/mint60/keymaps/default/keymap.c index 42c61ffaad..36895cb474 100644 --- a/keyboards/mint60/keymaps/default/keymap.c +++ b/keyboards/mint60/keymaps/default/keymap.c @@ -31,7 +31,7 @@ extern rgblight_config_t rgblight_config; #define XXXXXXX KC_NO enum custom_keycodes { - RGBRST + RGBRST = SAFE_RANGE }; diff --git a/keyboards/mint60/keymaps/eucalyn/keymap.c b/keyboards/mint60/keymaps/eucalyn/keymap.c index 09b30730ad..566d734a52 100644 --- a/keyboards/mint60/keymaps/eucalyn/keymap.c +++ b/keyboards/mint60/keymaps/eucalyn/keymap.c @@ -31,7 +31,7 @@ extern rgblight_config_t rgblight_config; #define XXXXXXX KC_NO enum custom_keycodes { - RGBRST + RGBRST = SAFE_RANGE }; From ac7b2d92bf1254803ec97c075e6d0c833dfd4146 Mon Sep 17 00:00:00 2001 From: yiancar Date: Thu, 4 Oct 2018 22:37:26 +0100 Subject: [PATCH 126/269] ARM SWD guide - Added a detailed (but saddly long) debugging guide. - Modified sidebar and summary to include the links. --- docs/_sidebar.md | 1 + docs/_summary.md | 1 + docs/arm_debugging.md | 87 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 docs/arm_debugging.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index a35014dd8c..973428c9e0 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -74,6 +74,7 @@ * For Makers and Modders * [Hand Wiring Guide](hand_wire.md) * [ISP Flashing Guide](isp_flashing_guide.md) + * [ARM Debugging Guide](arm_debugging.md) * For a Deeper Understanding * [How Keyboards Work](how_keyboards_work.md) diff --git a/docs/_summary.md b/docs/_summary.md index a35014dd8c..973428c9e0 100644 --- a/docs/_summary.md +++ b/docs/_summary.md @@ -74,6 +74,7 @@ * For Makers and Modders * [Hand Wiring Guide](hand_wire.md) * [ISP Flashing Guide](isp_flashing_guide.md) + * [ARM Debugging Guide](arm_debugging.md) * For a Deeper Understanding * [How Keyboards Work](how_keyboards_work.md) diff --git a/docs/arm_debugging.md b/docs/arm_debugging.md new file mode 100644 index 0000000000..491dfe8ad7 --- /dev/null +++ b/docs/arm_debugging.md @@ -0,0 +1,87 @@ +# ARM Debugging usign Eclipse + +This page describes how to setup debugging for ARM MCUs using an SWD adapter and open-source/free tools. In this guide we will install GNU MCU Eclipse IDE for C/C++ Developers and OpenOCD together with all the necessary dependencies. + +This guide is catered towards advance users and assumes you can compile an ARM compatible keyboard on your machine using the MAKE flow. + +## Installing the software + +The main objective here is to get the MCU Eclipse IDE correcly installed on our machine. The necesarry instructions are derived from [this](https://gnu-mcu-eclipse.github.io/install/) install guide. + +### The xPack Manager + +This tool is a software package manager and it is used to help us get the necesarry depencencies. + +XPM runs using Node.js so grab that form [here](https://nodejs.org/en/). After installation, open a terminal and type `npm -v`. A reply with the version number means that the instalation was successful. + +XPM instalation instructions can be found [here](https://www.npmjs.com/package/xpm) and are OS specific. Entering `xpm --version` to your terminal should return the software version. + +### The ARM Toolchain + +Using XPM it is very easy to install the ARM toolchain. Enter the command `xpm install --global @gnu-mcu-eclipse/arm-none-eabi-gcc`. + +### Windows build tools + +If you are using windows you need to install this! + +`xpm install --global @gnu-mcu-eclipse/windows-build-tools` + +### Programer/Debugger Drivers + +Now its the time to install your programer's drivers. This tutorial was made using an ST-Link v2 which you can get from almost anywhere. +If you have an ST-Link the drivers can be found [here](https://www.st.com/en/development-tools/stsw-link009.html) otherwise consult the manufuturer of your tool. + +### OpenOCD + +This dependency allows SWD access from GDB and it is essential for debugging. Run `xpm install --global @gnu-mcu-eclipse/openocd`. + +### Java + +Java is needed by Eclipse so please download it from [here](https://www.oracle.com/technetwork/java/javase/downloads/index.html). + +### GNU MCU Eclipse IDE + +Now its finally time to install the IDE. Use the Release page [here](https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases/) to get the latest version. + +## Configuring Eclipse + +Open up the Eclipse IDE we just downloaded. To import our QMK directory select File -> Import -> C/C++ -> Existing code as Makefile Project. Select next and use Browse to select your QMK folder. In the tool-chain list select ARM Cross GCC and select Finish. + +Now you can see the QMK folder on the left hand side. Right click it and select Properties. On the left hand side, expand MCU and select ARM Toolchain Paths. Press xPack and OK. Repeat for OpenOCD Path and if you are on windows for Build Tool Path. Select Apply and Close. + +Now its time to install the necessary MCU packages. Go to Packs perspective by selecting Window -> Open Perspective -> Others -> Packs. Now select the yellow refresh symbol next to the Packs tab. This will take a long time as it is requesting the MCU definitions from various places. If some of the links fail you can probably select Ignore. + +When this finishes you must find the MCU which we will be building/debugging for. In this example I will be using the STM32F3 series MCUs. On the left, select STMicroelectonics -> STM32F3 Series. On the middle window we can see the pack. Right click and select Install. Once that is done we can go back to the default perspective, Window -> Open Perspective -> Others -> C/C++. + +We need to let eclipse know the device we intent to build QMK on. Right click on the QMK folder -> Properties -> C/C++ Build -> Settings. Select the Devices tab and under devices select the appropriate variant of your MCU. For my example it is STM32F303CC + +While we are here let's setup the build command as well. Select C/C++ Build and then the Behavior tab. On the build command, replace `all` with your necessary make command. For example for a rev6 Planck with the default keymap this would be `planck/rev6:default`. Select Apply and Close. + +## Building + +If you have setup everything correctly pressing the hammer button should build the firmware for you and a .bin file should appear. + +## Debugging + +### Connecting the Debugger + +ARM MCUs use the Single Wire Debug (SWD) protocol which comprises of the clock (SWCLK) signal and the data (SWDIO) signal. Connecting this two wires and ground should be enough to allow full manipulation of the MCU. Here we assume that the keyboard will be powered though USB. The RESET signal is not necessary as we can manually assert it using the reset button. For a more advance setup, the SWO signal can be used which pipes printf and scanf asynchronously to the host but for our setup we will ignore it. + +NOTE: Make sure the SWCLK and SWDIO pins are not used in the matrix of your keyboard. If they are you can temporarily switch them for some other pins. + +### Configuring the Debugger + +Right click on your QMK folder, select Debug As -> Debug Configuration. Here double click on GDB OpenOCD Debugging. Select the debugger tab and enter the configuration necessary for your MCU. This might take some fiddling and googleing to find out. The default script for the STM32F3 is called stm32f3discovery.cfg. To let OpenOCD know, in the Config options enter `-f board/stm32f3discovery.cfg`. + +NOTE: In my case this configuration script requires editing to disable the reset assertion. The locations of the scripts can be found in the actual executable field usually under the path `openocd/version/.content/scripts/board`. Here I edited `reset_config srst_only` to `reset_config none`. + +Select Apply and Close. + +### Running the Debugger. + +Reset your keyboard. + +Press the bug icon and if all goes well you should soon find yourself in the debug perspective. Here the program counter will pause at the beginning of the main function and way for you to press Play. Most of the features of all debuggers work on ARM MCUs but for exact details google is your friend! + + +Happy debugging! \ No newline at end of file From 27e216fc1a481bb3e65832458bd2b199cb499e0b Mon Sep 17 00:00:00 2001 From: thomasviaud Date: Fri, 5 Oct 2018 21:00:24 +0200 Subject: [PATCH 127/269] Keymap: Add french iso layout for dz60 (thomasviaud) (#4080) --- keyboards/dz60/keymaps/thomasviaud/README.md | 4 ++++ keyboards/dz60/keymaps/thomasviaud/keymap.c | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 keyboards/dz60/keymaps/thomasviaud/README.md create mode 100644 keyboards/dz60/keymaps/thomasviaud/keymap.c diff --git a/keyboards/dz60/keymaps/thomasviaud/README.md b/keyboards/dz60/keymaps/thomasviaud/README.md new file mode 100644 index 0000000000..f5bf221a22 --- /dev/null +++ b/keyboards/dz60/keymaps/thomasviaud/README.md @@ -0,0 +1,4 @@ +## French ISO Layout + +Here is a very simple version of a French ISO Layout (handled by OS). +Feel free to take this as base for your own layout. diff --git a/keyboards/dz60/keymaps/thomasviaud/keymap.c b/keyboards/dz60/keymaps/thomasviaud/keymap.c new file mode 100644 index 0000000000..02fdb5a4a0 --- /dev/null +++ b/keyboards/dz60/keymaps/thomasviaud/keymap.c @@ -0,0 +1,18 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + LAYOUT_60_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS , KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL), + + LAYOUT_60_iso( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, + _______, _______, _______, RESET, _______, _______, _______, _______), +}; \ No newline at end of file From 54b61b508be7f0b0d85ecd7c45bc8b6bd51d2140 Mon Sep 17 00:00:00 2001 From: Johannes Huber Date: Fri, 5 Oct 2018 23:49:30 +0200 Subject: [PATCH 128/269] E6V2 LE HHKB love (#4079) * Keyboard: E6V2 LE HHKB layout support * Keymap: Add johu's E6V2 LE HHKB layout --- keyboards/e6v2/le/info.json | 7 +- keyboards/e6v2/le/keymaps/johu/keymap.c | 98 ++++++++++++++++++++++++ keyboards/e6v2/le/keymaps/johu/readme.md | 40 ++++++++++ keyboards/e6v2/le/le.h | 28 +++++++ keyboards/e6v2/readme.md | 2 +- 5 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 keyboards/e6v2/le/keymaps/johu/keymap.c create mode 100644 keyboards/e6v2/le/keymaps/johu/readme.md diff --git a/keyboards/e6v2/le/info.json b/keyboards/e6v2/le/info.json index 9016f413e8..5a44eab18c 100644 --- a/keyboards/e6v2/le/info.json +++ b/keyboards/e6v2/le/info.json @@ -8,9 +8,12 @@ "LAYOUT": { "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.75}, {"label":"Ctrl", "x":1.75, "y":4, "w":1.25}, {"label":"Win", "x":3, "y":4, "w":1.25}, {"label":"Alt", "x":4.25, "y":4, "w":1.25}, {"x":5.5, "y":4, "w":2.75}, {"x":8.25, "y":4, "w":1.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}] }, - "LAYOUT_60_ansi": { "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + }, + "LAYOUT_60_hhkb": { + "key_count": 60, + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"label":"\\", "x":13, "y":0}, {"label":"`", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}] } } -} \ No newline at end of file +} diff --git a/keyboards/e6v2/le/keymaps/johu/keymap.c b/keyboards/e6v2/le/keymaps/johu/keymap.c new file mode 100644 index 0000000000..691f0e73cd --- /dev/null +++ b/keyboards/e6v2/le/keymaps/johu/keymap.c @@ -0,0 +1,98 @@ +#include QMK_KEYBOARD_H + +#define _BL 0 +#define _FL 1 +#define _SL 2 +#define _CL 3 + +// Tap dance defines +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define KC_SPFN LT(_SL, KC_SPC) // Tap for space, hold for function layer (aka SpaceFN) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Layer 0: Base layer (Default layer) + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + * |-----------------------------------------------------------------------------------------+ + * |Tab/Hyper| Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift/Ent | FN | + * |-----------------------------------------------------------------------------------------+ + * |LGUI | LAlt | Space | RAlt |RGUI | + * `--------------------------------------------------------------------' + */ + [_BL] = LAYOUT_60_hhkb( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), + KC_LGUI, KC_LALT, KC_SPFN, KC_RALT, KC_RGUI + ), + +/* Layer 1: FN Layer + * ,-----------------------------------------------------------------------------------------. + * | CL | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | Psc | Slck| Paus| Up | | Del | + * |-----------------------------------------------------------------------------------------+ + * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left|Right| | + * |-----------------------------------------------------------------------------------------+ + * | | Prev| Play| Next| | | + | - | End |PgDn| Down| | | + * |-----------------------------------------------------------------------------------------+ + * | | | | Stop | CL | + * `--------------------------------------------------------------------' + */ + [_FL] = LAYOUT_60_hhkb( + TG(_CL), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, + _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, + _______, _______, _______, KC_MSTP, MO(_CL) + ), + +/* Layer 2: Space FN Layer +* ,-----------------------------------------------------------------------------------------. +* | CL | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | +* |-----------------------------------------------------------------------------------------+ +* | | | | | | | | PgUp| | PgDn| | | | Del | +* |-----------------------------------------------------------------------------------------+ +* | | Vol-| Vol+| Mute| | | Left| Down| Up |Right| | | | +* |-----------------------------------------------------------------------------------------+ +* | | Prev| Play| Next| | | Home| End | | | | | | +* |-----------------------------------------------------------------------------------------+ +* | | | | | CL | +* `--------------------------------------------------------------------' +*/ + [_SL] = LAYOUT_60_hhkb( + TG(_CL), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, KC_PGDN, _______, _______, _______, KC_DEL, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, + _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, KC_END, _______, _______, _______, _______, _______, + _______, _______, _______, _______, MO(_CL) + ), + +/* Layer 3: Control Layer + * ,-----------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | BL- | BL+ | BL | | | | | | | | | | RESET | + * |-----------------------------------------------------------------------------------------+ + * | | RGBT| RGBM| | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | CAPS | Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | + * `--------------------------------------------------------------------' + */ + [_CL] = LAYOUT_60_hhkb( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, BL_TOGG, BL_STEP, BL_DEC, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, RESET, + _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_CAPS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/e6v2/le/keymaps/johu/readme.md b/keyboards/e6v2/le/keymaps/johu/readme.md new file mode 100644 index 0000000000..605a14a1c3 --- /dev/null +++ b/keyboards/e6v2/le/keymaps/johu/readme.md @@ -0,0 +1,40 @@ +# johu's E6-V2 Last Edition (LE) HHKB +Make example for this keyboard (after setting up your build environment): +```bash +$ make e6v2/le:johu +``` + +Or to make and flash: +```bash +$ make e6v2/le:johu:dfu +``` + +See the [build environment setup] and the [make instructions] for more +information. Brand new to QMK? Start with our [Complete Newbs Guide]. + +## Layer 0: Base Layer +* HHKB Qwerty layout plus some specials: + * The Space key sends `Space` when tapped, toggles to *Space FN Layer* when held + * [Grave Escape] + * The Ctrl key sends `Esc` when tapped, `Ctrl` when held + * The Tab key sends `Tab` when tapped, [Hyper] (`Super+Ctrl+Alt+Shift`) when held + * The right Shift key sends `Enter` when tapped, `Shift` when held + +## Layer 1: Function Layer +* Default HHKB function layer includig the iconic diamond arrow cluster +* Multimedia controls + +## Layer 2: Space FN Layer +* VIM style arrow cluster +* Multimedia controls + +## Layer 3: Control Layer +* Reset button +* RGB controls +* Caps Lock + +[build environment setup]: https://docs.qmk.fm/#/getting_started_build_tools +[make instructions]: https://docs.qmk.fm/#/getting_started_make_guide +[Complete Newbs Guide]: https://docs.qmk.fm/#/newbs +[Grave Escape]: https://beta.docs.qmk.fm/features/feature_grave_esc +[Hyper]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key diff --git a/keyboards/e6v2/le/le.h b/keyboards/e6v2/le/le.h index 380efd2a7a..d52560dfbe 100644 --- a/keyboards/e6v2/le/le.h +++ b/keyboards/e6v2/le/le.h @@ -33,4 +33,32 @@ { K40, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, K4B, KC_NO, K4D, K4E }, \ } +/* LAYOUT_60_hhkb + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │0d │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ + * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3c │3e │ + * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──────┬┴───┴┬───┬─┴───┤ + * │▓▓▓▓▓│42 │43 │47 (7u) │4b │4d │▓▓▓▓▓│ + * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ +*/ +#define LAYOUT_60_hhkb( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0D, \ + K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ + K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3E, \ + K42, K43, K47, K4B, K4D \ +)\ +{\ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ + { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \ + { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \ + { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO, K3E }, \ + { KC_NO, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, KC_NO, K4D, KC_NO }, \ +} + #endif diff --git a/keyboards/e6v2/readme.md b/keyboards/e6v2/readme.md index 9ebfac4a78..c09d1ccf1b 100644 --- a/keyboards/e6v2/readme.md +++ b/keyboards/e6v2/readme.md @@ -17,4 +17,4 @@ The E6V2 has been available with either a bootmapper client or QMK powered PCB. Please use the appropriate version when making your firmware. Flashing one in place of the other, can brick your PCB. Please be certain whether you have a OE or LE PCB. -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). From f1003aaccfdd4210103e796206e6ac40285dab5b Mon Sep 17 00:00:00 2001 From: Takeshi ISHII <2170248+mtei@users.noreply.github.com> Date: Sat, 6 Oct 2018 06:51:34 +0900 Subject: [PATCH 129/269] Keyboard: Helix five_rows keymap reduced size (#4082) * add PERMISSIVE_HOLD in helix:five_rows/config.h * add Eucalyn char layout into helix:five_rows * Helix five_rows keymap: make rgblight modes selectable. No change in build result. * fix keymap.c map comment, add console compile option No change in build result. * Helix five_rows keymap: reduced the size. --- keyboards/helix/config.h | 13 --- .../helix/rev2/keymaps/five_rows/config.h | 23 ++++- .../helix/rev2/keymaps/five_rows/keymap.c | 96 +++++++++++++------ .../helix/rev2/keymaps/five_rows/rules.mk | 15 ++- .../helix/rev2/keymaps/led_test/config.h | 20 ++-- .../helix/rev2/keymaps/led_test/rules.mk | 2 +- 6 files changed, 112 insertions(+), 57 deletions(-) diff --git a/keyboards/helix/config.h b/keyboards/helix/config.h index b79093d871..fbfbd32804 100644 --- a/keyboards/helix/config.h +++ b/keyboards/helix/config.h @@ -48,17 +48,4 @@ along with this program. If not, see . #define DISABLE_LEADER #endif // USE_Link_Time_Optimization -#if defined(LED_ANIMATIONS) || defined(RGBLIGHT_ANIMATIONS) - #undef RGBLIGHT_ANIMATIONS - #define RGBLIGHT_EFFECT_BREATHING - #define RGBLIGHT_EFFECT_RAINBOW_MOOD - #define RGBLIGHT_EFFECT_RAINBOW_SWIRL - #define RGBLIGHT_EFFECT_SNAKE - #define RGBLIGHT_EFFECT_KNIGHT - #define RGBLIGHT_EFFECT_CHRISTMAS - #define RGBLIGHT_EFFECT_STATIC_GRADIENT - #define RGBLIGHT_EFFECT_RGB_TEST - #define RGBLIGHT_EFFECT_ALTERNATING -#endif - #endif /* CONFIG_H */ diff --git a/keyboards/helix/rev2/keymaps/five_rows/config.h b/keyboards/helix/rev2/keymaps/five_rows/config.h index 8372194604..538859bc3c 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/config.h +++ b/keyboards/helix/rev2/keymaps/five_rows/config.h @@ -21,12 +21,27 @@ along with this program. If not, see . #ifndef CONFIG_USER_H #define CONFIG_USER_H -// if you need more program area, try uncomment follow line -//#include "serial_config_simpleapi.h" - #undef TAPPING_TERM -#define TAPPING_TERM 140 +#define TAPPING_TERM 300 +#define PERMISSIVE_HOLD +/* when TAPPING_TERM >= 500 same effect PERMISSIVE_HOLD. + see tmk_core/common/action_tapping.c */ // place overrides here +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + //#define RGBLIGHT_EFFECT_SNAKE + //#define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/five_rows/keymap.c b/keyboards/helix/rev2/keymaps/five_rows/keymap.c index 548caf8220..983bbe9378 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/keymap.c +++ b/keyboards/helix/rev2/keymaps/five_rows/keymap.c @@ -10,6 +10,9 @@ #ifdef SSD1306OLED #include "ssd1306.h" #endif +#ifdef CONSOLE_ENABLE + #include +#endif extern keymap_config_t keymap_config; @@ -28,6 +31,7 @@ enum layer_number { _QWERTY = 0, _COLEMAK, _DVORAK, + _EUCALYN, _KEYPAD, _AUX, _KAUX, @@ -41,6 +45,7 @@ enum custom_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK, + EUCALYN, KEYPAD, EISU, KANA, @@ -72,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | ` | ' | N | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * |Lower | Lower| Caps | GUI | Alt | Space| BS | Enter| Space| Alt | GUI | Menu |Lower |Lower | + * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | * `-------------------------------------------------------------------------------------------------' */ [_QWERTY] = LAYOUT( \ @@ -94,7 +99,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| Z | X | C | V | B | ` | ' | K | M | , | . | / | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * |Lower | Lower| Caps | GUI | Alt | Space| BS | Enter| Space| Alt | GUI | Menu |Lower |Lower | + * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | * `-------------------------------------------------------------------------------------------------' */ [_COLEMAK] = LAYOUT( \ @@ -116,7 +121,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| * | Shift| ; | Q | J | K | X | ` | / | B | M | W | V | Z | Shift| * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * |Lower | Lower| Caps | GUI | Alt | Space| BS | Enter| Space| Alt | GUI | Menu |Lower |Lower | + * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | * `-------------------------------------------------------------------------------------------------' */ [_DVORAK] = LAYOUT( \ @@ -128,6 +133,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LT(_RAISE,KC_ENT), KC_SPC, KC_RGUI, KC_RALT, KC_APP,MO(_LOWER),MO(_LOWER) \ ), + /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout) + * ,-----------------------------------------. ,-----------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | , | . | ; | | M | R | D | Y | P | \ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | A | O | E | I | U | | G | T | K | S | N | Ctrl | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | F | ` | ' | B | H | J | L | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | + * `-------------------------------------------------------------------------------------------------' + */ + [_EUCALYN] = LAYOUT( \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_COMM, KC_DOT, KC_SCLN, KC_M, KC_R, KC_D, KC_Y, KC_P, KC_BSLS, \ + KC_LCTL, KC_A, KC_O, KC_E, KC_I, KC_U, KC_G, KC_T, KC_K, KC_S, KC_N, KC_RCTL, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_GRV, KC_QUOT, KC_B, KC_H, KC_J, KC_L, KC_SLSH, KC_RSFT, \ + MO(_LOWER),MO(_LOWER), KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, LT(_RAISE,KC_BSPC), \ + LT(_RAISE,KC_ENT), KC_SPC, KC_RGUI, KC_RALT, KC_APP,MO(_LOWER),MO(_LOWER) \ + ), + /* Keypad * ,-----------------------------------------. ,-----------------------------------------. * | Tab | / | * | Del | F1 | F6 | | F1 | F6 | Del | Tab | / | * | @@ -239,7 +266,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Adjust (Lower + Raise) * ,-----------------------------------------. ,-----------------------------------------. - * | | |Keypad|Dvorak|Colemk|Qwerty| |Qwerty|Colemk|Dvorak|Keypad| | | + * | |Keypad|Dvorak|Colemk|Euclyn|Qwerty| |Qwerty|Euclyn|Colemk|Dvorak|Keypad| | * |------+------+------+------+------+------| |------+------+------+------+------+------| * | | Reset|RGBRST|RGB ON|Aud on| Win | | Win |Aud on|RGB ON|RGBRST| | | * |------+------+------+------+------+------| |------+------+------+------+------+------| @@ -251,7 +278,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------------------------------------------------------------------------------------------------' */ [_ADJUST] = LAYOUT( \ - XXXXXXX, XXXXXXX, KEYPAD, DVORAK, COLEMAK, QWERTY, QWERTY, COLEMAK, DVORAK, KEYPAD, XXXXXXX, XXXXXXX, \ + XXXXXXX, KEYPAD, DVORAK, COLEMAK, EUCALYN, QWERTY, QWERTY, EUCALYN, COLEMAK, DVORAK, KEYPAD, XXXXXXX, \ XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, AU_ON, RGB_TOG, RGBRST, XXXXXXX, XXXXXXX, \ RGB_HUI, RGB_SAI, RGB_VAI,RGB_SMOD, AU_OFF, AG_NORM, AG_NORM, AU_OFF,RGB_SMOD, RGB_VAI, RGB_SAI, RGB_HUI, \ RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_SAD, RGB_HUD, \ @@ -304,23 +331,25 @@ uint32_t default_layer_state_set_kb(uint32_t state) { current_default_layer = state - 1; // 1<<_DVORAK - 2 == 4 - 2 == _DVORAK (=2) if ( current_default_layer == 3 ) current_default_layer -= 1; - // 1<<_KEYPAD - 5 == 8 - 5 == _KEYPAD (=3) + // 1<<_EUCALYN - 5 == 8 - 5 == _EUCALYN (=3) if ( current_default_layer == 7 ) current_default_layer -= 4; + // 1<<_KEYPAD - 12 == 16 - 12 == _KEYPAD (=4) + if ( current_default_layer == 15 ) current_default_layer -= 11; return state; } void update_base_layer(int base) { if( current_default_layer != base ) { - eeconfig_update_default_layer(1UL<event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + update_base_layer(_EUCALYN); } return false; break; @@ -358,7 +396,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_SONG(tone_dvorak); #endif - update_base_layer(_KEYPAD); + update_base_layer(_KEYPAD); } return false; break; @@ -468,10 +506,10 @@ static void render_logo(struct CharacterMatrix *matrix) { char buf[30]; if(rgblight_config.enable) { snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ", - rgblight_config.mode, - rgblight_config.hue/RGBLIGHT_HUE_STEP, - rgblight_config.sat/RGBLIGHT_SAT_STEP, - rgblight_config.val/RGBLIGHT_VAL_STEP); + rgblight_config.mode, + rgblight_config.hue/RGBLIGHT_HUE_STEP, + rgblight_config.sat/RGBLIGHT_SAT_STEP, + rgblight_config.val/RGBLIGHT_VAL_STEP); matrix_write(matrix, buf); } #endif @@ -481,6 +519,7 @@ static void render_logo(struct CharacterMatrix *matrix) { static const char Qwerty_name[] PROGMEM = " Qwerty"; static const char Colemak_name[] PROGMEM = " Colemak"; static const char Dvorak_name[] PROGMEM = " Dvorak"; +static const char Eucalyn_name[] PROGMEM = " Eucalyn"; static const char Keypad_name[] PROGMEM = " Keypad"; static const char AUX_name[] PROGMEM = ":AUX"; @@ -494,6 +533,7 @@ static const char *layer_names[] = { [_QWERTY] = Qwerty_name, [_COLEMAK] = Colemak_name, [_DVORAK] = Dvorak_name, + [_EUCALYN]= Eucalyn_name, [_KEYPAD] = Keypad_name, [_AUX] = AUX_name, [_KAUX] = KAUX_name, @@ -526,18 +566,18 @@ void render_status(struct CharacterMatrix *matrix) { lstate && name_num < sizeof(layer_names)/sizeof(char *); lstate >>=1, name_num++ ) { if( (lstate & 1) != 0 ) { - if( layer_names[name_num] ) { - matrix_write_P(matrix, layer_names[name_num]); - } + if( layer_names[name_num] ) { + matrix_write_P(matrix, layer_names[name_num]); + } } } // Host Keyboard LED Status char led[40]; snprintf(led, sizeof(led), "\n%s %s %s", - (host_keyboard_leds() & (1<. // If you need more program area, try select and reduce rgblight modes to use. // Selection of RGBLIGHT MODE to use. -#undef RGBLIGHT_EFFECT_BREATHING -#undef RGBLIGHT_EFFECT_RAINBOW_MOOD -#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL -#undef RGBLIGHT_EFFECT_SNAKE -#undef RGBLIGHT_EFFECT_KNIGHT -#undef RGBLIGHT_EFFECT_CHRISTMAS -#undef RGBLIGHT_EFFECT_STATIC_GRADIENT -//#undef RGBLIGHT_EFFECT_RGB_TEST // led_test keymap need only this. -#undef RGBLIGHT_EFFECT_ALTERNATING +#if defined(LED_ANIMATIONS) + //#define RGBLIGHT_EFFECT_BREATHING + //#define RGBLIGHT_EFFECT_RAINBOW_MOOD + //#define RGBLIGHT_EFFECT_RAINBOW_SWIRL + //#define RGBLIGHT_EFFECT_SNAKE + //#define RGBLIGHT_EFFECT_KNIGHT + //#define RGBLIGHT_EFFECT_CHRISTMAS + //#define RGBLIGHT_EFFECT_STATIC_GRADIENT + #define RGBLIGHT_EFFECT_RGB_TEST // led_test keymap need only this. + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/led_test/rules.mk b/keyboards/helix/rev2/keymaps/led_test/rules.mk index c7ee75c36b..f599cd4f38 100644 --- a/keyboards/helix/rev2/keymaps/led_test/rules.mk +++ b/keyboards/helix/rev2/keymaps/led_test/rules.mk @@ -100,7 +100,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) endif ifeq ($(strip $(LED_ANIMATIONS)), yes) - OPT_DEFS += -DRGBLIGHT_ANIMATIONS + OPT_DEFS += -DLED_ANIMATIONS endif ifeq ($(strip $(OLED_ENABLE)), yes) From 2c1402aa3208d450a7724790b0eb9f2d352a1d9d Mon Sep 17 00:00:00 2001 From: Jereme Corrado Date: Fri, 5 Oct 2018 17:52:46 -0400 Subject: [PATCH 130/269] Keymap: Added Planck keymap: jcorrado (#4083) --- keyboards/planck/keymaps/jcorrado/keymap.c | 115 ++++++++++++++++++++ keyboards/planck/keymaps/jcorrado/readme.md | 9 ++ 2 files changed, 124 insertions(+) create mode 100644 keyboards/planck/keymaps/jcorrado/keymap.c create mode 100644 keyboards/planck/keymaps/jcorrado/readme.md diff --git a/keyboards/planck/keymaps/jcorrado/keymap.c b/keyboards/planck/keymaps/jcorrado/keymap.c new file mode 100644 index 0000000000..35ca76d517 --- /dev/null +++ b/keyboards/planck/keymaps/jcorrado/keymap.c @@ -0,0 +1,115 @@ +/* Copyright 2015-2017 Jack Humbert + * Copyright 2018 Jereme Corrado + * + * 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 + +enum { + _QWERTY = 0, + _NUM, + _SYM_L, + _SYM_R +}; + +#define LMOD_0 LT(_SYM_L, KC_TAB) /* Tab, hold: Sym layer */ +#define LMOD_1 LT(_NUM, KC_ESC) /* Esc, hold: Num layer */ +#define LMOD_2 LSFT_T(KC_CAPS) /* Caps Lock, hold: Left Shift */ + +#define RMOD_0 LT(_SYM_R, KC_BSPC) /* Backspace, hold: Sym layer */ +#define RMOD_1 LT(_NUM, KC_QUOT) /* Quote, hold: Nu layer */ +#define RMOD_2 RSFT_T(KC_ENT) /* Enter, hold: Right Shift */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | Tab/ | Q | W | E | R | T | Y | U | I | O | P | BacSp/ | + * | Sym | | | | | | | | | | | Sym | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | Esc/ | A | S | D | F | G | H | J | K | L | : | " | + * | Num | | | | | | | | | | ; | '/Num | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | CapLk/ | Z | X | C | V | B | N | M | < | > | ? | Shift/ | + * | Shift | | | | | | | | , | . | / | Enter | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | Toggle | ~ | {pipe} | Alt | Ctrl | Space | Space | Ctrl | Alt | { | } | | + * | Num | ` | \ | | | | | | | [ | ] | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + */ + +[_QWERTY] = LAYOUT_planck_grid( + LMOD_0, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, RMOD_0, + LMOD_1, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RMOD_1, + LMOD_2, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RMOD_2, + _______, KC_GRV, KC_BSLS, KC_LALT, KC_LCTL, KC_SPC, KC_SPC, KC_RCTL, KC_RALT, KC_LBRC, KC_RBRC, _______ +), + + +/* + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + * | | | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | Left | Down | Up | Right | | | + * | | | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | Home | PgDown | PgUp | End | | | + * | | | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | | | | | | + * | | | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + */ + +[_NUM] = LAYOUT_planck_grid( + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, + _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + + +/* + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | + | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + * | | | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | + * | | | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | + * | | | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | | | | | | + * | | | | | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + */ + +[_SYM_L] = LAYOUT_planck_grid( + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +[_SYM_R] = LAYOUT_planck_grid( + KC_PLUS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + +}; diff --git a/keyboards/planck/keymaps/jcorrado/readme.md b/keyboards/planck/keymaps/jcorrado/readme.md new file mode 100644 index 0000000000..3a600dea16 --- /dev/null +++ b/keyboards/planck/keymaps/jcorrado/readme.md @@ -0,0 +1,9 @@ +# jcorrado Planck keymap + +A keymap for the Planck modeled after the way I remap my Kinesis +Advantage keyboards. + +The layout is designed to minimize awkward contortions: all modifier and +layer-activation combinations can be performed with either hand's thumb +and pinky. This leaves the other hand free to complete commands +comfortably. From 60f5ce8890453751a00ab63b150dded25c39db42 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Sat, 6 Oct 2018 16:49:04 +0200 Subject: [PATCH 131/269] Keymap: Update keyboards/planck/keymaps/vifon (#4084) * Implement macro recording * Remove off-by-one from the macro recorder * Holding both modifiers enables the third layer * Exit the 3rd layer into one of the secondary ones * Regular Enter and Escape on the secondary layers Useful for the macro recording because the "tap" modifiers always act as modifiers there. * Remove the buffer overflow from the macro recorder When the limit is reached, the backlight blinks with each keypress. * More robust macro recording implementation * Macro record refactoring and improvement - support for a second macro (saved using the end of the macro buffer) - improved reliability * Add comments to my macros * Macro recording: remove a redundant code * Separate the raise+lower layer from the special layer * Add back/forward keys * Bind mouse movement * More readable KC_TRNS * Improve the mouse bindings * Use a convenience macro instead of the low-level ACTION macro * Add mouse to the Dual layer; make most of the layer transparent * New "mouse" layer; clean up the "special" layer * CapsLock, NumLock and ScrollLock on the Special layer * Enable my fix for the stuck modifiers and adjust the dual layer to it * Fix the macro recording after enabling the stuck mods fix * Click with Lower/Raise+Space * Reduce the memory used by the macro recording Previously the auxiliary layers were numbered 30 and 31 which resulted in all 32 array elements being allocated regardless of the actually used layers in the user code. * Optimize source_layers_cache for the cache memory Swapping the array indices should increase the locality of the memory access. * Remove the mouse layer * Use update_tri_layer to simplify the code * Add some custom per-keymap build options * Add ShiftLock * Secure the reset button * Add numeric layer * Remove explicit layer keys on LW and RS layers * Replace Alt+left/right with Back/Forward keys * Sleep/delay key (for macro recording) * App/menu key * Fix stuff after merging to master * Local per-keymap config.h; minor cleanup * Remove the old macro_record.h Replaced with dynamic_macro.h * Adjust my keymap to the current API * Pure Pro Gaming layer Accessible by double tapping the Pure Pro layer. It features switched Lower and Raise layers, for one-handed access to numbers. * Pure Pro Gaming layer: no Mod4, persistent number layer under RShift * Pure Pro Gaming layer activated with long press, not double press * Reduce the size of the vifon keymap See: issue #930 * Increase the dynamic macro buffer The default was actually decreased. The actual used value didn't change. * Add the context menu key * No more strange ideas in the gaming layer * Reduce the firmware size by disabling API_SYSEX_ENABLE * Make slash available on the PP layer (replaces the RESET key) * Add a generic "hold this key" macro * Add a missing undef * Turn LGUI in the gaming layer into LW instead of disabling it It's not as disruptive as LGUI and it makes the LW/RS order kind of more consistent (LW on the left, RS on the right). * Refactor the Pure Pro Gaming layer * Try out the 1st party qmk KC_LOCK (vs my own KM_HOLD) * Alternative way to switch keyboard layouts with the left hand * Add dot & slash to the Pure Pro layer (but not to the Gaming layer) * Now that there is a second KM_LW, we can simplify the layout a bit It was confusing to have the modifiers completely swapped. Just moving them is much more natural. * Disable the console now that qmk got bigger * Update the keymap for the modern qmk standards --- keyboards/planck/keymaps/vifon/keymap.c | 179 ++++++++++++++---------- keyboards/planck/keymaps/vifon/rules.mk | 2 + 2 files changed, 105 insertions(+), 76 deletions(-) diff --git a/keyboards/planck/keymaps/vifon/keymap.c b/keyboards/planck/keymaps/vifon/keymap.c index 0fa8d9066f..6398accc21 100644 --- a/keyboards/planck/keymaps/vifon/keymap.c +++ b/keyboards/planck/keymaps/vifon/keymap.c @@ -1,11 +1,5 @@ -#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example" -#include "planck.h" -#ifdef BACKLIGHT_ENABLE -# include "backlight.h" -#endif -#include "timer.h" -#include +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -27,90 +21,98 @@ enum planck_keycodes { KM_LW = SAFE_RANGE, KM_RS, KM_SHLK, /* ShiftLock */ + KM_HOLD, /* Any-key Lock */ KM_RST, /* Reset */ KM_NUM, /* Numeric layer */ KM_SLP, /* Sleep 250 ms */ - KM_PPLR, /* Pure Pro layer */ + KM_PP_GAME, /* Pure Pro Gaming layer */ + KM_PP_HOLD, /* Pure Pro / PP Gaming layer */ DYNAMIC_MACRO_RANGE, }; #include "dynamic_macro.h" -#define _______ KC_TRNS -#define XXXXXXX KC_NO - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* Qwerty */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN0 }, - {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL} -}, -[_CM] = { /* Colemak */ - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {CTL_T(KC_ESC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN0 }, - {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL} -}, -[_PP] = { /* Pure Pro */ - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_RSFT, KC_UP, KC_RCTL}, - {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT} -}, -[_PPG] = { /* Pure Pro: Gaming */ - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, XXXXXXX, _______, KM_RS , _______, _______, KM_LW , _______, _______, _______, _______}, -}, -[_NM] = { /* Numeric */ - {KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, KC_FN0 }, - {_______, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, _______, _______, _______} -}, -[_LW]= { /* LOWER */ - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_ESC, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), KM_NUM, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {_______, LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), KM_SLP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_ENT }, - {_______, BL_TOGG, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[_RS]= { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, - {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), KM_PPLR, KM_RST, KC_ENT }, - {_______, BL_STEP, _______, _______, _______, KC_BTN2, KC_BTN2, _______, KC_MPLY, KC_VOLD, KC_VOLU, _______} -}, -[_DL]= { /* DUAL */ - {_______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, _______}, - {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ACL0, KC_ACL2}, - {_______, _______, KC_BTN2, KC_BTN3, KC_BTN1, KC_WWW_BACK, KC_WWW_FORWARD, KC_MUTE, _______, _______, _______, _______}, - {_______, _______, KC_LGUI, KC_LALT, _______, _______, _______, _______, _______, _______, _______, _______} -}, -[_DYN]= { /* special */ - {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, KC_PAUS}, - {_______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK}, - {KM_SHLK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} -}, -}; - -#undef _______ - -const uint16_t PROGMEM fn_actions[] = { - ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), + [_QW] = LAYOUT_planck_mit( /* Qwerty */ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT), + KC_LCTL, MO(_DYN), KC_LGUI, KC_LALT, KM_LW, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL + ), + [_CM] = LAYOUT_planck_mit( /* Colemak */ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + CTL_T(KC_ESC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT), + KC_LCTL, MO(_DYN), KC_LGUI, KC_LALT, KM_LW, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL + ), + [_PP] = LAYOUT_planck_mit( /* Pure Pro */ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, MT(MOD_RSFT, KC_DOT), KC_UP, MT(MOD_RCTL, KC_SLSH), + KC_LCTL, MO(_DYN), KC_LGUI, KC_LALT, KM_LW, KC_SPC, KM_RS, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT + ), + [_PPG] = LAYOUT_planck_mit( /* Pure Pro: Gaming */ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT, _______, KC_RCTL, + _______, _______, KM_LW, _______, KM_RS, _______, KM_RS , _______, _______, _______, _______ + ), + [_NM] = LAYOUT_planck_mit( /* Numeric */ + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_LSFT, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, MT(MOD_RSFT, KC_ENT), + _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______ + ), + [_LW] = LAYOUT_planck_mit( /* LOWER */ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_ESC, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), KM_NUM, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), KM_SLP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_ENT, + _______, BL_TOGG, _______, _______, _______, KC_BTN1, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + ), + [_RS] = LAYOUT_planck_mit( /* RAISE */ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), KM_PP_HOLD, KM_RST, KC_ENT, + _______, BL_STEP, _______, _______, _______, KC_BTN2, _______, KC_MPLY, KC_VOLD, KC_VOLU, _______ + ), + [_DL] = LAYOUT_planck_mit( /* DUAL */ + _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, _______, + _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ACL0, KC_ACL2, + _______, _______, KC_BTN2, KC_BTN3, KC_BTN1, KC_WWW_BACK, KC_WWW_FORWARD, KC_MUTE, _______, _______, _______, _______, + _______, _______, KC_LGUI, KC_LALT, _______, _______, _______, _______, _______, _______, _______ + ), + [_DYN] = LAYOUT_planck_mit( /* special */ + KM_HOLD, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, KC_PAUS, + KC_LOCK, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK, + KM_SHLK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, KM_PP_GAME, DF(_QW), DF(_PP), _______, _______, _______, _______ + ), }; +/* It's a pseudo-layer composed of two real layers, we need a function for this. */ +void enable_gaming_layer(void) { + default_layer_set((1UL << _PP) | (1UL << _PPG)); +#ifdef BACKLIGHT_ENABLE + backlight_toggle(); + _delay_ms(100); + backlight_toggle(); +#endif +} bool process_record_user(uint16_t keycode, keyrecord_t *record) { static uint16_t key_timer; + static uint8_t ignore_up_events = 0; uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode); if (!process_record_dynamic_macro(macro_kc, record)) { return false; } + if (ignore_up_events > 0 && keycode != MO(_DYN) && keycode != KM_HOLD && !record->event.pressed) { + ignore_up_events -= 1; + return false; + } + switch (keycode) { case KM_LW: if (record->event.pressed) { @@ -133,7 +135,30 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KM_SHLK: register_code(KC_LSFT); break; + case KM_HOLD: + if (!record->event.pressed) { + ignore_up_events += 1; + } + break; case KM_RST: + { + /* Make slash available on the PP layer. */ + if ((1UL << _PP) & default_layer_state) { + int32_t old_default_layer_state = default_layer_state; + int32_t old_layer_state = layer_state; + + layer_state = 0; + default_layer_state = (1UL << _QW); + + process_record(record); + + layer_state = old_layer_state; + default_layer_state = old_default_layer_state; + + return false; + } + } + if (record->event.pressed) { key_timer = timer_read(); } else { @@ -146,15 +171,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } break; - case KM_PPLR: + case KM_PP_GAME: + if (!record->event.pressed) { + enable_gaming_layer(); + } + break; + case KM_PP_HOLD: if (record->event.pressed) { key_timer = timer_read(); } else { if (timer_elapsed(key_timer) >= 250) { - default_layer_set((1UL << _PP) | (1UL << _PPG)); - backlight_toggle(); - _delay_ms(100); - backlight_toggle(); + enable_gaming_layer(); } else { default_layer_set(1UL << _PP); } diff --git a/keyboards/planck/keymaps/vifon/rules.mk b/keyboards/planck/keymaps/vifon/rules.mk index 15a7b736fd..da83096d6b 100644 --- a/keyboards/planck/keymaps/vifon/rules.mk +++ b/keyboards/planck/keymaps/vifon/rules.mk @@ -16,6 +16,8 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +API_SYSEX_ENABLE = no # https://www.reddit.com/r/olkb/comments/5swhij/_/ddie6zq/ +KEY_LOCK_ENABLE = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend From cfa9f6ba6da7e6d3435610d6d3b4b7971d3dd547 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Thu, 4 Oct 2018 10:17:41 -0700 Subject: [PATCH 132/269] Add non-US Hash and Backslash to AutoShift handling --- quantum/process_keycode/process_auto_shift.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantum/process_keycode/process_auto_shift.c b/quantum/process_keycode/process_auto_shift.c index 01d99445b0..0d0930ee67 100644 --- a/quantum/process_keycode/process_auto_shift.c +++ b/quantum/process_keycode/process_auto_shift.c @@ -173,6 +173,8 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) { case KC_DOT: case KC_SLSH: case KC_GRAVE: + case KC_NONUS_BSLASH: + case KC_NONUS_HASH: #endif autoshift_flush(); From 7458ac94897afa7f67d98bc40aa1e090c11c235d Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 6 Oct 2018 17:43:37 -0700 Subject: [PATCH 133/269] Update Contrib doc (#4068) * Add link for style * ignore java * Add example and update link? * Minor fixes * Change 1TBS text * comments --- docs/contributing.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/contributing.md b/docs/contributing.md index 7ed7cd06a5..bcedcaf974 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -57,14 +57,14 @@ Never made an open source contribution before? Wondering how contributions work Most of our style is pretty easy to pick up on, but right now it's not entirely consistent. You should match the style of the code surrounding your change, but if that code is inconsistent or unclear use the following guidelines: * We indent using two spaces (soft tabs) -* We use One True Brace Style +* We use a modified One True Brace Style * Opening Brace: At the end of the same line as the statement that opens the block * Closing Brace: Lined up with the first character of the statement that opens the block * Else If: Place the closing brace at the beginning of the line and the next opening brace at the end of the same line. * Optional Braces: Always include optional braces. * Good: if (condition) { return false; } * Bad: if (condition) return false; -* We use C style comments: `/* */` +* We encourage use of C style comments: `/* */` * Think of them as a story describing the feature * Use them liberally to explain why particular decisions were made. * Do not write obvious comments @@ -72,6 +72,25 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely * In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns. * We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`) +Here is an example for easy reference: + +```c +/* Enums for foo */ +enum foo_state { + FOO_BAR, + FOO_BAZ, +}; + +/* Returns a value */ +int foo(void) { + if (some_condition) { + return FOO_BAR; + } else { + return -1; + } +} +``` + # General Guidelines We have a few different types of changes in QMK, each requiring a different level of rigor. We'd like you to keep the following guidelines in mind no matter what type of change you're making. From f86c0c2643a665dd09bc7a9a2beaaf37f97b9b61 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 6 Oct 2018 17:44:33 -0700 Subject: [PATCH 134/269] Update and clarify Unicode documentation (#4065) * Update and clarify Unicode documentation * Fixed UCIS info based on feedback from algernon * Further clarifications and cleanup * Formatting * Add an example for unicode map * fix AutoHotKey title --- docs/feature_unicode.md | 107 +++++++++++++++++++++++++++++++++------- 1 file changed, 89 insertions(+), 18 deletions(-) diff --git a/docs/feature_unicode.md b/docs/feature_unicode.md index 278b93ad79..f13eed05b8 100644 --- a/docs/feature_unicode.md +++ b/docs/feature_unicode.md @@ -4,45 +4,108 @@ There are three Unicode keymap definition method available in QMK: ## UNICODE_ENABLE -Supports Unicode input up to 0xFFFF. The keycode function is `UC(n)` in -keymap file, where *n* is a 4 digit hexadecimal. +Supports Unicode input up to 0xFFFF. The keycode function is `UC(n)` in keymap file, where *n* is a 4 digit hexadecimal. ## UNICODEMAP_ENABLE -Supports Unicode up to 0xFFFFFFFF. You need to maintain a separate mapping -table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. -The keycode function is `X(n)` where *n* is the array index of the mapping -table. +Supports Unicode up to 0xFFFFFFFF. You need to maintain a separate mapping table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. The keycode function is `X(n)` where *n* is the array index of the mapping table. + +And you may want to have an enum to make reference easier. So you'd want to add something like this to your keymap: + +```c +enum unicode_name { + BANG, // ‽ + IRONY, // ⸮ + SNEK // snke 🐍 +}; + +const uint32_t PROGMEM unicode_map[] = { + [BANG] = 0x0203D, // ‽ + [IRONY] = 0x02E2E, // ⸮ + [SNEK] = 0x1F40D // snke 🐍 +}: +``` + +Make sure that the order for both matches. ## UCIS_ENABLE -TBD +Supports Unicode up to 0xFFFFFFFF. As with `UNICODE_MAP`, you may want to main a mapping table in your keymap file. However, there is no keycodes for this feature, you will have to add a keycode or function to call `qk_ucis_start()`. Once you've run that, you can just type the text for your unicode, and then hit space or enter to complete it, or ESC to cancel it. And if it matches an entry in your table, it will automatically "backspace" the trigger word (from your table) and then will input the unicode sequence. -Unicode input in QMK works by inputing a sequence of characters to the OS, +For instance, you would need to have a table like this in your keymap: + +```c +const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE +( + UCIS_SYM("poop", 0x1f4a9), + UCIS_SYM("rofl", 0x1f923), + UCIS_SYM("kiss", 0x1f619) +); +``` + +You run the function, and then type "rofl" and hit enter, it should backspace remove "rofl" and input the `0x1f923` unicode. + +### Customization + +There are several functions that you can add to your keymap to customize the functionality of this feature. + +* `void qk_ucis_start_user(void)` - This runs when you run the "start" function, and can be used to provide feedback. By default, it types out a keyboard emoji. +* `void qk_ucis_success(uint8_t symbol_index)` - This runs when the unicode input has matched something, and has completed. Default doesn't do anything. +* `void qk_ucis_symbol_fallback (void)` - This runs if the input text doesn't match anything. The default function falls back to trying that input as a unicode code. + +The default code for these are: + +```c +void qk_ucis_start_user(void) { // outputs keyboard emoji + unicode_input_start(); + register_hex(0x2328); + unicode_input_finish(); +} + +void qk_ucis_success(uint8_t symbol_index) { +} + +void qk_ucis_symbol_fallback (void) { // falls back to manual unicode entry + for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) { + uint8_t code = qk_ucis_state.codes[i]; + register_code(code); + unregister_code(code); + wait_ms(UNICODE_TYPE_DELAY); + } +} +``` + +## Unicode Input methods + +Unicode input in QMK works by inputting a sequence of characters to the OS, sort of like macro. Unfortunately, each OS has different ideas on how Unicode is input. This is the current list of Unicode input method in QMK: -* UC_OSX: MacOS Unicode Hex Input support. Works only up to 0xFFFF. Disabled by default. To enable: go to System Preferences -> Keyboard -> Input Sources, and enable Unicode Hex. -* UC_OSX_RALT: Same as UC_OSX, but sends the Right Alt key for unicode input -* UC_LNX: Unicode input method under Linux. Works up to 0xFFFFF. Should work almost anywhere on ibus enabled distros. Without ibus, this works under GTK apps, but rarely anywhere else. -* UC_WIN: (not recommended) Windows built-in Unicode input. To enable: create registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad`, set its value to 1, and reboot. This method is not recommended because of reliability and compatibility issue, use WinCompose method below instead. -* UC_WINC: Windows Unicode input using WinCompose. Requires [WinCompose](https://github.com/samhocevar/wincompose). Works reliably under many (all?) variations of Windows. +* _UC_OSX_: MacOS Unicode Hex Input support. Works only up to 0xFFFF. Disabled by default. To enable: go to System Preferences -> Keyboard -> Input Sources, and enable Unicode Hex. +* _UC_OSX_RALT_: Same as UC_OSX, but sends the Right Alt key for unicode input +* _UC_LNX_: Unicode input method under Linux. Works up to 0xFFFFF. Should work almost anywhere on ibus enabled distros. Without ibus, this works under GTK apps, but rarely anywhere else. +* _UC_WIN_: (not recommended) Windows built-in Unicode input. To enable: create registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad`, set its value to 1, and reboot. This method is not recommended because of reliability and compatibility issue, use WinCompose method below instead. +* _UC_WINC_: Windows Unicode input using WinCompose. Requires [WinCompose](https://github.com/samhocevar/wincompose). Works reliably under many (all?) variations of Windows. -To type multiple characters for things like (ノಠ痊ಠ)ノ彡┻━┻, you can use `send_unicode_hex_string()` much like `SEND_STRING()` except you would use hex values seperated by spaces. +At some point, you need to call `set_unicode_input_mode(x)` to set the correct unicode method. This sets the method that is used to send the unicode, and stores it in EEPROM, so you only need to call this once. + +## `send_unicode_hex_string` + +To type multiple characters for things like (ノಠ痊ಠ)ノ彡┻━┻, you can use `send_unicode_hex_string()` much like `SEND_STRING()` except you would use hex values separate by spaces. For example, the table flip seen above would be `send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B")` There are many ways to get a hex code, but an easy one is [this site](https://r12a.github.io/app-conversion/). Just make sure to convert to hexadecimal, and that is your string. -# Additional Language Support +## Additional Language Support In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware. -# International Characters on Windows +## International Characters on Windows -[AutoHotkey](https://autohotkey.com) allows Windows users to create custom hotkeys among others. +### AutoHotkey allows Windows users to create custom hotkeys among others. -The method does not require Unicode support in the keyboard itself but depends instead of AutoHotkey running in the background. +The method does not require Unicode support in the keyboard itself but depends instead of [AutoHotkey](https://autohotkey.com) running in the background. First you need to select a modifier combination that is not in use by any of your programs. CtrlAltWin is not used very widely and should therefore be perfect for this. @@ -57,3 +120,11 @@ In the default script of AutoHotkey you can define custom hotkeys. The hotkeys above are for the combination CtrlAltGui and CtrlAltGuiShift plus the letter a. AutoHotkey inserts the Text right of `Send, ` when this combination is pressed. + +### US International + +If you enable the US International layout on the system, it will use punctuation to accent the characters. + +For instance, typing "`a" will result in à. + +You can find details on how to enable this [here](https://support.microsoft.com/en-us/help/17424/windows-change-keyboard-layout). From 370fdb89c2b63dafcbbe7deae40189dad26a820f Mon Sep 17 00:00:00 2001 From: Brian Mock Date: Sat, 6 Oct 2018 20:55:48 -0700 Subject: [PATCH 135/269] Keymap: Adds TheVan RoadKit Gamepad Layout (#4090) * adds prototype firmware for wavebeem-gamepad * adds installer script * updates readme * updates title * adds prototype firmware for wavebeem-gamepad * adds installer script * updates readme * updates title * removes unused code * removes more code * simplify code --- .../roadkit/keymaps/wavebeem-gamepad/keymap.c | 10 ++++++ .../keymaps/wavebeem-gamepad/readme.md | 35 +++++++++++++++++++ .../roadkit/keymaps/wavebeem-gamepad/rules.mk | 17 +++++++++ 3 files changed, 62 insertions(+) create mode 100644 keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/keymap.c create mode 100644 keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/readme.md create mode 100644 keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk diff --git a/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/keymap.c new file mode 100644 index 0000000000..dfdded8e7b --- /dev/null +++ b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/keymap.c @@ -0,0 +1,10 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_ortho_4x4( + KC_TAB, KC_Q, KC_W, KC_E, + KC_ESC, KC_A, KC_S, KC_D, + KC_LSFT, KC_Z, KC_X, KC_C, + KC_F, KC_LALT, KC_LCTL, KC_SPC + ), +}; diff --git a/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/readme.md b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/readme.md new file mode 100644 index 0000000000..7eeb07ede1 --- /dev/null +++ b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/readme.md @@ -0,0 +1,35 @@ +![Keymap Diagram](https://i.imgur.com/hRjbhEn.png) + +# Gamepad Layout by @wavebeem + +The concept behind this layout is the left side of a computer keyboard, +optimized with essential keys for playing FPS games. It was designed for TheVan +RoadKit, but it should work for any 4x4 ortholinear keyboard. + +I play with my pinky on `Shift`, thumb on `Space`, and the rest of my fingers on +`W A S D`. I use my thumb for `Control`, `X`, and sometimes `C`. I usually use +`Z` with my ring finger. It also helps to angle my fingers more perpendicular to +the board in order to allow my thumb to more easily access the `Z X C` row. + +The number keys `1 2 3` are missing for weapon switching, but you can usually +switch with the mouse wheel or rebind those to `Z X C` or something else. + +The key `R` for reloading is missing, but I prefer to use my extra mouse buttons +for that. + +I don't really use `Alt` for games, but I kept it around for `Alt-Tab` in +Windows. + +# Keymap Text Diagram + +``` ++-------+-------+-------+-------+ +| Tab | Q | W | E | ++-------+-------+-------+-------+ +| Esc | A | S | D | ++-------+-------+-------+-------+ +| Shift | Z | X | C | ++-------+-------+-------+-------+ +| F | Alt | Ctrl | Space | ++-------+-------+-------+-------+ +``` diff --git a/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk new file mode 100644 index 0000000000..72fd3d30ba --- /dev/null +++ b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk @@ -0,0 +1,17 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend From aa707c6b9e1e60592e8d7434214eb1549ce9053b Mon Sep 17 00:00:00 2001 From: Bramver Date: Sun, 7 Oct 2018 16:36:01 +0200 Subject: [PATCH 136/269] Keymap: Personal Nyquist keymap added. (#4059) * Personal Nyquist keymap added. * Responded to comments for PR. Removed unnecessary imports. Updated way of macros. Removed tick from unicode inputs. * formatting in keymap --- keyboards/nyquist/keymaps/bramver/README.md | 100 +++++++ keyboards/nyquist/keymaps/bramver/config.h | 31 +++ keyboards/nyquist/keymaps/bramver/keymap.c | 281 ++++++++++++++++++++ keyboards/nyquist/keymaps/bramver/rules.mk | 6 + 4 files changed, 418 insertions(+) create mode 100644 keyboards/nyquist/keymaps/bramver/README.md create mode 100644 keyboards/nyquist/keymaps/bramver/config.h create mode 100644 keyboards/nyquist/keymaps/bramver/keymap.c create mode 100644 keyboards/nyquist/keymaps/bramver/rules.mk diff --git a/keyboards/nyquist/keymaps/bramver/README.md b/keyboards/nyquist/keymaps/bramver/README.md new file mode 100644 index 0000000000..2768acdf7d --- /dev/null +++ b/keyboards/nyquist/keymaps/bramver/README.md @@ -0,0 +1,100 @@ +# Nyquist Layout - rev 02 + +Standard qwerty layout. +Limited emoji support and proper mouse settings. + +Mostly based off of my XD75 layout. + +## Keymap + +``` + +/* Base + * ,-----------------------------------------. ,-----------------------------------------. + * | GEsc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | LOW | A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | Z | X | C | V | B | | N | M | , | . | / | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | EMO | Alt | GUI | SPCE |SP_LMS| |SP_RMS|SP_RMS| GUI | Alt | RAI | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + + /* Lower + * ,-----------------------------------------. ,-----------------------------------------. + * | GESC | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | \ | - | = | [ | ] | | [ | ] | - | = | \ | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | ^Z | ^X | ^C | ^V | | | Play | Vol+ | Vol- | Mute | Next | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + +/* Raise + * ,-----------------------------------------. .-----------------------------------------. + * | GESC | | | | | | | | = | / | * | - | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | F9 | F10 | F11 | F12 | | | | 7 | 8 | 9 | + | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F5 | F6 | F7 | F8 | | | | 4 | 5 | 6 | , | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | F1 | F2 | F3 | F4 | | | | 1 | 2 | 3 | . | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | 0 | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + +/* LMOUSE (Lower + Raise) + * ,-----------------------------------------. ,-----------------------------------------. + * | GESC | | Home | End | PGUP | PGDN | | | | | | | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | WH_L | BTN1 | MS_U | BTN2 | WH_U | | | | | | | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | WH_R | MS_L | MS_D | MS_R | WH_D | | | | | | | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | LEFT | DOWN | UP |RIGHT | | | | | | | | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + +/* RMOUSE (Lower + Raise) + * ,-----------------------------------------. ,-----------------------------------------. + * | GESC | | | | | | | PGUP | PGDN | Home | End | | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | | | | | | | WH_U | BTN1 | MS_U | BTN2 | WH_L | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | WH_D | MS_L | MS_D | MS_R | WH_R | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | | | | | | | | LEFT | DOWN | UP |RIGHT | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + +/* Emojis + * ,-----------------------------------------. ,-----------------------------------------. + * | GESC | | | | | | | RSET | | | | | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | CLAP | CUM | BNIS | BUTT | CAR | | FIRE | REDB | MONY | 100 | SOS | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | CELE | PRAY | NAIL | OK | THNK | | UNAM | HEYE | COOL | EYES | SMIR | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | TRIU | SCRM | VOMI | DTIV | EXPL | | HAIR | DANC | STRN | LEFT | RGHT | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ +``` \ No newline at end of file diff --git a/keyboards/nyquist/keymaps/bramver/config.h b/keyboards/nyquist/keymaps/bramver/config.h new file mode 100644 index 0000000000..c908386e28 --- /dev/null +++ b/keyboards/nyquist/keymaps/bramver/config.h @@ -0,0 +1,31 @@ +/* Copyright 2018 darm + * + * 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 + +#define USE_SERIAL +#define MASTER_LEFT + +#define TAPPING_TERM 200 +#define TAPPING_TOGGLE 2 + +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_INTERVAL 16 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_WHEEL_MAX_SPEED 8 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 +#define MOUSEKEY_WHEEL_DELAY 0 diff --git a/keyboards/nyquist/keymaps/bramver/keymap.c b/keyboards/nyquist/keymaps/bramver/keymap.c new file mode 100644 index 0000000000..c5eac853cc --- /dev/null +++ b/keyboards/nyquist/keymaps/bramver/keymap.c @@ -0,0 +1,281 @@ +/* Copyright 2018 darm + * + * 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 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BASE 0 +#define _LOWER 1 +#define _RAISE 2 +#define _LMOUSE 3 +#define _RMOUSE 4 +#define _EMOJI 5 + +enum emoji_map { + UNAM, // unamused 😒 + HEYE, // smiling face with heart shaped eyes 😍 + OK, // ok hand sign 👌 + SMIR, // smirk 😏 + PRAY, // pray 🙏 + CELE, // celebration 🙌 + COOL, // smile with sunglasses 😎 + EYES, // eyes + THNK, // BIG THONK + NAIL, // Nailcare + SOS, // Vuile sos + REDB, // Red B + HNDR, // 100 + MONY, + FIRE, + CAR, + BUTT, + BNIS, + CUM, + CLAP, + TRIU, // Fart from nose + SCRM, + VOMI, + DTIV, // Detective + EXPL, // Brainsplosion + HAIR, // Haircut + DANC, // Salsa dancer + STRN, // Stronk + LEFT, // Point Left + RGHT, // Point Right +}; + +const uint32_t PROGMEM unicode_map[] = { + [UNAM] = 0x1F612, + [HEYE] = 0x1f60d, + [OK] = 0x1F44C, + [SMIR] = 0x1F60F, + [PRAY] = 0x1F64F, + [CELE] = 0x1F64C, + [COOL] = 0x1F60E, + [EYES] = 0x1F440, + [THNK] = 0x1F914, + [NAIL] = 0x1F485, + [SOS] = 0x1F198, + [REDB] = 0x1F171, + [HNDR] = 0x1F4AF, + [MONY] = 0x1F480, + [FIRE] = 0x1F525, + [CAR] = 0x1F697, + [BUTT] = 0x1F351, + [BNIS] = 0x1F346, + [CUM] = 0x1F4A6, + [CLAP] = 0x1F44F, + [TRIU] = 0x1F624, + [SCRM] = 0x1F631, + [VOMI] = 0x1F92E, + [DTIV] = 0x1F575, + [EXPL] = 0x1F92F, + [HAIR] = 0x2640, + [DANC] = 0x1F483, + [STRN] = 0x1F4AA, + [LEFT] = 0x1F448, + [RGHT] = 0x1F449, +}; + +enum custom_keycodes { + CTRL_Z = SAFE_RANGE, + CTRL_X, + CTRL_C, + CTRL_V +}; + +// Enable these functions using FUNC(n) macro. +// const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5 +// [0] = , //Hold for momentary LMouse layer, Tap for Space, +// [1] = , //Hold for momentary RMouse layer, Tap for Space, +// [2] = , //Hold for momentary Lower +// [3] = , //Hold for momentary Raise +// [4] = , //Hold for momentary Emoji +// }; + +#define SP_LMS LT(_LMOUSE, KC_SPC) +#define SP_RMS LT(_RMOUSE, KC_SPC) +#define LOW TT(_LOWER) +#define RAI TT(_RAISE) +#define EMO TT(_EMOJI) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Base + * ,-----------------------------------------. ,-----------------------------------------. + * | GEsc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | LOW | A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | Z | X | C | V | B | | N | M | , | . | / | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | EMO | Alt | GUI | SPCE |SP_LMS| |SP_RMS|SP_RMS| GUI | Alt | RAI | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + [_BASE] = LAYOUT( \ + KC_GESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , /**/ KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC , \ + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , /**/ KC_Y , KC_U , KC_I , KC_O , KC_P , KC_ENT , \ + LOW , KC_A , KC_S , KC_D , KC_F , KC_G , /**/ KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , \ + KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , /**/ KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , \ + KC_LCTL , EMO , KC_LALT , KC_LGUI , KC_SPC , SP_LMS , /**/ SP_RMS , KC_SPC , KC_RGUI , KC_RALT , RAI , KC_RCTL \ + ), + + + /* Lower + * ,-----------------------------------------. ,-----------------------------------------. + * | GESC | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | \ | - | = | [ | ] | | [ | ] | - | = | \ | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | ^Z | ^X | ^C | ^V | | | Play | Vol+ | Vol- | Mute | Next | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + [_LOWER] = LAYOUT( \ + TO(0) , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , /**/ KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , _______ , \ + _______ , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , /**/ KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , _______ , \ + _______ , KC_RCBR , KC_MINS , KC_EQL , KC_LBRC , KC_RBRC , /**/ KC_LBRC , KC_RBRC , KC_MINS , KC_EQL , KC_BSLS , KC_DEL , \ + _______ , CTRL_Z , CTRL_X , CTRL_C , CTRL_V , XXXXXXX , /**/ KC_MPLY , KC_VOLU , KC_VOLD , KC_MUTE , KC_MNXT , _______ , \ + _______ , XXXXXXX , _______ , _______ , _______ , XXXXXXX , /**/ XXXXXXX , _______ , _______ , _______ , XXXXXXX , _______ \ + ), + + /* Raise + * ,-----------------------------------------. .-----------------------------------------. + * | GESC | | | | | | | | = | / | * | - | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | F9 | F10 | F11 | F12 | | | | 7 | 8 | 9 | + | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F5 | F6 | F7 | F8 | | | | 4 | 5 | 6 | , | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | F1 | F2 | F3 | F4 | | | | 1 | 2 | 3 | . | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | 0 | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + [_RAISE] = LAYOUT( \ + TO(0) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ XXXXXXX , KC_EQL , KC_SLSH , KC_ASTR , KC_MINS , _______ , \ + _______ , KC_F9 , KC_F10 , KC_F11 , KC_F12 , XXXXXXX , /**/ XXXXXXX , KC_7 , KC_8 , KC_9 , KC_PLUS , _______ , \ + XXXXXXX , KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX , /**/ XXXXXXX , KC_4 , KC_5 , KC_6 , KC_COMM , KC_DEL , \ + _______ , KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX , /**/ XXXXXXX , KC_1 , KC_2 , KC_3 , KC_DOT , _______ , \ + _______ , XXXXXXX , _______ , _______ , _______ , XXXXXXX , /**/ XXXXXXX , KC_0 , _______ , _______ , _______ , _______ \ + ), + + /* LMOUSE (Lower + Raise) + * ,-----------------------------------------. ,-----------------------------------------. + * | GESC | | Home | End | PGUP | PGDN | | | | | | | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | WH_L | BTN1 | MS_U | BTN2 | WH_U | | | | | | | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | WH_R | MS_L | MS_D | MS_R | WH_D | | | | | | | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | LEFT | DOWN | UP |RIGHT | | | | | | | | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + [_LMOUSE] = LAYOUT( \ + TO(0) , XXXXXXX , KC_HOME , KC_END , KC_PGUP , KC_PGDN , /**/ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , \ + _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , /**/ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , \ + XXXXXXX , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , /**/ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_DEL , \ + _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , XXXXXXX , /**/ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , \ + _______ , XXXXXXX , _______ , _______ , _______ , _______ , /**/ XXXXXXX , _______ , _______ , _______ , XXXXXXX , _______ \ + ), + + /* RMOUSE (Lower + Raise) + * ,-----------------------------------------. ,-----------------------------------------. + * | GESC | | | | | | | PGUP | PGDN | Home | End | | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | | | | | | | WH_U | BTN1 | MS_U | BTN2 | WH_L | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | WH_D | MS_L | MS_D | MS_R | WH_R | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | | | | | | | | LEFT | DOWN | UP |RIGHT | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + [_RMOUSE] = LAYOUT( \ + TO(0) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ KC_PGUP , KC_PGDN , KC_HOME , KC_END , XXXXXXX , _______ , \ + _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ , \ + XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , KC_DEL , \ + _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ XXXXXXX , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , \ + _______ , XXXXXXX , _______ , _______ , _______ , XXXXXXX , /**/ _______ , _______ , _______ , _______ , XXXXXXX , _______ \ + ), + + /* Emojis + * ,-----------------------------------------. ,-----------------------------------------. + * | GESC | | | | | | | RSET | | | | | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | CLAP | CUM | BNIS | BUTT | CAR | | FIRE | REDB | MONY | 100 | SOS | Entr | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | CELE | PRAY | NAIL | OK | THNK | | UNAM | HEYE | COOL | EYES | SMIR | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | TRIU | SCRM | VOMI | DTIV | EXPL | | HAIR | DANC | STRN | LEFT | RGHT | Shft | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl | + * `-----------------------------------------' `-----------------------------------------' + */ + + [_EMOJI] = LAYOUT( \ + TO(0) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ RESET , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , \ + _______ , X(CLAP) , X(CUM) , X(BNIS) , X(BUTT) , X(CAR) , /**/ X(FIRE) , X(REDB) , X(MONY) , X(HNDR) , X(SOS) , _______ , \ + XXXXXXX , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , /**/ X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , KC_DEL , \ + _______ , X(TRIU) , X(SCRM) , X(VOMI) , X(DTIV) , X(EXPL) , /**/ X(HAIR) , X(DANC) , X(STRN) , X(LEFT) , X(RGHT) , _______ , \ + _______ , _______ , _______ , _______ , _______ , XXXXXXX , /**/ XXXXXXX , _______ , _______ , _______ , XXXXXXX , _______ \ + ), + +}; + +void matrix_init_user(void) { + set_unicode_input_mode(UC_LNX); +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + if (record->event.pressed) { + switch(keycode) { + case CTRL_Z: + SEND_STRING(SS_LCTRL("z")); + return false; + case CTRL_X: + SEND_STRING(SS_LCTRL("x")); + return false; + case CTRL_C: + SEND_STRING(SS_LCTRL("c")); + return false; + case CTRL_V: + SEND_STRING(SS_LCTRL("v")); + return false; + } + } + + return true; +} diff --git a/keyboards/nyquist/keymaps/bramver/rules.mk b/keyboards/nyquist/keymaps/bramver/rules.mk new file mode 100644 index 0000000000..d211d7b4cf --- /dev/null +++ b/keyboards/nyquist/keymaps/bramver/rules.mk @@ -0,0 +1,6 @@ +# Build options +MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses +EXTRAKEY_ENABLE = yes # Use system and audio control key codes +TAP_DANCE_ENABLE = no # Use multi-tap features +UNICODEMAP_ENABLE = yes # Emojify me pls +NKRO_ENABLE = yes From be2610b6da8e7466107678a4782ddafac7002b1d Mon Sep 17 00:00:00 2001 From: sbstjn Date: Fri, 5 Oct 2018 23:59:05 +0200 Subject: [PATCH 137/269] feat: Add 68Keys.io --- keyboards/68keys/68keys.c | 6 ++ keyboards/68keys/68keys.h | 20 ++++++ keyboards/68keys/README.md | 23 +++++++ keyboards/68keys/config.h | 42 ++++++++++++ keyboards/68keys/info.json | 81 +++++++++++++++++++++++ keyboards/68keys/keymaps/default/keymap.c | 10 +++ keyboards/68keys/rules.mk | 22 ++++++ 7 files changed, 204 insertions(+) create mode 100644 keyboards/68keys/68keys.c create mode 100644 keyboards/68keys/68keys.h create mode 100644 keyboards/68keys/README.md create mode 100644 keyboards/68keys/config.h create mode 100644 keyboards/68keys/info.json create mode 100644 keyboards/68keys/keymaps/default/keymap.c create mode 100644 keyboards/68keys/rules.mk diff --git a/keyboards/68keys/68keys.c b/keyboards/68keys/68keys.c new file mode 100644 index 0000000000..dcf04e6a3d --- /dev/null +++ b/keyboards/68keys/68keys.c @@ -0,0 +1,6 @@ +#include "68keys.h" + +void matrix_init_kb(void) +{ + matrix_init_user(); +} diff --git a/keyboards/68keys/68keys.h b/keyboards/68keys/68keys.h new file mode 100644 index 0000000000..e8a2c4aeed --- /dev/null +++ b/keyboards/68keys/68keys.h @@ -0,0 +1,20 @@ +#include "quantum.h" + +#define LAYOUT_68_ansi( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, K16, \ + K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, K33, K34, \ + K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \ + K50, K51, K52, K53, K54, K55, K56, K57, K58, K60, K61, K62, K63, \ + K64, K65, K66, K67, K68, K70, K71, K72, K73, K74) \ + { \ + {K00, K01, K02, K03, K04, K05, K06, K07, K08}, \ + {K10, K11, K12, K13, K14, K15, K16, K17, K18}, \ + {K20, K21, K22, K23, K24, K25, K26, K27, K28}, \ + {K30, K31, K32, K33, K34, K35, K36, K37, K38}, \ + {K40, K41, K42, K43, K44, K45, K46, K47, K48}, \ + {K50, K51, K52, K53, K54, K55, K56, K57, K58}, \ + {K60, K61, K62, K63, K64, K65, K66, K67, K68}, \ + { \ + K70, K71, K72, K73, K74 \ + } \ + } diff --git a/keyboards/68keys/README.md b/keyboards/68keys/README.md new file mode 100644 index 0000000000..082a47a755 --- /dev/null +++ b/keyboards/68keys/README.md @@ -0,0 +1,23 @@ +# 68Keys.io + +Custom [68Keys.io](https://68keys.io) DIY keyboard. + +Keyboard Maintainer: [sbstjn](https://sbstjn.com) +Hardware Supported: Pro Micro +Hardware Availability: [DIY Guide](https://68keys.io) + +Make example for this keyboard (after setting up your build environment): + +```bash +$ > cd qmk_firmware/ +$ > make 68keys:default +``` + +Example of flashing this keyboard: + +```bash +$ > cd qmk_firmware/ +$ > make 68keys:default:avrdude +``` + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/68keys/config.h b/keyboards/68keys/config.h new file mode 100644 index 0000000000..07c87563d3 --- /dev/null +++ b/keyboards/68keys/config.h @@ -0,0 +1,42 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0A0C +#define DEVICE_VER 0x0068 +#define MANUFACTURER 68Keys.io +#define PRODUCT The 68Keys.io Keyboard +#define DESCRIPTION A 68 keys mechanical keyboard + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 9 + +#define MATRIX_ROW_PINS \ + { \ + B6, B2, B3, B1, F7, F6, F5, F4 \ + } +#define MATRIX_COL_PINS \ + { \ + D3, D2, D1, D0, D4, C6, D7, E6, B4 \ + } +#define UNUSED_PINS + +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B5 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 + +#define DEBOUNCING_DELAY 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 + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) diff --git a/keyboards/68keys/info.json b/keyboards/68keys/info.json new file mode 100644 index 0000000000..b24e22b0a1 --- /dev/null +++ b/keyboards/68keys/info.json @@ -0,0 +1,81 @@ +{ + "keyboard_name": "68Keys.io", + "url": "https://68keys.io", + "maintainer": "qmk", + "width": 17.25, + "height": 5, + "layouts": { + "LAYOUT_68_ansi": { + "layout": [ + { "label": "~", "x": 0, "y": 0 }, + { "label": "!", "x": 1, "y": 0 }, + { "label": "@", "x": 2, "y": 0 }, + { "label": "#", "x": 3, "y": 0 }, + { "label": "$", "x": 4, "y": 0 }, + { "label": "%", "x": 5, "y": 0 }, + { "label": "^", "x": 6, "y": 0 }, + { "label": "&", "x": 7, "y": 0 }, + { "label": "*", "x": 8, "y": 0 }, + { "label": "(", "x": 9, "y": 0 }, + { "label": ")", "x": 10, "y": 0 }, + { "label": "_", "x": 11, "y": 0 }, + { "label": "+", "x": 12, "y": 0 }, + { "label": "Backspace", "x": 13, "y": 0, "w": 2 }, + { "label": "ESC", "x": 15.25, "y": 0 }, + { "label": "PGUP", "x": 16.25, "y": 0 }, + { "label": "Tab", "x": 0, "y": 1, "w": 1.5 }, + { "label": "Q", "x": 1.5, "y": 1 }, + { "label": "W", "x": 2.5, "y": 1 }, + { "label": "E", "x": 3.5, "y": 1 }, + { "label": "R", "x": 4.5, "y": 1 }, + { "label": "T", "x": 5.5, "y": 1 }, + { "label": "Y", "x": 6.5, "y": 1 }, + { "label": "U", "x": 7.5, "y": 1 }, + { "label": "I", "x": 8.5, "y": 1 }, + { "label": "O", "x": 9.5, "y": 1 }, + { "label": "P", "x": 10.5, "y": 1 }, + { "label": "{", "x": 11.5, "y": 1 }, + { "label": "}", "x": 12.5, "y": 1 }, + { "label": "|", "x": 13.5, "y": 1, "w": 1.5 }, + { "label": "DEL", "x": 15.25, "y": 1 }, + { "label": "PGDN", "x": 16.25, "y": 1 }, + { "label": "Caps Lock", "x": 0, "y": 2, "w": 1.75 }, + { "label": "A", "x": 1.75, "y": 2 }, + { "label": "S", "x": 2.75, "y": 2 }, + { "label": "D", "x": 3.75, "y": 2 }, + { "label": "F", "x": 4.75, "y": 2 }, + { "label": "G", "x": 5.75, "y": 2 }, + { "label": "H", "x": 6.75, "y": 2 }, + { "label": "J", "x": 7.75, "y": 2 }, + { "label": "K", "x": 8.75, "y": 2 }, + { "label": "L", "x": 9.75, "y": 2 }, + { "label": ":", "x": 10.75, "y": 2 }, + { "label": "\"", "x": 11.75, "y": 2 }, + { "label": "Enter", "x": 12.75, "y": 2, "w": 2.25 }, + { "label": "Shift", "x": 0, "y": 3, "w": 2.25 }, + { "label": "Z", "x": 2.25, "y": 3 }, + { "label": "X", "x": 3.25, "y": 3 }, + { "label": "C", "x": 4.25, "y": 3 }, + { "label": "V", "x": 5.25, "y": 3 }, + { "label": "B", "x": 6.25, "y": 3 }, + { "label": "N", "x": 7.25, "y": 3 }, + { "label": "M", "x": 8.25, "y": 3 }, + { "label": "<", "x": 9.25, "y": 3 }, + { "label": ">", "x": 10.25, "y": 3 }, + { "label": "?", "x": 11.25, "y": 3 }, + { "label": "Shift", "x": 12.25, "y": 3, "w": 2.75 }, + { "x": 15.25, "y": 3 }, + { "label": "CTRL", "x": 0, "y": 4, "w": 1.25 }, + { "label": "ALT", "x": 1.25, "y": 4, "w": 1.25 }, + { "label": "GUI", "x": 2.5, "y": 4, "w": 1.25 }, + { "x": 3.75, "y": 4, "w": 6.25 }, + { "label": "GUI", "x": 10, "y": 4, "w": 1.25 }, + { "label": "ALT", "x": 11.25, "y": 4, "w": 1.25 }, + { "label": "CTRL", "x": 12.5, "y": 4, "w": 1.25 }, + { "x": 14.25, "y": 4 }, + { "x": 15.25, "y": 4 }, + { "x": 16.25, "y": 4 } + ] + } + } +} diff --git a/keyboards/68keys/keymaps/default/keymap.c b/keyboards/68keys/keymaps/default/keymap.c new file mode 100644 index 0000000000..8f23d22462 --- /dev/null +++ b/keyboards/68keys/keymaps/default/keymap.c @@ -0,0 +1,10 @@ +#include QMK_KEYBOARD_H +#include "68keys.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_68_ansi( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, + KC_CAPSLOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)}; diff --git a/keyboards/68keys/rules.mk b/keyboards/68keys/rules.mk new file mode 100644 index 0000000000..f1a56d496d --- /dev/null +++ b/keyboards/68keys/rules.mk @@ -0,0 +1,22 @@ +LAYOUTS = 68_ansi + +MCU = atmega32u4 +F_CPU = 16000000 +ARCH = AVR8 +F_USB = $(F_CPU) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT +BOOTLOADER = atmel-dfu + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration (+1000) +MOUSEKEY_ENABLE = no # Mouse keys (+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control (+450) +CONSOLE_ENABLE = no # Console for debug (+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI controls +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 + From 914d42acd01cae9fa03d9368f9316a1e1017fb17 Mon Sep 17 00:00:00 2001 From: chipperdoodles Date: Sun, 7 Oct 2018 11:23:41 -0700 Subject: [PATCH 138/269] Update Bluetooth docs (#4062) * syncing upstream * Bluetooth Doc update More Description in bluetooth section, Addition to Config options rules.mk section. * merge upstream chibios * lib/chibios checkout * Additional EZ key Section added back EZ-Key diy link, Cleaned up some errors --- docs/config_options.md | 4 +++- docs/feature_bluetooth.md | 32 +++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/docs/config_options.md b/docs/config_options.md index 072857727b..4678a7146c 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -245,7 +245,9 @@ Use these to enable or disable building certain features. The more you have enab * `UNICODE_ENABLE` * Unicode * `BLUETOOTH_ENABLE` - * Enable Bluetooth with the Adafruit EZ-Key HID + * Legacy option to Enable Bluetooth with the Adafruit EZ-Key HID. See BLUETOOTH +* `BLUETOOTH` + * Current options are AdafruitEzKey, AdafruitBLE, RN42 * `SPLIT_KEYBOARD` * Enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common * `WAIT_FOR_USB` diff --git a/docs/feature_bluetooth.md b/docs/feature_bluetooth.md index f647adc727..3ffbfa0680 100644 --- a/docs/feature_bluetooth.md +++ b/docs/feature_bluetooth.md @@ -1,10 +1,40 @@ # Bluetooth -## Bluetooth Functionality +## Bluetooth Known Supported Hardware +Currently Bluetooth support is limited to AVR based chips. For Bluetooth 2.1 Qmk has support for RN-42 HID Firmware and Bluefruit EZ Key the later of which is not produced anymore. For more recent BLE protocols currently only the Adafruit Bluefruit SPI friend is directly supported. BLE is needed to connect to iOS devices. Note iOS does not support Mouse Input. + +|Board |Bluetooth Protocol |Connection Type |Rules.mk |Bluetooth Chip| +|----------------------------------------------------------------|----------------------------|----------------|---------------------------|--------------| +|[Adafruit EzKey HID]("https://www.adafruit.com/product/1535") |Bluetooth Classic | UART | BLUETOOTH = AdafruitEZKey | | +|Rover Networks RN-42 (Sparkfun Bluesmirf) |Bluetooth Classic | UART | BLUETOOTH = RN42 | RN-42 | +|[Bluefruit LE SPI Friend](https://www.adafruit.com/product/2633)|Bluetooth Low Energy | SPI | BLUETOOTH = AdafruitBLE | nRF5182 | + +Not Supported Yet but possible: +* [Bluefruit LE UART Friend](https://www.adafruit.com/product/2479). [Possible tmk implementation found in](https://github.com/tmk/tmk_keyboard/issues/514) +* HC-05 boards flashed with RN-42 firmware. They apparently both use the CSR BC417 Chip. Flashing it with RN-42 firmware gives it HID capability. +* [Sparkfun Bluetooth mate](https://www.sparkfun.com/products/14839) +* HM-13 based boards + +### Adafruit BLE SPI Friend +Currently The only bluetooth chipset supported by QMK is the Adafruit Bluefruit SPI Friend. It's a Nordic nRF5182 based chip running Adafruit's custom firmware. Data is transmitted via Adafruit's SDEP over Hardware SPI. The [Feather 32u4 Bluefruit LE](https://www.adafruit.com/product/2829) is supported as it's an AVR mcu connected via SPI to the Nordic BLE chip with Adafruit firmware. If Building a custom board with the SPI friend it would be easiest to just use the pin selection that the 32u4 feather uses but you can change the pins in the config.h options with the following defines: +* #define AdafruitBleResetPin D4 +* #define AdafruitBleCSPin B4 +* #define AdafruitBleIRQPin E6 + +A Bluefruit UART friend can be converted to an SPI friend, however this [requires](https://github.com/qmk/qmk_firmware/issues/2274) some reflashing and soldering directly to the MDBT40 chip. + +## Adafruit EZ-Key hid This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will. + +## Bluetooth Rules.mk Options +Use only one of these +* BLUETOOTH_ENABLE = yes (Legacy Option) +* BLUETOOTH = RN42 +* BLUETOOTH = AdafruitEZKey +* BLUETOOTH = AdafruitBLE ## Bluetooth Keycodes From 98a63d8d6e91fcd0de4e8496d21ceef17b81d5d1 Mon Sep 17 00:00:00 2001 From: yiancar Date: Mon, 8 Oct 2018 23:27:04 +0100 Subject: [PATCH 139/269] DC01 updates and I2C avr speed overwrite (#4088) * DC01 updates and I2C avr speed overwrite - General updating of DC01 - Made F_SCL define in AVR I2C driver overwritable from config.h * Update drivers/avr/i2c_master.c --- drivers/avr/i2c_master.c | 2 ++ keyboards/dc01/left/config.h | 2 ++ keyboards/dc01/left/matrix.c | 41 ++++++++++++------------------------ 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/drivers/avr/i2c_master.c b/drivers/avr/i2c_master.c index 47c6f8e6c6..a04e6570d7 100755 --- a/drivers/avr/i2c_master.c +++ b/drivers/avr/i2c_master.c @@ -8,7 +8,9 @@ #include "i2c_master.h" #include "timer.h" +#ifndef F_SCL #define F_SCL 400000UL // SCL frequency +#endif #define Prescaler 1 #define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16 ) / 2) diff --git a/keyboards/dc01/left/config.h b/keyboards/dc01/left/config.h index 68484d8355..e3d49404ea 100644 --- a/keyboards/dc01/left/config.h +++ b/keyboards/dc01/left/config.h @@ -46,6 +46,8 @@ along with this program. If not, see . #define MATRIX_COL_PINS { F4, F1, F0, F7, F6, F5 } #define UNUSED_PINS +#define F_SCL 300000UL + /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/dc01/left/matrix.c b/keyboards/dc01/left/matrix.c index 7923766359..806583580d 100644 --- a/keyboards/dc01/left/matrix.c +++ b/keyboards/dc01/left/matrix.c @@ -43,7 +43,7 @@ static uint8_t error_count_arrow = 0; /* Set 0 if debouncing isn't needed */ #ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 +# define DEBOUNCING_DELAY 5 #endif #if (DEBOUNCING_DELAY > 0) @@ -135,10 +135,7 @@ uint8_t matrix_cols(void) { return MATRIX_COLS; } - i2c_status_t i2c_transaction(uint8_t address, uint32_t mask, uint8_t col_offset); -//uint8_t i2c_transaction_numpad(void); -//uint8_t i2c_transaction_arrow(void); //this replases tmk code void matrix_setup(void){ @@ -220,7 +217,7 @@ uint8_t matrix_scan(void) matrix[i] &= 0x3F; //mask bits to keep } } - }else{ //no error + }else{ //no error error_count_right = 0; } @@ -440,40 +437,28 @@ static void unselect_cols(void) // Complete rows from other modules over i2c i2c_status_t i2c_transaction(uint8_t address, uint32_t mask, uint8_t col_offset) { i2c_status_t err = i2c_start((address << 1) | I2C_WRITE, 10); - if (err) return err; - i2c_write(0x01, 10); - if (err) return err; + i2c_write(0x01, 10); //request data in address 1 - i2c_start((address << 1) | I2C_READ, 10); - if (err) return err; + i2c_start((address << 1) | I2C_READ, 5); err = i2c_read_ack(10); if (err == 0x55) { //synchronization byte - for (uint8_t i = 0; i < MATRIX_ROWS-1 ; i++) { //assemble slave matrix in main matrix - matrix[i] &= mask; //mask bits to keep - err = i2c_read_ack(10); - if (err >= 0) { - matrix[i] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end - } else { - return err; - } - } - //last read request must be followed by a NACK - matrix[MATRIX_ROWS - 1] &= mask; //mask bits to keep - err = i2c_read_nack(10); - if (err >= 0) { + for (uint8_t i = 0; i < MATRIX_ROWS-1 ; i++) { //assemble slave matrix in main matrix + matrix[i] &= mask; //mask bits to keep + err = i2c_read_ack(10); + matrix[i] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end + } + //last read request must be followed by a NACK + matrix[MATRIX_ROWS - 1] &= mask; //mask bits to keep + err = i2c_read_nack(10); matrix[MATRIX_ROWS - 1] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end - } else { - return err; - } + } else { i2c_stop(10); return 1; } i2c_stop(10); - if (err) return err; - return 0; } \ No newline at end of file From be227b43174f6ec9effbbfc25eb9a853b42cbf2f Mon Sep 17 00:00:00 2001 From: captsis <34025500+captsis@users.noreply.github.com> Date: Mon, 8 Oct 2018 15:20:31 -1000 Subject: [PATCH 140/269] Keyboard: add orange75 (#4093) * New Keyboard: orange75 Co-Authored-By: fox-lab * Update keyboards/orange75/info.json corrected * #4093 corrections * added del to layout again * clarified supported hardware * directives... * Update keyboards/orange75/config.h * Update keyboards/orange75/readme.md --- keyboards/orange75/config.h | 35 ++++++++++ keyboards/orange75/info.json | 12 ++++ keyboards/orange75/keymaps/default/keymap.c | 53 +++++++++++++++ keyboards/orange75/orange75.c | 1 + keyboards/orange75/orange75.h | 29 ++++++++ keyboards/orange75/readme.md | 16 +++++ keyboards/orange75/rules.mk | 73 +++++++++++++++++++++ 7 files changed, 219 insertions(+) create mode 100644 keyboards/orange75/config.h create mode 100644 keyboards/orange75/info.json create mode 100644 keyboards/orange75/keymaps/default/keymap.c create mode 100644 keyboards/orange75/orange75.c create mode 100644 keyboards/orange75/orange75.h create mode 100644 keyboards/orange75/readme.md create mode 100644 keyboards/orange75/rules.mk diff --git a/keyboards/orange75/config.h b/keyboards/orange75/config.h new file mode 100644 index 0000000000..7d1b497be0 --- /dev/null +++ b/keyboards/orange75/config.h @@ -0,0 +1,35 @@ +#pragma once + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEEB +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Fox-Lab +#define PRODUCT Orange75 +#define DESCRIPTION Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 15 +#define MATRIX_COLS 6 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { E6,F0, F1, F4, F5, F6, F7, C7, C6, B6, B4, D7, D4, D5, D6 } +#define MATRIX_COL_PINS { D3, D2, D1, D0, B7, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* number of backlight levels */ +#define BACKLIGHT_PIN B5 +#define BACKLIGHT_LEVELS 3 + + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 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/orange75/info.json b/keyboards/orange75/info.json new file mode 100644 index 0000000000..093b4cd4ec --- /dev/null +++ b/keyboards/orange75/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Orange75", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 6.25, + "layouts": { + "LAYOUT": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Home", "x":15, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"End", "x":15, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Page Up", "x":15, "y":3.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, {"label":"Up", "x":14, "y":4.25}, {"label":"Page Down", "x":15, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"label":"Alt", "x":10, "y":5.25, "w":1.25}, {"label":"Fn", "x":11.25, "y":5.25, "w":1.25}, {"label":"Left", "x":13, "y":5.25}, {"label":"Down", "x":14, "y":5.25}, {"label":"Right", "x":15, "y":5.25}] + } + } +} \ No newline at end of file diff --git a/keyboards/orange75/keymaps/default/keymap.c b/keyboards/orange75/keymaps/default/keymap.c new file mode 100644 index 0000000000..50aaf718ec --- /dev/null +++ b/keyboards/orange75/keymaps/default/keymap.c @@ -0,0 +1,53 @@ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + LAYOUT( + KC_ESC, KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11, KC_F12, KC_DEL, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, LT(1, KC_NO), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, LT(1, KC_NO), KC_LEFT, KC_DOWN, KC_RGHT), + + LAYOUT( + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, + _______, _______, _______, _______, _______, _______, _______, _______, _______) +}; + + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + DDRB |= (1 << 0); PORTB &= ~(1 << 0); + } else { + DDRB &= ~(1 << 0); PORTB &= ~(1 << 0); + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 1); PORTB &= ~(1 << 1); + } else { + DDRB &= ~(1 << 1); PORTB &= ~(1 << 1); + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + DDRB |= (1 << 2); PORTB &= ~(1 << 2); + } else { + DDRB &= ~(1 << 2); PORTB &= ~(1 << 2); + } +} \ No newline at end of file diff --git a/keyboards/orange75/orange75.c b/keyboards/orange75/orange75.c new file mode 100644 index 0000000000..2d5f73048a --- /dev/null +++ b/keyboards/orange75/orange75.c @@ -0,0 +1 @@ +#include "orange75.h" \ No newline at end of file diff --git a/keyboards/orange75/orange75.h b/keyboards/orange75/orange75.h new file mode 100644 index 0000000000..1b351a595c --- /dev/null +++ b/keyboards/orange75/orange75.h @@ -0,0 +1,29 @@ +#pragma once + +#include "quantum.h" + +#define LAYOUT( \ + K000, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, \ + K500, K501, K502, K506, K510, K511, K512, K513, K514 \ +) { \ + { K000, K100, K200, K300, K400, K500 }, \ + { KC_NO, K101, K201, K301, K401, K501 }, \ + { K002, K102, K202, K302, K402, K502 }, \ + { K003, K103, K203, K303, K403, KC_NO}, \ + { K004, K104, K204, K304, K404, KC_NO}, \ + { K005, K105, K205, K305, K405, KC_NO}, \ + { K006, K106, K206, K306, K406, K506 }, \ + { K007, K107, K207, K307, K407, KC_NO}, \ + { K008, K108, K208, K308, K408, KC_NO}, \ + { K009, K109, K209, K309, K409, KC_NO}, \ + { K010, K110, K210, K310, K410, K510 }, \ + { K011, K111, K211, K311, K411, K511 }, \ + { K012, K112, K212, K312, K412, K512 }, \ + { K013, K113, K213, KC_NO,K413, K513 }, \ + { K014, K114, K214, K314, K414, K514 } \ +} + diff --git a/keyboards/orange75/readme.md b/keyboards/orange75/readme.md new file mode 100644 index 0000000000..9106744062 --- /dev/null +++ b/keyboards/orange75/readme.md @@ -0,0 +1,16 @@ +# Orange75 + +![Orange75](https://i.imgur.com/eAfiwwM.jpg) + +A 75% made by Fox Lab. + +Keyboard Maintainer: [captsis](https://github.com/captsis), [fox-lab](https://github.com/fox-lab) +Hardware Supported: Orange75 powered by the ATmega32U4 +Hardware Availability: [zFrontier](https://en.zfrontier.com/collections/keyboards/products/foxlab-orange75), [Geekhack GB](https://geekhack.org/index.php?topic=95080.0) + + +Make example for this keyboard (after setting up your build environment): + + make orange75:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/orange75/rules.mk b/keyboards/orange75/rules.mk new file mode 100644 index 0000000000..0f9672a51c --- /dev/null +++ b/keyboards/orange75/rules.mk @@ -0,0 +1,73 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = no \ No newline at end of file From 42add5450d453d734833a7b978e4ab6907ab1fe1 Mon Sep 17 00:00:00 2001 From: Grady Sigler Date: Mon, 8 Oct 2018 20:50:42 -0600 Subject: [PATCH 141/269] Keymap: Iris Keymap (#4100) * IRIS Keyboard Keymap I wanted a keymap that really changed things up. I also found that as a programmer I need as many symbols as I can get. * Make cmd-option-escape work on a mac * Add more prettyfication. * Add other types of hold * More work on the layer keys * tweaks * More tweaks. * more tweaks * Remove OSL/OSM they didnt seem to work very well --- keyboards/iris/keymaps/gsigler/config.h | 33 +++++++++++ keyboards/iris/keymaps/gsigler/keymap.c | 74 +++++++++++++++++++++++++ keyboards/iris/keymaps/gsigler/rules.mk | 3 + 3 files changed, 110 insertions(+) create mode 100644 keyboards/iris/keymaps/gsigler/config.h create mode 100644 keyboards/iris/keymaps/gsigler/keymap.c create mode 100644 keyboards/iris/keymaps/gsigler/rules.mk diff --git a/keyboards/iris/keymaps/gsigler/config.h b/keyboards/iris/keymaps/gsigler/config.h new file mode 100644 index 0000000000..e1793fb1b8 --- /dev/null +++ b/keyboards/iris/keymaps/gsigler/config.h @@ -0,0 +1,33 @@ +/* +Copyright 2018 Grady Sigler + +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 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define AUTO_SHIFT_TIMEOUT 95 +#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */ +#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */ diff --git a/keyboards/iris/keymaps/gsigler/keymap.c b/keyboards/iris/keymaps/gsigler/keymap.c new file mode 100644 index 0000000000..f8753cbdcc --- /dev/null +++ b/keyboards/iris/keymaps/gsigler/keymap.c @@ -0,0 +1,74 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +enum iris_layers { + _QWERTY, + _LOWER, + _RAISE +}; + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + //| `/~ | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | _/- | + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + //| TAB | Q | W | E | R | T | | Y | U | I | O | P | +/= | + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + //| RAISE | A | S | D | F | G | | H | J | K | L | :/; | "/' | + RAISE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + //| LOWER | Z | X | C | V | B | ESC | | ALT | N | M | /. | ?-/ | |-\ | + LOWER, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + // | CTRL | COMMAND| BKSPACE| | SPACE | ENTER | SHIFT | + KC_LCTL, KC_LGUI, KC_BSPC, KC_SPC, KC_ENT, KC_LSFT + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), +//KC_LALT ALT + [_RAISE] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + //| `/~ | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + //| TAB | ! | @ | { | } | | | | | | ↑ | | | F12 | + KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, KC_F12, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + //| RAISE | # | $ | ( | ) | ` | | ? | ← | ↓ | → | | VOLUP | + KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_QUES, KC_LEFT,KC_DOWN, KC_RGHT, XXXXXXX, KC__VOLUP, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + //| | % | ^ | [ | ] | ~ | ESC | ALT | & | | | | MUTE | VOLDN | + XXXXXXX, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, XXXXXXX, XXXXXXX,XXXXXXX, KC__MUTE,KC__VOLDOWN, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + // | CTRL | COMMAND| BKSPACE| | SPACE | ENTER | SHIFT| + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_LOWER] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + //| | | | | | | | | 7 | 8 | 9 | * | / | + KC_ASUP, KC_ASON, KC_ASRP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + //| | | | | | | | | 4 | 5 | 6 | + | - | + KC_ASDN, KC_ASOFF, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PMNS, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + //| | | | | | | | | 1 | 2 | 3 | | | + XXXXXXX, KC_ASTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, XXXXXXX, XXXXXXX, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + //| LOWER | | | | | | ESC | | ALT | | 0 | . | ENTER | = | | + KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_TRNS, KC_TRNS, XXXXXXX, KC_P0, KC_PDOT, KC_PENT, KC_PEQL, XXXXXXX, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + // | CTRL | COMMAND| BKSPACE | | SPACE | ENTER | SHIFT | + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + +}; diff --git a/keyboards/iris/keymaps/gsigler/rules.mk b/keyboards/iris/keymaps/gsigler/rules.mk new file mode 100644 index 0000000000..0abc28fc59 --- /dev/null +++ b/keyboards/iris/keymaps/gsigler/rules.mk @@ -0,0 +1,3 @@ +RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = yes +AUTO_SHIFT_ENABLE = yes From 04e28470bcf22b05ca2bd52746c2254cae281836 Mon Sep 17 00:00:00 2001 From: Brian Choromanski Date: Mon, 8 Oct 2018 09:48:44 -0400 Subject: [PATCH 142/269] Added OSL to list of layer toggles --- docs/feature_advanced_keycodes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index 5f30359e0d..0f5b8618a8 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -27,6 +27,7 @@ These functions allow you to activate layers in various ways. Note that layers a * `MO(layer)` - momentarily activates *layer*. As soon as you let go of the key, the layer is deactivated. * `LM(layer, mod)` - Momentarily activates *layer* (like `MO`), but with modifier(s) *mod* active. Only supports layers 0-15 and the left modifiers. * `LT(layer, kc)` - momentarily activates *layer* when held, and sends *kc* when tapped. +* `OSL(layer)` - momentarily activates *layer* until the next key is pressed. * `TG(layer)` - toggles *layer*, activating it if it's inactive and vice versa * `TO(layer)` - activates *layer* and de-activates all other layers (except your default layer). This function is special, because instead of just adding/removing one layer to your active layer stack, it will completely replace your current active layers, uniquely allowing you to replace higher layers with a lower one. This is activated on keydown (as soon as the key is pressed). * `TT(layer)` - Layer Tap-Toggle. If you hold the key down, *layer* is activated, and then is de-activated when you let go (like `MO`). If you repeatedly tap it, the layer will be toggled on or off (like `TG`). It needs 5 taps by default, but you can change this by defining `TAPPING_TOGGLE` -- for example, `#define TAPPING_TOGGLE 2` to toggle on just two taps. From 7f6bb82b9daf51fb79972871e9f85696f783aa7a Mon Sep 17 00:00:00 2001 From: Brian Choromanski Date: Tue, 9 Oct 2018 13:20:09 -0400 Subject: [PATCH 143/269] Added link to One Shot Keys --- docs/feature_advanced_keycodes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index 0f5b8618a8..2ca533a282 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -27,7 +27,7 @@ These functions allow you to activate layers in various ways. Note that layers a * `MO(layer)` - momentarily activates *layer*. As soon as you let go of the key, the layer is deactivated. * `LM(layer, mod)` - Momentarily activates *layer* (like `MO`), but with modifier(s) *mod* active. Only supports layers 0-15 and the left modifiers. * `LT(layer, kc)` - momentarily activates *layer* when held, and sends *kc* when tapped. -* `OSL(layer)` - momentarily activates *layer* until the next key is pressed. +* `OSL(layer)` - momentarily activates *layer* until the next key is pressed. See [One Shot Keys.](#one-shot-keys) * `TG(layer)` - toggles *layer*, activating it if it's inactive and vice versa * `TO(layer)` - activates *layer* and de-activates all other layers (except your default layer). This function is special, because instead of just adding/removing one layer to your active layer stack, it will completely replace your current active layers, uniquely allowing you to replace higher layers with a lower one. This is activated on keydown (as soon as the key is pressed). * `TT(layer)` - Layer Tap-Toggle. If you hold the key down, *layer* is activated, and then is de-activated when you let go (like `MO`). If you repeatedly tap it, the layer will be toggled on or off (like `TG`). It needs 5 taps by default, but you can change this by defining `TAPPING_TOGGLE` -- for example, `#define TAPPING_TOGGLE 2` to toggle on just two taps. From 5a127293e7dfb348102afcb47d0e21b6fefad50a Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 6 Oct 2018 18:02:02 -0700 Subject: [PATCH 144/269] Fix formatting in Unicode text --- docs/feature_unicode.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/feature_unicode.md b/docs/feature_unicode.md index f13eed05b8..b1527b848a 100644 --- a/docs/feature_unicode.md +++ b/docs/feature_unicode.md @@ -82,11 +82,11 @@ sort of like macro. Unfortunately, each OS has different ideas on how Unicode is This is the current list of Unicode input method in QMK: -* _UC_OSX_: MacOS Unicode Hex Input support. Works only up to 0xFFFF. Disabled by default. To enable: go to System Preferences -> Keyboard -> Input Sources, and enable Unicode Hex. -* _UC_OSX_RALT_: Same as UC_OSX, but sends the Right Alt key for unicode input -* _UC_LNX_: Unicode input method under Linux. Works up to 0xFFFFF. Should work almost anywhere on ibus enabled distros. Without ibus, this works under GTK apps, but rarely anywhere else. -* _UC_WIN_: (not recommended) Windows built-in Unicode input. To enable: create registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad`, set its value to 1, and reboot. This method is not recommended because of reliability and compatibility issue, use WinCompose method below instead. -* _UC_WINC_: Windows Unicode input using WinCompose. Requires [WinCompose](https://github.com/samhocevar/wincompose). Works reliably under many (all?) variations of Windows. +* __UC_OSX__: MacOS Unicode Hex Input support. Works only up to 0xFFFF. Disabled by default. To enable: go to System Preferences -> Keyboard -> Input Sources, and enable Unicode Hex. +* __UC_OSX_RALT__: Same as UC_OSX, but sends the Right Alt key for unicode input +* __UC_LNX__: Unicode input method under Linux. Works up to 0xFFFFF. Should work almost anywhere on ibus enabled distros. Without ibus, this works under GTK apps, but rarely anywhere else. +* __UC_WIN__: (not recommended) Windows built-in Unicode input. To enable: create registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad`, set its value to 1, and reboot. This method is not recommended because of reliability and compatibility issue, use WinCompose method below instead. +* __UC_WINC__: Windows Unicode input using WinCompose. Requires [WinCompose](https://github.com/samhocevar/wincompose). Works reliably under many (all?) variations of Windows. At some point, you need to call `set_unicode_input_mode(x)` to set the correct unicode method. This sets the method that is used to send the unicode, and stores it in EEPROM, so you only need to call this once. From 1df10ae3bfc146805c75b06dc0c126cd1ef3a60a Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 6 Oct 2018 07:57:55 -0700 Subject: [PATCH 145/269] Update default Planck layout to be more in line with standard conventions --- keyboards/planck/keymaps/default/config.h | 6 +----- keyboards/planck/keymaps/default/keymap.c | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/keyboards/planck/keymaps/default/config.h b/keyboards/planck/keymaps/default/config.h index fbd2fdb272..6fa31cc8a7 100644 --- a/keyboards/planck/keymaps/default/config.h +++ b/keyboards/planck/keymaps/default/config.h @@ -1,7 +1,4 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" +#pragma once #ifdef AUDIO_ENABLE #define STARTUP_SONG SONG(PLANCK_SOUND) @@ -40,4 +37,3 @@ // Most tactile encoders have detents every 4 stages #define ENCODER_RESOLUTION 4 -#endif diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c index cffa5a5df5..0b787cd122 100644 --- a/keyboards/planck/keymaps/default/keymap.c +++ b/keyboards/planck/keymaps/default/keymap.c @@ -14,8 +14,7 @@ * along with this program. If not, see . */ -#include "planck.h" -#include "action_layer.h" +#include QMK_KEYBOARD_H #include "muse.h" extern keymap_config_t keymap_config; @@ -276,11 +275,21 @@ void encoder_update(bool clockwise) { } } else { if (clockwise) { - register_code(KC_PGDN); - unregister_code(KC_PGDN); + #ifdef MOUSEKEY_ENABLE + register_code(KC_MS_WH_DOWN); + unregister_code(KC_MS_WH_DOWN); + #else + register_code(KC_PGDN); + unregister_code(KC_PGDN); + #endif } else { - register_code(KC_PGUP); - unregister_code(KC_PGUP); + #ifdef MOUSEKEY_ENABLE + register_code(KC_MS_WH_UP); + unregister_code(KC_MS_WH_UP); + #else + register_code(KC_PGUP); + unregister_code(KC_PGUP); + #endif } } } From f2965e1eeaf1769e106145a9d19f102fcd8fe4d4 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 10 Oct 2018 08:00:41 -0700 Subject: [PATCH 146/269] Specify max layers supported in layer keycodes --- docs/feature_advanced_keycodes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index 2ca533a282..15109e5459 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -26,8 +26,8 @@ These functions allow you to activate layers in various ways. Note that layers a * `DF(layer)` - switches the default layer. The default layer is the always-active base layer that other layers stack on top of. See below for more about the default layer. This might be used to switch from QWERTY to Dvorak layout. (Note that this is a temporary switch that only persists until the keyboard loses power. To modify the default layer in a persistent way requires deeper customization, such as calling the `set_single_persistent_default_layer` function inside of [process_record_user](custom_quantum_functions.md#programming-the-behavior-of-any-keycode).) * `MO(layer)` - momentarily activates *layer*. As soon as you let go of the key, the layer is deactivated. * `LM(layer, mod)` - Momentarily activates *layer* (like `MO`), but with modifier(s) *mod* active. Only supports layers 0-15 and the left modifiers. -* `LT(layer, kc)` - momentarily activates *layer* when held, and sends *kc* when tapped. -* `OSL(layer)` - momentarily activates *layer* until the next key is pressed. See [One Shot Keys.](#one-shot-keys) +* `LT(layer, kc)` - momentarily activates *layer* when held, and sends *kc* when tapped. Only supports layers 0-15. +* `OSL(layer)` - momentarily activates *layer* until the next key is pressed. See [One Shot Keys](#one-shot-keys) for details and additional functionality. * `TG(layer)` - toggles *layer*, activating it if it's inactive and vice versa * `TO(layer)` - activates *layer* and de-activates all other layers (except your default layer). This function is special, because instead of just adding/removing one layer to your active layer stack, it will completely replace your current active layers, uniquely allowing you to replace higher layers with a lower one. This is activated on keydown (as soon as the key is pressed). * `TT(layer)` - Layer Tap-Toggle. If you hold the key down, *layer* is activated, and then is de-activated when you let go (like `MO`). If you repeatedly tap it, the layer will be toggled on or off (like `TG`). It needs 5 taps by default, but you can change this by defining `TAPPING_TOGGLE` -- for example, `#define TAPPING_TOGGLE 2` to toggle on just two taps. From ab91e07753720f8114d6c427139a1436e6efa3ce Mon Sep 17 00:00:00 2001 From: patrickmt <40182064+patrickmt@users.noreply.github.com> Date: Tue, 9 Oct 2018 15:14:13 -0400 Subject: [PATCH 147/269] Massdrop keyboards console device support for hid_listen Added hid_listen USB device for arm_atsam USB protocol. Debug printing is now done through the console device (CONSOLE_ENABLE = yes) rather than the virtser device, for viewing in hid_listen. Function dpf(...) renamed to CDC_printf(...) and should now be called directly if intending to print to the virtual serial device. --- tmk_core/common.mk | 1 + tmk_core/common/arm_atsam/printf.c | 66 ++++++++ tmk_core/common/arm_atsam/printf.h | 7 +- tmk_core/protocol/arm_atsam/main_arm_atsam.c | 12 +- tmk_core/protocol/arm_atsam/usb/conf_usb.h | 5 + tmk_core/protocol/arm_atsam/usb/main_usb.c | 14 ++ tmk_core/protocol/arm_atsam/usb/udi_cdc.c | 4 +- tmk_core/protocol/arm_atsam/usb/udi_cdc.h | 1 + .../protocol/arm_atsam/usb/udi_device_conf.h | 88 +++++++++-- tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c | 146 ++++++++++++++++++ tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h | 11 ++ .../protocol/arm_atsam/usb/udi_hid_kbd_desc.c | 6 + tmk_core/protocol/arm_atsam/usb/usb_main.h | 6 + 13 files changed, 347 insertions(+), 20 deletions(-) create mode 100644 tmk_core/common/arm_atsam/printf.c diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 319d196aec..4a0f7dcf9a 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -43,6 +43,7 @@ endif endif ifeq ($(PLATFORM),ARM_ATSAM) + TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/printf.c TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom.c endif diff --git a/tmk_core/common/arm_atsam/printf.c b/tmk_core/common/arm_atsam/printf.c new file mode 100644 index 0000000000..d49d234de2 --- /dev/null +++ b/tmk_core/common/arm_atsam/printf.c @@ -0,0 +1,66 @@ +/* +Copyright 2018 Massdrop Inc. + +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 . +*/ + +#ifdef CONSOLE_PRINT + +#include "samd51j18a.h" +#include "arm_atsam_protocol.h" +#include "printf.h" +#include +#include + +void console_printf(char *fmt, ...) { + while (udi_hid_con_b_report_trans_ongoing) {} //Wait for any previous transfers to complete + + static char console_printbuf[CONSOLE_PRINTBUF_SIZE]; //Print and send buffer + va_list va; + int result; + + va_start(va, fmt); + result = vsnprintf(console_printbuf, CONSOLE_PRINTBUF_SIZE, fmt, va); + va_end(va); + + uint32_t irqflags; + char *pconbuf = console_printbuf; //Pointer to start send from + int send_out = CONSOLE_EPSIZE; //Bytes to send per transfer + + while (result > 0) { //While not error and bytes remain + while (udi_hid_con_b_report_trans_ongoing) {} //Wait for any previous transfers to complete + + irqflags = __get_PRIMASK(); + __disable_irq(); + __DMB(); + + if (result < CONSOLE_EPSIZE) { //If remaining bytes are less than console epsize + memset(udi_hid_con_report, 0, CONSOLE_EPSIZE); //Clear the buffer + send_out = result; //Send remaining size + } + + memcpy(udi_hid_con_report, pconbuf, send_out); //Copy data into the send buffer + + udi_hid_con_b_report_valid = 1; //Set report valid + udi_hid_con_send_report(); //Send report + + __DMB(); + __set_PRIMASK(irqflags); + + result -= send_out; //Decrement result by bytes sent + pconbuf += send_out; //Increment buffer point by bytes sent + } +} + +#endif //CONSOLE_PRINT diff --git a/tmk_core/common/arm_atsam/printf.h b/tmk_core/common/arm_atsam/printf.h index 3206b40bdb..1f1c2280b5 100644 --- a/tmk_core/common/arm_atsam/printf.h +++ b/tmk_core/common/arm_atsam/printf.h @@ -1,8 +1,11 @@ #ifndef _PRINTF_H_ #define _PRINTF_H_ -int dpf(const char *_Format, ...); -#define __xprintf dpf +#define CONSOLE_PRINTBUF_SIZE 512 + +void console_printf(char *fmt, ...); + +#define __xprintf console_printf #endif //_PRINTF_H_ diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c index 676dac4ea3..54d056a14e 100644 --- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c +++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c @@ -276,9 +276,9 @@ int main(void) host_set_driver(&arm_atsam_driver); -#ifdef VIRTSER_ENABLE +#ifdef CONSOLE_ENABLE uint64_t next_print = 0; -#endif //VIRTSER_ENABLE +#endif //CONSOLE_ENABLE v_5v_avg = adc_get(ADC_5V); @@ -290,15 +290,17 @@ int main(void) main_subtasks(); //Note these tasks will also be run while waiting for USB keyboard polling intervals -#ifdef VIRTSER_ENABLE +#ifdef CONSOLE_ENABLE if (CLK_get_ms() > next_print) { next_print = CLK_get_ms() + 250; - dprintf("5v=%u 5vu=%u dlow=%u dhi=%u gca=%u gcd=%u\r\n",v_5v,v_5v_avg,v_5v_avg-V5_LOW,v_5v_avg-V5_HIGH,gcr_actual,gcr_desired); + //Add any debug information here that you want to see very often + //dprintf("5v=%u 5vu=%u dlow=%u dhi=%u gca=%u gcd=%u\r\n", v_5v, v_5v_avg, v_5v_avg - V5_LOW, v_5v_avg - V5_HIGH, gcr_actual, gcr_desired); } -#endif //VIRTSER_ENABLE +#endif //CONSOLE_ENABLE } + return 1; } diff --git a/tmk_core/protocol/arm_atsam/usb/conf_usb.h b/tmk_core/protocol/arm_atsam/usb/conf_usb.h index 8f0f472687..c91caffe02 100644 --- a/tmk_core/protocol/arm_atsam/usb/conf_usb.h +++ b/tmk_core/protocol/arm_atsam/usb/conf_usb.h @@ -134,6 +134,11 @@ #define UDI_HID_EXK_DISABLE_EXT() main_exk_disable() #endif +#ifdef CON +#define UDI_HID_CON_ENABLE_EXT() main_con_enable() +#define UDI_HID_CON_DISABLE_EXT() main_con_disable() +#endif + #ifdef MOU #define UDI_HID_MOU_ENABLE_EXT() main_mou_enable() #define UDI_HID_MOU_DISABLE_EXT() main_mou_disable() diff --git a/tmk_core/protocol/arm_atsam/usb/main_usb.c b/tmk_core/protocol/arm_atsam/usb/main_usb.c index e943cbcdcd..0f676ab639 100644 --- a/tmk_core/protocol/arm_atsam/usb/main_usb.c +++ b/tmk_core/protocol/arm_atsam/usb/main_usb.c @@ -88,6 +88,20 @@ void main_exk_disable(void) } #endif +#ifdef CON +volatile bool main_b_con_enable = false; +bool main_con_enable(void) +{ + main_b_con_enable = true; + return true; +} + +void main_con_disable(void) +{ + main_b_con_enable = false; +} +#endif + #ifdef MOU volatile bool main_b_mou_enable = false; bool main_mou_enable(void) diff --git a/tmk_core/protocol/arm_atsam/usb/udi_cdc.c b/tmk_core/protocol/arm_atsam/usb/udi_cdc.c index 15f0f760cc..5f3c289e81 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_cdc.c +++ b/tmk_core/protocol/arm_atsam/usb/udi_cdc.c @@ -1260,7 +1260,7 @@ uint32_t CDC_print(char *printbuf) char printbuf[CDC_PRINTBUF_SIZE]; -int dpf(const char *_Format, ...) +int CDC_printf(const char *_Format, ...) { va_list va; //Variable argument list variable int result; @@ -1356,7 +1356,7 @@ uint32_t CDC_print(char *printbuf) return 0; } -int dpf(const char *_Format, ...) +int CDC_printf(const char *_Format, ...) { return 0; } diff --git a/tmk_core/protocol/arm_atsam/usb/udi_cdc.h b/tmk_core/protocol/arm_atsam/usb/udi_cdc.h index e134cf2360..86077ce53b 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_cdc.h +++ b/tmk_core/protocol/arm_atsam/usb/udi_cdc.h @@ -365,6 +365,7 @@ extern inbuf_t inbuf; #endif //CDC uint32_t CDC_print(char *printbuf); +int CDC_printf(const char *_Format, ...); uint32_t CDC_input(void); void CDC_init(void); diff --git a/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h b/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h index c787262340..1e82b9eccb 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h +++ b/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h @@ -44,10 +44,10 @@ along with this program. If not, see . #define RAW #endif -//#define CONSOLE_ENABLE //deferred implementation -//#ifdef CONSOLE_ENABLE -//#define CON -//#endif +//#define CONSOLE_ENABLE //rules.mk +#ifdef CONSOLE_ENABLE +#define CON +#endif //#define NKRO_ENABLE //rules.mk #ifdef NKRO_ENABLE @@ -110,8 +110,9 @@ along with this program. If not, see . #endif #ifdef CON -#define CONSOLE_INTERFACE NEXT_INTERFACE_4 -#define NEXT_INTERFACE_5 (CONSOLE_INTERFACE + 1) +#define CON_INTERFACE NEXT_INTERFACE_4 +#define NEXT_INTERFACE_5 (CON_INTERFACE + 1) +#define UDI_HID_CON_IFACE_NUMBER CON_INTERFACE #else #define NEXT_INTERFACE_5 NEXT_INTERFACE_4 #endif @@ -211,11 +212,16 @@ along with this program. If not, see . #endif #ifdef CON -#define CONSOLE_IN_EPNUM NEXT_IN_EPNUM_4 -#define NEXT_IN_EPNUM_5 (CONSOLE_IN_EPNUM + 1) -#define CONSOLE_OUT_EPNUM NEXT_OUT_EPNUM_1 -#define NEXT_OUT_EPNUM_2 (CONSOLE_OUT_EPNUM + 1) -#define CONSOLE_POLLING_INTERVAL 1 +#define CON_IN_EPNUM NEXT_IN_EPNUM_4 +#define UDI_HID_CON_EP_IN CON_IN_EPNUM +#define NEXT_IN_EPNUM_5 (CON_IN_EPNUM + 1) +#define CON_OUT_EPNUM NEXT_OUT_EPNUM_1 +#define UDI_HID_CON_EP_OUT CON_OUT_EPNUM +#define NEXT_OUT_EPNUM_2 (CON_OUT_EPNUM + 1) +#define CON_POLLING_INTERVAL 1 +#ifndef UDI_HID_CON_STRING_ID +#define UDI_HID_CON_STRING_ID 0 +#endif #else #define NEXT_IN_EPNUM_5 NEXT_IN_EPNUM_4 #define NEXT_OUT_EPNUM_2 NEXT_OUT_EPNUM_1 @@ -558,6 +564,66 @@ COMPILER_PACK_RESET() #endif //RAW +// ********************************************************************** +// CON Descriptor structure and content +// ********************************************************************** +#ifdef CON + +COMPILER_PACK_SET(1) + +typedef struct { + usb_iface_desc_t iface; + usb_hid_descriptor_t hid; + usb_ep_desc_t ep_out; + usb_ep_desc_t ep_in; +} udi_hid_con_desc_t; + +typedef struct { + uint8_t array[34]; +} udi_hid_con_report_desc_t; + +#define UDI_HID_CON_DESC {\ + .iface.bLength = sizeof(usb_iface_desc_t),\ + .iface.bDescriptorType = USB_DT_INTERFACE,\ + .iface.bInterfaceNumber = UDI_HID_CON_IFACE_NUMBER,\ + .iface.bAlternateSetting = 0,\ + .iface.bNumEndpoints = 2,\ + .iface.bInterfaceClass = HID_CLASS,\ + .iface.bInterfaceSubClass = HID_SUB_CLASS_NOBOOT,\ + .iface.bInterfaceProtocol = HID_SUB_CLASS_NOBOOT,\ + .iface.iInterface = UDI_HID_CON_STRING_ID,\ + .hid.bLength = sizeof(usb_hid_descriptor_t),\ + .hid.bDescriptorType = USB_DT_HID,\ + .hid.bcdHID = LE16(USB_HID_BDC_V1_11),\ + .hid.bCountryCode = USB_HID_NO_COUNTRY_CODE,\ + .hid.bNumDescriptors = USB_HID_NUM_DESC,\ + .hid.bRDescriptorType = USB_DT_HID_REPORT,\ + .hid.wDescriptorLength = LE16(sizeof(udi_hid_con_report_desc_t)),\ + .ep_out.bLength = sizeof(usb_ep_desc_t),\ + .ep_out.bDescriptorType = USB_DT_ENDPOINT,\ + .ep_out.bEndpointAddress = UDI_HID_CON_EP_OUT | USB_EP_DIR_OUT,\ + .ep_out.bmAttributes = USB_EP_TYPE_INTERRUPT,\ + .ep_out.wMaxPacketSize = LE16(CONSOLE_EPSIZE),\ + .ep_out.bInterval = CON_POLLING_INTERVAL,\ + .ep_in.bLength = sizeof(usb_ep_desc_t),\ + .ep_in.bDescriptorType = USB_DT_ENDPOINT,\ + .ep_in.bEndpointAddress = UDI_HID_CON_EP_IN | USB_EP_DIR_IN,\ + .ep_in.bmAttributes = USB_EP_TYPE_INTERRUPT,\ + .ep_in.wMaxPacketSize = LE16(CONSOLE_EPSIZE),\ + .ep_in.bInterval = CON_POLLING_INTERVAL,\ +} + +#define UDI_HID_CON_REPORT_SIZE CONSOLE_EPSIZE + +extern uint8_t udi_hid_con_report_set[UDI_HID_CON_REPORT_SIZE]; + +//report buffer +extern uint8_t udi_hid_con_report[UDI_HID_CON_REPORT_SIZE]; + +COMPILER_PACK_RESET() + +#endif //CON + // ********************************************************************** // CDC Descriptor structure and content // ********************************************************************** diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c index 1a6f7905e6..18f9784ae6 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c @@ -843,3 +843,149 @@ static void udi_hid_raw_setreport_valid(void) } #endif //RAW + +//******************************************************************************************** +// CON +//******************************************************************************************** +#ifdef CON + +bool udi_hid_con_enable(void); +void udi_hid_con_disable(void); +bool udi_hid_con_setup(void); +uint8_t udi_hid_con_getsetting(void); + +UDC_DESC_STORAGE udi_api_t udi_api_hid_con = { + .enable = (bool(*)(void))udi_hid_con_enable, + .disable = (void (*)(void))udi_hid_con_disable, + .setup = (bool(*)(void))udi_hid_con_setup, + .getsetting = (uint8_t(*)(void))udi_hid_con_getsetting, + .sof_notify = NULL, +}; + +COMPILER_WORD_ALIGNED +static uint8_t udi_hid_con_rate; + +COMPILER_WORD_ALIGNED +static uint8_t udi_hid_con_protocol; + +COMPILER_WORD_ALIGNED +uint8_t udi_hid_con_report_set[UDI_HID_CON_REPORT_SIZE]; + +bool udi_hid_con_b_report_valid; + +COMPILER_WORD_ALIGNED +uint8_t udi_hid_con_report[UDI_HID_CON_REPORT_SIZE]; + +volatile bool udi_hid_con_b_report_trans_ongoing; + +COMPILER_WORD_ALIGNED +static uint8_t udi_hid_con_report_trans[UDI_HID_CON_REPORT_SIZE]; + +COMPILER_WORD_ALIGNED +UDC_DESC_STORAGE udi_hid_con_report_desc_t udi_hid_con_report_desc = { + { + 0x06, 0x31, 0xFF, // Vendor Page (PJRC Teensy compatible) + 0x09, 0x74, // Vendor Usage (PJRC Teensy compatible) + 0xA1, 0x01, // Collection (Application) + 0x09, 0x75, // Usage (Vendor) + 0x15, 0x00, // Logical Minimum (0x00) + 0x26, 0xFF, 0x00, // Logical Maximum (0x00FF) + 0x95, CONSOLE_EPSIZE, // Report Count + 0x75, 0x08, // Report Size (8) + 0x81, 0x02, // Input (Data) + 0x09, 0x76, // Usage (Vendor) + 0x15, 0x00, // Logical Minimum (0x00) + 0x26, 0xFF, 0x00, // Logical Maximum (0x00FF) + 0x95, CONSOLE_EPSIZE, // Report Count + 0x75, 0x08, // Report Size (8) + 0x91, 0x02, // Output (Data) + 0xC0, // End Collection + } +}; + +static bool udi_hid_con_setreport(void); +static void udi_hid_con_setreport_valid(void); + +static void udi_hid_con_report_sent(udd_ep_status_t status, iram_size_t nb_sent, udd_ep_id_t ep); + +bool udi_hid_con_enable(void) +{ + // Initialize internal values + udi_hid_con_rate = 0; + udi_hid_con_protocol = 0; + udi_hid_con_b_report_trans_ongoing = false; + memset(udi_hid_con_report, 0, UDI_HID_CON_REPORT_SIZE); + udi_hid_con_b_report_valid = false; + return UDI_HID_CON_ENABLE_EXT(); +} + +void udi_hid_con_disable(void) +{ + UDI_HID_CON_DISABLE_EXT(); +} + +bool udi_hid_con_setup(void) +{ + return udi_hid_setup(&udi_hid_con_rate, + &udi_hid_con_protocol, + (uint8_t *) &udi_hid_con_report_desc, + udi_hid_con_setreport); +} + +uint8_t udi_hid_con_getsetting(void) +{ + return 0; +} + +static bool udi_hid_con_setreport(void) +{ + if ((USB_HID_REPORT_TYPE_OUTPUT == (udd_g_ctrlreq.req.wValue >> 8)) + && (0 == (0xFF & udd_g_ctrlreq.req.wValue)) + && (UDI_HID_CON_REPORT_SIZE == udd_g_ctrlreq.req.wLength)) { + udd_g_ctrlreq.payload = udi_hid_con_report_set; + udd_g_ctrlreq.callback = udi_hid_con_setreport_valid; + udd_g_ctrlreq.payload_size = UDI_HID_CON_REPORT_SIZE; + return true; + } + return false; +} + +bool udi_hid_con_send_report(void) +{ + if (!main_b_con_enable) { + return false; + } + + if (udi_hid_con_b_report_trans_ongoing) { + return false; + } + + memcpy(udi_hid_con_report_trans, udi_hid_con_report,UDI_HID_CON_REPORT_SIZE); + udi_hid_con_b_report_valid = false; + udi_hid_con_b_report_trans_ongoing = + udd_ep_run(UDI_HID_CON_EP_IN | USB_EP_DIR_IN, + false, + udi_hid_con_report_trans, + UDI_HID_CON_REPORT_SIZE, + udi_hid_con_report_sent); + + return udi_hid_con_b_report_trans_ongoing; +} + +static void udi_hid_con_report_sent(udd_ep_status_t status, iram_size_t nb_sent, udd_ep_id_t ep) +{ + UNUSED(status); + UNUSED(nb_sent); + UNUSED(ep); + udi_hid_con_b_report_trans_ongoing = false; + if (udi_hid_con_b_report_valid) { + udi_hid_con_send_report(); + } +} + +static void udi_hid_con_setreport_valid(void) +{ + +} + +#endif //CON diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h index babfdb7a78..e442919a9b 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h @@ -85,6 +85,17 @@ extern uint8_t udi_hid_exk_report_set; bool udi_hid_exk_send_report(void); #endif //EXK +//******************************************************************************************** +// CON Console +//******************************************************************************************** +#ifdef CON +extern UDC_DESC_STORAGE udi_api_t udi_api_hid_con; +extern bool udi_hid_con_b_report_valid; +extern uint8_t udi_hid_con_report_set[UDI_HID_CON_REPORT_SIZE]; +extern volatile bool udi_hid_con_b_report_trans_ongoing; +bool udi_hid_con_send_report(void); +#endif //CON + //******************************************************************************************** // MOU Mouse //******************************************************************************************** diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c index 16bd4e514c..2d6e35e254 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c @@ -134,6 +134,9 @@ UDC_DESC_STORAGE udc_desc_t udc_desc = { #ifdef EXK .hid_exk = UDI_HID_EXK_DESC, #endif +#ifdef CON + .hid_con = UDI_HID_CON_DESC, +#endif #ifdef NKRO .hid_nkro = UDI_HID_NKRO_DESC, #endif @@ -155,6 +158,9 @@ UDC_DESC_STORAGE udi_api_t *udi_apis[USB_DEVICE_NB_INTERFACE] = { #ifdef EXK &udi_api_hid_exk, #endif + #ifdef CON + &udi_api_hid_con, + #endif #ifdef NKRO &udi_api_hid_nkro, #endif diff --git a/tmk_core/protocol/arm_atsam/usb/usb_main.h b/tmk_core/protocol/arm_atsam/usb/usb_main.h index b7adaa1a72..76ced474dc 100644 --- a/tmk_core/protocol/arm_atsam/usb/usb_main.h +++ b/tmk_core/protocol/arm_atsam/usb/usb_main.h @@ -82,6 +82,12 @@ bool main_exk_enable(void); void main_exk_disable(void); #endif //EXK +#ifdef CON +extern volatile bool main_b_con_enable; +bool main_con_enable(void); +void main_con_disable(void); +#endif //CON + #ifdef MOU extern volatile bool main_b_mou_enable; bool main_mou_enable(void); From 79bff502471d8fd534e9266954a184aa0f7d55c3 Mon Sep 17 00:00:00 2001 From: MakotoKurauchi Date: Thu, 11 Oct 2018 04:53:18 +0900 Subject: [PATCH 148/269] Keymaps: Helix rgblight mode update (#4091) * Helix each keymap's using rgblight mode symbol instead magic number No change in build result. * Helix pico keymaps: make rgblight modes selectable. No change in build result. * Helix rev2 keymaps: make rgblight modes selectable. No change in build result. * fixed Helix froggy/keymap.c: invalid rgblight mode value 0 to 1 (=RGBLIGHT_MODE_STATIC_LIGHT) * Deselect RGB_TEST and ALTERNATING in Helix rev2,pico keymaps config.h. --- keyboards/helix/pico/keymaps/biacco/config.h | 14 ++++++++++++++ keyboards/helix/pico/keymaps/biacco/rules.mk | 2 +- keyboards/helix/pico/keymaps/default/config.h | 15 +++++++++++++++ keyboards/helix/pico/keymaps/default/keymap.c | 4 ++-- keyboards/helix/pico/keymaps/default/rules.mk | 2 +- .../helix/rev1/keymaps/OLED_sample/keymap.c | 4 ++-- keyboards/helix/rev2/keymaps/default/config.h | 18 +++++++++++++++--- keyboards/helix/rev2/keymaps/default/keymap.c | 4 ++-- keyboards/helix/rev2/keymaps/default/rules.mk | 2 +- .../helix/rev2/keymaps/edvorakjp/config.h | 18 +++++++++++++++--- .../helix/rev2/keymaps/edvorakjp/keymap.c | 4 ++-- .../helix/rev2/keymaps/edvorakjp/rules.mk | 2 +- .../helix/rev2/keymaps/five_rows_jis/config.h | 18 +++++++++++++++--- .../helix/rev2/keymaps/five_rows_jis/rules.mk | 2 +- keyboards/helix/rev2/keymaps/froggy/config.h | 18 +++++++++++++++--- keyboards/helix/rev2/keymaps/froggy/keymap.c | 8 ++++---- keyboards/helix/rev2/keymaps/froggy/rules.mk | 2 +- keyboards/helix/rev2/keymaps/yshrsmz/config.h | 15 +++++++++++++++ keyboards/helix/rev2/keymaps/yshrsmz/keymap.c | 6 +++--- keyboards/helix/rev2/keymaps/yshrsmz/rules.mk | 2 +- 20 files changed, 126 insertions(+), 34 deletions(-) diff --git a/keyboards/helix/pico/keymaps/biacco/config.h b/keyboards/helix/pico/keymaps/biacco/config.h index 776eecfb64..7653185198 100644 --- a/keyboards/helix/pico/keymaps/biacco/config.h +++ b/keyboards/helix/pico/keymaps/biacco/config.h @@ -27,3 +27,17 @@ along with this program. If not, see . #define AUDIO_CLICKY #endif +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif diff --git a/keyboards/helix/pico/keymaps/biacco/rules.mk b/keyboards/helix/pico/keymaps/biacco/rules.mk index 0a720002d7..4f264fa952 100644 --- a/keyboards/helix/pico/keymaps/biacco/rules.mk +++ b/keyboards/helix/pico/keymaps/biacco/rules.mk @@ -92,7 +92,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) endif ifeq ($(strip $(LED_ANIMATIONS)), yes) - OPT_DEFS += -DRGBLIGHT_ANIMATIONS + OPT_DEFS += -DLED_ANIMATIONS endif ifeq ($(strip $(OLED_ENABLE)), yes) diff --git a/keyboards/helix/pico/keymaps/default/config.h b/keyboards/helix/pico/keymaps/default/config.h index 6084b0970b..20dfc9f985 100644 --- a/keyboards/helix/pico/keymaps/default/config.h +++ b/keyboards/helix/pico/keymaps/default/config.h @@ -28,4 +28,19 @@ along with this program. If not, see . #define AUDIO_CLICKY #endif +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/pico/keymaps/default/keymap.c b/keyboards/helix/pico/keymaps/default/keymap.c index 75221d485a..4c58785179 100644 --- a/keyboards/helix/pico/keymaps/default/keymap.c +++ b/keyboards/helix/pico/keymaps/default/keymap.c @@ -238,7 +238,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { TOG_STATUS = !TOG_STATUS; #ifdef RGBLIGHT_ENABLE - //rgblight_mode(16); + //rgblight_mode(RGBLIGHT_MODE_SNAKE + 1); #endif } layer_on(_LOWER); @@ -261,7 +261,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { TOG_STATUS = !TOG_STATUS; #ifdef RGBLIGHT_ENABLE - //rgblight_mode(15); + //rgblight_mode(RGBLIGHT_MODE_SNAKE); #endif } layer_on(_RAISE); diff --git a/keyboards/helix/pico/keymaps/default/rules.mk b/keyboards/helix/pico/keymaps/default/rules.mk index afb1240685..b1e219537f 100644 --- a/keyboards/helix/pico/keymaps/default/rules.mk +++ b/keyboards/helix/pico/keymaps/default/rules.mk @@ -92,7 +92,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) endif ifeq ($(strip $(LED_ANIMATIONS)), yes) - OPT_DEFS += -DRGBLIGHT_ANIMATIONS + OPT_DEFS += -DLED_ANIMATIONS endif ifeq ($(strip $(OLED_ENABLE)), yes) diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c b/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c index fa51501e62..9b81979ff4 100644 --- a/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c +++ b/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c @@ -368,7 +368,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false } else { TOG_STATUS = !TOG_STATUS; - rgblight_mode(16); + rgblight_mode(RGBLIGHT_MODE_SNAKE + 1); } layer_on(_LOWER); update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); @@ -387,7 +387,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false } else { TOG_STATUS = !TOG_STATUS; - rgblight_mode(15); + rgblight_mode(RGBLIGHT_MODE_SNAKE); } layer_on(_RAISE); update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); diff --git a/keyboards/helix/rev2/keymaps/default/config.h b/keyboards/helix/rev2/keymaps/default/config.h index 185e678385..ed37675794 100644 --- a/keyboards/helix/rev2/keymaps/default/config.h +++ b/keyboards/helix/rev2/keymaps/default/config.h @@ -21,9 +21,21 @@ along with this program. If not, see . #ifndef CONFIG_USER_H #define CONFIG_USER_H -// if you need more program area, try uncomment follow line -//#include "serial_config_simpleapi.h" - // place overrides here +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/default/keymap.c b/keyboards/helix/rev2/keymaps/default/keymap.c index 087bd8e517..92393208ce 100644 --- a/keyboards/helix/rev2/keymaps/default/keymap.c +++ b/keyboards/helix/rev2/keymaps/default/keymap.c @@ -373,7 +373,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { TOG_STATUS = !TOG_STATUS; #ifdef RGBLIGHT_ENABLE - //rgblight_mode(16); + //rgblight_mode(RGBLIGHT_MODE_SNAKE + 1); #endif } layer_on(_LOWER); @@ -396,7 +396,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { TOG_STATUS = !TOG_STATUS; #ifdef RGBLIGHT_ENABLE - //rgblight_mode(15); + //rgblight_mode(RGBLIGHT_MODE_SNAKE); #endif } layer_on(_RAISE); diff --git a/keyboards/helix/rev2/keymaps/default/rules.mk b/keyboards/helix/rev2/keymaps/default/rules.mk index 5340a74ba2..14c353d507 100644 --- a/keyboards/helix/rev2/keymaps/default/rules.mk +++ b/keyboards/helix/rev2/keymaps/default/rules.mk @@ -100,7 +100,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) endif ifeq ($(strip $(LED_ANIMATIONS)), yes) - OPT_DEFS += -DRGBLIGHT_ANIMATIONS + OPT_DEFS += -DLED_ANIMATIONS endif ifeq ($(strip $(OLED_ENABLE)), yes) diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/config.h b/keyboards/helix/rev2/keymaps/edvorakjp/config.h index ead31605b2..643220383c 100644 --- a/keyboards/helix/rev2/keymaps/edvorakjp/config.h +++ b/keyboards/helix/rev2/keymaps/edvorakjp/config.h @@ -1,11 +1,23 @@ #ifndef CONFIG_USER_H #define CONFIG_USER_H -// if you need more program area, try uncomment follow line -//#include "serial_config_simpleapi.h" - #undef TAPPING_FORCE_HOLD #undef TAPPING_TERM #define TAPPING_TERM 120 +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/keymap.c b/keyboards/helix/rev2/keymaps/edvorakjp/keymap.c index 650a39115a..22940f7cbe 100644 --- a/keyboards/helix/rev2/keymaps/edvorakjp/keymap.c +++ b/keyboards/helix/rev2/keymaps/edvorakjp/keymap.c @@ -35,7 +35,7 @@ void matrix_scan_user(void) { #ifdef RGBLIGHT_ENABLE uint32_t layer_state_set_keymap(uint32_t state) { - rgblight_mode_noeeprom(1); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); switch (biton32(state)) { case _EDVORAKJ1: case _EDVORAKJ2: @@ -52,7 +52,7 @@ uint32_t layer_state_set_keymap(uint32_t state) { rgblight_sethsv_noeeprom_green(); break; default: // for any other layers, or the default layer - rgblight_mode_noeeprom(28); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 3); rgblight_sethsv_noeeprom_red(); break; } diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk index 67da9c370b..9bd46fabcf 100644 --- a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk +++ b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk @@ -102,7 +102,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) endif ifeq ($(strip $(LED_ANIMATIONS)), yes) - OPT_DEFS += -DRGBLIGHT_ANIMATIONS + OPT_DEFS += -DLED_ANIMATIONS endif ifeq ($(strip $(OLED_ENABLE)), yes) diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/config.h b/keyboards/helix/rev2/keymaps/five_rows_jis/config.h index c380b7db4e..97494c937f 100644 --- a/keyboards/helix/rev2/keymaps/five_rows_jis/config.h +++ b/keyboards/helix/rev2/keymaps/five_rows_jis/config.h @@ -23,9 +23,6 @@ along with this program. If not, see . // place overrides here -// if you need more program area, try uncomment follow line -//#include "serial_config_simpleapi.h" - #ifdef MOUSEKEY_ENABLE #undef MOUSEKEY_INTERVAL #define MOUSEKEY_INTERVAL 0 @@ -43,4 +40,19 @@ along with this program. If not, see . #define MOUSEKEY_DELAY 0 #endif +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk index 5340a74ba2..14c353d507 100644 --- a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk +++ b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk @@ -100,7 +100,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) endif ifeq ($(strip $(LED_ANIMATIONS)), yes) - OPT_DEFS += -DRGBLIGHT_ANIMATIONS + OPT_DEFS += -DLED_ANIMATIONS endif ifeq ($(strip $(OLED_ENABLE)), yes) diff --git a/keyboards/helix/rev2/keymaps/froggy/config.h b/keyboards/helix/rev2/keymaps/froggy/config.h index dad2483034..517368ae94 100644 --- a/keyboards/helix/rev2/keymaps/froggy/config.h +++ b/keyboards/helix/rev2/keymaps/froggy/config.h @@ -21,12 +21,24 @@ along with this program. If not, see . #ifndef CONFIG_USER_H #define CONFIG_USER_H -// if you need more program area, try uncomment follow line -//#include "serial_config_simpleapi.h" - #undef TAPPING_TERM #define TAPPING_TERM 200 #define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */ #define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */ +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/froggy/keymap.c b/keyboards/helix/rev2/keymaps/froggy/keymap.c index 81a28dfa5d..75c6f08114 100644 --- a/keyboards/helix/rev2/keymaps/froggy/keymap.c +++ b/keyboards/helix/rev2/keymaps/froggy/keymap.c @@ -399,7 +399,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef RGBLIGHT_ENABLE if (record->event.pressed) { RGBAnimation = true; - rgblight_mode(6); + rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD); RGB_current_mode = rgblight_config.mode; } #endif @@ -408,7 +408,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef RGBLIGHT_ENABLE if (record->event.pressed) { RGBAnimation = true; - rgblight_mode(10); + rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 1); RGB_current_mode = rgblight_config.mode; } #endif @@ -417,7 +417,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef RGBLIGHT_ENABLE if (record->event.pressed) { RGBAnimation = true; - rgblight_mode(21); + rgblight_mode(RGBLIGHT_MODE_KNIGHT); RGB_current_mode = rgblight_config.mode; } #endif @@ -508,7 +508,7 @@ void led_ripple_effect(char r, char g, char b) { if (scan_count == -1) { rgblight_enable_noeeprom(); - rgblight_mode(0); + rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); } else if (scan_count >= 0 && scan_count < 5) { for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { int i = c; diff --git a/keyboards/helix/rev2/keymaps/froggy/rules.mk b/keyboards/helix/rev2/keymaps/froggy/rules.mk index aa97964134..e52e4a3736 100644 --- a/keyboards/helix/rev2/keymaps/froggy/rules.mk +++ b/keyboards/helix/rev2/keymaps/froggy/rules.mk @@ -100,7 +100,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) endif ifeq ($(strip $(LED_ANIMATIONS)), yes) - OPT_DEFS += -DRGBLIGHT_ANIMATIONS + OPT_DEFS += -DLED_ANIMATIONS endif ifeq ($(strip $(OLED_ENABLE)), yes) diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/config.h b/keyboards/helix/rev2/keymaps/yshrsmz/config.h index a1cd126eef..d70f23c3e3 100644 --- a/keyboards/helix/rev2/keymaps/yshrsmz/config.h +++ b/keyboards/helix/rev2/keymaps/yshrsmz/config.h @@ -21,3 +21,18 @@ along with this program. If not, see . /* auto shift config */ #define AUTO_SHIFT_TIMEOUT 150 + +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c b/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c index cce28796e6..049a864c1a 100644 --- a/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c +++ b/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c @@ -312,7 +312,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { TOG_STATUS = !TOG_STATUS; #ifdef RGBLIGHT_ENABLE - //rgblight_mode(16); + //rgblight_mode(RGBLIGHT_MODE_SNAKE + 1); #endif } layer_on(_LOWER); @@ -335,7 +335,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { TOG_STATUS = !TOG_STATUS; #ifdef RGBLIGHT_ENABLE - //rgblight_mode(15); + //rgblight_mode(RGBLIGHT_MODE_SNAKE); #endif } layer_on(_RAISE); @@ -450,7 +450,7 @@ void music_scale_user(void) // hook point for 'led_test' keymap // 'default' keymap's led_test_init() is empty function, do nothing -// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(35); +// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST); __attribute__ ((weak)) void led_test_init(void) {} diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk b/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk index da439dc9b5..8331a2e1d8 100644 --- a/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk +++ b/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk @@ -99,7 +99,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) endif ifeq ($(strip $(LED_ANIMATIONS)), yes) - OPT_DEFS += -DRGBLIGHT_ANIMATIONS + OPT_DEFS += -DLED_ANIMATIONS endif ifeq ($(strip $(OLED_ENABLE)), yes) From 7d156263ab81ff960adab6b80134f5202df67048 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Wed, 10 Oct 2018 12:56:45 -0700 Subject: [PATCH 149/269] Orange75: cleanup and Configurator support update (#4101) * Orange75: cleanup and Configurator support update `orange75.h`: Moved `K014` to the second (number row) as the left half of a split Backspace (guessing at its true location; will need to be checked/tested after merge). `info.json`: Updated to match new `LAYOUT` macro. `keymaps/default/keymap.c`: - Updated to match new `LAYOUT` macro. - Added layer mock-ups as block comments. - Formatted to be a bit more readable. * Orange75: deleted an extra comma from keymap.c --- keyboards/orange75/info.json | 98 +++++++++++++++++++-- keyboards/orange75/keymaps/default/keymap.c | 56 +++++++++--- keyboards/orange75/orange75.h | 12 +-- 3 files changed, 141 insertions(+), 25 deletions(-) diff --git a/keyboards/orange75/info.json b/keyboards/orange75/info.json index 093b4cd4ec..e6a70c1021 100644 --- a/keyboards/orange75/info.json +++ b/keyboards/orange75/info.json @@ -1,12 +1,96 @@ { - "keyboard_name": "Orange75", - "url": "", - "maintainer": "qmk", - "width": 16, - "height": 6.25, + "keyboard_name": "Orange75", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 6.25, "layouts": { "LAYOUT": { - "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Home", "x":15, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"End", "x":15, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Page Up", "x":15, "y":3.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, {"label":"Up", "x":14, "y":4.25}, {"label":"Page Down", "x":15, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"label":"Alt", "x":10, "y":5.25, "w":1.25}, {"label":"Fn", "x":11.25, "y":5.25, "w":1.25}, {"label":"Left", "x":13, "y":5.25}, {"label":"Down", "x":14, "y":5.25}, {"label":"Right", "x":15, "y":5.25}] + "key_count": 82, + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F6", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"`", "x":0, "y":1.25}, + {"label":"1", "x":1, "y":1.25}, + {"label":"2", "x":2, "y":1.25}, + {"label":"3", "x":3, "y":1.25}, + {"label":"4", "x":4, "y":1.25}, + {"label":"5", "x":5, "y":1.25}, + {"label":"6", "x":6, "y":1.25}, + {"label":"7", "x":7, "y":1.25}, + {"label":"8", "x":8, "y":1.25}, + {"label":"9", "x":9, "y":1.25}, + {"label":"0", "x":10, "y":1.25}, + {"label":"-", "x":11, "y":1.25}, + {"label":"=", "x":12, "y":1.25}, + {"label":"Delete", "x":13, "y":1.25}, + {"label":"Back Space", "x":14, "y":1.25}, + {"label":"Home", "x":15, "y":1.25}, + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"[", "x":11.5, "y":2.25}, + {"label":"]", "x":12.5, "y":2.25}, + {"label":"\\", "x":13.5, "y":2.25, "w":1.5}, + {"label":"End", "x":15, "y":2.25}, + {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":";", "x":10.75, "y":3.25}, + {"label":"'", "x":11.75, "y":3.25}, + {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, + {"label":"PgUp", "x":15, "y":3.25}, + {"label":"Shift", "x":0, "y":4.25, "w":1.25}, + {"label":"ISO\\", "x":1.25, "y":4.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",", "x":9.25, "y":4.25}, + {"label":".", "x":10.25, "y":4.25}, + {"label":"/", "x":11.25, "y":4.25}, + {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, + {"label":"Up", "x":14, "y":4.25}, + {"label":"PgDn", "x":15, "y":4.25}, + {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, + {"label":"GUI", "x":1.25, "y":5.25, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.25, "w":6.25}, + {"label":"Alt", "x":10, "y":5.25, "w":1.25}, + {"label":"Fn", "x":11.25, "y":5.25, "w":1.25}, + {"label":"Left", "x":13, "y":5.25}, + {"label":"Down", "x":14, "y":5.25}, + {"label":"Right", "x":15, "y":5.25} + ] } } -} \ No newline at end of file +} diff --git a/keyboards/orange75/keymaps/default/keymap.c b/keyboards/orange75/keymaps/default/keymap.c index 50aaf718ec..37e198f99c 100644 --- a/keyboards/orange75/keymaps/default/keymap.c +++ b/keyboards/orange75/keymaps/default/keymap.c @@ -3,21 +3,53 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ,---------------------------------------------------------------. + * |Esc|▓▓▓|F1 |F2 |F3 |F4 |▓|F5 |F6 |F7 |F8 |▓|F9 |F10|F11|F12|▓▓▓| + * |---------------------------------------------------------------| + * |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Del|Bsp|Hm | + * |---------------------------------------------------------------| + * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |End| + * |---------------------------------------------------------------| + * |Caps |A |S |D |F |G |H |J |K |L |; |' |Enter |PgU| + * |---------------------------------------------------------------| + * |Shft|\ |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD| + * |---------------------------------------------------------------| + * |Ctrl|GUI |Alt |Space |Alt |Fn |▓|Lt |Dn |Rt | + * `---------------------------------------------------------------' + */ LAYOUT( - KC_ESC, KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11, KC_F12, KC_DEL, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, - KC_LSFT, LT(1, KC_NO), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, LT(1, KC_NO), KC_LEFT, KC_DOWN, KC_RGHT), + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, LT(1, KC_NO), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, LT(1, KC_NO), KC_LEFT, KC_DOWN, KC_RGHT + ), + /* + * ,---------------------------------------------------------------. + * |RST|▓▓▓| | | | |▓| | | | |▓| | | | |▓▓▓| + * |---------------------------------------------------------------| + * |` | | | | | | | | | | | | | | |Tog| + * |---------------------------------------------------------------| + * | | | | | | | | | | | | | | |Stp| + * |---------------------------------------------------------------| + * | | | | | | | | | | | | | |BL+| + * |---------------------------------------------------------------| + * | | | | | | | | | | | | | | |BL-| + * |---------------------------------------------------------------| + * | | | | | | |▓| | | | + * `---------------------------------------------------------------' + */ LAYOUT( - RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, - _______, _______, _______, _______, _______, _______, _______, _______, _______) + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) }; diff --git a/keyboards/orange75/orange75.h b/keyboards/orange75/orange75.h index 1b351a595c..a7ddd5a06d 100644 --- a/keyboards/orange75/orange75.h +++ b/keyboards/orange75/orange75.h @@ -3,12 +3,12 @@ #include "quantum.h" #define LAYOUT( \ - K000, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, \ - K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, \ - K500, K501, K502, K506, K510, K511, K512, K513, K514 \ + K000, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K014, K113, K114, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, \ + K500, K501, K502, K506, K510, K511, K512, K513, K514 \ ) { \ { K000, K100, K200, K300, K400, K500 }, \ { KC_NO, K101, K201, K301, K401, K501 }, \ From d17421d074402765204c0e7b09007906e91af7dc Mon Sep 17 00:00:00 2001 From: pgillan145 Date: Wed, 10 Oct 2018 15:58:11 -0400 Subject: [PATCH 150/269] Added cheese keymap to tada68. (#4105) * Added cheese keymap to tada68. * Removed extraneous definitions. --- keyboards/tada68/keymaps/cheese/keymap.c | 107 ++++++++++++++++++++++ keyboards/tada68/keymaps/cheese/readme.md | 20 ++++ keyboards/tada68/keymaps/cheese/rules.mk | 18 ++++ 3 files changed, 145 insertions(+) create mode 100755 keyboards/tada68/keymaps/cheese/keymap.c create mode 100755 keyboards/tada68/keymaps/cheese/readme.md create mode 100644 keyboards/tada68/keymaps/cheese/rules.mk diff --git a/keyboards/tada68/keymaps/cheese/keymap.c b/keyboards/tada68/keymaps/cheese/keymap.c new file mode 100755 index 0000000000..b2395282c3 --- /dev/null +++ b/keyboards/tada68/keymaps/cheese/keymap.c @@ -0,0 +1,107 @@ +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _CL 2 +#define _AL 3 + +enum custom_keycodes { + SPX4 = SAFE_RANGE +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case SPX4: + SEND_STRING(" "); + return false; + } + } + return true; +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp| + * |----------------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn| + * |----------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|Del | + * |----------------------------------------------------------------| + * |Ctrl|Win |Win | Space |Win| FN|Ctrl|Lef|Dow|Rig | + * `----------------------------------------------------------------' + */ +[_BL] = LAYOUT_ansi( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_PGUP, \ + MO(_CL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGDN, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \ + KC_LCTL, KC_LALT,LM(_AL,0x08), KC_SPC, LM(_AL,0x18),MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT), + + /* Keymap _FL: Function Layer + * ,----------------------------------------------------------------. + * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |` ~ | + * |----------------------------------------------------------------| + * | | |Up | | | | | | | | | | | |Hme | + * |----------------------------------------------------------------| + * | |<- |Dn | ->| | | | | | | | | |End | + * |----------------------------------------------------------------| + * | | | |Bl-|BL |BL+| |MUT|VU-|VU+| | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | + * `----------------------------------------------------------------' + */ +[_FL] = LAYOUT_ansi( + _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_GRV, \ + SPX4,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \ + _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \ + _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,KC_MUTE,KC_VOLD,KC_VOLU,_______,_______, _______, _______, \ + _______,_______,_______, _______, _______,_______,_______,_______,_______, _______), + + /* Keymap _CL: Caps Layer + * ,----------------------------------------------------------------. + * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |` ~ | + * |----------------------------------------------------------------| + * | | |Up | | | | | | | | | | | |Hme | + * |----------------------------------------------------------------| + * | |<- |Dn | ->| | | | | | | | | |End | + * |----------------------------------------------------------------| + * | | | |Bl-|BL |BL+| |MUT|VU-|VU+| | McL|MsU|McR | + * |----------------------------------------------------------------| + * | | | | | | | |MsL|MsD|MsR | + * `----------------------------------------------------------------' + */ +[_CL] = LAYOUT_ansi( + _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_GRV , \ + _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \ + _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \ + _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,KC_MUTE,KC_VOLD,KC_VOLU,_______,KC_BTN1, KC_MS_U, KC_BTN2, \ + _______,_______,_______, _______, _______,_______,_______,KC_MS_L,KC_MS_D, KC_MS_R), + + /* Keymap _AL: ALT Layer + * ,----------------------------------------------------------------. + * |` ~| | | | | | | | | | | | | | ` ~| + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | + * `----------------------------------------------------------------' + */ +[_AL] = LAYOUT_ansi( + KC_GRV, _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV , \ + _______,_______, _______, _______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ + _______,_______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ + _______,_______,_______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______, _______, \ + _______,_______,_______, _______, _______,_______,_______, _______, _______, _______), +}; diff --git a/keyboards/tada68/keymaps/cheese/readme.md b/keyboards/tada68/keymaps/cheese/readme.md new file mode 100755 index 0000000000..8374e469b9 --- /dev/null +++ b/keyboards/tada68/keymaps/cheese/readme.md @@ -0,0 +1,20 @@ +# pgillan's Cheese TADA68 layout + +A collection of tweaks to make the keyboard more mac friendly and increase personal usability, +based on the default keymap. + +* Turned the caps-lock into an additional function key so I didn't have to try to hit the + the keys on the right with one hand. +* Moved the arrow/mouse controls to the caps-lock layer from the function layer. +* Swapped the Windows key and Alt keys, I didn't have to do it in OS X. +* Made the escape key work as a backtick when "Alt" is depressed, so I can 1) reverse + direction when I Alt-Tab through current applications, and Alt-Backtick through + open windows. +* Turned the backtick/tilde key into another backspace key, so I can just go all the way + up to the corner without overshooting. +* Adjusted the volume controles so M is "mute", the "," ( or "<") is "down", and "." (or ">") + is "up". It just makes a ton more sense, I have no idea why it would have been done any + differently. +* Moved PageUp/PageDown up above the delete key, and made the Home and End on the capslock + and function layers. +* Made the tab key on the function layer output 4 spaces instead of a tab character. diff --git a/keyboards/tada68/keymaps/cheese/rules.mk b/keyboards/tada68/keymaps/cheese/rules.mk new file mode 100644 index 0000000000..fdbd25ea80 --- /dev/null +++ b/keyboards/tada68/keymaps/cheese/rules.mk @@ -0,0 +1,18 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + From 0e142138aa5c4daa3f113f5a402060cde3efdea9 Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Tue, 9 Oct 2018 01:21:38 -0700 Subject: [PATCH 151/269] evil80: Add readme.md file --- keyboards/evil80/readme.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 keyboards/evil80/readme.md diff --git a/keyboards/evil80/readme.md b/keyboards/evil80/readme.md new file mode 100644 index 0000000000..bc21855eba --- /dev/null +++ b/keyboards/evil80/readme.md @@ -0,0 +1,15 @@ +# Evil 80 + +![Evil 80](https://i.imgur.com/f5dKuML.jpg) + +Also known as the Odyssey, the Evil 80 is a QMK-powered aluminum TKL keyboard featuring an Aviator connector cable. Sold via a Geekhack group buy in January of 2018. + +Keyboard Maintainer: [The QMK Community](https://github.com/qmk) +Hardware Supported: Evil 80-Odyssey QMK version +Hardware Availability: [Geekhack](https://geekhack.org/index.php?topic=93434.0) + +Make example for this keyboard (after setting up your build environment): + + make evil80:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). From 6c55e8cab5a1cc43c0c024344727ceb243d98f5a Mon Sep 17 00:00:00 2001 From: Boris Burger Date: Wed, 10 Oct 2018 23:17:42 +0200 Subject: [PATCH 152/269] Keymap: DZ60 layout based on stephengrier's with PgUp/PgDn/Home/End, Insert, etc. (#4110) * DZ60 layout based on stephengrier's with customisations. * CapsLock is used as Fn key. * Del is available as Fn+Backspace & Shift+Backspace (using a macro) * PgUp / PgDn / Home / End = Fn+Arrows (as on macOS, Microsoft Surface) * Tilde = Shift+Esc * Backtick = Fn+Esc * Underglow toggle and mode selection are available as Fn+Q and Fn+W * Reset (bootloader mode) = Fn+B * Standardised layout formatting and Ctrl+Del & Shift+Del support. Using 7 underscores for KC_TRNS in layouts and aligning the keycodes according to LAYOUT_directional. Del is now only Fn+Del, Ctrl+Backspace translates to Ctrl+Del, Shift+Backspace translates to Shift+Del. * Documented new Backspace/Del related macros. Del is now just Fn+Backspace, pressing Ctrl+Backspace sends Ctrl+Del, pressing Shift+Backspace sends Shift+Del --- keyboards/dz60/keymaps/boris_burger/README.md | 52 +++++++++++ keyboards/dz60/keymaps/boris_burger/config.h | 1 + keyboards/dz60/keymaps/boris_burger/keymap.c | 87 +++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 keyboards/dz60/keymaps/boris_burger/README.md create mode 100644 keyboards/dz60/keymaps/boris_burger/config.h create mode 100644 keyboards/dz60/keymaps/boris_burger/keymap.c diff --git a/keyboards/dz60/keymaps/boris_burger/README.md b/keyboards/dz60/keymaps/boris_burger/README.md new file mode 100644 index 0000000000..64062f823a --- /dev/null +++ b/keyboards/dz60/keymaps/boris_burger/README.md @@ -0,0 +1,52 @@ +### boris_burger's DZ60 layout + +This layout is for a DZ60 with a 2U left shift, 1U right shift and an arrow cluster in +the bottom right. + +It is based off stephengrier's layout adding support for Home/End/PgUp/PgDn using Fn+arrows +as used on macOS and Microsoft Surface. It has Insert instead of Fn near the arrow cluster +and other smaller tweaks: +- CapsLock is the only Fn key (CapsLock by itself is not available) +- Del is available as Fn+Backspace +- Ctrl+Del is available as Ctrl+Backspace (e.g. deleting word to the right of the cursor) +- Shift+Del is available as Shift+Backspace (e.g. permanently deleting file or e-mail) +- PgUp = Fn+Up +- PgDn = Fn+Down +- Home = Fn+Left +- End = Fn+Right +- Tilde = Shift+Esc +- Backtick = Fn+Esc +- Underglow toggle and mode selection are available as Fn+Q and Fn+W +- Reset (bootloader mode) = Fn+B + +### 0 Qwerty +``` +,-----------------------------------------------------------------------------------------. +| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | +|-----------------------------------------------------------------------------------------+ +| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | +|-----------------------------------------------------------------------------------------+ +| Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter | +|-----------------------------------------------------------------------------------------+ +| Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | Ins | +|-----------------------------------------------------------------------------------------+ +| Ctrl | Win | Alt | Space | Alt | Menu | L | D | R | +`-----------------------------------------------------------------------------------------' +``` + +### 1 Fn Layer +``` +FN Layer +,-----------------------------------------------------------------------------------------. +| ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | +|-----------------------------------------------------------------------------------------+ +| |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | +|-----------------------------------------------------------------------------------------+ +| | BL T| BL M| BL+ | BL- | | | | | | | | | +|-----------------------------------------------------------------------------------------+ +| | | | | |RESET| | | | | | | PgUp| | +|-----------------------------------------------------------------------------------------+ +| | | | | | | Home| PgDn| End | +`-----------------------------------------------------------------------------------------' +``` + diff --git a/keyboards/dz60/keymaps/boris_burger/config.h b/keyboards/dz60/keymaps/boris_burger/config.h new file mode 100644 index 0000000000..9560d51a6f --- /dev/null +++ b/keyboards/dz60/keymaps/boris_burger/config.h @@ -0,0 +1 @@ +#define GRAVE_ESC_GUI_OVERRIDE # Always send Escape if GUI is pressed diff --git a/keyboards/dz60/keymaps/boris_burger/keymap.c b/keyboards/dz60/keymaps/boris_burger/keymap.c new file mode 100644 index 0000000000..5dcadf34c1 --- /dev/null +++ b/keyboards/dz60/keymaps/boris_burger/keymap.c @@ -0,0 +1,87 @@ +#include QMK_KEYBOARD_H + +/* Holds state of modifiers when Backspace was pressed. + * Used to ensure that the correct keycode is unregistered when Backspace is released. + */ +static uint8_t bspc_mods = 0; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * |-----------------------------------------------------------------------------------------+ + * | Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | Ins | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | Win | Alt | Space | Alt | Menu | L | D | R | + * `-----------------------------------------------------------------------------------------' + */ + LAYOUT_directional( + KC_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , _______, KC_BSPC, + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, + MO(1) , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , + KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_INS , + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT + ), + + /* FN Layer + * ,-----------------------------------------------------------------------------------------. + * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | + * |-----------------------------------------------------------------------------------------+ + * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | BL T| BL M| BL+ | BL- | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | |RESET| | | | | | | PgUp| | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | Home| PgDn| End | + * `-----------------------------------------------------------------------------------------' + */ + LAYOUT_directional( + KC_GRV , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, KC_DEL , + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, + _______, BL_TOGG, BL_STEP, BL_INC , BL_DEC , _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, RESET , _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + ), +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + case KC_BSPC: { + if (record->event.pressed) { + const uint8_t current_mods = get_mods(); + const uint8_t shift = current_mods & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)); + const uint8_t ctrl = current_mods & (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTL)); + bspc_mods = current_mods; + if(shift || ctrl) { + add_key(KC_DEL); + add_mods(current_mods); + send_keyboard_report(); + } else { + return true; + } + } + else { + if(bspc_mods & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTL))) { + // if Shift or Ctrl was pressed with Backspace, than that was intepreted as Del, so we need + // to unregister the Del key + del_key(KC_DEL); + } else { + // Either Backspace was pressed without mods, or with a modifier other than Shift or Ctrl + // so it is simply taken as Backspace + del_key(KC_BSPC); + } + send_keyboard_report(); + } + return false; + } + default: + return true; + } +} From 0e4374042c5aef32762637f6fefd4662106bd5af Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 10 Oct 2018 16:32:38 -0700 Subject: [PATCH 153/269] Update and cleanup AVR Hardware docs --- docs/hardware_avr.md | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/docs/hardware_avr.md b/docs/hardware_avr.md index be69324062..4d81a23d7d 100644 --- a/docs/hardware_avr.md +++ b/docs/hardware_avr.md @@ -8,7 +8,7 @@ If you have not yet you should read the [Keyboard Guidelines](hardware_keyboard_ QMK has a number of features to simplify working with AVR keyboards. For most keyboards you don't have to write a single line of code. To get started run the `util/new_project.sh` script: -``` +```bash $ util/new_project.sh my_awesome_keyboard ###################################################### # /keyboards/my_awesome_keyboard project created. To start @@ -30,7 +30,7 @@ This is where all the custom logic for your keyboard goes. Many keyboards do not This is the file you define your [Layout Macro(s)](feature_layouts.md) in. At minimum you should have a `#define LAYOUT` for your keyboard that looks something like this: -``` +```c #define LAYOUT( \ k00, k01, k02, \ k10, k11 \ @@ -57,7 +57,7 @@ At the top of the `config.h` you'll find USB related settings. These control how Do change the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` lines to accurately reflect your keyboard. -``` +```c #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x6060 #define DEVICE_VER 0x0001 @@ -72,14 +72,14 @@ Do change the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` lines to accurately r The next section of the `config.h` file deals with your keyboard's matrix. The first thing you should set is the matrix's size. This is usually, but not always, the same number of rows and columns as the physical key arrangement. -``` +```c #define MATRIX_ROWS 2 #define MATRIX_COLS 3 ``` Once you've defined the size of your matrix you need to define which pins on your MCU are connected to rows and columns. To do so simply specify the names of those pins: -``` +```c #define MATRIX_ROW_PINS { D0, D5 } #define MATRIX_COL_PINS { F1, F0, B0 } #define UNUSED_PINS @@ -89,7 +89,7 @@ The number of `MATRIX_ROW_PINS` entries must be the same as the number you assig Finally, you can specify the direction your diodes point. This can be `COL2ROW`, `ROW2COL`, or `CUSTOM_MATRIX`. -``` +```c #define DIODE_DIRECTION COL2ROW ``` @@ -97,16 +97,14 @@ Finally, you can specify the direction your diodes point. This can be `COL2ROW`, By default QMK supports backlighting on pins `B5`, `B6`, and `B7`. If you are using one of those you can simply enable it here. For more details see the [Backlight Documentation](feature_backlight.md). -``` +```c #define BACKLIGHT_PIN B7 #define BACKLIGHT_LEVELS 3 #define BACKLIGHT_BREATHING #define BREATHING_PERIOD 6 ``` -{% hint style='info' %} -You can use backlighting on any pin you like, but you will have to do more work to support that. See the [Backlight Documentation](feature_backlight.md) for more details. -{% endhint %} +?> You can use backlighting on any pin you like, but you will have to do more work to support that. See the [Backlight Documentation](feature_backlight.md) for more details. ### Other Configuration Options @@ -120,7 +118,7 @@ You use the `rules.mk` file to tell QMK what files to build and what features to These options tell the build system what CPU to build for. Be very careful if you change any of these settings, you can render your keyboard inoperable. -``` +```make MCU = atmega32u4 F_CPU = 16000000 ARCH = AVR8 @@ -128,26 +126,26 @@ F_USB = $(F_CPU) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT ``` -### Bootloader Size +### Bootloaders -The bootloader is a special section of your MCU that allows you to upgrade the code stored on the MCU. Think of it like a Rescue Partition for your keyboard. If you are using a teensy 2.0, or a device like the Ergodox EZ that uses the teensy bootloader you should set this to `512`. Most other bootloaders should be set to `4096`, but `1024` and `2048` are other possible values you may encounter. +The bootloader is a special section of your MCU that allows you to upgrade the code stored on the MCU. Think of it like a Rescue Partition for your keyboard. -#### Teensy 2.0 Bootloader Example +#### Teensy Bootloader Example -``` -OPT_DEFS += -DBOOTLOADER_SIZE=512 -``` - -#### Teensy 2.0++ Bootloader Example - -``` -OPT_DEFS += -DBOOTLOADER_SIZE=1024 +```make +BOOTLOADER = halfkay ``` #### Atmel DFU Loader Example +```make +BOOTLOADER = atmel-dfu ``` -OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +#### Pro Micro Bootloader Example + +```make +BOOTLOADER = caterina ``` ### Build Options From 43757cd985153ba4f620336003c20b3554c03678 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 10 Oct 2018 16:10:30 -0700 Subject: [PATCH 154/269] Cleanup learning newb links --- docs/_sidebar.md | 1 + docs/newbs.md | 3 +-- docs/newbs_learn_more_resources.md | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 973428c9e0..32e3c7eca0 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -3,6 +3,7 @@ * [Building Your First Firmware](newbs_building_firmware.md) * [Flashing Firmware](newbs_flashing.md) * [Testing and Debugging](newbs_testing_debugging.md) + * [Learning Resources](newbs_learn_more_resources.md) * [QMK Basics](README.md) * [QMK Introduction](getting_started_introduction.md) diff --git a/docs/newbs.md b/docs/newbs.md index 87933b018c..38a9607d44 100644 --- a/docs/newbs.md +++ b/docs/newbs.md @@ -6,7 +6,7 @@ Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built y ## Overview -There are 4 main sections to this guide: +There are 5 main sections to this guide: * [Getting Started](newbs_getting_started.md) * [Building Your First Firmware](newbs_building_firmware.md) @@ -15,4 +15,3 @@ There are 4 main sections to this guide: * [Learn More with these Resources](newbs_learn_more_resources.md) This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md). - diff --git a/docs/newbs_learn_more_resources.md b/docs/newbs_learn_more_resources.md index 69d165c2bb..23b99f470f 100644 --- a/docs/newbs_learn_more_resources.md +++ b/docs/newbs_learn_more_resources.md @@ -2,12 +2,12 @@ These resources are aimed at giving new members in the qmk community more understanding to the information provided in the newbs docs. Git resources: -* -*[Great General Tutorial](https://www.codecademy.com/learn/learn-git) -*[Git Game To Learn From Examples](https://learngitbranching.js.org/) -*[Git Resources to Learn More About Github](getting_started_github.md) -*[Git Resources Aimed Specificly toward QMK](contributing.md) + +* [Great General Tutorial](https://www.codecademy.com/learn/learn-git) +* [Git Game To Learn From Examples](https://learngitbranching.js.org/) +* [Git Resources to Learn More About Github](getting_started_github.md) +* [Git Resources Aimed Specificly toward QMK](contributing.md) Command Line resources: -*[Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line) \ No newline at end of file +* [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line) From a7d05820a6258178b7ea440ee2781edf074d8f41 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 10 Oct 2018 12:38:10 -0700 Subject: [PATCH 155/269] Add documentation for Combo feature --- docs/_sidebar.md | 1 + docs/_summary.md | 1 + docs/config_options.md | 6 +++ docs/feature_combo.md | 88 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 docs/feature_combo.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 32e3c7eca0..56a6463918 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -48,6 +48,7 @@ * [Backlight](feature_backlight.md) * [Bluetooth](feature_bluetooth.md) * [Bootmagic](feature_bootmagic.md) + * [Combos](feature_combo) * [Command](feature_command.md) * [Dynamic Macros](feature_dynamic_macros.md) * [Grave Escape](feature_grave_esc.md) diff --git a/docs/_summary.md b/docs/_summary.md index 973428c9e0..11aeb7cd36 100644 --- a/docs/_summary.md +++ b/docs/_summary.md @@ -47,6 +47,7 @@ * [Backlight](feature_backlight.md) * [Bluetooth](feature_bluetooth.md) * [Bootmagic](feature_bootmagic.md) + * [Combos](feature_combo) * [Command](feature_command.md) * [Dynamic Macros](feature_dynamic_macros.md) * [Grave Escape](feature_grave_esc.md) diff --git a/docs/config_options.md b/docs/config_options.md index 4678a7146c..19861c9d23 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -155,6 +155,10 @@ If you define these options you will enable the associated feature, which may in going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this. +* `#define COMBO_COUNT 2` + * Set this to the number of combos that you're using in the [Combo](feature_combo.md) feature. +* `#define COMBO_TERM 200` + * how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined. ## RGB Light Configuration @@ -234,6 +238,8 @@ Use these to enable or disable building certain features. The more you have enab * Console for debug(+400) * `COMMAND_ENABLE` * Commands for debug and configuration +* `COMBO_ENABLE` + * Key combo feature * `NKRO_ENABLE` * USB N-Key Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work * `AUDIO_ENABLE` diff --git a/docs/feature_combo.md b/docs/feature_combo.md new file mode 100644 index 0000000000..f509e9f33f --- /dev/null +++ b/docs/feature_combo.md @@ -0,0 +1,88 @@ +# Combos + +The Combo feature is a chording type solution for adding custom actions. It lets you hit multiple keys at once and produce a different effect. For instance, hitting `A` and `S` within the tapping term would hit `ESC` instead, or have it perform even more complex tasks. + +To enable this feature, yu need to add `COMBO_ENABLE = yes` to your `rules.mk`. + +Additionally, in your `config.h`, you'll need to specify the number of combos that you'll be using, by adding `#define COMBO_COUNT 1` (replacing 1 with the number that you're using). + + +Also, by default, the tapping term for the Combos is set to the same value as `TAPPING_TERM` (200 by default on most boards). But you can specify a different value by defining it in your `config.h`. For instance: `#define COMBO_TERM 300` would set the time out period for combos to 300ms. + +Then, your `keymap.c` file, you'll need to define a sequence of keys, terminated with `COMBO_END`, and a structure to list the combination of keys, and it's resulting action. + +```c +const uint16_t PROGMEM test_combo[] = {KC_A, KC_B, COMBO_END}; +combo_t key_combos[COMBO_COUNT] = {COMBO(test_combo, KC_ESC)}; +``` + +This will send "Escape" if you hit the A and B keys. + +!> This method only supports [basic keycodes](keycodes_basic.md). See the examples for more control. + +## Examples + +If you want to add a list, then you'd use something like this: + +```c +enum combos { + AB_ESC, + JK_TAB +} +const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END}; +const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [AB_ESC] = COMBO(ab_combo, KC_ESC), + [JK_TAB] = COMBO(jk_combo, KC_TAB) +}; +``` + +For a more complicated implementation, you can use the `process_combo_event` function to add custom handling. + +```c +enum combo_events { + ZC_COPY, + ZV_PASTE + }; + +const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END}; +const uint16_t PROGMEM paste_combo[] = {KC_Z, KC_V, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [ZC_COPY] = COMBO_ACTION(copy_combo), + [ZV_PASTE] = COMBO_ACTION(paste_combo), +}; + +void process_combo_event(uint8_t combo_index, bool pressed) { + switch(combo_index) { + case ZC_COPY: + if (pressed) { + register_code(KC_LCTL); + register_code(KC_C); + unregister_code(KC_C); + unregister_code(KC_LCTL); + } + break; + + case ZV_PASTE: + if (pressed) { + register_code(KC_LCTL); + register_code(KC_V); + unregister_code(KC_V); + unregister_code(KC_LCTL); + } + break; + } +} +``` + +This will send Ctrl+C if you hit Z and C, and Ctrl+V if you hit Z and V. But you could change this to do stuff like change layers, play sounds, or change settings. + +## Additional Configuration + +If you're using long combos, or even longer combos, you may run into issues with this, as the structure may not be large enough to accommodate what you're doing. + +In this case, you can add either `#define EXTRA_LONG_COMBOS` or `#define EXTRA_EXTRA_LONG_COMBOS` in your `config.h` file. + +You may also be able to enable action keys by defining `COMBO_ALLOW_ACTION_KEYS`. From 8a778d656dc42289b4cc344c8ef0abae2de73eff Mon Sep 17 00:00:00 2001 From: Oscillope Date: Thu, 11 Oct 2018 20:00:17 -0400 Subject: [PATCH 156/269] Keymap: Undo my backlight workaround (#4122) * Update jj40 keymap for easier pgup/pgdn * Backlight problem fixed by a previous commit --- keyboards/jj40/keymaps/oscillope/backlight.c | 60 -------------------- keyboards/jj40/keymaps/oscillope/keymap.c | 4 +- 2 files changed, 2 insertions(+), 62 deletions(-) delete mode 100644 keyboards/jj40/keymaps/oscillope/backlight.c diff --git a/keyboards/jj40/keymaps/oscillope/backlight.c b/keyboards/jj40/keymaps/oscillope/backlight.c deleted file mode 100644 index 14c677cd6c..0000000000 --- a/keyboards/jj40/keymaps/oscillope/backlight.c +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Backlighting code for PS2AVRGB boards (ATMEGA32A) - * Kenneth A. (github.com/krusli | krusli.me) - */ - -#include "quantum.h" - -#include -#include - -// Port D: digital pins of the AVR chipset -#define NUMLOCK_PORT (1 << 0) // D0 -#define CAPSLOCK_PORT (1 << 1) // D1 -#define BACKLIGHT_PORT (1 << 4) // D4 -#define SCROLLLOCK_PORT (1 << 6) // D6 - -/** - * References - * Port Registers: https://www.arduino.cc/en/Reference/PortManipulation - * TCCR1A: https://electronics.stackexchange.com/questions/92350/what-is-the-difference-between-tccr1a-and-tccr1b - * Timers: http://www.avrbeginners.net/architecture/timers/timers.html - * 16-bit timer setup: http://sculland.com/ATmega168/Interrupts-And-Timers/16-Bit-Timer-Setup/ - * PS2AVRGB firmware: https://github.com/showjean/ps2avrU/tree/master/firmware - */ - -// @Override -// turn LEDs on and off depending on USB caps/num/scroll lock states. -__attribute__ ((weak)) -void led_set_user(uint8_t usb_led) { -/* It appears that these cause the v1 JJ40 PCB to hang. - * I haven't looked into why, but I don't have any LEDs on my board anyway. */ -#if 0 - if (usb_led & (1 << USB_LED_NUM_LOCK)) { - // turn on - DDRD |= NUMLOCK_PORT; - PORTD |= NUMLOCK_PORT; - } else { - // turn off - DDRD &= ~NUMLOCK_PORT; - PORTD &= ~NUMLOCK_PORT; - } - - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - DDRD |= CAPSLOCK_PORT; - PORTD |= CAPSLOCK_PORT; - } else { - DDRD &= ~CAPSLOCK_PORT; - PORTD &= ~CAPSLOCK_PORT; - } - - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - DDRD |= SCROLLLOCK_PORT; - PORTD |= SCROLLLOCK_PORT; - } else { - DDRD &= ~SCROLLLOCK_PORT; - PORTD &= ~SCROLLLOCK_PORT; - } -#endif -} - diff --git a/keyboards/jj40/keymaps/oscillope/keymap.c b/keyboards/jj40/keymaps/oscillope/keymap.c index 49ceff864c..8b30f52c8b 100644 --- a/keyboards/jj40/keymaps/oscillope/keymap.c +++ b/keyboards/jj40/keymaps/oscillope/keymap.c @@ -62,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Ins | | | () | [] | {} | Left | Down | Up |Right | | | + * | Ins | | | () | [] | {} | Home | PgDn | PgUp | End | | | * |------+------+------+------+------+------|------+------+------+------+------+------| * |RESET | Back | Fwd | | | | | | Mute | Vol- | Vol+ | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_LOWER] = KEYMAP( \ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ - KC_INS, _______, _______, CC_PRN, CC_BRC, CC_CBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \ + KC_INS, _______, _______, CC_PRN, CC_BRC, CC_CBR, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, \ RESET, KC_WBAK, KC_WFWD, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, \ _______, _______, _______, _______, KC_LOCK, _______, _______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT \ ), From ae489efee4512790e38f173bcd2e2f1e2547da07 Mon Sep 17 00:00:00 2001 From: Jason Thigpen Date: Thu, 11 Oct 2018 17:00:53 -0700 Subject: [PATCH 157/269] Keymap: Add crd's simple layout (#4117) * Add crd's simple layout * Fix transparent mapping in crd's config * Add secondary navigation to fn layer --- keyboards/dz60/keymaps/crd/keymap.c | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 keyboards/dz60/keymaps/crd/keymap.c diff --git a/keyboards/dz60/keymaps/crd/keymap.c b/keyboards/dz60/keymaps/crd/keymap.c new file mode 100644 index 0000000000..5e9242c9d9 --- /dev/null +++ b/keyboards/dz60/keymaps/crd/keymap.c @@ -0,0 +1,48 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl/Esc| A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | DEL | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | Alt | Cmd | Space | Cmd | FN | L | D | R | + * `-----------------------------------------------------------------------------------------' + */ + + LAYOUT_directional( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT + ), + + /* FN Layer + * ,-----------------------------------------------------------------------------------------. + * | ` ~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | RESET | + * |-----------------------------------------------------------------------------------------+ + * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | BL T| BL M| BL+ | BL- | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | |PgUp | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | |Home |PgDn | End | + * `-----------------------------------------------------------------------------------------' + */ + + LAYOUT_directional( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RESET, + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, + _______, BL_TOGG, BL_STEP, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDOWN, KC_END + ), +}; From 661e304033d704084a85930a4ff2c91e13c270af Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Sat, 29 Sep 2018 23:45:22 +0900 Subject: [PATCH 158/269] Add a temporary comment to quantum/rgblight.h to aid migration. Add a temporary comment. The content is a contrast table of old magic number and new symbol. --- quantum/rgblight.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/quantum/rgblight.h b/quantum/rgblight.h index d1e00eef31..50567b5b20 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -18,6 +18,52 @@ #include "rgblight_reconfig.h" +/***** rgblight_mode(mode)/rgblight_mode_noeeprom(mode) **** + + old mode number (before 0.6.117) to new mode name table + +|-----------------|-----------------------------------| +| old mode number | new mode name | +|-----------------|-----------------------------------| +| 1 | RGBLIGHT_MODE_STATIC_LIGHT | +| 2 | RGBLIGHT_MODE_BREATHING | +| 3 | RGBLIGHT_MODE_BREATHING + 1 | +| 4 | RGBLIGHT_MODE_BREATHING + 2 | +| 5 | RGBLIGHT_MODE_BREATHING + 3 | +| 6 | RGBLIGHT_MODE_RAINBOW_MOOD | +| 7 | RGBLIGHT_MODE_RAINBOW_MOOD + 1 | +| 8 | RGBLIGHT_MODE_RAINBOW_MOOD + 2 | +| 9 | RGBLIGHT_MODE_RAINBOW_SWIRL | +| 10 | RGBLIGHT_MODE_RAINBOW_SWIRL + 1 | +| 11 | RGBLIGHT_MODE_RAINBOW_SWIRL + 2 | +| 12 | RGBLIGHT_MODE_RAINBOW_SWIRL + 3 | +| 13 | RGBLIGHT_MODE_RAINBOW_SWIRL + 4 | +| 14 | RGBLIGHT_MODE_RAINBOW_SWIRL + 5 | +| 15 | RGBLIGHT_MODE_SNAKE | +| 16 | RGBLIGHT_MODE_SNAKE + 1 | +| 17 | RGBLIGHT_MODE_SNAKE + 2 | +| 18 | RGBLIGHT_MODE_SNAKE + 3 | +| 19 | RGBLIGHT_MODE_SNAKE + 4 | +| 20 | RGBLIGHT_MODE_SNAKE + 5 | +| 21 | RGBLIGHT_MODE_KNIGHT | +| 22 | RGBLIGHT_MODE_KNIGHT + 1 | +| 23 | RGBLIGHT_MODE_KNIGHT + 2 | +| 24 | RGBLIGHT_MODE_CHRISTMAS | +| 25 | RGBLIGHT_MODE_STATIC_GRADIENT | +| 26 | RGBLIGHT_MODE_STATIC_GRADIENT + 1 | +| 27 | RGBLIGHT_MODE_STATIC_GRADIENT + 2 | +| 28 | RGBLIGHT_MODE_STATIC_GRADIENT + 3 | +| 29 | RGBLIGHT_MODE_STATIC_GRADIENT + 4 | +| 30 | RGBLIGHT_MODE_STATIC_GRADIENT + 5 | +| 31 | RGBLIGHT_MODE_STATIC_GRADIENT + 6 | +| 32 | RGBLIGHT_MODE_STATIC_GRADIENT + 7 | +| 33 | RGBLIGHT_MODE_STATIC_GRADIENT + 8 | +| 34 | RGBLIGHT_MODE_STATIC_GRADIENT + 9 | +| 35 | RGBLIGHT_MODE_RGB_TEST | +| 36 | RGBLIGHT_MODE_ALTERNATING | +|-----------------|-----------------------------------| + *****/ + #define _RGBM_SINGLE_STATIC(sym) RGBLIGHT_MODE_ ## sym, #define _RGBM_SINGLE_DYNAMIC(sym) RGBLIGHT_MODE_ ## sym, #define _RGBM_MULTI_STATIC(sym) RGBLIGHT_MODE_ ## sym, From ec59556cd7896e359340feb961f10f3f12a48b95 Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Wed, 10 Oct 2018 06:50:11 +0900 Subject: [PATCH 159/269] add a notice into docs/feature_rgblight.md --- docs/feature_rgblight.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md index 925dca724b..a2820347de 100644 --- a/docs/feature_rgblight.md +++ b/docs/feature_rgblight.md @@ -96,9 +96,10 @@ if `RGBLIGHT_EFFECT_xxxx` or `RGBLIGHT_ANIMATIONS` is defined, you also have a n |`RGBLIGHT_MODE_RGB_TEST` | *None* |RGB Test | |`RGBLIGHT_MODE_ALTERNATING` | *None* |Alternating | - Check out [this video](https://youtube.com/watch?v=VKrpPAHlisY) for a demonstration. +Note: For versions older than 0.6.117, The mode numbers were written directly. In `quantum/rgblight.h` there is a contrast table between the old mode number and the current symbol. + The following options can be used to tweak the various animations: |Define |Default |Description | From 4bb0fb2ffc2d3fd136f5803b92f1a55792645a28 Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Thu, 11 Oct 2018 22:15:31 +0900 Subject: [PATCH 160/269] A comment indicating the insertion location of the new mode was added. --- quantum/rgblight.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 50567b5b20..33b279f08c 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -284,6 +284,10 @@ void rgblight_effect_alternating(void); #ifdef RGBLIGHT_EFFECT_ALTERNATING _RGBM_SINGLE_DYNAMIC( ALTERNATING ) #endif + //// Add a new mode here. + // #ifdef RGBLIGHT_EFFECT_ + // _RGBM__( ) + // #endif #endif #undef _RGBM_SINGLE_STATIC From 52ecc76e28bbcde9e35d35eb48a4d5b78aa204e2 Mon Sep 17 00:00:00 2001 From: Yann Hodique Date: Thu, 11 Oct 2018 15:26:56 -0700 Subject: [PATCH 161/269] port sun_usb converter from tmk initial import --- keyboards/converter/sun_usb/command_extra.c | 64 ++++++ keyboards/converter/sun_usb/config.h | 88 ++++++++ keyboards/converter/sun_usb/led.c | 32 +++ keyboards/converter/sun_usb/matrix.c | 197 ++++++++++++++++++ keyboards/converter/sun_usb/readme.md | 89 ++++++++ keyboards/converter/sun_usb/rules.mk | 42 ++++ .../sun_usb/type3/keymaps/default/keymap.c | 29 +++ keyboards/converter/sun_usb/type3/rules.mk | 0 keyboards/converter/sun_usb/type3/type3.h | 66 ++++++ .../sun_usb/type5/keymaps/default/keymap.c | 30 +++ keyboards/converter/sun_usb/type5/rules.mk | 0 keyboards/converter/sun_usb/type5/type5.h | 148 +++++++++++++ 12 files changed, 785 insertions(+) create mode 100644 keyboards/converter/sun_usb/command_extra.c create mode 100644 keyboards/converter/sun_usb/config.h create mode 100644 keyboards/converter/sun_usb/led.c create mode 100644 keyboards/converter/sun_usb/matrix.c create mode 100644 keyboards/converter/sun_usb/readme.md create mode 100644 keyboards/converter/sun_usb/rules.mk create mode 100644 keyboards/converter/sun_usb/type3/keymaps/default/keymap.c create mode 100644 keyboards/converter/sun_usb/type3/rules.mk create mode 100644 keyboards/converter/sun_usb/type3/type3.h create mode 100644 keyboards/converter/sun_usb/type5/keymaps/default/keymap.c create mode 100644 keyboards/converter/sun_usb/type5/rules.mk create mode 100644 keyboards/converter/sun_usb/type5/type5.h diff --git a/keyboards/converter/sun_usb/command_extra.c b/keyboards/converter/sun_usb/command_extra.c new file mode 100644 index 0000000000..756a9160bb --- /dev/null +++ b/keyboards/converter/sun_usb/command_extra.c @@ -0,0 +1,64 @@ +#include QMK_KEYBOARD_H +#include "protocol/serial.h" + +bool sun_bell = false; +bool sun_click = false; + + +bool command_extra(uint8_t code) +{ + switch (code) { + case KC_H: + case KC_SLASH: /* ? */ + print("\n\n----- Sun converter Help -----\n"); + print("Home: Toggle Bell\n"); + print("End: Toggle Click\n"); + print("PgUp: LED all On\n"); + print("PgDown: LED all Off\n"); + print("Insert: Layout\n"); + print("Delete: Reset\n"); + return false; + case KC_DEL: + print("Reset\n"); + serial_send(0x01); + break; + case KC_HOME: + sun_bell = !sun_bell; + if (sun_bell) { + print("Bell On\n"); + serial_send(0x02); + } else { + print("Bell Off\n"); + serial_send(0x03); + } + break; + case KC_END: + sun_click = !sun_click; + if (sun_click) { + print("Click On\n"); + serial_send(0x0A); + } else { + print("Click Off\n"); + serial_send(0x0B); + } + break; + case KC_PGUP: + print("LED all on\n"); + serial_send(0x0E); + serial_send(0xFF); + break; + case KC_PGDOWN: + print("LED all off\n"); + serial_send(0x0E); + serial_send(0x00); + break; + case KC_INSERT: + print("layout\n"); + serial_send(0x0F); + break; + default: + xprintf("Unknown extra command: %02X\n", code); + return false; + } + return true; +} diff --git a/keyboards/converter/sun_usb/config.h b/keyboards/converter/sun_usb/config.h new file mode 100644 index 0000000000..f7ad416393 --- /dev/null +++ b/keyboards/converter/sun_usb/config.h @@ -0,0 +1,88 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#define CUSTOM_MATRIX 2 + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3333 +#define DEVICE_VER 0x0100 +#define MANUFACTURER QMK +#define PRODUCT Sun keyboard converter +#define DESCRIPTION USB converter for Sun type 5 keyboard + +/* matrix size */ +#define MATRIX_ROWS 16 +#define MATRIX_COLS 8 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \ + keyboard_report->mods == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + + +/* Serial(USART) configuration + * asynchronous, negative logic, 1200baud, no flow control + * 1-start bit, 8-data bit, non parity, 1-stop bit + */ +#define SERIAL_SOFT_BAUD 1200 +#define SERIAL_SOFT_PARITY_NONE +#define SERIAL_SOFT_BIT_ORDER_LSB +#define SERIAL_SOFT_LOGIC_NEGATIVE +/* RXD Port */ +#define SERIAL_SOFT_RXD_ENABLE +#define SERIAL_SOFT_RXD_DDR DDRD +#define SERIAL_SOFT_RXD_PORT PORTD +#define SERIAL_SOFT_RXD_PIN PIND +#define SERIAL_SOFT_RXD_BIT 2 +#define SERIAL_SOFT_RXD_VECT INT2_vect +/* RXD Interupt */ +#define SERIAL_SOFT_RXD_INIT() do { \ + /* pin configuration: input with pull-up */ \ + SERIAL_SOFT_RXD_DDR &= ~(1< + +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 +#include "protocol/serial.h" + +void led_set(uint8_t usb_led) +{ + uint8_t sun_led = 0; + if (usb_led & (1< + +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 +#include "protocol/serial.h" + +/* + * Matrix Array usage: + * + * ROW: 16(4bits) + * COL: 8(3bits) + * + * 8bit wide + * +---------+ + * 0|00 ... 07| + * 1|08 ... 0F| + * :| ... | + * :| ... | + * E|70 ... 77| + * F|78 ... 7F| + * +---------+ + */ +static uint8_t matrix[MATRIX_ROWS]; +#define ROW(code) ((code>>3)&0xF) +#define COL(code) (code&0x07) + +static bool is_modified = false; + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + /* DDRD |= (1<<6); */ + /* PORTD |= (1<<6); */ + debug_enable = true; + + serial_init(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00; + + /* // wait for keyboard coming up */ + /* // otherwise LED status update fails */ + /* print("Reseting "); */ + /* while (1) { */ + /* print("."); */ + /* while (serial_recv()); */ + /* serial_send(0x01); */ + /* _delay_ms(500); */ + /* if (serial_recv() == 0xFF) { */ + /* _delay_ms(500); */ + /* if (serial_recv() == 0x04) */ + /* break; */ + /* } */ + /* } */ + /* print(" Done\n"); */ + + /* PORTD &= ~(1<<6); */ + + matrix_init_quantum(); + return; +} + +uint8_t matrix_scan(void) +{ + uint8_t code; + code = serial_recv(); + if (!code) return 0; + + debug_hex(code); debug(" "); + + switch (code) { + case 0xFF: // reset success: FF 04 + print("reset: "); + _delay_ms(500); + code = serial_recv(); + xprintf("%02X\n", code); + if (code == 0x04) { + // LED status + led_set(host_keyboard_leds()); + } + return 0; + case 0xFE: // layout: FE + print("layout: "); + _delay_ms(500); + xprintf("%02X\n", serial_recv()); + return 0; + case 0x7E: // reset fail: 7E 01 + print("reset fail: "); + _delay_ms(500); + xprintf("%02X\n", serial_recv()); + return 0; + case 0x7F: + // all keys up + for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00; + return 0; + } + + if (code&0x80) { + // break code + if (matrix_is_on(ROW(code), COL(code))) { + matrix[ROW(code)] &= ~(1< + + 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT( + KC_F10,KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_BSPC, KC_VOLD, KC_MUTE, KC_VOLU, + KC_F12,KC_F13, KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, + KC_F14,KC_F15, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P, KC_LBRC,KC_RBRC, KC_DEL, KC_HOME, KC_UP, KC_PGUP, + KC_F16,KC_F17, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_LEFT,KC_INSERT,KC_RIGHT, + KC_F18,KC_F19, KC_LSFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_RSFT,KC_RCTL, KC_END, KC_DOWN,KC_PGDOWN, + KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI + ), +}; diff --git a/keyboards/converter/sun_usb/type3/rules.mk b/keyboards/converter/sun_usb/type3/rules.mk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/converter/sun_usb/type3/type3.h b/keyboards/converter/sun_usb/type3/type3.h new file mode 100644 index 0000000000..f6f14f4eff --- /dev/null +++ b/keyboards/converter/sun_usb/type3/type3.h @@ -0,0 +1,66 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef TYPE3_H +#define TYPE3_H + +#include "quantum.h" + +/* Sun type 3 keyboard +,-------. ,-----------------------------------------------------------. ,-----------. +| 01| 03| | 05| 06| 08| 0A| 0C| 0E| 10| 11| 12| 2B| | 15| 16| 17| +|-------| |-----------------------------------------------------------| |-----------| +| 19| 1A| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2D| 2E| 2F| +|-------| |-----------------------------------------------------------| |-----------| +| 31| 33| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 42 | | 44| 45| 46| +|-------| |-----------------------------------------------------------| |-----------| +| 48| 49| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| +|-------| |-----------------------------------------------------------| |-----------| +| 5F| 61| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 6F| | 70| 71| 72| +`-------' |-----------------------------------------------------------| `-----------' + | 77 | 78 | 79 | 7A | 13 | + `-----------------------------------------------------------' +*/ + + +#define LAYOUT( \ + K01,K03, K05,K06, K08, K0A, K0C, K0E, K10,K11,K12,K2B, K15,K16,K17, \ + K19,K1A, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2D,K2E,K2F, \ + K31,K33, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K42, K44,K45,K46, \ + K48,K49, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \ + K5F,K61, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E,K6F, K70,K71,K72, \ + K77,K78, K79, K7A,K13 \ +) { \ + { KC_NO, K01 , KC_NO, K03 , KC_NO, K05 , K06 , KC_NO }, \ + { K08 , KC_NO, K0A , KC_NO, K0C , KC_NO, K0E , KC_NO }, \ + { K10 , K11 , K12 , K13 , KC_NO, K15 , K16 , K17 }, \ + { KC_NO, K19 , K1A , KC_NO, KC_NO, K1D , K1E , K1F }, \ + { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \ + { K28 , K29 , K2A , K2B , KC_NO, K2D , K2E , K2F }, \ + { KC_NO, K31 , KC_NO, K33 , KC_NO, K35 , K36 , K37 }, \ + { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \ + { K40 , K41 , K42 , KC_NO, K44 , K45 , K46 , KC_NO }, \ + { K48 , K49 , KC_NO, KC_NO, K4C , K4D , K4E , K4F }, \ + { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \ + { K58 , K59 , KC_NO, K5B , K5C , K5D , KC_NO, K5F }, \ + { KC_NO, K61 , KC_NO, K63 , K64 , K65 , K66 , K67 }, \ + { K68 , K69 , K6A , K6B , K6C , K6D , K6E , K6F }, \ + { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, KC_NO, K77 }, \ + { K78 , K79 , K7A , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ +} + +#endif diff --git a/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c b/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c new file mode 100644 index 0000000000..5e04ff4b3b --- /dev/null +++ b/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c @@ -0,0 +1,30 @@ +/* +Copyright 2012 Jun Wako + +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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* LAYOUT_jp_unix is a superset of the other layouts, hence the default */ + LAYOUT_jp_unix( + KC_HELP, KC_NO, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_MUTE,KC_VOLD,KC_VOLU,KC_PWR, + KC_STOP, KC_AGAIN, KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, + KC_MENU, KC_UNDO, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_SELECT, KC_COPY, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, + KC_EXECUTE,KC_PASTE, KC_LSFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_FIND, KC_CUT, KC_CAPS,KC_LALT,KC_LGUI,KC_HENK, KC_SPC, KC_MHEN,KC_KANA,KC_RGUI,KC_APP,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT + ), +}; diff --git a/keyboards/converter/sun_usb/type5/rules.mk b/keyboards/converter/sun_usb/type5/rules.mk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/converter/sun_usb/type5/type5.h b/keyboards/converter/sun_usb/type5/type5.h new file mode 100644 index 0000000000..da66d80abc --- /dev/null +++ b/keyboards/converter/sun_usb/type5/type5.h @@ -0,0 +1,148 @@ +/* + Copyright 2012 Jun Wako + + 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 . +*/ + +#ifndef TYPE5_H +#define TYPE5_H + +#include "quantum.h" + +/* sun type 5 keyboard, JP Unix-style +,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------. +| 76 | | 0F| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30| +`-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------' +,-------. ,-----------------------------------------------------------. ,-----------. ,---------------. +| 01| 03| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2C| 34| 60| | 62| 2E| 2F| 47| +|-------| |-----------------------------------------------------------| |------------ |---------------| +| 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 2B | | 42| 4A| 7B| | 44| 45| 46| | +|-------| |-----------------------------------------------------------| `-----------' |-----------| 7D| +| 31| 33| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| | +|-------| |-----------------------------------------------------------| ,---. |-----------|---| +| 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| | +|-------| |-----------------------------------------------------------| .-----------. |-----------| 5A| +| 5F| 61| | 77 | 13| 78 |*73 | 79 |*74 |*75| 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| | +`-------' `-----------------------------------------------------------' `-----------' `---------------' +*/ +#define LAYOUT_jp_unix( \ + K76, K0F, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \ + K01,K03, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2C,K34,K60, K62,K2E,K2F,K47, \ + K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, K42,K4A,K7B, K44,K45,K46,K7D, \ + K31,K33, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \ + K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \ + K5F,K61, K77,K13, K78, K73, K79, K74, K75, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \ +) { \ + { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \ + { K08 , K09 , K0A , K0B , K0C , K0D , K0E , K0F ,}, \ + { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \ + { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \ + { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \ + { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \ + { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \ + { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \ + { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \ + { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \ + { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \ + { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \ + { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \ + { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \ + { K70 , K71 , K72 , K73 , K74 , K75 , K76 , K77 }, \ + { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \ +} + +/* Sun type 5 keyboard, US Unix-style +,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------. +| 76 | | 0F| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30| +`-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------' +,-------. ,-----------------------------------------------------------. ,-----------. ,---------------. +| 01| 03| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2C| 34| 60| | 62| 2E| 2F| 47| +|-------| |-----------------------------------------------------------| |------------ |---------------| +| 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 2B | | 42| 4A| 7B| | 44| 45| 46| | +|-------| |-----------------------------------------------------------| `-----------' |-----------| 7D| +| 31| 33| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| | +|-------| |-----------------------------------------------------------| ,---. |-----------|---| +| 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| | +|-------| |-----------------------------------------------------------| .-----------. |-----------| 5A| +| 5F| 61| | 77 | 13| 78 | 79 | 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| | +`-------' `-----------------------------------------------------------' `-----------' `---------------' +*/ +#define LAYOUT_us_unix( \ + K76, K0F, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \ + K01,K03, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2C,K34,K60, K62,K2E,K2F,K47, \ + K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, K42,K4A,K7B, K44,K45,K46,K7D, \ + K31,K33, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \ + K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \ + K5F,K61, K77,K13, K78, K79, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \ +) { \ + { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \ + { K08 , K09 , K0A , K0B , K0C , K0D , K0E , K0F ,}, \ + { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \ + { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \ + { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \ + { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \ + { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \ + { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \ + { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \ + { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \ + { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \ + { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \ + { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \ + { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \ + { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, K76 , K77 }, \ + { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \ +} + +/* Sun type 5 keyboard, US ANSI-style + ,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------. + | 76 | | 1D| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30| + `-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------' + ,-------. ,-----------------------------------------------------------. ,-----------. ,---------------. + | 01| 03| | 2A| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2B | | 2C| 34| 60| | 62| 2E| 2F| 47| + |-------| |-----------------------------------------------------------| |------------ |---------------| + | 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 58 | | 42| 4A| 7B| | 44| 45| 46| | + |-------| |-----------------------------------------------------------| `-----------' |-----------| 7D| + | 31| 33| | 77 | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| | + |-------| |-----------------------------------------------------------| ,---. |-----------|---| + | 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| | + |-------| |-----------------------------------------------------------| .-----------. |-----------| 5A| + | 5F| 61| | 4C | 13| 78 | 79 | 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| | + `-------' `-----------------------------------------------------------' `-----------' `---------------' +*/ +#define LAYOUT_ansi( \ + K76, K1D, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \ + K01,K03, K2A,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29, K2B, K2C,K34,K60, K62,K2E,K2F,K47, \ + K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K58, K42,K4A,K7B, K44,K45,K46,K7D, \ + K31,K33, K77, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \ + K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \ + K5F,K61, K4C,K13, K78, K79, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \ +) { \ + { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \ + { K08 , K09 , K0A , K0B , K0C , K0D , K0E , KC_NO,}, \ + { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \ + { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \ + { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \ + { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \ + { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \ + { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \ + { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \ + { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \ + { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \ + { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \ + { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \ + { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \ + { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, K76 , K77 }, \ + { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \ +} +#endif From 0793abfd19d994e68f4b449eb2fed7ea51aa3e2f Mon Sep 17 00:00:00 2001 From: Patrick Hener Date: Fri, 12 Oct 2018 19:31:08 +0200 Subject: [PATCH 162/269] Add sendstring_german.h (#4124) * added sweet16 test keymap and touched sendstring_german.h * added sendstring_german.h * Delete keymap.c As suggested deleted the keymap file. --- quantum/keymap_extras/sendstring_german.h | 81 +++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 quantum/keymap_extras/sendstring_german.h diff --git a/quantum/keymap_extras/sendstring_german.h b/quantum/keymap_extras/sendstring_german.h new file mode 100644 index 0000000000..1eaafee317 --- /dev/null +++ b/quantum/keymap_extras/sendstring_german.h @@ -0,0 +1,81 @@ +/* Copyright 2018 Patrick Hener + * + * 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 . + */ +/* Sendstring definitions for the German layout */ +#ifndef SENDSTRING_GERMAN +#define SENDSTRING_GERMAN + +#include "keymap_german.h" + +const bool ascii_to_shift_lut[0x80] PROGMEM = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 1, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 0 +}; + +/* Until an ALT table/functionality is added, the following symbols will not work: +* § @ [ ] { } \ ~ äA öÖ ß ´ +* Following characters can be printed using other characters like so: +* [ in makro will be ü +* { in makro will be Ü +* ~ in makro will be ° +*/ +const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = { + 0, 0, 0, 0, 0, 0, 0, 0, + KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, KC_ESC, 0, 0, 0, 0, + + /* SPACE ! " # $ % & ' */ + KC_SPC, KC_1, KC_2, DE_HASH, KC_4, KC_5, KC_6, DE_HASH, + /* ( ) * + , - . / */ + KC_8, KC_9, DE_PLUS, DE_PLUS, KC_COMM, DE_MINS, KC_DOT, KC_7, + /* 0 1 2 3 4 5 6 7 */ + KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, + /* 8 9 : ; < = > ? */ + KC_8, KC_9, KC_DOT, KC_COMM, DE_LESS, KC_0, DE_LESS, KC_MINS, + /* @ A B C D E F G */ + KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, + /* H I J K L M N O */ + KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, + /* P Q R S T U V W */ + KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W, + /* X Y Z [ \ ] ^ _ */ + KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, DE_CIRC, DE_MINS, + /* ` a b c d e f g */ + DE_ACUT, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, + /* h i j k l m n o */ + KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, + /* p q r s t u v w */ + KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W, + /* x y z { | } ~ DELETE */ + KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL +}; + +#endif From e5c315f961a55ba31b44b70e4554a3969a788a99 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Fri, 12 Oct 2018 10:34:52 -0700 Subject: [PATCH 163/269] Treasure Type9 Fix: change diode direction to ROW2COL (#4125) --- keyboards/treasure/type9/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/treasure/type9/config.h b/keyboards/treasure/type9/config.h index 55f0a85956..367c53cb97 100644 --- a/keyboards/treasure/type9/config.h +++ b/keyboards/treasure/type9/config.h @@ -46,7 +46,7 @@ along with this program. If not, see . #define UNUSED_PINS /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ -#define DIODE_DIRECTION COL2ROW +#define DIODE_DIRECTION ROW2COL #define BACKLIGHT_PIN B5 // #define BACKLIGHT_BREATHING From d81d216d72fe4e50da22259558e86c70a4f14a8d Mon Sep 17 00:00:00 2001 From: asakuno Date: Sat, 13 Oct 2018 16:40:42 +0900 Subject: [PATCH 164/269] Fix Typo in Custom Quantum functions document (led_state) (#4129) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit *_LOCK   ↓ DEL --- docs/custom_quantum_functions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md index b077e4b78d..5b95450f26 100644 --- a/docs/custom_quantum_functions.md +++ b/docs/custom_quantum_functions.md @@ -117,12 +117,12 @@ void led_set_user(uint8_t usb_led) { } else { PORTB &= ~(1<<2); } - if (usb_led & (1< Date: Sat, 13 Oct 2018 21:46:46 +0100 Subject: [PATCH 165/269] Keymap: Move navigation buttons closer to the middle on XD75:skewwhiffy (#4118) * RGB toggle button * Remove custom lighting effects * Fix small bug in Symbols layer * Ignore mod tap interrupt in XD75 for skewwhiffy, and split layers into two for more flexibility and fix persistent layer issue * Replace shift in nav layer with IntelliJ omnibox shortcut to avoid a sticky shift * Remove custom setting in config, because it were annoying, it were. * Move navigation buttons in one key * Some review markups * Use enums for layers * Use LAYOUT_ortho_5x15 * Revert some capitalization changes made by accident --- keyboards/xd75/keymaps/skewwhiffy/config.h | 24 -- keyboards/xd75/keymaps/skewwhiffy/keymap.c | 277 +++++++++------------ 2 files changed, 111 insertions(+), 190 deletions(-) delete mode 100644 keyboards/xd75/keymaps/skewwhiffy/config.h diff --git a/keyboards/xd75/keymaps/skewwhiffy/config.h b/keyboards/xd75/keymaps/skewwhiffy/config.h deleted file mode 100644 index f52a97bbc8..0000000000 --- a/keyboards/xd75/keymaps/skewwhiffy/config.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2017 REPLACE_WITH_YOUR_NAME - * - * 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 . - */ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// place overrides here - -#endif diff --git a/keyboards/xd75/keymaps/skewwhiffy/keymap.c b/keyboards/xd75/keymaps/skewwhiffy/keymap.c index 11fa2f0e64..33f3868084 100644 --- a/keyboards/xd75/keymaps/skewwhiffy/keymap.c +++ b/keyboards/xd75/keymaps/skewwhiffy/keymap.c @@ -13,41 +13,49 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "xd75.h" +#include QMK_KEYBOARD_H #include "keymap_uk.h" -// Fillers to make layering more clear -#define _______ KC_TRNS // Layer shorthand -#define _CM 0 // Colemak -#define _DV 1 // Dvorak -#define _QW 2 // QWERTY -#define _NB 3 // Numbers -#define _SY 4 // Symbols -#define _NAV 5 // Navigation +enum Layers { + cm, // colemak + dv, // dvorak + qw, // qwerty + nbl, // numbers left + nbr, // numbers right + syl, // symbols left + syr, // symbols right + nal, // navigation left + nar // navigation right +}; // Layer buttons #define _Z_SFT SFT_T(UK_Z) #define _SCLSH SFT_T(UK_SCLN) #define _SLSH SFT_T(UK_SLSH) -#define _X_NB LT(_NB, UK_X) -#define _Q_NB LT(_NB, UK_Q) -#define _DOT_NB LT(_NB, UK_DOT) -#define _V_NB LT(_NB, UK_V) -#define _C_SY LT(_SY, UK_C) -#define _J_SY LT(_SY, UK_J) -#define _W_SY LT(_SY, UK_W) -#define _COM_SY LT(_SY, UK_COMM) -#define _AST_SY LT(_SY, UK_PAST) -#define _B_NAV LT(_NAV, UK_B) -#define _X_NAV LT(_NAV, UK_X) -#define _K_NAV LT(_NAV, UK_K) -#define _N_NAV LT(_NAV, UK_N) -#define _F1_NB LT(_NB, UK_F1) -#define _3_NB LT(_NB, UK_3) + +#define _X_NB LT(nbl, UK_X) +#define _Q_NB LT(nbl, UK_Q) +#define _DOT_NB LT(nbr, UK_DOT) +#define _V_NB LT(nbr, UK_V) +#define __NBL LT(nbl, _______) +#define __NBR LT(nbr, _______) + +#define _C_SY LT(syl, UK_C) +#define _J_SY LT(syl, UK_J) +#define _W_SY LT(syr, UK_W) +#define _COM_SY LT(syr, UK_COMM) +#define __SYL LT(syl, _______) +#define __SYR LT(syr, _______) + +#define _V_NAL LT(nal, UK_V) +#define _K_NAL LT(nal, UK_K) +#define _M_NAR LT(nar, UK_M) +#define __NAL LT(nal, _______) +#define __NAR LT(nar, _______) // Custom hotkeys -#define _TERM LCTL(UK_QUOT) // Hotkey for Cmder or iTerm +#define _TERM LCTL(UK_QUOT) // Hotkey for terminal #define _S_TAB S(UK_TAB) #define _C_LEFT LCTL(UK_LEFT) #define _C_RGHT LCTL(UK_RGHT) @@ -55,35 +63,34 @@ #define _A_RGHT LALT(UK_RGHT) enum custom_keycodes { - L_NEXT = SAFE_RANGE, - L_SB + IJ_OMN = SAFE_RANGE // IntelliJ Omnibox }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Colemak _CM +/* Colemak * .--------------------------------------------------------------------------------------------------------------------------------------. - * | | | | | | | | | | | | | | L_NEXT | L_SB | + * | | | | | | | | | | | | | | | | * |--------------------------------------------------------------------------------------------------------------------------------------| * | Q | W | F | P | G | | | | | | J | L | U | Y | ; | * |--------------------------------------------------------------------------------------------------------------------------------------| * | A | R | S | T | D | | | | | | H | N | E | I | O | * |--------------------------------------------------------------------------------------------------------------------------------------| * | Z | X | C | V | B | | | | | | K | M | , | . | / | - * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT | + * | SHIFT | NUMBER | SYMBOL | NAV | | | | | | | | NAV | SYMBOL | FUNC | SHIFT | * |--------------------------------------------------------------------------------------------------------------------------------------| * | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | | | | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT | * .--------------------------------------------------------------------------------------------------------------------------------------. */ - [_CM] = { - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, L_NEXT, L_SB }, - { UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, _______, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN }, - { UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, _______, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O }, - { _Z_SFT, _X_NB, _C_SY, UK_V, _B_NAV, _______, _______, _______, _______, _______, _K_NAV, UK_M, _COM_SY, _DOT_NB, _SLSH }, - { UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, _______, _______, _______, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT } - }, + [cm] = LAYOUT_ortho_5x15( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, _______, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN, \ + UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, _______, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O , \ + _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, _______, _______, _______, UK_K, _M_NAR, _COM_SY, _DOT_NB, _SLSH , \ + UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, _______, _______, _______, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT \ + ), -/* DVORAK _DV +/* Dvorak * .--------------------------------------------------------------------------------------------------------------------------------------. * | | | | | | | | | | | | | | | | * |--------------------------------------------------------------------------------------------------------------------------------------| @@ -92,18 +99,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | A | O | E | U | I | | | | | | D | H | T | N | S | * |--------------------------------------------------------------------------------------------------------------------------------------| * | ; | Q | J | K | X | | | | | | B | M | W | V | Z | - * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT | + * | SHIFT | NUMBER | SYMBOL | NAV | | | | | | | | NAV | SYMBOL | FUNC | SHIFT | * |--------------------------------------------------------------------------------------------------------------------------------------| * | | | | | | | | | | | | | | | | * |--------------------------------------------------------------------------------------------------------------------------------------| */ - [_DV] = { - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { UK_QUOT, UK_COMM, UK_DOT, UK_P, UK_Y, _______, _______, _______, _______, _______, UK_F, UK_G, UK_C, UK_R, UK_L }, - { UK_A, UK_O, UK_E, UK_U, UK_I, _______, _______, _______, _______, _______, UK_D, UK_H, UK_T, UK_N, UK_S }, - { _SCLSH, _Q_NB, _J_SY, UK_K, _X_NAV, _______, _______, _______, _______, _______, _B_NAV, UK_M, _W_SY, _V_NB, _Z_SFT }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } - }, + [dv] = LAYOUT_ortho_5x15( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + UK_QUOT, UK_COMM, UK_DOT, UK_P, UK_Y, _______, _______, _______, _______, _______, UK_F, UK_G, UK_C, UK_R, UK_L , \ + UK_A, UK_O, UK_E, UK_U, UK_I, _______, _______, _______, _______, _______, UK_D, UK_H, UK_T, UK_N, UK_S , \ + _SCLSH, _Q_NB, _J_SY, _K_NAL, UK_X, _______, _______, _______, _______, _______, UK_B, _M_NAR, _W_SY, _V_NB, _Z_SFT , \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), /* QWERTY _QW * .--------------------------------------------------------------------------------------------------------------------------------------. @@ -114,20 +121,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | A | S | D | F | G | | | | | | H | J | K | L | ; | * |--------------------------------------------------------------------------------------------------------------------------------------| * | Z | X | C | V | B | | | | | | N | M | , | . | / | - * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT | + * | SHIFT | NUMBER | SYMBOL | NAV | | | | | | | | NAV | SYMBOL | FUNC | SHIFT | * |--------------------------------------------------------------------------------------------------------------------------------------| * | | | | | | | | | | | | | | | | * |--------------------------------------------------------------------------------------------------------------------------------------| * | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | | | | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT | * .--------------------------------------------------------------------------------------------------------------------------------------. */ - [_QW] = { - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { UK_Q, UK_W, UK_E, UK_R, UK_T, _______, _______, _______, _______, _______, UK_Y, UK_U, UK_I, UK_O, UK_P }, - { UK_A, UK_S, UK_D, UK_F, UK_G, _______, _______, _______, _______, _______, UK_H, UK_J, UK_K, UK_L, UK_SCLN }, - { _Z_SFT, _X_NB, _C_SY, UK_V, _B_NAV, _______, _______, _______, _______, _______, _N_NAV, UK_M, _COM_SY, _DOT_NB, _SLSH }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } - }, + [qw] = LAYOUT_ortho_5x15( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + UK_Q, UK_W, UK_E, UK_R, UK_T, _______, _______, _______, _______, _______, UK_Y, UK_U, UK_I, UK_O, UK_P , \ + UK_A, UK_S, UK_D, UK_F, UK_G, _______, _______, _______, _______, _______, UK_H, UK_J, UK_K, UK_L, UK_SCLN, \ + _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, _______, _______, _______, UK_N, _M_NAR, _COM_SY, _DOT_NB, _SLSH , \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), /* Numbers _NB * .--------------------------------------------------------------------------------------------------------------------------------------. @@ -142,15 +149,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | | | | * '--------------------------------------------------------------------------------------------------------------------------------------' */ - [_NB] = { - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, _______, _______, _______, UK_7, UK_8, UK_9, _______ }, - { _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, _______, _______, _______, UK_4, UK_5, UK_6, _______ }, - { _______, _F1_NB, UK_F2, UK_F3, UK_F12, _______, _______, _______, _______, _______, UK_0, UK_1, UK_2, _3_NB, UK_DOT }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } - }, + [nbl] = LAYOUT_ortho_5x15( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, _______, _______, _______, UK_7, UK_8, UK_9, _______, \ + _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, _______, _______, _______, UK_4, UK_5, UK_6, _______, \ + _______, __NBL, UK_F2, UK_F3, UK_F12, _______, _______, _______, _______, _______, UK_0, UK_1, UK_2, UK_3, UK_DOT, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + [nbr] = LAYOUT_ortho_5x15( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, _______, _______, _______, UK_7, UK_8, UK_9, _______, \ + _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, _______, _______, _______, UK_4, UK_5, UK_6, _______, \ + _______, UK_F1, UK_F2, UK_F3, UK_F12, _______, _______, _______, _______, _______, UK_0, UK_1, UK_2, __NBR, UK_DOT , \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), -/* Symbols _SY + /* Symbols _SY * .--------------------------------------------------------------------------------------------------------------------------------------. * | | | | | | | | | | | | | | | | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| @@ -163,17 +177,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | | | | * '--------------------------------------------------------------------------------------------------------------------------------------' */ - [_SY] = { - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH }, - { UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT }, - { UK_CIRC, UK_AMPR, _AST_SY, UK_PIPE, _______, _______, _______, _______, _______, _______, UK_LABK, UK_LBRC, _COM_SY, UK_RABK, UK_GRV }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } - }, + [syl] = LAYOUT_ortho_5x15( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, \ + UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT , \ + UK_CIRC, UK_AMPR, __SYL, UK_PIPE, _______, _______, _______, _______, _______, _______, UK_LABK, UK_LBRC, UK_RBRC, UK_RABK, UK_GRV , \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + [syr] = LAYOUT_ortho_5x15( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, \ + UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT , \ + UK_CIRC, UK_AMPR, UK_ASTR, UK_PIPE, _______, _______, _______, _______, _______, _______, UK_LABK, UK_LBRC, __SYR, UK_RABK, UK_GRV , \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), /* - * Navigation + * Navigation _NA * .--------------------------------------------------------------------------------------------------------------------------------------. - * | RESET | COLEMA | DVORAK | QWERTY | | | | | | | | | | | | + * | RESET | COLEMA | DVORAK | QWERTY | | RGB_TG | | | | | | | | | | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | Esc | Ctrl L | Up | Ctrl R | | RGB HD | RGB HI | | | | | PtSn | ScLk | Pause | | * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| @@ -184,105 +205,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | RGB RMD| RGB MD | | | | | | | | | * '--------------------------------------------------------------------------------------------------------------------------------------' */ - [_NAV] = { - { RESET, DF(_CM), DF(_DV), DF(_QW), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { UK_ESC, _C_LEFT, UK_UP , _C_RGHT, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______ }, - { UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, UK_INS, UK_HOME, UK_PGUP, _TERM }, - { _S_TAB, _A_LEFT, UK_LSFT, _A_RGHT, _B_NAV, RGB_VAD, RGB_VAI, _______, _______, _______, _K_NAV, UK_SLCK, UK_END, UK_PGDN, _______ }, - { _______, _______, _______, _______, _______, RGB_RMOD,RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ } - }, + [nal] = LAYOUT_ortho_5x15( \ + RESET, DF(cm), DF(dv), DF(qw), _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + UK_ESC, _C_LEFT, UK_UP , _C_RGHT, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______, \ + UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, UK_INS, UK_HOME, UK_PGUP, _TERM , \ + _S_TAB, _A_LEFT, IJ_OMN, __NAL, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, UK_SLCK, UK_END, UK_PGDN, _______, \ + _______, _______, _______, _______, _______, RGB_RMOD,RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + [nar] = LAYOUT_ortho_5x15( \ + RESET, DF(cm), DF(dv), DF(qw), _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + UK_ESC, _C_LEFT, UK_UP , _C_RGHT, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______, \ + UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, UK_INS, UK_HOME, UK_PGUP, _TERM , \ + _S_TAB, _A_LEFT, IJ_OMN, _A_RGHT, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, __NAR, UK_END, UK_PGDN, _______, \ + _______, _______, _______, _______, _______, RGB_RMOD,RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ \ + ) }; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - -bool lightsOn = true; -int keyPresses = 0; -int effect = 0; -uint32_t key_timer; - -void resetCounts(void) { - effect++; - keyPresses = 0; - key_timer = timer_read32(); -} - -void matrix_scan_user(void) { - if (!lightsOn) { - rgblight_setrgb(0, 0, 0); - return; - } - if (timer_elapsed32(key_timer) > 60000) { - resetCounts(); - } - switch (effect) { - case 0: - rgblight_effect_breathing(3); - break; - case 1: - rgblight_effect_knight(3); - break; - case 2: - rgblight_effect_rainbow_swirl(128); - break; - case 3: - rgblight_effect_snake(30); - break; - case 4: - rgblight_effect_rainbow_swirl(128); - break; - case 5: - rgblight_effect_rainbow_mood(128); - break; - case 6: - rgblight_effect_christmas(); - break; - case 7: - rgblight_effect_rgbtest(); - break; - default: - effect = 0; - break; - } -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (!record->event.pressed) return true; - if (keycode == L_SB) { - lightsOn = !lightsOn; - if (!lightsOn) { - keyPresses = 0; - } else { - resetCounts(); + if (record->event.pressed) { + switch(keycode) { + case IJ_OMN: + SEND_STRING(SS_TAP(X_LSHIFT)SS_TAP(X_LSHIFT)); + return false; } - return true; - } - if (keycode == L_NEXT) { - resetCounts(); - return true; - } - keyPresses++; - if (keyPresses > 100) { - resetCounts(); } return true; } From d7dea0e6d9a6e9a8ed7e760a996aac8f89560a5b Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 15 Oct 2018 08:31:26 -0700 Subject: [PATCH 166/269] Fix ErgoTravel Board It was not properly including the "config_common" files, and was causing it to break on the configurator. Additionally, updated this to use the split common code. --- keyboards/ergotravel/config.h | 73 +-- keyboards/ergotravel/ergotravel.h | 4 +- keyboards/ergotravel/i2c.c | 162 ------ keyboards/ergotravel/i2c.h | 49 -- keyboards/ergotravel/keymaps/ckofy/config.h | 6 +- keyboards/ergotravel/keymaps/ckofy/keymap.c | 12 +- keyboards/ergotravel/keymaps/ckofy/rules.mk | 3 - keyboards/ergotravel/keymaps/default/config.h | 7 +- keyboards/ergotravel/keymaps/default/rules.mk | 3 - keyboards/ergotravel/keymaps/ian/config.h | 7 +- keyboards/ergotravel/keymaps/ian/rules.mk | 3 - .../keymaps/jpconstantineau/config.h | 7 +- .../keymaps/jpconstantineau/rules.mk | 3 - keyboards/ergotravel/keymaps/viet/config.h | 6 +- keyboards/ergotravel/keymaps/viet/rules.mk | 3 - keyboards/ergotravel/matrix.c | 482 ------------------ keyboards/ergotravel/rev1/config.h | 6 +- keyboards/ergotravel/rules.mk | 10 +- keyboards/ergotravel/serial.c | 228 --------- keyboards/ergotravel/serial.h | 26 - keyboards/ergotravel/split_util.c | 86 ---- keyboards/ergotravel/split_util.h | 20 - 22 files changed, 20 insertions(+), 1186 deletions(-) delete mode 100644 keyboards/ergotravel/i2c.c delete mode 100644 keyboards/ergotravel/i2c.h delete mode 100644 keyboards/ergotravel/matrix.c delete mode 100644 keyboards/ergotravel/serial.c delete mode 100644 keyboards/ergotravel/serial.h delete mode 100644 keyboards/ergotravel/split_util.c delete mode 100644 keyboards/ergotravel/split_util.h diff --git a/keyboards/ergotravel/config.h b/keyboards/ergotravel/config.h index beda546a04..2130801819 100644 --- a/keyboards/ergotravel/config.h +++ b/keyboards/ergotravel/config.h @@ -15,76 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef REV1_CONFIG_H -#define REV1_CONFIG_H +#pragma once -#include QMK_KEYBOARD_CONFIG_H +#include "config_common.h" -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xCEEB -#define PRODUCT_ID 0x1256 -#define DEVICE_VER 0x0100 -#define MANUFACTURER JPConstantineau.com -#define PRODUCT ErgoTravel Keyboard -#define DESCRIPTION Split 45 percent ergonomic keyboard - -/* key matrix size */ -// Rows are doubled-up -#define MATRIX_ROWS 8 -#define MATRIX_COLS 7 - -// wiring of each half -#define MATRIX_ROW_PINS { C6, D7, E6, B4 } -#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 } - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -// #define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCING_DELAY 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 - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -#define BACKLIGHT_PIN B5 -#define BACKLIGHT_LEVELS 5 - -/* ws2812 RGB LED */ -#define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/ergotravel/ergotravel.h b/keyboards/ergotravel/ergotravel.h index 10bc4e2bb9..7201db788d 100644 --- a/keyboards/ergotravel/ergotravel.h +++ b/keyboards/ergotravel/ergotravel.h @@ -1,5 +1,4 @@ -#ifndef ERGOTRAVEL_H -#define ERGOTRAVEL_H +#pragma once #ifdef KEYBOARD_ergotravel_rev1 #include "rev1.h" @@ -21,4 +20,3 @@ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \ ) -#endif \ No newline at end of file diff --git a/keyboards/ergotravel/i2c.c b/keyboards/ergotravel/i2c.c deleted file mode 100644 index 084c890c40..0000000000 --- a/keyboards/ergotravel/i2c.c +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "i2c.h" - -#ifdef USE_I2C - -// Limits the amount of we wait for any one i2c transaction. -// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is -// 9 bits, a single transaction will take around 90μs to complete. -// -// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit -// poll loop takes at least 8 clock cycles to execute -#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 - -#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) - -volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; - -static volatile uint8_t slave_buffer_pos; -static volatile bool slave_has_register_set = false; - -// Wait for an i2c operation to finish -inline static -void i2c_delay(void) { - uint16_t lim = 0; - while(!(TWCR & (1<10. - // Check datasheets for more info. - TWBR = ((F_CPU/SCL_CLOCK)-16)/2; -} - -// Start a transaction with the given i2c slave address. The direction of the -// transfer is set with I2C_READ and I2C_WRITE. -// returns: 0 => success -// 1 => error -uint8_t i2c_master_start(uint8_t address) { - TWCR = (1< slave ACK -// 1 => slave NACK -uint8_t i2c_master_write(uint8_t data) { - TWDR = data; - TWCR = (1<= SLAVE_BUFFER_SIZE ) { - ack = 0; - slave_buffer_pos = 0; - } - slave_has_register_set = true; - } else { - i2c_slave_buffer[slave_buffer_pos] = TWDR; - BUFFER_POS_INC(); - } - break; - - case TW_ST_SLA_ACK: - case TW_ST_DATA_ACK: - // master has addressed this device as a slave transmitter and is - // requesting data. - TWDR = i2c_slave_buffer[slave_buffer_pos]; - BUFFER_POS_INC(); - break; - - case TW_BUS_ERROR: // something went wrong, reset twi state - TWCR = 0; - default: - break; - } - // Reset everything, so we are ready for the next TWI interrupt - TWCR |= (1< - -#ifndef F_CPU -#define F_CPU 16000000UL -#endif - -#define I2C_READ 1 -#define I2C_WRITE 0 - -#define I2C_ACK 1 -#define I2C_NACK 0 - -#define SLAVE_BUFFER_SIZE 0x10 - -// i2c SCL clock frequency -#define SCL_CLOCK 100000L - -extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; - -void i2c_master_init(void); -uint8_t i2c_master_start(uint8_t address); -void i2c_master_stop(void); -uint8_t i2c_master_write(uint8_t data); -uint8_t i2c_master_read(int); -void i2c_reset_state(void); -void i2c_slave_init(uint8_t address); - - -static inline unsigned char i2c_start_read(unsigned char addr) { - return i2c_master_start((addr << 1) | I2C_READ); -} - -static inline unsigned char i2c_start_write(unsigned char addr) { - return i2c_master_start((addr << 1) | I2C_WRITE); -} - -// from SSD1306 scrips -extern unsigned char i2c_rep_start(unsigned char addr); -extern void i2c_start_wait(unsigned char addr); -extern unsigned char i2c_readAck(void); -extern unsigned char i2c_readNak(void); -extern unsigned char i2c_read(unsigned char ack); - -#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); - -#endif diff --git a/keyboards/ergotravel/keymaps/ckofy/config.h b/keyboards/ergotravel/keymaps/ckofy/config.h index 41ec06657e..7c99c093c9 100644 --- a/keyboards/ergotravel/keymaps/ckofy/config.h +++ b/keyboards/ergotravel/keymaps/ckofy/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" +#pragma once /* Use I2C or Serial, not both */ @@ -40,4 +37,3 @@ along with this program. If not, see . #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 -#endif diff --git a/keyboards/ergotravel/keymaps/ckofy/keymap.c b/keyboards/ergotravel/keymaps/ckofy/keymap.c index cc2c33cca3..9de5fa2b84 100644 --- a/keyboards/ergotravel/keymaps/ckofy/keymap.c +++ b/keyboards/ergotravel/keymaps/ckofy/keymap.c @@ -100,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| , , , , , , , ,COMM, P1 , P2 , P3 ,PLUS, , //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----| - , , , , , , , P0 ,NLCK, , , + , , , , , , , P0 ,NLCK, , , //`----+----+----+--+-+----/----/ \----\----+----+----+----+----' ), @@ -112,7 +112,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| ,UDO ,CUT ,CPY ,PST ,XXXX, , ,XXXX,XXXX,COMM,DOT ,SLSH, , //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----| - , , , , , , , , , , , + , , , , , , , , , , , //`----+----+----+--+-+----/----/ \----\----+----+----+----+----' ), @@ -124,7 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| , GRV,TILD,XXXX,EQL ,PLUS, , ,UNDS,MINS,COMM,DOT ,SLSH,ENT , //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----| - , , , , , , , , , , , + , , , , , , , , , , , //`----+----+----+--+-+----/----/ \----\----+----+----+----+----' ), @@ -139,7 +139,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----| , , , , , , , , ,VOLD,VOLU,MUTE //`----+----+----+--+-+----/----/ \----\----+----+----+----+----' - ) + ) }; @@ -148,9 +148,9 @@ const uint16_t PROGMEM fn_actions[] = { ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT) ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) ,[F_NUMPAD] = ACTION_LAYER_TAP_TOGGLE(_NUMPAD) -// ,[F_LOWER] = ACTION_LAYER_TAP_TOGGLE(LOWER) // FN1 - Momentary Layer 1 (Lower) +// ,[F_LOWER] = ACTION_LAYER_TAP_TOGGLE(LOWER) // FN1 - Momentary Layer 1 (Lower) // ,[F_RAISE] = ACTION_LAYER_TAP_TOGGLE(RAISE) // FN2 - Momentary Layer 2 (Raise) -}; +}; diff --git a/keyboards/ergotravel/keymaps/ckofy/rules.mk b/keyboards/ergotravel/keymaps/ckofy/rules.mk index 457a3d01d4..e69de29bb2 100644 --- a/keyboards/ergotravel/keymaps/ckofy/rules.mk +++ b/keyboards/ergotravel/keymaps/ckofy/rules.mk @@ -1,3 +0,0 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergotravel/keymaps/default/config.h b/keyboards/ergotravel/keymaps/default/config.h index abb8cfa8e6..eeca26ce1d 100644 --- a/keyboards/ergotravel/keymaps/default/config.h +++ b/keyboards/ergotravel/keymaps/default/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" +#pragma once /* Use I2C or Serial, not both */ @@ -38,4 +35,4 @@ along with this program. If not, see . #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 -#endif + diff --git a/keyboards/ergotravel/keymaps/default/rules.mk b/keyboards/ergotravel/keymaps/default/rules.mk index 457a3d01d4..e69de29bb2 100644 --- a/keyboards/ergotravel/keymaps/default/rules.mk +++ b/keyboards/ergotravel/keymaps/default/rules.mk @@ -1,3 +0,0 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergotravel/keymaps/ian/config.h b/keyboards/ergotravel/keymaps/ian/config.h index b2e8ca9b5d..dea5b121ea 100644 --- a/keyboards/ergotravel/keymaps/ian/config.h +++ b/keyboards/ergotravel/keymaps/ian/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" +#pragma once /* Use I2C or Serial, not both */ @@ -38,4 +35,4 @@ along with this program. If not, see . #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 -#endif + diff --git a/keyboards/ergotravel/keymaps/ian/rules.mk b/keyboards/ergotravel/keymaps/ian/rules.mk index 457a3d01d4..e69de29bb2 100644 --- a/keyboards/ergotravel/keymaps/ian/rules.mk +++ b/keyboards/ergotravel/keymaps/ian/rules.mk @@ -1,3 +0,0 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergotravel/keymaps/jpconstantineau/config.h b/keyboards/ergotravel/keymaps/jpconstantineau/config.h index abb8cfa8e6..eeca26ce1d 100644 --- a/keyboards/ergotravel/keymaps/jpconstantineau/config.h +++ b/keyboards/ergotravel/keymaps/jpconstantineau/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" +#pragma once /* Use I2C or Serial, not both */ @@ -38,4 +35,4 @@ along with this program. If not, see . #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 -#endif + diff --git a/keyboards/ergotravel/keymaps/jpconstantineau/rules.mk b/keyboards/ergotravel/keymaps/jpconstantineau/rules.mk index 457a3d01d4..e69de29bb2 100644 --- a/keyboards/ergotravel/keymaps/jpconstantineau/rules.mk +++ b/keyboards/ergotravel/keymaps/jpconstantineau/rules.mk @@ -1,3 +0,0 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergotravel/keymaps/viet/config.h b/keyboards/ergotravel/keymaps/viet/config.h index 24e95b2b96..1c6c400b45 100644 --- a/keyboards/ergotravel/keymaps/viet/config.h +++ b/keyboards/ergotravel/keymaps/viet/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" +#pragma once /* Use I2C or Serial, not both */ @@ -39,4 +36,3 @@ along with this program. If not, see . #define RGBLIGHT_VAL_STEP 20 #define RGBLIGHT_LIMIT_VAL 220 -#endif diff --git a/keyboards/ergotravel/keymaps/viet/rules.mk b/keyboards/ergotravel/keymaps/viet/rules.mk index da4752731b..24963d46b6 100644 --- a/keyboards/ergotravel/keymaps/viet/rules.mk +++ b/keyboards/ergotravel/keymaps/viet/rules.mk @@ -2,6 +2,3 @@ RGBLIGHT_ENABLE = yes BACKLIGHT_ENABLE = no UNICODE_ENABLE = yes -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergotravel/matrix.c b/keyboards/ergotravel/matrix.c deleted file mode 100644 index 4061924dc2..0000000000 --- a/keyboards/ergotravel/matrix.c +++ /dev/null @@ -1,482 +0,0 @@ -/* -Copyright 2018 Pierre Constantineau - -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 . -*/ - -/* - * scan matrix - */ -#include -#include -#include -#include "wait.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "split_util.h" -#include "pro_micro.h" -#include "config.h" -#include "timer.h" -#include "backlight.h" - -#ifdef USE_I2C -# include "i2c.h" -#else // USE_SERIAL -# include "serial.h" -#endif - -#ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 -#endif - -#if (DEBOUNCING_DELAY > 0) - static uint16_t debouncing_time; - static bool debouncing = false; -#endif - -#if (MATRIX_COLS <= 8) -# define print_matrix_header() print("\nr/c 01234567\n") -# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) -# define matrix_bitpop(i) bitpop(matrix[i]) -# define ROW_SHIFTER ((uint8_t)1) -#else -# error "Currently only supports 8 COLS" -#endif -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -#define ERROR_DISCONNECT_COUNT 5 - -#define SERIAL_LED_ADDR 0x00 - -#define ROWS_PER_HAND (MATRIX_ROWS/2) - -static uint8_t error_count = 0; - -static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; -static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -#if (DIODE_DIRECTION == COL2ROW) - static void init_cols(void); - static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row); - static void unselect_rows(void); - static void select_row(uint8_t row); - static void unselect_row(uint8_t row); -#elif (DIODE_DIRECTION == ROW2COL) - static void init_rows(void); - static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); - static void unselect_cols(void); - static void unselect_col(uint8_t col); - static void select_col(uint8_t col); -#endif - - -__attribute__ ((weak)) -void matrix_init_kb(void) { - matrix_init_user(); -} - -__attribute__ ((weak)) -void matrix_scan_kb(void) { - matrix_scan_user(); -} - -__attribute__ ((weak)) -void matrix_init_user(void) { -} - -__attribute__ ((weak)) -void matrix_scan_user(void) { -} - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - debug_enable = true; - debug_matrix = true; - debug_mouse = true; - // initialize row and col - unselect_rows(); - init_cols(); - - TX_RX_LED_INIT; - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } - - matrix_init_quantum(); - -} - -uint8_t _matrix_scan(void) -{ - int offset = isLeftHand ? 0 : (ROWS_PER_HAND); -#if (DIODE_DIRECTION == COL2ROW) - // Set row, read cols - for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) { -# if (DEBOUNCING_DELAY > 0) - bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row); - - if (matrix_changed) { - debouncing = true; - debouncing_time = timer_read(); - PORTD ^= (1 << 2); - } - -# else - read_cols_on_row(matrix+offset, current_row); -# endif - - } - -#elif (DIODE_DIRECTION == ROW2COL) - // Set col, read rows - for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { -# if (DEBOUNCING_DELAY > 0) - bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col); - if (matrix_changed) { - debouncing = true; - debouncing_time = timer_read(); - } -# else - read_rows_on_col(matrix+offset, current_col); -# endif - - } -#endif - -# if (DEBOUNCING_DELAY > 0) - if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { - for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { - matrix[i+offset] = matrix_debouncing[i+offset]; - } - debouncing = false; - } -# endif - - return 1; -} - -#ifdef USE_I2C - -// Get rows from other half over i2c -int i2c_transaction(void) { - int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - - int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); - if (err) goto i2c_error; - - // start of matrix stored at 0x00 - err = i2c_master_write(0x00); - if (err) goto i2c_error; - -#ifdef BACKLIGHT_ENABLE - // Write backlight level for slave to read - err = i2c_master_write(get_backlight_level()); -#else - // Write zero, so our byte index is the same - err = i2c_master_write(0x00); -#endif - if (err) goto i2c_error; - - // Start read - err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); - if (err) goto i2c_error; - - if (!err) { - int i; - for (i = 0; i < ROWS_PER_HAND-1; ++i) { - matrix[slaveOffset+i] = i2c_master_read(I2C_ACK); - } - matrix[slaveOffset+i] = i2c_master_read(I2C_NACK); - i2c_master_stop(); - } else { -i2c_error: // the cable is disconnceted, or something else went wrong - i2c_reset_state(); - return err; - } - - return 0; -} - -#else // USE_SERIAL - -int serial_transaction(void) { - int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - - if (serial_update_buffers()) { - return 1; - } - - for (int i = 0; i < ROWS_PER_HAND; ++i) { - matrix[slaveOffset+i] = serial_slave_buffer[i]; - } - -#ifdef BACKLIGHT_ENABLE - // Write backlight level for slave to read - serial_master_buffer[SERIAL_LED_ADDR] = get_backlight_level(); -#endif - return 0; -} -#endif - -uint8_t matrix_scan(void) -{ - uint8_t ret = _matrix_scan(); - -#ifdef USE_I2C - if( i2c_transaction() ) { -#else // USE_SERIAL - if( serial_transaction() ) { -#endif - // turn on the indicator led when halves are disconnected - TXLED1; - - error_count++; - - if (error_count > ERROR_DISCONNECT_COUNT) { - // reset other half if disconnected - int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - for (int i = 0; i < ROWS_PER_HAND; ++i) { - matrix[slaveOffset+i] = 0; - } - } - } else { - // turn off the indicator led on no error - TXLED0; - error_count = 0; - } - matrix_scan_quantum(); - return ret; -} - -void matrix_slave_scan(void) { - _matrix_scan(); - - int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; - -#ifdef USE_I2C -#ifdef BACKLIGHT_ENABLE - // Read backlight level sent from master and update level on slave - backlight_set(i2c_slave_buffer[0]); -#endif - for (int i = 0; i < ROWS_PER_HAND; ++i) { - i2c_slave_buffer[i+1] = matrix[offset+i]; - } -#else // USE_SERIAL - for (int i = 0; i < ROWS_PER_HAND; ++i) { - serial_slave_buffer[i] = matrix[offset+i]; - } - -#ifdef BACKLIGHT_ENABLE - // Read backlight level sent from master and update level on slave - backlight_set(serial_master_buffer[SERIAL_LED_ADDR]); -#endif -#endif -} - -bool matrix_is_modified(void) -{ - if (debouncing) return false; - return true; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & ((matrix_row_t)1<> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI - } -} - -static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) -{ - // Store last value of row prior to reading - matrix_row_t last_row_value = current_matrix[current_row]; - - // Clear data in matrix row - current_matrix[current_row] = 0; - - // Select row and wait for row selecton to stabilize - select_row(current_row); - wait_us(30); - - // For each col... - for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { - - // Select the col pin to read (active low) - uint8_t pin = col_pins[col_index]; - uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); - - // Populate the matrix row with the state of the col pin - current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); - } - - // Unselect row - unselect_row(current_row); - - return (last_row_value != current_matrix[current_row]); -} - -static void select_row(uint8_t row) -{ - uint8_t pin = row_pins[row]; - _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW -} - -static void unselect_row(uint8_t row) -{ - uint8_t pin = row_pins[row]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI -} - -static void unselect_rows(void) -{ - for(uint8_t x = 0; x < ROWS_PER_HAND; x++) { - uint8_t pin = row_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI - } -} - -#elif (DIODE_DIRECTION == ROW2COL) - -static void init_rows(void) -{ - for(uint8_t x = 0; x < ROWS_PER_HAND; x++) { - uint8_t pin = row_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI - } -} - -static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) -{ - bool matrix_changed = false; - - // Select col and wait for col selecton to stabilize - select_col(current_col); - wait_us(30); - - // For each row... - for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) - { - - // Store last value of row prior to reading - matrix_row_t last_row_value = current_matrix[row_index]; - - // Check row pin state - if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0) - { - // Pin LO, set col bit - current_matrix[row_index] |= (ROW_SHIFTER << current_col); - } - else - { - // Pin HI, clear col bit - current_matrix[row_index] &= ~(ROW_SHIFTER << current_col); - } - - // Determine if the matrix changed state - if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) - { - matrix_changed = true; - } - } - - // Unselect col - unselect_col(current_col); - - return matrix_changed; -} - -static void select_col(uint8_t col) -{ - uint8_t pin = col_pins[col]; - _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW -} - -static void unselect_col(uint8_t col) -{ - uint8_t pin = col_pins[col]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI -} - -static void unselect_cols(void) -{ - for(uint8_t x = 0; x < MATRIX_COLS; x++) { - uint8_t pin = col_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI - } -} - -#endif diff --git a/keyboards/ergotravel/rev1/config.h b/keyboards/ergotravel/rev1/config.h index beda546a04..5fa447da74 100644 --- a/keyboards/ergotravel/rev1/config.h +++ b/keyboards/ergotravel/rev1/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef REV1_CONFIG_H -#define REV1_CONFIG_H - -#include QMK_KEYBOARD_CONFIG_H +#pragma once /* USB Device descriptor parameter */ #define VENDOR_ID 0xCEEB @@ -87,4 +84,3 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#endif diff --git a/keyboards/ergotravel/rules.mk b/keyboards/ergotravel/rules.mk index fceb56edf8..d2da788067 100644 --- a/keyboards/ergotravel/rules.mk +++ b/keyboards/ergotravel/rules.mk @@ -1,7 +1,3 @@ -SRC += matrix.c \ - i2c.c \ - split_util.c \ - serial.c # MCU name #MCU = at90usb1287 @@ -41,7 +37,7 @@ F_USB = $(F_CPU) # Bootloader # This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded +# different sizes, comment this out, and the correct address will be loaded # automatically (+60). See bootloader.mk for all options. BOOTLOADER = caterina @@ -64,11 +60,9 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SUBPROJECT_rev1 = yes -USE_I2C = yes # I2C is used between the sides # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -CUSTOM_MATRIX = yes +SPLIT_KEYBOARD = yes DEFAULT_FOLDER = ergotravel/rev1 diff --git a/keyboards/ergotravel/serial.c b/keyboards/ergotravel/serial.c deleted file mode 100644 index 74bcbb6bf6..0000000000 --- a/keyboards/ergotravel/serial.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * WARNING: be careful changing this code, it is very timing dependent - */ - -#ifndef F_CPU -#define F_CPU 16000000 -#endif - -#include -#include -#include -#include -#include "serial.h" - -#ifndef USE_I2C - -// Serial pulse period in microseconds. Its probably a bad idea to lower this -// value. -#define SERIAL_DELAY 24 - -uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; -uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; - -#define SLAVE_DATA_CORRUPT (1<<0) -volatile uint8_t status = 0; - -inline static -void serial_delay(void) { - _delay_us(SERIAL_DELAY); -} - -inline static -void serial_output(void) { - SERIAL_PIN_DDR |= SERIAL_PIN_MASK; -} - -// make the serial pin an input with pull-up resistor -inline static -void serial_input(void) { - SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; - SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -inline static -uint8_t serial_read_pin(void) { - return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); -} - -inline static -void serial_low(void) { - SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; -} - -inline static -void serial_high(void) { - SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -void serial_master_init(void) { - serial_output(); - serial_high(); -} - -void serial_slave_init(void) { - serial_input(); - - // Enable INT0 - EIMSK |= _BV(INT0); - // Trigger on falling edge of INT0 - EICRA &= ~(_BV(ISC00) | _BV(ISC01)); -} - -// Used by the master to synchronize timing with the slave. -static -void sync_recv(void) { - serial_input(); - // This shouldn't hang if the slave disconnects because the - // serial line will float to high if the slave does disconnect. - while (!serial_read_pin()); - serial_delay(); -} - -// Used by the slave to send a synchronization signal to the master. -static -void sync_send(void) { - serial_output(); - - serial_low(); - serial_delay(); - - serial_high(); -} - -// Reads a byte from the serial line -static -uint8_t serial_read_byte(void) { - uint8_t byte = 0; - serial_input(); - for ( uint8_t i = 0; i < 8; ++i) { - byte = (byte << 1) | serial_read_pin(); - serial_delay(); - _delay_us(1); - } - - return byte; -} - -// Sends a byte with MSB ordering -static -void serial_write_byte(uint8_t data) { - uint8_t b = 8; - serial_output(); - while( b-- ) { - if(data & (1 << b)) { - serial_high(); - } else { - serial_low(); - } - serial_delay(); - } -} - -// interrupt handle to be used by the slave device -ISR(SERIAL_PIN_INTERRUPT) { - sync_send(); - - uint8_t checksum = 0; - for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { - serial_write_byte(serial_slave_buffer[i]); - sync_send(); - checksum += serial_slave_buffer[i]; - } - serial_write_byte(checksum); - sync_send(); - - // wait for the sync to finish sending - serial_delay(); - - // read the middle of pulses - _delay_us(SERIAL_DELAY/2); - - uint8_t checksum_computed = 0; - for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { - serial_master_buffer[i] = serial_read_byte(); - sync_send(); - checksum_computed += serial_master_buffer[i]; - } - uint8_t checksum_received = serial_read_byte(); - sync_send(); - - serial_input(); // end transaction - - if ( checksum_computed != checksum_received ) { - status |= SLAVE_DATA_CORRUPT; - } else { - status &= ~SLAVE_DATA_CORRUPT; - } -} - -inline -bool serial_slave_DATA_CORRUPT(void) { - return status & SLAVE_DATA_CORRUPT; -} - -// Copies the serial_slave_buffer to the master and sends the -// serial_master_buffer to the slave. -// -// Returns: -// 0 => no error -// 1 => slave did not respond -int serial_update_buffers(void) { - // this code is very time dependent, so we need to disable interrupts - cli(); - - // signal to the slave that we want to start a transaction - serial_output(); - serial_low(); - _delay_us(1); - - // wait for the slaves response - serial_input(); - serial_high(); - _delay_us(SERIAL_DELAY); - - // check if the slave is present - if (serial_read_pin()) { - // slave failed to pull the line low, assume not present - sei(); - return 1; - } - - // if the slave is present syncronize with it - sync_recv(); - - uint8_t checksum_computed = 0; - // receive data from the slave - for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { - serial_slave_buffer[i] = serial_read_byte(); - sync_recv(); - checksum_computed += serial_slave_buffer[i]; - } - uint8_t checksum_received = serial_read_byte(); - sync_recv(); - - if (checksum_computed != checksum_received) { - sei(); - return 1; - } - - uint8_t checksum = 0; - // send data to the slave - for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { - serial_write_byte(serial_master_buffer[i]); - sync_recv(); - checksum += serial_master_buffer[i]; - } - serial_write_byte(checksum); - sync_recv(); - - // always, release the line when not in use - serial_output(); - serial_high(); - - sei(); - return 0; -} - -#endif diff --git a/keyboards/ergotravel/serial.h b/keyboards/ergotravel/serial.h deleted file mode 100644 index 15fe4db7b4..0000000000 --- a/keyboards/ergotravel/serial.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef MY_SERIAL_H -#define MY_SERIAL_H - -#include "config.h" -#include - -/* TODO: some defines for interrupt setup */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD0) -#define SERIAL_PIN_INTERRUPT INT0_vect - -#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 -#define SERIAL_MASTER_BUFFER_LENGTH 1 - -// Buffers for master - slave communication -extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; -extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; - -void serial_master_init(void); -void serial_slave_init(void); -int serial_update_buffers(void); -bool serial_slave_data_corrupt(void); - -#endif diff --git a/keyboards/ergotravel/split_util.c b/keyboards/ergotravel/split_util.c deleted file mode 100644 index 346cbc9089..0000000000 --- a/keyboards/ergotravel/split_util.c +++ /dev/null @@ -1,86 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "split_util.h" -#include "matrix.h" -#include "keyboard.h" -#include "config.h" -#include "timer.h" - -#ifdef USE_I2C -# include "i2c.h" -#else -# include "serial.h" -#endif - -volatile bool isLeftHand = true; - -static void setup_handedness(void) { - #ifdef EE_HANDS - isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); - #else - // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c - #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) - isLeftHand = !has_usb(); - #else - isLeftHand = has_usb(); - #endif - #endif -} - -static void keyboard_master_setup(void) { -#ifdef USE_I2C - i2c_master_init(); -#ifdef SSD1306OLED - matrix_master_OLED_init (); -#endif -#else - serial_master_init(); -#endif -} - -static void keyboard_slave_setup(void) { - timer_init(); -#ifdef USE_I2C - i2c_slave_init(SLAVE_I2C_ADDRESS); -#else - serial_slave_init(); -#endif -} - -bool has_usb(void) { - USBCON |= (1 << OTGPADE); //enables VBUS pad - _delay_us(5); - return (USBSTA & (1< -#include "eeconfig.h" - -#define SLAVE_I2C_ADDRESS 0x32 - -extern volatile bool isLeftHand; - -// slave version of matix scan, defined in matrix.c -void matrix_slave_scan(void); - -void split_keyboard_setup(void); -bool has_usb(void); -void keyboard_slave_loop(void); - -void matrix_master_OLED_init (void); - -#endif From 9fbd7eb7a58ff5a39ffcaa3fcc50320e63c8ec08 Mon Sep 17 00:00:00 2001 From: QMK Bot Date: Mon, 15 Oct 2018 16:24:29 +0000 Subject: [PATCH 167/269] convert to unix line-endings [skip ci] --- keyboards/ergotravel/keymaps/ckofy/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergotravel/keymaps/ckofy/keymap.c b/keyboards/ergotravel/keymaps/ckofy/keymap.c index 9de5fa2b84..7b3b333a5d 100644 --- a/keyboards/ergotravel/keymaps/ckofy/keymap.c +++ b/keyboards/ergotravel/keymaps/ckofy/keymap.c @@ -1,4 +1,4 @@ -#include QMK_KEYBOARD_H +#include QMK_KEYBOARD_H extern keymap_config_t keymap_config; From f0f9283d02cf4a61f185ed0bf5fc83ee8247f41d Mon Sep 17 00:00:00 2001 From: Vyolle <44031868+Vyolle@users.noreply.github.com> Date: Mon, 15 Oct 2018 12:21:14 -0500 Subject: [PATCH 168/269] Keymap: add new keymap for Iris (#4119) * Add files via upload * Delete config.h * Delete keymap.c * Delete rules.mk * Keymap w/mirror mode and steno support. Keymap w/mirror mode and steno support. Can be used entirely one handed. * Fixed some niggling issues. --- keyboards/iris/keymaps/vyolle_steno/config.h | 34 +++++ keyboards/iris/keymaps/vyolle_steno/keymap.c | 149 +++++++++++++++++++ keyboards/iris/keymaps/vyolle_steno/rules.mk | 7 + 3 files changed, 190 insertions(+) create mode 100644 keyboards/iris/keymaps/vyolle_steno/config.h create mode 100644 keyboards/iris/keymaps/vyolle_steno/keymap.c create mode 100644 keyboards/iris/keymaps/vyolle_steno/rules.mk diff --git a/keyboards/iris/keymaps/vyolle_steno/config.h b/keyboards/iris/keymaps/vyolle_steno/config.h new file mode 100644 index 0000000000..9cbc148e42 --- /dev/null +++ b/keyboards/iris/keymaps/vyolle_steno/config.h @@ -0,0 +1,34 @@ +/* +Copyright 2017 Danny Nguyen + +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 + +/* Use I2C or Serial, not both */ + +#define USE_I2C +// #define USE_SERIAL + + +#define FORCE_NKRO //For Steno. + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + + diff --git a/keyboards/iris/keymaps/vyolle_steno/keymap.c b/keyboards/iris/keymaps/vyolle_steno/keymap.c new file mode 100644 index 0000000000..3ad117655a --- /dev/null +++ b/keyboards/iris/keymaps/vyolle_steno/keymap.c @@ -0,0 +1,149 @@ +#include QMK_KEYBOARD_H +#include "keymap_steno.h" + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _PLOVER 3 +#define _ADJUST 4 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, + PLOVER, + EXT_PLV, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, PLOVER, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + RAISE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_RBRC, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC, KC_RSFT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LGUI, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + KC_LCTL, LOWER, KC_SPC, KC_BSPC, KC_ENT, KC_LALT + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_LOWER] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_DEL, KC_0, KC_9, KC_8, KC_7, KC_6, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_SCLN, KC_P, KC_O, KC_I, KC_U, KC_Y, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + _______, KC_QUOT, KC_L, KC_K, KC_J, KC_H, _______, KC_LEFT, KC_UP, KC_RGHT, KC_SCLN, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_ENT, KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, KC_LALT, _______, _______, _______, KC_DOWN, _______, _______, _______, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + _______, _______, KC_LGUI, _______, _______, _______ + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_RAISE] = 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, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + _______, KC_VOLU, KC_LEFT, KC_UP, KC_RGHT, KC_INS, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_MUTE, KC_VOLD, KC_PGUP, KC_DOWN, KC_PGDN, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + _______, _______, KC_LALT, _______, _______, _______ + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_ADJUST] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_GRV, KC_HOME, KC_LBRC, KC_RBRC, KC_PIPE, KC_APP, KC_SLCK, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_PSCR, KC_END, KC_LCBR, KC_RCBR, KC_PLUS, KC_EQL, KC_PAUS, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + _______, _______, _______, KC_BSLS, KC_MINS, KC_UNDS, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + _______, _______, _______, _______, _______, _______ + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_PLOVER] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + STN_PWR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EXT_PLV, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_RE1, STN_RE2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + XXXXXXX, STN_A, STN_O, STN_E, STN_U, XXXXXXX + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ) +}; + + +void matrix_init_user() { + steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + case PLOVER: + if (!record->event.pressed) { + layer_on(_PLOVER); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} diff --git a/keyboards/iris/keymaps/vyolle_steno/rules.mk b/keyboards/iris/keymaps/vyolle_steno/rules.mk new file mode 100644 index 0000000000..e412316833 --- /dev/null +++ b/keyboards/iris/keymaps/vyolle_steno/rules.mk @@ -0,0 +1,7 @@ +EXTRAKEY_ENABLE = no +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER +AUDIO_ENABLE = no # Audio output on port C6 +MIDI_ENABLE = no # MIDI controls +NKRO_ENABLE = yes +BOOTMAGIC_ENABLE = yes \ No newline at end of file From ec86141a4a558fc51b9ebfdcb14106b8a8d051d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDan=20Pevec?= Date: Mon, 15 Oct 2018 19:39:58 +0200 Subject: [PATCH 169/269] Basic Slovenian keymap added (#4128) * Basic Slovenian keymap added * Author fixed --- quantum/keymap_extras/keymap_slovenian.h | 106 +++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 quantum/keymap_extras/keymap_slovenian.h diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h new file mode 100644 index 0000000000..8b197e6c5b --- /dev/null +++ b/quantum/keymap_extras/keymap_slovenian.h @@ -0,0 +1,106 @@ +/* Copyright 2018 Žan Pevec + * + * 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 . + */ + +#ifndef KEYMAP_SLOVENIAN +#define KEYMAP_SLOVENIAN +#include "keymap.h" + + +//Swapped Z and Y +#define SI_Z KC_Y +#define SI_Y KC_Z + +//Special characters +#define SI_CV KC_SCLN +#define SI_SV KC_LBRC +#define SI_ZV KC_BSLS + +#define SI_A KC_A +#define SI_B KC_B +#define SI_C KC_C +#define SI_D KC_D +#define SI_E KC_E +#define SI_F KC_F +#define SI_G KC_G +#define SI_H KC_H +#define SI_I KC_I +#define SI_J KC_J +#define SI_K KC_K +#define SI_L KC_L +#define SI_M KC_M +#define SI_N KC_N +#define SI_O KC_O +#define SI_P KC_P +#define SI_Q KC_Q +#define SI_R KC_R +#define SI_S KC_S +#define SI_T KC_T +#define SI_U KC_U +#define SI_V KC_V +#define SI_W KC_W +#define SI_X KC_X + +#define SI_0 KC_0 +#define SI_1 KC_1 +#define SI_2 KC_2 +#define SI_3 KC_3 +#define SI_4 KC_4 +#define SI_5 KC_5 +#define SI_6 KC_6 +#define SI_7 KC_7 +#define SI_8 KC_8 +#define SI_9 KC_9 + +#define SI_DOT KC_DOT +#define SI_COMM KC_COMM + +#define SI_PLUS KC_EQL // + and * and ~ +#define SI_QOT KC_MINS // Single quote +#define SI_MINS KC_SLSH // - and _ + +// shifted characters +#define SI_EXLM LSFT(KC_1) // ! +#define SO_DQOT LSFT(KC_2) // " +#define SI_HASH LSFT(KC_3) // # +#define SI_DLR LSFT(KC_4) // $ +#define SI_PERC LSFT(KC_5) // % +#define SI_AMPR LSFT(KC_6) // & +#define SI_SLSH LSFT(KC_7) // / +#define SI_LPRN LSFT(KC_8) // ( +#define SI_RPRN LSFT(KC_9) // ) +#define SI_EQL LSFT(KC_0) // = +#define SI_QST LSFT(SI_QOT) // ? +#define SI_ASTR LSFT(SI_PLUS) // * +#define SI_COLN LSFT(KC_DOT) // : +#define SI_SCLN LSFT(KC_COMM) // ; +#define SI_UNDS LSFT(SI_MINS) // _ + +// Alt Gr-ed characters +#define SI_CIRC ALGR(KC_3) // ^ +#define SI_DEG ALGR(KC_5) // ° +#define SI_GRV ALGR(KC_7) // ` +#define SI_ACCU ALGR(KC_9) // ´ +#define SI_LCBR ALGR(KC_B) // { +#define SI_RCBR ALGR(KC_N) // } +#define SI_LBRC ALGR(KC_F) // [ +#define SI_RBRC ALGR(KC_G) // ] +#define SI_BSLS ALGR(KC_Q) // backslash +#define SI_AT ALGR(KC_V) // @ +#define SI_EURO ALGR(KC_E) // € +#define SI_TILD ALGR(KC_1) // ~ +#define SI_PIPE ALGR(KC_W) // | + +#endif From 47e29754c215d02af39f3ee6158d4d6b76a7bffc Mon Sep 17 00:00:00 2001 From: Chris <38164944+ChrisUC@users.noreply.github.com> Date: Mon, 15 Oct 2018 12:41:43 -0500 Subject: [PATCH 170/269] Keymap: added default layout to the kbd6x for the tofu hhkb (#4132) * added layouts * fixed * might aswell fix the default layout aswell --- keyboards/kbd6x/keymaps/default/keymap.c | 19 ------- .../keymaps/hhkb-default-improved/keymap.c | 50 ++++++++++++++++++ .../keymaps/hhkb-default-improved/readme.md | 1 + keyboards/kbd6x/keymaps/hhkb-default/keymap.c | 51 +++++++++++++++++++ .../kbd6x/keymaps/hhkb-default/readme.md | 1 + 5 files changed, 103 insertions(+), 19 deletions(-) create mode 100644 keyboards/kbd6x/keymaps/hhkb-default-improved/keymap.c create mode 100644 keyboards/kbd6x/keymaps/hhkb-default-improved/readme.md create mode 100644 keyboards/kbd6x/keymaps/hhkb-default/keymap.c create mode 100644 keyboards/kbd6x/keymaps/hhkb-default/readme.md diff --git a/keyboards/kbd6x/keymaps/default/keymap.c b/keyboards/kbd6x/keymaps/default/keymap.c index fd73b1445f..00adbf8873 100644 --- a/keyboards/kbd6x/keymaps/default/keymap.c +++ b/keyboards/kbd6x/keymaps/default/keymap.c @@ -33,25 +33,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - void matrix_init_user(void) { diff --git a/keyboards/kbd6x/keymaps/hhkb-default-improved/keymap.c b/keyboards/kbd6x/keymaps/hhkb-default-improved/keymap.c new file mode 100644 index 0000000000..80c22e5d90 --- /dev/null +++ b/keyboards/kbd6x/keymaps/hhkb-default-improved/keymap.c @@ -0,0 +1,50 @@ +/* Copyright 2018 MechMerlin + * + * 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 + +// iproved hhkb layout with more functionality + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_RCTL + ), + + [1] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, RESET, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_DEL, + KC_RCTL, KC_VOLU, KC_VOLD, KC_MUTE, KC_MPLY, KC_MSTP, KC_ASTR, KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PLUS, KC_UNDS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + diff --git a/keyboards/kbd6x/keymaps/hhkb-default-improved/readme.md b/keyboards/kbd6x/keymaps/hhkb-default-improved/readme.md new file mode 100644 index 0000000000..be22dd16c0 --- /dev/null +++ b/keyboards/kbd6x/keymaps/hhkb-default-improved/readme.md @@ -0,0 +1 @@ +# this is the default hhkb layout in a more useable normalized form (aka the way i use mine) \ No newline at end of file diff --git a/keyboards/kbd6x/keymaps/hhkb-default/keymap.c b/keyboards/kbd6x/keymaps/hhkb-default/keymap.c new file mode 100644 index 0000000000..03153b67ac --- /dev/null +++ b/keyboards/kbd6x/keymaps/hhkb-default/keymap.c @@ -0,0 +1,51 @@ +/* Copyright 2018 MechMerlin + * + * 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 + +// stock hhkb as referenced by https://i.imgur.com/QoBTDHf.png + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_TRNS, KC_LALT, KC_LGUI, KC_SPACE, KC_RGUI, KC_RALT, KC_TRNS + ), + + [1] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, RESET, + KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_MSTP, KC_TRNS, KC_ASTR, KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PLUS, KC_UNDS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), +}; + + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + diff --git a/keyboards/kbd6x/keymaps/hhkb-default/readme.md b/keyboards/kbd6x/keymaps/hhkb-default/readme.md new file mode 100644 index 0000000000..cf93c3553a --- /dev/null +++ b/keyboards/kbd6x/keymaps/hhkb-default/readme.md @@ -0,0 +1 @@ +# default hhkb layout adapted to the 6x (for tofu hhkb) \ No newline at end of file From 64459fedbff54d8e8c3943e75624377a6b70464c Mon Sep 17 00:00:00 2001 From: Christoffer Holmberg Date: Mon, 15 Oct 2018 20:42:38 +0300 Subject: [PATCH 171/269] Keymap: Reworked layout (#4133) * Reworked layout * Remove redundant defines https://github.com/qmk/qmk_firmware/pull/4133#discussion_r224977420 * fix typo --- keyboards/planck/keymaps/skug/config.h | 13 +- keyboards/planck/keymaps/skug/keymap.c | 272 ++++++++++++------------ keyboards/planck/keymaps/skug/readme.md | 7 +- keyboards/planck/keymaps/skug/rules.mk | 2 + 4 files changed, 156 insertions(+), 138 deletions(-) diff --git a/keyboards/planck/keymaps/skug/config.h b/keyboards/planck/keymaps/skug/config.h index 0a1d8d2892..79f77786ad 100644 --- a/keyboards/planck/keymaps/skug/config.h +++ b/keyboards/planck/keymaps/skug/config.h @@ -1,13 +1,20 @@ #pragma once +// Override SpaceCadet Settings +#undef LSPO_KEY +#undef RSPC_KEY +#define LSPO_KEY KC_8 // Nordic Left SpaceCadet +#define RSPC_KEY KC_9 // Nordic Right SpaceCadet + +// Audio #ifdef AUDIO_ENABLE - #define STARTUP_SONG SONG(PLANCK_SOUND) - // #define STARTUP_SONG SONG(NO_SOUND) + #define STARTUP_SONG SONG(COIN_SOUND) #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ SONG(COLEMAK_SOUND), \ SONG(DVORAK_SOUND) \ } +#endif /* * MIDI options @@ -35,5 +42,3 @@ // Most tactile encoders have detents every 4 stages #define ENCODER_RESOLUTION 4 - -#endif diff --git a/keyboards/planck/keymaps/skug/keymap.c b/keyboards/planck/keymaps/skug/keymap.c index 00b2ab21ce..29324a09e4 100644 --- a/keyboards/planck/keymaps/skug/keymap.c +++ b/keyboards/planck/keymaps/skug/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2015-2017 Jack Humbert +/* Copyright 2015-2017 Jack Humbert, Christoffer Holmberg * * 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 @@ -15,158 +15,124 @@ */ #include QMK_KEYBOARD_H +#include "keymap_swedish.h" #include "muse.h" extern keymap_config_t keymap_config; enum planck_layers { - _QWERTY, - _COLEMAK, - _DVORAK, + _DEFAULT, _LOWER, _RAISE, - _PLOVER, + _UTILITY, _ADJUST }; enum planck_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - PLOVER, + DEFAULT = SAFE_RANGE, + RAISE, + LOWER, + UTILITY, BACKLIT, - EXT_PLV + S1, S2, S3, S4, S5, S6, S7, S8, S9 }; -#define LOWER MO(_LOWER) -#define RAISE MO(_RAISE) +#define ESC_LOW LT(_LOWER, KC_ESC) +#define BSP_RAI LT(_RAISE, KC_BSPC) +#define LFT_CTR CTL_T(NO_APOS) +#define RGT_CTR CTL_T(KC_TILD) +#define UTILITY MO(_UTILITY) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Å | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * | Fn | A | S | D | F | G | H | J | K | L | Ö | Ä | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * | Shift| Z | X | C | V | B | N | M | , | . | - |Shift | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * | Ctrl | Super| Alt | |L/Esc | Ret | Space|R/Bspc| |AltGr | * | ¨ | * `-----------------------------------------------------------------------------------' */ -[_QWERTY] = LAYOUT_planck_grid( - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , - BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = LAYOUT_planck_grid( - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , - BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT -), - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = LAYOUT_planck_grid( - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , - BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT_planck_grid( - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +[_DEFAULT] = LAYOUT_planck_grid( + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , NO_AA , + UTILITY, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , NO_OSLH, NO_AE , + KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , NO_MINS, KC_RSPC, + LFT_CTR, KC_LALT, KC_LGUI, NO_AT , ESC_LOW, KC_ENT , KC_SPC , BSP_RAI, _______, NO_ALGR, NO_ASTR, RGT_CTR ), /* Raise * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * | | | | | | | | | | | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | | + * | | | | | | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | + * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_RAISE] = LAYOUT_planck_grid( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PLUS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, NO_GRTR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), -/* Plover layer (http://opensteno.org) +/* Lower * ,-----------------------------------------------------------------------------------. - * | # | # | # | # | # | # | # | # | # | # | # | # | + * | | | | | | | | | | | | | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | S | T | P | H | * | * | F | P | L | T | D | + * | | | | | | | | | | | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | S | K | W | R | * | * | R | B | G | S | Z | + * | | | | | | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Exit | | | A | O | | E | U | | | | + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_planck_grid( + NO_HALF, LSFT(KC_1), NO_QUO2, LSFT(KC_3), NO_BULT, LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL , NO_QUES, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, NO_LESS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Utility layer + * ,-----------------------------------------------------------------------------------. + * | | | up | | | | | | S1 | S2 | S3 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | left | down | right| | | | | S4 | S5 | S6 | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | S7 | S8 | S9 | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Del | | | | | * `-----------------------------------------------------------------------------------' */ -[_PLOVER] = LAYOUT_planck_grid( - KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , - XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX +[_UTILITY] = LAYOUT_planck_grid( + _______, _______, KC_UP , _______, _______, _______, _______, _______, S1 , S2 , S3 , _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, S4 , S5 , S6 , _______, + _______, _______, _______, _______, _______, _______, _______, _______, S7 , S8 , S9 , _______, + _______, _______, _______, _______, _______, _______, _______, KC_DEL , _______, _______, _______, _______ ), /* Adjust (Lower + Raise) * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * | |Reset | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | |Utilit| | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * | | | | | | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | + * | | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_ADJUST] = LAYOUT_planck_grid( - _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , - _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______, - _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______, + KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , + _______, RESET , MU_MOD , AU_ON , AU_OFF , AG_NORM, AG_SWAP, DEFAULT, XXXXXXX , XXXXXXX, UTILITY, _______, + _______, NO_PIPE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ) @@ -176,6 +142,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef AUDIO_ENABLE float plover_song[][2] = SONG(PLOVER_SOUND); float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); + float s1[][2] = SONG(NUMBER_ONE); + float s2[][2] = SONG(ZELDA_PUZZLE); + float s3[][2] = SONG(ZELDA_TREASURE); + float s4[][2] = SONG(OVERWATCH_THEME); + float s5[][2] = SONG(IMPERIAL_MARCH); + float s6[][2] = SONG(E1M1_DOOM); + float s7[][2] = SONG(COIN_SOUND); + float s8[][2] = SONG(ONE_UP_SOUND); + float s9[][2] = SONG(SONIC_RING); #endif uint32_t layer_state_set_user(uint32_t state) { @@ -184,22 +159,9 @@ uint32_t layer_state_set_user(uint32_t state) { bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case QWERTY: + case DEFAULT: if (record->event.pressed) { - print("mode just switched to qwerty and this is a huge string\n"); - set_single_persistent_default_layer(_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_DVORAK); + set_single_persistent_default_layer(_DEFAULT); } return false; break; @@ -220,31 +182,75 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case PLOVER: + case S1: if (record->event.pressed) { #ifdef AUDIO_ENABLE - stop_all_notes(); - PLAY_SONG(plover_song); - #endif - layer_off(_RAISE); - layer_off(_LOWER); - layer_off(_ADJUST); - layer_on(_PLOVER); - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } - keymap_config.raw = eeconfig_read_keymap(); - keymap_config.nkro = 1; - eeconfig_update_keymap(keymap_config.raw); + PLAY_SONG(s1); + #endif //AUDIO_ENABLE } return false; break; - case EXT_PLV: + case S2: if (record->event.pressed) { #ifdef AUDIO_ENABLE - PLAY_SONG(plover_gb_song); - #endif - layer_off(_PLOVER); + PLAY_SONG(s2); + #endif //AUDIO_ENABLE + } + return false; + break; + case S3: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(s3); + #endif //AUDIO_ENABLE + } + return false; + break; + case S4: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(s4); + #endif //AUDIO_ENABLE + } + return false; + break; + case S5: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(s5); + #endif //AUDIO_ENABLE + } + return false; + break; + case S6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(s6); + #endif //AUDIO_ENABLE + } + return false; + break; + case S7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(s7); + #endif //AUDIO_ENABLE + } + return false; + break; + case S8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(s8); + #endif //AUDIO_ENABLE + } + return false; + break; + case S9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(s9); + #endif //AUDIO_ENABLE } return false; break; diff --git a/keyboards/planck/keymaps/skug/readme.md b/keyboards/planck/keymaps/skug/readme.md index 259b52f86f..aa3e6cda00 100644 --- a/keyboards/planck/keymaps/skug/readme.md +++ b/keyboards/planck/keymaps/skug/readme.md @@ -1,3 +1,8 @@ +![Nordic Planck](https://i.imgur.com/0ZOLnx2.png) + # Nordic Planck -TODO: Add layout image +This is my attempt at making a Nordic layout for the planck with all nordic +characters available in the default layer, things to note are the bottom row +with Esc, Enter, Space and Backspace in the middle for easy thumb access and +an arrow cluster on the left. diff --git a/keyboards/planck/keymaps/skug/rules.mk b/keyboards/planck/keymaps/skug/rules.mk index dcf16bef39..9721fcd747 100644 --- a/keyboards/planck/keymaps/skug/rules.mk +++ b/keyboards/planck/keymaps/skug/rules.mk @@ -1 +1,3 @@ SRC += muse.c +EXTRAKEY_ENABLE = no +CONSOLE_ENABLE = no From bf0bb1a4db98864fe04d40ca68fe6bc5a0184395 Mon Sep 17 00:00:00 2001 From: Christoffer Holmberg Date: Mon, 15 Oct 2018 20:43:11 +0300 Subject: [PATCH 172/269] Keymap: Update to ergodox layout (#4134) * Disable KB mouse & cleanup * fix ascii-layout * _______ is now defined by qmk and apparently has been for a year already ;) --- keyboards/ergodox_ez/keymaps/skug/config.h | 2 ++ keyboards/ergodox_ez/keymaps/skug/keymap.c | 30 ++++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/skug/config.h b/keyboards/ergodox_ez/keymaps/skug/config.h index d972813920..abf1c635f1 100644 --- a/keyboards/ergodox_ez/keymaps/skug/config.h +++ b/keyboards/ergodox_ez/keymaps/skug/config.h @@ -1,5 +1,7 @@ #pragma once +#define FORCE_NKRO + #undef LSPO_KEY #undef RSPC_KEY #define LSPO_KEY KC_8 // Nordic Left SpaceCadet diff --git a/keyboards/ergodox_ez/keymaps/skug/keymap.c b/keyboards/ergodox_ez/keymaps/skug/keymap.c index 0d2ec1dd9f..d17990481e 100644 --- a/keyboards/ergodox_ez/keymaps/skug/keymap.c +++ b/keyboards/ergodox_ez/keymaps/skug/keymap.c @@ -22,8 +22,6 @@ #include "version.h" #include "keymap_swedish.h" -#define _______ KC_TRNS - #define BASE 0 // default layer #define SYMB 1 // symbols #define MDIA 2 // media keys @@ -47,8 +45,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | L4 | A | S | D | F | G |------| |------| H | J | K | L |Ö / L3| Ä/L2 | - * | | | | | | | Hypr/| | Meh/ | | | | | | | - * |--------+------+------+------+------+------| Esc | | Ent |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| Back | |Forwd |------+------+------+------+------+--------| * | LShift/| Z | X | C | V | B | | | | N | M | ; | : | _ | RShift/| * | ( | | | | | | | | | | | , | . | - | ) | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -71,8 +69,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { NO_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_INS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), MO(ARRW), KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_ESC), - CTL_T(NO_APOS), NO_ACUT, KC_LALT, KC_BSPC, KC_SPC, + KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_WBAK, + CTL_T(NO_APOS), NO_ACUT, KC_LALT, KC_BSPC, KC_SPC, NO_LESS, KC_END, KC_LEFT, KC_RIGHT, KC_PGDN, CTL_T(KC_ENT), ALT_T(KC_ESC), KC_LGUI, @@ -81,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TO(ARRW), KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AA, KC_H, KC_J, KC_K, KC_L, LT(MDIA, NO_OSLH), LT(SYMB, NO_AE), - MEH_T(KC_ENT), KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, KC_RSPC, + KC_WFWD, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, KC_RSPC, KC_SPC, KC_BSPC, NO_ALGR, NO_ASTR, CTL_T(NO_TILD), KC_HOME, NO_CIRC, KC_PGUP, KC_UP, KC_DOWN, @@ -101,11 +99,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | . | 0 | = | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * |Animat| | |Toggle|Solid | + * | | | | | | * ,------|------|------| |------+------+------. * | | | | | | | | * |------|------|------| |------|------|------| - * |BNess-|Bness+| | | |Hue- |Hue+ | + * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS @@ -116,18 +114,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______,KC_HASH,NO_DLR, NO_LPRN,NO_RPRN,NO_GRV, _______,KC_PERC,NO_CIRC,NO_LBRC,NO_RBRC,NO_TILD,_______, EPRM,_______,_______,_______,_______, - RGB_MOD,_______, + _______,_______, + _______,_______,_______, _______,_______,_______, - RGB_VAD,RGB_VAI,_______, // right hand _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_UP, KC_7, KC_8, KC_9, NO_ASTR, KC_F12, KC_DOWN, KC_4, KC_5, KC_6, NO_PLUS, _______, _______, NO_AMPR, KC_1, KC_2, KC_3, NO_MINS, _______, _______,KC_DOT, KC_0, NO_EQL, _______, - RGB_TOG, RGB_SLD, + _______, _______, _______, _______, _______, - _______, RGB_HUD, RGB_HUI + _______, _______, _______ ), /* Keymap: Media and mouse keys @@ -183,10 +181,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, // right hand TO(BASE), _______, _______, _______, _______, _______, _______, - _______, _______, KC_BTN4, KC_MS_U, KC_BTN5, _______, _______, - _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_BTN1, KC_BTN3, KC_BTN2, _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ From 0beb945554e043172f344eb4a48aaede28a529a0 Mon Sep 17 00:00:00 2001 From: Kenny Hung Date: Mon, 15 Oct 2018 18:44:19 +0100 Subject: [PATCH 173/269] Keymap: add JJ40 Skewwhiffy layout (#4135) --- keyboards/jj40/keymaps/skewwhiffy/keymap.c | 219 +++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 keyboards/jj40/keymaps/skewwhiffy/keymap.c diff --git a/keyboards/jj40/keymaps/skewwhiffy/keymap.c b/keyboards/jj40/keymaps/skewwhiffy/keymap.c new file mode 100644 index 0000000000..6b193a15cb --- /dev/null +++ b/keyboards/jj40/keymaps/skewwhiffy/keymap.c @@ -0,0 +1,219 @@ +/* Copyright 2017 Kenny Hung + * + * 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 +#include "keymap_uk.h" + +// Layer shorthand +enum Layers { + cm, // colemak + dv, // dvorak + qw, // qwerty + nbl, // numbers left + nbr, // numbers right + syl, // symbols left + syr, // symbols right + nal, // navigation left + nar // navigation right +}; + +// Layer buttons +#define _Z_SFT SFT_T(UK_Z) +#define _SCLSH SFT_T(UK_SCLN) +#define _SLSH SFT_T(UK_SLSH) + +#define _X_NB LT(nbl, UK_X) +#define _Q_NB LT(nbl, UK_Q) +#define _DOT_NB LT(nbr, UK_DOT) +#define _V_NB LT(nbr, UK_V) +#define __NBL LT(nbl, _______) +#define __NBR LT(nbr, _______) + +#define _C_SY LT(syl, UK_C) +#define _J_SY LT(syl, UK_J) +#define _W_SY LT(syr, UK_W) +#define _COM_SY LT(syr, UK_COMM) +#define __SYL LT(syl, _______) +#define __SYR LT(syr, _______) + +#define _V_NAL LT(nal, UK_V) +#define _K_NAL LT(nal, UK_K) +#define _M_NAR LT(nar, UK_M) +#define __NAL LT(nal, _______) +#define __NAR LT(nar, _______) + +// Custom hotkeys +#define _TERM LCTL(UK_QUOT) // Hotkey for terminal +#define _S_TAB S(UK_TAB) +#define _C_LEFT LCTL(UK_LEFT) +#define _C_RGHT LCTL(UK_RGHT) +#define _A_LEFT LALT(UK_LEFT) +#define _A_RGHT LALT(UK_RGHT) + +// Custom hotkeys +#define _TERM LCTL(UK_QUOT) // Hotkey for terminal +#define _S_TAB S(UK_TAB) +#define _C_LEFT LCTL(UK_LEFT) +#define _C_RGHT LCTL(UK_RGHT) +#define _A_LEFT LALT(UK_LEFT) +#define _A_RGHT LALT(UK_RGHT) + +enum custom_keycodes { + IJ_OMN = SAFE_RANGE // IntelliJ Omnibox +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Colemak + * .-----------------------------------------------------------------------------------------------------------. + * | Q | W | F | P | G | | | J | L | U | Y | ; | + * |-----------------------------------------------------------------------------------------------------------| + * | A | R | S | T | D | | | H | N | E | I | O | + * |-----------------------------------------------------------------------------------------------------------| + * | Z | X | C | V | B | | | K | M | , | . | / | + * | SHIFT | NUMBER | SYMBOL | NAV | | | | | NAV | SYMBOL | FUNC | SHIFT | + * |-----------------------------------------------------------------------------------------------------------| + * | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT | + * .-----------------------------------------------------------------------------------------------------------. + */ + [cm] = LAYOUT_ortho_4x12( \ + UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN, \ + UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O, \ + _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, UK_K, _M_NAR, _COM_SY, _DOT_NB, _SLSH, \ + UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT \ + ), + +/* Dvorak + * .-----------------------------------------------------------------------------------------------------------. + * | ' | , | . | P | Y | | | F | G | C | R | L | + * |-----------------------------------------------------------------------------------------------------------| + * | A | O | E | U | I | | | D | H | T | N | S | + * |-----------------------------------------------------------------------------------------------------------| + * | ; | Q | J | K | X | | | B | M | W | V | Z | + * | SHIFT | NUMBER | SYMBOL | NAV | | | | | NAV | SYMBOL | FUNC | SHIFT | + * |-----------------------------------------------------------------------------------------------------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------------------------| + */ + [dv] = LAYOUT_ortho_4x12( \ + UK_QUOT, UK_COMM, UK_DOT, UK_P, UK_Y, _______, _______, UK_F, UK_G, UK_C, UK_R, UK_L, \ + UK_A, UK_O, UK_E, UK_U, UK_I, _______, _______, UK_D, UK_H, UK_T, UK_N, UK_S, \ + _SCLSH, _Q_NB, _J_SY, _K_NAL, UK_X, _______, _______, UK_B, _M_NAR, _W_SY, _V_NB, _Z_SFT, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + +/* QWERTY + * .-----------------------------------------------------------------------------------------------------------. + * | Q | W | E | R | T | | | Y | U | I | O | P | + * |-----------------------------------------------------------------------------------------------------------| + * | A | S | D | F | G | | | H | J | K | L | ; | + * |-----------------------------------------------------------------------------------------------------------| + * | Z | X | C | V | B | | | N | M | , | . | / | + * | SHIFT | NUMBER | SYMBOL | NAV | | | | | NAV | SYMBOL | FUNC | SHIFT | + * |-----------------------------------------------------------------------------------------------------------| + * | | | | | | | | | | | | | + * .-----------------------------------------------------------------------------------------------------------. + */ + [qw] = LAYOUT_ortho_4x12( \ + UK_Q, UK_W, UK_E, UK_R, UK_T, _______, _______, UK_Y, UK_U, UK_I, UK_O, UK_P, \ + UK_A, UK_S, UK_D, UK_F, UK_G, _______, _______, UK_H, UK_J, UK_K, UK_L, UK_SCLN, \ + _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, UK_N, _M_NAR, _COM_SY, _DOT_NB, _SLSH, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + +/* Numbers _NB + * .-----------------------------------------------------------------------------------------------------------. + * | | F7 | F8 | F9 | F10 | | | | 7 | 8 | 9 | | + * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | F4 | F5 | F6 | F11 | | | | 4 | 5 | 6 | | + * |-----------------+--------+--------+--------+--------+--------+--------+--------------------------+--------| + * | | F1 | F2 | F3 | F12 | | | 0 | 1 | 2 | 3 | . | + * |-----------------+--------+--------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | | | | | | | | + * '-----------------------------------------------------------------------------------------------------------' + */ + [nbl] = LAYOUT_ortho_4x12( \ + _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, UK_7, UK_8, UK_9, _______, \ + _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, UK_4, UK_5, UK_6, _______, \ + _______, __NBL, UK_F2, UK_F3, UK_F12, _______, _______, UK_0, UK_1, UK_2, UK_3, UK_DOT, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + [nbr] = LAYOUT_ortho_4x12( \ + _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, UK_7, UK_8, UK_9, _______, \ + _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, UK_4, UK_5, UK_6, _______, \ + _______, UK_F1, UK_F2, UK_F3, UK_F12, _______, _______, UK_0, UK_1, UK_2, __NBR, UK_DOT, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + +/* Symbols _SY + * .-----------------------------------------------------------------------------------------------------------. + * | ! | £ | _ | - | ~ | | | \ | { | } | / | # | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | $ | % | + | = | | | | " | ( | ) | ' | @ | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | ^ | & | * | | | | | | < | [ | ] | > | ` | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | | | | | | + * '-----------------------------------------------------------------------------------------------------------' + */ + [syl] = LAYOUT_ortho_4x12( \ + UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, \ + UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT, \ + UK_CIRC, UK_AMPR, __SYL, UK_PIPE, _______, _______, _______, UK_LABK, UK_LBRC, UK_RBRC, UK_RABK, UK_GRV, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + [syr] = LAYOUT_ortho_4x12( \ + UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, \ + UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT, \ + UK_CIRC, UK_AMPR, UK_ASTR, UK_PIPE, _______, _______, _______, UK_LABK, UK_LBRC, __SYR, UK_RABK, UK_GRV, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + +/* + * Navigation + * .-----------------------------------------------------------------------------------------------------------. + * | Esc | Ctrl L | Up | Ctrl R | RGB RMD| RGB HD | RGB HI | RGB_TG | PtSn | ScLk | Pause | DVORAK | + * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | Tab | Left | Down | Right | RGB MD | RGB SD | RGB SI | COLEMAK| Insert | Home | PgUp | Term | + * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | ShTab | Alt L | IJ Omni| Alt R | | RGB VD | RGB VI | | ScLk | End | PgDn | QWERTY | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | | | | | | + * '-----------------------------------------------------------------------------------------------------------' + */ + [nal] = LAYOUT_ortho_4x12( \ + UK_ESC, _C_LEFT, UK_UP, _C_RGHT, RGB_RMOD,RGB_HUD, RGB_HUI, RGB_TOG, UK_PSCR, UK_SLCK, UK_PAUS, DF(dv), \ + UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, RGB_MOD, RGB_SAD, RGB_SAI, DF(cm), UK_INS, UK_HOME, UK_PGUP, _TERM, \ + _S_TAB, _A_LEFT, IJ_OMN, __NAL, _______, RGB_VAD, RGB_VAI, _______, UK_SLCK, UK_END, UK_PGDN, DF(qw), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), + [nar] = LAYOUT_ortho_4x12( \ + UK_ESC, _C_LEFT, UK_UP, _C_RGHT, RGB_RMOD,RGB_HUD, RGB_HUI, RGB_TOG, UK_PSCR, UK_SLCK, UK_PAUS, DF(dv), \ + UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, RGB_MOD, RGB_SAD, RGB_SAI, DF(cm), UK_INS, UK_HOME, UK_PGUP, _TERM, \ + _S_TAB, _A_LEFT, IJ_OMN, _A_RGHT, _______, RGB_VAD, RGB_VAI, _______, __NAR, UK_END, UK_PGDN, DF(qw), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case IJ_OMN: + SEND_STRING(SS_TAP(X_LSHIFT)SS_TAP(X_LSHIFT)); + return false; + } + } + return true; +} From 4930e22dda408420332831781c4fde002a89915e Mon Sep 17 00:00:00 2001 From: Jason Thigpen Date: Mon, 15 Oct 2018 10:44:55 -0700 Subject: [PATCH 174/269] Keymap: Move multimedia events to dedicated layer and format config (#4136) --- keyboards/dz60/keymaps/crd/keymap.c | 48 +++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/keyboards/dz60/keymaps/crd/keymap.c b/keyboards/dz60/keymaps/crd/keymap.c index 5e9242c9d9..a17d32caaf 100644 --- a/keyboards/dz60/keymaps/crd/keymap.c +++ b/keyboards/dz60/keymaps/crd/keymap.c @@ -12,25 +12,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | DEL | * |-----------------------------------------------------------------------------------------+ - * | Ctrl | Alt | Cmd | Space | Cmd | FN | L | D | R | + * | FN2 | Alt | Cmd | Space | Cmd | FN1 | L | D | R | * `-----------------------------------------------------------------------------------------' */ LAYOUT_directional( - KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + MO(2), KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT ), - /* FN Layer + /* FN1 Layer * ,-----------------------------------------------------------------------------------------. - * | ` ~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | RESET | + * | ` ~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | * |-----------------------------------------------------------------------------------------+ - * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | + * | | | | | | | | | | | | | | | * |-----------------------------------------------------------------------------------------+ - * | | BL T| BL M| BL+ | BL- | | | | | | | | | + * | | | | | | | | | | | | | | * |-----------------------------------------------------------------------------------------+ * | | | | | | | | | | | | |PgUp | | * |-----------------------------------------------------------------------------------------+ @@ -39,10 +39,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ LAYOUT_directional( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RESET, - _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, - _______, BL_TOGG, BL_STEP, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDOWN, KC_END ), + + /* FN2 Layer (Media) + * ,-----------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | RESET | + * |-----------------------------------------------------------------------------------------+ + * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | |Pl/Ps|Vol+ |Mute | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | |Prev |Vol- |Next | + * `-----------------------------------------------------------------------------------------' + */ + + LAYOUT_directional( + KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT + ), }; From 4c9372a0819b3fa062105803668d3b277222dc1a Mon Sep 17 00:00:00 2001 From: Yann Hodique Date: Mon, 15 Oct 2018 10:45:30 -0700 Subject: [PATCH 175/269] Keyboard: Make type 5 the default sun keyboard. (#4137) Type 5 is better polished, and probably more common as the last non-USB Sun keyboard. --- keyboards/converter/sun_usb/rules.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/converter/sun_usb/rules.mk b/keyboards/converter/sun_usb/rules.mk index e03b374f37..6e36a19050 100644 --- a/keyboards/converter/sun_usb/rules.mk +++ b/keyboards/converter/sun_usb/rules.mk @@ -40,3 +40,5 @@ ifdef HARDWARE_SERIAL else SRC += protocol/serial_soft.c endif + +DEFAULT_FOLDER = converter/sun_usb/type5 From 088b476343bf97c4bca6855a4ff2152f1bf0785e Mon Sep 17 00:00:00 2001 From: Yann Hodique Date: Mon, 15 Oct 2018 10:49:51 -0700 Subject: [PATCH 176/269] Keymap: add sun_usb keymap for sigma (#4138) Also add users/sigma, which contains useful code for keymaps. --- .../sun_usb/type5/keymaps/sigma/keymap.c | 31 ++ .../sun_usb/type5/keymaps/sigma/readme.md | 12 + .../sun_usb/type5/keymaps/sigma/rules.mk | 1 + users/sigma/config.h | 21 ++ users/sigma/rules.mk | 3 + users/sigma/sigma.c | 276 ++++++++++++++++++ users/sigma/sigma.h | 58 ++++ 7 files changed, 402 insertions(+) create mode 100644 keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c create mode 100644 keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md create mode 100644 keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk create mode 100644 users/sigma/config.h create mode 100644 users/sigma/rules.mk create mode 100644 users/sigma/sigma.c create mode 100644 users/sigma/sigma.h diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c b/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c new file mode 100644 index 0000000000..1c7ea3efc2 --- /dev/null +++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c @@ -0,0 +1,31 @@ +/* +Copyright 2018 Yann Hodique @sigma + +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 +#include "sigma.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = + { + [_QWERTY] = LAYOUT_us_unix( + KC_LEAD, KC_SCRT, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_MUTE,KC_VOLD,KC_VOLU,KC_OS_LOCK, + KC_STOP, KC_OS_REDO, KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, + VRSN, KC_OS_UNDO, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_MAKE, KC_OS_COPY, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, + KC_EXECUTE,KC_OS_PASTE, KC_LSFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_FIND, KC_OS_CUT, KC_CAPS,KC_LGUI,KC_LALT, KC_SPC, KC_RGUI,KC_APP,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT + ), + }; diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md b/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md new file mode 100644 index 0000000000..6ae011f866 --- /dev/null +++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md @@ -0,0 +1,12 @@ +Overview +======== + +This is my personal Sun Type 5 configuration. + +How to build +------------ + + make converter/sun_usb/type5:sigma:teensy + +Layers +------ diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk b/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk new file mode 100644 index 0000000000..09a3af829a --- /dev/null +++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk @@ -0,0 +1 @@ +BOOTLOADER = halfkay diff --git a/users/sigma/config.h b/users/sigma/config.h new file mode 100644 index 0000000000..53b986cdac --- /dev/null +++ b/users/sigma/config.h @@ -0,0 +1,21 @@ +/* + Copyright 2018 Yann Hodique @sigma + + 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 + +#define LEADER_TIMEOUT 1000 + +#define MACRO_TIMER 5 diff --git a/users/sigma/rules.mk b/users/sigma/rules.mk new file mode 100644 index 0000000000..a4cd2b34d3 --- /dev/null +++ b/users/sigma/rules.mk @@ -0,0 +1,3 @@ +LEADER_ENABLE = yes + +SRC += sigma.c diff --git a/users/sigma/sigma.c b/users/sigma/sigma.c new file mode 100644 index 0000000000..b2bf40d576 --- /dev/null +++ b/users/sigma/sigma.c @@ -0,0 +1,276 @@ +/* + Copyright 2018 Yann Hodique @sigma + + 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 "sigma.h" + +userspace_config_t runtime_userspace_config; +userspace_config_t stored_userspace_config; + +__attribute__ ((weak)) +void matrix_init_keymap(void) {} + +__attribute__ ((weak)) +void startup_keymap(void) {} + +__attribute__ ((weak)) +void shutdown_keymap(void) {} + +__attribute__ ((weak)) +void suspend_power_down_keymap(void) {} + +__attribute__ ((weak)) +void suspend_wakeup_init_keymap(void) {} + +__attribute__ ((weak)) +void matrix_scan_keymap(void) {} + +__attribute__ ((weak)) +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + return true; +} + +__attribute__ ((weak)) +bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { + return true; +} + + +__attribute__ ((weak)) +uint32_t layer_state_set_keymap (uint32_t state) { + return state; +} + +__attribute__ ((weak)) +uint32_t default_layer_state_set_keymap (uint32_t state) { + return state; +} + +__attribute__ ((weak)) +void led_set_keymap(uint8_t usb_led) {} + +void set_os(uint8_t os) { + runtime_userspace_config.os_target = os; + + switch (os) { + case _OS_MACOS: + set_unicode_input_mode(UC_OSX); + break; + case _OS_LINUX: + set_unicode_input_mode(UC_LNX); + break; + case _OS_WINDOWS: + set_unicode_input_mode(UC_WIN); + break; + } +} + +void matrix_init_user(void) { + stored_userspace_config.raw = eeconfig_read_user(); + runtime_userspace_config.raw = stored_userspace_config.raw; + + set_os(runtime_userspace_config.os_target); +} + +void store_userspace_config(void) { + eeconfig_update_user(stored_userspace_config.raw); +} + +LEADER_EXTERNS(); + +void matrix_scan_user(void) { + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_TWO_KEYS(KC_F1, KC_L) { + set_os(_OS_LINUX); + } + SEQ_TWO_KEYS(KC_F1, KC_M) { + set_os(_OS_MACOS); + } + SEQ_TWO_KEYS(KC_F1, KC_W) { + set_os(_OS_WINDOWS); + } + SEQ_TWO_KEYS(KC_F1, KC_S) { + stored_userspace_config.raw = runtime_userspace_config.raw; + store_userspace_config(); + } + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + uint8_t os_target = runtime_userspace_config.os_target; + bool pressed = record->event.pressed; + + switch (keycode) { + case KC_QWERTY: + if (pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + + case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader + if (!pressed) { + send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP +#if defined(__ARM__) + ":dfu-util" +#elif defined(BOOTLOADER_DFU) + ":dfu" +#elif defined(BOOTLOADER_HALFKAY) + ":teensy" +#elif defined(BOOTLOADER_CATERINA) + ":avrdude" +#endif // bootloader options + SS_TAP(X_ENTER)), 10); + } + return false; + break; + + case EPRM: // Resets EEPROM + if (pressed) { + eeconfig_init(); + default_layer_set(1UL< @sigma + + 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 + +#include "quantum.h" +#include "version.h" +#include "eeprom.h" + +// Define os types +enum os_types + { + _OS_MACOS = 0, + _OS_LINUX, + _OS_WINDOWS, + }; + +// Define layer names +enum userspace_layers + { + _QWERTY = 0, + }; + +typedef union { + uint32_t raw; + struct { + uint8_t os_target :2; + }; +} userspace_config_t; + +enum userspace_custom_keycodes + { + EPRM = SAFE_RANGE, // Resets EEPROM + VRSN, // Prints QMK Firmware and board info + KC_QWERTY, // Sets default layer to QWERTY + KC_MAKE, // Rebuild the current firmware + KC_OS_CUT, + KC_OS_COPY, + KC_OS_PASTE, + KC_OS_UNDO, + KC_OS_REDO, + KC_OS_LOCK, + KC_SCRT, + NEW_SAFE_RANGE //use NEW_SAFE_RANGE for keymap specific codes + }; From 2c3e617fba1fefc3116fcea38099eb5b56a6d6f3 Mon Sep 17 00:00:00 2001 From: Danny Date: Mon, 15 Oct 2018 13:53:32 -0400 Subject: [PATCH 177/269] Keymap: Add nano keymap for modding Spooka light (#4141) From 85f315ad6508d96af4497ea433c54f13c0296a90 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Mon, 8 Oct 2018 22:56:07 -0400 Subject: [PATCH 178/269] Add Iris Rev. 3 --- keyboards/iris/iris.h | 4 +- keyboards/iris/rev1/config.h | 2 - keyboards/iris/rev1_led/config.h | 2 - keyboards/iris/rev2/config.h | 2 - keyboards/iris/rev3/config.h | 85 ++++++++++++++++++++++++++++++++ keyboards/iris/rev3/rev3.c | 42 ++++++++++++++++ keyboards/iris/rev3/rev3.h | 35 +++++++++++++ keyboards/iris/rev3/rules.mk | 2 + 8 files changed, 167 insertions(+), 7 deletions(-) create mode 100644 keyboards/iris/rev3/config.h create mode 100644 keyboards/iris/rev3/rev3.c create mode 100644 keyboards/iris/rev3/rev3.h create mode 100644 keyboards/iris/rev3/rules.mk diff --git a/keyboards/iris/iris.h b/keyboards/iris/iris.h index 8d33b6b217..afad9a0d6d 100644 --- a/keyboards/iris/iris.h +++ b/keyboards/iris/iris.h @@ -4,8 +4,10 @@ #include "rev1.h" #elif KEYBOARD_iris_rev1_led #include "rev1_led.h" -#else +#elif KEYBOARD_iris_rev2 #include "rev2.h" +#else + #include "rev3.h" #endif #include "quantum.h" diff --git a/keyboards/iris/rev1/config.h b/keyboards/iris/rev1/config.h index fd9b2ced39..cc7f2d8d44 100644 --- a/keyboards/iris/rev1/config.h +++ b/keyboards/iris/rev1/config.h @@ -65,8 +65,6 @@ along with this program. If not, see . #define RGB_DI_PIN D3 #define RGBLIGHT_TIMER #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/iris/rev1_led/config.h b/keyboards/iris/rev1_led/config.h index 18d783ae79..e9eac2455c 100644 --- a/keyboards/iris/rev1_led/config.h +++ b/keyboards/iris/rev1_led/config.h @@ -65,8 +65,6 @@ along with this program. If not, see . #define RGB_DI_PIN D3 #define RGBLIGHT_TIMER #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/iris/rev2/config.h b/keyboards/iris/rev2/config.h index 2ea31a1541..368d21c989 100644 --- a/keyboards/iris/rev2/config.h +++ b/keyboards/iris/rev2/config.h @@ -65,8 +65,6 @@ along with this program. If not, see . #define RGB_DI_PIN D3 #define RGBLIGHT_TIMER #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/iris/rev3/config.h b/keyboards/iris/rev3/config.h new file mode 100644 index 0000000000..7f68180c29 --- /dev/null +++ b/keyboards/iris/rev3/config.h @@ -0,0 +1,85 @@ +/* +Copyright 2017 Danny Nguyen + +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 + +#include QMK_KEYBOARD_CONFIG_H + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xCEEB +#define PRODUCT_ID 0x1256 +#define DEVICE_VER 0x0300 +#define MANUFACTURER Keebio +#define PRODUCT Iris Keyboard +#define DESCRIPTION Split 50 percent ergonomic keyboard + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 10 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { D2, D3, D5, D7, D6 } +#define MATRIX_COL_PINS { F1, F4, F5, F6, D4, B4 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#define BACKLIGHT_PIN B5 +#define BACKLIGHT_LEVELS 5 + +/* ws2812 RGB LED */ +#define RGB_DI_PIN F7 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 12 // Number of LEDs + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION diff --git a/keyboards/iris/rev3/rev3.c b/keyboards/iris/rev3/rev3.c new file mode 100644 index 0000000000..d8272db0f5 --- /dev/null +++ b/keyboards/iris/rev3/rev3.c @@ -0,0 +1,42 @@ +#include "rev3.h" + +#ifdef SSD1306OLED +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + led_set_user(usb_led); +} +#endif + +void matrix_init_kb(void) { + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; + + +#ifdef SWAP_HANDS_ENABLE +__attribute__ ((weak)) +// swap-hands action needs a matrix to define the swap +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + /* Left hand, matrix positions */ + {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, + {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, + {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, + {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, + {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, + /* Right hand, matrix positions */ + {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, + {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, + {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, + {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, + {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, +}; +#endif + diff --git a/keyboards/iris/rev3/rev3.h b/keyboards/iris/rev3/rev3.h new file mode 100644 index 0000000000..d44cef9a6b --- /dev/null +++ b/keyboards/iris/rev3/rev3.h @@ -0,0 +1,35 @@ +#pragma once + +#include "iris.h" +#include "quantum.h" + + +#ifdef USE_I2C +#include +#ifdef __AVR__ + #include + #include +#endif +#endif + +//void promicro_bootloader_jmp(bool program); + +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, LT4, RT4, R30, R31, R32, R33, R34, R35, \ + LT1, LT2, LT3, RT3, RT2, RT1 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { KC_NO, KC_NO, LT4, LT1, LT2, LT3 }, \ + { R05, R04, R03, R02, R01, R00 }, \ + { R15, R14, R13, R12, R11, R10 }, \ + { R25, R24, R23, R22, R21, R20 }, \ + { R35, R34, R33, R32, R31, R30 }, \ + { KC_NO, KC_NO, RT4, RT1, RT2, RT3 } \ + } diff --git a/keyboards/iris/rev3/rules.mk b/keyboards/iris/rev3/rules.mk new file mode 100644 index 0000000000..d7463419b4 --- /dev/null +++ b/keyboards/iris/rev3/rules.mk @@ -0,0 +1,2 @@ +RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = yes From 44a348d56f661d22144202f440b87c26832a8170 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Mon, 15 Oct 2018 12:46:33 -0400 Subject: [PATCH 179/269] Use DFU bootloader for rev 3 --- keyboards/iris/rules.mk | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/keyboards/iris/rules.mk b/keyboards/iris/rules.mk index fa261adc6f..88dd66c18e 100644 --- a/keyboards/iris/rules.mk +++ b/keyboards/iris/rules.mk @@ -37,7 +37,11 @@ F_USB = $(F_CPU) # This definition is optional, and if your keyboard supports multiple bootloaders of # different sizes, comment this out, and the correct address will be loaded # automatically (+60). See bootloader.mk for all options. -BOOTLOADER = caterina +ifeq ($(strip $(KEYBOARD)), iris/rev3) + BOOTLOADER = dfu +else + BOOTLOADER = caterina +endif # Interrupt driven control endpoint task(+60) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT From 31d12662bde435e6636347ee842108b1cb3d8d48 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 15 Oct 2018 12:34:49 -0700 Subject: [PATCH 180/269] Update to drashna keymaps and userspace - RGB edition (#4143) * Fix up userspace after feature merges * Add new macros for keyboard layouts * Keep new layouts in keymap for easy reference * Cleanup layouts * Fix CRKBD wrappers * Fix up comments * Fix spacing in orthodox base layer * ergodox related cleanup * Make KC_MAKE only flash when holding shift * Add option to fast compile boards * Clean up rgb modes to save space * Re-enable Swap Hands on my Iris --- keyboards/crkbd/keymaps/drashna/config.h | 10 +- keyboards/crkbd/keymaps/drashna/keymap.c | 59 +++++---- keyboards/iris/keymaps/drashna/config.h | 2 +- keyboards/iris/keymaps/drashna/keymap.c | 67 +++++----- keyboards/iris/keymaps/drashna/rules.mk | 4 +- keyboards/orthodox/keymaps/drashna/config.h | 2 +- keyboards/orthodox/keymaps/drashna/keymap.c | 52 ++++---- keyboards/orthodox/keymaps/drashna/rules.mk | 2 +- keyboards/viterbi/keymaps/drashna/config.h | 4 +- layouts/community/ergodox/drashna/config.h | 5 +- layouts/community/ergodox/drashna/keymap.c | 77 ++++++------ layouts/community/ortho_4x12/drashna/config.h | 2 +- layouts/community/ortho_4x12/drashna/keymap.c | 50 +++++--- users/drashna/config.h | 6 +- users/drashna/drashna.c | 35 ++++-- users/drashna/drashna.h | 118 ++++++++---------- users/drashna/rgb_stuff.c | 20 +-- users/drashna/rules.mk | 3 - users/drashna/tap_dances.c | 10 +- 19 files changed, 281 insertions(+), 247 deletions(-) diff --git a/keyboards/crkbd/keymaps/drashna/config.h b/keyboards/crkbd/keymaps/drashna/config.h index 366f013dca..adfd79044d 100644 --- a/keyboards/crkbd/keymaps/drashna/config.h +++ b/keyboards/crkbd/keymaps/drashna/config.h @@ -34,10 +34,12 @@ along with this program. If not, see . // #define TAPPING_FORCE_HOLD // #define TAPPING_TERM 100 +#ifdef RGBLIGHT_ENABLE #undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 27 + +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 #define RGBLIGHT_LIMIT_VAL 120 -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 +#endif diff --git a/keyboards/crkbd/keymaps/drashna/keymap.c b/keyboards/crkbd/keymaps/drashna/keymap.c index 7bced8de33..a293d53374 100644 --- a/keyboards/crkbd/keymaps/drashna/keymap.c +++ b/keyboards/crkbd/keymaps/drashna/keymap.c @@ -20,37 +20,48 @@ enum crkbd_keycodes { RGBRST = NEW_SAFE_RANGE }; +#define LAYOUT_crkbd_base( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ + ) \ + LAYOUT_wrapper( \ + KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSPC, \ + KC_TAB, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_QUOT, \ + KC_MLSF, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, CTL_T(K2A), KC_MRSF, \ + LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE \ + ) +#define LAYOUT_crkbd_base_wrapper(...) LAYOUT_crkbd_base(__VA_ARGS__) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_wrapper( - KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, - KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, - KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF, - LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + [_QWERTY] = LAYOUT_crkbd_base_wrapper( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ ), - [_COLEMAK] = LAYOUT_wrapper( - KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, - KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, - KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF, - LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + + [_COLEMAK] = LAYOUT_crkbd_base_wrapper( + _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, + _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, + _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ ), - [_DVORAK] = LAYOUT_wrapper( - KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, - KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, - KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF, - LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + + [_DVORAK] = LAYOUT_crkbd_base_wrapper( + _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, + _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, + _________________DVORAK_L3_________________, _________________DVORAK_R3_________________ ), - [_WORKMAN] = LAYOUT_wrapper( - KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, - KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, - KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_MRSF, - LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + + [_WORKMAN] = LAYOUT_crkbd_base_wrapper( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ ), [_MODS] = LAYOUT_wrapper( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT, + _______, ___________________BLANK___________________, ___________________BLANK___________________, _______, + _______, ___________________BLANK___________________, ___________________BLANK___________________, _______, + KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, KC_RSFT, _______, _______, _______, _______, _______, _______ ), @@ -65,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, _________________RAISE_L1__________________, _________________RAISE_R1__________________, KC_BSPC, _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS, _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______, - _______, _______, _______, _______, _______, _______ //`--------------------' `--------------------' + _______, _______, _______, _______, _______, _______ ), [_ADJUST] = LAYOUT_wrapper( \ diff --git a/keyboards/iris/keymaps/drashna/config.h b/keyboards/iris/keymaps/drashna/config.h index 47276845f9..0274867153 100644 --- a/keyboards/iris/keymaps/drashna/config.h +++ b/keyboards/iris/keymaps/drashna/config.h @@ -31,7 +31,7 @@ along with this program. If not, see . #ifdef RGBLIGHT_ENABLE #undef RGBLED_NUM #define RGBLED_NUM 18 // Number of LEDs -#define RGBLIGHT_ANIMATIONS + #define RGBLIGHT_HUE_STEP 12 #define RGBLIGHT_SAT_STEP 12 #define RGBLIGHT_VAL_STEP 12 diff --git a/keyboards/iris/keymaps/drashna/keymap.c b/keyboards/iris/keymaps/drashna/keymap.c index 37c3f97f54..60f41f9d98 100644 --- a/keyboards/iris/keymaps/drashna/keymap.c +++ b/keyboards/iris/keymaps/drashna/keymap.c @@ -2,42 +2,53 @@ #include QMK_KEYBOARD_H #include "drashna.h" + +#define LAYOUT_iris_base( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ + ) \ + LAYOUT_wrapper( \ + KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, \ + KC_TAB , K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSLS, \ + KC_C1R3, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_QUOT, \ + KC_MLSF, CTL_T(K21), K22, K23, K24, K25, ALT_APP, OS_RGUI, K26, K27, K28, K29, CTL_T(K2A), KC_MRSF, \ + LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE \ + ) +#define LAYOUT_iris_base_wrapper(...) LAYOUT_iris_base(__VA_ARGS__) + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_wrapper( - KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, - KC_TAB , _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS, - KC_C1R3, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, - KC_MLSF, _________________QWERTY_L3_________________, ALT_APP, OS_RGUI, _________________QWERTY_R3_________________, KC_MRSF, - LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + [_QWERTY] = LAYOUT_iris_base_wrapper( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ ), - [_COLEMAK] = LAYOUT_wrapper( - KC_ESC , ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, - KC_TAB , _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSLS, - KC_C1R3, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, - KC_MLSF, _________________COLEMAK_L3________________, ALT_APP, OS_RGUI, _________________COLEMAK_R3________________, KC_MRSF, - LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + + [_COLEMAK] = LAYOUT_iris_base_wrapper( + _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, + _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, + _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ ), - [_DVORAK] = LAYOUT_wrapper( - KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, - KC_TAB , _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSLS, - KC_C1R3, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_QUOT, - KC_MLSF, _________________DVORAK_L3_________________, ALT_APP, OS_RGUI, _________________DVORAK_R3_________________, KC_MRSF, - LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + + [_DVORAK] = LAYOUT_iris_base_wrapper( + _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, + _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, + _________________DVORAK_L3_________________, _________________DVORAK_R3_________________ ), - [_WORKMAN] = LAYOUT_wrapper( - KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, - KC_TAB , _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSLS, - KC_C1R3, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, - KC_MLSF, _________________WORKMAN_L3________________, ALT_APP, OS_RGUI, _________________WORKMAN_R3________________, KC_MRSF, - LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + + [_WORKMAN] = LAYOUT_iris_base_wrapper( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ ), [_MODS] = LAYOUT_wrapper( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT, + _______, ___________________BLANK___________________, ___________________BLANK___________________, _______, + _______, ___________________BLANK___________________, ___________________BLANK___________________, _______, + _______, ___________________BLANK___________________, ___________________BLANK___________________, _______, + KC_LSFT, ___________________BLANK___________________, _______, _______, ___________________BLANK___________________, KC_RSFT, _______, _______, _______, _______, _______, _______ ), diff --git a/keyboards/iris/keymaps/drashna/rules.mk b/keyboards/iris/keymaps/drashna/rules.mk index e8035176ef..89e568f399 100644 --- a/keyboards/iris/keymaps/drashna/rules.mk +++ b/keyboards/iris/keymaps/drashna/rules.mk @@ -8,10 +8,10 @@ RGBLIGHT_ENABLE = yes AUDIO_ENABLE = yes NKRO_ENABLE = yes BACKLIGHT_ENABLE = no -SWAP_HANDS_ENABLE = no +SWAP_HANDS_ENABLE = yes INDICATOR_LIGHTS = yes MACROS_ENABLED = no -RGBLIGHT_TWINKLE = no +RGBLIGHT_TWINKLE = yes BOOTLOADER = qmk-dfu diff --git a/keyboards/orthodox/keymaps/drashna/config.h b/keyboards/orthodox/keymaps/drashna/config.h index 2257b62fd3..09df12d9ed 100644 --- a/keyboards/orthodox/keymaps/drashna/config.h +++ b/keyboards/orthodox/keymaps/drashna/config.h @@ -45,7 +45,7 @@ along with this program. If not, see . #ifdef RGBLIGHT_ENABLE #define RGB_DI_PIN D3 #define RGBLED_NUM 16 // Number of LEDs -#define RGBLIGHT_ANIMATIONS + #define RGBLIGHT_HUE_STEP 12 #define RGBLIGHT_SAT_STEP 12 #define RGBLIGHT_VAL_STEP 12 diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c index 67f732c127..25296ca4fd 100644 --- a/keyboards/orthodox/keymaps/drashna/keymap.c +++ b/keyboards/orthodox/keymaps/drashna/keymap.c @@ -30,41 +30,47 @@ uint8_t last_led; uint8_t last_osm; #endif -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO +#define LAYOUT_orthodox_base( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ + ) \ + LAYOUT_wrapper( \ + KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSPC, \ + KC_TAB, K11, K12, K13, K14, K15, ALT_APP, OS_LGUI, KC_LALT, OS_RGUI, K16, K17, K18, K19, K1A, KC_QUOT, \ + KC_MLSF, CTL_T(K21), K22, K23, K24, K25, LOWER, KC_SPACE,KC_BSPC, KC_DEL, KC_ENT, RAISE, K26, K27, K28, K29, CTL_T(K2A), KC_MRSF \ + ) +#define LAYOUT_orthodox_base_wrapper(...) LAYOUT_orthodox_base(__VA_ARGS__) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QWERTY] = LAYOUT_wrapper(\ - KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, - KC_TAB, _________________QWERTY_L2_________________, ___________ORTHODOX_THUMP_TOP_____________, _________________QWERTY_R2_________________, KC_QUOT, - KC_MLSF, _________________QWERTY_L3_________________, ___________________ORTHODOX_THUMB_BOTTOM____________________, _________________QWERTY_R3_________________, KC_MRSF +[_QWERTY] = LAYOUT_orthodox_base_wrapper( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ ), -[_COLEMAK] = LAYOUT_wrapper(\ - KC_ESC, _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSPC, - KC_TAB, _________________COLEMAK_L2________________, ___________ORTHODOX_THUMP_TOP_____________, _________________COLEMAK_R2________________, KC_QUOT, - KC_MLSF, _________________COLEMAK_L3________________, ___________________ORTHODOX_THUMB_BOTTOM____________________, _________________COLEMAK_R3________________, KC_MRSF +[_COLEMAK] = LAYOUT_orthodox_base_wrapper( + _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, + _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, + _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ ), -[_DVORAK] = LAYOUT_wrapper(\ - KC_ESC, _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSPC, - KC_TAB, _________________DVORAK_L2_________________, ___________ORTHODOX_THUMP_TOP_____________, _________________DVORAK_R2_________________, KC_MINS, - KC_MLSF, _________________DVORAK_L3_________________, ___________________ORTHODOX_THUMB_BOTTOM____________________, _________________DVORAK_R3_________________, KC_MRSF +[_DVORAK] = LAYOUT_orthodox_base_wrapper( + _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, + _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, + _________________DVORAK_L3_________________, _________________DVORAK_R3_________________ ), -[_WORKMAN] = LAYOUT_wrapper(\ - KC_ESC, _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSPC, - KC_TAB, _________________WORKMAN_L2________________, ___________ORTHODOX_THUMP_TOP_____________, _________________WORKMAN_R2________________, KC_MINS, - KC_MLSF, _________________WORKMAN_L3________________, ___________________ORTHODOX_THUMB_BOTTOM____________________, _________________WORKMAN_R3________________, KC_MRSF + +[_WORKMAN] = LAYOUT_orthodox_base_wrapper( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ ), + [_MODS] = LAYOUT_wrapper(\ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, diff --git a/keyboards/orthodox/keymaps/drashna/rules.mk b/keyboards/orthodox/keymaps/drashna/rules.mk index a826c664a7..f870c3a7d6 100644 --- a/keyboards/orthodox/keymaps/drashna/rules.mk +++ b/keyboards/orthodox/keymaps/drashna/rules.mk @@ -10,6 +10,6 @@ NKRO_ENABLE = yes INDICATOR_LIGHTS = yes MACROS_ENABLED = no -RGBLIGHT_TWINKLE = no +RGBLIGHT_TWINKLE = yes BOOTLOADER = qmk-dfu diff --git a/keyboards/viterbi/keymaps/drashna/config.h b/keyboards/viterbi/keymaps/drashna/config.h index a1e361e346..6eb871a50f 100644 --- a/keyboards/viterbi/keymaps/drashna/config.h +++ b/keyboards/viterbi/keymaps/drashna/config.h @@ -19,16 +19,14 @@ along with this program. If not, see . #ifdef RGBLIGHT_ENABLE #undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 16 + #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 #define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 #define RGBLIGHT_EFFECT_BREATHE_CENTER 1 -#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 300 -#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1 #endif // RGBLIGHT_ENABLE diff --git a/layouts/community/ergodox/drashna/config.h b/layouts/community/ergodox/drashna/config.h index 3ced185932..fee954d179 100644 --- a/layouts/community/ergodox/drashna/config.h +++ b/layouts/community/ergodox/drashna/config.h @@ -5,8 +5,9 @@ #ifdef RGBLIGHT_ENABLE #undef RGBLIGHT_SAT_STEP #define RGBLIGHT_SAT_STEP 12 -#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 7 -#define RGBLIGHT_EFFECT_SNAKE_LENGTH 7 + +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3 +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 3 #define RGBLIGHT_EFFECT_BREATHE_CENTER 1 #endif // RGBLIGHT_ENABLE diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c index 15153c4692..b9a2eb7a8f 100644 --- a/layouts/community/ergodox/drashna/keymap.c +++ b/layouts/community/ergodox/drashna/keymap.c @@ -30,6 +30,24 @@ along with this program. If not, see . //define layer change stuff for underglow indicator bool skip_leds = false; +#define LAYOUT_ergodox_pretty_base( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ + ) \ + LAYOUT_ergodox_pretty_wrapper( \ + KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, \ + KC_TAB, K01, K02, K03, K04, K05, TG(_DIABLO), TG(_DIABLO), K06, K07, K08, K09, K0A, KC_BSLS, \ + KC_C1R3, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_QUOT, \ + KC_MLSF, CTL_T(K21), K22, K23, K24, K25, TG(_GAMEPAD), TG(_GAMEPAD), K26, K27, K28, K29, CTL_T(K2A), KC_MRSF, \ + KC_GRV, OSM(MOD_MEH),OSM(MOD_LGUI),KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, UC_IRNY, \ + ALT_T(KC_APP), OSM(MOD_LGUI), OSM(MOD_RGUI), CTL_T(KC_ESCAPE), \ + KC_HOME, KC_PGUP, \ + LT(_LOWER, KC_SPACE),KC_BSPC, KC_END, KC_PGDN, KC_DEL, LT(_RAISE, KC_ENTER) \ + ) + +#define LAYOUT_ergodox_pretty_base_wrapper(...) LAYOUT_ergodox_pretty_base(__VA_ARGS__) + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -55,15 +73,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | End | | PgDn | | | * `---------------------' `---------------------' */ - [_QWERTY] = LAYOUT_ergodox_pretty_wrapper( - // left hand // right hand - KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, - KC_TAB, _________________QWERTY_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS, - KC_C1R3, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, - KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF, - KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, UC_IRNY, - __________________ERGODOX_THUMB_CLUSTER_____________________ - ), + [_QWERTY] = LAYOUT_ergodox_pretty_base_wrapper( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ + ), /* Keymap 0: COLEMAK layer * * ,--------------------------------------------------. ,--------------------------------------------------. @@ -87,15 +101,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* - [_COLEMAK] = LAYOUT_ergodox_pretty_wrapper( - // left hand // right hand - KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, - KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS, - KC_C1R3, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, - KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF, - KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, UC_IRNY, - __________________ERGODOX_THUMB_CLUSTER_____________________ - ), + [_COLEMAK] = LAYOUT_ergodox_pretty_base_wrapper( + _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, + _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, + _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ + ), /* Keymap 0: DVORAK Layout * * ,--------------------------------------------------. ,--------------------------------------------------. @@ -119,15 +129,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* - [_DVORAK] = LAYOUT_ergodox_pretty_wrapper( - // left hand // right hand - KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_BSLS, - KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH, - KC_C1R3, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_MINS, - KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF, - KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, UC_IRNY, - __________________ERGODOX_THUMB_CLUSTER_____________________ - ), + [_DVORAK] = LAYOUT_ergodox_pretty_base_wrapper( + _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, + _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, + _________________DVORAK_L3_________________, _________________DVORAK_R3_________________ + ), /* Keymap 0: WORKMAN layer * * ,--------------------------------------------------. ,--------------------------------------------------. @@ -149,17 +155,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | |ace | End | | PgDn | | | * `--------------------' `----------------------' */ -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* - [_WORKMAN] = LAYOUT_ergodox_pretty_wrapper( - // left hand - KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, - KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS, - KC_C1R3, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, - KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF, - KC_GRV, ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, UC_IRNY, - __________________ERGODOX_THUMB_CLUSTER_____________________ - ), + + [_WORKMAN] = LAYOUT_ergodox_pretty_base_wrapper( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ + ), // Reverts OSM(Shift) to normal Shifts. However, may not need since we fixed the issue with RDP (LOCAL RESOURCES) [_MODS] = LAYOUT_ergodox_pretty_wrapper( diff --git a/layouts/community/ortho_4x12/drashna/config.h b/layouts/community/ortho_4x12/drashna/config.h index cbd5bb4602..b4c780cc11 100644 --- a/layouts/community/ortho_4x12/drashna/config.h +++ b/layouts/community/ortho_4x12/drashna/config.h @@ -5,7 +5,7 @@ #if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM) #define RGB_DI_PIN D3 #define RGBLED_NUM 16 // Number of LEDs -#define RGBLIGHT_ANIMATIONS + #define RGBLIGHT_HUE_STEP 12 #define RGBLIGHT_SAT_STEP 12 #define RGBLIGHT_VAL_STEP 12 diff --git a/layouts/community/ortho_4x12/drashna/keymap.c b/layouts/community/ortho_4x12/drashna/keymap.c index 39f901b14f..108df69315 100644 --- a/layouts/community/ortho_4x12/drashna/keymap.c +++ b/layouts/community/ortho_4x12/drashna/keymap.c @@ -25,34 +25,44 @@ enum planck_keycodes { #define BACKLIT OSM(MOD_LSFT) #endif +#define LAYOUT_ortho_4x12_base( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ + ) \ + LAYOUT_ortho_4x12_wrapper( \ + KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSPC, \ + KC_TAB, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_QUOT, \ + KC_MLSF, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, CTL_T(K2A), KC_ENT, \ + BACKLIT, OS_LCTL, OS_LALT, OS_LGUI, SP_LWER, BK_LWER, DL_RAIS, ET_RAIS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + ) +#define LAYOUT_ortho_4x12_base_wrapper(...) LAYOUT_ortho_4x12_base(__VA_ARGS__) + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QWERTY] = LAYOUT_ortho_4x12_wrapper( - KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, - KC_TAB, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, - KC_MLSF, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT, - BACKLIT, OS_LCTL, OS_LALT, OS_LGUI, SP_LWER, BK_LWER, DL_RAIS, ET_RAIS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +[_QWERTY] = LAYOUT_ortho_4x12_base_wrapper( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ ), -[_COLEMAK] = LAYOUT_ortho_4x12_wrapper( - KC_ESC, _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSPC, - KC_TAB, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, - KC_MLSF, _________________COLEMAK_L3________________, _________________COLEMAK_R3________________, KC_ENT, - BACKLIT, OS_LCTL, OS_LALT, OS_LGUI, SP_LWER, BK_LWER, DL_RAIS, ET_RAIS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +[_COLEMAK] = LAYOUT_ortho_4x12_base_wrapper( + _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, + _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, + _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ ), -[_DVORAK] = LAYOUT_ortho_4x12_wrapper( - KC_ESC, _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSPC, - KC_TAB, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_SLSH, - KC_MLSF, _________________DVORAK_L3_________________, _________________DVORAK_R3_________________, KC_ENT, - BACKLIT, OS_LCTL, OS_LALT, OS_LGUI, SP_LWER, BK_LWER, DL_RAIS, ET_RAIS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +[_DVORAK] = LAYOUT_ortho_4x12_base_wrapper( + _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, + _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, + _________________DVORAK_L3_________________, _________________DVORAK_R3_________________ ), -[_WORKMAN] = LAYOUT_ortho_4x12_wrapper( - KC_TAB, _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSPC, - KC_ESC, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, - KC_MLSF, _________________WORKMAN_L3________________, _________________WORKMAN_R3________________, KC_ENT, - BACKLIT, OS_LCTL, OS_LALT, OS_LGUI, SP_LWER, BK_LWER, DL_RAIS, ET_RAIS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +[_WORKMAN] = LAYOUT_ortho_4x12_base_wrapper( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ ), [_MODS] = LAYOUT_ortho_4x12_wrapper( diff --git a/users/drashna/config.h b/users/drashna/config.h index 3ddec93b13..4545b34ef6 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -19,10 +19,12 @@ #ifdef RGBLIGHT_ENABLE #define RGBLIGHT_SLEEP +#undef RGBLIGHT_ANIMATIONS +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT #endif // RGBLIGHT_ENABLE - - #ifndef ONESHOT_TAP_TOGGLE #define ONESHOT_TAP_TOGGLE 2 #endif // !ONESHOT_TAP_TOGGLE diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index aad9fab611..5b6620cf33 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -36,11 +36,11 @@ bool send_game_macro(const char *str, keyrecord_t *record, bool override) { keycode = KC_ENTER; } clear_keyboard(); - tap(keycode); + tap_code(keycode); wait_ms(50); send_string_with_delay(str, MACRO_TIMER); wait_ms(50); - tap(KC_ENTER); + tap_code(KC_ENTER); } if (override) wait_ms(3000); return false; @@ -127,13 +127,13 @@ uint32_t default_layer_state_set_keymap (uint32_t state) { __attribute__ ((weak)) void led_set_keymap(uint8_t usb_led) {} - +__attribute__ ((weak)) +void eeconfig_init_keymap(void) {} // Call user matrix init, set default RGB colors and then // call the keymap's init function void matrix_init_user(void) { - userspace_config.raw = eeprom_read_dword(EECONFIG_USERSPACE); - + userspace_config.raw = eeconfig_read_user(); #ifdef BOOTLOADER_CATERINA DDRD &= ~(1<<5); @@ -250,7 +250,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader if (!record->event.pressed) { - send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP + uint8_t temp_mod = get_mods(); + clear_mods(); + send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10); + if (temp_mod & MODS_SHIFT_MASK) { + send_string_with_delay_P(PSTR( #if defined(__ARM__) ":dfu-util" #elif defined(BOOTLOADER_DFU) @@ -260,7 +264,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #elif defined(BOOTLOADER_CATERINA) ":avrdude" #endif // bootloader options - SS_TAP(X_ENTER)), 10); + ), 10); + } + if (temp_mod & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); } + send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10); + set_mods(temp_mod); } return false; break; @@ -268,8 +276,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case EPRM: // Resets EEPROM if (record->event.pressed) { eeconfig_init(); - default_layer_set(1UL<event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); } + if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeconfig_update_user(userspace_config.raw); } #ifdef RGBLIGHT_ENABLE userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18); #endif //RGBLIGHT_ENABLE @@ -344,11 +350,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy register_code(KC_LCTL); - tap(KC_C); + tap_code(KC_C); unregister_code(KC_LCTL); } else { // Tap, paste register_code(KC_LCTL); - tap(KC_V); + tap_code(KC_V); unregister_code(KC_LCTL); } } @@ -413,3 +419,8 @@ uint32_t default_layer_state_set_user(uint32_t state) { void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); } + +void eeconfig_init_user(void) { + userspace_config.raw = 0; + eeconfig_update_user(userspace_config.raw); +} diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index 49e3fc870b..7e69a9f8d9 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -19,14 +19,13 @@ along with this program. If not, see . #include "quantum.h" #include "version.h" #include "eeprom.h" -#include "send_unicode.h" #ifdef RGB_MATRIX_ENABLE #include "rgb_matrix.h" #endif -// Define layer names +/* Define layer names */ enum userspace_layers { _QWERTY = 0, _NUMLOCK = 0, @@ -43,28 +42,27 @@ enum userspace_layers { _ADJUST, }; -//define modifiers +/* +define modifiers here, since MOD_* doesn't seem to work for these + */ #define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) #define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL)) #define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)) #define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)) -// RGB color codes are no longer located here anymore. Instead, you will want to -// head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h - -extern bool rgb_layer_change; +/* +RGB color codes are no longer located here anymore. Instead, you will want to +head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h +*/ #ifdef RGBLIGHT_ENABLE void rgblight_sethsv_default_helper(uint8_t index); #endif // RGBLIGHT_ENABLE -inline void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed); bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); -#define EECONFIG_USERSPACE (uint32_t *)19 - typedef union { uint32_t raw; struct { @@ -149,7 +147,7 @@ enum userspace_custom_keycodes { #define DL_RAIS LT(_RAISE, KC_DEL) #define ET_RAIS LT(_RAISE, KC_ENTER) -// OSM keycodes, to keep things clean and easy to change +/* OSM keycodes, to keep things clean and easy to change */ #define KC_MLSF OSM(MOD_LSFT) #define KC_MRSF OSM(MOD_RSFT) @@ -178,9 +176,11 @@ enum { #endif // TAP_DANCE_ENABLE -// Custom Keycodes for Diablo 3 layer -// But since TD() doesn't work when tap dance is disabled -// We use custom codes here, so we can substitute the right stuff +/* +Custom Keycodes for Diablo 3 layer +But since TD() doesn't work when tap dance is disabled +We use custom codes here, so we can substitute the right stuff +*/ #ifdef TAP_DANCE_ENABLE #define KC_D3_1 TD(TD_D3_1) #define KC_D3_2 TD(TD_D3_2) @@ -193,11 +193,11 @@ enum { #define KC_D3_4 KC_4 #endif // TAP_DANCE_ENABLE - - -// Since our quirky block definitions are basically a list of comma separated -// arguments, we need a wrapper in order for these definitions to be -// expanded before being used as arguments to the LAYOUT_xxx macro. +/* +Since our quirky block definitions are basically a list of comma separated +arguments, we need a wrapper in order for these definitions to be +expanded before being used as arguments to the LAYOUT_xxx macro. +*/ #if (!defined(LAYOUT) && defined(KEYMAP)) #define LAYOUT KEYMAP #endif @@ -208,112 +208,114 @@ enum { #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) #define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) -// Blocks for each of the four major keyboard layouts -// Organized so we can quickly adapt and modify all of them -// at once, rather than for each keyboard, one at a time. -// And this allows for much cleaner blocks in the keymaps. -// For instance Tap/Hold for Control on all of the layouts +/* +Blocks for each of the four major keyboard layouts +Organized so we can quickly adapt and modify all of them +at once, rather than for each keyboard, one at a time. +And this allows for much cleaner blocks in the keymaps. +For instance Tap/Hold for Control on all of the layouts -// NOTE: These are all the same length. If you do a search/replace -// then you need to add/remove underscores to keep the -// lengths consistent. +NOTE: These are all the same length. If you do a search/replace + then you need to add/remove underscores to keep the + lengths consistent. +*/ #define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T #define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G -#define _________________QWERTY_L3_________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B +#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B #define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P #define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN -#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH #define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G #define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D -#define _________________COLEMAK_L3________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B +#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B #define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN #define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O -#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH #define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B #define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G -#define ______________COLEMAK_MOD_DH_L3____________ CTL_T(KC_Z), KC_X, KC_C, KC_D, KC_V +#define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V #define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN #define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O -#define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH #define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y #define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I -#define _________________DVORAK_L3_________________ CTL_T(KC_SCLN),KC_Q, KC_J, KC_K, KC_X +#define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X #define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L #define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S -#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z) +#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z #define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B #define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G -#define _________________WORKMAN_L3________________ CTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V +#define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V #define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN #define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I -#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH #define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K #define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G -#define _________________NORMAN_L3_________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B +#define _________________NORMAN_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B #define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN #define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, KC_U -#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH #define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B #define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F -#define _________________MALTRON_L3________________ CTL_T(KC_SCLN), KC_SLSH, KC_J KC_G, KC_COMM +#define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J KC_G, KC_COMM #define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L #define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R -#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, CTL_T(KC_x) +#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X #define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q #define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U -#define _________________EUCALYN_L3________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_W +#define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_W #define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P #define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N -#define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, CTL_T(KC_SCLN) +#define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SCLN #define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W #define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R -#define _____________CARPLAX_QFMLWY_L3_____________ CTL_T(KC_Z), KC_V, KC_G, KC_C, KC_X +#define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X #define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J #define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN -#define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, CTL_T(KC_SLSH) +#define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH #define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W #define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R -#define _____________CARPLAX_QGMLWB_L3_____________ CTL_T(KC_Z), KC_X, KC_C, KC_F, KC_J +#define _____________CARPLAX_QGMLWB_L3_____________ KC_Z, KC_X, KC_C, KC_F, KC_J #define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN #define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H -#define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, CTL_T(KC_SLSH) +#define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH #define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W #define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R -#define _____________CARPLAX_QGMLWY_L3_____________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_J +#define _____________CARPLAX_QGMLWY_L3_____________ KC_Z, KC_X, KC_C, KC_V, KC_J #define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN #define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H -#define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, CTL_T(KC_SLSH) +#define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH #define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5 @@ -352,21 +354,3 @@ enum { #define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN #define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT - -// Since we have 4 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN), -// this allows us to quickly modify the bottom row for all of the layouts -// so we don't have to alter it 4 times and hope that we haven't missed -// anything -#define ___________ERGODOX_BOTTOM_LEFT_____________ OSM(MOD_MEH), OSM(MOD_LGUI), KC_LBRC, KC_RBRC -#define ___________ERGODOX_BOTTOM_RIGHT____________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT - - -#define ___________ORTHODOX_THUMP_TOP_____________ ALT_APP, OS_LGUI, KC_LALT, OS_RGUI -#define ___________________ORTHODOX_THUMB_BOTTOM____________________ LOWER, KC_SPACE,KC_BSPC, KC_DEL, KC_ENT, RAISE - - -#define __________________ERGODOX_THUMB_CLUSTER_____________________ ALT_T(KC_APP), OSM(MOD_LGUI), OSM(MOD_RGUI), CTL_T(KC_ESCAPE), \ - KC_HOME, KC_PGUP, \ - LT(_LOWER, KC_SPACE),KC_BSPC, KC_END, KC_PGDN, KC_DEL, LT(_RAISE, KC_ENTER) - - diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index 4a1a8de692..dc6075320e 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -230,7 +230,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { userspace_config.rgb_layer_change ^= 1; xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); - eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); + eeconfig_update_user(userspace_config.raw); if (userspace_config.rgb_layer_change) { layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better) } @@ -243,7 +243,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (userspace_config.rgb_layer_change) { userspace_config.rgb_layer_change = false; xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); - eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); + eeconfig_update_user(userspace_config.raw); } } return true; break; @@ -295,31 +295,31 @@ uint32_t layer_state_set_rgb(uint32_t state) { switch (biton32(state)) { case _MACROS: rgblight_sethsv_noeeprom_orange(); - userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18); + userspace_config.is_overwatch ? rgblight_effect_snake(RGBLIGHT_MODE_SNAKE + 2) : rgblight_effect_snake(RGBLIGHT_MODE_SNAKE + 3); break; case _MEDIA: rgblight_sethsv_noeeprom_chartreuse(); - rgblight_mode_noeeprom(22); + rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 1); break; case _GAMEPAD: rgblight_sethsv_noeeprom_orange(); - rgblight_mode_noeeprom(17); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 2); break; case _DIABLO: rgblight_sethsv_noeeprom_red(); - rgblight_mode_noeeprom(5); + rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); break; case _RAISE: rgblight_sethsv_noeeprom_yellow(); - rgblight_mode_noeeprom(5); + rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); break; case _LOWER: rgblight_sethsv_noeeprom_green(); - rgblight_mode_noeeprom(5); + rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); break; case _ADJUST: rgblight_sethsv_noeeprom_red(); - rgblight_mode_noeeprom(23); + rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2); break; default: // for any other layers, or the default layer switch (biton32(default_layer_state)) { @@ -332,7 +332,7 @@ uint32_t layer_state_set_rgb(uint32_t state) { default: rgblight_sethsv_noeeprom_cyan(); break; } - biton32(state) == _MODS ? rgblight_mode_noeeprom(2) : rgblight_mode_noeeprom(1); // if _MODS layer is on, then breath to denote it + biton32(state) == _MODS ? rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING) : rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); // if _MODS layer is on, then breath to denote it break; } // layer_state_set_indicator(); // Runs every scan, so need to call this here .... since I can't get it working "right" anyhow diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index 3d6213eff2..964c96c522 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk @@ -37,6 +37,3 @@ ifdef CONSOLE_ENABLE endif endif -ifeq ($(strip $(UNICODE_ENABLE)), yes) - SRC += send_unicode.c -endif diff --git a/users/drashna/tap_dances.c b/users/drashna/tap_dances.c index c9e4b1d0ff..3466758530 100644 --- a/users/drashna/tap_dances.c +++ b/users/drashna/tap_dances.c @@ -38,16 +38,16 @@ qk_tap_dance_action_t tap_dance_actions[] = { // Sends the key press to system, but only if on the Diablo layer void send_diablo_keystroke(uint8_t diablo_key) { - if (biton32(layer_state) == _DIABLO) { + if (IS_LAYER_ON(_DIABLO)) { switch (diablo_key) { case 0: - tap(KC_1); break; + tap_code(KC_1); break; case 1: - tap(KC_2); break; + tap_code(KC_2); break; case 2: - tap(KC_3); break; + tap_code(KC_3); break; case 3: - tap(KC_4); break; + tap_code(KC_4); break; } } } From 4e2817eff18f868b6d62710b67f46808d6efd22d Mon Sep 17 00:00:00 2001 From: Max Rumpf Date: Mon, 15 Oct 2018 22:23:19 +0200 Subject: [PATCH 181/269] Keymap: Some tweaks to Maxr1998's Contra layout (#4144) * Make some keys more accessible, prevent mistypings * Add "Gaming" layer which maps L-Ctrl to space (left-handed jumping compatibility-mode for all games) --- keyboards/contra/keymaps/maxr1998/keymap.c | 70 +++++++++++++++++----- 1 file changed, 55 insertions(+), 15 deletions(-) diff --git a/keyboards/contra/keymaps/maxr1998/keymap.c b/keyboards/contra/keymaps/maxr1998/keymap.c index afdd3d94ac..87bf338948 100644 --- a/keyboards/contra/keymaps/maxr1998/keymap.c +++ b/keyboards/contra/keymaps/maxr1998/keymap.c @@ -20,13 +20,17 @@ enum contra_layers { _QWERTZ, _FUNC, - _NUMROW + _NUMROW, + _NUMROW_L3, + _GAMING }; #define KC_I3 LM(_NUMROW, MOD_LALT) #define KC_NR MO(_NUMROW) #define NR_L3 SAFE_RANGE #define FUN MO(_FUNC) +#define G_1 TO(_GAMING) +#define G_0 TG(_GAMING) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -52,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | | | | | | | | Ü | | Ö | | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Lock | Ä | ß | | | | | RGBS | RGBB | RGBS | | | + * | Lock | Ä | ß | | | GAME | | RGBS | RGBB | RGBS | | | * |------+------+------+------+------+------|------+------+------+------+------+------| * | | | | | | | | RGBH-| RGBT | RGBH+| PgUp | | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -61,14 +65,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FUNC] = { {_______, _______, _______, _______, _______, _______, _______, DE_UE, _______, DE_OE, _______, KC_DEL }, - {KC_LOCK, DE_AE, DE_SS, _______, _______, _______, _______, RGB_M_P, RGB_M_B, RGB_M_SW,_______, _______}, + {KC_LOCK, DE_AE, DE_SS, _______, _______, G_1, _______, RGB_M_P, RGB_M_B, RGB_M_SW,_______, _______}, {_______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_TOG, RGB_HUI, KC_PGUP, _______}, {_______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_END } }, /* Numrow layer (special characters with Shift and ISO_L3_Shift) * ,-----------------------------------------------------------------------------------. - * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | + * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | * |------+------+------+------+------+-------------+------+------+------+------+------| * | | | | | | | | | | | #' | | * |------+------+------+------+------+------|------+------+------+------+------+------| @@ -78,25 +82,61 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_NUMROW] = { - {_______, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS }, + {_______, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DE_HASH, _______}, {_______, DE_LESS, _______, _______, _______, _______, _______, _______, _______, _______, DE_MINS, _______}, {_______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______} +}, +[_NUMROW_L3] = { + {_______, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, _______}, + {_______, DE_Q, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, DE_LESS, _______, _______, _______, _______, _______, _______, _______, _______, DE_MINS, _______}, + {_______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______} +}, + +/* Gaming + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Space| | | | | | | | Reset| | | | + * `-----------------------------------------------------------------------------------' + */ +[_GAMING] = { + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_SPC, _______, _______, _______, _______, _______, _______, _______, G_0, _______, _______, _______} } }; bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (keycode == NR_L3) { - if (record->event.pressed) { - register_code(DE_ALGR); - layer_on(_NUMROW); - } else { - layer_off(_NUMROW); - unregister_code(DE_ALGR); - } - return false; + switch(keycode) { + case KC_BSPC: + if (record->event.pressed) { + if (get_mods() & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT))) { + register_code(DE_SS); + return false; + } + } else { + unregister_code(DE_SS); + } + return true; + case NR_L3: + if (record->event.pressed) { + register_code(DE_ALGR); + layer_on(_NUMROW_L3); + } else { + layer_off(_NUMROW_L3); + unregister_code(DE_ALGR); + } + return false; + default: + return true; } - return true; } void led_set_user(uint8_t usb_led) { From 423b419138f78118a0fde0144053284ab64ab88e Mon Sep 17 00:00:00 2001 From: jshuf <44121348+jshuf@users.noreply.github.com> Date: Mon, 15 Oct 2018 16:27:09 -0400 Subject: [PATCH 182/269] Keymap: 60_ansi keymap for DZ60 (#4139) * 60_ansi keymap for DZ60 * 60_ansi keymap for DZ60 Amend author * 60_ansi keymap for DZ60 --- keyboards/dz60/keymaps/60_ansi/keymap.c | 18 ++++++++++++++++++ keyboards/dz60/keymaps/60_ansi/readme.md | 9 +++++++++ 2 files changed, 27 insertions(+) create mode 100644 keyboards/dz60/keymaps/60_ansi/keymap.c create mode 100644 keyboards/dz60/keymaps/60_ansi/readme.md diff --git a/keyboards/dz60/keymaps/60_ansi/keymap.c b/keyboards/dz60/keymaps/60_ansi/keymap.c new file mode 100644 index 0000000000..9a9e11ac91 --- /dev/null +++ b/keyboards/dz60/keymaps/60_ansi/keymap.c @@ -0,0 +1,18 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + LAYOUT_60_ansi( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL), + + LAYOUT_60_ansi( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_DEL, KC_END, KC_PGDN, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) +}; diff --git a/keyboards/dz60/keymaps/60_ansi/readme.md b/keyboards/dz60/keymaps/60_ansi/readme.md new file mode 100644 index 0000000000..edbc16c042 --- /dev/null +++ b/keyboards/dz60/keymaps/60_ansi/readme.md @@ -0,0 +1,9 @@ +![60_ansi DZ60 base layer](https://i.imgur.com/MqBLh3D.png) + +![60_ansi DZ60 fn layer](https://i.imgur.com/ml1djHi.png) + +# 60_ansi DZ60 Layout + +This is a basic keymap for the 60_ansi layout of the DZ60. +The default layer is normal ANSI and the Fn layer is used for RGB +and backlighting functions. From 76aa2baf3ea169b976c4cef7013b2020d93a69c3 Mon Sep 17 00:00:00 2001 From: Jim Tittsler Date: Tue, 16 Oct 2018 08:36:20 +0900 Subject: [PATCH 183/269] Fix doc typo --- docs/getting_started_github.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started_github.md b/docs/getting_started_github.md index 7a3531c75d..aeb8738b77 100644 --- a/docs/getting_started_github.md +++ b/docs/getting_started_github.md @@ -8,7 +8,7 @@ Start on the [QMK Github page](https://github.com/qmk/qmk_firmware), and you'll ![Fork on Github](http://i.imgur.com/8Toomz4.jpg) -If you're apart of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button: +If you're a part of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button: ![Download from Github](http://i.imgur.com/N1NYcSz.jpg) From 6cf9402cbc8156dd7c0892822ba949a1a1d8a4ba Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 16 Oct 2018 11:14:52 -0700 Subject: [PATCH 184/269] Fix LAYOUT define generation (#4148) * Fix LAYOUT define generation Prior to this, only the full keyboard path was defined. Eg `KEYBOARD_planck_rev6`. But the docs mention `KEYBOAD_planck`, which never actually gets defined. This addresses this, and creates a define for each level of the keyboard folder, so that stuff like `KEYBOARD_planck` actually exists. * Clean up changes to make it more readable --- build_keyboard.mk | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index a73741bb3e..d225fe8216 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -110,8 +110,28 @@ ifneq ("$(wildcard $(KEYBOARD_C_1))","") KEYBOARD_SRC += $(KEYBOARD_C_1) endif -OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE) +# Generate KEYBOARD_name_subname for all levels of the keyboard folder +KEYBOARD_FILESAFE_1 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_1))) +KEYBOARD_FILESAFE_2 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_2))) +KEYBOARD_FILESAFE_3 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_3))) +KEYBOARD_FILESAFE_4 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_4))) +KEYBOARD_FILESAFE_5 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_5))) +ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_5) +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_4) +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_3) +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_2) +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_1) +endif # Setup the define for QMK_KEYBOARD_H. This is used inside of keymaps so # that the same keymap may be used on multiple keyboards. From 1dc1e12fec6b8ce06792ac2e2224b6466b4de2a3 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 16 Oct 2018 11:35:43 -0700 Subject: [PATCH 185/269] Only include lufa.h if AVR in quantum/api.h --- quantum/api.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quantum/api.h b/quantum/api.h index efc0ddca12..fc016391bc 100644 --- a/quantum/api.h +++ b/quantum/api.h @@ -17,7 +17,9 @@ #ifndef _API_H_ #define _API_H_ +#ifdef __AVR__ #include "lufa.h" +#endif enum MESSAGE_TYPE { MT_GET_DATA = 0x10, // Get data from keyboard @@ -28,7 +30,7 @@ enum MESSAGE_TYPE { MT_SEND_DATA_ACK = 0x31, // returned data/action confirmation (ACK) MT_EXE_ACTION = 0x40, // executing actions on keyboard MT_EXE_ACTION_ACK =0x41, // return confirmation/value (ACK) - MT_TYPE_ERROR = 0x80 // type not recofgnised (ACK) + MT_TYPE_ERROR = 0x80 // type not recognised (ACK) }; enum DATA_TYPE { From 8ce9e3255ee324174c7dbcc553ff089c54fc5265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDan=20Pevec?= Date: Wed, 17 Oct 2018 00:45:05 +0200 Subject: [PATCH 186/269] Fixes on slovenian keymap --- quantum/keymap_extras/keymap_slovenian.h | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h index 8b197e6c5b..364bd90b8c 100644 --- a/quantum/keymap_extras/keymap_slovenian.h +++ b/quantum/keymap_extras/keymap_slovenian.h @@ -73,7 +73,7 @@ // shifted characters #define SI_EXLM LSFT(KC_1) // ! -#define SO_DQOT LSFT(KC_2) // " +#define SI_DQOT LSFT(KC_2) // " #define SI_HASH LSFT(KC_3) // # #define SI_DLR LSFT(KC_4) // $ #define SI_PERC LSFT(KC_5) // % @@ -89,18 +89,18 @@ #define SI_UNDS LSFT(SI_MINS) // _ // Alt Gr-ed characters -#define SI_CIRC ALGR(KC_3) // ^ -#define SI_DEG ALGR(KC_5) // ° -#define SI_GRV ALGR(KC_7) // ` -#define SI_ACCU ALGR(KC_9) // ´ -#define SI_LCBR ALGR(KC_B) // { -#define SI_RCBR ALGR(KC_N) // } -#define SI_LBRC ALGR(KC_F) // [ -#define SI_RBRC ALGR(KC_G) // ] -#define SI_BSLS ALGR(KC_Q) // backslash -#define SI_AT ALGR(KC_V) // @ -#define SI_EURO ALGR(KC_E) // € -#define SI_TILD ALGR(KC_1) // ~ -#define SI_PIPE ALGR(KC_W) // | +#define SI_CIRC ALTG(KC_3) // ^ +#define SI_DEG ALTG(KC_5) // ° +#define SI_GRV ALTG(KC_7) // ` +#define SI_ACCU ALTG(KC_9) // ´ +#define SI_LCBR ALTG(KC_B) // { +#define SI_RCBR ALTG(KC_N) // } +#define SI_LBRC ALTG(KC_F) // [ +#define SI_RBRC ALTG(KC_G) // ] +#define SI_BSLS ALTG(KC_Q) // backslash +#define SI_AT ALTG(KC_V) // @ +#define SI_EURO ALTG(KC_E) // € +#define SI_TILD ALTG(KC_1) // ~ +#define SI_PIPE ALTG(KC_W) // | #endif From 1d03af876c122cf16ed78025eb753e1d838edcac Mon Sep 17 00:00:00 2001 From: QMK Bot Date: Tue, 16 Oct 2018 23:11:58 +0000 Subject: [PATCH 187/269] convert to unix line-endings [skip ci] --- quantum/keymap_extras/keymap_slovenian.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h index 364bd90b8c..53d07837e9 100644 --- a/quantum/keymap_extras/keymap_slovenian.h +++ b/quantum/keymap_extras/keymap_slovenian.h @@ -1,4 +1,4 @@ -/* Copyright 2018 Žan Pevec +/* Copyright 2018 Žan Pevec * * 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 From 1f13254460db4ad4cb3c4868b69fbb35cca9c764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDan=20Pevec?= Date: Wed, 17 Oct 2018 01:56:39 +0200 Subject: [PATCH 188/269] Keymap: Personal keymap for planck (#4061) * added my keymap * Adde more changes * Moved to pevecyan folder * Added slovenian mapping * Slovenian keymap completed * Suggestions updates * Fixes on slovenian keymap Made some typos in previous iteration --- keyboards/planck/keymaps/pevecyan/config.h | 38 ++++ keyboards/planck/keymaps/pevecyan/keymap.c | 226 ++++++++++++++++++++ keyboards/planck/keymaps/pevecyan/readme.md | 2 + keyboards/planck/keymaps/pevecyan/rules.mk | 1 + 4 files changed, 267 insertions(+) create mode 100644 keyboards/planck/keymaps/pevecyan/config.h create mode 100644 keyboards/planck/keymaps/pevecyan/keymap.c create mode 100644 keyboards/planck/keymaps/pevecyan/readme.md create mode 100644 keyboards/planck/keymaps/pevecyan/rules.mk diff --git a/keyboards/planck/keymaps/pevecyan/config.h b/keyboards/planck/keymaps/pevecyan/config.h new file mode 100644 index 0000000000..e8c13caac5 --- /dev/null +++ b/keyboards/planck/keymaps/pevecyan/config.h @@ -0,0 +1,38 @@ +#pragma once + +#ifdef AUDIO_ENABLE + #define STARTUP_SONG SONG(PLANCK_SOUND) + // #define STARTUP_SONG SONG(NO_SOUND) + + #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ + SONG(COLEMAK_SOUND), \ + SONG(DVORAK_SOUND) \ + } +#endif + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +// Most tactile encoders have detents every 4 stages +#define ENCODER_RESOLUTION 4 diff --git a/keyboards/planck/keymaps/pevecyan/keymap.c b/keyboards/planck/keymaps/pevecyan/keymap.c new file mode 100644 index 0000000000..7bc43a373c --- /dev/null +++ b/keyboards/planck/keymaps/pevecyan/keymap.c @@ -0,0 +1,226 @@ +/* Copyright 2015-2017 Jack Humbert + * + * 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 + +#include "action_layer.h" +#include "muse.h" +#include "keymap_slovenian.h" + +extern keymap_config_t keymap_config; + +enum planck_layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, + _ALTGR, + _CAPS +}; + +enum planck_keycodes { + QWERTY = SAFE_RANGE, +}; + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) +#define CAPS MO(_CAPS) +#define ALTGR MO(_ALTGR) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Z | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | CAPS | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Y | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_planck_grid( + KC_TAB, SI_Q, SI_W, SI_E, SI_R, SI_T, SI_Z, SI_U, SI_I, SI_O, SI_P, KC_BSPC, + CAPS, SI_A, SI_S, SI_D, SI_F, SI_G, SI_H, SI_J, SI_K, SI_L, KC_SCLN, KC_ENT, + KC_LSFT, SI_Y, SI_X, SI_C, SI_V, SI_B, SI_N, SI_M, SI_COMM, SI_DOT, SI_MINS, KC_RSFT , + KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, ALTGR, KC_DOWN, KC_UP, KC_F5 +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_planck_grid( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_MINS, KC_PPLS , KC_ENT, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_planck_grid( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_planck_grid( + _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , + _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, + _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +[_ALTGR] = LAYOUT_planck_grid( + _______, ALTG(KC_Q), ALTG(KC_W), ALTG(KC_E), _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, ALTG(KC_F), ALTG(KC_G), _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, ALTG(KC_V), ALTG(KC_B), ALTG(KC_N), _______, ALTG(KC_COMM), ALTG(KC_DOT), _______, _______ , + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +[_CAPS] = LAYOUT_planck_grid( + KC_ESC , KC_BSPC, KC_UP , KC_DEL , _______, _______, _______, _______, _______, _______, _______, KC_DEL , + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + + +}; + +#ifdef AUDIO_ENABLE + float plover_song[][2] = SONG(PLOVER_SOUND); + float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); +#endif + +uint32_t layer_state_set_user(uint32_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} + +bool muse_mode = false; +uint8_t last_muse_note = 0; +uint16_t muse_counter = 0; +uint8_t muse_offset = 70; +uint16_t muse_tempo = 50; + +void encoder_update(bool clockwise) { + if (muse_mode) { + if (IS_LAYER_ON(_RAISE)) { + if (clockwise) { + muse_offset++; + } else { + muse_offset--; + } + } else { + if (clockwise) { + muse_tempo+=1; + } else { + muse_tempo-=1; + } + } + } else { + if (clockwise) { + register_code(KC_PGDN); + unregister_code(KC_PGDN); + } else { + register_code(KC_PGUP); + unregister_code(KC_PGUP); + } + } +} + +void dip_update(uint8_t index, bool active) { + switch (index) { + case 0: + if (active) { + #ifdef AUDIO_ENABLE + PLAY_SONG(plover_song); + #endif + layer_on(_ADJUST); + } else { + #ifdef AUDIO_ENABLE + PLAY_SONG(plover_gb_song); + #endif + layer_off(_ADJUST); + } + break; + case 1: + if (active) { + muse_mode = true; + } else { + muse_mode = false; + #ifdef AUDIO_ENABLE + stop_all_notes(); + #endif + } + } +} + +void matrix_scan_user(void) { + #ifdef AUDIO_ENABLE + if (muse_mode) { + if (muse_counter == 0) { + uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()]; + if (muse_note != last_muse_note) { + stop_note(compute_freq_for_midi_note(last_muse_note)); + play_note(compute_freq_for_midi_note(muse_note), 0xF); + last_muse_note = muse_note; + } + } + muse_counter = (muse_counter + 1) % muse_tempo; + } + #endif +} + +bool music_mask_user(uint16_t keycode) { + switch (keycode) { + case RAISE: + case LOWER: + return false; + default: + return true; + } +} diff --git a/keyboards/planck/keymaps/pevecyan/readme.md b/keyboards/planck/keymaps/pevecyan/readme.md new file mode 100644 index 0000000000..de9680b498 --- /dev/null +++ b/keyboards/planck/keymaps/pevecyan/readme.md @@ -0,0 +1,2 @@ +# The Default Planck Layout + diff --git a/keyboards/planck/keymaps/pevecyan/rules.mk b/keyboards/planck/keymaps/pevecyan/rules.mk new file mode 100644 index 0000000000..dcf16bef39 --- /dev/null +++ b/keyboards/planck/keymaps/pevecyan/rules.mk @@ -0,0 +1 @@ +SRC += muse.c From 9de4ace6f274c5bebfcfd8d31fa793f8d9060cb5 Mon Sep 17 00:00:00 2001 From: jshuf <44121348+jshuf@users.noreply.github.com> Date: Tue, 16 Oct 2018 20:13:53 -0400 Subject: [PATCH 189/269] Keyboard: Add tkl_ansi_plus_five layout for Phantom (#4145) * 60_ansi keymap for DZ60 * 60_ansi keymap for DZ60 Amend author * 60_ansi keymap for DZ60 * Merge new phantom layout from dev branch --- keyboards/phantom/info.json | 474 ++++++++++++++++++++++++++++++++++++ keyboards/phantom/phantom.h | 18 ++ 2 files changed, 492 insertions(+) diff --git a/keyboards/phantom/info.json b/keyboards/phantom/info.json index cf7b161803..6a1e4f72f5 100644 --- a/keyboards/phantom/info.json +++ b/keyboards/phantom/info.json @@ -459,6 +459,480 @@ } ] }, + "LAYOUT_tkl_ansi_plus_five": { + "key_count": 92, + "layout": [ + { + "label": "Esc", + "x": 0, + "y": 0 + }, + { + "label": "F1", + "x": 2, + "y": 0 + }, + { + "label": "F2", + "x": 3, + "y": 0 + }, + { + "label": "F3", + "x": 4, + "y": 0 + }, + { + "label": "F4", + "x": 5, + "y": 0 + }, + { + "label": "F5", + "x": 6.5, + "y": 0 + }, + { + "label": "F6", + "x": 7.5, + "y": 0 + }, + { + "label": "F7", + "x": 8.5, + "y": 0 + }, + { + "label": "F8", + "x": 9.5, + "y": 0 + }, + { + "label": "F9", + "x": 11, + "y": 0 + }, + { + "label": "F10", + "x": 12, + "y": 0 + }, + { + "label": "F11", + "x": 13, + "y": 0 + }, + { + "label": "F12", + "x": 14, + "y": 0 + }, + { + "label": "PrtSc", + "x": 15.25, + "y": 0 + }, + { + "label": "Scroll Lock", + "x": 16.25, + "y": 0 + }, + { + "label": "Pause", + "x": 17.25, + "y": 0 + }, + { + "label": "~", + "x": 0, + "y": 1.5 + }, + { + "label": "!", + "x": 1, + "y": 1.5 + }, + { + "label": "@", + "x": 2, + "y": 1.5 + }, + { + "label": "#", + "x": 3, + "y": 1.5 + }, + { + "label": "$", + "x": 4, + "y": 1.5 + }, + { + "label": "%", + "x": 5, + "y": 1.5 + }, + { + "label": "^", + "x": 6, + "y": 1.5 + }, + { + "label": "&", + "x": 7, + "y": 1.5 + }, + { + "label": "*", + "x": 8, + "y": 1.5 + }, + { + "label": "(", + "x": 9, + "y": 1.5 + }, + { + "label": ")", + "x": 10, + "y": 1.5 + }, + { + "label": "_", + "x": 11, + "y": 1.5 + }, + { + "label": "+", + "x": 12, + "y": 1.5 + }, + { + "label": "Backspace", + "x": 13, + "y": 1.5, + "w": 2 + }, + { + "label": "Insert", + "x": 15.25, + "y": 1.5 + }, + { + "label": "Home", + "x": 16.25, + "y": 1.5 + }, + { + "label": "PgUp", + "x": 17.25, + "y": 1.5 + }, + { + "label": "Tab", + "x": 0, + "y": 2.5, + "w": 1.5 + }, + { + "label": "Q", + "x": 1.5, + "y": 2.5 + }, + { + "label": "W", + "x": 2.5, + "y": 2.5 + }, + { + "label": "E", + "x": 3.5, + "y": 2.5 + }, + { + "label": "R", + "x": 4.5, + "y": 2.5 + }, + { + "label": "T", + "x": 5.5, + "y": 2.5 + }, + { + "label": "Y", + "x": 6.5, + "y": 2.5 + }, + { + "label": "U", + "x": 7.5, + "y": 2.5 + }, + { + "label": "I", + "x": 8.5, + "y": 2.5 + }, + { + "label": "O", + "x": 9.5, + "y": 2.5 + }, + { + "label": "P", + "x": 10.5, + "y": 2.5 + }, + { + "label": "{", + "x": 11.5, + "y": 2.5 + }, + { + "label": "}", + "x": 12.5, + "y": 2.5 + }, + { + "label": "|", + "x": 13.5, + "y": 2.5, + "w": 1.5 + }, + { + "label": "Delete", + "x": 15.25, + "y": 2.5 + }, + { + "label": "End", + "x": 16.25, + "y": 2.5 + }, + { + "label": "PgDn", + "x": 17.25, + "y": 2.5 + }, + { + "label": "Caps Lock", + "x": 0, + "y": 3.5, + "w": 1.75 + }, + { + "label": "A", + "x": 1.75, + "y": 3.5 + }, + { + "label": "S", + "x": 2.75, + "y": 3.5 + }, + { + "label": "D", + "x": 3.75, + "y": 3.5 + }, + { + "label": "F", + "x": 4.75, + "y": 3.5 + }, + { + "label": "G", + "x": 5.75, + "y": 3.5 + }, + { + "label": "H", + "x": 6.75, + "y": 3.5 + }, + { + "label": "J", + "x": 7.75, + "y": 3.5 + }, + { + "label": "K", + "x": 8.75, + "y": 3.5 + }, + { + "label": "L", + "x": 9.75, + "y": 3.5 + }, + { + "label": ":", + "x": 10.75, + "y": 3.5 + }, + { + "label": "\"", + "x": 11.75, + "y": 3.5 + }, + { + "label": "Enter", + "x": 12.75, + "y": 3.5, + "w": 2.25 + }, + { + "x": 15.25, + "y": 3.5 + }, + { + "x": 16.25, + "y": 3.5 + }, + { + "x": 17.25, + "y": 3.5 + }, + { + "label": "Shift", + "x": 0, + "y": 4.5, + "w": 2.25 + }, + { + "label": "Z", + "x": 2.25, + "y": 4.5 + }, + { + "label": "X", + "x": 3.25, + "y": 4.5 + }, + { + "label": "C", + "x": 4.25, + "y": 4.5 + }, + { + "label": "V", + "x": 5.25, + "y": 4.5 + }, + { + "label": "B", + "x": 6.25, + "y": 4.5 + }, + { + "label": "N", + "x": 7.25, + "y": 4.5 + }, + { + "label": "M", + "x": 8.25, + "y": 4.5 + }, + { + "label": "<", + "x": 9.25, + "y": 4.5 + }, + { + "label": ">", + "x": 10.25, + "y": 4.5 + }, + { + "label": "?", + "x": 11.25, + "y": 4.5 + }, + { + "label": "Shift", + "x": 12.25, + "y": 4.5, + "w": 2.75 + }, + { + "x": 15.25, + "y": 4.5 + }, + { + "label": "\\u2191", + "x": 16.25, + "y": 4.5 + }, + { + "x": 17.25, + "y": 4.5 + }, + { + "label": "Ctrl", + "x": 0, + "y": 5.5, + "w": 1.25 + }, + { + "label": "Win", + "x": 1.25, + "y": 5.5, + "w": 1.25 + }, + { + "label": "Alt", + "x": 2.5, + "y": 5.5, + "w": 1.25 + }, + { + "x": 3.75, + "y": 5.5, + "w": 6.25 + }, + { + "label": "Alt", + "x": 10, + "y": 5.5, + "w": 1.25 + }, + { + "label": "Win", + "x": 11.25, + "y": 5.5, + "w": 1.25 + }, + { + "label": "FN", + "x": 12.5, + "y": 5.5, + "w": 1.25 + }, + { + "label": "Ctrl", + "x": 13.75, + "y": 5.5, + "w": 1.25 + }, + { + "label": "\\u2190", + "x": 15.25, + "y": 5.5 + }, + { + "label": "\\u2193", + "x": 16.25, + "y": 5.5 + }, + { + "label": "\\u2192", + "x": 17.25, + "y": 5.5 + } + ] + }, "LAYOUT_tkl_ansi_wkl": { "key_count": 86, "layout": [ diff --git a/keyboards/phantom/phantom.h b/keyboards/phantom/phantom.h index bed840f191..fa77634d3c 100644 --- a/keyboards/phantom/phantom.h +++ b/keyboards/phantom/phantom.h @@ -54,6 +54,24 @@ K50, K51, K52, KC_NO, KC_NO, K57, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ ) +// Keymap for a standard ANSI layout plus the five extra keys +// above the arrow block. +#define LAYOUT_tkl_ansi_plus_five( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, K3G, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, K4F, K4G, \ + K50, K51, K52, K57, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) LAYOUT_7bit( \ + K00, KC_NO, K02, K03, K04, K05, KC_NO, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F, K3G, \ + K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, K4E, K4F, K4G, \ + K50, K51, K52, KC_NO, KC_NO, K57, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) + #define LAYOUT_tkl_ansi_wkl( \ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \ From 397d404ce0b2a0730e493897f72a86f7a40f4207 Mon Sep 17 00:00:00 2001 From: Bramver Date: Wed, 17 Oct 2018 22:42:26 +0200 Subject: [PATCH 190/269] Keymap: Added personal Quefrency layout (#4156) --- keyboards/quefrency/keymaps/bramver/README.md | 61 ++++++++ keyboards/quefrency/keymaps/bramver/config.h | 31 ++++ keyboards/quefrency/keymaps/bramver/keymap.c | 134 ++++++++++++++++++ keyboards/quefrency/keymaps/bramver/rules.mk | 6 + 4 files changed, 232 insertions(+) create mode 100644 keyboards/quefrency/keymaps/bramver/README.md create mode 100644 keyboards/quefrency/keymaps/bramver/config.h create mode 100644 keyboards/quefrency/keymaps/bramver/keymap.c create mode 100644 keyboards/quefrency/keymaps/bramver/rules.mk diff --git a/keyboards/quefrency/keymaps/bramver/README.md b/keyboards/quefrency/keymaps/bramver/README.md new file mode 100644 index 0000000000..76310ed73a --- /dev/null +++ b/keyboards/quefrency/keymaps/bramver/README.md @@ -0,0 +1,61 @@ +# Quefrency Layout - initial 60% + +Standard qwerty layout. +Limited emoji support and proper mouse settings. + +Mostly based off of my other XD75 and Nyquist layouts. + +## Keymap + +``` +/* BASE + * + * KC_GESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , /**/ KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS , KC_EQL , KC_DEL , KC_BSPC , \ + * KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , /**/ KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC , KC_RBRC , KC_BSLS , \ + * MO_EMOJ , KC_A , KC_S , KC_D , KC_F , KC_G , /**/ KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , KC_ENT , \ + * KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , /**/ KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , KC_UP , \ + * KC_LCTL , KC_LALT , KC_LGUI , MO_SYMB , SP_LMS , /**/ SP_RMS , KC_BSPC , KC_RGUI , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT + * + */ + +/* LMSE + * + * _______ , _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + * _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + * _______ , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ ,\ + * _______ , _______ , KC_PGDN , KC_PGUP , KC_END , KC_HOME , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + * _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ + * + */ + +/* RMSE + * + * _______ , _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + * _______ , _______ , _______ , _______ , _______ , _______ , /**/ KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ , _______ , _______ , \ + * _______ , _______ , _______ , _______ , _______ , _______ , /**/ KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , _______ , _______ ,\ + * _______ , _______ , _______ , _______ , _______ , _______ , /**/ KC_HOME , KC_END , KC_PGUP , KC_PGDN , _______ , _______ , _______ , \ + * _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ + * + */ + +/* SYMB + * + * KC_GESC , KC_F1 , KC_F12 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , /**/ KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_DEL , KC_BSPC , \ + * _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + * _______ , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , /**/ KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , _______ , _______ ,\ + * _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + * _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ + * + */ + +/* EMOJ + * + * _______ , _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + * _______ , X(CLAP) , X(CUM) , X(BNIS) , X(BUTT) , X(CAR) , /**/ X(FIRE) , X(REDB) , X(MONY) , X(HNDR) , X(SOS) , _______ , _______ , _______ , \ + * _______ , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , /**/ X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , _______ , _______ ,\ + * _______ , X(TRIU) , X(SCRM) , X(VOMI) , X(DTIV) , X(EXPL) , /**/ X(HAIR) , X(DANC) , X(STRN) , X(LEFT) , X(RGHT) , _______ , _______ , \ + * _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ + * + */ + +``` \ No newline at end of file diff --git a/keyboards/quefrency/keymaps/bramver/config.h b/keyboards/quefrency/keymaps/bramver/config.h new file mode 100644 index 0000000000..c908386e28 --- /dev/null +++ b/keyboards/quefrency/keymaps/bramver/config.h @@ -0,0 +1,31 @@ +/* Copyright 2018 darm + * + * 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 + +#define USE_SERIAL +#define MASTER_LEFT + +#define TAPPING_TERM 200 +#define TAPPING_TOGGLE 2 + +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_INTERVAL 16 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_WHEEL_MAX_SPEED 8 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 +#define MOUSEKEY_WHEEL_DELAY 0 diff --git a/keyboards/quefrency/keymaps/bramver/keymap.c b/keyboards/quefrency/keymaps/bramver/keymap.c new file mode 100644 index 0000000000..527f5de047 --- /dev/null +++ b/keyboards/quefrency/keymaps/bramver/keymap.c @@ -0,0 +1,134 @@ +#include QMK_KEYBOARD_H + +enum custom_keycodes { + QWERTY = SAFE_RANGE, +}; + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#define _BASE 0 +#define _LMSE 1 +#define _RMSE 2 +#define _SYMB 3 +#define _EMOJ 4 + +#define SP_LMS LT(_LMSE, KC_SPC) +#define SP_RMS LT(_RMSE, KC_SPC) +#define MO_SYMB TT(_SYMB) +#define MO_EMOJ TT(_EMOJ) + + +enum emoji_map { + UNAM, // unamused 😒 + HEYE, // smiling face with heart shaped eyes 😍 + OK, // ok hand sign 👌 + SMIR, // smirk 😏 + PRAY, // pray 🙏 + CELE, // celebration 🙌 + COOL, // smile with sunglasses 😎 + EYES, // eyes + THNK, // BIG THONK + NAIL, // Nailcare + SOS, // Vuile sos + REDB, // Red B + HNDR, // 100 + MONY, + FIRE, + CAR, + BUTT, + BNIS, + CUM, + CLAP, + TRIU, // Fart from nose + SCRM, + VOMI, + DTIV, // Detective + EXPL, // Brainsplosion + HAIR, // Haircut + DANC, // Salsa dancer + STRN, // Stronk + LEFT, // Point Left + RGHT, // Point Right +}; + +const uint32_t PROGMEM unicode_map[] = { + [UNAM] = 0x1F612, + [HEYE] = 0x1f60d, + [OK] = 0x1F44C, + [SMIR] = 0x1F60F, + [PRAY] = 0x1F64F, + [CELE] = 0x1F64C, + [COOL] = 0x1F60E, + [EYES] = 0x1F440, + [THNK] = 0x1F914, + [NAIL] = 0x1F485, + [SOS] = 0x1F198, + [REDB] = 0x1F171, + [HNDR] = 0x1F4AF, + [MONY] = 0x1F480, + [FIRE] = 0x1F525, + [CAR] = 0x1F697, + [BUTT] = 0x1F351, + [BNIS] = 0x1F346, + [CUM] = 0x1F4A6, + [CLAP] = 0x1F44F, + [TRIU] = 0x1F624, + [SCRM] = 0x1F631, + [VOMI] = 0x1F92E, + [DTIV] = 0x1F575, + [EXPL] = 0x1F92F, + [HAIR] = 0x2640, + [DANC] = 0x1F483, + [STRN] = 0x1F4AA, + [LEFT] = 0x1F448, + [RGHT] = 0x1F449, +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + KC_GESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS , KC_EQL , KC_DEL , KC_BSPC , \ + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC , KC_RBRC , KC_BSLS , \ + MO_EMOJ , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , KC_ENT , \ + KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , KC_UP , \ + KC_LCTL , KC_LALT , KC_LGUI , MO_SYMB , SP_LMS , SP_RMS , KC_BSPC , KC_RGUI , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT + ), + + [_LMSE] = LAYOUT( + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + _______ , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,\ + _______ , _______ , KC_PGDN , KC_PGUP , KC_END , KC_HOME , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + ), + + [_RMSE] = LAYOUT( + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + _______ , _______ , _______ , _______ , _______ , _______ , KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ , _______ , _______ , \ + _______ , _______ , _______ , _______ , _______ , _______ , KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , _______ , _______ ,\ + _______ , _______ , _______ , _______ , _______ , _______ , KC_HOME , KC_END , KC_PGUP , KC_PGDN , _______ , _______ , _______ , \ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + ), + + [_SYMB] = LAYOUT( + KC_GESC , KC_F1 , KC_F12 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_DEL , KC_BSPC , \ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + _______ , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , _______ , _______ ,\ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + ), + + [_EMOJ] = LAYOUT( + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \ + _______ , X(CLAP) , X(CUM) , X(BNIS) , X(BUTT) , X(CAR) , X(FIRE) , X(REDB) , X(MONY) , X(HNDR) , X(SOS) , _______ , _______ , _______ , \ + _______ , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , _______ , _______ ,\ + _______ , X(TRIU) , X(SCRM) , X(VOMI) , X(DTIV) , X(EXPL) , X(HAIR) , X(DANC) , X(STRN) , X(LEFT) , X(RGHT) , _______ , _______ , \ + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + ), + +}; + +void matrix_init_user(void) { + set_unicode_input_mode(UC_LNX); +}; diff --git a/keyboards/quefrency/keymaps/bramver/rules.mk b/keyboards/quefrency/keymaps/bramver/rules.mk new file mode 100644 index 0000000000..d211d7b4cf --- /dev/null +++ b/keyboards/quefrency/keymaps/bramver/rules.mk @@ -0,0 +1,6 @@ +# Build options +MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses +EXTRAKEY_ENABLE = yes # Use system and audio control key codes +TAP_DANCE_ENABLE = no # Use multi-tap features +UNICODEMAP_ENABLE = yes # Emojify me pls +NKRO_ENABLE = yes From d08f9cb6e4d5f14409d49ea5df93cb91777357da Mon Sep 17 00:00:00 2001 From: Christoffer Holmberg Date: Wed, 17 Oct 2018 21:54:37 +0300 Subject: [PATCH 191/269] Fix grammar, typos, and the link to HID specification --- docs/how_keyboards_work.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/how_keyboards_work.md b/docs/how_keyboards_work.md index fac2b5a489..cc54e566a1 100644 --- a/docs/how_keyboards_work.md +++ b/docs/how_keyboards_work.md @@ -27,17 +27,17 @@ This usually happens with a periodic scan of key presses. This speed often is li ## 2. What the Firmware Sends -The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) tells what a keyboard can actually send through USB to have a chance to be properly recognised. This includes a pre-defined list of scancodes which are simple numbers from `0x00` to `0xE7`. The firmware assigns a scancode to each key of the keyboard. +The [HID specification](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf) tells what a keyboard can actually send through USB to have a chance to be properly recognised. This includes a pre-defined list of scancodes which are simple numbers from `0x00` to `0xE7`. The firmware assigns a scancode to each key of the keyboard. -The firmware does not send actually letters or characters, but only scancodes. -Thus, by modifying the firmware, you only can modify what scancode is sent over +The firmware does not send actual letters or characters, but only scancodes. +Thus, by modifying the firmware, you can only modify what scancode is sent over USB for a given key. ## 3. What the Operating System Does Once the keycode reaches the operating system, a piece of software has to have it match an actual character thanks to a keyboard layout. For example, if your -layout is set to QWERTY, a sample of the matching table is as follow: +layout is set to QWERTY, a sample of the matching table is as follows: | keycode | character | |---------|-----------| @@ -55,11 +55,11 @@ As the layout is generally fixed (unless you create your own), the firmware can ## List of Characters You Can Send -Putting aside shortcuts, having a limited set of keycodes mapped to a limited layout means that **the list of characters you can assign to a given key only is the ones present in the layout**. +Putting aside shortcuts, having a limited set of keycodes mapped to a limited layout means that **the list of characters you can assign to a given key are only the ones present in the layout**. -For example, this means that if you have a QWERTY US layout, and you want to assign 1 key to produce `€` (euro currency symbol), you are unable to do so, because the QWERTY US layout does not have such mapping. You could fix that by using a QWERTY UK layout, or a QWERTY US International. +For example, this means that if you have a QWERTY US layout, and you want to assign one key to produce `€` (euro currency symbol), you are unable to do so, because the QWERTY US layout does not have such mapping. You could fix that by using a QWERTY UK layout, or a QWERTY US International. -You may wonder why a keyboard layout containing all of Unicode is not devised then? The limited number of keycode available through USB simply disallow such a thing. +You may wonder why a keyboard layout containing all of Unicode is not devised then? The limited number of keycodes available through USB simply disallows such a thing. ## How to (Maybe) Enter Unicode Characters From dad79cafcd9b3401b68fb29aaa311e999c4c4e6e Mon Sep 17 00:00:00 2001 From: Christoffer Holmberg Date: Wed, 17 Oct 2018 23:27:16 +0300 Subject: [PATCH 192/269] Fix more broken links to the HID spec --- docs/keycodes_basic.md | 2 +- docs/reference_glossary.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/keycodes_basic.md b/docs/keycodes_basic.md index 8445b05ef3..82e94aa5e9 100644 --- a/docs/keycodes_basic.md +++ b/docs/keycodes_basic.md @@ -1,6 +1,6 @@ # Basic Keycodes -The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07)](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) with the exception of `KC_NO`, `KC_TRNS` and keycodes in the `0xA5-DF` range. See below for more details. +The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07)](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf) with the exception of `KC_NO`, `KC_TRNS` and keycodes in the `0xA5-DF` range. See below for more details. ## Letters and Numbers diff --git a/docs/reference_glossary.md b/docs/reference_glossary.md index 29d07f26d3..422abb2ece 100644 --- a/docs/reference_glossary.md +++ b/docs/reference_glossary.md @@ -128,7 +128,7 @@ The standard Deutsche (German) keyboard layout. Named for the first 6 letters on The term for pressing a key while a key is already held down. Variants include 2KRO, 6KRO, and NKRO. ## Scancode -A 1 byte number that is sent as part of a HID report over USB that represents a single key. These numbers are documented in the [HID Usage Tables](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) published by the [USB-IF](http://www.usb.org/). +A 1 byte number that is sent as part of a HID report over USB that represents a single key. These numbers are documented in the [HID Usage Tables](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf) published by the [USB-IF](http://www.usb.org/). ## Space Cadet Shift A special set of shift keys which allow you to type various types of braces by tapping the left or right shift one or more times. From 4a7baaaf50bc9cce3886ff7e1b6455e028d92ab9 Mon Sep 17 00:00:00 2001 From: TheOneTrueTrench <38593283+TheOneTrueTrench@users.noreply.github.com> Date: Thu, 18 Oct 2018 00:38:24 -0400 Subject: [PATCH 193/269] Keymap: Adding new functionality to personal keymap, smart macros (#4159) * Added base keymap * Added initial layers and mirrored most of Pok3r behavior. * Some stuff for Space Captain * Added new Marianas keymap for DZ60 * Included suggestions to remove unnecessary line regarding MODS_CTRL_MASK, and added names for layers. Added enum to define names for layers, and removed unused #DEFINE * Added DVORAK and COLEMAK * Caps + enter + space for flashing mode. * Added RGB status * added flash script * Changed lighting modes to make layers more apparent * fixed issue with not being able to exit gaming mode. * Added abbreviation constructor * Changed lighting modes to make layers more apparent * fixed issue with not being able to exit gaming mode. * Added abbreviation constructor * Fixed bug with SQL Table Macro generator. * restructured file. No Logical changes. * literals only for smart macros * removed extraneous pointer declaration. * Smart Macros * Added Makefile and header file * extended smart macros to be able to cover the whole alphas. * removed non-relavent keymaps. * didn't mean to include this guy. --- keyboards/dz60/keymaps/marianas/keymap.c | 592 ++++++++++++++++++++--- keyboards/dz60/keymaps/marianas/keymap.h | 103 ++++ keyboards/dz60/keymaps/marianas/rules.mk | 17 + 3 files changed, 657 insertions(+), 55 deletions(-) create mode 100644 keyboards/dz60/keymaps/marianas/keymap.h create mode 100644 keyboards/dz60/keymaps/marianas/rules.mk diff --git a/keyboards/dz60/keymaps/marianas/keymap.c b/keyboards/dz60/keymaps/marianas/keymap.c index dfc83fb508..e40bc6897b 100644 --- a/keyboards/dz60/keymaps/marianas/keymap.c +++ b/keyboards/dz60/keymaps/marianas/keymap.c @@ -1,71 +1,553 @@ #include QMK_KEYBOARD_H +#include "keymap.h" enum marianas_layers { - BASE, + QWERTY, +/* + COLEMAK, + DVORAK, +*/ NAV_CLUSTER, - RGB, - MOUSE, GAMING, - FN_LAYER, - LAYER_SEL + SQLMACROS, + SQLNAMES, + FN_LAYER +}; + +enum sql_macros { + S_LFTJN = SAFE_RANGE, // L + S_INRJN, // I + S_SLCT, // S + S_FROM, // F + S_DSNCT, // D + S_ORDER, // O + S_WHERE, // W + S_ALTER, // Esc + S_ASTRK, // * + + TD_A, + TD_B, + TD_C, // Corp, Corporation, Company + TD_D, // Distribution, Dist, Distributor + TD_E, + TD_F, + TD_G, // GlobalLookup + TD_H, + TD_I, // Instance, Item + TD_J, + TD_K, + TD_L, + TD_M, + TD_N, // NadRate + TD_O, + TD_P, // Product, Person, + TD_Q, // Darden + TD_R, + TD_S, // Supplier, Step + TD_T, // Task, Type + TD_U, + TD_V, + TD_W, // Workflow, + TD_X, + TD_Y, + TD_Z, + TD_BSPC, + TD_ENT, + TD_ESC +}; + +uint16_t *macroTaps = 0; + +char *tableNameList = 0; + +uint8_t *charCount = 0; +uint8_t countPointer = 0; + +bool shifted = false; + +bool sendAbbr = false; + + +void initStringData(void) +{ + if (macroTaps == 0) + { + macroTaps = malloc(macroTapsLen*sizeof(uint16_t)); + for(int i = 0; i < macroTapsLen; i++) + { + macroTaps[i] = 0; + } + } + if (tableNameList == 0) + { + tableNameList = malloc(tableNameListLen*sizeof(char)); + for(int i = 0; i < tableNameListLen; i++) + { + tableNameList[i] = 0; + } + } + if (charCount == 0) + { + charCount = malloc(charCountLen*sizeof(uint8_t)); + for (int i = 0; i < charCountLen; i++) + { + charCount[i] = 0; + } + } +} + + +uint32_t layer_state_set_user(uint32_t state) +{ + switch (biton32(state)) + { + case QWERTY: + rgblight_mode(9); + break; + case NAV_CLUSTER: + rgblight_mode(29); + break; + case GAMING: + rgblight_mode(26); + break; + case SQLMACROS: + rgblight_mode(1); + rgblight_setrgb(0x00, 0xFF, 0x80); + break; + case SQLNAMES: + rgblight_mode(1); + rgblight_setrgb(0x80, 0xFF, 0x00); + break; + case FN_LAYER: + rgblight_mode(1); + rgblight_setrgb(0x00, 0x80, 0xFF); + break; + } + return state; +} + +bool containsCode(uint16_t kc) +{ + for (int i = 0; i < macroTapsLen && macroTaps[i] > 0; i++) + { + if (macroTaps[i] == kc) return true; + } + return false; +} + +bool lastCodeIs(uint16_t kc) +{ + for (int i = 0; i < macroTapsLen-1 && macroTaps[i] > 0; i++) + { + if (macroTaps[i] == kc && macroTaps[i+1] == 0) return true; + } + return false; +} + +bool last2CodeAre(uint16_t kc) +{ + for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) + { + if (macroTaps[i] == kc && macroTaps[i+1] == kc && macroTaps[i+2] == 0) return true; + } + return false; +} + +bool last2CodesAre(uint16_t kc, uint16_t kc2) +{ + for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) + { + if (macroTaps[i] == kc && macroTaps[i+1] == kc2 && macroTaps[i+2] == 0) return true; + } + return false; +} + +void addKeyCode(uint16_t kc) +{ + int i = 0; + while (i < macroTapsLen-2 && macroTaps[i] > 0) i++; + if (macroTaps[i] == 0) + { + macroTaps[i] = kc; + macroTaps[i+1] = 0; + } +} + +void eraseKeyCodes(void) +{ + int i = 0; + while (i < macroTapsLen && macroTaps[i] > 0) macroTaps[i++] = 0; +} + +void eraseCharCounts(void) +{ + int i = 0; + while (i < charCountLen) + { + charCount[i] = 0; + } +} + +void printTableAbbreviation(void) +{ + initStringData(); + if (tableNameList[0] == 0) + { + return; + } + send_char(0x20); + int i = 0; + for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) + { + if (tableNameList[i] >= 65 && tableNameList[i] <= 90) + { + send_char(tableNameList[i]+32); + } + else + { + send_char(tableNameList[i]); + } + } + send_char(0x20); +} + +void eraseTableAbbreviation(void) +{ + initStringData(); + for (int i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) + { + tableNameList[i] = '\0'; + } +} + +void printString(char* str) +{ + + if (str[0] != '\0') + { + int i = 0; + while (true) + { + if (str[i] == 0) + { + break; + } + send_char(str[i++]); + charCount[countPointer]++; + } + } +} + +void printStringAndQueueChar(char* str) +{ + initStringData(); + if (charCount[countPointer] != 0) + { + countPointer++; + } + sendAbbr = true; + if (str[0] != '\0') + { + printString(str); + + for (int i = 0; i < tableNameListLen-1; i++) + { + if (tableNameList[i] == '\0') + { + tableNameList[i] = str[0]; + tableNameList[i+1] = '\0'; + break; + } + else if (i == tableNameListLen-2) + { + printTableAbbreviation(); + break; + } + } + //for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) + //{ + // send_char(tableNameList[i]); + //} + //send_string_P("Darden"); + //send_string_P(&myarray); + //send_string_P(str); + } +} + +void ReplaceString(char *orig, char *repl) +{ + int i = 0; + while((orig[i] != 0x0 && repl[i] != 0x0) && orig[i] == repl[i]) + i++; + + if(orig[i] != 0x0) + { + int o = i; + while (orig[o++] != 0x0) { + charCount[countPointer]--; + register_code(KC_BSPC); + unregister_code(KC_BSPC); + } + } + printString(repl+i); +} + +void deletePrev(void) +{ + for (int i = 0; i < charCount[countPointer]; i++) + { + register_code(KC_BSPC); + unregister_code(KC_BSPC); + } + charCount[countPointer] = 0; + countPointer--; + int i = 1; + for (;i < tableNameListLen-1; i++) + { + if (tableNameList[i] == 0x0) + { + break; + } + } + tableNameList[i-1] = 0x0; +} + +void processSmartMacroTap(uint16_t kc) +{ + initStringData(); + switch(kc) + { + case TD_C: + if (containsCode(TD_D)) + { + printString("ribution"); + printStringAndQueueChar("Center"); + } + else if (last2CodeAre(TD_C)) + { + ReplaceString("Corporation", "Contact"); + } + else if(lastCodeIs(TD_C)) + { + printString("oration"); + } + else + { + printStringAndQueueChar("Corp"); + } + break; + case TD_D: + if (last2CodeAre(TD_D)) + { + ReplaceString("Distribution", "Distributor"); + } + else if(lastCodeIs(TD_D)) + { + printString("ribution"); + } + else + { + printStringAndQueueChar("Dist"); + } + break; + case TD_G: + printStringAndQueueChar("Global"); + printStringAndQueueChar("Lookup"); + break; + case TD_I: + if (containsCode(TD_W)) + printStringAndQueueChar("Instance"); + else + printStringAndQueueChar("Item"); + break; + case TD_N: + printStringAndQueueChar("NadRate"); + break; + case TD_P: + if (last2CodesAre(TD_D, TD_C)) + { + ReplaceString("DistributionCenter", "DistCenter"); + printStringAndQueueChar("Pricing"); + } + else if (last2CodeAre(TD_P)) + { + } + else if(lastCodeIs(TD_P)) + { + ReplaceString("Product", "Person"); + } + else + { + printStringAndQueueChar("Product"); + } + break; + case TD_Q: + printStringAndQueueChar("Darden"); + break; + case TD_S: + if (containsCode(TD_W)) + if (containsCode(TD_S) || containsCode(TD_D)) + printStringAndQueueChar("Step"); + else + printStringAndQueueChar("Session"); + else + printStringAndQueueChar("Supplier"); + break; + case TD_T: + if (containsCode(TD_W)) + printStringAndQueueChar("Task"); + else + printStringAndQueueChar("Type"); + break; + case TD_W: + printStringAndQueueChar("Workflow"); + break; + } + addKeyCode(kc); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + if (record->event.pressed) + { + switch (keycode) + { + case KC_LSPO: + case KC_RSPC: + shifted = true; + return true; + + case S_LFTJN: SEND_STRING("LEFT JOIN"); return false; + case S_INRJN: SEND_STRING("INNER JOIN "); return false; + case S_SLCT: SEND_STRING("SELECT "); return false; + case S_FROM: SEND_STRING("FROM "); return false; + case S_DSNCT: SEND_STRING("DISTINCT "); return false; + case S_ORDER: SEND_STRING("ORDER "); return false; + case S_WHERE: SEND_STRING("WHERE "); return false; + case S_ALTER: SEND_STRING("ALTER SESSION SET CURRENT_SCHEMA = "); return false; + case S_ASTRK: SEND_STRING("* "); return false; + + case KC_BSLS: + initStringData(); + layer_on(SQLNAMES); + return false; + + case TD_BSPC: + if (!shifted){ + deletePrev(); + } + else { + register_code(KC_BSPC); + unregister_code(KC_BSPC); + } + return false; + + case TD_A: + case TD_B: + case TD_C: + case TD_D: + case TD_E: + case TD_F: + case TD_G: + case TD_H: + case TD_I: + case TD_J: + case TD_K: + case TD_L: + case TD_M: + case TD_N: + case TD_O: + case TD_P: + case TD_Q: + case TD_R: + case TD_S: + case TD_T: + case TD_U: + case TD_V: + case TD_W: + case TD_X: + case TD_Y: + case TD_Z: + processSmartMacroTap(keycode); + return false; + + case TD_ENT: + printTableAbbreviation(); + case TD_ESC: + eraseKeyCodes(); + eraseTableAbbreviation(); + layer_off(SQLNAMES); + return true; + } + } + else + { + switch (keycode) + { + + case KC_BSLS: + if (macroTaps[0] == 0) + { + SEND_STRING("\\"); + layer_off(SQLNAMES); + } + return true; + case KC_LSPO: + case KC_RSPC: + shifted = false; + return true; + } + } + return true; }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE]= - LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - MO(FN_LAYER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_NO, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, KC_NO, KC_APP, KC_RCTL), + [QWERTY]= + LAYOUT_60_ansi( + ESCAP, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MNUS, EQUL, BACKSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LBRC, RBRC, BSLASH, + MO_FNLR, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, COLN, QUOT, ENTER_OR_SQL, + LEFTSHFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, CMMA, PRRD, SLSH, RIGHT_SHIFT__PAREN, + CTLL, WINL, ALTL, SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE, ALTR, WINR, APPR, CTLR), [NAV_CLUSTER]= - LAYOUT( - KC_TRNS, KC_PSCREEN, KC_SCROLLLOCK, KC_PAUSE, KC_INSERT, KC_HOME, KC_PGUP, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DELETE, KC_END, KC_PGDOWN, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_UP, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_0, KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS, KC_TRNS, KC_TRNS), - - [RGB]= - LAYOUT( - KC_TRNS, RGB_TOG, RGB_MOD, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_HUI, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - [MOUSE]= - LAYOUT( - KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_TRNS, KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + LAYOUT_60_ansi( + _____, PSCR, SCRL, PAUS, NSRT, HOME, PGUP, NMLK, KSSH, STAR, KMIN, ____, ____, ______, + ______, ____, ____, ____, DELT, END_, PGDN, KP_7, KP_8, KP_9, PLUS, ____, ____, _____, + _______, ____, ____, ____, ____, UPUP, UPUP, KP_4, KP_5, KP_6, PLUS, ____, ___________, + ________, ____, ____, ____, LEFT, D_WN, RGHT, KP_1, KP_2, KP_3, KNTR, _________________, + ____, ____, ____, /*-----------------*/KC_KP_0/*-----------------*/, KDOT, KNTR, ____, ____), [GAMING]= - LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSHIFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT, KC_NO, - KC_LCTL, KC_NO, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_NO, KC_NO, TO(BASE)), + LAYOUT_60_ansi( + _____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ______, + ______, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, _____, + KCNO, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ___________, + ________, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, _________________, + ____, KCNO, ____, /*------------------*/_____/*------------------*/, ____, KCNO, ____, QWRTY), + + [SQLMACROS]= + LAYOUT_60_ansi( + S_ALTER, ____, ____, ____, ____, ____, ____, ____, S_ASTRK, ____, ____, ____, ____, ___________, + ______, ____, S_WHERE, ____, ____, ____, ____, ____, S_INRJN, S_ORDER, ____, ____, ____, ______, + _______, KC_LBRC, S_SLCT, KC_PAST,S_FROM, ____, ____, ____, ____, S_LFTJN, ____, RBRC, ___________, + ________, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, _________________, + ____, ____, ____, /*------------------*/_____/*------------------*/, ____, ____, ____, ____), + + [SQLNAMES]= + LAYOUT_60_ansi( + TD_ESC, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, TD_BSPC, + ________, TD_Q, TD_W, TD_E, TD_R, TD_T, TD_Y, TD_U, TD_I, TD_O, TD_P, ____, ____, _____, + ___________, TD_A, TD_S, TD_D, TD_F, TD_G, TD_H, TD_J, TD_K, TD_L, ____, ____, TD_ENT, + ___________, TD_Z, TD_X, TD_C, TD_V, TD_B, TD_N, TD_M, ____, ____, ____, _________________, + ____, ____, ____, /*----------------------*/TD_ENT/*-----------------------*/, ____, ____, ____, RESET), [FN_LAYER]= - LAYOUT( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, - KC_CAPSLOCK, KC_MPRV, KC_MPLY, KC_MNXT, LWIN(KC_R), KC_TRNS, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_BRK, KC_TRNS, - KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, MO(LAYER_SEL), - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HYPR, KC_TRNS, KC_MEH, KC_TRNS), - - [LAYER_SEL]= - LAYOUT( - TO(BASE), TO(NAV_CLUSTER), TO(RGB), TO(MOUSE), TO(GAMING), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) - + LAYOUT_60_ansi( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + KC_CAPSLOCK, KC_MPRV, KC_MPLY, KC_MNXT, LWIN(KC_R), ____, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_BRK, ____, + ____, KC_VOLD, KC_MUTE, KC_VOLU, ____, ____, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, ____, + ____, ____, ____, ____, ____, ____, KC_END, ____, QWRTY, NAVS, GAME, ____, + ____, ____, ____, _________________, ____, KC_HYPR, KC_MEH, ____) }; diff --git a/keyboards/dz60/keymaps/marianas/keymap.h b/keyboards/dz60/keymaps/marianas/keymap.h new file mode 100644 index 0000000000..01de5c6e2c --- /dev/null +++ b/keyboards/dz60/keymaps/marianas/keymap.h @@ -0,0 +1,103 @@ +//Control +#define MO_FNLR MO(FN_LAYER) +#define BACKSPC KC_BSPC +#define ENTER_OR_SQL LT(SQLMACROS,KC_ENT) +#define ESCAP KC_ESC +#define PSCR KC_PSCREEN +#define SCRL KC_SCROLLLOCK +#define PAUS KC_PAUSE +#define NSRT KC_INSERT +#define HOME KC_HOME +#define PGUP KC_PGUP +#define PGDN KC_PGDN +#define END_ KC_END +#define DELT KC_DELETE +#define UPUP KC_UP +#define D_WN KC_DOWN +#define LEFT KC_LEFT +#define RGHT KC_RIGHT + +//KEYPAD +#define KP_1 KC_KP_1 +#define KP_2 KC_KP_2 +#define KP_3 KC_KP_3 +#define KP_4 KC_KP_4 +#define KP_5 KC_KP_5 +#define KP_6 KC_KP_6 +#define KP_7 KC_KP_7 +#define KP_8 KC_KP_8 +#define KP_9 KC_KP_9 +#define KP_0 KC_KP_0 +#define NMLK KC_NUMLOCK +#define STAR KC_KP_ASTERISK +#define KSSH KC_KP_SLASH +#define KMIN KC_KP_MINUS +#define PLUS KC_KP_PLUS +#define KNTR KC_KP_ENTER +#define KDOT KC_KP_DOT + +//Modifiers +#define CTLL KC_LCTL +#define LEFTSHFT KC_LSPO +#define WINL KC_LGUI +#define ALTL KC_LALT +#define CTLR KC_RCTL +#define RIGHT_SHIFT__PAREN KC_RSPC +#define WINR KC_RGUI +#define ALTR KC_RALT +#define APPR KC_APP + + +//Punctuation +#define CMMA KC_COMM +#define PRRD KC_DOT +#define SLSH KC_SLSH +#define QUOT KC_QUOT +#define COLN KC_SCLN +#define LBRC KC_LBRC +#define RBRC KC_RBRC +#define EQUL KC_EQL +#define MNUS KC_MINS +#define BSLASH KC_BSLS + +//Layers +#define QWRTY TO(QWERTY) +#define NAVS TO(NAV_CLUSTER) +#define GAME TO(GAMING) + +//Space +#define ____ KC_TRNS +#define _____ KC_TRNS +#define ______ KC_TRNS +#define _______ KC_TRNS +#define ________ KC_TRNS +#define ___________ KC_TRNS +#define _________________ KC_TRNS +#define SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE KC_SPC +#define KCNO KC_NO + + + + + +#define macroTapsLen 32 +#define tableNameListLen 32 +#define charCountLen 32 + +void initStringData(void); +uint32_t layer_state_set_user(uint32_t state); +bool containsCode(uint16_t kc); +bool lastCodeIs(uint16_t kc); +bool last2CodeAre(uint16_t kc); +bool last2CodesAre(uint16_t kc, uint16_t kc2); +void addKeyCode(uint16_t kc); +void eraseKeyCodes(void); +void eraseCharCounts(void); +void printTableAbbreviation(void); +void eraseTableAbbreviation(void); +void printString(char* str); +void printStringAndQueueChar(char* str); +void ReplaceString(char *orig, char *repl); +void deletePrev(void); +void processSmartMacroTap(uint16_t kc); +bool process_record_user(uint16_t keycode, keyrecord_t *record); diff --git a/keyboards/dz60/keymaps/marianas/rules.mk b/keyboards/dz60/keymaps/marianas/rules.mk new file mode 100644 index 0000000000..ab188f3b2c --- /dev/null +++ b/keyboards/dz60/keymaps/marianas/rules.mk @@ -0,0 +1,17 @@ +# Build Options +# comment out to disable the options. +# + + +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = no +AUTO_SHIFT_ENABLE = no From f45bc9b362363f6f3f848026eefad7d7a1842c2c Mon Sep 17 00:00:00 2001 From: mwpeterson Date: Thu, 18 Oct 2018 16:00:30 -0400 Subject: [PATCH 194/269] Keymap: Add Planck keymap (#4154) * remove clmk and dvrk and backlight; switch esc and enter to be modtap; add meh key * change songs * space cadet; move enter; move '"; move pgup pgdn * remove extra songs * update from noahfredrick keymap * make it easier to type ../../thing/*/* * move pipe * requested changes --- keyboards/planck/keymaps/mwpeterson/config.h | 40 +++ keyboards/planck/keymaps/mwpeterson/keymap.c | 295 +++++++++++++++++++ keyboards/planck/keymaps/mwpeterson/rules.mk | 6 + 3 files changed, 341 insertions(+) create mode 100644 keyboards/planck/keymaps/mwpeterson/config.h create mode 100644 keyboards/planck/keymaps/mwpeterson/keymap.c create mode 100644 keyboards/planck/keymaps/mwpeterson/rules.mk diff --git a/keyboards/planck/keymaps/mwpeterson/config.h b/keyboards/planck/keymaps/mwpeterson/config.h new file mode 100644 index 0000000000..d66557b29d --- /dev/null +++ b/keyboards/planck/keymaps/mwpeterson/config.h @@ -0,0 +1,40 @@ +#pragma once + +#define PERMISSIVE_HOLD +#define IGNORE_MOD_TAP_INTERRUPT + +#ifdef AUDIO_ENABLE + #define STARTUP_SONG SONG(ONE_UP_SOUND) + // #define STARTUP_SONG SONG(PLANCK_SOUND) + // #define STARTUP_SONG SONG(NO_SOUND) + #define GOODBYE_SONG SONG(COIN_SOUND) + + #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND) } +#endif + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +// Most tactile encoders have detents every 4 stages +#define ENCODER_RESOLUTION 4 diff --git a/keyboards/planck/keymaps/mwpeterson/keymap.c b/keyboards/planck/keymaps/mwpeterson/keymap.c new file mode 100644 index 0000000000..bfb015c7a8 --- /dev/null +++ b/keyboards/planck/keymaps/mwpeterson/keymap.c @@ -0,0 +1,295 @@ +// from event.pressed) { +#ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(plover_song); +#endif + layer_off(RAISE_LAYER); + layer_off(LOWER_LAYER); + layer_off(ADJUST_LAYER); + layer_on(STENO_LAYER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + plover_resume(); + } + return false; + case PV_EXIT: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(plover_gb_song); +#endif + plover_suspend(); + layer_off(STENO_LAYER); + } + return false; + case PV_LOOK: + if (record->event.pressed) { + plover_lookup(); + } + return false; + case SEND_VERSION: + if (record->event.pressed) { + SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION " (" QMK_BUILDDATE ")"); + } + return false; + case SEND_MAKE: + if (record->event.pressed) { + SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP ":dfu\n"); + } + return false; + } + return true; +} diff --git a/keyboards/planck/keymaps/mwpeterson/rules.mk b/keyboards/planck/keymaps/mwpeterson/rules.mk new file mode 100644 index 0000000000..de8aa389c4 --- /dev/null +++ b/keyboards/planck/keymaps/mwpeterson/rules.mk @@ -0,0 +1,6 @@ +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Disable shift combination, which conflicts with shift-parens +MOUSEKEY_ENABLE = yes # Mouse keys (disabled to save space) +NKRO_ENABLE = no # N-key rollover required for use as a steno board +AUDIO_ENABLE = yes # Audio output on port C6 From 14bdd5ed2a808075130bac26fc72dcb9b158ae2c Mon Sep 17 00:00:00 2001 From: sm0g <38926679+sm0ggles@users.noreply.github.com> Date: Thu, 18 Oct 2018 16:51:02 -0400 Subject: [PATCH 195/269] Keymap: added my tada68's from Gitlab. (#4146) * added my tada68 from Gitlab. * Removed unneeded code and the sm0gunix layout. --- keyboards/tada68/keymaps/sm0g/config.h | 3 + keyboards/tada68/keymaps/sm0g/keymap.c | 100 ++++++++++++++++++++++++ keyboards/tada68/keymaps/sm0g/readme.md | 15 ++++ keyboards/tada68/keymaps/sm0g/rules.mk | 18 +++++ 4 files changed, 136 insertions(+) create mode 100644 keyboards/tada68/keymaps/sm0g/config.h create mode 100644 keyboards/tada68/keymaps/sm0g/keymap.c create mode 100644 keyboards/tada68/keymaps/sm0g/readme.md create mode 100644 keyboards/tada68/keymaps/sm0g/rules.mk diff --git a/keyboards/tada68/keymaps/sm0g/config.h b/keyboards/tada68/keymaps/sm0g/config.h new file mode 100644 index 0000000000..3a2370b62c --- /dev/null +++ b/keyboards/tada68/keymaps/sm0g/config.h @@ -0,0 +1,3 @@ +#pragma once + +#define BACKLIGHT_BREATHING \ No newline at end of file diff --git a/keyboards/tada68/keymaps/sm0g/keymap.c b/keyboards/tada68/keymaps/sm0g/keymap.c new file mode 100644 index 0000000000..25312cd98f --- /dev/null +++ b/keyboards/tada68/keymaps/sm0g/keymap.c @@ -0,0 +1,100 @@ +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _GM 2 +#define _GF 3 + + +// Tap dance declarations (These must go above the keymaps) +enum { + TD_F1 = 0, + TD_F2, + TD_F3, + TD_F4, + TD_F5, + TD_F6, + TD_F7, + TD_F8, + TD_F9, + TD_F10, + TD_F11, + TD_F12, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bksp |Del | + * |----------------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp| + * |----------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| + * |----------------------------------------------------------------| + * |Caps|Win |Alt | Space |Alt|Ctrl| FN|Lef|Dow|Rig | + * `----------------------------------------------------------------' + */ +[_BL] = LAYOUT_ansi( + KC_ESC, TD(TD_F1), TD(TD_F2), TD(TD_F3), TD(TD_F4), TD(TD_F5), TD(TD_F6), TD(TD_F7), TD(TD_F8), TD(TD_F9), TD(TD_F10), TD(TD_F11), TD(TD_F12), KC_BSLS,KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSPC,KC_DEL, \ + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSPC,KC_UP,KC_PGDN, \ + KC_CAPS, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(_FL), KC_LEFT,KC_DOWN,KC_RGHT), + + /* Keymap _FL: Function Layer + * ,----------------------------------------------------------------. + * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |Ins | + * |----------------------------------------------------------------| + * | | |Up | | | | | | | | | | | |Hme | + * |----------------------------------------------------------------| + * | Caps |<- |Dn | ->| | | | | | | | | |End | + * |----------------------------------------------------------------| + * | | | |Bl-|BL |BL+| |VU-|VU+|MUT| | McL|MsU|McR | + * |----------------------------------------------------------------| + * | | | | | | | |Prev|P/P|Next| + * `----------------------------------------------------------------' + */ +[_FL] = LAYOUT_ansi( + _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TG(_GM), KC_INS , \ + _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \ + KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \ + _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, BL_BRTG,KC_VOLD,KC_VOLU,KC_MUTE,_______,_______, _______, _______, \ + _______,_______,_______, _______, _______,_______,_______,KC_MPRV,KC_MPLY, KC_MNXT), + +[_GM] = LAYOUT_ansi( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______,KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSPC,KC_DEL, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,KC_UP,KC_PGDN, \ + KC_CAPS, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(_GF), KC_LEFT,KC_DOWN,KC_RGHT), + +[_GF] = LAYOUT_ansi( + _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TG(_GM), KC_INS , \ + _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \ + KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \ + _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, BL_BRTG,KC_VOLD,KC_VOLU,KC_MUTE,_______,_______, _______, _______, \ + _______,_______,_______, _______, _______,_______,_______,KC_MPRV,KC_MPLY, KC_MNXT), + +}; + +// Tapdance definitions. Tap Dance F Keys. +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_F1] = ACTION_TAP_DANCE_DOUBLE(KC_1, KC_F1), + [TD_F2] = ACTION_TAP_DANCE_DOUBLE(KC_2, KC_F2), + [TD_F3] = ACTION_TAP_DANCE_DOUBLE(KC_3, KC_F3), + [TD_F4] = ACTION_TAP_DANCE_DOUBLE(KC_4, KC_F4), + [TD_F5] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_F5), + [TD_F6] = ACTION_TAP_DANCE_DOUBLE(KC_6, KC_F6), + [TD_F7] = ACTION_TAP_DANCE_DOUBLE(KC_7, KC_F7), + [TD_F8] = ACTION_TAP_DANCE_DOUBLE(KC_8, KC_F8), + [TD_F9] = ACTION_TAP_DANCE_DOUBLE(KC_9, KC_F9), + [TD_F10] = ACTION_TAP_DANCE_DOUBLE(KC_0, KC_F10), + [TD_F11] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_F11), + [TD_F12] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_F12), +}; diff --git a/keyboards/tada68/keymaps/sm0g/readme.md b/keyboards/tada68/keymaps/sm0g/readme.md new file mode 100644 index 0000000000..9916dcabd8 --- /dev/null +++ b/keyboards/tada68/keymaps/sm0g/readme.md @@ -0,0 +1,15 @@ +``` + ______ __ __ ______ ______ +.-----.--------.| |.-----. | |_.---.-.--| |.---.-.| __| __ | +|__ --| || -- || _ | | _| _ | _ || _ || __ | __ | +|_____|__|__|__||______||___ | |____|___._|_____||___._||______|______| + |_____| +``` + +Just my simple layout for the Tada68. +Space [Cadet Shift](https://docs.qmk.fm/#/feature_space_cadet_shift) is enabled. +LCTRL and Caps have been swapped and the new CTRL also acts as ESC when tapped and CTRL when held. +This is helpful for me as a VIM user. +Some other changes. + +Tap Dance for the F Row.. i.e double tap 1 and get F1 instead. diff --git a/keyboards/tada68/keymaps/sm0g/rules.mk b/keyboards/tada68/keymaps/sm0g/rules.mk new file mode 100644 index 0000000000..bd4bb32491 --- /dev/null +++ b/keyboards/tada68/keymaps/sm0g/rules.mk @@ -0,0 +1,18 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +TAP_DANCE_ENABLE = yes # Tappa Dance \ No newline at end of file From db03b76910c486cd27c175ae85efeeaa183b1c98 Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Fri, 19 Oct 2018 01:30:48 +0900 Subject: [PATCH 196/269] optimize rgblight_effect_alternating(void) rgblight_effect_alternating (void) calls rgblight_sethsv_at () RGBLED_NUM times. As a result, rgblight_set () is called RGBLED_NUM + 1 times. This is wasteful processing. --- quantum/rgblight.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 03f77cc80d..94e9c0a3b2 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -860,13 +860,13 @@ void rgblight_effect_alternating(void){ last_timer = timer_read(); for(int i = 0; i=RGBLED_NUM/2 && !pos){ - rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, i); - }else{ - rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, 0, i); - } + if(i=RGBLED_NUM/2 && !pos){ + sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i]); + }else{ + sethsv(rgblight_config.hue, rgblight_config.sat, 0, (LED_TYPE *)&led[i]); + } } rgblight_set(); pos = (pos + 1) % 2; From 53a43dbe995640632be834f406007a72f8fa4d3e Mon Sep 17 00:00:00 2001 From: Jason Thigpen Date: Thu, 18 Oct 2018 13:53:40 -0700 Subject: [PATCH 197/269] Keymap: Swap func layer keys and add vim navigation to navigation layer (#4163) --- keyboards/dz60/keymaps/crd/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/dz60/keymaps/crd/keymap.c b/keyboards/dz60/keymaps/crd/keymap.c index a17d32caaf..2aedc0b728 100644 --- a/keyboards/dz60/keymaps/crd/keymap.c +++ b/keyboards/dz60/keymaps/crd/keymap.c @@ -12,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | DEL | * |-----------------------------------------------------------------------------------------+ - * | FN2 | Alt | Cmd | Space | Cmd | FN1 | L | D | R | + * | FN1 | Alt | Cmd | Space | Cmd | FN2 | L | D | R | * `-----------------------------------------------------------------------------------------' */ @@ -21,7 +21,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, - MO(2), KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT + MO(1), KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, MO(2), KC_LEFT, KC_DOWN, KC_RIGHT ), /* FN1 Layer @@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | | | | | | | | | | | | | | | * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | + * | | | | | | | L | D | U | R | | | | * |-----------------------------------------------------------------------------------------+ * | | | | | | | | | | | | |PgUp | | * |-----------------------------------------------------------------------------------------+ @@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT_directional( KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDOWN, KC_END ), From 480651cf9df5c0b7453f60dffe13ae5de665a120 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Thu, 18 Oct 2018 15:12:11 -0700 Subject: [PATCH 198/269] Docs: Adding QMK Git Conventions doc; formatting cleanup on Learning Resources doc (#3902) * Docs: newbs_learn_more_resources.md: formatting * Added QMK Git Conventions doc, initial version * Renamed contributing_qmk.md to newbs_best_practices.md * Updated per review by @drashna * Added navigation links * Updated to Best Practices doc * Minor updates to Learn More Resources doc Markdown formatting consistency because I'm particular about it. * Added Merge Conflict section to Best Practices doc --- docs/_sidebar.md | 1 + docs/_summary.md | 2 + docs/newbs.md | 1 + docs/newbs_best_practices.md | 163 +++++++++++++++++++++++++++++ docs/newbs_learn_more_resources.md | 6 +- 5 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 docs/newbs_best_practices.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 56a6463918..465f4657cd 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -3,6 +3,7 @@ * [Building Your First Firmware](newbs_building_firmware.md) * [Flashing Firmware](newbs_flashing.md) * [Testing and Debugging](newbs_testing_debugging.md) + * [Best Practices](newbs_best_practices.md) * [Learning Resources](newbs_learn_more_resources.md) * [QMK Basics](README.md) diff --git a/docs/_summary.md b/docs/_summary.md index 11aeb7cd36..465f4657cd 100644 --- a/docs/_summary.md +++ b/docs/_summary.md @@ -3,6 +3,8 @@ * [Building Your First Firmware](newbs_building_firmware.md) * [Flashing Firmware](newbs_flashing.md) * [Testing and Debugging](newbs_testing_debugging.md) + * [Best Practices](newbs_best_practices.md) + * [Learning Resources](newbs_learn_more_resources.md) * [QMK Basics](README.md) * [QMK Introduction](getting_started_introduction.md) diff --git a/docs/newbs.md b/docs/newbs.md index 38a9607d44..e687fd2279 100644 --- a/docs/newbs.md +++ b/docs/newbs.md @@ -12,6 +12,7 @@ There are 5 main sections to this guide: * [Building Your First Firmware](newbs_building_firmware.md) * [Flashing Firmware](newbs_flashing.md) * [Testing and Debugging](newbs_testing_debugging.md) +* [Best Practices](newbs_best_practices.md) * [Learn More with these Resources](newbs_learn_more_resources.md) This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md). diff --git a/docs/newbs_best_practices.md b/docs/newbs_best_practices.md new file mode 100644 index 0000000000..61bcc0c6ad --- /dev/null +++ b/docs/newbs_best_practices.md @@ -0,0 +1,163 @@ +# Best Practices + +## Or, "How I Learned to Stop Worrying and Love Git." + +This document aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them. + +This document assumes a few things: + +1. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account. +2. You've [set up your build environment](newbs_getting_started.md?id=environment-setup). + + +## Your fork's master: Update Often, Commit Never + +It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing. + +To reduce the chances of merge conflicts — instances where two or more users have edited the same part of a file concurrently — keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch. + +### Updating your master branch + +To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter: + +``` +git remote add upstream https://github.com/qmk/qmk_firmware.git +``` + +To verify that the repository has been added, run `git remote -v`, which should return the following: + +``` +$ git remote -v +origin https://github.com//qmk_firmware.git (fetch) +origin https://github.com//qmk_firmware.git (push) +upstream https://github.com/qmk/qmk_firmware.git (fetch) +upstream https://github.com/qmk/qmk_firmware.git (push) +``` + +Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags — collectively referred to as "refs" — from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK. + +To update your fork's master, run the following, hitting the Enter key after each line: + +``` +git checkout master +git fetch upstream +git pull upstream master +git push origin master +``` + +This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork. + +### Making Changes + +To make changes, create a new branch by entering: + +``` +git checkout -b dev_branch +git push --set-upstream origin dev_branch +``` + +This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments. + +!> With `git push`, you can use `-u` in place of `--set-upstream` — `-u` is an alias for `--set-upstream`. + +You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make. + +By default `git checkout -b` will base your new branch on the branch that is checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command: + +``` +git checkout -b dev_branch master +``` + +Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch: + +``` +git add path/to/updated_file +git commit -m "My commit message." +``` + +`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance. + +!> If you've changed a lot of files, but all the files are part of the same change, you can use `git add .` to add all the changed files that are in your current directory, rather than having to add each file individually. + +### Publishing Your Changes + +The last step is to push your changes to your fork. To do this, enter `git push`. Git now publishes the current state of `dev_branch` to your fork. + + +## Resolving Merge Conflicts + +Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files. + +### Rebasing Your Changes + +A *rebase* is Git's way of taking changes that were applied at one point, reversing them, and then applying the same changes to another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time. + +To start, run the following: + +``` +git fetch upstream +git rev-list --left-right --count HEAD...upstream/master +``` + +The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers: + +``` +$ git rev-list --left-right --count HEAD...upstream/master +7 35 +``` + +The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch. + +Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation: + +``` +git rebase upstream/master +``` + +This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch. + +``` +$ git rebase upstream/master +First, rewinding head to replay your work on top of it... +Applying: Commit #1 +Using index info to reconstruct a base tree... +M conflicting_file_1.txt +Falling back to patching base and 3-way merge... +Auto-merging conflicting_file_1.txt +CONFLICT (content): Merge conflict in conflicting_file_1.txt +error: Failed to merge in the changes. +hint: Use 'git am --show-current-patch' to see the failed patch +Patch failed at 0001 Commit #1 + +Resolve all conflicts manually, mark them as resolved with +"git add/rm ", then run "git rebase --continue". +You can instead skip this commit: run "git rebase --skip". +To abort and get back to the state before "git rebase", run "git rebase --abort". +``` + +This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this: + +``` +<<<<<<< HEAD +

For help with any issues, email us at support@webhost.us.

+======= +

Need help? Email support@webhost.us.

+>>>>>>> Commit #1 +``` + +The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit. + +Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file. + +``` +

Need help? Email support@webhost.us.

+``` + +Now run: + +``` +git add conflicting_file_1.txt +git rebase --continue +``` + +Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end. diff --git a/docs/newbs_learn_more_resources.md b/docs/newbs_learn_more_resources.md index 23b99f470f..9b77db8fd4 100644 --- a/docs/newbs_learn_more_resources.md +++ b/docs/newbs_learn_more_resources.md @@ -1,13 +1,15 @@ # Learning Resources -These resources are aimed at giving new members in the qmk community more understanding to the information provided in the newbs docs. + +These resources are aimed at giving new members in the QMK community more understanding to the information provided in the Newbs docs. Git resources: * [Great General Tutorial](https://www.codecademy.com/learn/learn-git) * [Git Game To Learn From Examples](https://learngitbranching.js.org/) * [Git Resources to Learn More About Github](getting_started_github.md) -* [Git Resources Aimed Specificly toward QMK](contributing.md) +* [Git Resources Aimed Specifically toward QMK](contributing.md) Command Line resources: + * [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line) From fc1c692f710fcd65be250d43662ee9742b221f0d Mon Sep 17 00:00:00 2001 From: lexworth <30760424+lexworth@users.noreply.github.com> Date: Thu, 18 Oct 2018 18:36:30 -0400 Subject: [PATCH 199/269] Keymap: Adding my Minivan layout (#4162) * adding my keymap * adding my Minivan keymap * deleted old incomplete keymap * added link to layout image * adding my minivan keymap --- .../minivan/keymaps/lexworth/config.h | 5 ++++ .../minivan/keymaps/lexworth/keymap.c | 29 +++++++++++++++++++ .../minivan/keymaps/lexworth/readme.md | 7 +++++ .../minivan/keymaps/lexworth/rules.mk | 5 ++++ 4 files changed, 46 insertions(+) create mode 100644 keyboards/thevankeyboards/minivan/keymaps/lexworth/config.h create mode 100644 keyboards/thevankeyboards/minivan/keymaps/lexworth/keymap.c create mode 100644 keyboards/thevankeyboards/minivan/keymaps/lexworth/readme.md create mode 100644 keyboards/thevankeyboards/minivan/keymaps/lexworth/rules.mk diff --git a/keyboards/thevankeyboards/minivan/keymaps/lexworth/config.h b/keyboards/thevankeyboards/minivan/keymaps/lexworth/config.h new file mode 100644 index 0000000000..36062c47b9 --- /dev/null +++ b/keyboards/thevankeyboards/minivan/keymaps/lexworth/config.h @@ -0,0 +1,5 @@ +#pragma once + +// place overrides here +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_LEVELS 5 \ No newline at end of file diff --git a/keyboards/thevankeyboards/minivan/keymaps/lexworth/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/lexworth/keymap.c new file mode 100644 index 0000000000..1824f3cf39 --- /dev/null +++ b/keyboards/thevankeyboards/minivan/keymaps/lexworth/keymap.c @@ -0,0 +1,29 @@ +#include QMK_KEYBOARD_H + +// Helpful defines + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT + (KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + LT(1,KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(1,KC_QUOT), + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, TG(2), LT(3,KC_APP), KC_DEL), + + [1] = LAYOUT + (KC_CAPS, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, KC_UNDS, KC_P7, KC_P8, KC_P9, KC_EQL, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, KC_PMNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, + KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_NLCK, + KC_TRNS, KC_TRNS, KC_MSTP, KC_PENT, KC_P0, KC_PDOT, KC_APP, KC_TRNS), + + [2] = LAYOUT + (KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12), + + [3] = LAYOUT + (KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_PIPE, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_TRNS, + BL_TOGG, BL_DEC, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET) +}; diff --git a/keyboards/thevankeyboards/minivan/keymaps/lexworth/readme.md b/keyboards/thevankeyboards/minivan/keymaps/lexworth/readme.md new file mode 100644 index 0000000000..5ac3aafdcc --- /dev/null +++ b/keyboards/thevankeyboards/minivan/keymaps/lexworth/readme.md @@ -0,0 +1,7 @@ +# Minivan + +![Layout Image](https://drive.google.com/file/d/1rDbtoOBvw5lxfvUBLYmjTt6MJPoeXngr/view?usp=sharing) + +# Custom keymap for the minivan with backlight enabled and 5 backlight levels. +# Hardware Supported: Minivan +# Hardware Availability: [thevankeyboards.com](https://thevankeyboards.com/) \ No newline at end of file diff --git a/keyboards/thevankeyboards/minivan/keymaps/lexworth/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/lexworth/rules.mk new file mode 100644 index 0000000000..9c7dc2e122 --- /dev/null +++ b/keyboards/thevankeyboards/minivan/keymaps/lexworth/rules.mk @@ -0,0 +1,5 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically + +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality From 8efe8b498d344928fb55ea78a289d9eb32145e48 Mon Sep 17 00:00:00 2001 From: 194h <38110558+194h@users.noreply.github.com> Date: Fri, 19 Oct 2018 02:09:06 +0200 Subject: [PATCH 200/269] Keymap: Added 194h atreus62 keymap (#4164) * Added my(194h) atreus62 keymap * Fixed what noroadsleft remarked in my pull request, hopefully got it all. * Followed drashna's suggestion. --- keyboards/atreus62/keymaps/194h/config.h | 6 + keyboards/atreus62/keymaps/194h/keymap.c | 160 +++++++++++++++++++++++ keyboards/atreus62/keymaps/194h/rules.mk | 8 ++ 3 files changed, 174 insertions(+) create mode 100644 keyboards/atreus62/keymaps/194h/config.h create mode 100644 keyboards/atreus62/keymaps/194h/keymap.c create mode 100644 keyboards/atreus62/keymaps/194h/rules.mk diff --git a/keyboards/atreus62/keymaps/194h/config.h b/keyboards/atreus62/keymaps/194h/config.h new file mode 100644 index 0000000000..f5306a07f1 --- /dev/null +++ b/keyboards/atreus62/keymaps/194h/config.h @@ -0,0 +1,6 @@ +#pragma once +#define ONESHOT_TIMEOUT 3000 +#define TAPPING_TERM 200 +#define FORCE_NKRO +#define LEADER_TIMEOUT 1000 +#define TAPPING_TOGGLE 3 diff --git a/keyboards/atreus62/keymaps/194h/keymap.c b/keyboards/atreus62/keymaps/194h/keymap.c new file mode 100644 index 0000000000..9b397fce46 --- /dev/null +++ b/keyboards/atreus62/keymaps/194h/keymap.c @@ -0,0 +1,160 @@ +#include QMK_KEYBOARD_H + +//The current Nordic and Norwegian layout files are a mess. I'll do it myself: +//Norwegian +#define NO_AE KC_QUOT // Æ +#define NO_AO KC_LBRC // Å +#define NO_BSLS KC_EQL // Backslash +#define NO_LT KC_NUBS // < +#define NO_MINS KC_SLSH // - +#define NO_OE KC_SCLN // Ø +#define NO_PIPE KC_GRV // | +#define NO_PLUS KC_MINS // + +#define NO_QUOT KC_NUHS // ' +#define NO_UMLA KC_RBRC // ¨ +//Norwegian - Modifier dependant definitions +#define NO_EXLM LSFT(KC_1) // ! +#define NO_DQT LSFT(KC_2) // " +#define NO_AT RALT(KC_2) // @ +#define NO_HASH LSFT(KC_3) // # +#define NO_EUR LSFT(KC_4) // € +#define NO_DLR RALT(KC_4) // $ +#define NO_PERC LSFT(KC_5) // % +#define NO_AND LSFT(KC_6) // & +#define NO_SLSH LSFT(KC_7) // / +#define NO_PO LSFT(KC_8) // ( +#define NO_PC LSFT(KC_9) // ) +#define NO_EQL LSFT(KC_0) // = +#define NO_LCBR RALT(KC_7) // { +#define NO_LBRC RALT(KC_8) // [ +#define NO_RBRC RALT(KC_9) // ] +#define NO_RCBR RALT(KC_0) // } +#define NO_COLN LSFT(KC_DOT) // : +#define NO_SCLN LSFT(KC_COMM) // ; +#define NO_MU RALT(KC_M) // µ +#define NO_EURO RALT(KC_E) // € +#define NO_SECT LSFT(KC_GRV) // § +#define NO_GERC RALT(KC_COMM) // ¸ +#define NO_QUAR LSFT(RALT(KC_4)) // ¼ +//Norwegian layout - dependant on previous definitions +#define NO_UNDS LSFT(NO_MINS) // _ +#define NO_QUES LSFT(NO_PLUS) // ? +#define NO_GRAV LSFT(NO_BSLS) // ` +#define NO_GT LSFT(NO_LT) // > +#define NO_HALF RALT(NO_LT) // ½ +#define NO_HAT LSFT(NO_UMLA) // ^ +#define NO_ASTR LSFT(NO_QUOT) // * +#define NO_TILD RALT(NO_UMLA) // ~ + +//One Shot Modifier +#define OSM_LCTL OSM(MOD_LCTL) +#define OSM_LALT OSM(MOD_LALT) +#define OSM_LSFT OSM(MOD_LSFT) +#define OSM_LGUI OSM(MOD_LGUI) +#define OSM_RCTL OSM(MOD_RCTL) +#define OSM_RALT OSM(MOD_RALT) +#define OSM_RSFT OSM(MOD_RSFT) +#define OSM_RGUI OSM(MOD_RGUI) + +//Layers +#define L1 0 +#define L2 1 +#define L3 2 +#define L4 3 +#define L5 4 + +// Momentary switch to layer - One Shot Layer +#define OSL_L3 OSL(L3) +#define OSL_L4 OSL(L4) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [L1] = LAYOUT( + KC_LGUI, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RGUI, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_DQT, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_SCLN, NO_QUOT, + OSM_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, OSM_RSFT, + CTL_T(KC_ESC), MO(L5), KC_LEAD, OSM_LALT, MO(L4), OSL_L3, KC_SPC, KC_ENT, OSL_L3, MO(L4), OSM_RALT, NO_EQL, NO_PLUS, KC_RCTL + ), + [L2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_AO, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_OE, NO_AE, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [L3] = LAYOUT( + NO_LBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_RBRC, + NO_LCBR, XXXXXXX, XXXXXXX, NO_AT, XXXXXXX, NO_TILD, NO_QUES, NO_EXLM, NO_PIPE, XXXXXXX, XXXXXXX, NO_RCBR, + _______, NO_ASTR, NO_BSLS, NO_DLR, NO_HASH, XXXXXXX, NO_HAT, XXXXXXX, NO_COLN, NO_SLSH, NO_SCLN, NO_QUOT, + NO_PO, KC_0, NO_SECT, NO_PERC, XXXXXXX, NO_GRAV, NO_AND, NO_UMLA, NO_LT, NO_GT, NO_UNDS, NO_PC, + XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX + ), + [L4] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, XXXXXXX, + _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, KC_DEL, + XXXXXXX, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, KC_APP, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX, + OSM_LCTL, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLU, OSM_RCTL + ), + [L5] = LAYOUT( + XXXXXXX, TO(L1), TO(L2), TO(L3), TO(L4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_AO, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_OE, NO_AE, + XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ) +}; + + +// Unicode Linux +void matrix_init_user(void) { + set_unicode_input_mode(UC_LNX); +}; + + +#define TAP_ONCE(code) \ + register_code (code); \ + unregister_code (code) + + +LEADER_EXTERNS(); + +// Runs constantly in the background, in a loop. Only supports basic keycodes. +void matrix_scan_user(void) { + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + //probably useless in practice, but cool + SEQ_ONE_KEY (KC_P) { + tap_random_base64(); + tap_random_base64(); + tap_random_base64(); + tap_random_base64(); + tap_random_base64(); + tap_random_base64(); + tap_random_base64(); + tap_random_base64(); + } + + SEQ_ONE_KEY (KC_G) { + SEND_STRING("grep something !"); + register_code(KC_RALT); + TAP_ONCE(KC_4); + unregister_code(KC_RALT); + } + SEQ_ONE_KEY (KC_T) { + SEND_STRING("tail "); + TAP_ONCE(KC_SLSH); + SEND_STRING("f !"); + register_code(KC_RALT); + TAP_ONCE(KC_4); + unregister_code(KC_RALT); + } + SEQ_ONE_KEY (KC_S) { + SEND_STRING("sudo !!"); + TAP_ONCE(KC_ENT); + } + } +} diff --git a/keyboards/atreus62/keymaps/194h/rules.mk b/keyboards/atreus62/keymaps/194h/rules.mk new file mode 100644 index 0000000000..5246909a38 --- /dev/null +++ b/keyboards/atreus62/keymaps/194h/rules.mk @@ -0,0 +1,8 @@ +TAP_DANCE_ENABLE = no +NKRO_ENABLE = true +MOUSEKEY_ENABLE = no +EXTRAKEY_ENABLE = yes +CONSOLE_ENABLE = no +KEY_LOCK_ENABLE = no +AUTO_SHIFT_ENABLE = no +LEADER_ENABLE = yes From f4094930a393ec3dc597e06e95cd3365e3f8cb97 Mon Sep 17 00:00:00 2001 From: Takuya Urakawa Date: Fri, 19 Oct 2018 13:33:23 +0900 Subject: [PATCH 201/269] stm32f1xx EEPROM emulation (#3914) * * Add stm32f1xx EEPROM emulation * Fix eeprom update compare bug Squashed commit of the following: commit b8f248ae08cec0cd81ecbb8854d9b39221d4d573 Author: hsgw Date: Sat Sep 15 19:13:48 2018 +0900 fix EEPROM_update wrong compare commit d4ed4e6ea864e967a3e17f7edee4b0c3b4a25541 Author: hsgw Date: Sat Sep 15 17:43:47 2018 +0900 eeprom fix initialization define commit b61aa7c04d70c64df3416d63e5da08b73b6053af Author: hsgw Date: Sat Sep 15 16:33:40 2018 +0900 maybe working * Fix FLASH_KEY defines --- tmk_core/common.mk | 7 +++++++ tmk_core/common/chibios/eeprom_stm32.c | 8 ++++---- tmk_core/common/chibios/eeprom_stm32.h | 12 +++++++++--- tmk_core/common/chibios/flash_stm32.c | 24 ++++++++++++++++-------- tmk_core/common/eeconfig.c | 6 +++--- tmk_core/common/eeconfig.h | 2 +- tmk_core/protocol/chibios/main.c | 4 ++-- 7 files changed, 42 insertions(+), 21 deletions(-) diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 4a0f7dcf9a..33bcc97b2e 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -34,6 +34,13 @@ ifeq ($(PLATFORM),CHIBIOS) ifeq ($(MCU_SERIES), STM32F3xx) TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c + TMK_COMMON_DEFS += -DEEPROM_EMU_STM32F303xC + TMK_COMMON_DEFS += -DSTM32_EEPROM_ENABLE + else ifeq ($(MCU_SERIES), STM32F1xx) + TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c + TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c + TMK_COMMON_DEFS += -DEEPROM_EMU_STM32F103xB + TMK_COMMON_DEFS += -DSTM32_EEPROM_ENABLE else TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom_teensy.c endif diff --git a/tmk_core/common/chibios/eeprom_stm32.c b/tmk_core/common/chibios/eeprom_stm32.c index 3c19451223..a869985501 100755 --- a/tmk_core/common/chibios/eeprom_stm32.c +++ b/tmk_core/common/chibios/eeprom_stm32.c @@ -10,7 +10,7 @@ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and + * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and * https://github.com/leaflabs/libmaple * * Modifications for QMK and STM32F303 by Yiancar @@ -274,7 +274,7 @@ uint16_t EE_VerifyPageFullWriteVariable(uint16_t Address, uint16_t Data) // Check each active page address starting from begining for (idx = pageBase + 4; idx < pageEnd; idx += 4) - if ((*(__IO uint32_t*)idx) == 0xFFFFFFFF) // Verify if element + if ((*(__IO uint32_t*)idx) == 0xFFFFFFFF) // Verify if element { // contents are 0xFFFFFFFF FlashStatus = FLASH_ProgramHalfWord(idx, Data); // Set variable data if (FlashStatus != FLASH_COMPLETE) @@ -517,7 +517,7 @@ uint16_t EEPROM_read(uint16_t Address, uint16_t *Data) // Get the valid Page end Address pageEnd = pageBase + ((uint32_t)(PageSize - 2)); - + // Check each active page address starting from end for (pageBase += 6; pageEnd >= pageBase; pageEnd -= 4) if ((*(__IO uint16_t*)pageEnd) == Address) // Compare the read address with the virtual address @@ -574,7 +574,7 @@ uint16_t EEPROM_update(uint16_t Address, uint16_t Data) { uint16_t temp; EEPROM_read(Address, &temp); - if (Address == Data) + if (temp == Data) return EEPROM_SAME_VALUE; else return EEPROM_write(Address, Data); diff --git a/tmk_core/common/chibios/eeprom_stm32.h b/tmk_core/common/chibios/eeprom_stm32.h index 68aa14f6d4..09229530ca 100755 --- a/tmk_core/common/chibios/eeprom_stm32.h +++ b/tmk_core/common/chibios/eeprom_stm32.h @@ -10,7 +10,7 @@ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and + * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and * https://github.com/leaflabs/libmaple * * Modifications for QMK and STM32F303 by Yiancar @@ -27,8 +27,14 @@ #include "flash_stm32.h" // HACK ALERT. This definition may not match your processor -// To Do. Work out correct value for EEPROM_PAGE_SIZE on the STM32F103CT6 etc -#define MCU_STM32F303CC +// To Do. Work out correct value for EEPROM_PAGE_SIZE on the STM32F103CT6 etc +#if defined(EEPROM_EMU_STM32F303xC) + #define MCU_STM32F303CC +#elif defined(EEPROM_EMU_STM32F103xB) + #define MCU_STM32F103RB +#else + #error "not implemented." +#endif #ifndef EEPROM_PAGE_SIZE #if defined (MCU_STM32F103RB) diff --git a/tmk_core/common/chibios/flash_stm32.c b/tmk_core/common/chibios/flash_stm32.c index e7199ac7b1..2735934844 100755 --- a/tmk_core/common/chibios/flash_stm32.c +++ b/tmk_core/common/chibios/flash_stm32.c @@ -10,19 +10,27 @@ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and + * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and * https://github.com/leaflabs/libmaple * * Modifications for QMK and STM32F303 by Yiancar */ -#define STM32F303xC +#if defined(EEPROM_EMU_STM32F303xC) + #define STM32F303xC + #include "stm32f3xx.h" +#elif defined(EEPROM_EMU_STM32F103xB) + #define STM32F103xB + #include "stm32f1xx.h" +#else + #error "not implemented." +#endif -#include "stm32f3xx.h" #include "flash_stm32.h" -#define FLASH_KEY1 ((uint32_t)0x45670123) -#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) +#if defined(EEPROM_EMU_STM32F103xB) + #define FLASH_SR_WRPERR FLASH_SR_WRPRTERR +#endif /* Delay definition */ #define EraseTimeout ((uint32_t)0x00000FFF) @@ -71,7 +79,7 @@ FLASH_Status FLASH_GetStatus(void) * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. */ FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout) -{ +{ FLASH_Status status; /* Check for the Flash Status */ @@ -102,7 +110,7 @@ FLASH_Status FLASH_ErasePage(uint32_t Page_Address) ASSERT(IS_FLASH_ADDRESS(Page_Address)); /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(EraseTimeout); - + if(status == FLASH_COMPLETE) { /* if the previous operation is completed, proceed to erase the page */ @@ -128,7 +136,7 @@ FLASH_Status FLASH_ErasePage(uint32_t Page_Address) * @param Address: specifies the address to be programmed. * @param Data: specifies the data to be programmed. * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, - * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. */ FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) { diff --git a/tmk_core/common/eeconfig.c b/tmk_core/common/eeconfig.c index 0fec410a9c..d8bab7d2e5 100644 --- a/tmk_core/common/eeconfig.c +++ b/tmk_core/common/eeconfig.c @@ -3,7 +3,7 @@ #include "eeprom.h" #include "eeconfig.h" -#ifdef STM32F303xC +#ifdef STM32_EEPROM_ENABLE #include "hal.h" #include "eeprom_stm32.h" #endif @@ -32,7 +32,7 @@ void eeconfig_init_kb(void) { * FIXME: needs doc */ void eeconfig_init_quantum(void) { -#ifdef STM32F303xC +#ifdef STM32_EEPROM_ENABLE EEPROM_format(); #endif eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); @@ -73,7 +73,7 @@ void eeconfig_enable(void) */ void eeconfig_disable(void) { -#ifdef STM32F303xC +#ifdef STM32_EEPROM_ENABLE EEPROM_format(); #endif eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF); diff --git a/tmk_core/common/eeconfig.h b/tmk_core/common/eeconfig.h index a45cb8b12d..8d4e1d4d00 100644 --- a/tmk_core/common/eeconfig.h +++ b/tmk_core/common/eeconfig.h @@ -26,7 +26,7 @@ along with this program. If not, see . #define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF /* eeprom parameteter address */ -#if !defined(STM32F303xC) +#if !defined(STM32_EEPROM_ENABLE) #define EECONFIG_MAGIC (uint16_t *)0 #define EECONFIG_DEBUG (uint8_t *)2 #define EECONFIG_DEFAULT_LAYER (uint8_t *)3 diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c index dcc6d9d076..6cceccd23c 100644 --- a/tmk_core/protocol/chibios/main.c +++ b/tmk_core/protocol/chibios/main.c @@ -44,7 +44,7 @@ #ifdef MIDI_ENABLE #include "qmk_midi.h" #endif -#ifdef STM32F303xC +#ifdef STM32_EEPROM_ENABLE #include "eeprom_stm32.h" #endif #include "suspend.h" @@ -112,7 +112,7 @@ int main(void) { halInit(); chSysInit(); -#ifdef STM32F303xC +#ifdef STM32_EEPROM_ENABLE EEPROM_init(); #endif From 7e1b57add42dcc3330d9d99e28c9b7f96eb2eee8 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Thu, 18 Oct 2018 21:34:40 -0700 Subject: [PATCH 202/269] Some cleanup of the Useful Functions docs (#4064) * Add examples for tri layers * Clean up and spelling fixes --- docs/ref_functions.md | 78 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 14 deletions(-) diff --git a/docs/ref_functions.md b/docs/ref_functions.md index 7d0cda3227..9b5be7a883 100644 --- a/docs/ref_functions.md +++ b/docs/ref_functions.md @@ -1,28 +1,79 @@ # List of Useful Core Functions To Make Your Keyboard Better -There are a lot of hidden functions in QMK that are incredible useful, or may add a bit of functionality that you've been wanting. Functions that are specific to certain features are not included here, as those will be on their respective feature page. +There are a lot of hidden functions in QMK that are incredible useful, or may add a bit of functionality that you've been wanting. Functions that are specific to certain features are not included here, as those will be on their respective feature page. ## (OLKB) Tri Layers -There are actually separate functions that you can use there, depending on what you're after. +There are actually separate functions that you can use there, depending on what you're after. -The first is the `update_tri_layer(x, y, z)` function. This function check to see if layers `x` and `y` are both on. If they are both on, then it runs on layer `z`. Otherwise, if both `x` and `y` are not both on (either only one is, or neither is), then it runs off layer `z`. +### `update_tri_layer(x, y, z)` -This function is useful if you want to create specific keys that have this functionality, but other layer keycodes won't do this. +The first is the `update_tri_layer(x, y, z)` function. This function check to see if layers `x` and `y` are both on. If they are both on, then it runs on layer `z`. Otherwise, if both `x` and `y` are not both on (either only one is, or neither is), then it runs off layer `z`. -The other function is `update_tri_layer_state(state, x, y, z)`. This function is meant to be called from they [`layer_state_set_*` functions](custom_quantum_functions.md#layer-change-code). This means that any time that you use a keycode to change the layer, this will be checked. So you could use `LT(layer, kc)` to change the layer and it will trigger the same layer check. +This function is useful if you want to create specific keys that have this functionality, but other layer keycodes won't do this. -The caveat to this method is that you cannot access the `z` layer without having `x` and `y` layers on, since if you try to activate just layer `z`, it will run this code and turn off layer `z` before you could use it. +#### Example + +```c +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + } + return true; +} +``` + +### `update_tri_layer_state(state, x, y, z)` +The other function is `update_tri_layer_state(state, x, y, z)`. This function is meant to be called from they [`layer_state_set_*` functions](custom_quantum_functions.md#layer-change-code). This means that any time that you use a keycode to change the layer, this will be checked. So you could use `LT(layer, kc)` to change the layer and it will trigger the same layer check. + +The caveat to this method is that you cannot access the `z` layer without having `x` and `y` layers on, since if you try to activate just layer `z`, it will run this code and turn off layer `z` before you could use it. + +#### Example + +```c +uint32_t layer_state_set_user(uint32_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} +``` + +Alternatively, you don't have to immediately "return" the value. This is useful if you want to add multiple tri layers, or if you want to add additional effects. + +```c +uint32_t layer_state_set_user(uint32_t state) { + state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); + state = update_tri_layer_state(state, _RAISE, _SYMB, _SPECIAL); + return state; +} +``` ## Setting the Persistent Default Layer -Do you want to set the default layer, so that it's retained even after you unplug the board? If so, this is the function for you. +Do you want to set the default layer, so that it's retained even after you unplug the board? If so, this is the function for you. -To use this, you would use `set_single_persistent_default_layer(layer)`. If you have a name defined for your layer, you can use that instead (such as _QWERTY, _DVORAK or _COLEMAK). +To use this, you would use `set_single_persistent_default_layer(layer)`. If you have a name defined for your layer, you can use that instead (such as _QWERTY, _DVORAK or _COLEMAK). -This will set the default layer, update the persistent settings, and play a tune if you have [Audio](feature_audio.md) enabled on your board, and the default layer sounds set. +This will set the default layer, update the persistent settings, and play a tune if you have [Audio](feature_audio.md) enabled on your board, and the default layer sounds set. -To configure the default layer sounds, you would want to define this in your `config.h` file, like this: +To configure the default layer sounds, you would want to define this in your `config.h` file, like this: ```c #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ @@ -36,13 +87,12 @@ To configure the default layer sounds, you would want to define this in your `co ## Reseting the keyboard -There is the `RESET` quantum keycode that you can use. But if you want to reset the board as part of a macro, rather than hitting a key separately, you can do that. +There is the `RESET` quantum keycode that you can use. But if you want to reset the board as part of a macro, rather than hitting a key separately, you can do that. And to do so, add `reset_keyboard()` to your function or macro, and this will reset to bootloader. ## Wiping the EEPROM (Persistent Storage) -If you're having issues with Audio, RGB Underglow, backlighting or keys acting weird, then you can reset the EEPROM (persistent setting storage). Bootmagic is one way to do this, but if that isn't enabled, then you can use a custom macro to do so. - -To wipe the EEPROM, run `eeconfig_init()` from your function or macro to reset most of the settings to default. +If you're having issues with Audio, RGB Underglow, backlighting or keys acting weird, then you can reset the EEPROM (persistent setting storage). Bootmagic is one way to do this, but if that isn't enabled, then you can use a custom macro to do so. +To wipe the EEPROM, run `eeconfig_init()` from your function or macro to reset most of the settings to default. From 7222e3691b18128c4822f6bb5db008010f5e41dd Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Thu, 18 Oct 2018 21:35:15 -0700 Subject: [PATCH 203/269] Fix Unicode EEPROM handling so it is consistent. (#4066) * Fix Unicode EEPROM handling so it's consistant * Remove changes to my userspace * Optimize variables used * fix functions * additional cleanup * Add False Flag * rename function --- quantum/process_keycode/process_ucis.c | 6 +++--- quantum/process_keycode/process_unicode.c | 7 +------ .../process_keycode/process_unicode_common.c | 17 +++++++++++------ .../process_keycode/process_unicode_common.h | 1 + quantum/process_keycode/process_unicodemap.c | 1 + 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/quantum/process_keycode/process_ucis.c b/quantum/process_keycode/process_ucis.c index 5de2e41fc3..380199771d 100644 --- a/quantum/process_keycode/process_ucis.c +++ b/quantum/process_keycode/process_ucis.c @@ -93,7 +93,7 @@ void register_ucis(const char *hex) { } bool process_ucis (uint16_t keycode, keyrecord_t *record) { - uint8_t i; + unicode_input_mode_init(); if (!qk_ucis_state.in_progress) return true; @@ -122,7 +122,7 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) { if (keycode == KC_ENT || keycode == KC_SPC || keycode == KC_ESC) { bool symbol_found = false; - for (i = qk_ucis_state.count; i > 0; i--) { + for (uint8_t i = qk_ucis_state.count; i > 0; i--) { register_code (KC_BSPC); unregister_code (KC_BSPC); wait_ms(UNICODE_TYPE_DELAY); @@ -134,7 +134,7 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) { } unicode_input_start(); - for (i = 0; ucis_symbol_table[i].symbol; i++) { + for (uint8_t i = 0; ucis_symbol_table[i].symbol; i++) { if (is_uni_seq (ucis_symbol_table[i].symbol)) { symbol_found = true; register_ucis(ucis_symbol_table[i].code + 2); diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index fd008eca12..f39c4a36e1 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -17,15 +17,10 @@ #include "action_util.h" #include "eeprom.h" -static uint8_t first_flag = 0; - bool process_unicode(uint16_t keycode, keyrecord_t *record) { if (keycode > QK_UNICODE && record->event.pressed) { - if (first_flag == 0) { - set_unicode_input_mode(eeprom_read_byte(EECONFIG_UNICODEMODE)); - first_flag = 1; - } uint16_t unicode = keycode & 0x7FFF; + unicode_input_mode_init(); unicode_input_start(); register_hex(unicode); unicode_input_finish(); diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c index e6620b7ea9..4285d20a19 100644 --- a/quantum/process_keycode/process_unicode_common.c +++ b/quantum/process_keycode/process_unicode_common.c @@ -22,8 +22,7 @@ static uint8_t input_mode; uint8_t mods; -void set_unicode_input_mode(uint8_t os_target) -{ +void set_unicode_input_mode(uint8_t os_target) { input_mode = os_target; eeprom_update_byte(EECONFIG_UNICODEMODE, os_target); } @@ -32,6 +31,14 @@ uint8_t get_unicode_input_mode(void) { return input_mode; } +void unicode_input_mode_init(void) { + static bool first_flag = false; + if (!first_flag) { + input_mode = eeprom_read_byte(EECONFIG_UNICODEMODE); + first_flag = true; + } +} + __attribute__((weak)) void unicode_input_start (void) { // save current mods @@ -104,8 +111,7 @@ void unicode_input_finish (void) { } __attribute__((weak)) -uint16_t hex_to_keycode(uint8_t hex) -{ +uint16_t hex_to_keycode(uint8_t hex) { if (hex == 0x0) { return KC_0; } else if (hex < 0xA) { @@ -123,8 +129,7 @@ void register_hex(uint16_t hex) { } } -void send_unicode_hex_string(const char *str) -{ +void send_unicode_hex_string(const char *str) { if (!str) { return; } // Safety net while (*str) { diff --git a/quantum/process_keycode/process_unicode_common.h b/quantum/process_keycode/process_unicode_common.h index 814b60c573..e78e1cec6c 100644 --- a/quantum/process_keycode/process_unicode_common.h +++ b/quantum/process_keycode/process_unicode_common.h @@ -28,6 +28,7 @@ static uint8_t input_mode; void set_unicode_input_mode(uint8_t os_target); uint8_t get_unicode_input_mode(void); +void unicode_input_mode_init(void); void unicode_input_start(void); void unicode_input_finish(void); void register_hex(uint16_t hex); diff --git a/quantum/process_keycode/process_unicodemap.c b/quantum/process_keycode/process_unicodemap.c index 47c27b9117..ab5717ba3a 100644 --- a/quantum/process_keycode/process_unicodemap.c +++ b/quantum/process_keycode/process_unicodemap.c @@ -45,6 +45,7 @@ __attribute__((weak)) void unicode_map_input_error() {} bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { + unicode_input_mode_init(); uint8_t input_mode = get_unicode_input_mode(); if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { const uint32_t* map = unicode_map; From ae31eb564a340cab53f18fe5290ee5033704be1f Mon Sep 17 00:00:00 2001 From: Trigotometry <25544371+Trigotometry@users.noreply.github.com> Date: Sat, 20 Oct 2018 02:40:46 +1100 Subject: [PATCH 204/269] Keymap: Trigotometry's Preonic (#4158) * adding my keymap * updated pull request comments from dashna, including redundancies and DVORAK entirely * changed over visual representation to use 'LAYOUT_preonic_grid()' * added a ReadMe and commented out AUDIO_ENABLED related stuff in keymap.c until I can align with current QMK standards * Update readme.md * readme corrections and adjustments --- .../preonic/keymaps/trigotometry/config.h | 8 + .../preonic/keymaps/trigotometry/keymap.c | 165 ++++++++++++++++++ .../preonic/keymaps/trigotometry/readme.md | 75 ++++++++ .../preonic/keymaps/trigotometry/rules.mk | 2 + 4 files changed, 250 insertions(+) create mode 100644 keyboards/preonic/keymaps/trigotometry/config.h create mode 100644 keyboards/preonic/keymaps/trigotometry/keymap.c create mode 100644 keyboards/preonic/keymaps/trigotometry/readme.md create mode 100644 keyboards/preonic/keymaps/trigotometry/rules.mk diff --git a/keyboards/preonic/keymaps/trigotometry/config.h b/keyboards/preonic/keymaps/trigotometry/config.h new file mode 100644 index 0000000000..eaf6997db1 --- /dev/null +++ b/keyboards/preonic/keymaps/trigotometry/config.h @@ -0,0 +1,8 @@ +#pragma once + +#define STARTUP_SONG SONG(PREONIC_SOUND) +#define MUSIC_MASK (keycode != KC_NO) + +#define FORCE_NKRO 1 +#define PREVENT_STUCK_MODIFIERS +#define GRAVE_ESC_GUI_OVERRIDE \ No newline at end of file diff --git a/keyboards/preonic/keymaps/trigotometry/keymap.c b/keyboards/preonic/keymaps/trigotometry/keymap.c new file mode 100644 index 0000000000..31cee4a4cd --- /dev/null +++ b/keyboards/preonic/keymaps/trigotometry/keymap.c @@ -0,0 +1,165 @@ +#include QMK_KEYBOARD_H +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Layer declarations +enum preonic_layers { + _QWERTY = 1, + _GAMING = 2, + _LOWER = 3, + _RAISE = 4, +}; + +enum preonic_keycodes { + QWERTY = SAFE_RANGE, + GAMING, + LOWER, + RAISE, +}; + +// QMK predefined macros +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * ,-----------------------------------------------------------------------------------. + * | GEsc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Shft | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |SFTENT| Z | X | C | V | B | N | M | , | . | / | Entr | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Ctrl | Alt | Supr |Lower | Space | Raise| Left | Down | Up | Rght | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_preonic_grid( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + SFT_ENT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \ + XXXXXXX, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Gaming + * ,-----------------------------------------------------------------------------------. + * | Grve | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Shft | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shft | Z | X | C | V | B | N | M | , | . | / | Entr | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Ctrl | Alt | Alt |Lower | Space | Raise| Left | Down | Up | Rght | + * `-----------------------------------------------------------------------------------' + */ +[_GAMING] = LAYOUT_preonic_grid( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ + KC_LCTL, KC_LCTL, KC_LALT, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | | * | / | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | VolD | Up | VolU | | | 7 | 8 | 9 | - | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | Left | Down | Rght | | | 4 | 5 | 6 | + | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | Prev | Play | Skip | | | 1 | 2 | 3 | = | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | Supr | | | 0 | Home |PageDn|PageUp| End | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_preonic_grid( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_PAST, KC_PSLS, XXXXXXX, KC_DEL, \ + _______, XXXXXXX, KC_VOLD, KC_UP, KC_VOLU, XXXXXXX, XXXXXXX, KC_7, KC_8, KC_9, KC_PMNS, KC_BSPC, \ + _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_4, KC_5, KC_6, KC_PPLS, XXXXXXX, \ + _______, XXXXXXX, KC_MRWD, KC_MPLY, KC_MFFD, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_PEQL, KC_ENT, \ + _______, _______, _______, KC_LGUI, _______, _______, _______, KC_0, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | \ | | | / | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | [ | { | ( | < | > | ) | } | ] | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | + | - | _ | = | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | |Qwerty| Game | | Reset| + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_preonic_grid( + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 , \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, XXXXXXX, XXXXXXX, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, _______, \ + _______, KC_PIPE, KC_LBRC, KC_LCBR, KC_LPRN, KC_LABK, KC_RABK, KC_RPRN, KC_RCBR, KC_RBRC, KC_PIPE, XXXXXXX, \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_PPLS, KC_PMNS, KC_UNDS, KC_EQL, XXXXXXX, XXXXXXX, XXXXXXX, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, QWERTY , GAMING, XXXXXXX, RESET \ +) + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + } else { + layer_off(_LOWER); + } + return false; + break; + + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + return false; + break; + + case GAMING: + if (record->event.pressed) { + set_single_persistent_default_layer(_GAMING); + } + return false; + break; + + } + return true; +}; + +// NFI how to bring this inline with current QMK standards yet, or it's redundant and don't use it. +// #ifdef AUDIO_ENABLE +// float tone_startup[][2] = { +// {NOTE_D5, 8}, +// {NOTE_E6, 8}, +// {NOTE_D6, 8}, +// {NOTE_E5, 8} +// }; + +// void startup_user() +// { +// _delay_ms(20); // gets rid of tick +// PLAY_SONG(tone_startup); +// } +// #endif diff --git a/keyboards/preonic/keymaps/trigotometry/readme.md b/keyboards/preonic/keymaps/trigotometry/readme.md new file mode 100644 index 0000000000..aff01a22ea --- /dev/null +++ b/keyboards/preonic/keymaps/trigotometry/readme.md @@ -0,0 +1,75 @@ +# Trigotometry's v1.0 + +This layout is the confluence of the standard Preonic QWERTY layout and some of my own tweaks to make it's software as logical and straight cut as it's physical presence, at least in my eyes. Some might say there's wasted space, though possibly true, I believe in keeping it minimal and only adding what is really needed. So if, like me, you're also beginning your journey of coding and enjoy some downtime with friends on the battlefield I think you'll find this layout a stellar place to kick off your customisation. + +## Qwerty + /* Qwerty + * ,-----------------------------------------------------------------------------------. + * | GEsc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Shft | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |SFTENT| Z | X | C | V | B | N | M | , | . | / | ENT | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Ctrl | Alt | Supr |Lower | Space | Raise| Left | Down | Up | Rght | + * `----------------------------------------------------------------------------------- + */ +Take note of the dual Enter keys, located where normally there'd be a pair of Shifts. I did this to ensure the alphas stayed in the same spot when compared to a staggered and standard board. My brain found it easier to switch the mods across keyboard than the relative position in the alphas, however it's easy to reverse the Enters/Shifts and you'll be back an (nearly) square one! + +Also, LEnter acts as a Shift if it's held. + + + +## Gaming + /* Gaming + * ,-----------------------------------------------------------------------------------. + * | Grve | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Shft | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shft | Z | X | C | V | B | N | M | , | . | / | Entr | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Ctrl | Alt | Alt |Lower | Space | Raise| Left | Down | Up | Rght | + * `-----------------------------------------------------------------------------------' + */ +Honestly it's pretty standard, however I've doubled up on the important modifiers and removed the Super. It's still accessable readily by holding Lower and the key to it's left. Neato? I thought so. + + + +## Raise Layer + /* Raise + * ,-----------------------------------------------------------------------------------. + * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | \ | | | / | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | [ | { | ( | < | > | ) | } | ] | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | + | - | _ | = | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | |Qwerty| Game | | Reset| + * `-----------------------------------------------------------------------------------' + */ +Pretty self explanatory I think. + + + +## Lower Layer + /* Lower + * ,-----------------------------------------------------------------------------------. + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | | * | / | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | VolD | Up | VolU | | | 7 | 8 | 9 | - | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | Left | Down | Rght | | | 4 | 5 | 6 | + | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | Prev | Play | Skip | | | 1 | 2 | 3 | = | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | Supr | | | 0 | Home |PageDn|PageUp| End | + * `-----------------------------------------------------------------------------------' + */ + Music controls and arrows in prime location. F1-F6 there for extra mappings when in the Gaming layer. diff --git a/keyboards/preonic/keymaps/trigotometry/rules.mk b/keyboards/preonic/keymaps/trigotometry/rules.mk new file mode 100644 index 0000000000..a6bcd56379 --- /dev/null +++ b/keyboards/preonic/keymaps/trigotometry/rules.mk @@ -0,0 +1,2 @@ +#Build Options +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) From 6c6897f7789f67076ea2f3f9cfe47da814e599fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Fri, 19 Oct 2018 17:42:01 +0200 Subject: [PATCH 205/269] Keymap: Update whitefox/konstantin keymap (#4169) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * td_fn_ctrl_* → td_fn_rctl_* * Swap Fn and RCtrl * Change key combination for Command feature * Replace register/unregister_code call with tap_code * Add virtual desktop controls to keymap * Add/close virtual desktop on Fn+GUI tap dance --- .../whitefox/keymaps/konstantin/config.h | 3 ++ .../whitefox/keymaps/konstantin/keymap.c | 34 +++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/keyboards/whitefox/keymaps/konstantin/config.h b/keyboards/whitefox/keymaps/konstantin/config.h index ad40105a7c..725609b465 100644 --- a/keyboards/whitefox/keymaps/konstantin/config.h +++ b/keyboards/whitefox/keymaps/konstantin/config.h @@ -12,3 +12,6 @@ #define MOUSEKEY_TIME_TO_MAX 50 #define MOUSEKEY_WHEEL_MAX_SPEED 1 #define MOUSEKEY_WHEEL_TIME_TO_MAX 50 + +#undef IS_COMMAND +#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL))) diff --git a/keyboards/whitefox/keymaps/konstantin/keymap.c b/keyboards/whitefox/keymaps/konstantin/keymap.c index 6998798e3c..247bc6bbff 100644 --- a/keyboards/whitefox/keymaps/konstantin/keymap.c +++ b/keyboards/whitefox/keymaps/konstantin/keymap.c @@ -2,9 +2,12 @@ #define FN MO(L_FN) #define FN_CAPS LT(L_FN, KC_CAPS) -#define FN_RCTL TD(TD_FN_RCTL) // Unused -#define RLALT TD(TD_RLALT) // Unused +#define FN_RCTL TD(TD_FN_RCTL) // Unused +#define RLALT TD(TD_RLALT) // Unused +#define DESKTOP TD(TD_DESKTOP) +#define DESKT_L LCTL(LGUI(KC_LEFT)) +#define DESKT_R LCTL(LGUI(KC_RGHT)) #define TOP LCTL(KC_HOME) #define BOTTOM LCTL(KC_END) @@ -46,8 +49,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) layer_invert(L_NUMPAD); bool num_lock = host_keyboard_leds() & 1<count & 1) { layer_on(L_FN); } if (state->count & 2) { register_code(KC_RCTL); } } -void td_fn_ctrl_reset(qk_tap_dance_state_t *state, void *user_data) +void td_fn_rctl_reset(qk_tap_dance_state_t *state, void *user_data) { if (state->count & 1) { layer_off(L_FN); } if (state->count & 2) { unregister_code(KC_RCTL); } } qk_tap_dance_action_t tap_dance_actions[] = { - [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_fn_ctrl_finished, td_fn_ctrl_reset), + [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_fn_rctl_finished, td_fn_rctl_reset), [TD_RLALT] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, KC_LALT), + [TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop }; const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -89,17 +93,17 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------| * |FnCaps| A | S | D | F | G | H | J | K | L | ; | ' | Enter |PgU| * |---------------------------------------------------------------| - * | LShift | Z | X | C | V | B | N | M | , | . | / | Fn | ↑ |PgD| + * | LShift | Z | X | C | V | B | N | M | , | . | / |RCtrl | ↑ |PgD| * |---------------------------------------------------------------| - * |LCtl|LGui|LAlt| Space |RAlt|RCtl| | ← | ↓ | → | + * |LCtl|LGui|LAlt| Space |RAlt| Fn | | ← | ↓ | → | * `---------------------------------------------------------------' */ [L_BASE] = LAYOUT_truefox( \ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, KC_PSCR, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, KC_DEL, \ FN_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGUP, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,FN, KC_UP, KC_PGDN, \ - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RCTL, KC_UP, KC_PGDN, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,FN, KC_LEFT,KC_DOWN,KC_RGHT \ ), /* Function layer @@ -110,17 +114,17 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------| * | |M← |M↓ |M→ |MW↑| | | | | | | | |Top| * |---------------------------------------------------------------| - * | |MA0|MA2|MW←|MW→| | | |VoD|VoU|Mut| |PgU|Btm| + * | |MA0|MA2|MW←|MW→| | | |VoD|VoU|Mut| App |PgU|Btm| * |---------------------------------------------------------------| - * | | | | MW↓ | |Menu| |Hom|PgD|End| + * | |Dstp|Dst←| MW↓ |Dst→| | |Hom|PgD|End| * `---------------------------------------------------------------' */ [L_FN] = LAYOUT_truefox( \ _______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK,KC_PAUS, \ KC_BTN4,KC_BTN2,KC_MS_U,KC_BTN1,KC_BTN3,KC_BTN5,_______,_______,_______,KC_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,CLEAR, KC_INS, \ _______,KC_MS_L,KC_MS_D,KC_MS_R,KC_WH_U,_______,_______,_______,_______,_______,_______,_______, _______, TOP, \ - _______, KC_ACL0,KC_ACL2,KC_WH_L,KC_WH_R,_______,_______,_______,KC_VOLD,KC_VOLU,KC_MUTE,_______, KC_PGUP,BOTTOM, \ - _______,_______,_______, KC_WH_D, _______,KC_APP, KC_HOME,KC_PGDN,KC_END \ + _______, KC_ACL0,KC_ACL2,KC_WH_L,KC_WH_R,_______,_______,_______,KC_VOLD,KC_VOLU,KC_MUTE,KC_APP, KC_PGUP,BOTTOM, \ + _______,DESKTOP,DESKT_L, KC_WH_D, DESKT_R,_______, KC_HOME,KC_PGDN,KC_END \ ), /* Numpad layer From efc88a0b16055dc0b2f94da8c46ea8fadeab70f4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 20 Oct 2018 02:43:55 +1100 Subject: [PATCH 206/269] Keymap: qwerty_code_friendly: use numpad layout for f-keys (#4170) --- .../ergodox/qwerty_code_friendly/keymap.c | 26 +++++++++---------- .../ergodox/qwerty_code_friendly/readme.md | 13 ++++++---- lib/chibios-contrib | 2 +- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/layouts/community/ergodox/qwerty_code_friendly/keymap.c b/layouts/community/ergodox/qwerty_code_friendly/keymap.c index f882d0e002..2a441be0e6 100644 --- a/layouts/community/ergodox/qwerty_code_friendly/keymap.c +++ b/layouts/community/ergodox/qwerty_code_friendly/keymap.c @@ -403,16 +403,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, K80(L1K2), K80(L1K3), KC_TRNS, KC_TRNS, KC_TRNS ), -/* Keymap 2: Numbers, media and mouse keys +/* Keymap 2: FKeys, media & mouse keys * * .--------------------------------------------------. .--------------------------------------------------. - * | | 1 | 2 | 3 | 4 | 5 | | | Mute | 6 | 7 | 8 | 9 | 0 | | + * | | | | | | | | | Mute | | F10 | F11 | F12 | | | * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | |MWhlUp| |VolUp | | | | | | | + * | | | | MsUp | | |MWhlUp| |VolUp | | F7 | F8 | F9 | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| Left | Down | Up |Right | | | + * | | |MsLeft|MsDown|MsRght| |------| |------| | F4 | F5 | F6 | | | * |--------+------+------+------+------+------|MWhlDn| |VolDn |------+------+------+------+------+--------| - * | | | Rclk | Mclk | Lclk | | | | | | | | | | | + * | | | Rclk | Mclk | Lclk | | | | | | F1 | F2 | F3 | | | * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------' * | | | | | | | | | | | | * '----------------------------------' '----------------------------------' @@ -427,7 +427,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MEDIA, MOUSE & NUMBERS */ [LAYER_MDIA] = LAYOUT_ergodox_76_or_80( /* left hand */ - KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN3, KC_BTN1, KC_TRNS, KC_WH_D, @@ -436,10 +436,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { K80(L2K0), K80(L2K1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* right hand */ - KC_MUTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, - KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, - KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MUTE, KC_TRNS, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, + KC_VOLU, KC_TRNS, KC_F7, KC_F8, KC_F9, KC_TRNS, KC_TRNS, + KC_TRNS, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_TRNS, + KC_VOLD, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MRWD, KC_MFFD, KC_MPRV, K80(L2K2), K80(L2K3), @@ -448,7 +448,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 3: Entire Words (one for each key) * * .--------------------------------------------------. .--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | + * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| * | | Q | W | E | R | T | | | | Y | U | I | O | P | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -470,7 +470,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FKEY & WORDS */ [LAYER_FKEY] = LAYOUT_ergodox_76_or_80( /* left hand */ - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, M_WORD_Q, M_WORD_W, M_WORD_E, M_WORD_R, M_WORD_T, KC_TRNS, KC_TRNS, M_WORD_A, M_WORD_S, M_WORD_D, M_WORD_F, M_WORD_G, KC_TRNS, M_WORD_Z, M_WORD_X, M_WORD_C, M_WORD_V, M_WORD_B, KC_TRNS, @@ -479,7 +479,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { K80(L3K0), K80(L3K1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* right hand */ - KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS, M_WORD_Y, M_WORD_U, M_WORD_I, M_WORD_O, M_WORD_P, KC_TRNS, M_WORD_H, M_WORD_J, M_WORD_K, M_WORD_L, KC_TRNS, KC_TRNS, KC_TRNS, M_WORD_N, M_WORD_M, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/layouts/community/ergodox/qwerty_code_friendly/readme.md b/layouts/community/ergodox/qwerty_code_friendly/readme.md index 8bc15dd310..23afa656f7 100644 --- a/layouts/community/ergodox/qwerty_code_friendly/readme.md +++ b/layouts/community/ergodox/qwerty_code_friendly/readme.md @@ -131,13 +131,13 @@ Notes: ``` .--------------------------------------------------. .--------------------------------------------------. -| | 1 | 2 | 3 | 4 | 5 | | | Mute | 6 | 7 | 8 | 9 | 0 | | +| | | | | | | | | Mute | | F10 | F11 | F12 | | | |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| -| | | | MsUp | | |MWhlUp| |VolUp | | | | | | | +| | | | MsUp | | |MWhlUp| |VolUp | | F7 | F8 | F9 | | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| | |MsLeft|MsDown|MsRght| |------| |------| Left | Down | Up |Right | | | +| | |MsLeft|MsDown|MsRght| |------| |------| | F4 | F5 | F6 | | | |--------+------+------+------+------+------|MWhlDn| |VolDn |------+------+------+------+------+--------| -| | | Rclk | Mclk | Lclk | | | | | | | | | | | +| | | Rclk | Mclk | Lclk | | | | | | F1 | F2 | F3 | | | '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------' | | | | | | | | | | | | '----------------------------------' '----------------------------------' @@ -158,7 +158,7 @@ eg: `-DCFQ_WORD_E=\"my@email.com\"` ``` .--------------------------------------------------. .--------------------------------------------------. -| | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | +| | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| | | Q | W | E | R | T | | | | Y | U | I | O | P | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -179,6 +179,9 @@ eg: `-DCFQ_WORD_E=\"my@email.com\"` ## Changelog +- 2018/10/19 + Move F-Keys to numpad like layout. + - 2018/05/29 Add number keys for cases when keypad numbers are handled differently. diff --git a/lib/chibios-contrib b/lib/chibios-contrib index ede48346ee..2de67e2f4a 160000 --- a/lib/chibios-contrib +++ b/lib/chibios-contrib @@ -1 +1 @@ -Subproject commit ede48346eee4b8d6847c19bc01420bee76a5e486 +Subproject commit 2de67e2f4a268eae072c5fd76a1b160124cee4f6 From 78b48371aac3bc4ba468c9f7efcb742bafb81965 Mon Sep 17 00:00:00 2001 From: Kosuke Adachi Date: Sat, 20 Oct 2018 01:12:55 +0900 Subject: [PATCH 207/269] Keyboard: Update logo and commonize it (#4151) * Update logo and commonize it * Move the glcdfont.c to the lib and add it to the SRC values of the rules.mk in the keymap folders * Add static --- keyboards/crkbd/keymaps/default/rules.mk | 15 +- keyboards/crkbd/keymaps/drashna/glcdfont.c | 244 ------------------ keyboards/crkbd/keymaps/drashna/rules.mk | 15 +- keyboards/crkbd/keymaps/like_jis/glcdfont.c | 244 ------------------ keyboards/crkbd/keymaps/like_jis/keymap.c | 6 +- keyboards/crkbd/keymaps/like_jis/rules.mk | 15 +- .../crkbd/{keymaps/default => lib}/glcdfont.c | 113 ++++---- keyboards/crkbd/ssd1306.c | 3 +- 8 files changed, 85 insertions(+), 570 deletions(-) delete mode 100644 keyboards/crkbd/keymaps/drashna/glcdfont.c delete mode 100644 keyboards/crkbd/keymaps/like_jis/glcdfont.c rename keyboards/crkbd/{keymaps/default => lib}/glcdfont.c (76%) diff --git a/keyboards/crkbd/keymaps/default/rules.mk b/keyboards/crkbd/keymaps/default/rules.mk index 0edf1181f0..5ee01e89e1 100644 --- a/keyboards/crkbd/keymaps/default/rules.mk +++ b/keyboards/crkbd/keymaps/default/rules.mk @@ -4,24 +4,25 @@ # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = no # Mouse keys(+4700) -EXTRAKEY_ENABLE = no # Audio control and System control(+450) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration +COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SWAP_HANDS_ENABLE = no # Enable one-hand typing +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # If you want to change the display of OLED, you need to change here -SRC += ./lib/rgb_state_reader.c \ +SRC += ./lib/glcdfont.c \ + ./lib/rgb_state_reader.c \ ./lib/layer_state_reader.c \ ./lib/logo_reader.c \ ./lib/keylogger.c \ diff --git a/keyboards/crkbd/keymaps/drashna/glcdfont.c b/keyboards/crkbd/keymaps/drashna/glcdfont.c deleted file mode 100644 index 4e7b27bc0c..0000000000 --- a/keyboards/crkbd/keymaps/drashna/glcdfont.c +++ /dev/null @@ -1,244 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#ifndef FONT5X7_H -#define FONT5X7_H - -#ifdef __AVR__ - #include - #include -#elif defined(ESP8266) - #include -#else - #define PROGMEM -#endif - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, -0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, -0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, -0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, -0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, -0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, -0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, -0x00, 0x18, 0x24, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, -0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, -0x26, 0x29, 0x79, 0x29, 0x26, 0x00, -0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, -0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, -0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, -0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, -0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, -0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, -0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, -0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, -0x60, 0x60, 0x60, 0x60, 0x60, 0x00, -0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, -0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, -0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, -0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, -0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, -0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, -0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, -0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x07, 0x00, 0x00, -0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, -0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, -0x23, 0x13, 0x08, 0x64, 0x62, 0x00, -0x36, 0x49, 0x56, 0x20, 0x50, 0x00, -0x00, 0x08, 0x07, 0x03, 0x00, 0x00, -0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, -0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, -0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, -0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, -0x00, 0x80, 0x70, 0x30, 0x00, 0x00, -0x08, 0x08, 0x08, 0x08, 0x08, 0x00, -0x00, 0x00, 0x60, 0x60, 0x00, 0x00, -0x20, 0x10, 0x08, 0x04, 0x02, 0x00, -0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, -0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, -0x72, 0x49, 0x49, 0x49, 0x46, 0x00, -0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, -0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, -0x27, 0x45, 0x45, 0x45, 0x39, 0x00, -0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, -0x41, 0x21, 0x11, 0x09, 0x07, 0x00, -0x36, 0x49, 0x49, 0x49, 0x36, 0x00, -0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, -0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -0x00, 0x40, 0x34, 0x00, 0x00, 0x00, -0x00, 0x08, 0x14, 0x22, 0x41, 0x00, -0x14, 0x14, 0x14, 0x14, 0x14, 0x00, -0x00, 0x41, 0x22, 0x14, 0x08, 0x00, -0x02, 0x01, 0x59, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, -0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, -0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, -0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, -0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, -0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, -0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, -0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, -0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, -0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, -0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, -0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, -0x26, 0x49, 0x49, 0x49, 0x32, 0x00, -0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, -0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, -0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, -0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, -0x63, 0x14, 0x08, 0x14, 0x63, 0x00, -0x03, 0x04, 0x78, 0x04, 0x03, 0x00, -0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, -0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, -0x02, 0x04, 0x08, 0x10, 0x20, 0x00, -0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, -0x04, 0x02, 0x01, 0x02, 0x04, 0x00, -0x40, 0x40, 0x40, 0x40, 0x40, 0x00, -0x00, 0x03, 0x07, 0x08, 0x00, 0x00, -0x20, 0x54, 0x54, 0x78, 0x40, 0x00, -0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, -0x38, 0x44, 0x44, 0x44, 0x28, 0x00, -0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, -0x38, 0x54, 0x54, 0x54, 0x18, 0x00, -0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, -0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, -0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, -0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, -0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, -0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, -0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, -0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, -0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, -0x38, 0x44, 0x44, 0x44, 0x38, 0x00, -0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, -0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, -0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, -0x48, 0x54, 0x54, 0x54, 0x24, 0x00, -0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, -0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, -0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, -0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, -0x44, 0x28, 0x10, 0x28, 0x44, 0x00, -0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, -0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, -0x00, 0x08, 0x36, 0x41, 0x00, 0x00, -0x00, 0x00, 0x77, 0x00, 0x00, 0x00, -0x00, 0x41, 0x36, 0x08, 0x00, 0x00, -0x02, 0x01, 0x02, 0x04, 0x02, 0x00, -0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF, -0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00, -0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE, -0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0, -0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF, -0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70, -0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E, -0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0, -0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E, -0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, -0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, -0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, -0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, -0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, -0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, -0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, -0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, -0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x03, -0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE, -0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F, -0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07, -0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D, -0x0B, 0x07, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, -0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07, -0x01, 0x01, 0x01, 0x03, 0x06, 0x06, -0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E, -0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30, -0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC, -0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8, -0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0, -0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC, -0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8, -0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0, -0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC, -0x7C, 0x38, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, -0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, -0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, -0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, -0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, -0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, -0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x03, 0x07, -0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C, -0x78, 0x70, 0x70, 0x70, 0x70, 0x70, -0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E, -0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38, -0x38, 0x18, 0x0C, 0x06, 0x03, 0x01, -0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F, -0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03, -0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00, -0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E, -0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F, -0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C, -0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#endif // FONT5X7_H diff --git a/keyboards/crkbd/keymaps/drashna/rules.mk b/keyboards/crkbd/keymaps/drashna/rules.mk index f490aa2ea8..8fca704489 100644 --- a/keyboards/crkbd/keymaps/drashna/rules.mk +++ b/keyboards/crkbd/keymaps/drashna/rules.mk @@ -4,24 +4,25 @@ # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = no # Mouse keys(+4700) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SWAP_HANDS_ENABLE = no # Enable one-hand typing +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # If you want to change the display of OLED, you need to change here -SRC += ./lib/rgb_state_reader.c \ +SRC += ./lib/glcdfont.c \ + ./lib/rgb_state_reader.c \ ./lib/layer_state_reader.c \ ./lib/logo_reader.c \ ./lib/keylogger.c \ diff --git a/keyboards/crkbd/keymaps/like_jis/glcdfont.c b/keyboards/crkbd/keymaps/like_jis/glcdfont.c deleted file mode 100644 index 4e7b27bc0c..0000000000 --- a/keyboards/crkbd/keymaps/like_jis/glcdfont.c +++ /dev/null @@ -1,244 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#ifndef FONT5X7_H -#define FONT5X7_H - -#ifdef __AVR__ - #include - #include -#elif defined(ESP8266) - #include -#else - #define PROGMEM -#endif - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, -0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, -0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, -0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, -0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, -0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, -0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, -0x00, 0x18, 0x24, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, -0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, -0x26, 0x29, 0x79, 0x29, 0x26, 0x00, -0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, -0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, -0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, -0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, -0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, -0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, -0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, -0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, -0x60, 0x60, 0x60, 0x60, 0x60, 0x00, -0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, -0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, -0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, -0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, -0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, -0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, -0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, -0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x07, 0x00, 0x00, -0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, -0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, -0x23, 0x13, 0x08, 0x64, 0x62, 0x00, -0x36, 0x49, 0x56, 0x20, 0x50, 0x00, -0x00, 0x08, 0x07, 0x03, 0x00, 0x00, -0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, -0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, -0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, -0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, -0x00, 0x80, 0x70, 0x30, 0x00, 0x00, -0x08, 0x08, 0x08, 0x08, 0x08, 0x00, -0x00, 0x00, 0x60, 0x60, 0x00, 0x00, -0x20, 0x10, 0x08, 0x04, 0x02, 0x00, -0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, -0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, -0x72, 0x49, 0x49, 0x49, 0x46, 0x00, -0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, -0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, -0x27, 0x45, 0x45, 0x45, 0x39, 0x00, -0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, -0x41, 0x21, 0x11, 0x09, 0x07, 0x00, -0x36, 0x49, 0x49, 0x49, 0x36, 0x00, -0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, -0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -0x00, 0x40, 0x34, 0x00, 0x00, 0x00, -0x00, 0x08, 0x14, 0x22, 0x41, 0x00, -0x14, 0x14, 0x14, 0x14, 0x14, 0x00, -0x00, 0x41, 0x22, 0x14, 0x08, 0x00, -0x02, 0x01, 0x59, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, -0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, -0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, -0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, -0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, -0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, -0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, -0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, -0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, -0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, -0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, -0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, -0x26, 0x49, 0x49, 0x49, 0x32, 0x00, -0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, -0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, -0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, -0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, -0x63, 0x14, 0x08, 0x14, 0x63, 0x00, -0x03, 0x04, 0x78, 0x04, 0x03, 0x00, -0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, -0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, -0x02, 0x04, 0x08, 0x10, 0x20, 0x00, -0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, -0x04, 0x02, 0x01, 0x02, 0x04, 0x00, -0x40, 0x40, 0x40, 0x40, 0x40, 0x00, -0x00, 0x03, 0x07, 0x08, 0x00, 0x00, -0x20, 0x54, 0x54, 0x78, 0x40, 0x00, -0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, -0x38, 0x44, 0x44, 0x44, 0x28, 0x00, -0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, -0x38, 0x54, 0x54, 0x54, 0x18, 0x00, -0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, -0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, -0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, -0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, -0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, -0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, -0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, -0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, -0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, -0x38, 0x44, 0x44, 0x44, 0x38, 0x00, -0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, -0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, -0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, -0x48, 0x54, 0x54, 0x54, 0x24, 0x00, -0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, -0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, -0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, -0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, -0x44, 0x28, 0x10, 0x28, 0x44, 0x00, -0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, -0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, -0x00, 0x08, 0x36, 0x41, 0x00, 0x00, -0x00, 0x00, 0x77, 0x00, 0x00, 0x00, -0x00, 0x41, 0x36, 0x08, 0x00, 0x00, -0x02, 0x01, 0x02, 0x04, 0x02, 0x00, -0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF, -0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00, -0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE, -0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0, -0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF, -0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70, -0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E, -0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0, -0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E, -0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, -0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, -0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, -0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, -0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, -0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, -0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, -0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, -0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x03, -0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE, -0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F, -0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07, -0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D, -0x0B, 0x07, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, -0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07, -0x01, 0x01, 0x01, 0x03, 0x06, 0x06, -0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E, -0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30, -0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC, -0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8, -0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0, -0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC, -0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8, -0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0, -0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC, -0x7C, 0x38, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, -0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, -0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, -0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, -0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, -0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, -0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x03, 0x07, -0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C, -0x78, 0x70, 0x70, 0x70, 0x70, 0x70, -0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E, -0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38, -0x38, 0x18, 0x0C, 0x06, 0x03, 0x01, -0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F, -0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03, -0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00, -0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E, -0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F, -0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C, -0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#endif // FONT5X7_H diff --git a/keyboards/crkbd/keymaps/like_jis/keymap.c b/keyboards/crkbd/keymaps/like_jis/keymap.c index 90e5b7ec17..05d31845c8 100644 --- a/keyboards/crkbd/keymaps/like_jis/keymap.c +++ b/keyboards/crkbd/keymaps/like_jis/keymap.c @@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { int RGB_current_mode; // Setting ADJUST layer RGB back to default -inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { +static inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { layer_on(layer3); } else { @@ -155,7 +155,7 @@ void matrix_scan_user(void) { iota_gfx_task(); } -inline void matrix_render_user(struct CharacterMatrix *matrix) { +static inline void matrix_render_user(struct CharacterMatrix *matrix) { if (is_master) { // If you want to change the display of OLED, you need to change here matrix_write_ln(matrix, read_layer_state()); @@ -171,7 +171,7 @@ inline void matrix_render_user(struct CharacterMatrix *matrix) { } } -inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { +static inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { if (memcmp(dest->display, source->display, sizeof(dest->display))) { memcpy(dest->display, source->display, sizeof(dest->display)); dest->dirty = true; diff --git a/keyboards/crkbd/keymaps/like_jis/rules.mk b/keyboards/crkbd/keymaps/like_jis/rules.mk index 0edf1181f0..5ee01e89e1 100644 --- a/keyboards/crkbd/keymaps/like_jis/rules.mk +++ b/keyboards/crkbd/keymaps/like_jis/rules.mk @@ -4,24 +4,25 @@ # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = no # Mouse keys(+4700) -EXTRAKEY_ENABLE = no # Audio control and System control(+450) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration +COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SWAP_HANDS_ENABLE = no # Enable one-hand typing +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # If you want to change the display of OLED, you need to change here -SRC += ./lib/rgb_state_reader.c \ +SRC += ./lib/glcdfont.c \ + ./lib/rgb_state_reader.c \ ./lib/layer_state_reader.c \ ./lib/logo_reader.c \ ./lib/keylogger.c \ diff --git a/keyboards/crkbd/keymaps/default/glcdfont.c b/keyboards/crkbd/lib/glcdfont.c similarity index 76% rename from keyboards/crkbd/keymaps/default/glcdfont.c rename to keyboards/crkbd/lib/glcdfont.c index 4e7b27bc0c..f7567c57c6 100644 --- a/keyboards/crkbd/keymaps/default/glcdfont.c +++ b/keyboards/crkbd/lib/glcdfont.c @@ -14,8 +14,7 @@ #endif // Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { +const unsigned char font[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, @@ -119,7 +118,7 @@ static const unsigned char font[] PROGMEM = { 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, -0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, +0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, @@ -128,8 +127,8 @@ static const unsigned char font[] PROGMEM = { 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, -0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, -0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, +0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, +0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, @@ -145,24 +144,24 @@ static const unsigned char font[] PROGMEM = { 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF, -0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00, -0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE, -0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0, -0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF, -0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70, -0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E, -0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0, -0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E, -0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, -0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, +0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0, +0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, +0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, +0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, +0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, +0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, +0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0, +0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, +0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0, +0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, +0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, +0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, +0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, @@ -177,25 +176,25 @@ static const unsigned char font[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x03, -0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE, -0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F, -0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07, -0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D, -0x0B, 0x07, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, -0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07, -0x01, 0x01, 0x01, 0x03, 0x06, 0x06, -0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E, -0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30, -0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC, -0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8, -0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0, -0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC, -0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8, -0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0, -0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC, -0x7C, 0x38, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFE, +0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x81, +0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF, +0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF, +0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, +0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, +0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, +0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, +0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, @@ -209,26 +208,26 @@ static const unsigned char font[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F, +0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, +0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, +0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, +0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C, +0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x03, 0x07, 0x07, +0x07, 0x07, 0x07, 0x07, 0x07, 0x07, +0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +0x01, 0x03, 0x07, 0x07, 0x07, 0x07, +0x07, 0x07, 0x07, 0x07, 0x03, 0x01, +0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x03, 0x07, -0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00, +0x00, 0x07, 0x07, 0x07, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x07, 0x07, +0x07, 0x00, 0x00, 0x00, 0x01, 0x03, +0x07, 0x07, 0x07, 0x07, 0x07, 0x07, +0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C, -0x78, 0x70, 0x70, 0x70, 0x70, 0x70, -0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E, -0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38, -0x38, 0x18, 0x0C, 0x06, 0x03, 0x01, -0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F, -0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03, -0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00, -0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E, -0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F, -0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C, -0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/keyboards/crkbd/ssd1306.c b/keyboards/crkbd/ssd1306.c index b8f9512e3f..205ce67a9e 100644 --- a/keyboards/crkbd/ssd1306.c +++ b/keyboards/crkbd/ssd1306.c @@ -4,7 +4,6 @@ #include "i2c.h" #include #include "print.h" -#include "glcdfont.c" #ifdef ADAFRUIT_BLE_ENABLE #include "adafruit_ble.h" #endif @@ -14,6 +13,8 @@ #include "sendchar.h" #include "timer.h" +static const unsigned char font[] PROGMEM; + // Set this to 1 to help diagnose early startup problems // when testing power-on with ble. Turn it off otherwise, // as the latency of printing most of the debug info messes From 9ca73a9edcb8cfaeba13baae16b8c8cc5c9fafe6 Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 19 Oct 2018 19:57:44 +0200 Subject: [PATCH 208/269] Keymap: Add dz60 iso-de layout (#4173) --- .../dz60/keymaps/iso_de_andys8/README.md | 3 ++ keyboards/dz60/keymaps/iso_de_andys8/keymap.c | 38 +++++++++++++++++++ keyboards/dz60/keymaps/iso_de_andys8/rules.mk | 15 ++++++++ 3 files changed, 56 insertions(+) create mode 100644 keyboards/dz60/keymaps/iso_de_andys8/README.md create mode 100644 keyboards/dz60/keymaps/iso_de_andys8/keymap.c create mode 100644 keyboards/dz60/keymaps/iso_de_andys8/rules.mk diff --git a/keyboards/dz60/keymaps/iso_de_andys8/README.md b/keyboards/dz60/keymaps/iso_de_andys8/README.md new file mode 100644 index 0000000000..504726adf5 --- /dev/null +++ b/keyboards/dz60/keymaps/iso_de_andys8/README.md @@ -0,0 +1,3 @@ +# ISO DE layout + +This layout is ISO-DE and similar to a standard 60 ISO layout. There are vim style arrow keys on the function layer. The bottom right is the expected default. diff --git a/keyboards/dz60/keymaps/iso_de_andys8/keymap.c b/keyboards/dz60/keymaps/iso_de_andys8/keymap.c new file mode 100644 index 0000000000..3039914c6f --- /dev/null +++ b/keyboards/dz60/keymaps/iso_de_andys8/keymap.c @@ -0,0 +1,38 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* ISO 60 layout by andys8 (ISO German keyboard layout shown) + * + * This layout starts from a standard ISO 60% layout, and adds a function layer. + * + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 ! | 2 " | 3 § | 4 $ | 5 % | 6 & | 7 / | 8 ( | 9 ) | 0 = | ß ? | ´ ` | Backspace | + * |-----------------------------------------------------------------------------------------| + * | Tab | Q | W | E | R | T | Z | U | I | O | P | Ä | + * | Enter | + * |---------------------------------------------------------------------------------- | + * | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ü | # ' | | + * |-----------------------------------------------------------------------------------------| + * | Shift | < > | Y | X | C | V | B | N | M | , ; | . : | - _ | Shift | + * |-----------------------------------------------------------------------------------------| + * | LCtl | LGUI | LAlt | Space | RAlt | RGUI | App | RCtl | + * `-----------------------------------------------------------------------------------------' + */ + LAYOUT_60_iso( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL + ), + + + LAYOUT_60_iso( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_DEL, KC_NO, KC_NO, + KC_LSFT, BL_TOGG, KC_APP, KC_PAUS, KC_INS, KC_NO, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + ), + +}; diff --git a/keyboards/dz60/keymaps/iso_de_andys8/rules.mk b/keyboards/dz60/keymaps/iso_de_andys8/rules.mk new file mode 100644 index 0000000000..b5f45d7aa8 --- /dev/null +++ b/keyboards/dz60/keymaps/iso_de_andys8/rules.mk @@ -0,0 +1,15 @@ +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = no +AUTO_SHIFT_ENABLE = no # If the time depressed is greater than or equal to the AUTO_SHIFT_TIMEOUT, then a shifted version of the key is emitted. If the time is less than the AUTO_SHIFT_TIMEOUT time, then the normal state is emitted +TAP_DANCE_ENABLE = no From 6f6d28fa8d81063691d2fd11540675eaa5b6989c Mon Sep 17 00:00:00 2001 From: wanleg <32079073+wanleg@users.noreply.github.com> Date: Fri, 19 Oct 2018 11:01:40 -0700 Subject: [PATCH 209/269] Big Switch and 5x5 edits (#4168) * 4x4 - pro micro version * pro-micro setup on 4x4 * tap dance LCTL/RESET key * remove test file * more research * revert a couple un-intended edits * opt_defs version of adding custom rules.mk variables * cleanup * cleanup * cleanup * cleanup * layout edits * layout edits * keymap edit * numpad layout change * got tap dance layer-switch working * keymap changes * temporary revert * restore previous settings * misc fixes * layer order change * fix layout matrix * Update tapdances.c * playing around with triple tap dance * sync with upstream * quick edit * tapdance cleanup * mod tap interrupt * tapping term edit * tapping term adjust * 5x5 board edits * set gherkin tapping term * big switch tap dance edit * tapping term refinements * 5x10 layout setup * add audio for bigswitch * keymap change * keymap change & created testing board * sound setup for big_switch * more big switch size testing * bigswitch testing finished * final touch-ups --- keyboards/5x5/5x5.h | 4 +- keyboards/bigswitch/bigswitch.c | 2 + keyboards/bigswitch/keymaps/wanleg/config.h | 11 +- keyboards/bigswitch/keymaps/wanleg/keymap.c | 9 +- keyboards/bigswitch/keymaps/wanleg/rules.mk | 15 +- layouts/community/ortho_3x10/wanleg/readme.md | 9 +- layouts/community/ortho_5x10/wanleg/config.h | 9 - layouts/community/ortho_5x10/wanleg/keymap.c | 38 --- layouts/community/ortho_5x10/wanleg/rules.mk | 3 - layouts/community/ortho_5x15/wanleg/config.h | 11 +- layouts/community/ortho_5x15/wanleg/keymap.c | 89 +++++-- layouts/community/ortho_5x5/layout.json | 1 + layouts/community/ortho_5x5/readme.md | 3 + users/wanleg/config.h | 18 +- users/wanleg/rules.mk | 4 +- users/wanleg/tapdances.c | 246 ++++++++++-------- users/wanleg/wanleg.c | 6 + users/wanleg/wanleg.h | 39 ++- 18 files changed, 305 insertions(+), 212 deletions(-) delete mode 100644 layouts/community/ortho_5x10/wanleg/config.h delete mode 100644 layouts/community/ortho_5x10/wanleg/keymap.c delete mode 100644 layouts/community/ortho_5x10/wanleg/rules.mk create mode 100644 layouts/community/ortho_5x5/layout.json create mode 100644 layouts/community/ortho_5x5/readme.md diff --git a/keyboards/5x5/5x5.h b/keyboards/5x5/5x5.h index cbfc28a901..45fb80a4f7 100644 --- a/keyboards/5x5/5x5.h +++ b/keyboards/5x5/5x5.h @@ -35,7 +35,7 @@ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, ___, ___, ___, ___, ___}, \ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, ___, ___, ___, ___, ___}, \ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, ___, ___, ___, ___, ___}, \ - { K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, ___, ___, ___, ___, ___}, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, ___, ___, ___, ___, ___}, \ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, ___, ___, ___, ___, ___} \ } @@ -50,7 +50,7 @@ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e}, \ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e}, \ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e}, \ - { K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, K3a, K3b, K3c, K3d, K3e}, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e}, \ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4a, K4b, K4c, K4d, K4e} \ } diff --git a/keyboards/bigswitch/bigswitch.c b/keyboards/bigswitch/bigswitch.c index b924c7017c..32f9f7fab8 100644 --- a/keyboards/bigswitch/bigswitch.c +++ b/keyboards/bigswitch/bigswitch.c @@ -26,10 +26,12 @@ void matrix_init_user(void) { __attribute__ ((weak)) void matrix_scan_user(void) { +#if defined(RGBLIGHT_ENABLE) if (runonce && timer_elapsed(my_timer) > 1000) { runonce = false; rgblight_sethsv_noeeprom(0x0, 0xff, 0x80); rgblight_mode_noeeprom(9); rgblight_enable_noeeprom(); } +#endif } diff --git a/keyboards/bigswitch/keymaps/wanleg/config.h b/keyboards/bigswitch/keymaps/wanleg/config.h index f1e1693457..8ac82f40d9 100644 --- a/keyboards/bigswitch/keymaps/wanleg/config.h +++ b/keyboards/bigswitch/keymaps/wanleg/config.h @@ -21,7 +21,6 @@ #define MATRIX_ROW_PINS { B4 } #undef MATRIX_COL_PINS #define MATRIX_COL_PINS { B6 } -//#define UNUSED_PINS /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ #undef DIODE_DIRECTION @@ -32,14 +31,12 @@ #define BACKLIGHT_LEVELS 3 #define BREATHING_PERIOD 5 -/* for Tap Dance */ -#undef TAPPING_TERM -#define TAPPING_TERM 700 - /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -//#define DEBOUNCING_DELAY 5 #undef DEBOUNCING_DELAY -#define DEBOUNCING_DELAY 2 +#define DEBOUNCING_DELAY 5 // set flashing LED with QMK DFU #define QMK_LED B0 + +// set audio pin +#define C6_AUDIO diff --git a/keyboards/bigswitch/keymaps/wanleg/keymap.c b/keyboards/bigswitch/keymaps/wanleg/keymap.c index 7f4150e581..76d0808fda 100644 --- a/keyboards/bigswitch/keymaps/wanleg/keymap.c +++ b/keyboards/bigswitch/keymaps/wanleg/keymap.c @@ -20,8 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( /* Base */ TD(CAD_TD) \ ), -}; - -void led_set_user(uint8_t usb_led) { - -} +[1] = LAYOUT( /*Secondary*/ +TD(BSW_TAP_DANCE) \ +), +}; \ No newline at end of file diff --git a/keyboards/bigswitch/keymaps/wanleg/rules.mk b/keyboards/bigswitch/keymaps/wanleg/rules.mk index bc4a1873f8..a6c7d1d3f0 100644 --- a/keyboards/bigswitch/keymaps/wanleg/rules.mk +++ b/keyboards/bigswitch/keymaps/wanleg/rules.mk @@ -1,7 +1,16 @@ -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default - #If using a ProMicro and it has the QMK DFU bootloader instead of Caterina, #run "make : dfu=qmk" when compiling to ensure it is flagged properly after being flashed ifeq ($(strip $(dfu)), qmk) BOOTLOADER = qmk-dfu -endif \ No newline at end of file +endif + +AUDIO_ENABLE = yes # Audio output on port C6 +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) \ No newline at end of file diff --git a/layouts/community/ortho_3x10/wanleg/readme.md b/layouts/community/ortho_3x10/wanleg/readme.md index ef6c1f9dbb..8696cccf6b 100644 --- a/layouts/community/ortho_3x10/wanleg/readme.md +++ b/layouts/community/ortho_3x10/wanleg/readme.md @@ -1,13 +1,10 @@ ![Gherkin Wanleg Layout Image](https://i.imgur.com/nCPog2W.png) # Gherkin Wanleg Layout This is the layout I came up with to preserve a standard QWERTY 104 key ANSI layout as much as possible, in as few layers as possible for a 30 key board. -I originally set up a few Tap Dance keys, but dropped half of them in favor of chorded versions since in actual use, they tended to impede typing speed more than their current two-key versions. -I've left them in my `keymap.c` ready for use if anyone wants to try them out: +Here are the two Tap Dance keys I've set up for this board: -Legend Name | Single Tap | Double Tap | Hold ---- | --- | --- | --- -*null* | space | enter | shift -*null* | backspace | delete | control +Legend Name | Single Tap | Double Tap | Hold +--- | --- | --- | --- Sft//Cp | shift | caps lock | *null* Q//Esc | KC_Q | escape | *null* diff --git a/layouts/community/ortho_5x10/wanleg/config.h b/layouts/community/ortho_5x10/wanleg/config.h deleted file mode 100644 index 2d24f2771b..0000000000 --- a/layouts/community/ortho_5x10/wanleg/config.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -//QMK DFU settings (ProMicro boards) -// set top left key as bootloader mode escape key on Gherkin -#if defined(KEYBOARD_5x5) -#define QMK_LED B0 -#define QMK_ESC_OUTPUT D7 // usually COL -#define QMK_ESC_INPUT B2 // usually ROW -#endif diff --git a/layouts/community/ortho_5x10/wanleg/keymap.c b/layouts/community/ortho_5x10/wanleg/keymap.c deleted file mode 100644 index 5d06e53ae4..0000000000 --- a/layouts/community/ortho_5x10/wanleg/keymap.c +++ /dev/null @@ -1,38 +0,0 @@ -#include QMK_KEYBOARD_H -#include "wanleg.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[gGK] = LAYOUT_ortho_5x10_wrapper( - _______________Gherkin_NUM_0_______________, - _______________Gherkin_Row_0_______________, - _______________Gherkin_Row_1_______________, - _______________Gherkin_Row_2_______________, - _______, _______, _______, gNUMBER, gETCETERA, KC_SPC,gDIRECTION, KC_RGUI, _______, _______ -), - - -[gNUM] = LAYOUT_ortho_5x10_wrapper( - _______________Gherkin_NUM_0_______________, - _______________Gherkin_NUM_0_______________, - _______________Gherkin_NUM_1_______________, - _______________Gherkin_NUM_2_______________, - _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, _______, _______ -), - -[gDIR] = LAYOUT_ortho_5x10_wrapper( - _______________Gherkin_NUM_0_______________, - _______________Gherkin_DIR_0_______________, - _______________Gherkin_DIR_1_______________, - _______________Gherkin_DIR_2_______________, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ -), - -[gETC] = LAYOUT_ortho_5x10_wrapper( - _______________Gherkin_NUM_0_______________, - _______________Gherkin_ETC_0_______________, - _______________Gherkin_ETC_1_______________, - _______________Gherkin_ETC_2_______________, - _______, _______, _______, _______, _______, LALT(LCTL(KC_DEL)), _______, _______, _______, _______ -), - -}; diff --git a/layouts/community/ortho_5x10/wanleg/rules.mk b/layouts/community/ortho_5x10/wanleg/rules.mk deleted file mode 100644 index 90841d2abe..0000000000 --- a/layouts/community/ortho_5x10/wanleg/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -SWAP_HANDS_ENABLE = no - -BOOTLOADER = qmk-dfu \ No newline at end of file diff --git a/layouts/community/ortho_5x15/wanleg/config.h b/layouts/community/ortho_5x15/wanleg/config.h index a55fc6a3eb..1043986f7a 100644 --- a/layouts/community/ortho_5x15/wanleg/config.h +++ b/layouts/community/ortho_5x15/wanleg/config.h @@ -1,3 +1,8 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H -#endif +#pragma once + +// set top left key as bootloader mode escape key on 5x5 75key layout +#if defined(KEYBOARD_5x5) && !defined(PRO_MICRO) +#define QMK_LED B0 +#define QMK_ESC_OUTPUT D7 // usually COL +#define QMK_ESC_INPUT B2 // usually ROW +#endif \ No newline at end of file diff --git a/layouts/community/ortho_5x15/wanleg/keymap.c b/layouts/community/ortho_5x15/wanleg/keymap.c index 7731edb6a2..df74241157 100644 --- a/layouts/community/ortho_5x15/wanleg/keymap.c +++ b/layouts/community/ortho_5x15/wanleg/keymap.c @@ -2,30 +2,36 @@ #include "wanleg.h" #define _________________BLANK_75__________________ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +#define _________________BLANK_50__________________ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ #define _________________Num_Row_75________________ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NLCK const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* QWERTY 75 - * .--------------------------------------------------------------------------------------------------------------------------------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | NUMLOCK| gherkin| | FN | - * |-----------------------------------------------------------------------------------------------------------+--------+--------+--------| - * | | 7 | 8 | 9 | - * | |--------+--------+--------| - * | 4x12 QWERTY LAYOUT | 4 | 5 | 6 | - * | |--------+--------+--------| - * | | 1 | 2 | 3 | - * | |--------+--------+--------| - * | | 0 | 0 | . | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ -[QW75] = LAYOUT_ortho_5x15_wrapper( - _________________Num_Row_75________________, GHERKIN75, XXXXXXX, FUNCTION75, - _______________Qwerty_Row__0_______________, KC_KP_7, KC_KP_8, KC_KP_9, - _______________Qwerty_Row__1_______________, KC_KP_4, KC_KP_5, KC_KP_6, - _______________Qwerty_Row__2_______________, KC_KP_1, KC_KP_2, KC_KP_3, - KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, SUBTER75, KC_LSFT, KC_SPC, SUPRA75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT +#if defined(KEYBOARD_5x5) +[GK75] = LAYOUT_ortho_5x15_wrapper( + _________________Num_Row_75________________, QWERTY75, XXXXXXX, FUNCTION75, + _______________GherkinLike_0_______________, KC_KP_7, KC_KP_8, KC_KP_9, + _______________GherkinLike_1_______________, KC_KP_4, KC_KP_5, KC_KP_6, + TD(TD_SFT_CAPS), SFT_T(KC_Z), KC_X, KC_C, LT(NUM75, KC_V), LT(ETC75, KC_B), KC_N, LT(DIR75, KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC), SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3, + TD(RST_TAP_DANCE), GHERKIN50, KC_LALT, NUMPAD, NUMBER75, ETCETERA75, KC_SPC,DIRECTION75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT ), +[PAD] = LAYOUT_ortho_5x5_wrapper( + _______, _______, _______, _______, _______, + _______________NUMPAD_Row__0_______________, _______, + _______________NUMPAD_Row__1_______________, _______, + _______________NUMPAD_Row__2_______________, _______, + KC_KP_0, TD(LYR50_TAP_DANCE), KC_KP_DOT, KC_PMNS, _______ +), + +[GK50] = LAYOUT_ortho_5x10_wrapper( + KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC, + _______________Gherkin_Row_0_______________, + _______________Gherkin_Row_1_______________, + _______________Gherkin_Row_2_______________, + TD(RST_TAP_DANCE), GHERKIN75, NUMPAD, gNUMBER, gETCETERA, KC_SPC,gDIRECTION, KC_RGUI, KC_RALT, KC_RGUI +), + +#else /* Gherkin 75 * .--------------------------------------------------------------------------------------------------------------------------------------. * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | NUMLOCK| qwerty | | FN | @@ -46,6 +52,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TD(TD_SFT_CAPS), SFT_T(KC_Z), KC_X, KC_C, LT(NUM75, KC_V), LT(ETC75, KC_B), KC_N, LT(DIR75, KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC), SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3, KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, NUMBER75, ETCETERA75, KC_SPC,DIRECTION75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT ), +#endif + /* QWERTY 75 + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | NUMLOCK| gherkin| | FN | + * |-----------------------------------------------------------------------------------------------------------+--------+--------+--------| + * | | 7 | 8 | 9 | + * | |--------+--------+--------| + * | 4x12 QWERTY LAYOUT | 4 | 5 | 6 | + * | |--------+--------+--------| + * | | 1 | 2 | 3 | + * | |--------+--------+--------| + * | | 0 | 0 | . | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ +[QW75] = LAYOUT_ortho_5x15_wrapper( + _________________Num_Row_75________________, GHERKIN75, XXXXXXX, FUNCTION75, + _______________Qwerty_Row__0_______________, KC_KP_7, KC_KP_8, KC_KP_9, + _______________Qwerty_Row__1_______________, KC_KP_4, KC_KP_5, KC_KP_6, + _______________Qwerty_Row__2_______________, KC_KP_1, KC_KP_2, KC_KP_3, + KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, SUBTER75, KC_LSFT, KC_SPC, SUPRA75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT +), /* SUBTER75 * .--------------------------------------------------------------------------------------------------------------------------------------. @@ -173,4 +200,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_TOGG, BL_INC, BL_DEC, _______, _______, KC_MS_U, KC_WH_D, _______, _______, _______, _______, _______, _______, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R ), + +[gNUM] = LAYOUT_ortho_5x10_wrapper( + _________________BLANK_50__________________, + _______________Gherkin_NUM_0_______________, + _______________Gherkin_NUM_1_______________, + _______________Gherkin_NUM_2_______________, + _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, _______, _______ +), + +[gDIR] = LAYOUT_ortho_5x10_wrapper( + _________________BLANK_50__________________, + _______________Gherkin_DIR_0_______________, + _______________Gherkin_DIR_1_______________, + _______________Gherkin_DIR_2_______________, + _________________BLANK_50__________________ +), + +[gETC] = LAYOUT_ortho_5x10_wrapper( + _________________BLANK_50__________________, + _______________Gherkin_ETC_0_______________, + _______________Gherkin_ETC_1_______________, + _______________Gherkin_ETC_2_______________, + _______, KC_CAPS, _______, _______, _______, LALT(LCTL(KC_DEL)), _______, _______, _______, _______ +), }; diff --git a/layouts/community/ortho_5x5/layout.json b/layouts/community/ortho_5x5/layout.json new file mode 100644 index 0000000000..ab4eef8e1b --- /dev/null +++ b/layouts/community/ortho_5x5/layout.json @@ -0,0 +1 @@ +["","","","",""],["","","","",""],["","","","",""],["","","","",""],["","","","",""] diff --git a/layouts/community/ortho_5x5/readme.md b/layouts/community/ortho_5x5/readme.md new file mode 100644 index 0000000000..3dd75765d1 --- /dev/null +++ b/layouts/community/ortho_5x5/readme.md @@ -0,0 +1,3 @@ +# ortho_5x5 + + LAYOUT_ortho_5x5 \ No newline at end of file diff --git a/users/wanleg/config.h b/users/wanleg/config.h index 28e7690e65..f2e785659f 100644 --- a/users/wanleg/config.h +++ b/users/wanleg/config.h @@ -2,8 +2,17 @@ #define USERSPACE_CONFIG_H //TAPPING_TERM -#ifdef TAP_DANCE_ENABLE -#define TAPPING_TERM 200 +//tapping term short (<100): on multi-purpose keys, slow taps may not register, but "holds" register easier. multi-tap keys may be difficult to activate. +//tapping term long (>200): holds don't register as easily - noticeable when typing quickly (e.g. shift doesn't want to engage.) +#if defined(TAP_DANCE_ENABLE) && defined(KEYBOARD_lets_split_rev2) +//Kailh Coppers activate quickly and don't need a long tapping term +#define TAPPING_TERM 100 + +#elif defined(TAP_DANCE_ENABLE) && defined(KEYBOARD_bigswitch) +#define TAPPING_TERM 700 + +#else +#define TAPPING_TERM 145 #endif //Mousekey Settings @@ -27,4 +36,9 @@ #define NO_ACTION_FUNCTION #define NO_ACTION_ONESHOT +// Disable mod tap interrrupt +#ifndef IGNORE_MOD_TAP_INTERRUPT +#define IGNORE_MOD_TAP_INTERRUPT +#endif // !mod tap interrrupt + #endif // !USERSPACE_CONFIG_H diff --git a/users/wanleg/rules.mk b/users/wanleg/rules.mk index 5630401315..2a2a65cfea 100644 --- a/users/wanleg/rules.mk +++ b/users/wanleg/rules.mk @@ -9,8 +9,8 @@ ifeq ($(strip $(dfu)), qmk) BOOTLOADER = qmk-dfu endif -#use alternate settings for 4x4 board using ProMicro instead of Micro -#usage: make 4x4:wanleg PM=yes +#use alternate settings for boards using ProMicro instead of Micro +#example usage: make 4x4:wanleg PM=yes ifeq ($(strip $(PM)), yes) OPT_DEFS += -DPRO_MICRO endif diff --git a/users/wanleg/tapdances.c b/users/wanleg/tapdances.c index 0778bf5f7e..3878e6d31c 100644 --- a/users/wanleg/tapdances.c +++ b/users/wanleg/tapdances.c @@ -1,6 +1,12 @@ //Tap Dance Settings #include "wanleg.h" +//audio settings for one of the tap dances below +#ifdef AUDIO_ENABLE + float lyrup_song[][2] = SONG(MUSIC_ON_SOUND); + float lyrdown_song[][2] = SONG(MUSIC_OFF_SOUND); +#endif + ///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION START ///// ///// (no need to edit this section) ///// //Enums used to clearly convey the state of the tap dance @@ -9,7 +15,10 @@ enum { SINGLE_HOLD = 2, DOUBLE_TAP = 3, DOUBLE_HOLD = 4, - DOUBLE_SINGLE_TAP = 5 //send SINGLE_TAP twice - NOT DOUBLE_TAP + DOUBLE_SINGLE_TAP = 5, //send SINGLE_TAP twice - NOT DOUBLE_TAP + TRIPLE_TAP = 6, + TRIPLE_HOLD = 7, + TRIPLE_SINGLE_TAP = 8 // Add more enums here if you want for triple, quadruple, etc. }; @@ -32,69 +41,18 @@ int cur_dance (qk_tap_dance_state_t *state) { else if (state->pressed) return DOUBLE_HOLD; else return DOUBLE_TAP; } - else return 6; //magic number. At some point this method will expand to work for more presses + + //If count = 3, and it has been interrupted - assume that user is trying to type the letter associated + //with double tap. + else if (state->count == 3) { + if (state->interrupted) return TRIPLE_SINGLE_TAP; + else if (state->pressed) return TRIPLE_HOLD; + else return TRIPLE_TAP; + } + else return 9; //magic number. At some point this method will expand to work for more presses } ///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION END ///// ///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION START ///// -//instantiate 'tap' for the 'ENT' tap dance. -static tap ENTtap_state = { - .is_press_action = true, - .state = 0 -}; - -void ENT_finished (qk_tap_dance_state_t *state, void *user_data) { - ENTtap_state.state = cur_dance(state); - switch (ENTtap_state.state) { - case SINGLE_TAP: register_code(KC_SPC); break; - case SINGLE_HOLD: register_code(KC_LSFT); break; - case DOUBLE_TAP: register_code(KC_ENT); break; - case DOUBLE_HOLD: register_code(KC_NO); break; // setting double hold to do nothing (change this if you want) - case DOUBLE_SINGLE_TAP: register_code(KC_SPC); unregister_code(KC_SPC); register_code(KC_SPC); - //Last case is for fast typing. Assuming your key is `f`: - //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`. - //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms. - } -} - -void ENT_reset (qk_tap_dance_state_t *state, void *user_data) { - switch (ENTtap_state.state) { - case SINGLE_TAP: unregister_code(KC_SPC); break; - case SINGLE_HOLD: unregister_code(KC_LSFT); break; - case DOUBLE_TAP: unregister_code(KC_ENT); break; - case DOUBLE_HOLD: unregister_code(KC_NO); - case DOUBLE_SINGLE_TAP: unregister_code(KC_SPC); - } - ENTtap_state.state = 0; -} - -//instantiate 'tap' for the 'DEL' tap dance. -static tap DELtap_state = { - .is_press_action = true, - .state = 0 -}; - -void DEL_finished (qk_tap_dance_state_t *state, void *user_data) { - DELtap_state.state = cur_dance(state); - switch (DELtap_state.state) { - case SINGLE_TAP: register_code(KC_BSPC); break; - case SINGLE_HOLD: register_code(KC_LCTL); break; - case DOUBLE_TAP: register_code(KC_DEL); break; - case DOUBLE_HOLD: register_code(KC_NO); break; - case DOUBLE_SINGLE_TAP: register_code(KC_BSPC); unregister_code(KC_BSPC); register_code(KC_BSPC); - } -} - -void DEL_reset (qk_tap_dance_state_t *state, void *user_data) { - switch (DELtap_state.state) { - case SINGLE_TAP: unregister_code(KC_BSPC); break; - case SINGLE_HOLD: unregister_code(KC_LCTL); break; - case DOUBLE_TAP: unregister_code(KC_DEL); break; - case DOUBLE_HOLD: unregister_code(KC_NO); - case DOUBLE_SINGLE_TAP: unregister_code(KC_BSPC); - } - DELtap_state.state = 0; -} - //instantiate 'tap' for the 'CAD' tap dance. static tap CADtap_state = { .is_press_action = true, @@ -104,14 +62,14 @@ static tap CADtap_state = { void CAD_finished (qk_tap_dance_state_t *state, void *user_data) { CADtap_state.state = cur_dance(state); switch (CADtap_state.state) { - case SINGLE_TAP: - //register_code(KC_SPC); + case SINGLE_TAP: + //register_code(KC_SPC); SEND_STRING(SS_LGUI("l")); #ifdef BACKLIGHT_ENABLE - backlight_set(3); + backlight_level(3); #endif break; - case SINGLE_HOLD: + case SINGLE_HOLD: //register_code(KC_NO); //take a screenshot of a single window, open Paint and paste SEND_STRING(SS_LALT(SS_TAP(X_PSCREEN)) SS_LGUI("r")); @@ -120,47 +78,37 @@ void CAD_finished (qk_tap_dance_state_t *state, void *user_data) { _delay_ms(700); SEND_STRING(SS_LCTRL("v")); break; //register this keycode when button is held - case DOUBLE_TAP: - //register_code(KC_ENT); + case DOUBLE_TAP: + //register_code(KC_ENT); SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_DELETE)))); #ifdef BACKLIGHT_ENABLE - backlight_set(0); + backlight_level(0); #endif break; //case DOUBLE_HOLD: register_code(KC_NO); break; //register this keycode when button is tapped and then held - case DOUBLE_HOLD: - reset_keyboard(); + case DOUBLE_HOLD: + reset_keyboard(); break; //register this keycode when button is tapped and then held - case DOUBLE_SINGLE_TAP: register_code(KC_NO); unregister_code(KC_NO); register_code(KC_NO); + case TRIPLE_TAP: + SEND_STRING("wanleg@github.com"); + break; + case TRIPLE_HOLD: + set_single_persistent_default_layer(1); + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(lyrup_song); + #endif + break; } } void CAD_reset (qk_tap_dance_state_t *state, void *user_data) { switch (CADtap_state.state) { - case SINGLE_TAP: - //unregister_code(KC_SPC); - SEND_STRING(SS_LGUI("l")); - #ifdef BACKLIGHT_ENABLE - backlight_set(3); - #endif - break; - case SINGLE_HOLD: - register_code(KC_NO); //(un)register this keycode when button is held and then released - //SEND_STRING(SS_LCTRL("v")); - break; - case DOUBLE_TAP: - //register_code(KC_ENT); - SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_DELETE)))); - #ifdef BACKLIGHT_ENABLE - backlight_set(0); - #endif - break; - case DOUBLE_HOLD: register_code(KC_NO); //(un)register this keycode when button is tapped and then held, and then released - case DOUBLE_SINGLE_TAP: unregister_code(KC_NO); +//nothing to do } CADtap_state.state = 0; -} - +} + //instantiate 'tap' for the 'RST' tap dance. static tap RSTtap_state = { .is_press_action = true, @@ -173,21 +121,18 @@ void RST_finished (qk_tap_dance_state_t *state, void *user_data) { case SINGLE_TAP: register_code(KC_LCTL); break; case SINGLE_HOLD: register_code(KC_LCTL); break; case DOUBLE_TAP: reset_keyboard(); break; - case DOUBLE_HOLD: register_code(KC_NO); break; - case DOUBLE_SINGLE_TAP: register_code(KC_LCTL); unregister_code(KC_LCTL); register_code(KC_LCTL); + case DOUBLE_SINGLE_TAP: register_code(KC_LCTL); unregister_code(KC_LCTL); register_code(KC_LCTL); break; } -} +} void RST_reset (qk_tap_dance_state_t *state, void *user_data) { switch (RSTtap_state.state) { case SINGLE_TAP: unregister_code(KC_LCTL); break; case SINGLE_HOLD: unregister_code(KC_LCTL); break; - case DOUBLE_TAP: unregister_code(KC_NO); break; - case DOUBLE_HOLD: unregister_code(KC_NO); - case DOUBLE_SINGLE_TAP: unregister_code(KC_LCTL); + case DOUBLE_SINGLE_TAP: unregister_code(KC_LCTL); break; } RSTtap_state.state = 0; -} +} //instantiate 'tap' for the 'LYR' tap dance. static tap LYRtap_state = { @@ -199,23 +144,106 @@ void LYR_finished (qk_tap_dance_state_t *state, void *user_data) { LYRtap_state.state = cur_dance(state); switch (LYRtap_state.state) { case SINGLE_TAP: register_code(KC_PSLS); break; - case SINGLE_HOLD: register_code(KC_NO); break; case DOUBLE_TAP: set_single_persistent_default_layer(_GK); break; - case DOUBLE_HOLD: register_code(KC_NO); break; case DOUBLE_SINGLE_TAP: register_code(KC_PSLS); unregister_code(KC_PSLS); register_code(KC_PSLS); } -} +} void LYR_reset (qk_tap_dance_state_t *state, void *user_data) { switch (LYRtap_state.state) { case SINGLE_TAP: unregister_code(KC_PSLS); break; - case SINGLE_HOLD: unregister_code(KC_NO); break; case DOUBLE_TAP: set_single_persistent_default_layer(_GK); break; - case DOUBLE_HOLD: unregister_code(KC_NO); case DOUBLE_SINGLE_TAP: unregister_code(KC_PSLS); } LYRtap_state.state = 0; -} +} + +//instantiate 'tap' for the 'LYR75' tap dance. +static tap LYR75tap_state = { + .is_press_action = true, + .state = 0 +}; + +void LYR75_finished (qk_tap_dance_state_t *state, void *user_data) { + LYR75tap_state.state = cur_dance(state); + switch (LYR75tap_state.state) { + case SINGLE_TAP: register_code(KC_PSLS); break; + case DOUBLE_TAP: set_single_persistent_default_layer(GK75); break; + case DOUBLE_SINGLE_TAP: register_code(KC_PSLS); unregister_code(KC_PSLS); register_code(KC_PSLS); + } +} + +void LYR75_reset (qk_tap_dance_state_t *state, void *user_data) { + switch (LYR75tap_state.state) { + case SINGLE_TAP: unregister_code(KC_PSLS); break; + case DOUBLE_TAP: set_single_persistent_default_layer(GK75); break; + case DOUBLE_SINGLE_TAP: unregister_code(KC_PSLS); + } + LYR75tap_state.state = 0; +} + +//instantiate 'tap' for the 'LYR50' tap dance. +static tap LYR50tap_state = { + .is_press_action = true, + .state = 0 +}; + +void LYR50_finished (qk_tap_dance_state_t *state, void *user_data) { + LYR50tap_state.state = cur_dance(state); + switch (LYR75tap_state.state) { + case SINGLE_TAP: register_code(KC_PSLS); break; + case DOUBLE_TAP: set_single_persistent_default_layer(GK50); break; + case DOUBLE_SINGLE_TAP: register_code(KC_PSLS); unregister_code(KC_PSLS); register_code(KC_PSLS); + } +} + +void LYR50_reset (qk_tap_dance_state_t *state, void *user_data) { + switch (LYR50tap_state.state) { + case SINGLE_TAP: unregister_code(KC_PSLS); break; + case DOUBLE_TAP: set_single_persistent_default_layer(GK50); break; + case DOUBLE_SINGLE_TAP: unregister_code(KC_PSLS); + } + LYR50tap_state.state = 0; +} + +//instantiate 'tap' for the 'BSW' tap dance. +static tap BSWtap_state = { + .is_press_action = true, + .state = 0 +}; + +void BSW_finished (qk_tap_dance_state_t *state, void *user_data) { + BSWtap_state.state = cur_dance(state); + switch (BSWtap_state.state) { + case SINGLE_TAP: register_code(KC_ENTER); break; + case SINGLE_HOLD: + set_single_persistent_default_layer(0); + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(lyrdown_song); + #endif + break; + case DOUBLE_TAP: + register_code(KC_LCTRL); + register_code(KC_C); + break; + case DOUBLE_HOLD: + reset_keyboard(); + break; //register this keycode when button is tapped and then held + } +} + +void BSW_reset (qk_tap_dance_state_t *state, void *user_data) { + switch (BSWtap_state.state) { + case SINGLE_TAP: unregister_code(KC_ENTER); break; + case DOUBLE_TAP: + unregister_code(KC_LCTRL); + unregister_code(KC_C); + break; + } + BSWtap_state.state = 0; +} + ///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION END ///// //Tap Dance Definitions @@ -224,12 +252,12 @@ qk_tap_dance_action_t tap_dance_actions[] = { [TD_SFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS) // Other declarations would go here, separated by commas, if you have them ,[TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC) - ,[ENT_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ENT_finished, ENT_reset) - ,[DEL_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, DEL_finished, DEL_reset) ,[RST_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, RST_finished, RST_reset) ,[CAD_TD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, CAD_finished, CAD_reset) ,[LYR_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, LYR_finished, LYR_reset) - + ,[LYR75_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, LYR75_finished, LYR75_reset) + ,[LYR50_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, LYR50_finished, LYR50_reset) + ,[BSW_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, BSW_finished, BSW_reset) }; //In Layer declaration, add tap dance item in place of a key code diff --git a/users/wanleg/wanleg.c b/users/wanleg/wanleg.c index f22c34ba30..4e60c422fa 100644 --- a/users/wanleg/wanleg.c +++ b/users/wanleg/wanleg.c @@ -47,6 +47,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case GHERKIN50: + if (record->event.pressed) { + set_single_persistent_default_layer(GK50); + } + return false; + break; case SUBTER: if (record->event.pressed) { layer_on(SUB); diff --git a/users/wanleg/wanleg.h b/users/wanleg/wanleg.h index 65028751a9..9e0cf3ee5d 100644 --- a/users/wanleg/wanleg.h +++ b/users/wanleg/wanleg.h @@ -27,10 +27,12 @@ enum userspace_layers { ETC75, FN75, PAD, + GK50, }; #elif KEYBOARD_xd75 enum userspace_layers { GK75 = 0, + PAD, QW75, SUB75, SUP75, @@ -50,7 +52,32 @@ enum userspace_layers { gNUM, gDIR, gETC, + GK50, +}; +#elif KEYBOARD_5x5 +enum userspace_layers { + GK50 = 0, + gNUM, + gDIR, + gETC, + GK75, + QW75, + SUB75, + SUP75, + NUM75, + DIR75, + ETC75, + FN75, PAD, + gGK, + _GK, + _QW, + ONE, + SUB, + SUP, + NUM, + DIR, + ETC, }; #else enum userspace_layers { @@ -75,6 +102,7 @@ enum userspace_layers { DIR75, ETC75, FN75, + GK50, }; #endif @@ -100,6 +128,7 @@ enum userspace_custom_keycodes { ETCETERA75, FUNCTION75, NUMPAD, + GHERKIN50, }; @@ -108,11 +137,12 @@ enum userspace_custom_keycodes { enum { TD_SFT_CAPS = 0 ,TD_Q_ESC - ,ENT_TAP_DANCE - ,DEL_TAP_DANCE ,CAD_TD ,RST_TAP_DANCE ,LYR_TAP_DANCE + ,LYR50_TAP_DANCE + ,LYR75_TAP_DANCE + ,BSW_TAP_DANCE }; #endif @@ -130,6 +160,7 @@ enum { #define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) #define LAYOUT_ortho_5x15_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__) #define LAYOUT_ortho_4x4_wrapper(...) LAYOUT_ortho_4x4(__VA_ARGS__) +#define LAYOUT_ortho_5x5_wrapper(...) LAYOUT_ortho_5x5(__VA_ARGS__) // Blocks for each of the major keyboard layouts // Organized so we can quickly adapt and modify all of them @@ -189,12 +220,12 @@ enum { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | mLeft | mDown | mRight | | SHIFT | mBtn3 | mBtn1 | mBtn2 | ; | ' | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | Sft//Cp| | | | | C-A-D | mScrL | mScrR | ALT | DEL | + * | Sft//Cp| CAPS | | | | C-A-D | mScrL | mScrR | ALT | DEL | * '-----------------------------------------------------------------------------------------' */ #define _______________Gherkin_ETC_0_______________ KC_GRV, KC_MS_U, _______,_______, RESET, KC_RSFT, KC_WH_U, KC_WH_D, _______, KC_BSLS #define _______________Gherkin_ETC_1_______________ KC_MS_L, KC_MS_D, KC_MS_R,_______, KC_LSFT, KC_BTN3, KC_BTN1, KC_BTN2, KC_SCLN, KC_QUOT -#define _______________Gherkin_ETC_2_______________ TD(TD_SFT_CAPS),_______, _______,_______, _______, LALT(LCTL(KC_DEL)), KC_WH_L, KC_WH_R, KC_LALT, KC_DEL +#define _______________Gherkin_ETC_2_______________ TD(TD_SFT_CAPS),KC_CAPS, _______,_______, _______, LALT(LCTL(KC_DEL)), KC_WH_L, KC_WH_R, KC_LALT, KC_DEL /* Gherkin-Like * .-----------------------------------------------------------------------------------------------------------. From 0d1e0a0d972c77231062e2ff84742f168a6010a6 Mon Sep 17 00:00:00 2001 From: mcarni Date: Fri, 19 Oct 2018 21:05:34 +0200 Subject: [PATCH 210/269] added an ISO split spacebar layout, keymap and readme files (#4165) --- keyboards/dz60/dz60.h | 14 ++ keyboards/dz60/info.json | 4 + .../dz60/keymaps/iso_split-spacebar/README.md | 69 +++++++ .../dz60/keymaps/iso_split-spacebar/keymap.c | 193 ++++++++++++++++++ 4 files changed, 280 insertions(+) create mode 100644 keyboards/dz60/keymaps/iso_split-spacebar/README.md create mode 100644 keyboards/dz60/keymaps/iso_split-spacebar/keymap.c diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h index fac5fa32ff..36ddb7ade1 100644 --- a/keyboards/dz60/dz60.h +++ b/keyboards/dz60/dz60.h @@ -196,6 +196,20 @@ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \ } +// iso split +#define LAYOUT_60_iso_split( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \ + K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ + K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ + K400, K401, K403, K404, K406, K408, K410, K411, K413, K414 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \ + { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ + { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \ + { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \ +} /* LAYOUT_60_iso_5x1u * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json index 56e3677b7a..1f621360bf 100644 --- a/keyboards/dz60/info.json +++ b/keyboards/dz60/info.json @@ -28,6 +28,10 @@ "LAYOUT_60_iso": { "key_count": 62, "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + }, + "LAYOUT_60_iso_split": { + "key_count": 64, + "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] }, "LAYOUT_60_hhkb": { "key_count": 60, diff --git a/keyboards/dz60/keymaps/iso_split-spacebar/README.md b/keyboards/dz60/keymaps/iso_split-spacebar/README.md new file mode 100644 index 0000000000..7d96f2225f --- /dev/null +++ b/keyboards/dz60/keymaps/iso_split-spacebar/README.md @@ -0,0 +1,69 @@ +# iso layout with a split spacebar + +i needed to have an ISO layout +and i wanted to have a split spacebar +i couldn't find anything ready so i cobbled this together + + + +---- Layer 0 - BL +this is basically the standard iso layout with the addition of the split spacebar +menu key (KC_APP) is used to move to the next layer +the key in between the two spacebars is the function key + *,-----------------------------------------------------------. + *| ' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp | + *|-----------------------------------------------------------| + *| Tab | q | w | e | r | t | y | u | i | o | p | [ | ] |enter| + *|------------------------------------------------------ | + *| Caps | a | s | d | f | g | h | j | k | l | ; | ' | # | | + *|-----------------------------------------------------------| + *|Shft| < | z | x | c | v | b | n | m | , | . | / | Shift | + *|-----------------------------------------------------------| + *|Ctrl|Gui |Alt | Space | FN | Space |Alt |Gui | NL |Ctrl | + *`-----------------------------------------------------------' + +---- Layer 1 - FL +quite standard function layer +arrow keys and mouse movement/buttons on the home row + *,-----------------------------------------------------------. + *|ESC|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL | + *|-----------------------------------------------------------| + *| | | | | | | | | | |prt| | | | + *|------------------------------------------------------ | + *| |m l|m d|m u|m r| | | l | d | u | r | | | | + *|-----------------------------------------------------------| + *| | | | | |mb1|mb2| |hm |pgd|pgu|end| | + *|-----------------------------------------------------------| + *| | | | | | | | | | | + *`-----------------------------------------------------------' + +---- Layer 2 - NL +numbers numbers numbers... +first key (top left) to return to BL +menu key (KC_APP) is used to move to the next layer + *,-----------------------------------------------------------. + *|BL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | + *|-----------------------------------------------------------| + *| | 4 | 5 | 6 | * | / | | 4 | 5 | 6 | * | / | ] | | + *|------------------------------------------------------ | + *| | 7 | 8 | 9 | + | - | | 1 | 2 | 3 | + | - | | | + *|-----------------------------------------------------------| + *| | | 0 | , | . | = | | | 0 | , | . | = | | + *|-----------------------------------------------------------| + *| | | | | | | | | RL | | + *`-----------------------------------------------------------' + +---- Layer 3 - BL +all the fancy lights +and useful reset button (top right) + *,-----------------------------------------------------------. + *|BL | | | | | | | | | | | | |Reset | + *|-----------------------------------------------------------| + *| |tog|mod|hui|hud| | |sai|sad|vai|vad| | | | + *|------------------------------------------------------ | + *| |sta|bre|rai|swi| | |sna|kni|gra|xms| | | | + *|-----------------------------------------------------------| + *| | |bd |bt |bi |bs | | | | | | | | + *|-----------------------------------------------------------| + *| | | | | | | | | BL | | + *`-----------------------------------------------------------' diff --git a/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c b/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c new file mode 100644 index 0000000000..7c17a6f5f8 --- /dev/null +++ b/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c @@ -0,0 +1,193 @@ +// using as reference +// https://docs.qmk.fm/#/keymap + +// thanks to atlacat, hailbreno, itsaferbie and weeheavy... + +// and special thanks to AGausmann and drashna for the layer-activated RGB underglow +// https://www.reddit.com/r/olkb/comments/6t1vdu/update_layeractivated_rgb_underglow/ +// https://github.com/AGausmann/qmk_firmware/blob/agausmann-v3.x/keyboards/nyquist/keymaps/agausmann/keymap.c + +#include QMK_KEYBOARD_H + + +// Helpful defines +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +/* +* Each layer gets a name for readability. +* The underscores don't mean anything - you can +* have a layer called STUFF or any other name. +* Layer names don't all need to be of the same +* length, and you can also skip them entirely +* and just use numbers. +* +*/ +#define BL 0 // Base Layer +#define FL 1 // Function Layer +#define NL 2 // Numpad Layer +#define RL 3 // RGB Layer + +/* +* Let's give an easier name to the RGB modes +* and assign the ones we want to the different layer +* these will then be used by the function below +* +*/ +#define RGB_STA RGB_M_P //rgb static +#define RGB_BRE RGB_M_B //rgb breathe +#define RGB_RAI RGB_M_R //rgb rainbow +#define RGB_SWI RGB_M_SW //rgb swirl +#define RGB_SNA RGB_M_SN //rgb snake +#define RGB_KNI RGB_M_K //rgb knight +#define RGB_GRA RGB_M_G //rgb gradient +#define RGB_XMS RGB_M_X //rgb christmas +// +#define RGB_BL_MODE rgblight_mode_noeeprom(3) //rgb mode for BL layer +#define RGB_BL_LIGHT rgblight_sethsv_noeeprom_turquoise() //rgb light for BL layer +// +#define RGB_FL_MODE rgblight_mode_noeeprom(1) //rgb mode for FL layer +#define RGB_FL_LIGHT rgblight_sethsv_noeeprom_orange() //rgb light for FL layer +// +#define RGB_NL_MODE rgblight_mode_noeeprom(12) //rgb mode for NL layer +#define RGB_NL_LIGHT rgblight_sethsv_noeeprom_turquoise() //rgb light for NL layer +// +#define RGB_RL_MODE rgblight_mode_noeeprom(22) //rgb mode for RL layer +#define RGB_RL_LIGHT rgblight_sethsv_noeeprom_red() //rgb light for RL layer + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Keymap BL: Base Layer (Default Layer) + * + * ,-----------------------------------------------------------. + * | ' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp | + * |-----------------------------------------------------------| + * | Tab | q | w | e | r | t | y | u | i | o | p | [ | ] |enter| + * |------------------------------------------------------ | + * | Caps | a | s | d | f | g | h | j | k | l | ; | ' | # | | + * |-----------------------------------------------------------| + * |Shft| < | z | x | c | v | b | n | m | , | . | / | Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space | FN | Space |Alt |Gui | NL |Ctrl | + * `-----------------------------------------------------------' + */ + [BL] = LAYOUT_60_iso_split( + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(FL), KC_SPC, KC_RALT, KC_RGUI, TO(NL), KC_RCTL), + + /* Keymap FL: Function Layer + * + * ,-----------------------------------------------------------. + * |ESC|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL | + * |-----------------------------------------------------------| + * | | | | | | | | | | |prt| | | | + * |------------------------------------------------------ | + * | |m l|m d|m u|m r| | | l | d | u | r | | | | + * |-----------------------------------------------------------| + * | | | | | |mb1|mb2| |hm |pgd|pgu|end| | + * |-----------------------------------------------------------| + * | | | | | | | | | | | + * `-----------------------------------------------------------' + */ + [FL] = LAYOUT_60_iso_split( + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, + _______, KC_MS_LEFT,KC_MS_DOWN,KC_MS_UP, KC_MS_RIGHT,_______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______, + _______, _______, _______, _______, _______, KC_MS_BTN1,KC_MS_BTN2,_______, KC_HOME, KC_PGDOWN, KC_PGUP, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + /* Keymap NL: Numpad Layer + * + * ,-----------------------------------------------------------. + * |BL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | + * |-----------------------------------------------------------| + * | | 4 | 5 | 6 | * | / | | 4 | 5 | 6 | * | / | ] | | + * |------------------------------------------------------ | + * | | 7 | 8 | 9 | + | - | | 1 | 2 | 3 | + | - | | | + * |-----------------------------------------------------------| + * | | | 0 | , | . | = | | | 0 | , | . | = | | + * |-----------------------------------------------------------| + * | | | | | | | | | RL | | + * `-----------------------------------------------------------' + */ + [NL] = LAYOUT_60_iso_split( + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + TG(NL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, + _______, KC_4, KC_5, KC_6, KC_PAST, KC_PSLS, _______, KC_4, KC_5, KC_6, KC_PAST, KC_PSLS, _______, + _______, KC_7, KC_8, KC_9, KC_PPLS, KC_PMNS, _______, KC_1, KC_2, KC_3, KC_PPLS, KC_PMNS, _______, _______, + _______, KC_0, KC_COMM, KC_DOT, KC_EQL, _______, _______, _______, KC_0, KC_COMM, KC_DOT, KC_EQL, _______, + _______, _______, _______, _______, MO(FL), _______, _______, _______, TG(RL), _______), + + /* Keymap RL: RGB Layer + * + * ,-----------------------------------------------------------. + * |BL | | | | | | | | | | | | |Reset | + * |-----------------------------------------------------------| + * | |tog|mod|hui|hud| | |sai|sad|vai|vad| | | | + * |------------------------------------------------------ | + * | |sta|bre|rai|swi| | |sna|kni|gra|xms| | | | + * |-----------------------------------------------------------| + * | | |bd |bt |bi |bs | | | | | | | | + * |-----------------------------------------------------------| + * | | | | | | | | | BL | | + * `-----------------------------------------------------------' + */ + [RL] = LAYOUT_60_iso_split( + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + TG(RL), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, _______, _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, + _______, RGB_STA, RGB_BRE, RGB_RAI, RGB_SWI, _______, _______, RGB_SNA, RGB_KNI, RGB_GRA, RGB_XMS, _______, _______, _______, + _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, MO(FL), _______, _______, _______, TO(BL), _______), + + +}; + + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + + +// layer-activated RGB underglow + +void matrix_scan_user(void) { + + #ifdef RGBLIGHT_ENABLE + + static uint8_t old_layer = 1; + uint8_t new_layer = biton32(layer_state); + + if (old_layer != new_layer) { + switch (new_layer) { + case BL: + RGB_BL_MODE; + RGB_BL_LIGHT; + break; + case FL: + RGB_FL_MODE; + RGB_FL_LIGHT; + break; + case NL: + RGB_NL_MODE; + // RGB_NL_LIGHT; + break; + case RL: + RGB_RL_MODE; + // RGB_RL_LIGHT; + break; + } + + old_layer = new_layer; + } + + #endif //RGBLIGHT_ENABLE + +} From 6c086f2b6d340c22462f6d6d3cb1d9b583123a65 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 19 Oct 2018 12:42:28 -0700 Subject: [PATCH 211/269] Revert changes to chibiOS-contrib (#4176) * Revert "Keymap: qwerty_code_friendly: use numpad layout for f-keys (#4170)" This reverts commit efc88a0b16055dc0b2f94da8c46ea8fadeab70f4. * Fix keymap --- lib/chibios-contrib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/chibios-contrib b/lib/chibios-contrib index 2de67e2f4a..ede48346ee 160000 --- a/lib/chibios-contrib +++ b/lib/chibios-contrib @@ -1 +1 @@ -Subproject commit 2de67e2f4a268eae072c5fd76a1b160124cee4f6 +Subproject commit ede48346eee4b8d6847c19bc01420bee76a5e486 From f775168c4fa870c045984069a1b55eb9d269098c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 20 Oct 2018 10:47:59 +1100 Subject: [PATCH 212/269] Keymap: qwerty_code_friendly: update readme, comments (#4178) --- .../ergodox/qwerty_code_friendly/keymap.c | 2 +- .../ergodox/qwerty_code_friendly/readme.md | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/layouts/community/ergodox/qwerty_code_friendly/keymap.c b/layouts/community/ergodox/qwerty_code_friendly/keymap.c index 2a441be0e6..43a1d1ad80 100644 --- a/layouts/community/ergodox/qwerty_code_friendly/keymap.c +++ b/layouts/community/ergodox/qwerty_code_friendly/keymap.c @@ -445,7 +445,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_MPRV, K80(L2K2), K80(L2K3), KC_MNXT, KC_TRNS, KC_MPLY ), -/* Keymap 3: Entire Words (one for each key) +/* Keymap 3: Entire Words (one for each key) & Numbers * * .--------------------------------------------------. .--------------------------------------------------. * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | diff --git a/layouts/community/ergodox/qwerty_code_friendly/readme.md b/layouts/community/ergodox/qwerty_code_friendly/readme.md index 23afa656f7..9abd071b9b 100644 --- a/layouts/community/ergodox/qwerty_code_friendly/readme.md +++ b/layouts/community/ergodox/qwerty_code_friendly/readme.md @@ -30,7 +30,7 @@ Some optional behavior is configurable without editing the code using `CFQ_` prefixed defines which can be set by passing `EXTRAFLAGS` to make. - `CFQ_USER_KEY0` - (0..7) are used for custom-keys + (0..8) are used for custom-keys - `CFQ_USE_MOMENTARY_LAYER_KEYS` is used to prevent layer keys from toggling when tapped. - `CFQ_USE_SHIFT_QUOTES` @@ -122,12 +122,7 @@ Notes: '--------------------' '--------------------' ``` -## Keymap 2: Media, Mouse Keys and Numbers - -Notes: - -- Numbers are included on this layer since some applications differentiate - between numbers top row and keypad. +## Keymap 2: F-Keys, Media & Mouse Keys ``` .--------------------------------------------------. .--------------------------------------------------. @@ -150,12 +145,17 @@ Notes: '--------------------' '--------------------' ``` -## Keymap 3: F-Keys & User Defined Words +## Keymap 3: User Defined Words & Numbers This is for assigning whole words to single keys. You can define the arguments (which must be quoted) using: `CFQ_WORD_[A-Z]` eg: `-DCFQ_WORD_E=\"my@email.com\"` +Notes: + +- Numbers are included on this layer since some applications differentiate + between numbers top row and keypad. + ``` .--------------------------------------------------. .--------------------------------------------------. | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | @@ -180,7 +180,7 @@ eg: `-DCFQ_WORD_E=\"my@email.com\"` ## Changelog - 2018/10/19 - Move F-Keys to numpad like layout. + Move F-Keys to key-pad like layout. - 2018/05/29 Add number keys for cases when keypad numbers are handled differently. From 26d2ef2ad1c9b040151d1aac19c4fff3f8b55dd5 Mon Sep 17 00:00:00 2001 From: Alex Mayer Date: Sat, 20 Oct 2018 01:07:48 -0400 Subject: [PATCH 213/269] Ergodox EZ: Use Correct Const For LED Color --- keyboards/ergodox_ez/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c index e400ffcd37..ef70decd53 100644 --- a/keyboards/ergodox_ez/keymaps/default/keymap.c +++ b/keyboards/ergodox_ez/keymaps/default/keymap.c @@ -266,7 +266,7 @@ uint32_t layer_state_set_user(uint32_t state) { ergodox_right_led_2_on(); ergodox_right_led_3_on(); #ifdef RGBLIGHT_COLOR_LAYER_7 - rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6); + rgblight_setrgb(RGBLIGHT_COLOR_LAYER_7); #endif break; default: From ea17e363a61b925c1c6da0146fe383630a7848c0 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 20 Oct 2018 08:40:32 -0700 Subject: [PATCH 214/269] Add instructions for zadig when bootloader device is unknown --- docs/faq_build.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/faq_build.md b/docs/faq_build.md index 7d17df0745..00a0d386b9 100644 --- a/docs/faq_build.md +++ b/docs/faq_build.md @@ -17,7 +17,7 @@ or just: Note that running `make` with `sudo` is generally *not* a good idea, and you should use one of the former methods, if possible. -## Linux `udev` Rules +### Linux `udev` Rules On Linux, you'll need proper privileges to access the MCU. You can either use `sudo` when flashing firmware, or place these files in `/etc/udev/rules.d/`. @@ -37,6 +37,14 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="066 SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666" ``` +## Unknown Device for DFU Bootloader + +If you're using Windows to flash your keyboard, and you are running into issues, check the Device Manager. If you see an "Unknown Device" when the keyboard is in "bootloader mode", then you may have a driver issue. + +Re-running the installation script for MSYS2 may help (eg run `./util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue. + +If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUS(libusb-1.0)` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again. + ## WINAVR is Obsolete It is no longer recommended and may cause some problem. See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99). From 4fffef88535dd62c19e7a1db10c557895ef9cd86 Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Sun, 21 Oct 2018 12:05:45 -0400 Subject: [PATCH 215/269] Keymap: add initial khord iris keymap (#4188) --- keyboards/iris/keymaps/khord/config.h | 38 +++++++ keyboards/iris/keymaps/khord/keymap.c | 136 ++++++++++++++++++++++++++ keyboards/iris/keymaps/khord/rules.mk | 3 + 3 files changed, 177 insertions(+) create mode 100644 keyboards/iris/keymaps/khord/config.h create mode 100644 keyboards/iris/keymaps/khord/keymap.c create mode 100644 keyboards/iris/keymaps/khord/rules.mk diff --git a/keyboards/iris/keymaps/khord/config.h b/keyboards/iris/keymaps/khord/config.h new file mode 100644 index 0000000000..9b44bca792 --- /dev/null +++ b/keyboards/iris/keymaps/khord/config.h @@ -0,0 +1,38 @@ +/* +Copyright 2017 Danny Nguyen + +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 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define TAPPING_TERM 150 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 12 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/iris/keymaps/khord/keymap.c b/keyboards/iris/keymaps/khord/keymap.c new file mode 100644 index 0000000000..379617a8b7 --- /dev/null +++ b/keyboards/iris/keymaps/khord/keymap.c @@ -0,0 +1,136 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, + ADMIN, + SMSPC1 +}; + +enum { + SFT_CAP = 0 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + TD(SFT_CAP),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, SFT_T(KC_ENT), + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_HOME, KC_END, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + KC_LGUI, LOWER, KC_ENT, KC_SPC, RAISE, KC_LALT + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_LOWER] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + RESET, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + KC_DEL, _______, KC_LEFT, KC_RGHT, KC_UP, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + BL_STEP, _______, _______, _______, KC_DOWN, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + _______, _______, KC_DEL, KC_DEL, _______, KC_P0 + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_RAISE] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, _______, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + _______, _______, _______, _______, _______, _______ + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ), + + [_ADJUST] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ + _______, _______, _______, _______, _______, _______ + // └────────┴────────┴────────┘ └────────┴────────┴────────┘ + ) +}; + +qk_tap_dance_action_t tap_dance_actions[] = { + [SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + case ADMIN: + if (record->event.pressed) { + SEND_STRING("Administrator"); + } + return false; + break; + case SMSPC1: + if (record->event.pressed) { + SEND_STRING("Simspace1!"); + } + return false; + break; + } + return true; +} diff --git a/keyboards/iris/keymaps/khord/rules.mk b/keyboards/iris/keymaps/khord/rules.mk new file mode 100644 index 0000000000..c46edbd128 --- /dev/null +++ b/keyboards/iris/keymaps/khord/rules.mk @@ -0,0 +1,3 @@ +RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = yes From 877c285ec8c5509f665b558cb2bcaa89d6093055 Mon Sep 17 00:00:00 2001 From: Vyolle <44031868+Vyolle@users.noreply.github.com> Date: Sun, 21 Oct 2018 11:15:48 -0500 Subject: [PATCH 216/269] Keymap: Renabled EXTRAKEYS in layout (#4174) * Renabled EXTRAKEYS. * Update keyboards/iris/keymaps/vyolle_steno/rules.mk Co-Authored-By: Vyolle --- keyboards/iris/keymaps/vyolle_steno/rules.mk | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/iris/keymaps/vyolle_steno/rules.mk b/keyboards/iris/keymaps/vyolle_steno/rules.mk index e412316833..ebe1c86a0e 100644 --- a/keyboards/iris/keymaps/vyolle_steno/rules.mk +++ b/keyboards/iris/keymaps/vyolle_steno/rules.mk @@ -1,7 +1,7 @@ -EXTRAKEY_ENABLE = no -MOUSEKEY_ENABLE = no # Mouse keys(+4700) -STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER +EXTRAKEY_ENABLE = yes # Disable if you run out of usb endpoints. Media keys need this to work. +MOUSEKEY_ENABLE = no # Mouse keys(+4700) Uses extra usb endpoints. +STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER. AUDIO_ENABLE = no # Audio output on port C6 MIDI_ENABLE = no # MIDI controls NKRO_ENABLE = yes -BOOTMAGIC_ENABLE = yes \ No newline at end of file +BOOTMAGIC_ENABLE = yes From 8e3330bbf6f8c4faf39a3df20fa3ab62910c8b19 Mon Sep 17 00:00:00 2001 From: a-chol Date: Sun, 21 Oct 2018 18:20:24 +0200 Subject: [PATCH 217/269] Keyboard: bminiex : Working backlight (#4171) * bminiex : Working backlight * bminiex keyboard with fixes * bminiex keyboard more fixes --- keyboards/bminiex/backlight.c | 211 +++++++++++ keyboards/bminiex/backlight_custom.h | 13 + keyboards/bminiex/bminiex.c | 97 +++++ keyboards/bminiex/bminiex.h | 58 +++ keyboards/bminiex/breathing_custom.h | 140 ++++++++ keyboards/bminiex/config.h | 41 +++ keyboards/bminiex/i2c.c | 106 ++++++ keyboards/bminiex/i2c.h | 25 ++ keyboards/bminiex/keymaps/default/keymap.c | 29 ++ keyboards/bminiex/matrix.c | 122 +++++++ keyboards/bminiex/readme.md | 14 + keyboards/bminiex/rules.mk | 56 +++ keyboards/bminiex/usbconfig.h | 396 +++++++++++++++++++++ tmk_core/common/backlight.h | 5 +- 14 files changed, 1309 insertions(+), 4 deletions(-) create mode 100644 keyboards/bminiex/backlight.c create mode 100644 keyboards/bminiex/backlight_custom.h create mode 100644 keyboards/bminiex/bminiex.c create mode 100644 keyboards/bminiex/bminiex.h create mode 100644 keyboards/bminiex/breathing_custom.h create mode 100644 keyboards/bminiex/config.h create mode 100644 keyboards/bminiex/i2c.c create mode 100644 keyboards/bminiex/i2c.h create mode 100644 keyboards/bminiex/keymaps/default/keymap.c create mode 100644 keyboards/bminiex/matrix.c create mode 100644 keyboards/bminiex/readme.md create mode 100644 keyboards/bminiex/rules.mk create mode 100644 keyboards/bminiex/usbconfig.h diff --git a/keyboards/bminiex/backlight.c b/keyboards/bminiex/backlight.c new file mode 100644 index 0000000000..94e8126d88 --- /dev/null +++ b/keyboards/bminiex/backlight.c @@ -0,0 +1,211 @@ +/** + * Backlighting code for PS2AVRGB boards (ATMEGA32A) + * Kenneth A. (github.com/krusli | krusli.me) + */ + +#include "backlight.h" +#include "quantum.h" + +#include +#include + +#include "backlight_custom.h" +#include "breathing_custom.h" + +// DEBUG +#include +#include + +// Port D: digital pins of the AVR chipset +#define NUMLOCK_PORT (1 << 0) // D0 +#define CAPSLOCK_PORT (1 << 1) // D1 +#define BACKLIGHT_PORT (1 << 4) // D4 +#define SCROLLLOCK_PORT (1 << 6) // D6 + +#define TIMER_CLK_DIV64 0x03 ///< Timer clocked at F_CPU/64 +#define TIMER1PRESCALE TIMER_CLK_DIV64 ///< timer 1 prescaler default + +#define TIMER_PRESCALE_MASK 0x07 ///< Timer Prescaler Bit-Mask + +#define PWM_MAX 0xFF +#define TIMER_TOP 255 // 8 bit PWM + +extern backlight_config_t backlight_config; + +/** + * References + * Port Registers: https://www.arduino.cc/en/Reference/PortManipulation + * TCCR1A: https://electronics.stackexchange.com/questions/92350/what-is-the-difference-between-tccr1a-and-tccr1b + * Timers: http://www.avrbeginners.net/architecture/timers/timers.html + * 16-bit timer setup: http://sculland.com/ATmega168/Interrupts-And-Timers/16-Bit-Timer-Setup/ + * PS2AVRGB firmware: https://github.com/showjean/ps2avrU/tree/master/firmware + */ + +// @Override +// turn LEDs on and off depending on USB caps/num/scroll lock states. +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + // turn on + DDRD |= NUMLOCK_PORT; + PORTD |= NUMLOCK_PORT; + } else { + // turn off + DDRD &= ~NUMLOCK_PORT; + PORTD &= ~NUMLOCK_PORT; + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRD |= CAPSLOCK_PORT; + PORTD |= CAPSLOCK_PORT; + } else { + DDRD &= ~CAPSLOCK_PORT; + PORTD &= ~CAPSLOCK_PORT; + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + DDRD |= SCROLLLOCK_PORT; + PORTD |= SCROLLLOCK_PORT; + } else { + DDRD &= ~SCROLLLOCK_PORT; + PORTD &= ~SCROLLLOCK_PORT; + } +} + +#ifdef BACKLIGHT_ENABLE + +// sets up Timer 1 for 8-bit PWM +void timer1PWMSetup(void) { // NOTE ONLY CALL THIS ONCE + // default 8 bit mode + TCCR1A &= ~(1 << 1); // cbi(TCCR1A,PWM11); <- set PWM11 bit to HIGH + TCCR1A |= (1 << 0); // sbi(TCCR1A,PWM10); <- set PWM10 bit to LOW + + // clear output compare value A + // outb(OCR1AH, 0); + // outb(OCR1AL, 0); + + // clear output comparator registers for B + OCR1BH = 0; // outb(OCR1BH, 0); + OCR1BL = 0; // outb(OCR1BL, 0); +} + +bool is_init = false; +void timer1Init(void) { + // timer1SetPrescaler(TIMER1PRESCALE) + // set to DIV/64 + (TCCR1B) = ((TCCR1B) & ~TIMER_PRESCALE_MASK) | TIMER1PRESCALE; + + // reset TCNT1 + TCNT1H = 0; // outb(TCNT1H, 0); + TCNT1L = 0; // outb(TCNT1L, 0); + + // TOIE1: Timer Overflow Interrupt Enable (Timer 1); + TIMSK |= _BV(TOIE1); // sbi(TIMSK, TOIE1); + + is_init = true; +} + +void timer1UnInit(void) { + // set prescaler back to NONE + (TCCR1B) = ((TCCR1B) & ~TIMER_PRESCALE_MASK) | 0x00; // TIMERRTC_CLK_STOP + + // disable timer overflow interrupt + TIMSK &= ~_BV(TOIE1); // overflow bit? + + setPWM(0); + + is_init = false; +} + + +// handle TCNT1 overflow +//! Interrupt handler for tcnt1 overflow interrupt +ISR(TIMER1_OVF_vect, ISR_NOBLOCK) +{ + // sei(); + // handle breathing here + #ifdef BACKLIGHT_BREATHING + if (is_breathing()) { + custom_breathing_handler(); + } + #endif +} + +// enable timer 1 PWM +// timer1PWMBOn() +void timer1PWMBEnable(void) { + // turn on channel B (OC1B) PWM output + // set OC1B as non-inverted PWM + TCCR1A |= _BV(COM1B1); + TCCR1A &= ~_BV(COM1B0); +} + +// disable timer 1 PWM +// timer1PWMBOff() +void timer1PWMBDisable(void) { + TCCR1A &= ~_BV(COM1B1); + TCCR1A &= ~_BV(COM1B0); +} + +void enableBacklight(void) { + DDRD |= BACKLIGHT_PORT; // set digital pin 4 as output + PORTD |= BACKLIGHT_PORT; // set digital pin 4 to high +} + +void disableBacklight(void) { + // DDRD &= ~BACKLIGHT_PORT; // set digital pin 4 as input + PORTD &= ~BACKLIGHT_PORT; // set digital pin 4 to low +} + +void startPWM(void) { + timer1Init(); + timer1PWMBEnable(); + enableBacklight(); +} + +void stopPWM(void) { + timer1UnInit(); + disableBacklight(); + timer1PWMBDisable(); +} + +void b_led_init_ports(void) { + /* turn backlight on/off depending on user preference */ + #if BACKLIGHT_ON_STATE == 0 + // DDRx register: sets the direction of Port D + // DDRD &= ~BACKLIGHT_PORT; // set digital pin 4 as input + PORTD &= ~BACKLIGHT_PORT; // set digital pin 4 to low + #else + DDRD |= BACKLIGHT_PORT; // set digital pin 4 as output + PORTD |= BACKLIGHT_PORT; // set digital pin 4 to high + #endif + + timer1PWMSetup(); + startPWM(); + + #ifdef BACKLIGHT_BREATHING + breathing_enable(); + #endif +} + +void b_led_set(uint8_t level) { + if (level > BACKLIGHT_LEVELS) { + level = BACKLIGHT_LEVELS; + } + + setPWM((int)(TIMER_TOP * (float) level / BACKLIGHT_LEVELS)); +} + +// called every matrix scan +void b_led_task(void) { + // do nothing for now +} + +void setPWM(uint16_t xValue) { + if (xValue > TIMER_TOP) { + xValue = TIMER_TOP; + } + OCR1B = xValue; // timer1PWMBSet(xValue); +} + +#endif // BACKLIGHT_ENABLE diff --git a/keyboards/bminiex/backlight_custom.h b/keyboards/bminiex/backlight_custom.h new file mode 100644 index 0000000000..51365fe3ba --- /dev/null +++ b/keyboards/bminiex/backlight_custom.h @@ -0,0 +1,13 @@ +/** + * Backlighting code for PS2AVRGB boards (ATMEGA32A) + * Kenneth A. (github.com/krusli | krusli.me) + */ + +#pragma once + +#include +void b_led_init_ports(void); +void b_led_set(uint8_t level); +void b_led_task(void); +void setPWM(uint16_t xValue); + diff --git a/keyboards/bminiex/bminiex.c b/keyboards/bminiex/bminiex.c new file mode 100644 index 0000000000..d9b05aba51 --- /dev/null +++ b/keyboards/bminiex/bminiex.c @@ -0,0 +1,97 @@ +/* +Copyright 2017 Luiz Ribeiro + +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 "bminiex.h" +#include "rgblight.h" + +#include + +#include "action_layer.h" +#include "i2c.h" +#include "quantum.h" + +#include "backlight.h" +#include "backlight_custom.h" + +// for keyboard subdirectory level init functions +// @Override +void matrix_init_kb(void) { + // call user level keymaps, if any + matrix_init_user(); +} + +#ifdef BACKLIGHT_ENABLE +/// Overrides functions in `quantum.c` +void backlight_init_ports(void) { + b_led_init_ports(); +} + +void backlight_task(void) { + b_led_task(); +} + +void backlight_set(uint8_t level) { + b_led_set(level); +} +#endif + +#ifdef RGBLIGHT_ENABLE +extern rgblight_config_t rgblight_config; + +// custom RGB driver +void rgblight_set(void) { + if (!rgblight_config.enable) { + for (uint8_t i=0; i + +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 + +#include "quantum.h" + +#define LAYOUT( \ + K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \ + K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \ + K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, K63, K73, K83, \ + K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, KE0, K62, K72, K82, K92, \ + K01, K30, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \ + K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \ +){ \ + { K00, K10, K20, K30, KC_NO, KC_NO, K60, KC_NO, K80, K90, KC_NO, KB0, KC0, KD0, KE0 }, \ + { K01, K11, K21, K31, K41, K51, K61, K71, K81, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \ + { K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC2, KD2, KE2 }, \ + { K03, K13, K23, K33, K43, K53, K63, K73, K83, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \ + { K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, KA4, KB4, KC4, KC_NO, KE4 }, \ + { K05, KC_NO, K25, K35, K45, K55, K65, K75, K85, K95, KC_NO, KB5, KC5, KD5, KE5 }, \ + { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \ + { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \ +} + +#define LAYOUT_kc( \ + K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \ + K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \ + K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, K63, K73, K83, \ + K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, KE0, K62, K72, K82, K92, \ + K01, K30, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \ + K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \ +) \ +{ \ + { KC_##K00, KC_##K10, KC_##K20, KC_##K30, KC_NO, KC_NO, KC_##K60, KC_NO, KC_##K80, KC_##K90, KC_NO, KC_##KB0, KC_##KC0, KC_##KD0, KC_##KE0 }, \ + { KC_##K01, KC_##K11, KC_##K21, KC_##K31, KC_##K41, KC_##K51, KC_##K61, KC_##K71, KC_##K81, KC_NO, KC_##KA1, KC_##KB1, KC_NO, KC_##KD1, KC_##KE1 }, \ + { KC_##K02, KC_##K12, KC_##K22, KC_##K32, KC_##K42, KC_##K52, KC_##K62, KC_##K72, KC_##K82, KC_##K92, KC_##KA2, KC_##KB2, KC_##KC2, KC_##KD2, KC_##KE2 }, \ + { KC_##K03, KC_##K13, KC_##K23, KC_##K33, KC_##K43, KC_##K53, KC_##K63, KC_##K73, KC_##K83, KC_NO, KC_##KA3, KC_##KB3, KC_##KC3, KC_##KD3, KC_NO }, \ + { KC_##K04, KC_##K14, KC_##K24, KC_##K34, KC_##K44, KC_##K54, KC_##K64, KC_##K74, KC_##K84, KC_##K94, KC_##KA4, KC_##KB4, KC_##KC4, KC_NO, KC_##KE4 }, \ + { KC_##K05, KC_NO, KC_##K25, KC_##K35, KC_##K45, KC_##K55, KC_##K65, KC_##K75, KC_##K85, KC_##K95, KC_NO, KC_##KB5, KC_##KC5, KC_##KD5, KC_##KE5 }, \ + { KC_##K06, KC_##K16, KC_##K26, KC_##K36, KC_##K46, KC_##K56, KC_##K66, KC_##K76, KC_##K86, KC_##K96, KC_##KA6, KC_##KB6, KC_##KC6, KC_##KD6, KC_##KE6 }, \ + { KC_##K07, KC_##K17, KC_##K27, KC_##K37, KC_##K47, KC_##K57, KC_##K67, KC_##K77, KC_NO, KC_NO, KC_##KA7, KC_##KB7, KC_##KC7, KC_##KD7, KC_##KE7 } \ +} + diff --git a/keyboards/bminiex/breathing_custom.h b/keyboards/bminiex/breathing_custom.h new file mode 100644 index 0000000000..71416b1b45 --- /dev/null +++ b/keyboards/bminiex/breathing_custom.h @@ -0,0 +1,140 @@ +/** + * Breathing effect code for PS2AVRGB boards (ATMEGA32A) + * Works in conjunction with `backlight.c`. + * + * Code adapted from `quantum.c` to register with the existing TIMER1 overflow + * handler in `backlight.c` instead of setting up its own timer. + * Kenneth A. (github.com/krusli | krusli.me) + */ + +#ifdef BACKLIGHT_ENABLE +#ifdef BACKLIGHT_BREATHING + +#include "backlight_custom.h" + +#ifndef BREATHING_PERIOD +#define BREATHING_PERIOD 6 +#endif + +#define breathing_min() do {breathing_counter = 0;} while (0) +#define breathing_max() do {breathing_counter = breathing_period * 244 / 2;} while (0) + +// TODO make this share code with quantum.c + +#define BREATHING_NO_HALT 0 +#define BREATHING_HALT_OFF 1 +#define BREATHING_HALT_ON 2 +#define BREATHING_STEPS 128 + +static uint8_t breathing_period = BREATHING_PERIOD; +static uint8_t breathing_halt = BREATHING_NO_HALT; +static uint16_t breathing_counter = 0; + +static bool breathing = false; + +bool is_breathing(void) { + return breathing; +} + +// See http://jared.geek.nz/2013/feb/linear-led-pwm +static uint16_t cie_lightness(uint16_t v) { + if (v <= 5243) // if below 8% of max + return v / 9; // same as dividing by 900% + else { + uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare + // to get a useful result with integer division, we shift left in the expression above + // and revert what we've done again after squaring. + y = y * y * y >> 8; + if (y > 0xFFFFUL) // prevent overflow + return 0xFFFFU; + else + return (uint16_t) y; + } +} + +void breathing_enable(void) { + breathing = true; + breathing_counter = 0; + breathing_halt = BREATHING_NO_HALT; + // interrupt already registered +} + +void breathing_pulse(void) { + if (get_backlight_level() == 0) + breathing_min(); + else + breathing_max(); + breathing_halt = BREATHING_HALT_ON; + // breathing_interrupt_enable(); + breathing = true; +} + +void breathing_disable(void) { + breathing = false; + // backlight_set(get_backlight_level()); + b_led_set(get_backlight_level()); // custom implementation of backlight_set() +} + +void breathing_self_disable(void) +{ + if (get_backlight_level() == 0) + breathing_halt = BREATHING_HALT_OFF; + else + breathing_halt = BREATHING_HALT_ON; +} + +void breathing_toggle(void) { + if (is_breathing()) + breathing_disable(); + else + breathing_enable(); +} + +void breathing_period_set(uint8_t value) +{ + if (!value) + value = 1; + breathing_period = value; +} + +void breathing_period_default(void) { + breathing_period_set(BREATHING_PERIOD); +} + +void breathing_period_inc(void) +{ + breathing_period_set(breathing_period+1); +} + +void breathing_period_dec(void) +{ + breathing_period_set(breathing_period-1); +} + +/* To generate breathing curve in python: + * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)] + */ +static const uint8_t breathing_table[BREATHING_STEPS] PROGMEM = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +// Use this before the cie_lightness function. +static inline uint16_t scale_backlight(uint16_t v) { + return v / BACKLIGHT_LEVELS * get_backlight_level(); +} + +void custom_breathing_handler(void) { + uint16_t interval = (uint16_t) breathing_period * 244 / BREATHING_STEPS; + // resetting after one period to prevent ugly reset at overflow. + breathing_counter = (breathing_counter + 1) % (breathing_period * 244); + uint8_t index = breathing_counter / interval % BREATHING_STEPS; + + if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) || + ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1))) + { + // breathing_interrupt_disable(); + } + + setPWM(cie_lightness(scale_backlight((uint16_t) pgm_read_byte(&breathing_table[index]) * 0x0101U))); +} + +#endif // BACKLIGHT_BREATHING +#endif // BACKLIGHT_ENABLE diff --git a/keyboards/bminiex/config.h b/keyboards/bminiex/config.h new file mode 100644 index 0000000000..3f160109e3 --- /dev/null +++ b/keyboards/bminiex/config.h @@ -0,0 +1,41 @@ +/* +Copyright 2017 Luiz Ribeiro + +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 + +#include "config_common.h" + +#define VENDOR_ID 0x20A0 +#define PRODUCT_ID 0x422E +#define MANUFACTURER winkeyless.kr +#define PRODUCT B.mini Ex + +#define RGBLED_NUM 20 + +/* matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 15 + +#define RGBLIGHT_ANIMATIONS + +#define BACKLIGHT_LEVELS 5 + +#define NO_UART 1 + +/* key combination for command */ +#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) + diff --git a/keyboards/bminiex/i2c.c b/keyboards/bminiex/i2c.c new file mode 100644 index 0000000000..a4f9521352 --- /dev/null +++ b/keyboards/bminiex/i2c.c @@ -0,0 +1,106 @@ +/* +Copyright 2016 Luiz Ribeiro + +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 . +*/ + +// Please do not modify this file + +#include +#include + +#include "i2c.h" + +void i2c_set_bitrate(uint16_t bitrate_khz) { + uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz); + if (bitrate_div >= 16) { + bitrate_div = (bitrate_div - 16) / 2; + } + TWBR = bitrate_div; +} + +void i2c_init(void) { + // set pull-up resistors on I2C bus pins + PORTC |= 0b11; + + i2c_set_bitrate(400); + + // enable TWI (two-wire interface) + TWCR |= (1 << TWEN); + + // enable TWI interrupt and slave address ACK + TWCR |= (1 << TWIE); + TWCR |= (1 << TWEA); +} + +uint8_t i2c_start(uint8_t address) { + // reset TWI control register + TWCR = 0; + + // begin transmission and wait for it to end + TWCR = (1< + +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 . +*/ + +// Please do not modify this file + +#pragma once + +void i2c_init(void); +void i2c_set_bitrate(uint16_t bitrate_khz); +uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length); + diff --git a/keyboards/bminiex/keymaps/default/keymap.c b/keyboards/bminiex/keymaps/default/keymap.c new file mode 100644 index 0000000000..ed949d74fb --- /dev/null +++ b/keyboards/bminiex/keymaps/default/keymap.c @@ -0,0 +1,29 @@ +/* +Copyright 2017 Luiz Ribeiro + +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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_HOME,KC_END, KC_NO, KC_NO, KC_NO, KC_NO, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_NO, KC_INS, KC_P7, KC_P8, KC_P9, + KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_APP ,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT, KC_PENT + ) +}; diff --git a/keyboards/bminiex/matrix.c b/keyboards/bminiex/matrix.c new file mode 100644 index 0000000000..8faaed8ac0 --- /dev/null +++ b/keyboards/bminiex/matrix.c @@ -0,0 +1,122 @@ +/* +Copyright 2017 Luiz Ribeiro + +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 +#include + +#include "matrix.h" +#include "backlight.h" + +#ifndef DEBOUNCE +#define DEBOUNCE 5 +#endif + +static uint8_t debouncing = DEBOUNCE; + +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +__attribute__ ((weak)) +void matrix_init_user(void) {} +__attribute__ ((weak)) +void matrix_scan_user(void) {} +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +void matrix_init(void) { + // all outputs for rows high + DDRB = 0xFF; + PORTB = 0xFF; + // all inputs for columns + DDRA = 0x00; + DDRC &= ~(0x111111<<2); + DDRD &= ~(1<> 1) & 0x55) | ((x << 1) & 0xaa); + x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc); + x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0); + return x; +} + +uint8_t matrix_scan(void) { + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + matrix_set_row_status(row); + _delay_us(5); + + matrix_row_t cols = ( + // cols 0..7, PORTA 0 -> 7 + (~PINA) & 0xFF + ) | ( + // cols 8..13, PORTC 7 -> 0 + bit_reverse((~PINC) & 0xFF) << 8 + ) | ( + // col 14, PORTD 7 + ((~PIND) & (1 << PIND7)) << 7 + ); + + if (matrix_debouncing[row] != cols) { + matrix_debouncing[row] = cols; + debouncing = DEBOUNCE; + } + } + + if (debouncing) { + if (--debouncing) { + _delay_ms(1); + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + } + } + + matrix_scan_quantum(); + + return 1; +} + +inline matrix_row_t matrix_get_row(uint8_t row) { + return matrix[row]; +} + +void matrix_print(void) { +} diff --git a/keyboards/bminiex/readme.md b/keyboards/bminiex/readme.md new file mode 100644 index 0000000000..204bcbbb1b --- /dev/null +++ b/keyboards/bminiex/readme.md @@ -0,0 +1,14 @@ +B.mini EX +========= + +A compact fullsize keyboard with RGB + +Keyboard Maintainer: QMK Community +Hardware Supported: B.mini EX PCB +Hardware Availability: https://winkeyless.kr/product/b-mini-ex-x2-pcb/ + +Make example for this keyboard (after setting up your build environment): + + make bminiex:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/bminiex/rules.mk b/keyboards/bminiex/rules.mk new file mode 100644 index 0000000000..e5d3a2a88c --- /dev/null +++ b/keyboards/bminiex/rules.mk @@ -0,0 +1,56 @@ +# Copyright 2017 Luiz Ribeiro +# +# 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 . + +# MCU name +MCU = atmega32a +PROTOCOL = VUSB + +# unsupported features for now +NO_UART = yes +NO_SUSPEND_POWER_DOWN = yes + +# processor frequency +F_CPU = 12000000 + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = bootloadHID + +# build options +BOOTMAGIC_ENABLE = yes +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes +CONSOLE_ENABLE = no +DEBUG_ENABLE = no +COMMAND_ENABLE = no +BACKLIGHT_ENABLE = yes +BACKLIGHT_CUSTOM_DRIVER = yes +RGBLIGHT_ENABLE = yes +RGBLIGHT_CUSTOM_DRIVER = yes +TAP_DANCE_ENABLE = no + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +OPT_DEFS = -DDEBUG_LEVEL=0 + +# custom matrix setup +CUSTOM_MATRIX = yes +SRC = matrix.c i2c.c backlight.c + +# programming options +PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex diff --git a/keyboards/bminiex/usbconfig.h b/keyboards/bminiex/usbconfig.h new file mode 100644 index 0000000000..d2d848fcdc --- /dev/null +++ b/keyboards/bminiex/usbconfig.h @@ -0,0 +1,396 @@ +/* Name: usbconfig.h + * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers + * Author: Christian Starkjohann + * Creation Date: 2005-04-01 + * Tabsize: 4 + * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH + * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) + * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $ + */ + +#ifndef __usbconfig_h_included__ +#define __usbconfig_h_included__ + +#include "config.h" + +/* +General Description: +This file is an example configuration (with inline documentation) for the USB +driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is +also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may +wire the lines to any other port, as long as D+ is also wired to INT0 (or any +other hardware interrupt, as long as it is the highest level interrupt, see +section at the end of this file). +*/ + +/* ---------------------------- Hardware Config ---------------------------- */ + +#define USB_CFG_IOPORTNAME D +/* This is the port where the USB bus is connected. When you configure it to + * "B", the registers PORTB, PINB and DDRB will be used. + */ +#define USB_CFG_DMINUS_BIT 3 +/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected. + * This may be any bit in the port. + */ +#define USB_CFG_DPLUS_BIT 2 +/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected. + * This may be any bit in the port. Please note that D+ must also be connected + * to interrupt pin INT0! [You can also use other interrupts, see section + * "Optional MCU Description" below, or you can connect D- to the interrupt, as + * it is required if you use the USB_COUNT_SOF feature. If you use D- for the + * interrupt, the USB interrupt will also be triggered at Start-Of-Frame + * markers every millisecond.] + */ +#define USB_CFG_CLOCK_KHZ (F_CPU/1000) +/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000, + * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code + * require no crystal, they tolerate +/- 1% deviation from the nominal + * frequency. All other rates require a precision of 2000 ppm and thus a + * crystal! + * Since F_CPU should be defined to your actual clock rate anyway, you should + * not need to modify this setting. + */ +#define USB_CFG_CHECK_CRC 0 +/* Define this to 1 if you want that the driver checks integrity of incoming + * data packets (CRC checks). CRC checks cost quite a bit of code size and are + * currently only available for 18 MHz crystal clock. You must choose + * USB_CFG_CLOCK_KHZ = 18000 if you enable this option. + */ + +/* ----------------------- Optional Hardware Config ------------------------ */ + +/* #define USB_CFG_PULLUP_IOPORTNAME D */ +/* If you connect the 1.5k pullup resistor from D- to a port pin instead of + * V+, you can connect and disconnect the device from firmware by calling + * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h). + * This constant defines the port on which the pullup resistor is connected. + */ +/* #define USB_CFG_PULLUP_BIT 4 */ +/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined + * above) where the 1.5k pullup resistor is connected. See description + * above for details. + */ + +/* --------------------------- Functional Range ---------------------------- */ + +#define USB_CFG_HAVE_INTRIN_ENDPOINT 1 +/* Define this to 1 if you want to compile a version with two endpoints: The + * default control endpoint 0 and an interrupt-in endpoint (any other endpoint + * number). + */ +#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1 +/* Define this to 1 if you want to compile a version with three endpoints: The + * default control endpoint 0, an interrupt-in endpoint 3 (or the number + * configured below) and a catch-all default interrupt-in endpoint as above. + * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature. + */ +#define USB_CFG_EP3_NUMBER 3 +/* If the so-called endpoint 3 is used, it can now be configured to any other + * endpoint number (except 0) with this macro. Default if undefined is 3. + */ +/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */ +/* The above macro defines the startup condition for data toggling on the + * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1. + * Since the token is toggled BEFORE sending any data, the first packet is + * sent with the oposite value of this configuration! + */ +#define USB_CFG_IMPLEMENT_HALT 0 +/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature + * for endpoint 1 (interrupt endpoint). Although you may not need this feature, + * it is required by the standard. We have made it a config option because it + * bloats the code considerably. + */ +#define USB_CFG_SUPPRESS_INTR_CODE 0 +/* Define this to 1 if you want to declare interrupt-in endpoints, but don't + * want to send any data over them. If this macro is defined to 1, functions + * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if + * you need the interrupt-in endpoints in order to comply to an interface + * (e.g. HID), but never want to send any data. This option saves a couple + * of bytes in flash memory and the transmit buffers in RAM. + */ +#define USB_CFG_INTR_POLL_INTERVAL 1 +/* If you compile a version with endpoint 1 (interrupt-in), this is the poll + * interval. The value is in milliseconds and must not be less than 10 ms for + * low speed devices. + */ +#define USB_CFG_IS_SELF_POWERED 0 +/* Define this to 1 if the device has its own power supply. Set it to 0 if the + * device is powered from the USB bus. + */ +#define USB_CFG_MAX_BUS_POWER 500 +/* Set this variable to the maximum USB bus power consumption of your device. + * The value is in milliamperes. [It will be divided by two since USB + * communicates power requirements in units of 2 mA.] + */ +#define USB_CFG_IMPLEMENT_FN_WRITE 1 +/* Set this to 1 if you want usbFunctionWrite() to be called for control-out + * transfers. Set it to 0 if you don't need it and want to save a couple of + * bytes. + */ +#define USB_CFG_IMPLEMENT_FN_READ 0 +/* Set this to 1 if you need to send control replies which are generated + * "on the fly" when usbFunctionRead() is called. If you only want to send + * data from a static buffer, set it to 0 and return the data from + * usbFunctionSetup(). This saves a couple of bytes. + */ +#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0 +/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints. + * You must implement the function usbFunctionWriteOut() which receives all + * interrupt/bulk data sent to any endpoint other than 0. The endpoint number + * can be found in 'usbRxToken'. + */ +#define USB_CFG_HAVE_FLOWCONTROL 0 +/* Define this to 1 if you want flowcontrol over USB data. See the definition + * of the macros usbDisableAllRequests() and usbEnableAllRequests() in + * usbdrv.h. + */ +#define USB_CFG_DRIVER_FLASH_PAGE 0 +/* If the device has more than 64 kBytes of flash, define this to the 64 k page + * where the driver's constants (descriptors) are located. Or in other words: + * Define this to 1 for boot loaders on the ATMega128. + */ +#define USB_CFG_LONG_TRANSFERS 0 +/* Define this to 1 if you want to send/receive blocks of more than 254 bytes + * in a single control-in or control-out transfer. Note that the capability + * for long transfers increases the driver size. + */ +/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */ +/* This macro is a hook if you want to do unconventional things. If it is + * defined, it's inserted at the beginning of received message processing. + * If you eat the received message and don't want default processing to + * proceed, do a return after doing your things. One possible application + * (besides debugging) is to flash a status LED on each packet. + */ +/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */ +/* This macro is a hook if you need to know when an USB RESET occurs. It has + * one parameter which distinguishes between the start of RESET state and its + * end. + */ +/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */ +/* This macro (if defined) is executed when a USB SET_ADDRESS request was + * received. + */ +#define USB_COUNT_SOF 1 +/* define this macro to 1 if you need the global variable "usbSofCount" which + * counts SOF packets. This feature requires that the hardware interrupt is + * connected to D- instead of D+. + */ +/* #ifdef __ASSEMBLER__ + * macro myAssemblerMacro + * in YL, TCNT0 + * sts timer0Snapshot, YL + * endm + * #endif + * #define USB_SOF_HOOK myAssemblerMacro + * This macro (if defined) is executed in the assembler module when a + * Start Of Frame condition is detected. It is recommended to define it to + * the name of an assembler macro which is defined here as well so that more + * than one assembler instruction can be used. The macro may use the register + * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages + * immediately after an SOF pulse may be lost and must be retried by the host. + * What can you do with this hook? Since the SOF signal occurs exactly every + * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in + * designs running on the internal RC oscillator. + * Please note that Start Of Frame detection works only if D- is wired to the + * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES! + */ +#define USB_CFG_CHECK_DATA_TOGGLING 0 +/* define this macro to 1 if you want to filter out duplicate data packets + * sent by the host. Duplicates occur only as a consequence of communication + * errors, when the host does not receive an ACK. Please note that you need to + * implement the filtering yourself in usbFunctionWriteOut() and + * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable + * for each control- and out-endpoint to check for duplicate packets. + */ +#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0 +/* define this macro to 1 if you want the function usbMeasureFrameLength() + * compiled in. This function can be used to calibrate the AVR's RC oscillator. + */ +#define USB_USE_FAST_CRC 0 +/* The assembler module has two implementations for the CRC algorithm. One is + * faster, the other is smaller. This CRC routine is only used for transmitted + * messages where timing is not critical. The faster routine needs 31 cycles + * per byte while the smaller one needs 61 to 69 cycles. The faster routine + * may be worth the 32 bytes bigger code size if you transmit lots of data and + * run the AVR close to its limit. + */ + +/* -------------------------- Device Description --------------------------- */ + +#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF) +/* USB vendor ID for the device, low byte first. If you have registered your + * own Vendor ID, define it here. Otherwise you may use one of obdev's free + * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF) +/* This is the ID of the product, low byte first. It is interpreted in the + * scope of the vendor ID. If you have registered your own VID with usb.org + * or if you have licensed a PID from somebody else, define it here. Otherwise + * you may use one of obdev's free shared VID/PID pairs. See the file + * USB-IDs-for-free.txt for details! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_VERSION 0x00, 0x02 +/* Version number of the device: Minor number first, then major number. + */ +#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r' +#define USB_CFG_VENDOR_NAME_LEN 13 +/* These two values define the vendor name returned by the USB device. The name + * must be given as a list of characters under single quotes. The characters + * are interpreted as Unicode (UTF-16) entities. + * If you don't want a vendor name string, undefine these macros. + * ALWAYS define a vendor name containing your Internet domain name if you use + * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for + * details. + */ +#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B' +#define USB_CFG_DEVICE_NAME_LEN 8 +/* Same as above for the device name. If you don't want a device name, undefine + * the macros. See the file USB-IDs-for-free.txt before you assign a name if + * you use a shared VID/PID. + */ +/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */ +/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */ +/* Same as above for the serial number. If you don't want a serial number, + * undefine the macros. + * It may be useful to provide the serial number through other means than at + * compile time. See the section about descriptor properties below for how + * to fine tune control over USB descriptors such as the string descriptor + * for the serial number. + */ +#define USB_CFG_DEVICE_CLASS 0 +#define USB_CFG_DEVICE_SUBCLASS 0 +/* See USB specification if you want to conform to an existing device class. + * Class 0xff is "vendor specific". + */ +#define USB_CFG_INTERFACE_CLASS 3 /* HID */ +#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */ +#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */ +/* See USB specification if you want to conform to an existing device class or + * protocol. The following classes must be set at interface level: + * HID class is 3, no subclass and protocol required (but may be useful!) + * CDC class is 2, use subclass 2 and protocol 1 for ACM + */ +#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0 +/* Define this to the length of the HID report descriptor, if you implement + * an HID device. Otherwise don't define it or define it to 0. + * If you use this define, you must add a PROGMEM character array named + * "usbHidReportDescriptor" to your code which contains the report descriptor. + * Don't forget to keep the array and this define in sync! + */ + +/* #define USB_PUBLIC static */ +/* Use the define above if you #include usbdrv.c instead of linking against it. + * This technique saves a couple of bytes in flash memory. + */ + +/* ------------------- Fine Control over USB Descriptors ------------------- */ +/* If you don't want to use the driver's default USB descriptors, you can + * provide our own. These can be provided as (1) fixed length static data in + * flash memory, (2) fixed length static data in RAM or (3) dynamically at + * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more + * information about this function. + * Descriptor handling is configured through the descriptor's properties. If + * no properties are defined or if they are 0, the default descriptor is used. + * Possible properties are: + * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched + * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is + * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if + * you want RAM pointers. + * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found + * in static memory is in RAM, not in flash memory. + * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash), + * the driver must know the descriptor's length. The descriptor itself is + * found at the address of a well known identifier (see below). + * List of static descriptor names (must be declared PROGMEM if in flash): + * char usbDescriptorDevice[]; + * char usbDescriptorConfiguration[]; + * char usbDescriptorHidReport[]; + * char usbDescriptorString0[]; + * int usbDescriptorStringVendor[]; + * int usbDescriptorStringDevice[]; + * int usbDescriptorStringSerialNumber[]; + * Other descriptors can't be provided statically, they must be provided + * dynamically at runtime. + * + * Descriptor properties are or-ed or added together, e.g.: + * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18)) + * + * The following descriptors are defined: + * USB_CFG_DESCR_PROPS_DEVICE + * USB_CFG_DESCR_PROPS_CONFIGURATION + * USB_CFG_DESCR_PROPS_STRINGS + * USB_CFG_DESCR_PROPS_STRING_0 + * USB_CFG_DESCR_PROPS_STRING_VENDOR + * USB_CFG_DESCR_PROPS_STRING_PRODUCT + * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER + * USB_CFG_DESCR_PROPS_HID + * USB_CFG_DESCR_PROPS_HID_REPORT + * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver) + * + * Note about string descriptors: String descriptors are not just strings, they + * are Unicode strings prefixed with a 2 byte header. Example: + * int serialNumberDescriptor[] = { + * USB_STRING_DESCRIPTOR_HEADER(6), + * 'S', 'e', 'r', 'i', 'a', 'l' + * }; + */ + +#define USB_CFG_DESCR_PROPS_DEVICE 0 +#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0 +#define USB_CFG_DESCR_PROPS_STRINGS 0 +#define USB_CFG_DESCR_PROPS_STRING_0 0 +#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0 +#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0 +#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0 +#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_HID 0 +#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_HID_REPORT 0 +#define USB_CFG_DESCR_PROPS_UNKNOWN 0 + +#define usbMsgPtr_t unsigned short +/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to + * a scalar type here because gcc generates slightly shorter code for scalar + * arithmetics than for pointer arithmetics. Remove this define for backward + * type compatibility or define it to an 8 bit type if you use data in RAM only + * and all RAM is below 256 bytes (tiny memory model in IAR CC). + */ + +/* ----------------------- Optional MCU Description ------------------------ */ + +/* The following configurations have working defaults in usbdrv.h. You + * usually don't need to set them explicitly. Only if you want to run + * the driver on a device which is not yet supported or with a compiler + * which is not fully supported (such as IAR C) or if you use a differnt + * interrupt than INT0, you may have to define some of these. + */ +/* #define USB_INTR_CFG MCUCR */ +/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */ +/* #define USB_INTR_CFG_CLR 0 */ +/* #define USB_INTR_ENABLE GIMSK */ +/* #define USB_INTR_ENABLE_BIT INT0 */ +/* #define USB_INTR_PENDING GIFR */ +/* #define USB_INTR_PENDING_BIT INTF0 */ +/* #define USB_INTR_VECTOR INT0_vect */ + +/* Set INT1 for D- falling edge to count SOF */ +/* #define USB_INTR_CFG EICRA */ +#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10)) +/* #define USB_INTR_CFG_CLR 0 */ +/* #define USB_INTR_ENABLE EIMSK */ +#define USB_INTR_ENABLE_BIT INT1 +/* #define USB_INTR_PENDING EIFR */ +#define USB_INTR_PENDING_BIT INTF1 +#define USB_INTR_VECTOR INT1_vect + +#endif /* __usbconfig_h_included__ */ diff --git a/tmk_core/common/backlight.h b/tmk_core/common/backlight.h index f573092674..ef8ab9b2be 100644 --- a/tmk_core/common/backlight.h +++ b/tmk_core/common/backlight.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef BACKLIGHT_H -#define BACKLIGHT_H +#pragma once #include #include @@ -37,5 +36,3 @@ void backlight_step(void); void backlight_set(uint8_t level); void backlight_level(uint8_t level); uint8_t get_backlight_level(void); - -#endif From dedbc37196d5b9d9ccbb5654441fd84f820c4a7b Mon Sep 17 00:00:00 2001 From: Yan-Fa Li Date: Sun, 21 Oct 2018 18:27:33 -0700 Subject: [PATCH 218/269] Doesn't need a 50ms debounce Set it to default. I have no idea what I was thinking. --- keyboards/catch22/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/catch22/config.h b/keyboards/catch22/config.h index f151e7048f..c5cf8233db 100644 --- a/keyboards/catch22/config.h +++ b/keyboards/catch22/config.h @@ -39,7 +39,7 @@ along with this program. If not, see . #define DIODE_DIRECTION COL2ROW /* Set 0 if debouncing isn't needed */ -#define DEBOUNCING_DELAY 50 +// #define DEBOUNCING_DELAY 0 /* key combination for command */ #define IS_COMMAND() ( \ From 91bfbb62560cc237066de2392eefbb271eff9d6b Mon Sep 17 00:00:00 2001 From: "Colin T.A. Gray" Date: Mon, 22 Oct 2018 14:19:51 -0400 Subject: [PATCH 219/269] Updates docs - planck 6 and macos instructions (#4201) * add note about how to install rev6 (dfu-util) * include instructions on installing dfu-util on macOS --- docs/faq_build.md | 2 ++ docs/getting_started_build_tools.md | 1 + keyboards/planck/readme.md | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/docs/faq_build.md b/docs/faq_build.md index 00a0d386b9..465a283aef 100644 --- a/docs/faq_build.md +++ b/docs/faq_build.md @@ -105,10 +105,12 @@ The solution is to remove and reinstall all affected modules. ``` brew rm avr-gcc brew rm dfu-programmer +brew rm dfu-util brew rm gcc-arm-none-eabi brew rm avrdude brew install avr-gcc brew install dfu-programmer +brew install dfu-util brew install gcc-arm-none-eabi brew install avrdude ``` diff --git a/docs/getting_started_build_tools.md b/docs/getting_started_build_tools.md index c1e02d4e07..dd3e7805a9 100644 --- a/docs/getting_started_build_tools.md +++ b/docs/getting_started_build_tools.md @@ -58,6 +58,7 @@ If you're using [homebrew,](http://brew.sh/) you can use the following commands: brew update brew install avr-gcc@7 brew install dfu-programmer + brew install dfu-util brew install gcc-arm-none-eabi brew install avrdude diff --git a/keyboards/planck/readme.md b/keyboards/planck/readme.md index f857c546cc..083279e8a6 100644 --- a/keyboards/planck/readme.md +++ b/keyboards/planck/readme.md @@ -13,4 +13,8 @@ Make example for this keyboard (after setting up your build environment): make planck/rev4:default +Install examples: + + make planck/rev6:default:dfu-util + See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. From fbc6bd82664f7286e358e14da6c7945aa061ee3b Mon Sep 17 00:00:00 2001 From: Dylan Khor Date: Mon, 22 Oct 2018 14:29:04 -0400 Subject: [PATCH 220/269] Minor updates to build tools docs revised (#4195) * add initial khord iris keymap * correct path of windows qmk install script --- docs/getting_started_build_tools.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/getting_started_build_tools.md b/docs/getting_started_build_tools.md index dd3e7805a9..88f3642b28 100644 --- a/docs/getting_started_build_tools.md +++ b/docs/getting_started_build_tools.md @@ -62,7 +62,7 @@ If you're using [homebrew,](http://brew.sh/) you can use the following commands: brew install gcc-arm-none-eabi brew install avrdude -This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of avr-libc can take over 20 minutes and exhibit high CPU usage. +This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of `avr-gcc@7` can take over 20 minutes and exhibit high CPU usage. ## Windows with msys2 (recommended) @@ -70,9 +70,9 @@ The best environment to use, for Windows Vista through any later version (tested * Install msys2 by downloading it and following the instructions here: http://www.msys2.org * Open the ``MSYS2 MingGW 64-bit`` shortcut -* Navigate to your qmk checkout. For example, if it's in the root of your c drive: +* Navigate to your QMK repository. For example, if it's in the root of your c drive: * `$ cd /c/qmk_firmware` -* Run `util/msys2_install.sh` and follow the prompts +* Run `util/qmk_install.sh` and follow the prompts ## Windows 10 (deprecated) These are the old instructions for Windows 10. We recommend you use [MSYS2 as outlined above](#windows-with-msys2-recommended). From 4665e4ffffcdfc6fe6f498928963adc64f6fefd7 Mon Sep 17 00:00:00 2001 From: Takeshi ISHII <2170248+mtei@users.noreply.github.com> Date: Tue, 23 Oct 2018 03:38:05 +0900 Subject: [PATCH 221/269] Keyboard: Helix serial.c, split_scom.c bug fix and update (#4191) * helix/serial.c add support PD1,PD3,PE6 and configuration simplify * Add comment about ATmega32U4 I2C * Add compile time check for ATmega32U4 I2C * change TAB code to 8 SPACE code * Helix serial.c PORTD,PD0 test. OK OK PD0 - PD1 OK PD2 - PD3 - PE6 * Helix serial.c PORTD,PD1 test. OK OK PD0 OK PD1 OK PD2 - PD3 - PE6 * Helix serial.c PORTD,PD3 test. OK OK PD0 OK PD1 OK PD2 OK PD3 - PE6 * Helix serial.c PORTE,PD6 test. OK OK PD0 OK PD1 OK PD2 OK PD3 OK PE6 * Helix serial.c: PD0,PD1,PD3,PE6 all test end * Helix serial.c: rename SOFT_SERIAL_PORT to SOFT_SERIAL_PIN * Helix serial.c add debug code * Helix serial.c: add transaction ID range check * Helix serial.c debug code update * Helix serial.c debug code update * Helix serial.c: Strict checking of the value of tid. * adjust the delay of serial.c * Helix serial.c: remove debug code * remove EXTRAFLAGS += -DCONSOLE_ENABLE from five_rows/rules.mk tmk_core/common.mk has >ifeq ($(strip $(CONSOLE_ENABLE)), yes) > TMK_COMMON_DEFS += -DCONSOLE_ENABLE * Fix error handling in split_scomm.c * add some comment to serial.c * add some comment about SELECT_SOFT_SERIAL_SPEED --- keyboards/helix/pico/serial_config.h | 15 +- .../rev1/keymaps/OLED_sample/serial_config.h | 15 +- keyboards/helix/rev1/serial_config.h | 15 +- .../helix/rev2/keymaps/five_rows/rules.mk | 4 - keyboards/helix/rev2/serial_config.h | 19 +- keyboards/helix/rev2/split_scomm.c | 48 +++- keyboards/helix/serial.c | 228 +++++++++++++----- keyboards/helix/serial.h | 22 +- 8 files changed, 229 insertions(+), 137 deletions(-) diff --git a/keyboards/helix/pico/serial_config.h b/keyboards/helix/pico/serial_config.h index 82c6e4e836..fc8736d472 100644 --- a/keyboards/helix/pico/serial_config.h +++ b/keyboards/helix/pico/serial_config.h @@ -1,16 +1,9 @@ -#ifndef SOFT_SERIAL_CONFIG_H -#define SOFT_SERIAL_CONFIG_H +//// #error rev2 serial config +#ifndef SOFT_SERIAL_PIN /* Soft Serial defines */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD2) -#define SERIAL_PIN_INTERRUPT INT2_vect +#define SOFT_SERIAL_PIN D2 #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 #define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2 - -//// #error rev2 serial config - -#endif /* SOFT_SERIAL_CONFIG_H */ +#endif diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h b/keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h index b991b874b7..f56951e707 100644 --- a/keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h +++ b/keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h @@ -1,16 +1,9 @@ -#ifndef SOFT_SERIAL_CONFIG_H -#define SOFT_SERIAL_CONFIG_H +//// #error rev1/keymaps/OLED_sample serial config +#ifndef SOFT_SERIAL_PIN /* Soft Serial defines */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD2) -#define SERIAL_PIN_INTERRUPT INT2_vect +#define SOFT_SERIAL_PIN D2 #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 #define SERIAL_MASTER_BUFFER_LENGTH 0 - -//// #error rev1/keymaps/OLED_sample serial config - -#endif /* SOFT_SERIAL_CONFIG_H */ +#endif diff --git a/keyboards/helix/rev1/serial_config.h b/keyboards/helix/rev1/serial_config.h index 51c6aa3750..32218f9bbe 100644 --- a/keyboards/helix/rev1/serial_config.h +++ b/keyboards/helix/rev1/serial_config.h @@ -1,16 +1,9 @@ -#ifndef SOFT_SERIAL_CONFIG_H -#define SOFT_SERIAL_CONFIG_H +/// #error rev1 serial config +#ifndef SOFT_SERIAL_PIN /* Soft Serial defines */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD0) -#define SERIAL_PIN_INTERRUPT INT0_vect +#define SOFT_SERIAL_PIN D0 #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 #define SERIAL_MASTER_BUFFER_LENGTH 0 - -/// #error rev1 serial config - -#endif /* SOFT_SERIAL_CONFIG_H */ +#endif diff --git a/keyboards/helix/rev2/keymaps/five_rows/rules.mk b/keyboards/helix/rev2/keymaps/five_rows/rules.mk index 63106df764..f771c94c9c 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/rules.mk +++ b/keyboards/helix/rev2/keymaps/five_rows/rules.mk @@ -122,10 +122,6 @@ ifeq ($(strip $(Link_Time_Optimization)),yes) EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization endif -ifeq ($(strip $(CONSOLE_ENABLE)),yes) - EXTRAFLAGS += -DCONSOLE_ENABLE -endif - # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/helix/rev2/serial_config.h b/keyboards/helix/rev2/serial_config.h index 8d7e628378..37135213d5 100644 --- a/keyboards/helix/rev2/serial_config.h +++ b/keyboards/helix/rev2/serial_config.h @@ -1,15 +1,8 @@ -#ifndef SOFT_SERIAL_CONFIG_H -#define SOFT_SERIAL_CONFIG_H - -/* Soft Serial defines */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD2) -#define SERIAL_PIN_INTERRUPT INT2_vect - -#define SERIAL_USE_MULTI_TRANSACTION - //// #error rev2 serial config -#endif /* SOFT_SERIAL_CONFIG_H */ +#ifndef SOFT_SERIAL_PIN +/* Soft Serial defines */ +#define SOFT_SERIAL_PIN D2 + +#define SERIAL_USE_MULTI_TRANSACTION +#endif diff --git a/keyboards/helix/rev2/split_scomm.c b/keyboards/helix/rev2/split_scomm.c index 9719eb22ea..50d233ce9a 100644 --- a/keyboards/helix/rev2/split_scomm.c +++ b/keyboards/helix/rev2/split_scomm.c @@ -10,6 +10,9 @@ #ifdef SERIAL_DEBUG_MODE #include #endif +#ifdef CONSOLE_ENABLE + #include +#endif uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; @@ -17,6 +20,7 @@ uint8_t volatile status_com = 0; uint8_t volatile status1 = 0; uint8_t slave_buffer_change_count = 0; uint8_t s_change_old = 0xff; +uint8_t s_change_new = 0xff; SSTD_t transactions[] = { #define GET_SLAVE_STATUS 0 @@ -41,12 +45,12 @@ SSTD_t transactions[] = { void serial_master_init(void) { - soft_serial_initiator_init(transactions); + soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); } void serial_slave_init(void) { - soft_serial_target_init(transactions); + soft_serial_target_init(transactions, TID_LIMIT(transactions)); } // 0 => no error @@ -54,19 +58,37 @@ void serial_slave_init(void) // 2 => checksum error int serial_update_buffers(int master_update) { - int status; + int status, smatstatus; static int need_retry = 0; - if( s_change_old != slave_buffer_change_count ) { - status = soft_serial_transaction(GET_SLAVE_BUFFER); - if( status == TRANSACTION_END ) - s_change_old = slave_buffer_change_count; + + if( s_change_old != s_change_new ) { + smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER); + if( smatstatus == TRANSACTION_END ) { + s_change_old = s_change_new; +#ifdef CONSOLE_ENABLE + uprintf("slave matrix = %b %b %b %b %b\n", + serial_slave_buffer[0], serial_slave_buffer[1], + serial_slave_buffer[2], serial_slave_buffer[3], + serial_slave_buffer[4] ); +#endif + } + } else { + // serial_slave_buffer dosen't change + smatstatus = TRANSACTION_END; // dummy status } - if( !master_update && !need_retry) - status = soft_serial_transaction(GET_SLAVE_STATUS); - else - status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS); - need_retry = ( status == TRANSACTION_END ) ? 0 : 1; - return status; + + if( !master_update && !need_retry) { + status = soft_serial_transaction(GET_SLAVE_STATUS); + } else { + status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS); + } + if( status == TRANSACTION_END ) { + s_change_new = slave_buffer_change_count; + need_retry = 0; + } else { + need_retry = 1; + } + return smatstatus; } #endif // SERIAL_USE_MULTI_TRANSACTION diff --git a/keyboards/helix/serial.c b/keyboards/helix/serial.c index 11ceff0b37..830f86b55a 100644 --- a/keyboards/helix/serial.c +++ b/keyboards/helix/serial.c @@ -14,7 +14,56 @@ #include "serial.h" //#include -#ifdef USE_SERIAL +#ifdef SOFT_SERIAL_PIN + +#ifdef __AVR_ATmega32U4__ + // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial. + #ifdef USE_I2C + #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1 + #error Using ATmega32U4 I2C, so can not use PD0, PD1 + #endif + #endif + + #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3 + #define SERIAL_PIN_DDR DDRD + #define SERIAL_PIN_PORT PORTD + #define SERIAL_PIN_INPUT PIND + #if SOFT_SERIAL_PIN == D0 + #define SERIAL_PIN_MASK _BV(PD0) + #define EIMSK_BIT _BV(INT0) + #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01))) + #define SERIAL_PIN_INTERRUPT INT0_vect + #elif SOFT_SERIAL_PIN == D1 + #define SERIAL_PIN_MASK _BV(PD1) + #define EIMSK_BIT _BV(INT1) + #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11))) + #define SERIAL_PIN_INTERRUPT INT1_vect + #elif SOFT_SERIAL_PIN == D2 + #define SERIAL_PIN_MASK _BV(PD2) + #define EIMSK_BIT _BV(INT2) + #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21))) + #define SERIAL_PIN_INTERRUPT INT2_vect + #elif SOFT_SERIAL_PIN == D3 + #define SERIAL_PIN_MASK _BV(PD3) + #define EIMSK_BIT _BV(INT3) + #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31))) + #define SERIAL_PIN_INTERRUPT INT3_vect + #endif + #elif SOFT_SERIAL_PIN == E6 + #define SERIAL_PIN_DDR DDRE + #define SERIAL_PIN_PORT PORTE + #define SERIAL_PIN_INPUT PINE + #define SERIAL_PIN_MASK _BV(PE6) + #define EIMSK_BIT _BV(INT6) + #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61))) + #define SERIAL_PIN_INTERRUPT INT6_vect + #else + #error invalid SOFT_SERIAL_PIN value + #endif + +#else + #error serial.c now support ATmega32U4 only +#endif #ifndef SERIAL_USE_MULTI_TRANSACTION /* --- USE Simple API (OLD API, compatible with let's split serial.c) */ @@ -42,16 +91,20 @@ SSTD_t transactions[] = { }; void serial_master_init(void) -{ soft_serial_initiator_init(transactions); } +{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); } void serial_slave_init(void) -{ soft_serial_target_init(transactions); } +{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); } // 0 => no error // 1 => slave did not respond // 2 => checksum error int serial_update_buffers() -{ return soft_serial_transaction(); } +{ + int result; + result = soft_serial_transaction(); + return result; +} #endif // Simple API (OLD API, compatible with let's split serial.c) @@ -59,39 +112,66 @@ int serial_update_buffers() #define NO_INLINE __attribute__((noinline)) #define _delay_sub_us(x) __builtin_avr_delay_cycles(x) -// Serial pulse period in microseconds. -#define TID_SEND_ADJUST 14 +// parity check +#define ODD_PARITY 1 +#define EVEN_PARITY 0 +#define PARITY EVEN_PARITY -#define SELECT_SERIAL_SPEED 1 -#if SELECT_SERIAL_SPEED == 0 +#ifdef SERIAL_DELAY + // custom setup in config.h + // #define TID_SEND_ADJUST 2 + // #define SERIAL_DELAY 6 // micro sec + // #define READ_WRITE_START_ADJUST 30 // cycles + // #define READ_WRITE_WIDTH_ADJUST 8 // cycles +#else +// ============ Standard setups ============ + +#ifndef SELECT_SOFT_SERIAL_SPEED +#define SELECT_SOFT_SERIAL_SPEED 1 +// 0: about 189kbps +// 1: about 137kbps (default) +// 2: about 75kbps +// 3: about 39kbps +// 4: about 26kbps +// 5: about 20kbps +#endif + +#define TID_SEND_ADJUST 2 + +#if SELECT_SOFT_SERIAL_SPEED == 0 // Very High speed #define SERIAL_DELAY 4 // micro sec #define READ_WRITE_START_ADJUST 33 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 1 + #define READ_WRITE_WIDTH_ADJUST 6 // cycles +#elif SELECT_SOFT_SERIAL_SPEED == 1 // High speed #define SERIAL_DELAY 6 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 2 + #define READ_WRITE_WIDTH_ADJUST 7 // cycles +#elif SELECT_SOFT_SERIAL_SPEED == 2 // Middle speed #define SERIAL_DELAY 12 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 3 + #define READ_WRITE_WIDTH_ADJUST 7 // cycles +#elif SELECT_SOFT_SERIAL_SPEED == 3 // Low speed #define SERIAL_DELAY 24 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 4 + #define READ_WRITE_WIDTH_ADJUST 7 // cycles +#elif SELECT_SOFT_SERIAL_SPEED == 4 // Very Low speed - #define SERIAL_DELAY 50 // micro sec + #define SERIAL_DELAY 36 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #define READ_WRITE_WIDTH_ADJUST 7 // cycles +#elif SELECT_SOFT_SERIAL_SPEED == 5 + // Ultra Low speed + #define SERIAL_DELAY 48 // micro sec + #define READ_WRITE_START_ADJUST 30 // cycles + #define READ_WRITE_WIDTH_ADJUST 7 // cycles #else -#error Illegal Serial Speed -#endif - +#error invalid SELECT_SOFT_SERIAL_SPEED value +#endif /* SELECT_SOFT_SERIAL_SPEED */ +#endif /* SERIAL_DELAY */ #define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2) #define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2) @@ -105,6 +185,7 @@ int serial_update_buffers() #endif static SSTD_t *Transaction_table = NULL; +static uint8_t Transaction_table_size = 0; inline static void serial_delay(void) { @@ -152,30 +233,28 @@ void serial_high(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } -void soft_serial_initiator_init(SSTD_t *sstd_table) +void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size) { Transaction_table = sstd_table; + Transaction_table_size = (uint8_t)sstd_table_size; serial_output(); serial_high(); } -void soft_serial_target_init(SSTD_t *sstd_table) +void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size) { Transaction_table = sstd_table; + Transaction_table_size = (uint8_t)sstd_table_size; serial_input_with_pullup(); -#if SERIAL_PIN_MASK == _BV(PD0) - // Enable INT0 - EIMSK |= _BV(INT0); - // Trigger on falling edge of INT0 - EICRA &= ~(_BV(ISC00) | _BV(ISC01)); -#elif SERIAL_PIN_MASK == _BV(PD2) - // Enable INT2 - EIMSK |= _BV(INT2); - // Trigger on falling edge of INT2 - EICRA &= ~(_BV(ISC20) | _BV(ISC21)); + // Enable INT0-INT3,INT6 + EIMSK |= EIMSK_BIT; +#if SERIAL_PIN_MASK == _BV(PE6) + // Trigger on falling edge of INT6 + EICRB &= EICRx_BIT; #else - #error unknown SERIAL_PIN_MASK value + // Trigger on falling edge of INT0-INT3 + EICRA &= EICRx_BIT; #endif } @@ -205,12 +284,12 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) { uint8_t byte, i, p, pb; _delay_sub_us(READ_WRITE_START_ADJUST); - for( i = 0, byte = 0, p = 0; i < bit; i++ ) { + for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) { serial_delay_half1(); // read the middle of pulses if( serial_read_pin() ) { - byte = (byte << 1) | 1; p ^= 1; + byte = (byte << 1) | 1; p ^= 1; } else { - byte = (byte << 1) | 0; p ^= 0; + byte = (byte << 1) | 0; p ^= 0; } _delay_sub_us(READ_WRITE_WIDTH_ADJUST); serial_delay_half2(); @@ -230,13 +309,13 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) { void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE; void serial_write_chunk(uint8_t data, uint8_t bit) { uint8_t b, p; - for( p = 0, b = 1<<(bit-1); b ; b >>= 1) { - if(data & b) { - serial_high(); p ^= 1; - } else { - serial_low(); p ^= 0; - } - serial_delay(); + for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) { + if(data & b) { + serial_high(); p ^= 1; + } else { + serial_low(); p ^= 0; + } + serial_delay(); } /* send parity bit */ if(p & 1) { serial_high(); } @@ -288,6 +367,13 @@ void change_reciver2sender(void) { serial_delay_half1(); //4 } +static inline uint8_t nibble_bits_count(uint8_t bits) +{ + bits = (bits & 0x5) + (bits >> 1 & 0x5); + bits = (bits & 0x3) + (bits >> 2 & 0x3); + return bits; +} + // interrupt handle to be used by the target device ISR(SERIAL_PIN_INTERRUPT) { @@ -297,12 +383,15 @@ ISR(SERIAL_PIN_INTERRUPT) { SSTD_t *trans = Transaction_table; #else // recive transaction table index - uint8_t tid; + uint8_t tid, bits; uint8_t pecount = 0; sync_recv(); - tid = serial_read_chunk(&pecount,4); - if(pecount> 0) + bits = serial_read_chunk(&pecount,7); + tid = bits>>3; + bits = (bits&7) != nibble_bits_count(tid); + if( bits || pecount> 0 || tid > Transaction_table_size ) { return; + } serial_delay_half1(); serial_high(); // response step1 low->high @@ -315,17 +404,17 @@ ISR(SERIAL_PIN_INTERRUPT) { // target send phase if( trans->target2initiator_buffer_size > 0 ) serial_send_packet((uint8_t *)trans->target2initiator_buffer, - trans->target2initiator_buffer_size); + trans->target2initiator_buffer_size); // target switch to input change_sender2reciver(); // target recive phase if( trans->initiator2target_buffer_size > 0 ) { if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer, - trans->initiator2target_buffer_size) ) { - *trans->status = TRANSACTION_ACCEPTED; + trans->initiator2target_buffer_size) ) { + *trans->status = TRANSACTION_ACCEPTED; } else { - *trans->status = TRANSACTION_DATA_ERROR; + *trans->status = TRANSACTION_DATA_ERROR; } } else { *trans->status = TRANSACTION_ACCEPTED; @@ -349,6 +438,8 @@ int soft_serial_transaction(void) { SSTD_t *trans = Transaction_table; #else int soft_serial_transaction(int sstd_index) { + if( sstd_index > Transaction_table_size ) + return TRANSACTION_TYPE_ERROR; SSTD_t *trans = &Transaction_table[sstd_index]; #endif cli(); @@ -375,9 +466,10 @@ int soft_serial_transaction(int sstd_index) { #else // send transaction table index + int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index)); sync_send(); _delay_sub_us(TID_SEND_ADJUST); - serial_write_chunk(sstd_index, 4); + serial_write_chunk(tid, 7); serial_delay_half1(); // wait for the target response (step1 low->high) @@ -389,12 +481,12 @@ int soft_serial_transaction(int sstd_index) { // check if the target is present (step2 high->low) for( int i = 0; serial_read_pin(); i++ ) { if (i > SLAVE_INT_ACK_WIDTH + 1) { - // slave failed to pull the line low, assume not present - serial_output(); - serial_high(); - *trans->status = TRANSACTION_NO_RESPONSE; - sei(); - return TRANSACTION_NO_RESPONSE; + // slave failed to pull the line low, assume not present + serial_output(); + serial_high(); + *trans->status = TRANSACTION_NO_RESPONSE; + sei(); + return TRANSACTION_NO_RESPONSE; } _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT); } @@ -404,12 +496,12 @@ int soft_serial_transaction(int sstd_index) { // if the target is present syncronize with it if( trans->target2initiator_buffer_size > 0 ) { if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer, - trans->target2initiator_buffer_size) ) { - serial_output(); - serial_high(); - *trans->status = TRANSACTION_DATA_ERROR; - sei(); - return TRANSACTION_DATA_ERROR; + trans->target2initiator_buffer_size) ) { + serial_output(); + serial_high(); + *trans->status = TRANSACTION_DATA_ERROR; + sei(); + return TRANSACTION_DATA_ERROR; } } @@ -419,7 +511,7 @@ int soft_serial_transaction(int sstd_index) { // initiator send phase if( trans->initiator2target_buffer_size > 0 ) { serial_send_packet((uint8_t *)trans->initiator2target_buffer, - trans->initiator2target_buffer_size); + trans->initiator2target_buffer_size); } // always, release the line when not in use @@ -442,3 +534,9 @@ int soft_serial_get_and_clean_status(int sstd_index) { #endif #endif + +// Helix serial.c history +// 2018-1-29 fork from let's split (#2308) +// 2018-6-28 bug fix master to slave comm (#3255) +// 2018-8-11 improvements (#3608) +// 2018-10-21 fix serial and RGB animation conflict (#4191) diff --git a/keyboards/helix/serial.h b/keyboards/helix/serial.h index d2b7fd8e60..7e0c0847a4 100644 --- a/keyboards/helix/serial.h +++ b/keyboards/helix/serial.h @@ -4,14 +4,16 @@ #include // ///////////////////////////////////////////////////////////////// -// Need Soft Serial defines in serial_config.h +// Need Soft Serial defines in config.h // ///////////////////////////////////////////////////////////////// // ex. -// #define SERIAL_PIN_DDR DDRD -// #define SERIAL_PIN_PORT PORTD -// #define SERIAL_PIN_INPUT PIND -// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2 -// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2 +// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6 +// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5 +// // 1: about 137kbps (default) +// // 2: about 75kbps +// // 3: about 39kbps +// // 4: about 26kbps +// // 5: about 20kbps // // //// USE Simple API (OLD API, compatible with let's split serial.c) // ex. @@ -47,16 +49,18 @@ typedef struct _SSTD_t { uint8_t target2initiator_buffer_size; uint8_t *target2initiator_buffer; } SSTD_t; +#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t)) // initiator is transaction start side -void soft_serial_initiator_init(SSTD_t *sstd_table); +void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size); // target is interrupt accept side -void soft_serial_target_init(SSTD_t *sstd_table); +void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size); // initiator resullt #define TRANSACTION_END 0 #define TRANSACTION_NO_RESPONSE 0x1 #define TRANSACTION_DATA_ERROR 0x2 +#define TRANSACTION_TYPE_ERROR 0x4 #ifndef SERIAL_USE_MULTI_TRANSACTION int soft_serial_transaction(void); #else @@ -72,7 +76,7 @@ int soft_serial_transaction(int sstd_index); // target: // TRANSACTION_DATA_ERROR // or TRANSACTION_ACCEPTED -#define TRANSACTION_ACCEPTED 0x4 +#define TRANSACTION_ACCEPTED 0x8 #ifdef SERIAL_USE_MULTI_TRANSACTION int soft_serial_get_and_clean_status(int sstd_index); #endif From f69333a0e57ca767d49b3155a31fd6d30114dced Mon Sep 17 00:00:00 2001 From: Naoki Katahira Date: Tue, 23 Oct 2018 03:39:26 +0900 Subject: [PATCH 222/269] Lily58 default keymap fix / add keymap (#4190) * keymap fix/add * keymap fix * file fix * typo fix --- keyboards/lily58/keymaps/default/config.h | 2 - keyboards/lily58/keymaps/default/keymap.c | 60 ++-- keyboards/lily58/keymaps/default/rules.mk | 1 - keyboards/lily58/keymaps/yuchi/config.h | 39 +++ keyboards/lily58/keymaps/yuchi/keymap.c | 148 ++++++++++ keyboards/lily58/keymaps/yuchi/rules.mk | 22 ++ keyboards/lily58/rev1/rev1.c | 12 +- keyboards/lily58/rules.mk | 4 +- keyboards/lily58/split_util.c | 3 - keyboards/lily58/ssd1306.c | 330 ---------------------- keyboards/lily58/ssd1306.h | 94 ------ 11 files changed, 237 insertions(+), 478 deletions(-) create mode 100644 keyboards/lily58/keymaps/yuchi/config.h create mode 100644 keyboards/lily58/keymaps/yuchi/keymap.c create mode 100644 keyboards/lily58/keymaps/yuchi/rules.mk delete mode 100644 keyboards/lily58/ssd1306.c delete mode 100644 keyboards/lily58/ssd1306.h diff --git a/keyboards/lily58/keymaps/default/config.h b/keyboards/lily58/keymaps/default/config.h index 3077c94632..fd09785593 100644 --- a/keyboards/lily58/keymaps/default/config.h +++ b/keyboards/lily58/keymaps/default/config.h @@ -19,8 +19,6 @@ along with this program. If not, see . */ #pragma once -#include "config.h" - /* Use I2C or Serial, not both */ #define USE_SERIAL diff --git a/keyboards/lily58/keymaps/default/keymap.c b/keyboards/lily58/keymaps/default/keymap.c index 624ce210b1..8d77058129 100644 --- a/keyboards/lily58/keymaps/default/keymap.c +++ b/keyboards/lily58/keymaps/default/keymap.c @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* QWERTY * ,-----------------------------------------. ,-----------------------------------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ~ | + * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | * |------+------+------+------+------+------| |------+------+------+------+------+------| * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - | * |------+------+------+------+------+------| |------+------+------+------+------+------| @@ -27,9 +27,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| * `-----------------------------------------/ / \ \-----------------------------------------' - * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE | + * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI | * | | | |/ / \ \ | | | | - * `-------------------''-------' '------''--------------------' + * `----------------------------' '------''--------------------' */ [_QWERTY] = LAYOUT( \ @@ -37,53 +37,52 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ - LOWER,KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_BSPC, KC_RGUI, RAISE \ + KC_LALT, KC_LGUI,LOWER, KC_SPC, KC_ENT, RAISE, KC_BSPC, KC_RGUI \ ), /* LOWER * ,-----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | |-------. ,-------| | _ | + | | | | + * | ` | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | - | * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| - * | | | | | | |-------| |-------| |ISO ~ |ISO | | | | | + * | | | | | | |-------| |-------| | _ | + | { | } | | | * `-----------------------------------------/ / \ \-----------------------------------------' - * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE | + * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI | * | | | |/ / \ \ | | | | - * `-------------------''-------' '------''--------------------' + * `----------------------------' '------''--------------------' */ [_LOWER] = 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, \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \ - _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______,S(KC_NUHS),S(KC_NUBS),_______, _______, _______,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______,\ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILD, \ + _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ _______, _______, _______, _______, _______, _______, _______, _______\ ), /* RAISE * ,-----------------------------------------. ,-----------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + * | | | | | | | | | | | | | | * |------+------+------+------+------+------| |------+------+------+------+------+------| * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | |-------. ,-------| | Left | Down | Up |Right | | + * | F1 | F2 | F3 | F4 | F5 | F6 |-------. ,-------| | Left | Down | Up |Right | | * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| - * | | | | | | |-------| |-------| + | - | = | [ | ] | \ | + * | F7 | F8 | F9 | F10 | F11 | F12 |-------| |-------| + | - | = | [ | ] | \ | * `-----------------------------------------/ / \ \-----------------------------------------' - * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE | + * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI | * | | | |/ / \ \ | | | | - * `-------------------''-------' '------''--------------------' + * `----------------------------' '------''--------------------' */ [_RAISE] = 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, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ - _______, _______, _______, _______, _______, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, \ + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ _______, _______, _______, _______, _______, _______, _______, _______ \ ), - -/* ADJUST (Layers for Underglow) +/* ADJUST * ,-----------------------------------------. ,-----------------------------------------. * | | | | | | | | | | | | | | * |------+------+------+------+------+------| |------+------+------+------+------+------| @@ -93,9 +92,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------| | | |------+------+------+------+------+------| * | | | | | | |-------| |-------| | | | | | | * `-----------------------------------------/ / \ \-----------------------------------------' - * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE | + * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI | * | | | |/ / \ \ | | | | - * `-------------------''-------' '------''--------------------' + * `----------------------------' '------''--------------------' */ [_ADJUST] = LAYOUT( \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ @@ -107,17 +106,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: - if (record->event.pressed) { - print("mode just switched to qwerty and this is a huge string\n"); + if (record->event.pressed) { set_single_persistent_default_layer(_QWERTY); } return false; diff --git a/keyboards/lily58/keymaps/default/rules.mk b/keyboards/lily58/keymaps/default/rules.mk index 73777a1b78..3d2d3c9e0f 100644 --- a/keyboards/lily58/keymaps/default/rules.mk +++ b/keyboards/lily58/keymaps/default/rules.mk @@ -4,7 +4,6 @@ # the appropriate keymap folder that will get included automatically # -OLED_ENABLE = no RGBLIGHT_ENABLE = no BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) diff --git a/keyboards/lily58/keymaps/yuchi/config.h b/keyboards/lily58/keymaps/yuchi/config.h new file mode 100644 index 0000000000..fd09785593 --- /dev/null +++ b/keyboards/lily58/keymaps/yuchi/config.h @@ -0,0 +1,39 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +// Underglow +/* +#undef RGBLED_NUM +#define RGBLED_NUM 14 // Number of LEDs +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_SLEEP +*/ \ No newline at end of file diff --git a/keyboards/lily58/keymaps/yuchi/keymap.c b/keyboards/lily58/keymaps/yuchi/keymap.c new file mode 100644 index 0000000000..d708dbec76 --- /dev/null +++ b/keyboards/lily58/keymaps/yuchi/keymap.c @@ -0,0 +1,148 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * ,-----------------------------------------. ,-----------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ~ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE | + * | | | |/ / \ \ | | | | + * `-------------------''-------' '------''--------------------' + */ + + [_QWERTY] = LAYOUT( \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \ + KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ + LOWER,KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_BSPC, KC_RGUI, RAISE \ +), +/* LOWER + * ,-----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | - | + * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| + * | | | | | | |-------| |-------| | _ | + | { | } | | | + * `-----------------------------------------/ / \ \-----------------------------------------' + * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE | + * | | | |/ / \ \ | | | | + * `-------------------''-------' '------''--------------------' + */ +[_LOWER] = 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, \ + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILD, \ + _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, _______, _______, _______, _______, _______, _______, _______\ +), +/* RAISE + * ,-----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | F1 | F2 | F3 | F4 | F5 | F6 |-------. ,-------| | Left | Down | Up |Right | | + * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| + * | F7 | F8 | F9 | F10 | F11 | F12 |-------| |-------| + | - | = | [ | ] | \ | + * `-----------------------------------------/ / \ \-----------------------------------------' + * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE | + * | | | |/ / \ \ | | | | + * `-------------------''-------' '------''--------------------' + */ + +[_RAISE] = LAYOUT( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, \ + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, _______, _______, _______, _______, _______, _______, _______ \ +), + +/* ADJUST + * ,-----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | |-------. ,-------| | | | | | | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * | | | | | | |-------| |-------| | | | | | | + * `-----------------------------------------/ / \ \-----------------------------------------' + * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE | + * | | | |/ / \ \ | | | | + * `-------------------''-------' '------''--------------------' + */ + [_ADJUST] = LAYOUT( \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ + _______, _______, _______, _______, _______, _______, _______, _______ \ + ) +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/lily58/keymaps/yuchi/rules.mk b/keyboards/lily58/keymaps/yuchi/rules.mk new file mode 100644 index 0000000000..73777a1b78 --- /dev/null +++ b/keyboards/lily58/keymaps/yuchi/rules.mk @@ -0,0 +1,22 @@ + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# + +OLED_ENABLE = no +RGBLIGHT_ENABLE = no + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +ONEHAND_ENABLE = no # Enable one-hand typing +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/lily58/rev1/rev1.c b/keyboards/lily58/rev1/rev1.c index 64dd084b21..4c54d7717c 100644 --- a/keyboards/lily58/rev1/rev1.c +++ b/keyboards/lily58/rev1/rev1.c @@ -1,14 +1,5 @@ #include "lily58.h" -/* -#ifdef SSD1306OLED -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - led_set_user(usb_led); -} -#endif -*/ - void matrix_init_kb(void) { // // green led on @@ -20,5 +11,4 @@ void matrix_init_kb(void) { // PORTB &= ~(1<<0); matrix_init_user(); -}; - +}; \ No newline at end of file diff --git a/keyboards/lily58/rules.mk b/keyboards/lily58/rules.mk index 23527476a3..72964fca1b 100644 --- a/keyboards/lily58/rules.mk +++ b/keyboards/lily58/rules.mk @@ -1,9 +1,7 @@ SRC += matrix.c \ i2c.c \ split_util.c \ - serial.c \ - ssd1306.c - + serial.c # MCU name #MCU = at90usb1287 MCU = atmega32u4 diff --git a/keyboards/lily58/split_util.c b/keyboards/lily58/split_util.c index ff069b7e28..49b065518c 100644 --- a/keyboards/lily58/split_util.c +++ b/keyboards/lily58/split_util.c @@ -34,9 +34,6 @@ static void setup_handedness(void) { static void keyboard_master_setup(void) { #ifdef USE_I2C i2c_master_init(); -//#ifdef SSD1306OLED -// matrix_master_OLED_init (); -//#endif #else serial_master_init(); #endif diff --git a/keyboards/lily58/ssd1306.c b/keyboards/lily58/ssd1306.c deleted file mode 100644 index d079001199..0000000000 --- a/keyboards/lily58/ssd1306.c +++ /dev/null @@ -1,330 +0,0 @@ -#ifdef SSD1306OLED - -#include "ssd1306.h" -#include "i2c.h" -#include -#include "print.h" -#include "glcdfont.c" -#ifdef ADAFRUIT_BLE_ENABLE -#include "adafruit_ble.h" -#endif -#ifdef PROTOCOL_LUFA -#include "lufa.h" -#endif -#include "sendchar.h" -#include "timer.h" - -// Set this to 1 to help diagnose early startup problems -// when testing power-on with ble. Turn it off otherwise, -// as the latency of printing most of the debug info messes -// with the matrix scan, causing keys to drop. -#define DEBUG_TO_SCREEN 0 - -//static uint16_t last_battery_update; -//static uint32_t vbat; -//#define BatteryUpdateInterval 10000 /* milliseconds */ -#define ScreenOffInterval 300000 /* milliseconds */ -#if DEBUG_TO_SCREEN -static uint8_t displaying; -#endif -static uint16_t last_flush; - -// Write command sequence. -// Returns true on success. -static inline bool _send_cmd1(uint8_t cmd) { - bool res = false; - - if (i2c_start_write(SSD1306_ADDRESS)) { - xprintf("failed to start write to %d\n", SSD1306_ADDRESS); - goto done; - } - - if (i2c_master_write(0x0 /* command byte follows */)) { - print("failed to write control byte\n"); - - goto done; - } - - if (i2c_master_write(cmd)) { - xprintf("failed to write command %d\n", cmd); - goto done; - } - res = true; -done: - i2c_master_stop(); - return res; -} - -// Write 2-byte command sequence. -// Returns true on success -static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) { - if (!_send_cmd1(cmd)) { - return false; - } - return _send_cmd1(opr); -} - -// Write 3-byte command sequence. -// Returns true on success -static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) { - if (!_send_cmd1(cmd)) { - return false; - } - if (!_send_cmd1(opr1)) { - return false; - } - return _send_cmd1(opr2); -} - -#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;} -#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;} -#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;} - -static void clear_display(void) { - matrix_clear(&display); - - // Clear all of the display bits (there can be random noise - // in the RAM on startup) - send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1); - send_cmd3(ColumnAddr, 0, DisplayWidth - 1); - - if (i2c_start_write(SSD1306_ADDRESS)) { - goto done; - } - if (i2c_master_write(0x40)) { - // Data mode - goto done; - } - for (uint8_t row = 0; row < MatrixRows; ++row) { - for (uint8_t col = 0; col < DisplayWidth; ++col) { - i2c_master_write(0); - } - } - - display.dirty = false; - -done: - i2c_master_stop(); -} - -#if DEBUG_TO_SCREEN -#undef sendchar -static int8_t capture_sendchar(uint8_t c) { - sendchar(c); - iota_gfx_write_char(c); - - if (!displaying) { - iota_gfx_flush(); - } - return 0; -} -#endif - -bool iota_gfx_init(bool rotate) { - bool success = false; - - send_cmd1(DisplayOff); - send_cmd2(SetDisplayClockDiv, 0x80); - send_cmd2(SetMultiPlex, DisplayHeight - 1); - - send_cmd2(SetDisplayOffset, 0); - - - send_cmd1(SetStartLine | 0x0); - send_cmd2(SetChargePump, 0x14 /* Enable */); - send_cmd2(SetMemoryMode, 0 /* horizontal addressing */); - - if(rotate){ - // the following Flip the display orientation 180 degrees - send_cmd1(SegRemap); - send_cmd1(ComScanInc); - }else{ - // Flips the display orientation 0 degrees - send_cmd1(SegRemap | 0x1); - send_cmd1(ComScanDec); - } - - send_cmd2(SetComPins, 0x2); - send_cmd2(SetContrast, 0x8f); - send_cmd2(SetPreCharge, 0xf1); - send_cmd2(SetVComDetect, 0x40); - send_cmd1(DisplayAllOnResume); - send_cmd1(NormalDisplay); - send_cmd1(DeActivateScroll); - send_cmd1(DisplayOn); - - send_cmd2(SetContrast, 0); // Dim - - clear_display(); - - success = true; - - iota_gfx_flush(); - -#if DEBUG_TO_SCREEN - print_set_sendchar(capture_sendchar); -#endif - -done: - return success; -} - -bool iota_gfx_off(void) { - bool success = false; - - send_cmd1(DisplayOff); - success = true; - -done: - return success; -} - -bool iota_gfx_on(void) { - bool success = false; - - send_cmd1(DisplayOn); - success = true; - -done: - return success; -} - -void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) { - *matrix->cursor = c; - ++matrix->cursor; - - if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) { - // We went off the end; scroll the display upwards by one line - memmove(&matrix->display[0], &matrix->display[1], - MatrixCols * (MatrixRows - 1)); - matrix->cursor = &matrix->display[MatrixRows - 1][0]; - memset(matrix->cursor, ' ', MatrixCols); - } -} - -void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) { - matrix->dirty = true; - - if (c == '\n') { - // Clear to end of line from the cursor and then move to the - // start of the next line - uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols; - - while (cursor_col++ < MatrixCols) { - matrix_write_char_inner(matrix, ' '); - } - return; - } - - matrix_write_char_inner(matrix, c); -} - -void iota_gfx_write_char(uint8_t c) { - matrix_write_char(&display, c); -} - -void matrix_write(struct CharacterMatrix *matrix, const char *data) { - const char *end = data + strlen(data); - while (data < end) { - matrix_write_char(matrix, *data); - ++data; - } -} - -void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) { - char data_ln[strlen(data)+2]; - snprintf(data_ln, sizeof(data_ln), "%s\n", data); - matrix_write(matrix, data_ln); -} - -void iota_gfx_write(const char *data) { - matrix_write(&display, data); -} - -void matrix_write_P(struct CharacterMatrix *matrix, const char *data) { - while (true) { - uint8_t c = pgm_read_byte(data); - if (c == 0) { - return; - } - matrix_write_char(matrix, c); - ++data; - } -} - -void iota_gfx_write_P(const char *data) { - matrix_write_P(&display, data); -} - -void matrix_clear(struct CharacterMatrix *matrix) { - memset(matrix->display, ' ', sizeof(matrix->display)); - matrix->cursor = &matrix->display[0][0]; - matrix->dirty = true; -} - -void iota_gfx_clear_screen(void) { - matrix_clear(&display); -} - -void matrix_render(struct CharacterMatrix *matrix) { - last_flush = timer_read(); - iota_gfx_on(); -#if DEBUG_TO_SCREEN - ++displaying; -#endif - - // Move to the home position - send_cmd3(PageAddr, 0, MatrixRows - 1); - send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1); - - if (i2c_start_write(SSD1306_ADDRESS)) { - goto done; - } - if (i2c_master_write(0x40)) { - // Data mode - goto done; - } - - for (uint8_t row = 0; row < MatrixRows; ++row) { - for (uint8_t col = 0; col < MatrixCols; ++col) { - const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth); - - for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) { - uint8_t colBits = pgm_read_byte(glyph + glyphCol); - i2c_master_write(colBits); - } - - // 1 column of space between chars (it's not included in the glyph) - //i2c_master_write(0); - } - } - - matrix->dirty = false; - -done: - i2c_master_stop(); -#if DEBUG_TO_SCREEN - --displaying; -#endif -} - -void iota_gfx_flush(void) { - matrix_render(&display); -} - -__attribute__ ((weak)) -void iota_gfx_task_user(void) { -} - -void iota_gfx_task(void) { - iota_gfx_task_user(); - - if (display.dirty) { - iota_gfx_flush(); - } - - if (timer_elapsed(last_flush) > ScreenOffInterval) { - iota_gfx_off(); - } -} -#endif diff --git a/keyboards/lily58/ssd1306.h b/keyboards/lily58/ssd1306.h deleted file mode 100644 index 59d31c9f32..0000000000 --- a/keyboards/lily58/ssd1306.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef SSD1306_H -#define SSD1306_H - -#include -#include -#include "pincontrol.h" -#include "config.h" - -enum ssd1306_cmds { - DisplayOff = 0xAE, - DisplayOn = 0xAF, - - SetContrast = 0x81, - DisplayAllOnResume = 0xA4, - - DisplayAllOn = 0xA5, - NormalDisplay = 0xA6, - InvertDisplay = 0xA7, - SetDisplayOffset = 0xD3, - SetComPins = 0xda, - SetVComDetect = 0xdb, - SetDisplayClockDiv = 0xD5, - SetPreCharge = 0xd9, - SetMultiPlex = 0xa8, - SetLowColumn = 0x00, - SetHighColumn = 0x10, - SetStartLine = 0x40, - - SetMemoryMode = 0x20, - ColumnAddr = 0x21, - PageAddr = 0x22, - - ComScanInc = 0xc0, - ComScanDec = 0xc8, - SegRemap = 0xa0, - SetChargePump = 0x8d, - ExternalVcc = 0x01, - SwitchCapVcc = 0x02, - - ActivateScroll = 0x2f, - DeActivateScroll = 0x2e, - SetVerticalScrollArea = 0xa3, - RightHorizontalScroll = 0x26, - LeftHorizontalScroll = 0x27, - VerticalAndRightHorizontalScroll = 0x29, - VerticalAndLeftHorizontalScroll = 0x2a, -}; - -// Controls the SSD1306 128x32 OLED display via i2c - -#ifndef SSD1306_ADDRESS -#define SSD1306_ADDRESS 0x3C -#endif - -#define DisplayHeight 32 -#define DisplayWidth 128 - -#define FontHeight 8 -#define FontWidth 6 - -#define MatrixRows (DisplayHeight / FontHeight) -#define MatrixCols (DisplayWidth / FontWidth) - -struct CharacterMatrix { - uint8_t display[MatrixRows][MatrixCols]; - uint8_t *cursor; - bool dirty; -}; - -struct CharacterMatrix display; - -bool iota_gfx_init(bool rotate); -void iota_gfx_task(void); -bool iota_gfx_off(void); -bool iota_gfx_on(void); -void iota_gfx_flush(void); -void iota_gfx_write_char(uint8_t c); -void iota_gfx_write(const char *data); -void iota_gfx_write_P(const char *data); -void iota_gfx_clear_screen(void); - -void iota_gfx_task_user(void); - -void matrix_clear(struct CharacterMatrix *matrix); -void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c); -void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c); -void matrix_write(struct CharacterMatrix *matrix, const char *data); -void matrix_write_ln(struct CharacterMatrix *matrix, const char *data); -void matrix_write_P(struct CharacterMatrix *matrix, const char *data); -void matrix_render(struct CharacterMatrix *matrix); - - - -#endif From 387bd555c7e6c88a78e0d388ea7eda5b1ce7958b Mon Sep 17 00:00:00 2001 From: Mattia Dal Ben Date: Mon, 22 Oct 2018 20:41:57 +0200 Subject: [PATCH 223/269] Keyboard: Add Redox Wireless keyboard (#4180) * Added folder and default keymap * Added italian keymap * Fixed readme.md * Added layer display through RGB led * Added layer status display to italian keymap * Fixed indentation * Removed obsolete comments * Updated instructions * Fixed keymaps readmes and removed RGB controls on ADJUST layer * Removed redundant KC_* definitions * Fixed readme file * Changed include guards to pragma once * Removed unused audio functions * Fixed rules.mk file * Added spaces in readme to fix rendering * Reconfigured keymap macro to resemble physical layout * Updated default keymap * Updated italian keymap * Removed unused persistent_default_layer_set function --- keyboards/redox_w/config.h | 81 ++++++++++ keyboards/redox_w/keymaps/default/keymap.c | 115 ++++++++++++++ keyboards/redox_w/keymaps/default/readme.md | 1 + keyboards/redox_w/keymaps/italian/keymap.c | 125 +++++++++++++++ keyboards/redox_w/keymaps/italian/readme.md | 1 + keyboards/redox_w/matrix.c | 162 ++++++++++++++++++++ keyboards/redox_w/readme.md | 34 ++++ keyboards/redox_w/redox_w.c | 42 +++++ keyboards/redox_w/redox_w.h | 40 +++++ keyboards/redox_w/rules.mk | 76 +++++++++ 10 files changed, 677 insertions(+) create mode 100644 keyboards/redox_w/config.h create mode 100644 keyboards/redox_w/keymaps/default/keymap.c create mode 100644 keyboards/redox_w/keymaps/default/readme.md create mode 100644 keyboards/redox_w/keymaps/italian/keymap.c create mode 100644 keyboards/redox_w/keymaps/italian/readme.md create mode 100644 keyboards/redox_w/matrix.c create mode 100644 keyboards/redox_w/readme.md create mode 100644 keyboards/redox_w/redox_w.c create mode 100644 keyboards/redox_w/redox_w.h create mode 100644 keyboards/redox_w/rules.mk diff --git a/keyboards/redox_w/config.h b/keyboards/redox_w/config.h new file mode 100644 index 0000000000..810a236d9a --- /dev/null +++ b/keyboards/redox_w/config.h @@ -0,0 +1,81 @@ +/* Copyright 2017 Mattia Dal Ben + * + * 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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Mattia Dal Ben +#define PRODUCT Redox_wireless +#define DESCRIPTION q.m.k. keyboard firmware for Redox-w + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +//#define BACKLIGHT_LEVELS 3 + +#define ONESHOT_TIMEOUT 500 + + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +//UART settings for communication with the RF microcontroller +#define SERIAL_UART_BAUD 1000000 +#define SERIAL_UART_DATA UDR1 +#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1) +#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1)) +#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) +#define SERIAL_UART_INIT() do { \ + /* baud rate */ \ + UBRR1L = SERIAL_UART_UBRR; \ + /* baud rate */ \ + UBRR1H = SERIAL_UART_UBRR >> 8; \ + /* enable TX and RX */ \ + UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ + /* 8-bit data */ \ + UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \ + } while(0) diff --git a/keyboards/redox_w/keymaps/default/keymap.c b/keyboards/redox_w/keymaps/default/keymap.c new file mode 100644 index 0000000000..9cfc1734eb --- /dev/null +++ b/keyboards/redox_w/keymaps/default/keymap.c @@ -0,0 +1,115 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _SYMB 1 +#define _NAV 2 +#define _ADJUST 3 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + SYMB, + NAV, + ADJUST, +}; + +// Shortcut to make keymap more readable +#define KC_BKSL KC_BSLASH +#define SYM_L MO(_SYMB) + +#define KC_ALAS LALT_T(KC_PAST) +#define KC_CTPL LCTL_T(KC_PSLS) + +#define KC_NAGR LT(_NAV, KC_GRV) +#define KC_NAMI LT(_NAV, KC_MINS) + +#define KC_ADEN LT(_ADJUST, KC_END) +#define KC_ADPU LT(_ADJUST, KC_PGUP) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_NAGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_NAMI , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,SYM_L , SYM_L ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_EQL , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_LBRC , KC_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_QUOT , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_BKSL ,KC_RSFT , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + KC_LGUI ,KC_PPLS ,KC_PMNS ,KC_ALAS , KC_CTPL , KC_BSPC ,KC_DEL , KC_ENT ,KC_SPC , KC_RALT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_SYMB] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,KC_HASH ,KC_DLR ,KC_LBRC ,KC_RBRC ,KC_GRV ,_______ , _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_NAV] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_ADJUST] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ) + +}; + +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + switch (layer) { + case _QWERTY: + set_led_off; + break; + case _SYMB: + set_led_green; + break; + case _NAV: + set_led_blue; + break; + case _ADJUST: + set_led_red; + break; + default: + break; + } +}; + + diff --git a/keyboards/redox_w/keymaps/default/readme.md b/keyboards/redox_w/keymaps/default/readme.md new file mode 100644 index 0000000000..32ab1253d7 --- /dev/null +++ b/keyboards/redox_w/keymaps/default/readme.md @@ -0,0 +1 @@ +# Default keymap for Redox Wireless diff --git a/keyboards/redox_w/keymaps/italian/keymap.c b/keyboards/redox_w/keymaps/italian/keymap.c new file mode 100644 index 0000000000..6e23a32d4d --- /dev/null +++ b/keyboards/redox_w/keymaps/italian/keymap.c @@ -0,0 +1,125 @@ +#include QMK_KEYBOARD_H + +#include "keymap_italian.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _SYMB 1 +#define _NAV 2 +#define _ADJUST 3 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + SYMB, + NAV, + ADJUST, +}; + +// Shortcut to make keymap more readable +#define KC_BKSL KC_BSLASH +#define SYM_L MO(_SYMB) + +#define KC_ALAS LALT_T(KC_PAST) +#define KC_CTPL LCTL_T(KC_PSLS) + +#define KC_NAGR LT(_NAV, KC_GRV) +#define KC_NAMI LT(_NAV, KC_MINS) + +#define KC_ADEN LT(_ADJUST, KC_END) +#define KC_ADPU LT(_ADJUST, KC_PGUP) + +// Italian specific shortcuts +#define ALT_IACC RALT_T(IT_IACC) +#define GUI_LESS LGUI_T(IT_LESS) + +#define IT_SHSL RSFT_T(KC_SLSH) +#define IT_GRV RALT(KC_MINS) +#define IT_TILD RALT(KC_EQL) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_NAGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_NAMI , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,SYM_L , SYM_L ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,IT_EACC , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,IT_LBRC , IT_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,IT_OACC ,IT_AACC , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,IT_UACC ,IT_SHSL , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + GUI_LESS,KC_PPLS ,KC_PMNS ,KC_ALAS , KC_CTPL , KC_BSPC ,KC_DEL , KC_ENT ,KC_SPC , ALT_IACC, KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_SYMB] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,IT_EXLM ,IT_AT ,IT_LCBR ,IT_RCBR ,IT_PIPE ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,IT_SHRP ,IT_DLR ,IT_LBRC ,IT_RBRC ,IT_GRV ,_______ , _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,IT_PERC ,IT_CRC ,IT_LPRN ,IT_RPRN ,IT_TILD ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_NAV] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_ADJUST] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ) + +}; + +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + switch (layer) { + case _QWERTY: + set_led_off; + break; + case _SYMB: + set_led_green; + break; + case _NAV: + set_led_blue; + break; + case _ADJUST: + set_led_red; + break; + default: + break; + } +}; + + diff --git a/keyboards/redox_w/keymaps/italian/readme.md b/keyboards/redox_w/keymaps/italian/readme.md new file mode 100644 index 0000000000..a2b5ef7079 --- /dev/null +++ b/keyboards/redox_w/keymaps/italian/readme.md @@ -0,0 +1 @@ +# Italian keymap for Redox Wireless diff --git a/keyboards/redox_w/matrix.c b/keyboards/redox_w/matrix.c new file mode 100644 index 0000000000..5e61103f20 --- /dev/null +++ b/keyboards/redox_w/matrix.c @@ -0,0 +1,162 @@ +/* Copyright 2017 Mattia Dal Ben + * + * 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 +#include +#if defined(__AVR__) +#include +#endif +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "timer.h" + +#if (MATRIX_COLS <= 8) +# define print_matrix_header() print("\nr/c 01234567\n") +# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) +# define matrix_bitpop(i) bitpop(matrix[i]) +# define ROW_SHIFTER ((uint8_t)1) +#elif (MATRIX_COLS <= 16) +# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n") +# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row)) +# define matrix_bitpop(i) bitpop16(matrix[i]) +# define ROW_SHIFTER ((uint16_t)1) +#elif (MATRIX_COLS <= 32) +# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n") +# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row)) +# define matrix_bitpop(i) bitpop32(matrix[i]) +# define ROW_SHIFTER ((uint32_t)1) +#endif + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) { + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) { + return MATRIX_COLS; +} + +void matrix_init(void) { + + matrix_init_quantum(); +} + +uint8_t matrix_scan(void) +{ + SERIAL_UART_INIT(); + + uint32_t timeout = 0; + + //the s character requests the RF slave to send the matrix + SERIAL_UART_DATA = 's'; + + //trust the external keystates entirely, erase the last data + uint8_t uart_data[11] = {0}; + + //there are 14 bytes corresponding to 14 columns, and an end byte + for (uint8_t i = 0; i < 11; i++) { + //wait for the serial data, timeout if it's been too long + //this only happened in testing with a loose wire, but does no + //harm to leave it in here + while(!SERIAL_UART_RXD_PRESENT){ + timeout++; + if (timeout > 10000){ + break; + } + } + uart_data[i] = SERIAL_UART_DATA; + } + + //check for the end packet, the key state bytes use the LSBs, so 0xE0 + //will only show up here if the correct bytes were recieved + if (uart_data[10] == 0xE0) + { + //shifting and transferring the keystates to the QMK matrix variable + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 7; + } + } + + + matrix_scan_quantum(); + return 1; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1 +Redox logo +

+ +**Redox**: the **R**educed **E**rgo**dox** project. More information and building instruction [here](https://github.com/mattdibi/redox-keyboard). + +A wireless version of the Redox keyboard. + +- Keyboard Maintainer: [@mattdibi](https://github.com/mattdibi) +- Hardware Supported: Redox-w rev1.0W PCB +- Hardware Availability: Falbatech + +Make example for this keyboard (after setting up your build environment): + +```sh +make redox_w:default +``` + +Example of flashing this keyboard: + +```sh +make redox_w/rev1:default:avrdude +``` + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +For nRF51822 firmware upload instruction and development see [the Redox wireless firmware repository](https://github.com/mattdibi/redox-w-firmware). + +## Redox-w Notes + +These configuration files were based off the [Mitosis](https://github.com/qmk/qmk_firmware/tree/master/keyboards/mitosis) and [Atreus](https://github.com/technomancy/atreus) keyboard. It assumes a Pro Micro is being used, however retains the 'make upload' feature from the Atreus branch. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves. The matrix.c file contains the code to poll the external microcontroller for the key matrix. As long as this file is not changed, all other QMK features are supported. diff --git a/keyboards/redox_w/redox_w.c b/keyboards/redox_w/redox_w.c new file mode 100644 index 0000000000..75df91066c --- /dev/null +++ b/keyboards/redox_w/redox_w.c @@ -0,0 +1,42 @@ +#include "redox_w.h" + +void uart_init(void) { + SERIAL_UART_INIT(); +} + +void led_init(void) { + DDRD |= (1<<1); + PORTD |= (1<<1); + DDRF |= (1<<4) | (1<<5); + PORTF |= (1<<4) | (1<<5); +} + + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + matrix_init_user(); + uart_init(); + led_init(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + matrix_scan_user(); +} + +void led_set_kb(uint8_t usb_led) { + +} + +#ifdef ONEHAND_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { +{{13, 0}, {12, 0}, {11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, +{{13, 1}, {12, 1}, {11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, +{{13, 2}, {12, 2}, {11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, +{{13, 3}, {12, 3}, {11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, +{{13, 4}, {12, 4}, {11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}}, +}; +#endif diff --git a/keyboards/redox_w/redox_w.h b/keyboards/redox_w/redox_w.h new file mode 100644 index 0000000000..3adcb121d1 --- /dev/null +++ b/keyboards/redox_w/redox_w.h @@ -0,0 +1,40 @@ +#pragma once + +#include "quantum.h" +#include "matrix.h" +#include "backlight.h" +#include + +#define red_led_off PORTF |= (1<<5) +#define red_led_on PORTF &= ~(1<<5) +#define blu_led_off PORTF |= (1<<4) +#define blu_led_on PORTF &= ~(1<<4) +#define grn_led_off PORTD |= (1<<1) +#define grn_led_on PORTD &= ~(1<<1) + +#define set_led_off red_led_off; grn_led_off; blu_led_off +#define set_led_red red_led_on; grn_led_off; blu_led_off +#define set_led_blue red_led_off; grn_led_off; blu_led_on +#define set_led_green red_led_off; grn_led_on; blu_led_off +#define set_led_yellow red_led_on; grn_led_on; blu_led_off +#define set_led_magenta red_led_on; grn_led_off; blu_led_on +#define set_led_cyan red_led_off; grn_led_on; blu_led_on +#define set_led_white red_led_on; grn_led_on; blu_led_on + +// This a shortcut to help you visually see your layout. +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define LAYOUT( \ + k00, k01, k02, k03, k04, k05, k08, k09, k10, k11, k12, k13, \ + k14, k15, k16, k17, k18, k19, k06, k07, k22, k23, k24, k25, k26, k27, \ + k28, k29, k30, k31, k32, k33, k20, k21, k36, k37, k38, k39, k40, k41, \ + k42, k43, k44, k45, k46, k47, k34, k48, k49, k35, k50, k51, k52, k53, k54, k55, \ + k56, k57, k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13 }, \ + { k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27 }, \ + { k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41 }, \ + { k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55 }, \ + { k56, k57, k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 } \ +} diff --git a/keyboards/redox_w/rules.mk b/keyboards/redox_w/rules.mk new file mode 100644 index 0000000000..f2f73d5c5f --- /dev/null +++ b/keyboards/redox_w/rules.mk @@ -0,0 +1,76 @@ + +OPT_DEFS += -DREDOX_W_PROMICRO +INTERPHASE_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ + avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) + +# # project specific files +SRC = matrix.c + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = caterina + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Build Options +# comment out to disable the options. +# +#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA +# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +# MIDI_ENABLE = YES # MIDI controls +UNICODE_ENABLE = YES # Unicode +# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID + +USB = /dev/ttyACM0 + +# upload: build +# $(REDOX_W_UPLOAD_COMMAND) From cf19cb0dbeda15d51df9c513a51cd2d985747b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Pazos=20Est=C3=A9vez?= <30479687+fpazos@users.noreply.github.com> Date: Mon, 22 Oct 2018 20:45:46 +0200 Subject: [PATCH 224/269] Add Bluepill (stm32f103) handwired keyboard (#4126) * Main folder Main folder with some changes like the base layout and matrix for uploading in a future to the qmk repositorie * First Commit Firsts non previously commited changes: -Changed to keyboards/handwired -Basic credit to Xydane -70% Layout * Modified file structure for several keyboards As I don't want to create several folders and overcrowd the main folders I made a few modifications to being able of configure several keyboards as revisions of the main keyboard. Added a second variant. Compiling tests went right but I haven't tried it on the controller. * Starting leds * Started dual color leds PWM functions and configs I started to create the PWM functions and configs based on internet examples, it doesn't compile yet * Backtraced a bit to establish and try debug before continuing the pwm Just this, algo some doc as a new pinout image, space cadet modification to try if it works and little more * Deleted unuseful stuff After trying the reestructure to being compatible with several keyboards and that it worked I deleted the other keyboard. Added space cadet shift to ISO. Finally I couldn't debug everything and I'm getting quite frustrated to continue much more than just adding pwm leds * Changed again Iso fix for Space Cadet * Renamed keyboard, future pull I just renamed the keyboard and made some simplifying changes in order to make a pull request sometime soon. I'm too frustrated, tired and knowledge limited to achive using the PWM for leds, I didn't even get to use the debug mode... I intend to end basic led color change using layers (if I can), document everything properly and make a pull request so other users can continue/use this project. * Writed Readme.md file I also corrected a previous compilation problem and ordered a bit the keymaps * Corrected readme * Try to add layer activated light * Revert "Try to add layer activated light" This reverts commit 205af820d845dab08988f329b9f062f558060220. * Progress to fork Coming back to work, upcoming pull * Linked image Corrected readme * Some cleanning Added images to readme, som cleaning, burning after commit. * Almost finished (working) Finally * Finished bluepill firmware Just finished and tried layer dependant led colors. Going for merge * Deleted innecesary stuff and trailing spaces Just as commit title said. * Coding conventions Just modified some files to respect coding conventions * Deleted XXXXXX define Checking some other PR seen this improvement * Changes suggested on PR Firs doing the easy changes * More changes for the PR -I also deleted one unused function for led toggling on matrix.c (Now it uses layer dependent baklight, algo on of on start) -Deleted commented function on keymaps. Right now only needs testing and all pragma replaces. * Almost every pragma change on PR That's almost finished, only waiting for reply due to compiling errors * Revert "Almost every pragma change on PR" This reverts commit 07f23aa862b370cdf0ae37d6f2130c9e9856f491. * Revert last commit I moddified by mistake a file from another keyboard * Solved last pragma Compiles fine. Now I only need to test it, I say you if it works to include it in the main repository. --- keyboards/handwired/bluepill/bluepill.c | 1 + keyboards/handwired/bluepill/bluepill.h | 54 ++ .../bluepill/bluepill70/bluepill70.c | 1 + .../bluepill/bluepill70/bluepill70.h | 4 + .../bluepill/bluepill70/bootloader_defs.h | 10 + .../handwired/bluepill/bluepill70/chconf.h | 524 ++++++++++++++++++ .../handwired/bluepill/bluepill70/config.h | 25 + .../handwired/bluepill/bluepill70/flash.sh | 2 + .../handwired/bluepill/bluepill70/halconf.h | 354 ++++++++++++ keyboards/handwired/bluepill/bluepill70/led.c | 38 ++ .../handwired/bluepill/bluepill70/matrix.c | 225 ++++++++ .../handwired/bluepill/bluepill70/mcuconf.h | 209 +++++++ .../handwired/bluepill/bluepill70/rules.mk | 47 ++ .../boards/GENERIC_STM32_F103/board.c | 49 ++ .../boards/GENERIC_STM32_F103/board.h | 170 ++++++ .../boards/GENERIC_STM32_F103/board.mk | 5 + keyboards/handwired/bluepill/config.h | 58 ++ .../bluepill/keymaps/default/keymap.c | 69 +++ .../handwired/bluepill/keymaps/iso/keymap.c | 69 +++ keyboards/handwired/bluepill/ld/MKL26Z64.ld | 105 ++++ .../ld/STM32F103x8_stm32duino_bootloader.ld | 88 +++ keyboards/handwired/bluepill/readme.md | 60 ++ keyboards/handwired/bluepill/rules.mk | 10 + 23 files changed, 2177 insertions(+) create mode 100644 keyboards/handwired/bluepill/bluepill.c create mode 100644 keyboards/handwired/bluepill/bluepill.h create mode 100644 keyboards/handwired/bluepill/bluepill70/bluepill70.c create mode 100644 keyboards/handwired/bluepill/bluepill70/bluepill70.h create mode 100644 keyboards/handwired/bluepill/bluepill70/bootloader_defs.h create mode 100644 keyboards/handwired/bluepill/bluepill70/chconf.h create mode 100644 keyboards/handwired/bluepill/bluepill70/config.h create mode 100644 keyboards/handwired/bluepill/bluepill70/flash.sh create mode 100644 keyboards/handwired/bluepill/bluepill70/halconf.h create mode 100644 keyboards/handwired/bluepill/bluepill70/led.c create mode 100644 keyboards/handwired/bluepill/bluepill70/matrix.c create mode 100644 keyboards/handwired/bluepill/bluepill70/mcuconf.h create mode 100644 keyboards/handwired/bluepill/bluepill70/rules.mk create mode 100644 keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.c create mode 100644 keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.h create mode 100644 keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.mk create mode 100644 keyboards/handwired/bluepill/config.h create mode 100644 keyboards/handwired/bluepill/keymaps/default/keymap.c create mode 100644 keyboards/handwired/bluepill/keymaps/iso/keymap.c create mode 100644 keyboards/handwired/bluepill/ld/MKL26Z64.ld create mode 100644 keyboards/handwired/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld create mode 100644 keyboards/handwired/bluepill/readme.md create mode 100644 keyboards/handwired/bluepill/rules.mk diff --git a/keyboards/handwired/bluepill/bluepill.c b/keyboards/handwired/bluepill/bluepill.c new file mode 100644 index 0000000000..85c92dfe96 --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill.c @@ -0,0 +1 @@ +#include "bluepill.h" \ No newline at end of file diff --git a/keyboards/handwired/bluepill/bluepill.h b/keyboards/handwired/bluepill/bluepill.h new file mode 100644 index 0000000000..a686d155ce --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill.h @@ -0,0 +1,54 @@ +#pragma once + +#include "quantum.h" +#include "led.h" + +/* ANSI LAYOUT + ESC| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| F11| F12| PSC| PGU| PGD + GRA| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ' | ¡ | BCKS | DEL + TAB| Q | W | E | R | T | Y | U | I | O | P | ` | + | | HOM + CAP| A | S | D | F | G | H | J | K | L | Ñ | ´ | Ç | ENTER | END + LSI| (<)| Z | X | C | V | B | N | M | , | . | - | RSHIF | UP | FNL + LCT| WIN| ALT| ESPACE | ALG| FN | RCT| LEF| DOW| RIG +*/ + +#define LAYOUT_seventy_ansi( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ + 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, K3D, K3E, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, \ + K50, K51, K52, K53, K54, K55, K56, K57, K58, K59 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K0E, K1E }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1D, K2D }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ + { K50, K51, K52, KC_NO, KC_NO, KC_NO, K53, KC_NO, KC_NO,K54, K55, K56, K57, K58, K59 } \ +} + +/* ISO LAYOUT + ESC| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| F11| F12| PSC| PGU| PGD + GRA| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ' | ¡ | BCKS | DEL + TAB| Q | W | E | R | T | Y | U | I | O | P | ` | + | | HOM + CAP| A | S | D | F | G | H | J | K | L | Ñ | ´ | Ç | ENTER | END + LSI| < | Z | X | C | V | B | N | M | , | . | - | RSHIF | UP | FNL + LCT| WIN| ALT| ESPACE | ALG| FN | RCT| LEF| DOW| RIG +*/ + +#define LAYOUT_seventy_iso( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ + 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, K3D, K3E, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, \ + K50, K51, K52, K53, K54, K55, K56, K57, K58, K59 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K0E, K1E }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1D, K2D }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ + { K50, K51, K52, KC_NO, KC_NO, KC_NO, K53, KC_NO, KC_NO,K54, K55, K56, K57, K58, K59 } \ +} diff --git a/keyboards/handwired/bluepill/bluepill70/bluepill70.c b/keyboards/handwired/bluepill/bluepill70/bluepill70.c new file mode 100644 index 0000000000..511c602d45 --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill70/bluepill70.c @@ -0,0 +1 @@ +#include "bluepill70.h" \ No newline at end of file diff --git a/keyboards/handwired/bluepill/bluepill70/bluepill70.h b/keyboards/handwired/bluepill/bluepill70/bluepill70.h new file mode 100644 index 0000000000..8a313cc500 --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill70/bluepill70.h @@ -0,0 +1,4 @@ +#pragma once +#include "bluepill.h" +// Modified by Xydane +// #define LAYOUT(k00) {{ k00 }} \ No newline at end of file diff --git a/keyboards/handwired/bluepill/bluepill70/bootloader_defs.h b/keyboards/handwired/bluepill/bluepill70/bootloader_defs.h new file mode 100644 index 0000000000..0f45203cb6 --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill70/bootloader_defs.h @@ -0,0 +1,10 @@ +/* Address for jumping to bootloader on STM32 chips. */ +/* It is chip dependent, the correct number can be looked up here (page 175): + * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf + * This also requires a patch to chibios: + * /tmk_core/tool/chibios/ch-bootloader-jump.patch + */ + +// STM32F103* does NOT have an USB bootloader in ROM (only serial), +// so setting anything here does not make much sense +// #define STM32_BOOTLOADER_ADDRESS 0x1FFFC800 diff --git a/keyboards/handwired/bluepill/bluepill70/chconf.h b/keyboards/handwired/bluepill/bluepill70/chconf.h new file mode 100644 index 0000000000..dfb1f9dfb9 --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill70/chconf.h @@ -0,0 +1,524 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef CHCONF_H +#define CHCONF_H + +#define _CHIBIOS_RT_CONF_ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16 or 32 bits. + */ +#define CH_CFG_ST_RESOLUTION 16 + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#define CH_CFG_ST_FREQUENCY 2000 + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#define CH_CFG_ST_TIMEDELTA 2 + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#define CH_CFG_TIME_QUANTUM 0 + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#define CH_CFG_MEMCORE_SIZE 0 + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#define CH_CFG_NO_IDLE_THREAD FALSE + +/* Use __WFI in the idle thread for waiting. Does lower the power + * consumption. */ +#define CORTEX_ENABLE_WFI_IDLE TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#define CH_CFG_OPTIMIZE_SPEED TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_TM FALSE + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_REGISTRY TRUE + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_WAITEXIT TRUE + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_SEMAPHORES TRUE + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MUTEXES TRUE + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_CONDVARS TRUE + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_EVENTS TRUE + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MESSAGES TRUE + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_MAILBOXES TRUE + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMCORE TRUE + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#define CH_CFG_USE_HEAP TRUE + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMPOOLS FALSE + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#define CH_CFG_USE_DYNAMIC FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_STATISTICS FALSE + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_SYSTEM_STATE_CHECK FALSE + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_CHECKS FALSE + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_ASSERTS FALSE + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the trace buffer is activated. + * + * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. + */ +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED + +/** + * @brief Trace buffer entries. + * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is + * different from @p CH_DBG_TRACE_MASK_DISABLED. + */ +#define CH_DBG_TRACE_BUFFER_SIZE 128 + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#define CH_DBG_ENABLE_STACK_CHECK FALSE + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_FILL_THREADS FALSE + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#define CH_DBG_THREADS_PROFILING FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p chThdInit() API. + * + * @note It is invoked from within @p chThdInit() and implicitly from all + * the threads creation APIs. + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ + /* Idle-enter code here.*/ \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + /* Idle-leave code here.*/ \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* CHCONF_H */ + +/** @} */ diff --git a/keyboards/handwired/bluepill/bluepill70/config.h b/keyboards/handwired/bluepill/bluepill70/config.h new file mode 100644 index 0000000000..87fd74633f --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill70/config.h @@ -0,0 +1,25 @@ +#pragma once + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6464 +#define DEVICE_VER 0x0001 +/* in python2: list(u"whatever".encode('utf-16-le')) */ +/* at most 32 characters or the ugly hack in usb_main.c works */ + +// Modified by Xydane +#define MANUFACTURER "QMK" +#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00' +#define PRODUCT "BluePill70" +#define USBSTR_PRODUCT 'C', '\x00', 'h', '\x00', 'i', '\x00', 'b', '\x00', 'i', '\x00', 'O', '\x00', 'S', '\x00', ' ', '\x00', 'Q', '\x00', 'M', '\x00', 'K', '\x00' +#define DESCRIPTION "QMK keyboard firmware with ChibiOS" + +/* key matrix size */ +// Modified by Xydane +#define MATRIX_ROWS 6 +#define MATRIX_COLS 15 +#define DIODE_DIRECTION COL2ROW + +// Iso fix for Space Cadet, comment for ANSI layouts +#define LSPO_KEY KC_8 +#define RSPC_KEY KC_9 \ No newline at end of file diff --git a/keyboards/handwired/bluepill/bluepill70/flash.sh b/keyboards/handwired/bluepill/bluepill70/flash.sh new file mode 100644 index 0000000000..d001ff007e --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill70/flash.sh @@ -0,0 +1,2 @@ +#!/bin/bash +Arduino_STM32_usb_hid/tools/linux/maple_upload ttyACM0 2 1EAF:0003 build/ch.bin \ No newline at end of file diff --git a/keyboards/handwired/bluepill/bluepill70/halconf.h b/keyboards/handwired/bluepill/bluepill70/halconf.h new file mode 100644 index 0000000000..5be284cd35 --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill70/halconf.h @@ -0,0 +1,354 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/halconf.h + * @brief HAL configuration header. + * @details HAL configuration file, this file allows to enable or disable the + * various device drivers from your application. You may also use + * this file in order to override the device drivers default settings. + * + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef _HALCONF_H_ +#define _HALCONF_H_ + +#include "mcuconf.h" + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) +#define HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) +#define HAL_USE_ADC FALSE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) +#define HAL_USE_CAN FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC FALSE +#endif + +/** + * @brief Enables the EXT subsystem. + */ +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) +#define HAL_USE_EXT FALSE +#endif + +/** + * @brief Enables the GPT subsystem. + */ +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) +#define HAL_USE_GPT FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C FALSE +#endif + +/** + * @brief Enables the I2S subsystem. + */ +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) +#define HAL_USE_I2S FALSE +#endif + +/** + * @brief Enables the ICU subsystem. + */ +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) +#define HAL_USE_ICU FALSE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) +#define HAL_USE_MAC FALSE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define HAL_USE_MMC_SPI FALSE +#endif + +/** + * @brief Enables the PWM subsystem. + */ +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) +#define HAL_USE_PWM TRUE +#endif + +/** + * @brief Enables the RTC subsystem. + */ +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) +#define HAL_USE_RTC FALSE +#endif + +/** + * @brief Enables the SDC subsystem. + */ +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) +#define HAL_USE_SDC FALSE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL FALSE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB FALSE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI FALSE +#endif + +/** + * @brief Enables the UART subsystem. + */ +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) +#define HAL_USE_UART FALSE +#endif + +/** + * @brief Enables the USB subsystem. + */ +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) +#define HAL_USE_USB TRUE +#endif + +/** + * @brief Enables the WDG subsystem. + */ +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) +#define HAL_USE_WDG FALSE +#endif + +/*===========================================================================*/ +/* ADC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) +#define ADC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define ADC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* CAN driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Sleep mode related APIs inclusion switch. + */ +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) +#define CAN_USE_SLEEP_MODE TRUE +#endif + +/*===========================================================================*/ +/* I2C driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the I2C bus. + */ +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define I2C_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* MAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) +#define MAC_USE_ZERO_COPY FALSE +#endif + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) +#define MAC_USE_EVENTS TRUE +#endif + +/*===========================================================================*/ +/* MMC_SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + * This option is recommended also if the SPI driver does not + * use a DMA channel and heavily loads the CPU. + */ +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) +#define MMC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SDC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Number of initialization attempts before rejecting the card. + * @note Attempts are performed at 10mS intervals. + */ +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) +#define SDC_INIT_RETRY 100 +#endif + +/** + * @brief Include support for MMC cards. + * @note MMC support is not yet implemented so this option must be kept + * at @p FALSE. + */ +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) +#define SDC_MMC_SUPPORT FALSE +#endif + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + */ +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) +#define SDC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SERIAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Default bit rate. + * @details Configuration parameter, this is the baud rate selected for the + * default configuration. + */ +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) +#define SERIAL_DEFAULT_BITRATE 38400 +#endif + +/** + * @brief Serial buffers size. + * @details Configuration parameter, you can change the depth of the queue + * buffers depending on the requirements of your application. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 16 +#endif + +/*===========================================================================*/ +/* SERIAL_USB driver related setting. */ +/*===========================================================================*/ + +/** + * @brief Serial over USB buffers size. + * @details Configuration parameter, the buffer size must be a multiple of + * the USB data endpoint maximum packet size. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +// Modified by Xydane +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 256 +#endif + +/*===========================================================================*/ +/* SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) +#define SPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define SPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* USB driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) +#define USB_USE_WAIT TRUE +#endif + +#endif /* _HALCONF_H_ */ + +/** @} */ diff --git a/keyboards/handwired/bluepill/bluepill70/led.c b/keyboards/handwired/bluepill/bluepill70/led.c new file mode 100644 index 0000000000..5c557bbee1 --- /dev/null +++ b/keyboards/handwired/bluepill/bluepill70/led.c @@ -0,0 +1,38 @@ +/* +Copyright 2012 Jun Wako + +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 "hal.h" +#include "led.h" + + +void led_set(uint8_t usb_led){ + if (usb_led & (1< + +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 "ch.h" +#include "hal.h" + +/* + * scan matrix + */ +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "wait.h" + +//#include "pwm.c" + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif +static uint8_t debouncing = DEBOUNCE; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(void); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + +inline uint8_t matrix_rows(void){ + return MATRIX_ROWS; +} + +inline uint8_t matrix_cols(void){ + return MATRIX_COLS; +} + +/* generic STM32F103C8T6 board */ +#ifdef BOARD_GENERIC_STM32_F103 +// This could be removed, only used now in matrix_init() +#define LED_ON() do { palClearPad(GPIOA, 1) ;} while (0) +#define LED_OFF() do { palSetPad(GPIOA, 1); } while (0) +#endif + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +void matrix_init(void) +{ + // initialize row and col + unselect_rows(); + init_cols(); + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + //debug + debug_matrix = true; + LED_ON(); + wait_ms(500); + LED_OFF(); + + matrix_init_quantum(); +} + +uint8_t matrix_scan(void){ + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + select_row(i); + wait_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(); + if (matrix_debouncing[i] != cols) { + matrix_debouncing[i] = cols; + if (debouncing) { + debug("bounce!: "); debug_hex(debouncing); debug("\n"); + } + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + wait_ms(1); + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + } + } + matrix_scan_quantum(); + return 1; +} + +inline bool matrix_is_on(uint8_t row, uint8_t col){ + return (matrix[row] & ((matrix_row_t)1</os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +MCU_FAMILY = STM32 +MCU_SERIES = STM32F1xx +# linker script to use +# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# startup code to use +# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +MCU_STARTUP = stm32f1xx +# it should exist either in /os/hal/boards/ +# or /boards +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m3 +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +ARMV = 7 +# If you want to be able to jump to bootloader from firmware on STM32 MCUs, +# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in +# ./bootloader_defs.h or in ./boards//bootloader_defs.h (if you have +# a custom board definition that you plan to reuse). +# If you're not setting it here, leave it commented out. +# It is chip dependent, the correct number can be looked up here (page 175): +# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf +# This also requires a patch to chibios: +# /tmk_core/tool/chibios/ch-bootloader-jump.patch +#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800 \ No newline at end of file diff --git a/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.c b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.c new file mode 100644 index 0000000000..2809c9d184 --- /dev/null +++ b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.c @@ -0,0 +1,49 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include "hal.h" + +/** + * @brief PAL setup. + * @details Digital I/O ports static configuration as defined in @p board.h. + * This variable is used by the HAL when initializing the PAL driver. + */ +#if HAL_USE_PAL || defined(__DOXYGEN__) +const PALConfig pal_default_config = +{ + {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH}, + {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH}, + {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH}, + {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH}, + {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH}, +}; +#endif + +/* + * Early initialization code. + * This initialization must be performed just after stack setup and before + * any other initialization. + */ +void __early_init(void) { + + stm32_clock_init(); +} + +/* + * Board-specific initialization code. + */ +void boardInit(void) { +} diff --git a/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.h b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.h new file mode 100644 index 0000000000..75bb848fd0 --- /dev/null +++ b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.h @@ -0,0 +1,170 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * Setup for a Generic STM32F103 board. + */ + +/* + * Board identifier. + */ +#define BOARD_GENERIC_STM32_F103 +#define BOARD_NAME "Generic STM32F103x board" + +/* + * Board frequencies. + */ +#define STM32_LSECLK 32768 +#define STM32_HSECLK 8000000 + +/* + * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h. + */ +#define STM32F103xB + +/* + * IO pins assignments + */ + +/* on-board */ + +#define GPIOC_LED 13 +#define GPIOD_OSC_IN 0 +#define GPIOD_OSC_OUT 1 + +/* Backlighting */ + +/*#define GPIOC_BACKLIGHT_PIN 15*/ + +/* In case your board has a "USB enable" hardware + controlled by a pin, define it here. (It could be just + a 1.5k resistor connected to D+ line.) +*/ +/* +#define GPIOB_USB_DISC 10 +*/ + +/* + * I/O ports initial setup, this configuration is established soon after reset + * in the initialization code. + * + * The digits have the following meaning: + * 0 - Analog input. + * 1 - Push Pull output 10MHz. + * 2 - Push Pull output 2MHz. + * 3 - Push Pull output 50MHz. + * 4 - Digital input. + * 5 - Open Drain output 10MHz. + * 6 - Open Drain output 2MHz. + * 7 - Open Drain output 50MHz. + * 8 - Digital input with PullUp or PullDown resistor depending on ODR. + * 9 - Alternate Push Pull output 10MHz. + * A - Alternate Push Pull output 2MHz. + * B - Alternate Push Pull output 50MHz. + * C - Reserved. + * D - Alternate Open Drain output 10MHz. + * E - Alternate Open Drain output 2MHz. + * F - Alternate Open Drain output 50MHz. + * Please refer to the STM32 Reference Manual for details. + */ + +/* + * Port A setup. + * Everything input with pull-up except: + * PA2 - Alternate output (USART2 TX). + * PA3 - Normal input (USART2 RX). + * PA9 - Alternate output (USART1 TX). + * PA10 - Normal input (USART1 RX). + */ +#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */ +#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */ +#define VAL_GPIOAODR 0xFFFFFFFF + +/* + * Port B setup. + * Everything input with pull-up except: + * PB10 - Push Pull output (USB switch). + */ +#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */ +#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */ +#define VAL_GPIOBODR 0xFFFFFFFF + +/* + * Port C setup. + * Everything input with pull-up except: + * PC13 - Push Pull output (LED). + */ +#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */ +#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */ +#define VAL_GPIOCODR 0xFFFFFFFF + +/* + * Port D setup. + * Everything input with pull-up except: + * PD0 - Normal input (XTAL). + * PD1 - Normal input (XTAL). + */ +#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */ +#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */ +#define VAL_GPIODODR 0xFFFFFFFF + +/* + * Port E setup. + * Everything input with pull-up except: + */ +#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */ +#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */ +#define VAL_GPIOEODR 0xFFFFFFFF + +/* + * USB bus activation macro, required by the USB driver. + */ +/* The point is that most of the generic STM32F103* boards + have a 1.5k resistor connected on one end to the D+ line + and on the other end to some pin. Or even a slightly more + complicated "USB enable" circuit, controlled by a pin. + That should go here. + + However on some boards (e.g. one that I have), there's no + such hardware. In which case it's better to not do anything. +*/ +/* +#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC) +*/ +#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT); + +/* + * USB bus de-activation macro, required by the USB driver. + */ +/* +#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC) +*/ +#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12); + +#if !defined(_FROM_ASM_) +#ifdef __cplusplus +extern "C" { +#endif + void boardInit(void); +#ifdef __cplusplus +} +#endif +#endif /* _FROM_ASM_ */ + +#endif /* _BOARD_H_ */ diff --git a/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.mk b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.mk new file mode 100644 index 0000000000..6b8b312fd9 --- /dev/null +++ b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.mk @@ -0,0 +1,5 @@ +# List of all the board related files. +BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F103/board.c + +# Required include directories +BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F103 diff --git a/keyboards/handwired/bluepill/config.h b/keyboards/handwired/bluepill/config.h new file mode 100644 index 0000000000..aeab1808a8 --- /dev/null +++ b/keyboards/handwired/bluepill/config.h @@ -0,0 +1,58 @@ +/* +Copyright 2015 Jun Wako + +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 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +// Modified by Xydane +#define DEBOUNCE 1 + +/* 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Backlighting include */ +/*#define BACKLIGHT_PIN 19 +#define BACKLIGHT_LEVELS 5 +#define BACKLIGHT_BREATHING +#define BREATHING_PERIOD 6*/ +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION \ No newline at end of file diff --git a/keyboards/handwired/bluepill/keymaps/default/keymap.c b/keyboards/handwired/bluepill/keymaps/default/keymap.c new file mode 100644 index 0000000000..8a34930390 --- /dev/null +++ b/keyboards/handwired/bluepill/keymaps/default/keymap.c @@ -0,0 +1,69 @@ +/* +Copyright 2012,2013 Jun Wako + +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 layer names +#define _NORMAL 0 +#define _FNONE 1 +#define _FNTWO 2 + +// Highly Modified by Xydane +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_NORMAL] = LAYOUT_seventy_ansi( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCREEN,KC_HOME, KC_END, \ +KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DELETE, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_SLASH,KC_PGDOWN, \ + KC_LSPO, XXXXXXX,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSPC,KC_UP, TT(2), \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), + + [_FNONE] = LAYOUT_seventy_ansi( + KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,KC_MUTE,KC_VOLD,KC_VOLU, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \ + KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_P0, KC_PDOT,KC_PENT, KC_PSLS, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS ), + + [_FNTWO] = LAYOUT_seventy_ansi( + KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS, KC_MUTE,KC_VOLD,KC_VOLU,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \ + KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_P0, KC_PDOT,KC_PENT, KC_PSLS, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS ), +}; + +/* Layer based ilumination, just binary */ +uint32_t layer_state_set_user(uint32_t state) { + switch (biton32(state)) { + case _FNONE: + palSetPad(GPIOA, 0); //OFF Color A + palClearPad(GPIOA, 1); //ON Color B + break; + case _FNTWO: + palClearPad(GPIOA, 0); //ON Color A + palClearPad(GPIOA, 1); //ON Color B + break; + default: // for any other layers, or the default layer + palClearPad(GPIOA, 0); //ON Color A + palSetPad(GPIOA, 1); //OFF Color B + break; + } + return state; +} \ No newline at end of file diff --git a/keyboards/handwired/bluepill/keymaps/iso/keymap.c b/keyboards/handwired/bluepill/keymaps/iso/keymap.c new file mode 100644 index 0000000000..a6aedde7a3 --- /dev/null +++ b/keyboards/handwired/bluepill/keymaps/iso/keymap.c @@ -0,0 +1,69 @@ +/* +Copyright 2012,2013 Jun Wako + +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 layer names +#define _NORMAL 0 +#define _FNONE 1 +#define _FNTWO 2 + +// Highly Modified by Xydane +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_NORMAL] = LAYOUT_seventy_iso( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCREEN,KC_HOME, KC_END, \ +KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DELETE, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT,KC_PGDOWN, \ + KC_LSPO, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSPC,KC_UP, TT(2), \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ), + + [_FNONE] = LAYOUT_seventy_iso( + KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,KC_MUTE,KC_VOLD,KC_VOLU, KC_TRNS,KC_TRNS,KC_NLCK, KC_CALC, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_P0, KC_PDOT,KC_PENT, KC_PSLS, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS ), + + [_FNTWO] = LAYOUT_seventy_iso( + KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,KC_MUTE,KC_VOLD,KC_VOLU, KC_TRNS,KC_TRNS,KC_NLCK, KC_CALC, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_P0, KC_PDOT,KC_PENT, KC_PSLS, KC_TRNS,KC_TRNS,KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS ), +}; + +/* Layer based ilumination, just binary */ +uint32_t layer_state_set_user(uint32_t state) { + switch (biton32(state)) { + case _FNONE: + palSetPad(GPIOA, 0); //OFF Color A + palClearPad(GPIOA, 1); //ON Color B + break; + case _FNTWO: + palClearPad(GPIOA, 0); //ON Color A + palClearPad(GPIOA, 1); //ON Color B + break; + default: // for any other layers, or the default layer + palClearPad(GPIOA, 0); //ON Color A + palSetPad(GPIOA, 1); //OFF Color B + break; + } + return state; +} \ No newline at end of file diff --git a/keyboards/handwired/bluepill/ld/MKL26Z64.ld b/keyboards/handwired/bluepill/ld/MKL26Z64.ld new file mode 100644 index 0000000000..c4ca8b874c --- /dev/null +++ b/keyboards/handwired/bluepill/ld/MKL26Z64.ld @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com + * (C) 2016 flabbergast + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * KL26Z64 memory setup. + */ +MEMORY +{ + flash0 : org = 0x00000000, len = 0x100 + flash1 : org = 0x00000400, len = 0x10 + flash2 : org = 0x00000410, len = 62k - 0x410 + flash3 : org = 0x0000F800, len = 2k + flash4 : org = 0x00000000, len = 0 + flash5 : org = 0x00000000, len = 0 + flash6 : org = 0x00000000, len = 0 + flash7 : org = 0x00000000, len = 0 + ram0 : org = 0x1FFFF800, len = 8k + ram1 : org = 0x00000000, len = 0 + ram2 : org = 0x00000000, len = 0 + ram3 : org = 0x00000000, len = 0 + ram4 : org = 0x00000000, len = 0 + ram5 : org = 0x00000000, len = 0 + ram6 : org = 0x00000000, len = 0 + ram7 : org = 0x00000000, len = 0 +} + +/* Flash region for the configuration bytes.*/ +SECTIONS +{ + .cfmprotect : ALIGN(4) SUBALIGN(4) + { + KEEP(*(.cfmconfig)) + } > flash1 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash2); +REGION_ALIAS("XTORS_FLASH_LMA", flash2); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash2); +REGION_ALIAS("TEXT_FLASH_LMA", flash2); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash2); +REGION_ALIAS("RODATA_FLASH_LMA", flash2); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash2); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash2); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash2); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +__eeprom_workarea_start__ = ORIGIN(flash3); +__eeprom_workarea_size__ = LENGTH(flash3); +__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/keyboards/handwired/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/handwired/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld new file mode 100644 index 0000000000..f9bfe9c005 --- /dev/null +++ b/keyboards/handwired/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld @@ -0,0 +1,88 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * ST32F103xB memory setup for use with the maplemini bootloader. + * You will have to + * #define CORTEX_VTOR_INIT 0x5000 + * in your projects chconf.h + */ +MEMORY +{ + flash0 : org = 0x08002000, len = 128k - 0x2000 + flash1 : org = 0x00000000, len = 0 + flash2 : org = 0x00000000, len = 0 + flash3 : org = 0x00000000, len = 0 + flash4 : org = 0x00000000, len = 0 + flash5 : org = 0x00000000, len = 0 + flash6 : org = 0x00000000, len = 0 + flash7 : org = 0x00000000, len = 0 + ram0 : org = 0x20000000, len = 20k + ram1 : org = 0x00000000, len = 0 + ram2 : org = 0x00000000, len = 0 + ram3 : org = 0x00000000, len = 0 + ram4 : org = 0x00000000, len = 0 + ram5 : org = 0x00000000, len = 0 + ram6 : org = 0x00000000, len = 0 + ram7 : org = 0x00000000, len = 0 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash0); +REGION_ALIAS("XTORS_FLASH_LMA", flash0); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash0); +REGION_ALIAS("TEXT_FLASH_LMA", flash0); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash0); +REGION_ALIAS("RODATA_FLASH_LMA", flash0); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash0); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash0); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash0); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/keyboards/handwired/bluepill/readme.md b/keyboards/handwired/bluepill/readme.md new file mode 100644 index 0000000000..8b53f12f46 --- /dev/null +++ b/keyboards/handwired/bluepill/readme.md @@ -0,0 +1,60 @@ + +# BluePill handwired + +Keyboards using a BluePill controller (generic Chinese STM32F103C8T6) and based on the [KC64 of Xydane](https://github.com/Xydane/qmk_firmware). + +Keyboard Maintainer: [FPazos](https://github.com/fpazos), but I hope to leave the project in better hands. +Hardware Supported: Bluepill STM32F103C8T6 +Hardware Availability: Everywhere + +Make example for BluePill70 (after setting up your build environment): + +make handwired/bluepill/bluepill70:default + +See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. + +Read everything before using it. + +## Introduction + +First of all thanks to [Xydane](https://github.com/Xydane) at [GeekHack](https://geekhack.org/) for his advice and his repository, without it you couldn't be reading this. + +That's was an attempt to create a firmware using an STM32F103C8T6, and in a "future", also developing a revision for split keyboards. But... +As I'm mainly a web developer I didn't even get to debug the controller, not to speak about ChibiOS. So I just structured everything, created a working 70% layout and leave the project to someone with more knowledge and patience. + +## Resistor fix + +If you want to use the Bluepill USB port, it's very likely that you need to solder a 1.8 kΩ between PA12 and 3.3V. That depends on the PC's motherboard but I needed, more info [here](https://wiki.stm32duino.com/index.php?title=Blue_Pill). + +## No bootloader + +Neither Xydane or I used the bootloader, the code for it is commented and you can use it if you want. I didn't achieve to run it and just used a serial programmer (FTDI, ST-LINK). + +## Adding layouts and revisions + +If you want to create new layouts just add them to the keymaps folder. If you prefer to develop a more complex revision just copy the bluepill70 folder, rename it and create a new keymap in /keymap.c (I tried to divide the project even more but it didn't worked). + +## Pinout + +That's the pinout; + + A5 A15 A10 A9 A8 B15 B14 B13 B12 B11 B10 B1 B0 A7 A6 + B9 ESC| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| F11| F12| PSC| PGU| PGD + B8 GRA| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ' | ¡ | BCKS | DEL + B7 TAB| Q | W | E | R | T | Y | U | I | O | P | ` | + | | HOM + B6 CAP| A | S | D | F | G | H | J | K | L | Ñ | ´ | Ç | ENTER | END + B5 LSI| < | Z | X | C | V | B | N | M | , | . | - | RSHIF | UP | FNT + A4 LCT| WIN| ALT| ESPACE | ALG| FN | RCT| LEF| DOW| RIG + +And the wiring: +ISO +![Wiring](https://i.imgur.com/ZCaxVzs.jpg) +ANSI +![Wiring](https://i.imgur.com/dBUJCdD.jpg) + +It also uses: +PC13: Caps Lock led. + +Backlight dual color leds, my version is for common anode that's more common, for leds with common anode just replace the palSetPad with palClearPad and viceversa. +PA1: Backlight color A. +PA0: Backlight color B. \ No newline at end of file diff --git a/keyboards/handwired/bluepill/rules.mk b/keyboards/handwired/bluepill/rules.mk new file mode 100644 index 0000000000..38bacae34d --- /dev/null +++ b/keyboards/handwired/bluepill/rules.mk @@ -0,0 +1,10 @@ +#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = yes # Console for debug +COMMAND_ENABLE = yes # Commands for debug and configuration +SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover +CUSTOM_MATRIX = yes # Custom matrix file +MOUSEKEY_ENABLE = no + +DEFAULT_FOLDER = handwired/bluepill/bluepill70 \ No newline at end of file From 5694e7b6a60e0a1b60c1bd7fce51e99a8314abb7 Mon Sep 17 00:00:00 2001 From: ROMUSKING <38523153+ROMUSKING@users.noreply.github.com> Date: Mon, 22 Oct 2018 19:54:31 +0100 Subject: [PATCH 225/269] Keymap: add new keymap (#4127) * an attempt at own layout * typematrixed dvorak * columns shifted columns shifted out, second pinky column moved to the inside. * Update users/romus/romus.h * code cleanup Changes requested by Drashna + Tap Dance enabled * Fixed EOF Fixed the no newline at the end of file alert. * rgblight fight eeprom writes * rgb code simplification * Update users/romus/README.md * Update quantum/keymap_extras/keymap_slovenian.h --- .../keymaps/doxish_dvorak/config.h | 21 + .../keymaps/doxish_dvorak/keymap.c | 161 +++++ .../keymaps/doxish_dvorak/rules.mk | 0 .../lets_split_eh/keymaps/romus/README.md | 7 + .../lets_split_eh/keymaps/romus/keymap.c | 28 + .../lets_split_eh/keymaps/romus/rules.mk | 7 + quantum/keymap_extras/keymap_slovenian.h | 1 + users/romus/README.md | 45 ++ users/romus/config.h | 8 + users/romus/romus.c | 557 ++++++++++++++++++ users/romus/romus.h | 272 +++++++++ users/romus/rules.mk | 24 + 12 files changed, 1131 insertions(+) create mode 100644 keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h create mode 100644 keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c create mode 100644 keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk create mode 100644 keyboards/lets_split_eh/keymaps/romus/README.md create mode 100644 keyboards/lets_split_eh/keymaps/romus/keymap.c create mode 100644 keyboards/lets_split_eh/keymaps/romus/rules.mk create mode 100644 users/romus/README.md create mode 100644 users/romus/config.h create mode 100644 users/romus/romus.c create mode 100644 users/romus/romus.h create mode 100644 users/romus/rules.mk diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h b/keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h new file mode 100644 index 0000000000..526c0837c7 --- /dev/null +++ b/keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h @@ -0,0 +1,21 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c b/keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c new file mode 100644 index 0000000000..8976081542 --- /dev/null +++ b/keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c @@ -0,0 +1,161 @@ +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _DVORAK 0 + +#define _LOWER 3 +#define _RAISE 4 +#define _FUNCTION 15 +#define _ADJUST 16 + +enum custom_keycodes { + DVORAK = SAFE_RANGE, + LOWER, + RAISE, + ADJUST +}; + +// Defines for task manager and such +#define CALTDEL LCTL(LALT(KC_DEL)) +#define TSKMGR LCTL(LSFT(KC_ESC)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Func | A | S | D | F | G | H | J | K | L | ; | Enter| + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | ` | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT( \ + KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_TAB, KC_BSPC, KC_F, KC_G, KC_C, KC_R, KC_L, \ + KC_A, KC_O, KC_E, KC_U, KC_I, KC_ENT, KC_ENT, KC_D, KC_H, KC_T, KC_N, KC_S, \ + KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, OSM(MOD_LSFT), OSM(MOD_RSFT), KC_B, KC_M, KC_W, KC_V, KC_Z, \ + KC_LCTL, KC_LGUI, KC_LALT, OSM(MOD_LSFT), KC_SPC, LOWER, RAISE, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/*[BASE] = LAYOUT( + * KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, + * KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, + * KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, + * OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL), MO(COMBINED), MO(KEYNAV), KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT) + * ), + *KC_GRV, + */ +/* Lower + * ,-----------------------------------------------------------------------------------. + * | Esc | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | Mute | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | |Lower | Bksp | Bksp |Raise | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_MUTE, _______, KC_PIPE, \ + _______, _______, _______, _______, KC_BSPC, _______, _______, KC_BSPC, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | 4 | 5 | 6 | + | F5 | F6 | - | = | [ | ] |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |Enter | 7 | 8 | 9 | - | F11 | F12 |ISO # |ISO / | Mute | | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | , | 0 | . |Lower | Bksp | Bksp |Raise | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ + _______, KC_4, KC_5, KC_6, KC_PLUS, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______, \ + KC_ENT, KC_7, KC_8, KC_9, KC_MINS, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_MUTE, _______, KC_BSLS, \ + _______, KC_COMM, KC_0, KC_DOT, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * |Taskmg| | | | | | | |RGBVAI|RGBSAI|RGBHUI|caltde| + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | |Qwerty|RGBVAD|RGBSAD|RGBHUD|RGBTOG| + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | |BLSTEP| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | RESET| + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + TSKMGR, _______, _______, _______, _______, _______, KC_DEL, _______, RGB_VAI, RGB_SAI, RGB_HUI, CALTDEL, \ + _______, _______, _______, _______, _______, _______, _______, DVORAK, RGB_VAD, RGB_SAD, RGB_HUD, RGB_TOG, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET \ +), + +/* Function + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | Up | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | Left | Down |Right | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Caps | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_FUNCTION] = LAYOUT( \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, \ + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk b/keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/lets_split_eh/keymaps/romus/README.md b/keyboards/lets_split_eh/keymaps/romus/README.md new file mode 100644 index 0000000000..d54ed6856f --- /dev/null +++ b/keyboards/lets_split_eh/keymaps/romus/README.md @@ -0,0 +1,7 @@ +# Lets Split Eh Layout + +Check out [user readme](../../../../users/romus/README.md) for more info. + +# Usage + +Fill in after flashing diff --git a/keyboards/lets_split_eh/keymaps/romus/keymap.c b/keyboards/lets_split_eh/keymaps/romus/keymap.c new file mode 100644 index 0000000000..ba5b75a5cf --- /dev/null +++ b/keyboards/lets_split_eh/keymaps/romus/keymap.c @@ -0,0 +1,28 @@ +#include QMK_KEYBOARD_H +#include "romus.h" + + +void matrix_init_keymap (void) { +} + +uint32_t layer_state_set_keymap(uint32_t state) { + + return state; +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // Main Dvorak layer + [_DV] = LAYOUT_letssplit_wrapper(DVORAK), + // Turkish and special character overlay + [_AL] = LAYOUT_letssplit_wrapper(ALTCHAR), + // Gaming layer + [_GA] = LAYOUT_letssplit_wrapper(GAME), + // Numbers layer + [_NU] = LAYOUT_letssplit_wrapper(NUMBERS), + // Settings layer + [_SE] = LAYOUT_letssplit_wrapper(SETTINGS), + // Mouse emulation layer + [_MO] = LAYOUT_letssplit_wrapper(MOUSE), + // Music layer + [_MU] = LAYOUT_letssplit_wrapper(MUSIC), +}; diff --git a/keyboards/lets_split_eh/keymaps/romus/rules.mk b/keyboards/lets_split_eh/keymaps/romus/rules.mk new file mode 100644 index 0000000000..ad7dd4c474 --- /dev/null +++ b/keyboards/lets_split_eh/keymaps/romus/rules.mk @@ -0,0 +1,7 @@ +# Build options + +BACKLIGHT_ENABLE = no # Switch LEDs +MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses +RGBLIGHT_ENABLE = yes # LED strips +TAP_DANCE_ENABLE = yes # Use multi-tap features +AUDIO_ENABLE = no # Audio stuff diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h index 53d07837e9..a9db17becd 100644 --- a/quantum/keymap_extras/keymap_slovenian.h +++ b/quantum/keymap_extras/keymap_slovenian.h @@ -1,4 +1,5 @@ /* Copyright 2018 Žan Pevec + * * 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 diff --git a/users/romus/README.md b/users/romus/README.md new file mode 100644 index 0000000000..0de9d9a817 --- /dev/null +++ b/users/romus/README.md @@ -0,0 +1,45 @@ +# overview + + this is a modified version of let's split keyboard from bbaserdem. i don't like standard dvorak overuses right pinky + so i shifted the columns out. i'm not sure if this is any good, time will tell. + + i have ortholinear let's split eh, which share a lot of functions with other ortholinear keyboards. + +# layout + +i use dvorak with an unorthodox off layout. +if you wanna grab my code, and you used a layout with a persistent base +layer change, change it to layer 0 before proceeding. + +# layers + +* **dvorak**: base layer,with dvorak layout. +* **alternative**: has alternate characters. +* **game**: toggled from *function*, comfortable for gaming use. +* **numeric**: has numericals and symbols. can be locked. +* **function**: layer has media and function keys. +* **mouse**: manipulates mouse. can be locked. +* **music** allows playing sounds. + +# functionality + +* **rgb backlight**: with layer indication, and ability to change base layer lighting mode. +* **secrets**: by placing a secrets.h, and not tracking it, passwords can be stored. +* **mouse**: mouse emulation, complete with diagonal keys. +* **turkish**: an altgr-like overlay that allows some non-common letters, in unicode. + +i suggest checking out how i enabled turkish keys, +how i planned out rgb lighting, +and my mouse implementation; +they might offer some insight into fringe user cases. + +# issues + +all features are too big for the 32kb bootloader. +offenders are audio and rgb lights; it comes down to one or the other. + +~the proton board, and rev 6 might fix that.~ + +# credits + +this is a modified version of let's split keyboard from bbaserdem who has previously written his keymap by himself before, but rewrote it here. diff --git a/users/romus/config.h b/users/romus/config.h new file mode 100644 index 0000000000..9332febe63 --- /dev/null +++ b/users/romus/config.h @@ -0,0 +1,8 @@ +#pragma once + +#ifdef TAP_DANCE_ENABLE + #define TAPPING_TERM 300 + #define TAPPING_TOGGLE 1 +#endif + +// !USERSPACE_CONFIG_H diff --git a/users/romus/romus.c b/users/romus/romus.c new file mode 100644 index 0000000000..35b524f941 --- /dev/null +++ b/users/romus/romus.c @@ -0,0 +1,557 @@ +#include "romus.h" + +/*---------------*\ +|*-----MOUSE-----*| +\*---------------*/ +#ifdef MOUSEKEY_ENABLE +#include "mousekey.h" +#endif + +/*-------------*\ +|*-----RGB-----*| +\*-------------*/ +#ifdef RGBLIGHT_ENABLE +#include "rgblight.h" +#endif + +/*-------------*\ +|*---UNICODE---*| +\*-------------*/ +#ifdef UNICODE_ENABLE +#endif + +/*-----------------*\ +|*-----SECRETS-----*| +\*-----------------*/ +// Enabled by adding a non-tracked secrets.h to this dir. +#if (__has_include("secrets.h")) +#include "secrets.h" +#endif + +/*---------------*\ +|*-----MUSIC-----*| +\*---------------*/ +#ifdef AUDIO_ENABLE +float tone_game[][2] = SONG(ZELDA_PUZZLE); +float tone_return[][2] = SONG(ZELDA_TREASURE); +float tone_linux[][2] = SONG(UNICODE_LINUX); +float tone_windows[][2] = SONG(UNICODE_WINDOWS); +#endif + +/*-------------------*\ +|*-----TAP-DANCE-----*| +\*-------------------*/ +#ifdef TAP_DANCE_ENABLE +qk_tap_dance_action_t tap_dance_actions[] = { + // Shift on double tap of semicolon + [SCL] = ACTION_TAP_DANCE_DOUBLE( KC_SCLN, KC_COLN ) +}; +#endif + +/* In keymaps, instead of writing _user functions, write _keymap functions + * The __attribute__((weak)) allows for empty definitions here, and during + * compilation, if these functions are defined elsewhere, they are written + * over. This allows to include custom code from keymaps in the generic code + * in this file. + */ +__attribute__ ((weak)) void matrix_init_keymap(void) { } +__attribute__ ((weak)) void matrix_scan_keymap(void) { } +__attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + return true; +} +__attribute__ ((weak)) uint32_t layer_state_set_keymap (uint32_t state) { + return state; +} +__attribute__ ((weak)) void led_set_keymap(uint8_t usb_led) { } + +/* ----------------------- *\ + * -----RGB Functions----- * +\* ----------------------- */ +#ifdef RGBLIGHT_ENABLE + +// Set RGBLIGHT state depending on layer +void rgblight_change( uint8_t this_layer ) { + // Enable RGB light; will not work without this + //rgblight_enable_noeeprom(); + // Change RGB light + switch ( this_layer ) { + case _DV: + // Load base layer + rgblight_disable_noeeprom(); + break; + case _AL: + // Do yellow for alternate + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom( 60,255,255); + + + break; + case _GA: + // Do purple for game + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom(285,255,255); + + + break; + case _NU: + // Do azure for number + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom(186,200,255); + + + break; + case _SE: + // Do red for settings + rgblight_enable_noeeprom(); + + rgblight_sethsv_noeeprom( 16,255,255); + + break; + case _MO: + // Do green for mouse + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom(120,255,255); + + + break; + case _MU: + // Do orange for music + + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom( 39,255,255); + + break; + default: + // Something went wrong + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom( 0,255,255); + + break; + } +} + +#endif + +/*---------------------*\ +|*-----MATRIX INIT-----*| +\*---------------------*/ +void matrix_init_user (void) { + + // Keymap specific things, do it first thing to allow for delays etc + matrix_init_keymap(); + + // Correct unicode +#ifdef UNICODE_ENABLE + set_unicode_input_mode(UC_LNX); +#endif + + // Make beginning layer DVORAK + set_single_persistent_default_layer(_DV); + +} + +/*---------------------*\ +|*-----MATRIX SCAN-----*| +\*---------------------*/ +void matrix_scan_user (void) { + // Keymap specific, do it first + matrix_scan_keymap(); +} + +/*------------------*\ +|*-----KEYCODES-----*| +\*------------------*/ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + // Shift check + bool is_capital = ( keyboard_report->mods & (MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT)) ); + static bool lock_flag = false; + uint8_t layer = biton32 (layer_state); + + switch (keycode) { + // Secrets implementation +#if (__has_include("secrets.h")) + case SECRET1: + if( !record->event.pressed ) { + send_string_P( secret[ keycode - SECRET1 ] ); + } + return false; + break; + case SECRET2: + if( !record->event.pressed ) { + send_string_P( secret[ keycode - SECRET2 ] ); + } + return false; + break; + case SECRET3: + if( !record->event.pressed ) { + send_string_P( secret[ keycode - SECRET3 ] ); + } + return false; + break; +#endif + + // Lock functionality: These layers are locked if the LOCKED buttons are + // pressed. Otherwise, they are momentary toggles + case K_LOCK: + if (record->event.pressed) { + lock_flag = !lock_flag; + } + return false; + break; + case K_MOUSE: + if (record->event.pressed) { + layer_on(_MO); + lock_flag = false; + } else { + if ( lock_flag ) { + lock_flag = false; + } else { + layer_off(_MO); + } + } + return false; + break; + case K_NUMBR: + if (record->event.pressed) { + layer_on(_NU); + lock_flag = false; + } else { + if ( lock_flag ) { + lock_flag = false; + } else { + layer_off(_NU); + } + } + return false; + break; + + // Layer switches with sound + case K_GAMES: + if (record->event.pressed) { + // On press, turn off layer if active + if ( layer == _GA ) { +#ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(tone_return); +#endif + layer_off(_GA); + } + } else { + // After click, turn on layer if accessed from setting + if ( layer == _SE ) { +#ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(tone_game); +#endif + layer_on(_GA); + layer_off(_SE); + } + } + return false; + break; + case MU_TOG: + if (record->event.pressed) { + // On press, turn off layer if active + if ( layer == _SE ) { + layer_off(_SE); + layer_on(_MU); + } else { + layer_off(_MU); + } + } + return true; + break; + +//------UNICODE + // Unicode switches with sound +#ifdef UNICODE_ENABLE + case UNI_LI: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(tone_linux); +#endif + set_unicode_input_mode(UC_LNX); + } + return false; + break; + case UNI_WN: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(tone_windows); +#endif + set_unicode_input_mode(UC_WIN); + } + return false; + break; + + // Turkish letters, with capital functionality + case TUR_A: + if (record->event.pressed) { + if ( is_capital ) { + unicode_input_start(); + register_hex(0x00c2); + unicode_input_finish(); + } else { + unicode_input_start(); + register_hex(0x00e2); + unicode_input_finish(); + } + } + return false; + break; + case TUR_O: + if (record->event.pressed) { + if ( is_capital ) { + unicode_input_start(); + register_hex(0x00d6); + unicode_input_finish(); + } else { + unicode_input_start(); + register_hex(0x00f6); + unicode_input_finish(); + } + } + return false; + break; + case TUR_U: + if (record->event.pressed) { + if ( is_capital ) { + unicode_input_start(); + register_hex(0x00dc); + unicode_input_finish(); + } else { + unicode_input_start(); + register_hex(0x00fc); + unicode_input_finish(); + } + } + return false; + break; + case TUR_I: + if (record->event.pressed) { + if ( is_capital ) { + unicode_input_start(); + register_hex(0x0130); + unicode_input_finish(); + } else { + unicode_input_start(); + register_hex(0x0131); + unicode_input_finish(); + } + } + return false; + break; + case TUR_G: + if (record->event.pressed) { + if ( is_capital ) { + unicode_input_start(); + register_hex(0x011e); + unicode_input_finish(); + } else { + unicode_input_start(); + register_hex(0x011f); + unicode_input_finish(); + } + } + return false; + break; + case TUR_C: + if (record->event.pressed) { + if ( is_capital ) { + unicode_input_start(); + register_hex(0x00c7); + unicode_input_finish(); + } else { + unicode_input_start(); + register_hex(0x00e7); + unicode_input_finish(); + } + } + return false; + break; + case TUR_S: + if (record->event.pressed) { + if ( is_capital ) { + unicode_input_start(); + register_hex(0x015e); + unicode_input_finish(); + } else { + unicode_input_start(); + register_hex(0x015f); + unicode_input_finish(); + } + } + return false; + break; +#endif + +//-------Diagonal mouse movements +#ifdef MOUSEKEY_ENABLE + case MO_NE: + if( record->event.pressed ) { + mousekey_on(MO_N); + mousekey_on(MO_E); + mousekey_send(); + } else { + mousekey_off(MO_N); + mousekey_off(MO_E); + mousekey_send(); + } + return false; + break; + case MO_NW: + if( record->event.pressed ) { + mousekey_on(MO_N); + mousekey_on(MO_W); + mousekey_send(); + } else { + mousekey_off(MO_N); + mousekey_off(MO_W); + mousekey_send(); + } + return false; + break; + case MO_SE: + if( record->event.pressed ) { + mousekey_on(MO_S); + mousekey_on(MO_E); + mousekey_send(); + } else { + mousekey_off(MO_S); + mousekey_off(MO_E); + mousekey_send(); + } + return false; + break; + case MO_SW: + if( record->event.pressed ) { + mousekey_on(MO_S); + mousekey_on(MO_W); + mousekey_send(); + } else { + mousekey_off(MO_S); + mousekey_off(MO_W); + mousekey_send(); + } + return false; + break; + case MO_S_NE: + if( record->event.pressed ) { + mousekey_on(MO_S_N); + mousekey_on(MO_S_E); + mousekey_send(); + } else { + mousekey_off(MO_S_N); + mousekey_off(MO_S_E); + mousekey_send(); + } + return false; + break; + case MO_S_NW: + if( record->event.pressed ) { + mousekey_on(MO_S_N); + mousekey_on(MO_S_W); + mousekey_send(); + } else { + mousekey_off(MO_S_N); + mousekey_off(MO_S_W); + mousekey_send(); + } + return false; + break; + case MO_S_SE: + if( record->event.pressed ) { + mousekey_on(MO_S_S); + mousekey_on(MO_S_E); + mousekey_send(); + } else { + mousekey_off(MO_S_S); + mousekey_off(MO_S_E); + mousekey_send(); + } + return false; + break; + case MO_S_SW: + if( record->event.pressed ) { + mousekey_on(MO_S_S); + mousekey_on(MO_S_W); + mousekey_send(); + } else { + mousekey_off(MO_S_S); + mousekey_off(MO_S_W); + mousekey_send(); + } + return false; + break; +#endif + +//------DOUBLE PRESS, with added left navigation + case DBL_SPC: + if( record->event.pressed ) { + SEND_STRING(" "SS_TAP(X_LEFT)); + } + return false; + break; + case DBL_ANG: + if( record->event.pressed ) { + SEND_STRING("<>"SS_TAP(X_LEFT)); + } + return false; + break; + case DBL_PAR: + if( record->event.pressed ) { + SEND_STRING("()"SS_TAP(X_LEFT)); + } + return false; + break; + case DBL_SQR: + if( record->event.pressed ) { + SEND_STRING("[]"SS_TAP(X_LEFT)); + } + return false; + break; + case DBL_BRC: + if( record->event.pressed ) { + SEND_STRING("{}"SS_TAP(X_LEFT)); + } + return false; + break; + case DBL_QUO: + if( record->event.pressed ) { + SEND_STRING("\'\'"SS_TAP(X_LEFT)); + } + return false; + break; + case DBL_DQT: + if( record->event.pressed ) { + SEND_STRING("\"\""SS_TAP(X_LEFT)); + } + return false; + break; + case DBL_GRV: + if( record->event.pressed ) { + SEND_STRING("``"SS_TAP(X_LEFT)); + } + return false; + break; +// END OF KEYCODES + } + return process_record_keymap(keycode, record); +} + +/*----------------------*\ +|*-----LAYER CHANGE-----*| +\*----------------------*/ + +uint32_t layer_state_set_user(uint32_t state) { + + state = layer_state_set_keymap (state); +#ifdef RGBLIGHT_ENABLE + // Change RGB lighting depending on the last layer activated + rgblight_change( biton32(state) ); +#endif + return state; +} \ No newline at end of file diff --git a/users/romus/romus.h b/users/romus/romus.h new file mode 100644 index 0000000000..265c942e92 --- /dev/null +++ b/users/romus/romus.h @@ -0,0 +1,272 @@ +// This is a modified version of Let's Split keyboard from bbaserdem + +#pragma once + +#include "quantum.h" + +// Use 7 wide characters for keymaps +#define _______ KC_TRNS +#define XXX KC_NO + +// Layers +#define _DV 0 // Base layer +#define _AL 1 // Alt char overlay +#define _GA 2 // Game layer +#define _NU 3 // Numbers layer +#define _SE 4 // Settings layer +#define _MO 5 // Mouse emulation +#define _MU 6 // Music mode + +// Define short macros +#define UNDO LCTL(KC_Z) +#define REDO LCTL(KC_Y) +#define COPY LCTL(KC_C) +#define CUT LCTL(KC_X) +#define PASTE LCTL(KC_V) +#define EXIT LALT(KC_F4) +#define CAPS SFT_T(KC_CAPS) + + +// Rename mouse keys with 7 letters +#ifdef MOUSEKEY_ENABLE +#define MO_S_N KC_MS_WH_UP +#define MO_S_S KC_MS_WH_DOWN +#define MO_S_E KC_MS_WH_RIGHT +#define MO_S_W KC_MS_WH_LEFT +#define MO_N KC_MS_UP +#define MO_S KC_MS_DOWN +#define MO_E KC_MS_RIGHT +#define MO_W KC_MS_LEFT +#define MO_CL_L KC_MS_BTN1 +#define MO_CL_R KC_MS_BTN2 +#define MO_CL_M KC_MS_BTN3 +#define MO_CL_4 KC_MS_BTN4 +#define MO_CL_5 KC_MS_BTN5 +#define MO_AC_0 KC_MS_ACCEL0 +#define MO_AC_1 KC_MS_ACCEL1 +#define MO_AC_2 KC_MS_ACCEL2 +#else +#define MO_S_N KC_NO +#define MO_S_S KC_NO +#define MO_S_E KC_NO +#define MO_S_W KC_NO +#define MO_N KC_NO +#define MO_S KC_NO +#define MO_E KC_NO +#define MO_W KC_NO +#define MO_CL_L KC_NO +#define MO_CL_R KC_NO +#define MO_CL_M KC_NO +#define MO_CL_1 KC_NO +#define MO_CL_2 KC_NO +#define MO_AC_0 KC_NO +#define MO_AC_1 KC_NO +#define MO_AC_2 KC_NO +#endif + +// Rename music keys with <8 letters +#ifdef AUDIO_ENABLE +#define MU_REC KC_LCTL +#define MU_STOP KC_LALT +#define MU_PLAY KC_LGUI +#define MU_PLAY KC_LGUI +#define MU_FAST KC_UP +#define MU_SLOW KC_DOWN +#define MU_MASK KC_A +#else +#define MU_REC KC_NO +#define MU_STOP KC_NO +#define MU_PLAY KC_NO +#define MU_PLAY KC_NO +#define MU_FAST KC_NO +#define MU_SLOW KC_NO +#define MU_MASK KC_NO +#endif + +// Define non-capitalized UTF shortcuts here +#ifdef UNICODE_ENABLE +#define PHY_HBR UC(0x0127) +#define PHY_DEG UC(0x00b0) +#define CUR_LIR UC(0x20ba) +#define CUR_BIT UC(0x20bf) +#define CUR_EUR UC(0x20ac) +#define CUR_BPN UC(0x00a3) +#define CUR_YEN UC(0x00a5) +#else +#define PHY_HBR KC_NO +#define PHY_DEG KC_NO +#define CUR_LIR KC_NO +#define CUR_BIT KC_NO +#define CUR_EUR KC_NO +#define CUR_BPN KC_NO +#define CUR_YEN KC_NO +#endif + +// Custom keycodes +enum userspace_custom_keycodes { + // Turkish letters, with shifting + TUR_A = SAFE_RANGE, + TUR_C, + TUR_G, + TUR_I, + TUR_O, + TUR_S, + TUR_U, + // Unicode mode switch + UNI_LI, + UNI_WN, + // Double keys + DBL_SPC, + DBL_ANG, + DBL_PAR, + DBL_SQR, + DBL_BRC, + DBL_QUO, + DBL_DQT, + DBL_GRV, + // Diagonal mouse movements + MO_NE, + MO_NW, + MO_SE, + MO_SW, + MO_S_NE, + MO_S_NW, + MO_S_SE, + MO_S_SW, + // Layer switches and lock functionality + K_MOUSE, + K_NUMBR, + K_LOCK, + K_GAMES, + // Secret macros + SECRET1, + SECRET2, + SECRET3 +}; + +// Do tap dancable semicolon key if available +#ifdef TAP_DANCE_ENABLE +enum { + SCL = 0 +}; +#define MY_SCL TD(SCL) +#else +#define MY_SCL KC_SCLN +#endif + +// Shared keymaps +#define LAYOUT_planck_wrapper(...) LAYOUT_planck_grid(__VA_ARGS__) +#define LAYOUT_letssplit_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) + +/* Dvorak + * ,------------------------------------------------------------------------. + * | ' " | , | . | P | Y | Esc || Del | F | G | C | R | L | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | A | O | E | U | I | Bkp || Ent | D | H | T | N | S | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | ; : | Q | J | K | X | Spc || SET | B | M | W | V | Z | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | Ctrl| OS | Alt | Tab | Cps | ACH || SYM | Spc | Lft | Up | Dwn | Rght| + * `------------------------------------------------------------------------' */ +#define DVORAK \ + KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_ESC, KC_DEL, KC_F, KC_G, KC_C, KC_R, KC_L, \ + KC_A, KC_O, KC_E, KC_U, KC_I, KC_BSPC,KC_ENT, KC_D, KC_H, KC_T, KC_N, KC_S, \ + MY_SCL, KC_Q, KC_J, KC_K, KC_X, KC_SPC, MO(_SE),KC_B, KC_M, KC_W, KC_V, KC_Z, \ + KC_LCTL,KC_LGUI,KC_LALT,KC_TAB, CAPS, MO(_AL),K_NUMBR,KC_SPC, KC_LEFT,KC_UP, KC_DOWN,KC_RGHT + +/* Alternative character overlay + * ,------------------------------------------------------------------------. + * | ` ~ | ' ' | " " | Euro|Pound| || Del | Home| PgUp| Prn | \ | | / ? | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | Redo| < > | ( ) | [ ] | { } | Alt || Ins | End |PgDwn| Scl | BTC | - _ | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | Undo| Cut | Copy|Paste| EXIT| Shf || | | | | Yen | = + | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | | | | | | || | | | | | | + * `------------------------------------------------------------------------' */ +#define ALTCHAR \ + KC_GRV, DBL_QUO,DBL_DQT,CUR_EUR,CUR_BPN,_______,_______,KC_HOME,KC_PGUP,KC_PSCREEN, KC_BSLASH, KC_SLSH, \ + REDO, DBL_ANG,DBL_PAR,DBL_SQR,DBL_BRC,KC_LALT,KC_INS, KC_END, KC_PGDN,KC_SCROLLLOCK, CUR_BIT, KC_MINUS, \ + UNDO, CUT, COPY, PASTE, EXIT, KC_LSFT,_______,_______,_______,_______, CUR_YEN, KC_EQUAL, \ + _______,_______,_______,_______,_______,_______,_______,DBL_SPC,_______,_______, _______, _______ + +/* Game layer + * ,------------------------------------------------------------------------. + * | OFF | Q | W | E | R | T || Esc | 7 | 8 | 9 |NumLk|Bkspc| + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | Tab | A | S | D | F | G || F1 | 4 | 5 | 6 | \ | Ent | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | Shf | Z | X | C | V | B || F2 | 1 | 2 | 3 | ^ | MSE | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | Ctrl| Alt | / | ` | SYM | Spc || F5 | Ent | 0 | < | v | > | + * `------------------------------------------------------------------------' */ +#define GAME \ + K_GAMES,KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_P7, KC_P8, KC_P9, KC_NLCK,KC_BSPC, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F1, KC_P4, KC_P5, KC_P6, KC_BSLS,KC_ENT , \ + KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_P1, KC_P2, KC_P3, KC_UP,K_MOUSE, \ + KC_LCTL,KC_LALT,KC_SLSH,KC_GRV, K_NUMBR,KC_SPC, KC_F5, KC_ENT, KC_P0, KC_LEFT,KC_DOWN,KC_RGHT + +/* Symbols layer + * ,------------------------------------------------------------------------. + * | OFF | ` | ~ | \ | [ | { || } | ] | - | _ | = | + | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | 1 | 2 | 3 | 4 | 5 | || LCK | 6 | 7 | 8 | 9 | 0 | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | ! | @ | # | $ | % | ||Vol +| ^ | & | * | ( | ) | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | | | | | | | || | | | | | | + * `------------------------------------------------------------------------' */ +#define NUMBERS \ + K_NUMBR,KC_GRV, KC_TILD,KC_BSLS,KC_LBRC,KC_LCBR,KC_RCBR,KC_RBRC,KC_MINS,KC_UNDS,KC_EQL, KC_PLUS, \ + KC_1, KC_2, KC_3, KC_4, KC_5, _______,K_LOCK, KC_6, KC_7, KC_8, KC_9, KC_0, \ + KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,_______,KC_VOLU,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, \ + KC_PIPE,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ + +/* Settings layer + * ,------------------------------------------------------------------------. + * |BLLed| F1 | F2 | F3 | F4 | Lin || Win | Wake| |Hue -|Hue +|Reset| + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | | F5 | F6 | F7 | F8 | ||Vol 0| |RGBto|Sat -|Sat +| | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | Game| F9 | F10 | F11 | F12 |Vol 0|| |PrtSc|RGBan|Bri -|Bri +| | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * |Musir| | | | |Vol +||Vol -| Prev| Stop|TogMu| Next| | + * `------------------------------------------------------------------------' */ +#define SETTINGS \ + BL_STEP,KC_F1, KC_F2, KC_F3, KC_F4, UNI_LI, UNI_WN, KC_WAKE,_______,RGB_HUD,RGB_HUI,RESET , \ + _______,KC_F5, KC_F6, KC_F7, KC_F8, _______,KC_MUTE,_______,RGB_TOG,RGB_SAD,RGB_SAI,_______, \ + K_GAMES,KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE,_______,KC_PSCR,RGB_MOD,RGB_VAD,RGB_VAI,_______, \ + MU_TOG, _______,_______,_______,_______,KC_VOLU,KC_VOLD,KC_MPRV,KC_MSTP,KC_MPLY,KC_MNXT,_______ + +/* Mouse layer + * ,------------------------------------------------------------------------. + * |Ulock| \ | ^ | / |.....|.....||.....|.....| |\|.| |^| | |/|.| | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | | < | Mid | > |Btn 4|.....||.....|Btn 5| <-- | Mid | --> | | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | | / | v | \ |.....|.....||.....|.....| |/| | |v| | |\| | LCK | + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | | | | | | Left||Right| | |Accl0|Accl1|Accl2| + * `------------------------------------------------------------------------' */ +#define MOUSE \ + K_MOUSE,MO_NW, MO_N, MO_NE, XXX, XXX ,XXX, XXX, MO_S_NW,MO_S_N, MO_S_NE,_______, \ + _______,MO_W, MO_CL_M,MO_E, MO_CL_4,XXX ,XXX, MO_CL_5,MO_S_W, MO_CL_M,MO_S_E, _______, \ + _______,MO_SW, MO_S, MO_SE, XXX, XXX ,XXX, XXX, MO_S_SW,MO_S_S, MO_S_SE,K_LOCK , \ + _______,_______,_______,_______,_______,MO_CL_L,MO_CL_R,_______,MO_AC_0,MO_AC_1,MO_AC_2,_______ + +/* Music layer + * ,------------------------------------------------------------------------. + * |.....|.....|.....|.....|.....|.....||.....|.....|.....|.....|.....|.....| + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * |.....|.....|.....|.....|.....|.....||.....|.....|.....|.....|.....|.....| + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * |.....|.....|.....|.....|.....|.....||.....|.....|.....|.....|.....|.....| + * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----| + * | togg| rec | stop| play| slow| fast||modes|.....|.....|.....|.....|.....| + * `------------------------------------------------------------------------' + */ +#define MUSIC \ + MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK, \ + MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK, \ + MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK, \ + MU_TOG, MU_REC, MU_STOP,MU_PLAY,MU_SLOW,MU_FAST,MU_MOD, MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK diff --git a/users/romus/rules.mk b/users/romus/rules.mk new file mode 100644 index 0000000000..78ce2e93f4 --- /dev/null +++ b/users/romus/rules.mk @@ -0,0 +1,24 @@ +SRC += romus.c +EXTRAFLAGS += -flto # Used to make code smaller + +# ENABLE +UNICODE_ENABLE = yes # Used for unicode character emulation +EXTRAKEY_ENABLE = yes # OS signals like volume control + +# DISABLE +ifndef BLUETOOTH_ENABLE + BLUETOOTH_ENABLE = no # No bluetooth +endif +COMMAND_ENABLE = no # Some bootmagic thing i dont use +BOOTMAGIC_ENABLE = no # Access to EEPROM settings, not needed +CONSOLE_ENABLE = no # Allows console output with a command +SLEEP_LED_ENABLE = no # Breathes LED's when computer is asleep. Untested. +NKRO_ENABLE = no # Default is 6KRO which is plenty +MIDI_ENABLE = no # Untested feature +FAUXCLICKY_ENABLE = no # Emulates clicks using speaker +KEY_LOCK_ENABLE = no # Allows locking any key. Not used +API_SYSEX_ENABLE = no # Allows OS to send signals. + + +# Disabling this makes it compile, i dont know why +# VARIABLE_TRACE = no # Allows debugging variables From 00b6f14821f44ead75504e28d7fed26791cb2875 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 22 Oct 2018 08:57:37 -0700 Subject: [PATCH 226/269] Replace outdated RGB/Audio information --- keyboards/amj40/keymaps/default/rules.mk | 4 ++-- keyboards/amj40/keymaps/fabian/rules.mk | 2 +- keyboards/amj40/keymaps/jetpacktuxedo/rules.mk | 2 +- keyboards/amj40/keymaps/myee/rules.mk | 2 +- keyboards/amj60/keymaps/iso_split_rshift/rules.mk | 2 +- keyboards/atomic/keymaps/pvc/rules.mk | 2 +- keyboards/atomic/rules.mk | 2 +- keyboards/atreus/keymaps/xk/rules.mk | 2 +- keyboards/bfo9000/rules.mk | 2 +- keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk | 2 +- keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk | 2 +- keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk | 2 +- keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk | 2 +- keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk | 2 +- keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk | 2 +- keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk | 2 +- keyboards/bpiphany/pegasushoof/rules.mk | 2 +- keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk | 2 +- keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk | 2 +- keyboards/clueboard/66/keymaps/xyverz/rules.mk | 2 +- keyboards/comet46/keymaps/satt/rules.mk | 2 +- keyboards/contra/keymaps/losinggeneration/rules.mk | 2 +- keyboards/converter/ibm_terminal/keymaps/default/rules.mk | 2 +- keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk | 2 +- keyboards/converter/ibm_terminal/rules.mk | 2 +- keyboards/converter/sun_usb/rules.mk | 2 +- keyboards/crkbd/keymaps/default/rules.mk | 2 +- keyboards/crkbd/keymaps/drashna/rules.mk | 2 +- keyboards/crkbd/keymaps/like_jis/rules.mk | 2 +- keyboards/crkbd/rules.mk | 2 +- keyboards/daisy/rules.mk | 2 +- keyboards/deltasplit75/keymaps/itsaferbie/rules.mk | 2 +- keyboards/deltasplit75/rules.mk | 6 +++--- keyboards/diverge3/rules.mk | 2 +- keyboards/divergetm2/rules.mk | 2 +- keyboards/do60/rules.mk | 2 +- keyboards/eco/keymaps/default/rules.mk | 2 +- keyboards/eco/keymaps/hexwire/rules.mk | 2 +- keyboards/eco/keymaps/that_canadian/rules.mk | 2 +- keyboards/eco/keymaps/xyverz/rules.mk | 2 +- keyboards/ergo42/rules.mk | 2 +- keyboards/ergodash/rules.mk | 2 +- keyboards/ergodox_infinity/keymaps/narze/rules.mk | 2 +- keyboards/ergoinu/keymaps/default/rules.mk | 2 +- keyboards/ergoinu/keymaps/default_jis/rules.mk | 2 +- keyboards/ergoinu/rules.mk | 2 +- keyboards/ergotravel/rules.mk | 2 +- keyboards/fortitude60/rules.mk | 2 +- keyboards/fourier/rules.mk | 2 +- keyboards/gherkin/keymaps/mjt/rules.mk | 2 +- keyboards/gonnerd/keymaps/default/rules.mk | 2 +- keyboards/gonnerd/keymaps/gam3cat/rules.mk | 2 +- keyboards/gonnerd/keymaps/mauin/rules.mk | 2 +- keyboards/gonnerd/keymaps/tkl/rules.mk | 2 +- keyboards/hadron/keymaps/default/rules.mk | 2 +- keyboards/hadron/keymaps/side_numpad/rules.mk | 2 +- .../handwired/MS_sculpt_mobile/keymaps/default/rules.mk | 2 +- .../handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk | 2 +- keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk | 2 +- keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk | 2 +- keyboards/handwired/atreus50/rules.mk | 2 +- keyboards/handwired/dactyl_manuform/4x5/rules.mk | 3 +-- keyboards/handwired/dactyl_manuform/4x6/rules.mk | 3 +-- keyboards/handwired/dactyl_manuform/5x6/rules.mk | 3 +-- keyboards/handwired/dactyl_manuform/5x7/rules.mk | 2 +- keyboards/handwired/dactyl_manuform/6x6/rules.mk | 3 +-- keyboards/handwired/dactyl_manuform/rules.mk | 2 +- keyboards/handwired/kbod/keymaps/default/rules.mk | 2 +- keyboards/handwired/minorca/keymaps/default/rules.mk | 2 +- keyboards/handwired/minorca/keymaps/rgb/rules.mk | 2 +- keyboards/handwired/minorca/rules.mk | 2 +- keyboards/handwired/not_so_minidox/rules.mk | 2 +- keyboards/handwired/pilcrow/keymaps/default/rules.mk | 2 +- keyboards/handwired/promethium/keymaps/default/rules.mk | 2 +- keyboards/handwired/promethium/keymaps/priyadi/rules.mk | 2 +- keyboards/handwired/promethium/rules.mk | 2 +- keyboards/handwired/qc60/rules.mk | 2 +- keyboards/handwired/terminus_mini/keymaps/default/rules.mk | 2 +- keyboards/handwired/terminus_mini/rules.mk | 2 +- keyboards/handwired/woodpad/keymaps/default/rules.mk | 2 +- keyboards/handwired/xealous/rules.mk | 2 +- keyboards/helix/pico/keymaps/biacco/rules.mk | 2 +- keyboards/helix/pico/keymaps/default/rules.mk | 2 +- keyboards/helix/rev1/keymaps/OLED_sample/rules.mk | 2 +- keyboards/helix/rev2/keymaps/default/rules.mk | 2 +- keyboards/helix/rev2/keymaps/edvorakjp/rules.mk | 2 +- keyboards/helix/rev2/keymaps/five_rows/rules.mk | 2 +- keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk | 2 +- keyboards/helix/rev2/keymaps/froggy/rules.mk | 2 +- keyboards/helix/rev2/keymaps/led_test/rules.mk | 2 +- keyboards/helix/rev2/keymaps/yshrsmz/rules.mk | 2 +- keyboards/helix/rules.mk | 2 +- keyboards/hhkb/keymaps/cinaeco/rules.mk | 2 +- keyboards/iris/keymaps/edvorakjp/rules.mk | 2 +- keyboards/iris/rules.mk | 2 +- keyboards/jd45/keymaps/mjt/rules.mk | 2 +- keyboards/jd45/keymaps/mjt6u/rules.mk | 2 +- keyboards/kinesis/keymaps/carpalx/rules.mk | 2 +- keyboards/kinesis/keymaps/default/rules.mk | 2 +- keyboards/kinesis/keymaps/default_pretty/rules.mk | 2 +- keyboards/kinesis/keymaps/dvorak/rules.mk | 2 +- keyboards/kinesis/keymaps/insertsnideremarks/rules.mk | 2 +- keyboards/kinesis/keymaps/milestogo/rules.mk | 2 +- keyboards/kinesis/keymaps/xyverz/rules.mk | 2 +- keyboards/launchpad/keymaps/default/rules.mk | 2 +- keyboards/lets_split/keymaps/OLED_sample/rules.mk | 2 +- keyboards/lets_split/keymaps/heartrobotninja/rules.mk | 3 +-- keyboards/lets_split/keymaps/mjt/rules.mk | 2 +- keyboards/lets_split/keymaps/piemod/rules.mk | 2 +- keyboards/lets_split/keymaps/xk/rules.mk | 2 +- keyboards/lets_split/rules.mk | 2 +- keyboards/levinson/keymaps/losinggeneration/rules.mk | 2 +- keyboards/levinson/rules.mk | 2 +- keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk | 2 +- keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk | 2 +- keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk | 2 +- keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk | 2 +- keyboards/lily58/rules.mk | 2 +- keyboards/meira/rules.mk | 2 +- keyboards/minidox/keymaps/alairock/rules.mk | 2 +- keyboards/minidox/keymaps/that_canadian/rules.mk | 2 +- keyboards/minidox/keymaps/xyverz/rules.mk | 2 +- keyboards/minidox/rules.mk | 2 +- keyboards/mint60/rules.mk | 2 +- keyboards/miuni32/keymaps/adam-lee/rules.mk | 2 +- keyboards/miuni32/keymaps/default/rules.mk | 2 +- keyboards/miuni32/keymaps/ht_156/rules.mk | 2 +- keyboards/miuni32/keymaps/ki/rules.mk | 2 +- keyboards/mt40/rules.mk | 2 +- keyboards/niu_mini/keymaps/spacebarracecar/rules.mk | 2 +- keyboards/nyquist/keymaps/DivergeJM/rules.mk | 2 +- keyboards/nyquist/keymaps/danielhklein/rules.mk | 2 +- keyboards/nyquist/keymaps/losinggeneration/rules.mk | 2 +- keyboards/nyquist/rules.mk | 2 +- keyboards/org60/rules.mk | 2 +- keyboards/orthodox/rules.mk | 2 +- keyboards/planck/keymaps/ab/rules.mk | 2 +- keyboards/planck/keymaps/alexey/rules.mk | 2 +- keyboards/planck/keymaps/angerthosenear/rules.mk | 2 +- keyboards/planck/keymaps/austin/rules.mk | 2 +- keyboards/planck/keymaps/basic/rules.mk | 2 +- keyboards/planck/keymaps/bone2planck/rules.mk | 2 +- keyboards/planck/keymaps/callum/rules.mk | 2 +- keyboards/planck/keymaps/cbbrowne/rules.mk | 2 +- keyboards/planck/keymaps/chance/rules.mk | 2 +- keyboards/planck/keymaps/charlie/rules.mk | 2 +- keyboards/planck/keymaps/circuit/rules.mk | 2 +- keyboards/planck/keymaps/daniel/rules.mk | 2 +- keyboards/planck/keymaps/danielhklein/rules.mk | 2 +- keyboards/planck/keymaps/david/rules.mk | 2 +- keyboards/planck/keymaps/dc/rules.mk | 2 +- keyboards/planck/keymaps/dlaroe/rules.mk | 2 +- keyboards/planck/keymaps/dr_notsokind/rules.mk | 2 +- keyboards/planck/keymaps/dzobert/rules.mk | 2 +- keyboards/planck/keymaps/espynn/rules.mk | 2 +- keyboards/planck/keymaps/experimental/rules.mk | 2 +- keyboards/planck/keymaps/gabriel/rules.mk | 2 +- keyboards/planck/keymaps/gunp/rules.mk | 2 +- keyboards/planck/keymaps/impossible/rules.mk | 2 +- keyboards/planck/keymaps/jacob/rules.mk | 2 +- keyboards/planck/keymaps/jeebak/rules.mk | 2 +- keyboards/planck/keymaps/jhenahan/rules.mk | 2 +- keyboards/planck/keymaps/joe/rules.mk | 2 +- keyboards/planck/keymaps/johannes/rules.mk | 2 +- keyboards/planck/keymaps/kyle/rules.mk | 2 +- keyboards/planck/keymaps/lae3/rules.mk | 2 +- keyboards/planck/keymaps/leo/rules.mk | 2 +- keyboards/planck/keymaps/lucas/rules.mk | 2 +- keyboards/planck/keymaps/lukas/rules.mk | 2 +- keyboards/planck/keymaps/luke/rules.mk | 2 +- keyboards/planck/keymaps/max/rules.mk | 2 +- keyboards/planck/keymaps/mollat/rules.mk | 2 +- keyboards/planck/keymaps/myoung34/rules.mk | 2 +- keyboards/planck/keymaps/narze/rules.mk | 2 +- keyboards/planck/keymaps/neo2planck/rules.mk | 2 +- keyboards/planck/keymaps/nico/rules.mk | 2 +- keyboards/planck/keymaps/not-quite-neo/rules.mk | 2 +- keyboards/planck/keymaps/pickle_jr/rules.mk | 2 +- keyboards/planck/keymaps/premek/rules.mk | 2 +- keyboards/planck/keymaps/priyadi/rules.mk | 2 +- keyboards/planck/keymaps/pvc/rules.mk | 2 +- keyboards/planck/keymaps/rai-suta/rules.mk | 2 +- keyboards/planck/keymaps/sgoodwin/rules.mk | 2 +- keyboards/planck/keymaps/spacebarracecar/rules.mk | 3 +-- keyboards/planck/keymaps/tak3over/rules.mk | 2 +- keyboards/planck/keymaps/thermal_printer/rules.mk | 2 +- keyboards/planck/keymaps/tong92/rules.mk | 2 +- keyboards/planck/keymaps/vifon/rules.mk | 2 +- keyboards/planck/keymaps/yale/rules.mk | 2 +- keyboards/planck/keymaps/yang/rules.mk | 2 +- keyboards/planck/keymaps/zach/rules.mk | 2 +- keyboards/planck/keymaps/zrichard/rules.mk | 2 +- keyboards/preonic/keymaps/bucktooth/rules.mk | 2 +- keyboards/preonic/keymaps/dlaroe/rules.mk | 2 +- keyboards/preonic/keymaps/jacwib/rules.mk | 2 +- keyboards/preonic/keymaps/kinesis/rules.mk | 2 +- keyboards/preonic/keymaps/seph/rules.mk | 2 +- keyboards/preonic/keymaps/zach/rules.mk | 2 +- keyboards/quefrency/rules.mk | 2 +- keyboards/qwertyydox/rules.mk | 2 +- keyboards/rama/m60_a/rules.mk | 3 +-- keyboards/redox/rules.mk | 2 +- keyboards/rorschach/keymaps/insertsnideremarks/rules.mk | 4 +--- keyboards/rorschach/rules.mk | 2 +- keyboards/s60_x/keymaps/ansi_qwertz/rules.mk | 2 +- keyboards/s60_x/keymaps/bluebear/rules.mk | 2 +- keyboards/satan/keymaps/addcninblue/rules.mk | 2 +- keyboards/satan/keymaps/admiralStrokers/rules.mk | 2 +- keyboards/satan/keymaps/ben_iso/rules.mk | 2 +- keyboards/satan/keymaps/chaser/rules.mk | 2 +- keyboards/satan/keymaps/colemak/rules.mk | 2 +- keyboards/satan/keymaps/default/rules.mk | 2 +- keyboards/satan/keymaps/dende_iso/rules.mk | 2 +- keyboards/satan/keymaps/dkrieger/rules.mk | 2 +- keyboards/satan/keymaps/isoHHKB/rules.mk | 2 +- keyboards/satan/keymaps/lepa/rules.mk | 2 +- keyboards/satan/keymaps/midi/rules.mk | 2 +- keyboards/satan/keymaps/olligranlund_iso/rules.mk | 2 +- keyboards/satan/keymaps/sethbc/rules.mk | 2 +- keyboards/satan/keymaps/smt/rules.mk | 2 +- keyboards/satan/keymaps/unxmaal/rules.mk | 2 +- keyboards/tada68/keymaps/ardakilic/rules.mk | 2 +- keyboards/tada68/keymaps/bazooka/rules.mk | 2 +- keyboards/tada68/keymaps/cheese/rules.mk | 3 +-- keyboards/tada68/keymaps/default/rules.mk | 2 +- keyboards/tada68/keymaps/fakb/rules.mk | 2 +- keyboards/tada68/keymaps/fezzant/rules.mk | 2 +- keyboards/tada68/keymaps/iso-nor/rules.mk | 2 +- keyboards/tada68/keymaps/iso-uk/rules.mk | 2 +- keyboards/tada68/keymaps/isoish/rules.mk | 2 +- keyboards/tada68/keymaps/mattdicarlo/rules.mk | 2 +- keyboards/tada68/keymaps/mlechner/rules.mk | 2 +- keyboards/tada68/keymaps/mtdjr/rules.mk | 2 +- keyboards/tada68/keymaps/pascamel/rules.mk | 2 +- keyboards/tada68/keymaps/raylas/rules.mk | 2 +- keyboards/tada68/keymaps/rbong/rules.mk | 2 +- keyboards/tada68/keymaps/rgb/rules.mk | 2 +- keyboards/tada68/keymaps/rys/rules.mk | 2 +- keyboards/tada68/keymaps/shalzz/rules.mk | 2 +- keyboards/tada68/keymaps/sm0g/rules.mk | 2 +- keyboards/tada68/keymaps/stephengrier/rules.mk | 2 +- keyboards/tada68/keymaps/trashcat/rules.mk | 2 +- keyboards/tada68/keymaps/tshack/rules.mk | 2 +- keyboards/tada68/keymaps/unix/rules.mk | 2 +- keyboards/tada68/keymaps/wamsm_tada/rules.mk | 2 +- keyboards/the_ruler/keymaps/default/rules.mk | 2 +- keyboards/the_ruler/rules.mk | 2 +- keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk | 2 +- .../bananasplit/keymaps/coloneljesus/rules.mk | 2 +- .../thevankeyboards/bananasplit/keymaps/default/rules.mk | 2 +- .../thevankeyboards/bananasplit/keymaps/kamon/rules.mk | 2 +- keyboards/thevankeyboards/minivan/keymaps/default/rules.mk | 2 +- keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk | 2 +- .../thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk | 2 +- keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk | 2 +- keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk | 2 +- keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk | 2 +- keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk | 2 +- keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk | 2 +- .../thevankeyboards/roadkit/keymaps/flipphone/rules.mk | 2 +- keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk | 2 +- keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk | 2 +- keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk | 2 +- .../thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk | 2 +- .../roadkit/keymaps/wavebeem-gamepad/rules.mk | 2 +- keyboards/vision_division/keymaps/default/rules.mk | 2 +- keyboards/vitamins_included/rules.mk | 2 +- keyboards/viterbi/rules.mk | 2 +- keyboards/wavelet/rules.mk | 2 +- keyboards/xd60/rules.mk | 2 +- keyboards/xd75/keymaps/fabian/rules.mk | 2 +- keyboards/xd75/keymaps/germanized/rules.mk | 2 +- keyboards/xd75/rules.mk | 2 +- keyboards/zeal60/rules.mk | 2 +- keyboards/zeal65/rules.mk | 3 +-- keyboards/zen/rules.mk | 2 +- layouts/community/ergodox/alphadox/rules.mk | 4 +--- 277 files changed, 280 insertions(+), 293 deletions(-) diff --git a/keyboards/amj40/keymaps/default/rules.mk b/keyboards/amj40/keymaps/default/rules.mk index 034e697bc2..41a1982248 100644 --- a/keyboards/amj40/keymaps/default/rules.mk +++ b/keyboards/amj40/keymaps/default/rules.mk @@ -1,5 +1,5 @@ # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/amj40/keymaps/fabian/rules.mk b/keyboards/amj40/keymaps/fabian/rules.mk index a914e4c0ce..7e0634e09e 100644 --- a/keyboards/amj40/keymaps/fabian/rules.mk +++ b/keyboards/amj40/keymaps/fabian/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk b/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk index d7f3e76054..6ad9236688 100644 --- a/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk +++ b/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. It uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/amj40/keymaps/myee/rules.mk b/keyboards/amj40/keymaps/myee/rules.mk index 034e697bc2..c35191cef2 100644 --- a/keyboards/amj40/keymaps/myee/rules.mk +++ b/keyboards/amj40/keymaps/myee/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/amj60/keymaps/iso_split_rshift/rules.mk b/keyboards/amj60/keymaps/iso_split_rshift/rules.mk index 2969ed8aec..931affcd56 100644 --- a/keyboards/amj60/keymaps/iso_split_rshift/rules.mk +++ b/keyboards/amj60/keymaps/iso_split_rshift/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/atomic/keymaps/pvc/rules.mk b/keyboards/atomic/keymaps/pvc/rules.mk index c7c04485fc..8414b40fb6 100644 --- a/keyboards/atomic/keymaps/pvc/rules.mk +++ b/keyboards/atomic/keymaps/pvc/rules.mk @@ -9,7 +9,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/atomic/rules.mk b/keyboards/atomic/rules.mk index 3bd04a00a7..eee6c2530a 100644 --- a/keyboards/atomic/rules.mk +++ b/keyboards/atomic/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/atreus/keymaps/xk/rules.mk b/keyboards/atreus/keymaps/xk/rules.mk index fe431f28a7..2e76f9da5d 100644 --- a/keyboards/atreus/keymaps/xk/rules.mk +++ b/keyboards/atreus/keymaps/xk/rules.mk @@ -10,7 +10,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = yes # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) ifndef QUANTUM_DIR diff --git a/keyboards/bfo9000/rules.mk b/keyboards/bfo9000/rules.mk index 8a7e56f462..d11f9a54e7 100644 --- a/keyboards/bfo9000/rules.mk +++ b/keyboards/bfo9000/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk index 0ae0b96462..856481d031 100644 --- a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk +++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk index 9d3df5964f..93f927c7d0 100644 --- a/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk +++ b/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk index b21eb64044..fc5761c053 100644 --- a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk +++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk @@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes # unicodemap BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes LEADER_ENABLE = yes diff --git a/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk index f29756f223..c76a5a80e4 100644 --- a/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk +++ b/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk index 168fb625b2..7a616ee5f3 100644 --- a/keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk +++ b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. ifndef QUANTUM_DIR diff --git a/keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk index 0dd8a79f4e..4cec29477a 100644 --- a/keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk +++ b/keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. TAP_DANCE_ENABLE = yes # see https://docs.qmk.fm/#/feature_tap_dance (+1000) diff --git a/keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk index 168fb625b2..7a616ee5f3 100644 --- a/keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk +++ b/keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. ifndef QUANTUM_DIR diff --git a/keyboards/bpiphany/pegasushoof/rules.mk b/keyboards/bpiphany/pegasushoof/rules.mk index c5a35428ca..0cfe115aab 100644 --- a/keyboards/bpiphany/pegasushoof/rules.mk +++ b/keyboards/bpiphany/pegasushoof/rules.mk @@ -60,7 +60,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. CUSTOM_MATRIX = yes diff --git a/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk b/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk index 9d3df5964f..93f927c7d0 100644 --- a/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk +++ b/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk index 9d3df5964f..93f927c7d0 100644 --- a/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk +++ b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/clueboard/66/keymaps/xyverz/rules.mk b/keyboards/clueboard/66/keymaps/xyverz/rules.mk index 950dadf841..fc02ecb7ef 100644 --- a/keyboards/clueboard/66/keymaps/xyverz/rules.mk +++ b/keyboards/clueboard/66/keymaps/xyverz/rules.mk @@ -42,7 +42,7 @@ # change to "no" to disable the options, or define them in the makefile.mk in # the appropriate keymap folder that will get included automatically # -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/comet46/keymaps/satt/rules.mk b/keyboards/comet46/keymaps/satt/rules.mk index 08af2e70a4..dc4355c78f 100644 --- a/keyboards/comet46/keymaps/satt/rules.mk +++ b/keyboards/comet46/keymaps/satt/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. ONEHAND_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/contra/keymaps/losinggeneration/rules.mk b/keyboards/contra/keymaps/losinggeneration/rules.mk index 1728afd85c..ea2b7165d9 100644 --- a/keyboards/contra/keymaps/losinggeneration/rules.mk +++ b/keyboards/contra/keymaps/losinggeneration/rules.mk @@ -10,7 +10,7 @@ COMMAND_ENABLE = no # Commands for debug and configuration CONSOLE_ENABLE = no # Console for debug(+400) MIDI_ENABLE = no # MIDI controls NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/converter/ibm_terminal/keymaps/default/rules.mk b/keyboards/converter/ibm_terminal/keymaps/default/rules.mk index 19eb5972e3..76d349920f 100644 --- a/keyboards/converter/ibm_terminal/keymaps/default/rules.mk +++ b/keyboards/converter/ibm_terminal/keymaps/default/rules.mk @@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. PS2_USE_USART = yes API_SYSEX_ENABLE = no diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk b/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk index 19eb5972e3..76d349920f 100644 --- a/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk +++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk @@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. PS2_USE_USART = yes API_SYSEX_ENABLE = no diff --git a/keyboards/converter/ibm_terminal/rules.mk b/keyboards/converter/ibm_terminal/rules.mk index 9401cf199c..77b3a6f3f7 100644 --- a/keyboards/converter/ibm_terminal/rules.mk +++ b/keyboards/converter/ibm_terminal/rules.mk @@ -61,7 +61,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. PS2_USE_USART = yes API_SYSEX_ENABLE = n CUSTOM_MATRIX = yes diff --git a/keyboards/converter/sun_usb/rules.mk b/keyboards/converter/sun_usb/rules.mk index 6e36a19050..3cf503b1d2 100644 --- a/keyboards/converter/sun_usb/rules.mk +++ b/keyboards/converter/sun_usb/rules.mk @@ -24,7 +24,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. CUSTOM_MATRIX = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/crkbd/keymaps/default/rules.mk b/keyboards/crkbd/keymaps/default/rules.mk index 5ee01e89e1..16deaf45d1 100644 --- a/keyboards/crkbd/keymaps/default/rules.mk +++ b/keyboards/crkbd/keymaps/default/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/crkbd/keymaps/drashna/rules.mk b/keyboards/crkbd/keymaps/drashna/rules.mk index 8fca704489..8f69cba72f 100644 --- a/keyboards/crkbd/keymaps/drashna/rules.mk +++ b/keyboards/crkbd/keymaps/drashna/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/crkbd/keymaps/like_jis/rules.mk b/keyboards/crkbd/keymaps/like_jis/rules.mk index 5ee01e89e1..16deaf45d1 100644 --- a/keyboards/crkbd/keymaps/like_jis/rules.mk +++ b/keyboards/crkbd/keymaps/like_jis/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/crkbd/rules.mk b/keyboards/crkbd/rules.mk index 6396b115de..426ed0c03f 100644 --- a/keyboards/crkbd/rules.mk +++ b/keyboards/crkbd/rules.mk @@ -65,7 +65,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = no USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/daisy/rules.mk b/keyboards/daisy/rules.mk index f24df2fd6c..8157b168e5 100644 --- a/keyboards/daisy/rules.mk +++ b/keyboards/daisy/rules.mk @@ -62,5 +62,5 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk b/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk index bab3b4c564..75db99ebec 100644 --- a/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk +++ b/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk @@ -1,4 +1,4 @@ -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. AUDIO_ENABLE = no # Audio disabled while using RGB underlight. EXTRAKEY_ENABLE = yes diff --git a/keyboards/deltasplit75/rules.mk b/keyboards/deltasplit75/rules.mk index 2a13dbdfc6..5c7571b9db 100644 --- a/keyboards/deltasplit75/rules.mk +++ b/keyboards/deltasplit75/rules.mk @@ -41,7 +41,7 @@ F_USB = $(F_CPU) # Bootloader # This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded +# different sizes, comment this out, and the correct address will be loaded # automatically (+60). See bootloader.mk for all options. BOOTLOADER = caterina @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE @@ -71,4 +71,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend CUSTOM_MATRIX = yes -DEFAULT_FOLDER = deltasplit75/v2 \ No newline at end of file +DEFAULT_FOLDER = deltasplit75/v2 diff --git a/keyboards/diverge3/rules.mk b/keyboards/diverge3/rules.mk index aa74530543..38f3ee4e6a 100644 --- a/keyboards/diverge3/rules.mk +++ b/keyboards/diverge3/rules.mk @@ -66,7 +66,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/divergetm2/rules.mk b/keyboards/divergetm2/rules.mk index 2be853a2a6..084a3bf63e 100644 --- a/keyboards/divergetm2/rules.mk +++ b/keyboards/divergetm2/rules.mk @@ -64,7 +64,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/do60/rules.mk b/keyboards/do60/rules.mk index e7314caf9e..8003914fa7 100644 --- a/keyboards/do60/rules.mk +++ b/keyboards/do60/rules.mk @@ -59,7 +59,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) MIDI_ENABLE = no # MIDI controls MOUSEKEY_ENABLE = yes # Mouse keys(+4700) NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend UNICODE_ENABLE = no # Unicode diff --git a/keyboards/eco/keymaps/default/rules.mk b/keyboards/eco/keymaps/default/rules.mk index 7dab979426..0996602325 100644 --- a/keyboards/eco/keymaps/default/rules.mk +++ b/keyboards/eco/keymaps/default/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/eco/keymaps/hexwire/rules.mk b/keyboards/eco/keymaps/hexwire/rules.mk index 7dab979426..0996602325 100644 --- a/keyboards/eco/keymaps/hexwire/rules.mk +++ b/keyboards/eco/keymaps/hexwire/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/eco/keymaps/that_canadian/rules.mk b/keyboards/eco/keymaps/that_canadian/rules.mk index 7dab979426..0996602325 100644 --- a/keyboards/eco/keymaps/that_canadian/rules.mk +++ b/keyboards/eco/keymaps/that_canadian/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/eco/keymaps/xyverz/rules.mk b/keyboards/eco/keymaps/xyverz/rules.mk index 9a3059e715..9e7b9c2024 100644 --- a/keyboards/eco/keymaps/xyverz/rules.mk +++ b/keyboards/eco/keymaps/xyverz/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/ergo42/rules.mk b/keyboards/ergo42/rules.mk index 252411cab4..cdc9da9084 100644 --- a/keyboards/ergo42/rules.mk +++ b/keyboards/ergo42/rules.mk @@ -67,7 +67,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/ergodash/rules.mk b/keyboards/ergodash/rules.mk index bf0df4040f..e25346dacd 100644 --- a/keyboards/ergodash/rules.mk +++ b/keyboards/ergodash/rules.mk @@ -64,7 +64,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/ergodox_infinity/keymaps/narze/rules.mk b/keyboards/ergodox_infinity/keymaps/narze/rules.mk index 7d2e00d0e9..bd89bb9d98 100644 --- a/keyboards/ergodox_infinity/keymaps/narze/rules.mk +++ b/keyboards/ergodox_infinity/keymaps/narze/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/ergoinu/keymaps/default/rules.mk b/keyboards/ergoinu/keymaps/default/rules.mk index 7d7a475d17..92dde90ff1 100644 --- a/keyboards/ergoinu/keymaps/default/rules.mk +++ b/keyboards/ergoinu/keymaps/default/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/ergoinu/keymaps/default_jis/rules.mk b/keyboards/ergoinu/keymaps/default_jis/rules.mk index 7d7a475d17..92dde90ff1 100644 --- a/keyboards/ergoinu/keymaps/default_jis/rules.mk +++ b/keyboards/ergoinu/keymaps/default_jis/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/ergoinu/rules.mk b/keyboards/ergoinu/rules.mk index a00cc16de2..de4bcad526 100644 --- a/keyboards/ergoinu/rules.mk +++ b/keyboards/ergoinu/rules.mk @@ -60,7 +60,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = no USE_I2C = no # i2c is not supported # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/ergotravel/rules.mk b/keyboards/ergotravel/rules.mk index d2da788067..55155b5a3e 100644 --- a/keyboards/ergotravel/rules.mk +++ b/keyboards/ergotravel/rules.mk @@ -59,7 +59,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/fortitude60/rules.mk b/keyboards/fortitude60/rules.mk index 7b2557b701..3d1745c6f7 100644 --- a/keyboards/fortitude60/rules.mk +++ b/keyboards/fortitude60/rules.mk @@ -62,7 +62,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. USE_SERIAL = yes # Serial support only on fortitude60 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend diff --git a/keyboards/fourier/rules.mk b/keyboards/fourier/rules.mk index 151339bc9d..9ec05e8740 100644 --- a/keyboards/fourier/rules.mk +++ b/keyboards/fourier/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/gherkin/keymaps/mjt/rules.mk b/keyboards/gherkin/keymaps/mjt/rules.mk index b397f86d04..afb93b674c 100644 --- a/keyboards/gherkin/keymaps/mjt/rules.mk +++ b/keyboards/gherkin/keymaps/mjt/rules.mk @@ -20,7 +20,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE=yes diff --git a/keyboards/gonnerd/keymaps/default/rules.mk b/keyboards/gonnerd/keymaps/default/rules.mk index 772d7aee3b..e34aba6927 100644 --- a/keyboards/gonnerd/keymaps/default/rules.mk +++ b/keyboards/gonnerd/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/gonnerd/keymaps/gam3cat/rules.mk b/keyboards/gonnerd/keymaps/gam3cat/rules.mk index a32d22e41e..a226838424 100644 --- a/keyboards/gonnerd/keymaps/gam3cat/rules.mk +++ b/keyboards/gonnerd/keymaps/gam3cat/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/gonnerd/keymaps/mauin/rules.mk b/keyboards/gonnerd/keymaps/mauin/rules.mk index 772d7aee3b..e34aba6927 100644 --- a/keyboards/gonnerd/keymaps/mauin/rules.mk +++ b/keyboards/gonnerd/keymaps/mauin/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/gonnerd/keymaps/tkl/rules.mk b/keyboards/gonnerd/keymaps/tkl/rules.mk index 5854366f9d..b96663efe6 100644 --- a/keyboards/gonnerd/keymaps/tkl/rules.mk +++ b/keyboards/gonnerd/keymaps/tkl/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/hadron/keymaps/default/rules.mk b/keyboards/hadron/keymaps/default/rules.mk index 545ffa75c1..4c6d04f1e5 100644 --- a/keyboards/hadron/keymaps/default/rules.mk +++ b/keyboards/hadron/keymaps/default/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/hadron/keymaps/side_numpad/rules.mk b/keyboards/hadron/keymaps/side_numpad/rules.mk index d9fabc1acc..687c285bdb 100644 --- a/keyboards/hadron/keymaps/side_numpad/rules.mk +++ b/keyboards/hadron/keymaps/side_numpad/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = yes # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/rules.mk b/keyboards/handwired/MS_sculpt_mobile/keymaps/default/rules.mk index b3c01678f3..3955a3ff42 100644 --- a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/rules.mk +++ b/keyboards/handwired/MS_sculpt_mobile/keymaps/default/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk b/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk index 4f62657b3f..ddfea82556 100644 --- a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk +++ b/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk b/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk index af51976a89..d2403c9ecb 100644 --- a/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk +++ b/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk @@ -9,7 +9,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk b/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk index e31bfe1af2..b305f8482a 100644 --- a/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk +++ b/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk @@ -9,7 +9,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/atreus50/rules.mk b/keyboards/handwired/atreus50/rules.mk index 2e2d48f6ab..21c4704e0d 100644 --- a/keyboards/handwired/atreus50/rules.mk +++ b/keyboards/handwired/atreus50/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/dactyl_manuform/4x5/rules.mk b/keyboards/handwired/dactyl_manuform/4x5/rules.mk index 14b6e1e4e3..7508070515 100644 --- a/keyboards/handwired/dactyl_manuform/4x5/rules.mk +++ b/keyboards/handwired/dactyl_manuform/4x5/rules.mk @@ -14,8 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - diff --git a/keyboards/handwired/dactyl_manuform/4x6/rules.mk b/keyboards/handwired/dactyl_manuform/4x6/rules.mk index 14b6e1e4e3..7508070515 100644 --- a/keyboards/handwired/dactyl_manuform/4x6/rules.mk +++ b/keyboards/handwired/dactyl_manuform/4x6/rules.mk @@ -14,8 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - diff --git a/keyboards/handwired/dactyl_manuform/5x6/rules.mk b/keyboards/handwired/dactyl_manuform/5x6/rules.mk index 14b6e1e4e3..7508070515 100644 --- a/keyboards/handwired/dactyl_manuform/5x6/rules.mk +++ b/keyboards/handwired/dactyl_manuform/5x6/rules.mk @@ -14,8 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - diff --git a/keyboards/handwired/dactyl_manuform/5x7/rules.mk b/keyboards/handwired/dactyl_manuform/5x7/rules.mk index fc9cbcccd4..7508070515 100644 --- a/keyboards/handwired/dactyl_manuform/5x7/rules.mk +++ b/keyboards/handwired/dactyl_manuform/5x7/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/dactyl_manuform/6x6/rules.mk b/keyboards/handwired/dactyl_manuform/6x6/rules.mk index 14b6e1e4e3..7508070515 100644 --- a/keyboards/handwired/dactyl_manuform/6x6/rules.mk +++ b/keyboards/handwired/dactyl_manuform/6x6/rules.mk @@ -14,8 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - diff --git a/keyboards/handwired/dactyl_manuform/rules.mk b/keyboards/handwired/dactyl_manuform/rules.mk index adb058c8af..a93de36858 100644 --- a/keyboards/handwired/dactyl_manuform/rules.mk +++ b/keyboards/handwired/dactyl_manuform/rules.mk @@ -58,7 +58,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/kbod/keymaps/default/rules.mk b/keyboards/handwired/kbod/keymaps/default/rules.mk index eb6bf940ae..5b9ff0bfdc 100644 --- a/keyboards/handwired/kbod/keymaps/default/rules.mk +++ b/keyboards/handwired/kbod/keymaps/default/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/minorca/keymaps/default/rules.mk b/keyboards/handwired/minorca/keymaps/default/rules.mk index 0ea7a69353..584798d1a1 100644 --- a/keyboards/handwired/minorca/keymaps/default/rules.mk +++ b/keyboards/handwired/minorca/keymaps/default/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/minorca/keymaps/rgb/rules.mk b/keyboards/handwired/minorca/keymaps/rgb/rules.mk index da44256f99..6e430d59e2 100644 --- a/keyboards/handwired/minorca/keymaps/rgb/rules.mk +++ b/keyboards/handwired/minorca/keymaps/rgb/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/minorca/rules.mk b/keyboards/handwired/minorca/rules.mk index ce502b8204..3e408e2b93 100644 --- a/keyboards/handwired/minorca/rules.mk +++ b/keyboards/handwired/minorca/rules.mk @@ -61,7 +61,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/handwired/not_so_minidox/rules.mk b/keyboards/handwired/not_so_minidox/rules.mk index fe4cc014e7..833dd4b79e 100644 --- a/keyboards/handwired/not_so_minidox/rules.mk +++ b/keyboards/handwired/not_so_minidox/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE ?= no # MIDI controls AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. USE_I2C ?= no # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/pilcrow/keymaps/default/rules.mk b/keyboards/handwired/pilcrow/keymaps/default/rules.mk index b3c01678f3..3955a3ff42 100644 --- a/keyboards/handwired/pilcrow/keymaps/default/rules.mk +++ b/keyboards/handwired/pilcrow/keymaps/default/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/handwired/promethium/keymaps/default/rules.mk b/keyboards/handwired/promethium/keymaps/default/rules.mk index a0d4261fa1..5761be5170 100644 --- a/keyboards/handwired/promethium/keymaps/default/rules.mk +++ b/keyboards/handwired/promethium/keymaps/default/rules.mk @@ -16,7 +16,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. PS2_MOUSE_ENABLE = yes PS2_USE_INT = yes FAUXCLICKY_ENABLE = yes diff --git a/keyboards/handwired/promethium/keymaps/priyadi/rules.mk b/keyboards/handwired/promethium/keymaps/priyadi/rules.mk index a0d4261fa1..5761be5170 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/rules.mk +++ b/keyboards/handwired/promethium/keymaps/priyadi/rules.mk @@ -16,7 +16,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. PS2_MOUSE_ENABLE = yes PS2_USE_INT = yes FAUXCLICKY_ENABLE = yes diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk index 69903dcebe..21328b7f8e 100644 --- a/keyboards/handwired/promethium/rules.mk +++ b/keyboards/handwired/promethium/rules.mk @@ -62,7 +62,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. PS2_MOUSE_ENABLE = yes PS2_USE_INT = yes API_SYSEX_ENABLE = no diff --git a/keyboards/handwired/qc60/rules.mk b/keyboards/handwired/qc60/rules.mk index 1be83d5f8d..e61b18b00c 100644 --- a/keyboards/handwired/qc60/rules.mk +++ b/keyboards/handwired/qc60/rules.mk @@ -58,7 +58,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SPLIT_KEYBOARD = yes diff --git a/keyboards/handwired/terminus_mini/keymaps/default/rules.mk b/keyboards/handwired/terminus_mini/keymaps/default/rules.mk index 1485c08320..42ab51f150 100644 --- a/keyboards/handwired/terminus_mini/keymaps/default/rules.mk +++ b/keyboards/handwired/terminus_mini/keymaps/default/rules.mk @@ -29,6 +29,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no # Enable Tap Dance diff --git a/keyboards/handwired/terminus_mini/rules.mk b/keyboards/handwired/terminus_mini/rules.mk index d7acbf7d52..9ecba25d80 100644 --- a/keyboards/handwired/terminus_mini/rules.mk +++ b/keyboards/handwired/terminus_mini/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no # Enable tap dance diff --git a/keyboards/handwired/woodpad/keymaps/default/rules.mk b/keyboards/handwired/woodpad/keymaps/default/rules.mk index b8879076bd..f060db79c0 100644 --- a/keyboards/handwired/woodpad/keymaps/default/rules.mk +++ b/keyboards/handwired/woodpad/keymaps/default/rules.mk @@ -29,7 +29,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/handwired/xealous/rules.mk b/keyboards/handwired/xealous/rules.mk index 7178959606..eebd11d86e 100644 --- a/keyboards/handwired/xealous/rules.mk +++ b/keyboards/handwired/xealous/rules.mk @@ -59,7 +59,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SPLIT_KEYBOARD = yes # Use shared split_common code SUBPROJECT_rev1 = yes diff --git a/keyboards/helix/pico/keymaps/biacco/rules.mk b/keyboards/helix/pico/keymaps/biacco/rules.mk index 4f264fa952..d6b36580e1 100644 --- a/keyboards/helix/pico/keymaps/biacco/rules.mk +++ b/keyboards/helix/pico/keymaps/biacco/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port B5 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/pico/keymaps/default/rules.mk b/keyboards/helix/pico/keymaps/default/rules.mk index b1e219537f..c5ee8acb2a 100644 --- a/keyboards/helix/pico/keymaps/default/rules.mk +++ b/keyboards/helix/pico/keymaps/default/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port B5 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk b/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk index 3f8fd5dc67..c56d6f37e0 100644 --- a/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk +++ b/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/helix/rev2/keymaps/default/rules.mk b/keyboards/helix/rev2/keymaps/default/rules.mk index 14c353d507..3f84b895aa 100644 --- a/keyboards/helix/rev2/keymaps/default/rules.mk +++ b/keyboards/helix/rev2/keymaps/default/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk index 9bd46fabcf..4257d004da 100644 --- a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk +++ b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/rev2/keymaps/five_rows/rules.mk b/keyboards/helix/rev2/keymaps/five_rows/rules.mk index f771c94c9c..bd7130cfc6 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/rules.mk +++ b/keyboards/helix/rev2/keymaps/five_rows/rules.mk @@ -18,7 +18,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk index 14c353d507..3f84b895aa 100644 --- a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk +++ b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/rev2/keymaps/froggy/rules.mk b/keyboards/helix/rev2/keymaps/froggy/rules.mk index e52e4a3736..f460170711 100644 --- a/keyboards/helix/rev2/keymaps/froggy/rules.mk +++ b/keyboards/helix/rev2/keymaps/froggy/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/rev2/keymaps/led_test/rules.mk b/keyboards/helix/rev2/keymaps/led_test/rules.mk index f599cd4f38..a9cd251bc5 100644 --- a/keyboards/helix/rev2/keymaps/led_test/rules.mk +++ b/keyboards/helix/rev2/keymaps/led_test/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk b/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk index 8331a2e1d8..3f390b48f8 100644 --- a/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk +++ b/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing define HELIX_CUSTOMISE_MSG diff --git a/keyboards/helix/rules.mk b/keyboards/helix/rules.mk index 7c1d56527a..be234e60ec 100644 --- a/keyboards/helix/rules.mk +++ b/keyboards/helix/rules.mk @@ -62,7 +62,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = no USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/hhkb/keymaps/cinaeco/rules.mk b/keyboards/hhkb/keymaps/cinaeco/rules.mk index 05b724051e..efed95492f 100644 --- a/keyboards/hhkb/keymaps/cinaeco/rules.mk +++ b/keyboards/hhkb/keymaps/cinaeco/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/iris/keymaps/edvorakjp/rules.mk b/keyboards/iris/keymaps/edvorakjp/rules.mk index 1c88fbc7bc..58d244c389 100644 --- a/keyboards/iris/keymaps/edvorakjp/rules.mk +++ b/keyboards/iris/keymaps/edvorakjp/rules.mk @@ -13,4 +13,4 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. diff --git a/keyboards/iris/rules.mk b/keyboards/iris/rules.mk index 88dd66c18e..e93d7dae80 100644 --- a/keyboards/iris/rules.mk +++ b/keyboards/iris/rules.mk @@ -61,7 +61,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/jd45/keymaps/mjt/rules.mk b/keyboards/jd45/keymaps/mjt/rules.mk index 1f4b391d55..a22e71b0d9 100644 --- a/keyboards/jd45/keymaps/mjt/rules.mk +++ b/keyboards/jd45/keymaps/mjt/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/jd45/keymaps/mjt6u/rules.mk b/keyboards/jd45/keymaps/mjt6u/rules.mk index f9cec3b84a..1df8b9754b 100644 --- a/keyboards/jd45/keymaps/mjt6u/rules.mk +++ b/keyboards/jd45/keymaps/mjt6u/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend DEBUG_ENABLE = yes diff --git a/keyboards/kinesis/keymaps/carpalx/rules.mk b/keyboards/kinesis/keymaps/carpalx/rules.mk index 1854d35df2..c7753fae05 100644 --- a/keyboards/kinesis/keymaps/carpalx/rules.mk +++ b/keyboards/kinesis/keymaps/carpalx/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/kinesis/keymaps/default/rules.mk b/keyboards/kinesis/keymaps/default/rules.mk index 9d3df5964f..93f927c7d0 100644 --- a/keyboards/kinesis/keymaps/default/rules.mk +++ b/keyboards/kinesis/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/kinesis/keymaps/default_pretty/rules.mk b/keyboards/kinesis/keymaps/default_pretty/rules.mk index 9d3df5964f..93f927c7d0 100644 --- a/keyboards/kinesis/keymaps/default_pretty/rules.mk +++ b/keyboards/kinesis/keymaps/default_pretty/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/kinesis/keymaps/dvorak/rules.mk b/keyboards/kinesis/keymaps/dvorak/rules.mk index 9d3df5964f..93f927c7d0 100644 --- a/keyboards/kinesis/keymaps/dvorak/rules.mk +++ b/keyboards/kinesis/keymaps/dvorak/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk b/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk index 8e4a8ffada..24b16ba9b7 100644 --- a/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk +++ b/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = yes # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes # Enable Tap Dancing function diff --git a/keyboards/kinesis/keymaps/milestogo/rules.mk b/keyboards/kinesis/keymaps/milestogo/rules.mk index 9d3df5964f..93f927c7d0 100644 --- a/keyboards/kinesis/keymaps/milestogo/rules.mk +++ b/keyboards/kinesis/keymaps/milestogo/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/kinesis/keymaps/xyverz/rules.mk b/keyboards/kinesis/keymaps/xyverz/rules.mk index c21f8aea67..94dc4cdfea 100644 --- a/keyboards/kinesis/keymaps/xyverz/rules.mk +++ b/keyboards/kinesis/keymaps/xyverz/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/launchpad/keymaps/default/rules.mk b/keyboards/launchpad/keymaps/default/rules.mk index 260b9d8fad..9bf35a59d0 100644 --- a/keyboards/launchpad/keymaps/default/rules.mk +++ b/keyboards/launchpad/keymaps/default/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/lets_split/keymaps/OLED_sample/rules.mk b/keyboards/lets_split/keymaps/OLED_sample/rules.mk index 874d09eab5..a14e84d4e5 100644 --- a/keyboards/lets_split/keymaps/OLED_sample/rules.mk +++ b/keyboards/lets_split/keymaps/OLED_sample/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/lets_split/keymaps/heartrobotninja/rules.mk b/keyboards/lets_split/keymaps/heartrobotninja/rules.mk index 2261a848aa..36f5e5b6d5 100644 --- a/keyboards/lets_split/keymaps/heartrobotninja/rules.mk +++ b/keyboards/lets_split/keymaps/heartrobotninja/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE @@ -23,4 +23,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile endif - diff --git a/keyboards/lets_split/keymaps/mjt/rules.mk b/keyboards/lets_split/keymaps/mjt/rules.mk index 874d09eab5..a14e84d4e5 100644 --- a/keyboards/lets_split/keymaps/mjt/rules.mk +++ b/keyboards/lets_split/keymaps/mjt/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/lets_split/keymaps/piemod/rules.mk b/keyboards/lets_split/keymaps/piemod/rules.mk index 027ea977e7..e2bb583cd9 100644 --- a/keyboards/lets_split/keymaps/piemod/rules.mk +++ b/keyboards/lets_split/keymaps/piemod/rules.mk @@ -9,5 +9,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = yes # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = no diff --git a/keyboards/lets_split/keymaps/xk/rules.mk b/keyboards/lets_split/keymaps/xk/rules.mk index 84bf8e1f59..195f015778 100644 --- a/keyboards/lets_split/keymaps/xk/rules.mk +++ b/keyboards/lets_split/keymaps/xk/rules.mk @@ -11,7 +11,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = yes # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) ifndef QUANTUM_DIR diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk index 951723edc5..4cd972786f 100644 --- a/keyboards/lets_split/rules.mk +++ b/keyboards/lets_split/rules.mk @@ -64,7 +64,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/levinson/keymaps/losinggeneration/rules.mk b/keyboards/levinson/keymaps/losinggeneration/rules.mk index f3e47b4c2e..c8eef2cb3f 100644 --- a/keyboards/levinson/keymaps/losinggeneration/rules.mk +++ b/keyboards/levinson/keymaps/losinggeneration/rules.mk @@ -10,7 +10,7 @@ COMMAND_ENABLE = no # Commands for debug and configuration CONSOLE_ENABLE = no # Console for debug(+400) MIDI_ENABLE = no # MIDI controls NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/levinson/rules.mk b/keyboards/levinson/rules.mk index 4805ed99ee..8f1fa130fa 100644 --- a/keyboards/levinson/rules.mk +++ b/keyboards/levinson/rules.mk @@ -22,7 +22,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk index 20030f17d0..555ad97230 100644 --- a/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk +++ b/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no diff --git a/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk index ab20ac0db2..147e95bc87 100644 --- a/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk +++ b/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no diff --git a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk index 20030f17d0..555ad97230 100644 --- a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk +++ b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no diff --git a/keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk b/keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk index d2ddd15783..1653f4e302 100644 --- a/keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk +++ b/keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no diff --git a/keyboards/lily58/rules.mk b/keyboards/lily58/rules.mk index 72964fca1b..ad8ad585e9 100644 --- a/keyboards/lily58/rules.mk +++ b/keyboards/lily58/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = no USE_I2C = no # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/meira/rules.mk b/keyboards/meira/rules.mk index d3e45fc8d0..6c2472f433 100644 --- a/keyboards/meira/rules.mk +++ b/keyboards/meira/rules.mk @@ -59,7 +59,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches BACKLIGHT_CUSTOM_DRIVER = yes BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality, also set ISSI_ENABLE below for Miera diff --git a/keyboards/minidox/keymaps/alairock/rules.mk b/keyboards/minidox/keymaps/alairock/rules.mk index cd7ab91c22..ebada165ae 100644 --- a/keyboards/minidox/keymaps/alairock/rules.mk +++ b/keyboards/minidox/keymaps/alairock/rules.mk @@ -1,2 +1,2 @@ -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. EXTRAKEY_ENABLE = yes diff --git a/keyboards/minidox/keymaps/that_canadian/rules.mk b/keyboards/minidox/keymaps/that_canadian/rules.mk index 52ef1ad3e4..7637dfc09a 100644 --- a/keyboards/minidox/keymaps/that_canadian/rules.mk +++ b/keyboards/minidox/keymaps/that_canadian/rules.mk @@ -1,4 +1,4 @@ -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/minidox/keymaps/xyverz/rules.mk b/keyboards/minidox/keymaps/xyverz/rules.mk index d34df5b19b..c777cb1b9f 100644 --- a/keyboards/minidox/keymaps/xyverz/rules.mk +++ b/keyboards/minidox/keymaps/xyverz/rules.mk @@ -1 +1 @@ -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. diff --git a/keyboards/minidox/rules.mk b/keyboards/minidox/rules.mk index 0c3a03bd73..861976e15b 100644 --- a/keyboards/minidox/rules.mk +++ b/keyboards/minidox/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE ?= no # MIDI controls AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. USE_I2C ?= no # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend diff --git a/keyboards/mint60/rules.mk b/keyboards/mint60/rules.mk index b4d4bddd33..b4472153bc 100644 --- a/keyboards/mint60/rules.mk +++ b/keyboards/mint60/rules.mk @@ -75,4 +75,4 @@ HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) CUSTOM_MATRIX = yes USE_I2C = yes -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. diff --git a/keyboards/miuni32/keymaps/adam-lee/rules.mk b/keyboards/miuni32/keymaps/adam-lee/rules.mk index 88a3aea741..3138ab57f7 100644 --- a/keyboards/miuni32/keymaps/adam-lee/rules.mk +++ b/keyboards/miuni32/keymaps/adam-lee/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/miuni32/keymaps/default/rules.mk b/keyboards/miuni32/keymaps/default/rules.mk index 88a3aea741..3138ab57f7 100644 --- a/keyboards/miuni32/keymaps/default/rules.mk +++ b/keyboards/miuni32/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/miuni32/keymaps/ht_156/rules.mk b/keyboards/miuni32/keymaps/ht_156/rules.mk index 88a3aea741..3138ab57f7 100644 --- a/keyboards/miuni32/keymaps/ht_156/rules.mk +++ b/keyboards/miuni32/keymaps/ht_156/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/miuni32/keymaps/ki/rules.mk b/keyboards/miuni32/keymaps/ki/rules.mk index 8a72a6e4e7..7639c2b3f1 100644 --- a/keyboards/miuni32/keymaps/ki/rules.mk +++ b/keyboards/miuni32/keymaps/ki/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/mt40/rules.mk b/keyboards/mt40/rules.mk index 64e7413f5c..db6ec93f5e 100644 --- a/keyboards/mt40/rules.mk +++ b/keyboards/mt40/rules.mk @@ -27,7 +27,7 @@ MIDI_ENABLE ?= no # MIDI controls AUDIO_ENABLE ?= no # Audio output on port C6 UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. RGBLIGHT_CUSTOM_DRIVER = yes TAP_DANCE_ENABLE = no diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk b/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk index b1d7055da7..124de79deb 100644 --- a/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk +++ b/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/nyquist/keymaps/DivergeJM/rules.mk b/keyboards/nyquist/keymaps/DivergeJM/rules.mk index 654e82a10f..2c26b47ea1 100644 --- a/keyboards/nyquist/keymaps/DivergeJM/rules.mk +++ b/keyboards/nyquist/keymaps/DivergeJM/rules.mk @@ -29,6 +29,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no # Enable Tap Dance diff --git a/keyboards/nyquist/keymaps/danielhklein/rules.mk b/keyboards/nyquist/keymaps/danielhklein/rules.mk index 0b540a4712..12ad2fec59 100644 --- a/keyboards/nyquist/keymaps/danielhklein/rules.mk +++ b/keyboards/nyquist/keymaps/danielhklein/rules.mk @@ -29,6 +29,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no # Enable Tap Dance diff --git a/keyboards/nyquist/keymaps/losinggeneration/rules.mk b/keyboards/nyquist/keymaps/losinggeneration/rules.mk index 1728afd85c..ea2b7165d9 100644 --- a/keyboards/nyquist/keymaps/losinggeneration/rules.mk +++ b/keyboards/nyquist/keymaps/losinggeneration/rules.mk @@ -10,7 +10,7 @@ COMMAND_ENABLE = no # Commands for debug and configuration CONSOLE_ENABLE = no # Console for debug(+400) MIDI_ENABLE = no # MIDI controls NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/nyquist/rules.mk b/keyboards/nyquist/rules.mk index e8f1840418..74d5625f85 100644 --- a/keyboards/nyquist/rules.mk +++ b/keyboards/nyquist/rules.mk @@ -64,7 +64,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID USE_I2C = yes -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/org60/rules.mk b/keyboards/org60/rules.mk index c79e6e2704..53e9a28fe8 100644 --- a/keyboards/org60/rules.mk +++ b/keyboards/org60/rules.mk @@ -59,7 +59,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) MIDI_ENABLE = no # MIDI controls MOUSEKEY_ENABLE = yes # Mouse keys(+4700) NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend UNICODE_ENABLE = no # Unicode diff --git a/keyboards/orthodox/rules.mk b/keyboards/orthodox/rules.mk index 7132a915bf..715f25c3a0 100644 --- a/keyboards/orthodox/rules.mk +++ b/keyboards/orthodox/rules.mk @@ -61,7 +61,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/planck/keymaps/ab/rules.mk b/keyboards/planck/keymaps/ab/rules.mk index 44a030ba38..0b025a2313 100644 --- a/keyboards/planck/keymaps/ab/rules.mk +++ b/keyboards/planck/keymaps/ab/rules.mk @@ -53,7 +53,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/alexey/rules.mk b/keyboards/planck/keymaps/alexey/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/alexey/rules.mk +++ b/keyboards/planck/keymaps/alexey/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/angerthosenear/rules.mk b/keyboards/planck/keymaps/angerthosenear/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/angerthosenear/rules.mk +++ b/keyboards/planck/keymaps/angerthosenear/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/austin/rules.mk b/keyboards/planck/keymaps/austin/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/austin/rules.mk +++ b/keyboards/planck/keymaps/austin/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/basic/rules.mk b/keyboards/planck/keymaps/basic/rules.mk index 0c0632da09..6f88a28d50 100644 --- a/keyboards/planck/keymaps/basic/rules.mk +++ b/keyboards/planck/keymaps/basic/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/bone2planck/rules.mk b/keyboards/planck/keymaps/bone2planck/rules.mk index 39635192e5..699726948d 100644 --- a/keyboards/planck/keymaps/bone2planck/rules.mk +++ b/keyboards/planck/keymaps/bone2planck/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/callum/rules.mk b/keyboards/planck/keymaps/callum/rules.mk index 8ee9a45ab7..67fe8d284d 100644 --- a/keyboards/planck/keymaps/callum/rules.mk +++ b/keyboards/planck/keymaps/callum/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/cbbrowne/rules.mk b/keyboards/planck/keymaps/cbbrowne/rules.mk index d5026e2d9b..c7cef55a9a 100644 --- a/keyboards/planck/keymaps/cbbrowne/rules.mk +++ b/keyboards/planck/keymaps/cbbrowne/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. API_SYSEX_ENABLE = no # Enable SYSEX API (+5390) # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/planck/keymaps/chance/rules.mk b/keyboards/planck/keymaps/chance/rules.mk index 00d09e974a..5c9798a572 100644 --- a/keyboards/planck/keymaps/chance/rules.mk +++ b/keyboards/planck/keymaps/chance/rules.mk @@ -1,4 +1,4 @@ -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. AUDIO_ENABLE = no ifndef QUANTUM_DIR diff --git a/keyboards/planck/keymaps/charlie/rules.mk b/keyboards/planck/keymaps/charlie/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/charlie/rules.mk +++ b/keyboards/planck/keymaps/charlie/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/circuit/rules.mk b/keyboards/planck/keymaps/circuit/rules.mk index 1ed0ff9568..e9a02e31e2 100644 --- a/keyboards/planck/keymaps/circuit/rules.mk +++ b/keyboards/planck/keymaps/circuit/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. TAP_DANCE_ENABLE = yes # Enables the double-tap functionality of keys # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/planck/keymaps/daniel/rules.mk b/keyboards/planck/keymaps/daniel/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/daniel/rules.mk +++ b/keyboards/planck/keymaps/daniel/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/danielhklein/rules.mk b/keyboards/planck/keymaps/danielhklein/rules.mk index a73d851833..72386fae7d 100644 --- a/keyboards/planck/keymaps/danielhklein/rules.mk +++ b/keyboards/planck/keymaps/danielhklein/rules.mk @@ -9,6 +9,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no # Enable Tap Dance \ No newline at end of file diff --git a/keyboards/planck/keymaps/david/rules.mk b/keyboards/planck/keymaps/david/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/david/rules.mk +++ b/keyboards/planck/keymaps/david/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/dc/rules.mk b/keyboards/planck/keymaps/dc/rules.mk index 6106b40e14..ea4341b4fd 100644 --- a/keyboards/planck/keymaps/dc/rules.mk +++ b/keyboards/planck/keymaps/dc/rules.mk @@ -17,7 +17,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. TAP_DANCE_ENABLE = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/planck/keymaps/dlaroe/rules.mk b/keyboards/planck/keymaps/dlaroe/rules.mk index 22a08c668b..0064f622b7 100644 --- a/keyboards/planck/keymaps/dlaroe/rules.mk +++ b/keyboards/planck/keymaps/dlaroe/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/dr_notsokind/rules.mk b/keyboards/planck/keymaps/dr_notsokind/rules.mk index 7f691ebe43..eea90f8e6a 100644 --- a/keyboards/planck/keymaps/dr_notsokind/rules.mk +++ b/keyboards/planck/keymaps/dr_notsokind/rules.mk @@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. TAP_DANCE_ENABLE = yes # Enables the double-tap functionality of keys # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/planck/keymaps/dzobert/rules.mk b/keyboards/planck/keymaps/dzobert/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/dzobert/rules.mk +++ b/keyboards/planck/keymaps/dzobert/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/espynn/rules.mk b/keyboards/planck/keymaps/espynn/rules.mk index 44a030ba38..0b025a2313 100644 --- a/keyboards/planck/keymaps/espynn/rules.mk +++ b/keyboards/planck/keymaps/espynn/rules.mk @@ -53,7 +53,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/experimental/rules.mk b/keyboards/planck/keymaps/experimental/rules.mk index 168d3cb9f0..721e887b98 100644 --- a/keyboards/planck/keymaps/experimental/rules.mk +++ b/keyboards/planck/keymaps/experimental/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = yes # Enable one-hand typing STENO_ENABLE = yes # Enable TX Bolt protocol for Stenography, requires VIRTSER and may not work with mouse keys LEADER_ENABLE = yes diff --git a/keyboards/planck/keymaps/gabriel/rules.mk b/keyboards/planck/keymaps/gabriel/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/gabriel/rules.mk +++ b/keyboards/planck/keymaps/gabriel/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/gunp/rules.mk b/keyboards/planck/keymaps/gunp/rules.mk index 1ad30423be..7d03482abc 100644 --- a/keyboards/planck/keymaps/gunp/rules.mk +++ b/keyboards/planck/keymaps/gunp/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = yes # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/impossible/rules.mk b/keyboards/planck/keymaps/impossible/rules.mk index 247a1fd2ae..1e877943d9 100644 --- a/keyboards/planck/keymaps/impossible/rules.mk +++ b/keyboards/planck/keymaps/impossible/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/jacob/rules.mk b/keyboards/planck/keymaps/jacob/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/jacob/rules.mk +++ b/keyboards/planck/keymaps/jacob/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/jeebak/rules.mk b/keyboards/planck/keymaps/jeebak/rules.mk index 247a1fd2ae..1e877943d9 100644 --- a/keyboards/planck/keymaps/jeebak/rules.mk +++ b/keyboards/planck/keymaps/jeebak/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/jhenahan/rules.mk b/keyboards/planck/keymaps/jhenahan/rules.mk index bb12dd865c..f8d1f0d8f3 100644 --- a/keyboards/planck/keymaps/jhenahan/rules.mk +++ b/keyboards/planck/keymaps/jhenahan/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/joe/rules.mk b/keyboards/planck/keymaps/joe/rules.mk index 247a1fd2ae..1e877943d9 100644 --- a/keyboards/planck/keymaps/joe/rules.mk +++ b/keyboards/planck/keymaps/joe/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/johannes/rules.mk b/keyboards/planck/keymaps/johannes/rules.mk index 0c0632da09..6f88a28d50 100644 --- a/keyboards/planck/keymaps/johannes/rules.mk +++ b/keyboards/planck/keymaps/johannes/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/kyle/rules.mk b/keyboards/planck/keymaps/kyle/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/kyle/rules.mk +++ b/keyboards/planck/keymaps/kyle/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/lae3/rules.mk b/keyboards/planck/keymaps/lae3/rules.mk index 595803e322..89b147f819 100644 --- a/keyboards/planck/keymaps/lae3/rules.mk +++ b/keyboards/planck/keymaps/lae3/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/leo/rules.mk b/keyboards/planck/keymaps/leo/rules.mk index 247a1fd2ae..1e877943d9 100644 --- a/keyboards/planck/keymaps/leo/rules.mk +++ b/keyboards/planck/keymaps/leo/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/lucas/rules.mk b/keyboards/planck/keymaps/lucas/rules.mk index 247a1fd2ae..1e877943d9 100644 --- a/keyboards/planck/keymaps/lucas/rules.mk +++ b/keyboards/planck/keymaps/lucas/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/lukas/rules.mk b/keyboards/planck/keymaps/lukas/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/lukas/rules.mk +++ b/keyboards/planck/keymaps/lukas/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/luke/rules.mk b/keyboards/planck/keymaps/luke/rules.mk index 847686873d..76ed281c11 100644 --- a/keyboards/planck/keymaps/luke/rules.mk +++ b/keyboards/planck/keymaps/luke/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = yes # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/max/rules.mk b/keyboards/planck/keymaps/max/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/max/rules.mk +++ b/keyboards/planck/keymaps/max/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/mollat/rules.mk b/keyboards/planck/keymaps/mollat/rules.mk index be3f692802..249f422a55 100644 --- a/keyboards/planck/keymaps/mollat/rules.mk +++ b/keyboards/planck/keymaps/mollat/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/myoung34/rules.mk b/keyboards/planck/keymaps/myoung34/rules.mk index c47418104a..b1aaafd3a4 100644 --- a/keyboards/planck/keymaps/myoung34/rules.mk +++ b/keyboards/planck/keymaps/myoung34/rules.mk @@ -7,5 +7,5 @@ CONSOLE_ENABLE = no # Console for debug(+400) MIDI_ENABLE = no # MIDI controls MOUSEKEY_ENABLE = no # Mouse keys(+4700) NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. BACKLIGHT_ENABLE = yes diff --git a/keyboards/planck/keymaps/narze/rules.mk b/keyboards/planck/keymaps/narze/rules.mk index 05c2ce455f..286a2ffdc1 100644 --- a/keyboards/planck/keymaps/narze/rules.mk +++ b/keyboards/planck/keymaps/narze/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/neo2planck/rules.mk b/keyboards/planck/keymaps/neo2planck/rules.mk index 2122dd349b..cedf3095e6 100644 --- a/keyboards/planck/keymaps/neo2planck/rules.mk +++ b/keyboards/planck/keymaps/neo2planck/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/nico/rules.mk b/keyboards/planck/keymaps/nico/rules.mk index 247a1fd2ae..1e877943d9 100644 --- a/keyboards/planck/keymaps/nico/rules.mk +++ b/keyboards/planck/keymaps/nico/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/not-quite-neo/rules.mk b/keyboards/planck/keymaps/not-quite-neo/rules.mk index 316a3ea7bb..90e6353f65 100644 --- a/keyboards/planck/keymaps/not-quite-neo/rules.mk +++ b/keyboards/planck/keymaps/not-quite-neo/rules.mk @@ -20,7 +20,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode (can't be used with unicodemap) UNICODEMAP_ENABLE = no # Enable extended unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/pickle_jr/rules.mk b/keyboards/planck/keymaps/pickle_jr/rules.mk index d452c706d0..43e0b843f0 100644 --- a/keyboards/planck/keymaps/pickle_jr/rules.mk +++ b/keyboards/planck/keymaps/pickle_jr/rules.mk @@ -12,7 +12,7 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/premek/rules.mk b/keyboards/planck/keymaps/premek/rules.mk index 247a1fd2ae..1e877943d9 100644 --- a/keyboards/planck/keymaps/premek/rules.mk +++ b/keyboards/planck/keymaps/premek/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/priyadi/rules.mk b/keyboards/planck/keymaps/priyadi/rules.mk index 27c2638e2f..282c047eec 100644 --- a/keyboards/planck/keymaps/priyadi/rules.mk +++ b/keyboards/planck/keymaps/priyadi/rules.mk @@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes # Unicode map BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. API_SYSEX_ENABLE = no FAUXCLICKY_ENABLE = yes diff --git a/keyboards/planck/keymaps/pvc/rules.mk b/keyboards/planck/keymaps/pvc/rules.mk index 8a73eab584..3fb98eca86 100644 --- a/keyboards/planck/keymaps/pvc/rules.mk +++ b/keyboards/planck/keymaps/pvc/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/rai-suta/rules.mk b/keyboards/planck/keymaps/rai-suta/rules.mk index 38efe374cf..ce13befd90 100644 --- a/keyboards/planck/keymaps/rai-suta/rules.mk +++ b/keyboards/planck/keymaps/rai-suta/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/sgoodwin/rules.mk b/keyboards/planck/keymaps/sgoodwin/rules.mk index 279e16eb72..cdcb4a887d 100644 --- a/keyboards/planck/keymaps/sgoodwin/rules.mk +++ b/keyboards/planck/keymaps/sgoodwin/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. API_SYSEX_ENABLE = no # Disable extra stuff for ergodoxen # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/planck/keymaps/spacebarracecar/rules.mk b/keyboards/planck/keymaps/spacebarracecar/rules.mk index fbdd1217c0..bc817a1403 100644 --- a/keyboards/planck/keymaps/spacebarracecar/rules.mk +++ b/keyboards/planck/keymaps/spacebarracecar/rules.mk @@ -13,11 +13,10 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # Userspace defines GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language - diff --git a/keyboards/planck/keymaps/tak3over/rules.mk b/keyboards/planck/keymaps/tak3over/rules.mk index 247a1fd2ae..1e877943d9 100644 --- a/keyboards/planck/keymaps/tak3over/rules.mk +++ b/keyboards/planck/keymaps/tak3over/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file diff --git a/keyboards/planck/keymaps/thermal_printer/rules.mk b/keyboards/planck/keymaps/thermal_printer/rules.mk index 7c50d87a0f..3c0e340d1f 100644 --- a/keyboards/planck/keymaps/thermal_printer/rules.mk +++ b/keyboards/planck/keymaps/thermal_printer/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. PRINTING_ENABLE = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/planck/keymaps/tong92/rules.mk b/keyboards/planck/keymaps/tong92/rules.mk index e6608e74c5..df9e7918ca 100644 --- a/keyboards/planck/keymaps/tong92/rules.mk +++ b/keyboards/planck/keymaps/tong92/rules.mk @@ -52,7 +52,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/vifon/rules.mk b/keyboards/planck/keymaps/vifon/rules.mk index da83096d6b..5caec1afa8 100644 --- a/keyboards/planck/keymaps/vifon/rules.mk +++ b/keyboards/planck/keymaps/vifon/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. API_SYSEX_ENABLE = no # https://www.reddit.com/r/olkb/comments/5swhij/_/ddie6zq/ KEY_LOCK_ENABLE = yes diff --git a/keyboards/planck/keymaps/yale/rules.mk b/keyboards/planck/keymaps/yale/rules.mk index 581e08cd02..caff043c58 100644 --- a/keyboards/planck/keymaps/yale/rules.mk +++ b/keyboards/planck/keymaps/yale/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/yang/rules.mk b/keyboards/planck/keymaps/yang/rules.mk index 6b18762fa7..173fe29893 100644 --- a/keyboards/planck/keymaps/yang/rules.mk +++ b/keyboards/planck/keymaps/yang/rules.mk @@ -2,7 +2,7 @@ # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. AUDIO_ENABLE = no ifndef QUANTUM_DIR diff --git a/keyboards/planck/keymaps/zach/rules.mk b/keyboards/planck/keymaps/zach/rules.mk index 9d86fc81fc..ca24b47929 100644 --- a/keyboards/planck/keymaps/zach/rules.mk +++ b/keyboards/planck/keymaps/zach/rules.mk @@ -20,7 +20,7 @@ AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode (can't be used with unicodemap) UNICODEMAP_ENABLE = yes # Enable extended unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/zrichard/rules.mk b/keyboards/planck/keymaps/zrichard/rules.mk index 0b87bc9882..7b17f58ce1 100755 --- a/keyboards/planck/keymaps/zrichard/rules.mk +++ b/keyboards/planck/keymaps/zrichard/rules.mk @@ -20,7 +20,7 @@ MIDI_ENABLE = yes # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. TAP_DANCE_ENABLE = no # Enable double or n tap macros # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/preonic/keymaps/bucktooth/rules.mk b/keyboards/preonic/keymaps/bucktooth/rules.mk index 3e87d41d36..9dbdfcbd3b 100644 --- a/keyboards/preonic/keymaps/bucktooth/rules.mk +++ b/keyboards/preonic/keymaps/bucktooth/rules.mk @@ -11,7 +11,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/preonic/keymaps/dlaroe/rules.mk b/keyboards/preonic/keymaps/dlaroe/rules.mk index b356244713..eea3168497 100644 --- a/keyboards/preonic/keymaps/dlaroe/rules.mk +++ b/keyboards/preonic/keymaps/dlaroe/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/preonic/keymaps/jacwib/rules.mk b/keyboards/preonic/keymaps/jacwib/rules.mk index 3e87d41d36..9dbdfcbd3b 100644 --- a/keyboards/preonic/keymaps/jacwib/rules.mk +++ b/keyboards/preonic/keymaps/jacwib/rules.mk @@ -11,7 +11,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/preonic/keymaps/kinesis/rules.mk b/keyboards/preonic/keymaps/kinesis/rules.mk index 6c8d2897cd..f37fe43389 100644 --- a/keyboards/preonic/keymaps/kinesis/rules.mk +++ b/keyboards/preonic/keymaps/kinesis/rules.mk @@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/preonic/keymaps/seph/rules.mk b/keyboards/preonic/keymaps/seph/rules.mk index 4333bf4553..dd26cd906d 100644 --- a/keyboards/preonic/keymaps/seph/rules.mk +++ b/keyboards/preonic/keymaps/seph/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/preonic/keymaps/zach/rules.mk b/keyboards/preonic/keymaps/zach/rules.mk index eebf413495..f00af43961 100644 --- a/keyboards/preonic/keymaps/zach/rules.mk +++ b/keyboards/preonic/keymaps/zach/rules.mk @@ -20,7 +20,7 @@ AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode UNICODEMAP_ENABLE = yes # Enable extended unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/quefrency/rules.mk b/keyboards/quefrency/rules.mk index b78dc5df7b..3ec04fbf1f 100644 --- a/keyboards/quefrency/rules.mk +++ b/keyboards/quefrency/rules.mk @@ -22,7 +22,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/qwertyydox/rules.mk b/keyboards/qwertyydox/rules.mk index d8a287bbc8..d04a4b9f30 100644 --- a/keyboards/qwertyydox/rules.mk +++ b/keyboards/qwertyydox/rules.mk @@ -58,7 +58,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # I2C is used between the sides # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/rama/m60_a/rules.mk b/keyboards/rama/m60_a/rules.mk index 02617cf1c7..7ab1b7d3ba 100644 --- a/keyboards/rama/m60_a/rules.mk +++ b/keyboards/rama/m60_a/rules.mk @@ -68,7 +68,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend @@ -76,4 +76,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend RAW_ENABLE = yes DYNAMIC_KEYMAP_ENABLE = yes CIE1931_CURVE = yes - diff --git a/keyboards/redox/rules.mk b/keyboards/redox/rules.mk index c74a3bda2c..748d89dcfb 100644 --- a/keyboards/redox/rules.mk +++ b/keyboards/redox/rules.mk @@ -66,7 +66,7 @@ UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes diff --git a/keyboards/rorschach/keymaps/insertsnideremarks/rules.mk b/keyboards/rorschach/keymaps/insertsnideremarks/rules.mk index 6beaae7aee..b9e39c0539 100644 --- a/keyboards/rorschach/keymaps/insertsnideremarks/rules.mk +++ b/keyboards/rorschach/keymaps/insertsnideremarks/rules.mk @@ -14,8 +14,6 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = yes # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes # Enable Tap Dancing function - - diff --git a/keyboards/rorschach/rules.mk b/keyboards/rorschach/rules.mk index 9de068d2f2..3201253487 100644 --- a/keyboards/rorschach/rules.mk +++ b/keyboards/rorschach/rules.mk @@ -17,7 +17,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk b/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk index 6a078bcc3f..cf50122526 100644 --- a/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk +++ b/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/s60_x/keymaps/bluebear/rules.mk b/keyboards/s60_x/keymaps/bluebear/rules.mk index 78d770d262..b7c9a04790 100644 --- a/keyboards/s60_x/keymaps/bluebear/rules.mk +++ b/keyboards/s60_x/keymaps/bluebear/rules.mk @@ -9,6 +9,6 @@ MIDI_ENABLE = yes # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no # Enable tap dancing keys \ No newline at end of file diff --git a/keyboards/satan/keymaps/addcninblue/rules.mk b/keyboards/satan/keymaps/addcninblue/rules.mk index c2937fd57f..fd7f34300b 100644 --- a/keyboards/satan/keymaps/addcninblue/rules.mk +++ b/keyboards/satan/keymaps/addcninblue/rules.mk @@ -16,6 +16,6 @@ UNICODEMAP_ENABLE = no # This allows sending unicode symbols using X() UNICODE_ENABLE =no # Unicode UCIS_ENABLE = no # Keep in mind that not all will work (See WinCompose for details on Windows). BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no# Breathing sleep LED during USB suspend API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/ben_iso/rules.mk b/keyboards/satan/keymaps/ben_iso/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/satan/keymaps/ben_iso/rules.mk +++ b/keyboards/satan/keymaps/ben_iso/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/chaser/rules.mk b/keyboards/satan/keymaps/chaser/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/satan/keymaps/chaser/rules.mk +++ b/keyboards/satan/keymaps/chaser/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/colemak/rules.mk b/keyboards/satan/keymaps/colemak/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/satan/keymaps/colemak/rules.mk +++ b/keyboards/satan/keymaps/colemak/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/default/rules.mk b/keyboards/satan/keymaps/default/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/satan/keymaps/default/rules.mk +++ b/keyboards/satan/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/dende_iso/rules.mk b/keyboards/satan/keymaps/dende_iso/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/satan/keymaps/dende_iso/rules.mk +++ b/keyboards/satan/keymaps/dende_iso/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/dkrieger/rules.mk b/keyboards/satan/keymaps/dkrieger/rules.mk index 4c280ceb04..f2434d30e5 100644 --- a/keyboards/satan/keymaps/dkrieger/rules.mk +++ b/keyboards/satan/keymaps/dkrieger/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes diff --git a/keyboards/satan/keymaps/isoHHKB/rules.mk b/keyboards/satan/keymaps/isoHHKB/rules.mk index 026b33c7d8..80ce560588 100644 --- a/keyboards/satan/keymaps/isoHHKB/rules.mk +++ b/keyboards/satan/keymaps/isoHHKB/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/lepa/rules.mk b/keyboards/satan/keymaps/lepa/rules.mk index 636dd1b1d3..72ca006465 100644 --- a/keyboards/satan/keymaps/lepa/rules.mk +++ b/keyboards/satan/keymaps/lepa/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes diff --git a/keyboards/satan/keymaps/midi/rules.mk b/keyboards/satan/keymaps/midi/rules.mk index 89c34b3946..d144314de7 100644 --- a/keyboards/satan/keymaps/midi/rules.mk +++ b/keyboards/satan/keymaps/midi/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = yes # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/olligranlund_iso/rules.mk b/keyboards/satan/keymaps/olligranlund_iso/rules.mk index c96deccaa9..73106b6749 100644 --- a/keyboards/satan/keymaps/olligranlund_iso/rules.mk +++ b/keyboards/satan/keymaps/olligranlund_iso/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/satan/keymaps/sethbc/rules.mk b/keyboards/satan/keymaps/sethbc/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/satan/keymaps/sethbc/rules.mk +++ b/keyboards/satan/keymaps/sethbc/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/smt/rules.mk b/keyboards/satan/keymaps/smt/rules.mk index 0c9ae824f6..806c2cb84b 100644 --- a/keyboards/satan/keymaps/smt/rules.mk +++ b/keyboards/satan/keymaps/smt/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/satan/keymaps/unxmaal/rules.mk b/keyboards/satan/keymaps/unxmaal/rules.mk index ee94a67b4e..470d621b10 100644 --- a/keyboards/satan/keymaps/unxmaal/rules.mk +++ b/keyboards/satan/keymaps/unxmaal/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/ardakilic/rules.mk b/keyboards/tada68/keymaps/ardakilic/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/tada68/keymaps/ardakilic/rules.mk +++ b/keyboards/tada68/keymaps/ardakilic/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/bazooka/rules.mk b/keyboards/tada68/keymaps/bazooka/rules.mk index 1915481bf9..b2789a78a7 100644 --- a/keyboards/tada68/keymaps/bazooka/rules.mk +++ b/keyboards/tada68/keymaps/bazooka/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/tada68/keymaps/cheese/rules.mk b/keyboards/tada68/keymaps/cheese/rules.mk index fdbd25ea80..b2789a78a7 100644 --- a/keyboards/tada68/keymaps/cheese/rules.mk +++ b/keyboards/tada68/keymaps/cheese/rules.mk @@ -13,6 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - diff --git a/keyboards/tada68/keymaps/default/rules.mk b/keyboards/tada68/keymaps/default/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/tada68/keymaps/default/rules.mk +++ b/keyboards/tada68/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/fakb/rules.mk b/keyboards/tada68/keymaps/fakb/rules.mk index 54b79fc9d4..642e16de59 100644 --- a/keyboards/tada68/keymaps/fakb/rules.mk +++ b/keyboards/tada68/keymaps/fakb/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/fezzant/rules.mk b/keyboards/tada68/keymaps/fezzant/rules.mk index f2439cc7d1..8df84ae954 100644 --- a/keyboards/tada68/keymaps/fezzant/rules.mk +++ b/keyboards/tada68/keymaps/fezzant/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = yes # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/iso-nor/rules.mk b/keyboards/tada68/keymaps/iso-nor/rules.mk index 4deca710b8..baaca071cf 100644 --- a/keyboards/tada68/keymaps/iso-nor/rules.mk +++ b/keyboards/tada68/keymaps/iso-nor/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/iso-uk/rules.mk b/keyboards/tada68/keymaps/iso-uk/rules.mk index 4deca710b8..baaca071cf 100644 --- a/keyboards/tada68/keymaps/iso-uk/rules.mk +++ b/keyboards/tada68/keymaps/iso-uk/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/isoish/rules.mk b/keyboards/tada68/keymaps/isoish/rules.mk index 4deca710b8..baaca071cf 100644 --- a/keyboards/tada68/keymaps/isoish/rules.mk +++ b/keyboards/tada68/keymaps/isoish/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/mattdicarlo/rules.mk b/keyboards/tada68/keymaps/mattdicarlo/rules.mk index c920006650..ac92f99f48 100644 --- a/keyboards/tada68/keymaps/mattdicarlo/rules.mk +++ b/keyboards/tada68/keymaps/mattdicarlo/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/mlechner/rules.mk b/keyboards/tada68/keymaps/mlechner/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/tada68/keymaps/mlechner/rules.mk +++ b/keyboards/tada68/keymaps/mlechner/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/mtdjr/rules.mk b/keyboards/tada68/keymaps/mtdjr/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/tada68/keymaps/mtdjr/rules.mk +++ b/keyboards/tada68/keymaps/mtdjr/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/pascamel/rules.mk b/keyboards/tada68/keymaps/pascamel/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/tada68/keymaps/pascamel/rules.mk +++ b/keyboards/tada68/keymaps/pascamel/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/raylas/rules.mk b/keyboards/tada68/keymaps/raylas/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/tada68/keymaps/raylas/rules.mk +++ b/keyboards/tada68/keymaps/raylas/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/rbong/rules.mk b/keyboards/tada68/keymaps/rbong/rules.mk index 1915481bf9..b2789a78a7 100644 --- a/keyboards/tada68/keymaps/rbong/rules.mk +++ b/keyboards/tada68/keymaps/rbong/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/tada68/keymaps/rgb/rules.mk b/keyboards/tada68/keymaps/rgb/rules.mk index ee94a67b4e..470d621b10 100644 --- a/keyboards/tada68/keymaps/rgb/rules.mk +++ b/keyboards/tada68/keymaps/rgb/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/rys/rules.mk b/keyboards/tada68/keymaps/rys/rules.mk index 1915481bf9..b2789a78a7 100644 --- a/keyboards/tada68/keymaps/rys/rules.mk +++ b/keyboards/tada68/keymaps/rys/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/tada68/keymaps/shalzz/rules.mk b/keyboards/tada68/keymaps/shalzz/rules.mk index 1df3af955d..4595aa8c24 100644 --- a/keyboards/tada68/keymaps/shalzz/rules.mk +++ b/keyboards/tada68/keymaps/shalzz/rules.mk @@ -8,5 +8,5 @@ COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality AUDIO_ENABLE = no # Audio output on port C6 -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend diff --git a/keyboards/tada68/keymaps/sm0g/rules.mk b/keyboards/tada68/keymaps/sm0g/rules.mk index bd4bb32491..0826db7554 100644 --- a/keyboards/tada68/keymaps/sm0g/rules.mk +++ b/keyboards/tada68/keymaps/sm0g/rules.mk @@ -13,6 +13,6 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes # Tappa Dance \ No newline at end of file diff --git a/keyboards/tada68/keymaps/stephengrier/rules.mk b/keyboards/tada68/keymaps/stephengrier/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/tada68/keymaps/stephengrier/rules.mk +++ b/keyboards/tada68/keymaps/stephengrier/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/trashcat/rules.mk b/keyboards/tada68/keymaps/trashcat/rules.mk index 644b6a814b..6fb4969193 100644 --- a/keyboards/tada68/keymaps/trashcat/rules.mk +++ b/keyboards/tada68/keymaps/trashcat/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes # Tappa Dance Bitch ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/tshack/rules.mk b/keyboards/tada68/keymaps/tshack/rules.mk index 061907d3a2..86d22dd3fd 100644 --- a/keyboards/tada68/keymaps/tshack/rules.mk +++ b/keyboards/tada68/keymaps/tshack/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/unix/rules.mk b/keyboards/tada68/keymaps/unix/rules.mk index 46f0b65a9c..aade51459b 100644 --- a/keyboards/tada68/keymaps/unix/rules.mk +++ b/keyboards/tada68/keymaps/unix/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/tada68/keymaps/wamsm_tada/rules.mk b/keyboards/tada68/keymaps/wamsm_tada/rules.mk index 2a7ff27793..bb535beb34 100644 --- a/keyboards/tada68/keymaps/wamsm_tada/rules.mk +++ b/keyboards/tada68/keymaps/wamsm_tada/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/the_ruler/keymaps/default/rules.mk b/keyboards/the_ruler/keymaps/default/rules.mk index fac9327db3..b491f5b3f3 100644 --- a/keyboards/the_ruler/keymaps/default/rules.mk +++ b/keyboards/the_ruler/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/the_ruler/rules.mk b/keyboards/the_ruler/rules.mk index 30d76a3c92..6362176fea 100644 --- a/keyboards/the_ruler/rules.mk +++ b/keyboards/the_ruler/rules.mk @@ -65,4 +65,4 @@ MIDI_ENABLE = no # MIDI controls UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk index 7d09c322e5..159fd7dc6c 100644 --- a/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk +++ b/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk @@ -29,7 +29,7 @@ # AUDIO_ENABLE = no # Audio output on port C6 # UNICODE_ENABLE = no # Unicode # BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk index 7d09c322e5..159fd7dc6c 100644 --- a/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk +++ b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk @@ -29,7 +29,7 @@ # AUDIO_ENABLE = no # Audio output on port C6 # UNICODE_ENABLE = no # Unicode # BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk index 7d09c322e5..159fd7dc6c 100644 --- a/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk +++ b/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk @@ -29,7 +29,7 @@ # AUDIO_ENABLE = no # Audio output on port C6 # UNICODE_ENABLE = no # Unicode # BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk index 7d09c322e5..159fd7dc6c 100644 --- a/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk +++ b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk @@ -29,7 +29,7 @@ # AUDIO_ENABLE = no # Audio output on port C6 # UNICODE_ENABLE = no # Unicode # BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk index f4671a9d11..3ff1477251 100644 --- a/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk +++ b/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk index f4671a9d11..3ff1477251 100644 --- a/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk +++ b/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk index ebc9f810f9..d7ca73ac58 100644 --- a/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk +++ b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk index 41afd9a551..b2c421c4dc 100644 --- a/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk +++ b/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk index f4671a9d11..3ff1477251 100644 --- a/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk +++ b/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk index e60e3c5c5a..1e006e9472 100644 --- a/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk +++ b/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk index f4671a9d11..3ff1477251 100644 --- a/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk +++ b/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk index f4671a9d11..3ff1477251 100644 --- a/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk +++ b/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk index f4671a9d11..3ff1477251 100644 --- a/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk +++ b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk index 9f3c958bd8..ba4b4fec0c 100644 --- a/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk +++ b/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = no # Enable Tap Dance functionality diff --git a/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk index f4671a9d11..3ff1477251 100644 --- a/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk +++ b/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk index f4671a9d11..3ff1477251 100644 --- a/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk +++ b/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk index b61d6cca2c..030d27f2a6 100644 --- a/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk +++ b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes # Enable Tap Dance functionality diff --git a/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk index 72fd3d30ba..d8284e6bd5 100644 --- a/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk +++ b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk @@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/vision_division/keymaps/default/rules.mk b/keyboards/vision_division/keymaps/default/rules.mk index 28060947af..342f37453c 100644 --- a/keyboards/vision_division/keymaps/default/rules.mk +++ b/keyboards/vision_division/keymaps/default/rules.mk @@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = yes # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/vitamins_included/rules.mk b/keyboards/vitamins_included/rules.mk index 4f6d497a6b..34f423f59d 100644 --- a/keyboards/vitamins_included/rules.mk +++ b/keyboards/vitamins_included/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/viterbi/rules.mk b/keyboards/viterbi/rules.mk index af24c15f53..ee043cca3b 100644 --- a/keyboards/viterbi/rules.mk +++ b/keyboards/viterbi/rules.mk @@ -63,7 +63,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/keyboards/wavelet/rules.mk b/keyboards/wavelet/rules.mk index 86149c5622..cfff50a41d 100644 --- a/keyboards/wavelet/rules.mk +++ b/keyboards/wavelet/rules.mk @@ -22,7 +22,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/xd60/rules.mk b/keyboards/xd60/rules.mk index 50fba97e5f..8a60252dcf 100644 --- a/keyboards/xd60/rules.mk +++ b/keyboards/xd60/rules.mk @@ -61,7 +61,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend LAYOUTS = 60_ansi \ No newline at end of file diff --git a/keyboards/xd75/keymaps/fabian/rules.mk b/keyboards/xd75/keymaps/fabian/rules.mk index 6e8941fdfd..f1ae8d44a1 100644 --- a/keyboards/xd75/keymaps/fabian/rules.mk +++ b/keyboards/xd75/keymaps/fabian/rules.mk @@ -29,7 +29,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR diff --git a/keyboards/xd75/keymaps/germanized/rules.mk b/keyboards/xd75/keymaps/germanized/rules.mk index d72bcf575d..f57fb8c54e 100644 --- a/keyboards/xd75/keymaps/germanized/rules.mk +++ b/keyboards/xd75/keymaps/germanized/rules.mk @@ -29,7 +29,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes # Enable Tap Dancing diff --git a/keyboards/xd75/rules.mk b/keyboards/xd75/rules.mk index 5f6e856486..e992729432 100644 --- a/keyboards/xd75/rules.mk +++ b/keyboards/xd75/rules.mk @@ -62,7 +62,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend LAYOUTS = ortho_5x15 \ No newline at end of file diff --git a/keyboards/zeal60/rules.mk b/keyboards/zeal60/rules.mk index f099ea9fdd..1327d88210 100644 --- a/keyboards/zeal60/rules.mk +++ b/keyboards/zeal60/rules.mk @@ -67,7 +67,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend diff --git a/keyboards/zeal65/rules.mk b/keyboards/zeal65/rules.mk index 02617cf1c7..7ab1b7d3ba 100644 --- a/keyboards/zeal65/rules.mk +++ b/keyboards/zeal65/rules.mk @@ -68,7 +68,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend @@ -76,4 +76,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend RAW_ENABLE = yes DYNAMIC_KEYMAP_ENABLE = yes CIE1931_CURVE = yes - diff --git a/keyboards/zen/rules.mk b/keyboards/zen/rules.mk index 32d3dc51c8..4e82689111 100644 --- a/keyboards/zen/rules.mk +++ b/keyboards/zen/rules.mk @@ -62,7 +62,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. SUBPROJECT_rev1 = yes USE_I2C = no # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE diff --git a/layouts/community/ergodox/alphadox/rules.mk b/layouts/community/ergodox/alphadox/rules.mk index f93ff3bb68..57c62a5e63 100644 --- a/layouts/community/ergodox/alphadox/rules.mk +++ b/layouts/community/ergodox/alphadox/rules.mk @@ -9,7 +9,5 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - - From 7e99d869deb57251dc15620beff34d5fd53066e4 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 22 Oct 2018 10:26:19 -0700 Subject: [PATCH 227/269] Remove all of the deprecated RGB defines Fixes #3641 --- drivers/avr/ws2812.h | 3 --- keyboards/6ball/config.h | 4 +--- keyboards/9key/config.h | 4 +--- keyboards/amj40/keymaps/default/rules.mk | 3 --- keyboards/amj40/keymaps/fabian/rules.mk | 10 +--------- keyboards/amj40/keymaps/jetpacktuxedo/rules.mk | 8 -------- keyboards/amj40/keymaps/myee/rules.mk | 10 +--------- keyboards/bfo9000/config.h | 2 +- keyboards/blockey/config.h | 5 +---- keyboards/chocopad/config.h | 4 +--- keyboards/crkbd/rev1/config.h | 4 +--- keyboards/deltasplit75/v2/config.h | 6 ++---- keyboards/dilly/config.h | 4 +--- keyboards/ergo42/rev1/config.h | 4 +--- keyboards/ergodash/mini/config.h | 4 +--- keyboards/ergodash/rev1/config.h | 4 +--- keyboards/ergodash/rev2/config.h | 4 +--- keyboards/ergotravel/rev1/config.h | 5 +---- keyboards/fortitude60/rev1/config.h | 2 +- keyboards/fourier/rev1/config.h | 4 +--- keyboards/gh60/keymaps/dbroqua/config.h | 13 +++---------- keyboards/gh60/keymaps/robotmaxtron/config.h | 13 +++---------- keyboards/handwired/dactyl_manuform/config.h | 4 +--- keyboards/handwired/qc60/proto/config.h | 2 -- keyboards/helix/pico/config.h | 4 +--- keyboards/helix/rev1/config.h | 5 +---- keyboards/helix/rev2/config.h | 4 +--- keyboards/iris/rev1/config.h | 2 +- keyboards/iris/rev1_led/config.h | 2 +- keyboards/iris/rev2/config.h | 2 +- keyboards/iris/rev3/config.h | 2 +- keyboards/lets_split/keymaps/zer09/config.h | 4 +--- keyboards/lets_split/rev1/config.h | 4 +--- keyboards/lets_split/rev2/config.h | 4 +--- keyboards/lets_split/sockets/config.h | 4 +--- keyboards/levinson/rev1/config.h | 2 +- keyboards/levinson/rev2/config.h | 2 +- keyboards/lily58/rev1/config.h | 8 +++----- keyboards/meira/config.h | 2 +- keyboards/minidox/keymaps/alairock/config.h | 2 +- keyboards/minidox/keymaps/that_canadian/config.h | 2 +- keyboards/minidox/keymaps/xyverz/config.h | 2 +- keyboards/mint60/config.h | 4 +--- keyboards/miuni32/config.h | 7 +++---- keyboards/nyquist/rev1/config.h | 4 +--- keyboards/nyquist/rev2/config.h | 2 +- keyboards/orthodox/rev1/config.h | 3 --- keyboards/orthodox/rev3/config.h | 4 +--- keyboards/orthodox/rev3_teensy/config.h | 4 +--- keyboards/preonic/keymaps/zach/config.h | 2 +- keyboards/qwertyydox/config.h | 4 +--- keyboards/qwertyydox/rev1/config.h | 4 +--- keyboards/redox/rev1/config.h | 4 +--- keyboards/the_ruler/config.h | 3 +-- keyboards/vitamins_included/rev1/config.h | 4 +--- keyboards/viterbi/rev1/config.h | 4 +--- keyboards/wavelet/config.h | 2 +- keyboards/zen/rev1/config.h | 4 +--- 58 files changed, 62 insertions(+), 180 deletions(-) diff --git a/drivers/avr/ws2812.h b/drivers/avr/ws2812.h index f7e0c31440..1f9299ffb5 100644 --- a/drivers/avr/ws2812.h +++ b/drivers/avr/ws2812.h @@ -69,7 +69,4 @@ void ws2812_sendarray_mask(uint8_t *array,uint16_t length, uint8_t pinmask); #define CONCAT_EXP(a, b) CONCAT(a, b) #endif -// #define ws2812_PORTREG CONCAT_EXP(PORT,ws2812_port) -// #define ws2812_DDRREG CONCAT_EXP(DDR,ws2812_port) - #endif /* LIGHT_WS2812_H_ */ diff --git a/keyboards/6ball/config.h b/keyboards/6ball/config.h index 19d24486cc..b0e59f20c6 100644 --- a/keyboards/6ball/config.h +++ b/keyboards/6ball/config.h @@ -39,11 +39,9 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN F7 -#define RGBLIGHT_TIMER + #define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 6 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/9key/config.h b/keyboards/9key/config.h index eee8407cce..4e5a2fd45b 100644 --- a/keyboards/9key/config.h +++ b/keyboards/9key/config.h @@ -39,10 +39,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN F7 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 1 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/amj40/keymaps/default/rules.mk b/keyboards/amj40/keymaps/default/rules.mk index 41a1982248..fe98672201 100644 --- a/keyboards/amj40/keymaps/default/rules.mk +++ b/keyboards/amj40/keymaps/default/rules.mk @@ -18,9 +18,6 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD - ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/amj40/keymaps/fabian/rules.mk b/keyboards/amj40/keymaps/fabian/rules.mk index 7e0634e09e..90559e0dd2 100644 --- a/keyboards/amj40/keymaps/fabian/rules.mk +++ b/keyboards/amj40/keymaps/fabian/rules.mk @@ -1,5 +1,5 @@ # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) @@ -17,11 +17,3 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD - - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk b/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk index 6ad9236688..2b613b28e4 100644 --- a/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk +++ b/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk @@ -17,11 +17,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. It uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD - - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/amj40/keymaps/myee/rules.mk b/keyboards/amj40/keymaps/myee/rules.mk index c35191cef2..fe07e43d82 100644 --- a/keyboards/amj40/keymaps/myee/rules.mk +++ b/keyboards/amj40/keymaps/myee/rules.mk @@ -1,5 +1,5 @@ # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) @@ -17,11 +17,3 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD - - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/bfo9000/config.h b/keyboards/bfo9000/config.h index 561d2d1146..893fa5ab6a 100644 --- a/keyboards/bfo9000/config.h +++ b/keyboards/bfo9000/config.h @@ -53,7 +53,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN B4 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 20 // Number of LEDs /* diff --git a/keyboards/blockey/config.h b/keyboards/blockey/config.h index b099a816bf..53860bfbc9 100644 --- a/keyboards/blockey/config.h +++ b/keyboards/blockey/config.h @@ -51,11 +51,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN B1 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 4 -#define ws2812_PORTREG PORTB -#define ws2812_DDRREG DDRB +#define RGBLED_NUM 4 #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/chocopad/config.h b/keyboards/chocopad/config.h index 2163ff8bc4..d2a1a7b484 100644 --- a/keyboards/chocopad/config.h +++ b/keyboards/chocopad/config.h @@ -47,9 +47,7 @@ #define RGBLIGHT_VAL_STEP 8 #endif #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 4 -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD #endif diff --git a/keyboards/crkbd/rev1/config.h b/keyboards/crkbd/rev1/config.h index efce13a490..915779060b 100644 --- a/keyboards/crkbd/rev1/config.h +++ b/keyboards/crkbd/rev1/config.h @@ -57,10 +57,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/deltasplit75/v2/config.h b/keyboards/deltasplit75/v2/config.h index 319a149fbc..475a5c9dc5 100644 --- a/keyboards/deltasplit75/v2/config.h +++ b/keyboards/deltasplit75/v2/config.h @@ -61,10 +61,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options @@ -85,4 +83,4 @@ along with this program. If not, see . //#define NO_ACTION_FUNCTION -#endif \ No newline at end of file +#endif diff --git a/keyboards/dilly/config.h b/keyboards/dilly/config.h index d9ca4597cf..084186fc66 100644 --- a/keyboards/dilly/config.h +++ b/keyboards/dilly/config.h @@ -50,9 +50,7 @@ #define RGBLIGHT_VAL_STEP 8 #endif #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 10 -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD #endif diff --git a/keyboards/ergo42/rev1/config.h b/keyboards/ergo42/rev1/config.h index 1a674a8586..a7edb40972 100644 --- a/keyboards/ergo42/rev1/config.h +++ b/keyboards/ergo42/rev1/config.h @@ -66,10 +66,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/ergodash/mini/config.h b/keyboards/ergodash/mini/config.h index a7be1635c1..11cff145e1 100644 --- a/keyboards/ergodash/mini/config.h +++ b/keyboards/ergodash/mini/config.h @@ -73,10 +73,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 20 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/ergodash/rev1/config.h b/keyboards/ergodash/rev1/config.h index 09dd6604eb..d3f3314ee6 100644 --- a/keyboards/ergodash/rev1/config.h +++ b/keyboards/ergodash/rev1/config.h @@ -63,10 +63,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 24 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/ergodash/rev2/config.h b/keyboards/ergodash/rev2/config.h index 489afe0178..5f9c689916 100644 --- a/keyboards/ergodash/rev2/config.h +++ b/keyboards/ergodash/rev2/config.h @@ -70,10 +70,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 24 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/ergotravel/rev1/config.h b/keyboards/ergotravel/rev1/config.h index 5fa447da74..3af1147a7a 100644 --- a/keyboards/ergotravel/rev1/config.h +++ b/keyboards/ergotravel/rev1/config.h @@ -61,10 +61,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options @@ -83,4 +81,3 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - diff --git a/keyboards/fortitude60/rev1/config.h b/keyboards/fortitude60/rev1/config.h index 8c6f21afe6..b89f5c7df9 100644 --- a/keyboards/fortitude60/rev1/config.h +++ b/keyboards/fortitude60/rev1/config.h @@ -66,7 +66,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #ifdef RGBLIGHT_ENABLE #define RGB_DI_PIN B5 - #define RGBLIGHT_TIMER + #define RGBLED_NUM 18 // Number of LEDs */ #endif /* diff --git a/keyboards/fourier/rev1/config.h b/keyboards/fourier/rev1/config.h index c137522261..3bd67228c3 100644 --- a/keyboards/fourier/rev1/config.h +++ b/keyboards/fourier/rev1/config.h @@ -56,11 +56,9 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 14 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/gh60/keymaps/dbroqua/config.h b/keyboards/gh60/keymaps/dbroqua/config.h index 0b8218d28a..fd63c9a8f7 100644 --- a/keyboards/gh60/keymaps/dbroqua/config.h +++ b/keyboards/gh60/keymaps/dbroqua/config.h @@ -158,26 +158,19 @@ along with this program. If not, see . /* * RGB Underglow * These settings are for the F4 by default: - * * - * #define ws2812_PORTREG PORTF - * #define ws2812_DDRREG DDRF + * * #define ws2812_pin PF4 * #define RGBLED_NUM 14 // Number of LEDs * #define RGBLIGHT_HUE_STEP 10 * #define RGBLIGHT_SAT_STEP 17 * #define RGBLIGHT_VAL_STEP 17 * - * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. - * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. + * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. + * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c */ -/* Deprecated code below -#define ws2812_PORTREG PORTF -#define ws2812_DDRREG DDRF -#define ws2812_pin PF4 -*/ #define RGB_DI_PIN F4 #define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 11 // Number of LEDs diff --git a/keyboards/gh60/keymaps/robotmaxtron/config.h b/keyboards/gh60/keymaps/robotmaxtron/config.h index abaddb71f1..925a69efe0 100644 --- a/keyboards/gh60/keymaps/robotmaxtron/config.h +++ b/keyboards/gh60/keymaps/robotmaxtron/config.h @@ -161,26 +161,19 @@ along with this program. If not, see . /* * RGB Underglow * These settings are for the F4 by default: - * * - * #define ws2812_PORTREG PORTF - * #define ws2812_DDRREG DDRF + * * #define ws2812_pin PF4 * #define RGBLED_NUM 14 // Number of LEDs * #define RGBLIGHT_HUE_STEP 10 * #define RGBLIGHT_SAT_STEP 17 * #define RGBLIGHT_VAL_STEP 17 * - * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. - * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. + * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. + * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c */ -/* Deprecated code below -#define ws2812_PORTREG PORTF -#define ws2812_DDRREG DDRF -#define ws2812_pin PF4 -*/ #define RGB_DI_PIN F4 #define RGBLIGHT_ANIMATIONS #define RGBLED_NUM 8 // Number of LEDs diff --git a/keyboards/handwired/dactyl_manuform/config.h b/keyboards/handwired/dactyl_manuform/config.h index 19cd356d89..320ce3c482 100644 --- a/keyboards/handwired/dactyl_manuform/config.h +++ b/keyboards/handwired/dactyl_manuform/config.h @@ -53,7 +53,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs @@ -74,5 +74,3 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - - diff --git a/keyboards/handwired/qc60/proto/config.h b/keyboards/handwired/qc60/proto/config.h index 81466b0196..8c21fa9265 100644 --- a/keyboards/handwired/qc60/proto/config.h +++ b/keyboards/handwired/qc60/proto/config.h @@ -10,5 +10,3 @@ /* ws2812 RGB LED */ #define RGB_DI_PIN D3 #define RGBLED_NUM 1 // Number of LEDs -// #define ws2812_PORTREG PORTD -// #define ws2812_DDRREG DDRD diff --git a/keyboards/helix/pico/config.h b/keyboards/helix/pico/config.h index 41edfcbc20..b8822e2273 100644 --- a/keyboards/helix/pico/config.h +++ b/keyboards/helix/pico/config.h @@ -83,10 +83,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + //#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD // Helix keyboard RGB LED support //#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no diff --git a/keyboards/helix/rev1/config.h b/keyboards/helix/rev1/config.h index 7fec62fc83..07b5c4f6f8 100644 --- a/keyboards/helix/rev1/config.h +++ b/keyboards/helix/rev1/config.h @@ -74,11 +74,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD +#define RGBLED_NUM 12 // Number of LEDs /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboards/helix/rev2/config.h b/keyboards/helix/rev2/config.h index b354d312d5..f7d35b3714 100644 --- a/keyboards/helix/rev2/config.h +++ b/keyboards/helix/rev2/config.h @@ -87,10 +87,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + //#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD // Helix keyboard RGB LED support //#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no diff --git a/keyboards/iris/rev1/config.h b/keyboards/iris/rev1/config.h index cc7f2d8d44..3c088f6711 100644 --- a/keyboards/iris/rev1/config.h +++ b/keyboards/iris/rev1/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs /* diff --git a/keyboards/iris/rev1_led/config.h b/keyboards/iris/rev1_led/config.h index e9eac2455c..d8571f8daf 100644 --- a/keyboards/iris/rev1_led/config.h +++ b/keyboards/iris/rev1_led/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs /* diff --git a/keyboards/iris/rev2/config.h b/keyboards/iris/rev2/config.h index 368d21c989..087e0f69e5 100644 --- a/keyboards/iris/rev2/config.h +++ b/keyboards/iris/rev2/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs /* diff --git a/keyboards/iris/rev3/config.h b/keyboards/iris/rev3/config.h index 7f68180c29..3329a4edb2 100644 --- a/keyboards/iris/rev3/config.h +++ b/keyboards/iris/rev3/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN F7 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs /* diff --git a/keyboards/lets_split/keymaps/zer09/config.h b/keyboards/lets_split/keymaps/zer09/config.h index 73438d8a93..14be4ccc59 100644 --- a/keyboards/lets_split/keymaps/zer09/config.h +++ b/keyboards/lets_split/keymaps/zer09/config.h @@ -52,8 +52,6 @@ along with this program. If not, see . /* ws2812 RGB LED */ #undef RGBLED_NUM #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 50 -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD #endif diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h index 73f90e715d..c0e4d1fbce 100644 --- a/keyboards/lets_split/rev1/config.h +++ b/keyboards/lets_split/rev1/config.h @@ -60,10 +60,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 16 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/lets_split/rev2/config.h b/keyboards/lets_split/rev2/config.h index 1c48f38e05..1ff25cd480 100644 --- a/keyboards/lets_split/rev2/config.h +++ b/keyboards/lets_split/rev2/config.h @@ -60,10 +60,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/lets_split/sockets/config.h b/keyboards/lets_split/sockets/config.h index d004b26bd7..a45cdd13bb 100644 --- a/keyboards/lets_split/sockets/config.h +++ b/keyboards/lets_split/sockets/config.h @@ -60,10 +60,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D4 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* Audio settings */ #ifdef AUDIO_ENABLE diff --git a/keyboards/levinson/rev1/config.h b/keyboards/levinson/rev1/config.h index 52a644e82f..8161b4e32f 100644 --- a/keyboards/levinson/rev1/config.h +++ b/keyboards/levinson/rev1/config.h @@ -53,7 +53,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs /* Backlight LEDs */ diff --git a/keyboards/levinson/rev2/config.h b/keyboards/levinson/rev2/config.h index 4845c935e8..03b98b45c1 100644 --- a/keyboards/levinson/rev2/config.h +++ b/keyboards/levinson/rev2/config.h @@ -53,7 +53,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs /* Backlight LEDs */ diff --git a/keyboards/lily58/rev1/config.h b/keyboards/lily58/rev1/config.h index 9413e8d4a2..a991e88322 100644 --- a/keyboards/lily58/rev1/config.h +++ b/keyboards/lily58/rev1/config.h @@ -24,7 +24,7 @@ along with this program. If not, see . /* USB Device descriptor parameter */ #define VENDOR_ID 0xFC51 -#define PRODUCT_ID 0x0058 +#define PRODUCT_ID 0x0058 #define DEVICE_VER 0x0100 #define MANUFACTURER F_YUUCHI #define PRODUCT Lily58 @@ -62,10 +62,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 14 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options @@ -83,4 +81,4 @@ along with this program. If not, see . //#define NO_ACTION_TAPPING //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION \ No newline at end of file +//#define NO_ACTION_FUNCTION diff --git a/keyboards/meira/config.h b/keyboards/meira/config.h index 5e9dd6837e..ff39f90eb7 100644 --- a/keyboards/meira/config.h +++ b/keyboards/meira/config.h @@ -42,7 +42,7 @@ along with this program. If not, see . #ifdef RGBLIGHT_ENABLE #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 15 // Number of LEDs #endif diff --git a/keyboards/minidox/keymaps/alairock/config.h b/keyboards/minidox/keymaps/alairock/config.h index 3649fdd12c..6b0069f4b2 100644 --- a/keyboards/minidox/keymaps/alairock/config.h +++ b/keyboards/minidox/keymaps/alairock/config.h @@ -30,7 +30,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D7 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_ANIMATIONS #define RGBLIGHT_HUE_STEP 10 diff --git a/keyboards/minidox/keymaps/that_canadian/config.h b/keyboards/minidox/keymaps/that_canadian/config.h index 5832d1866e..b85609127e 100644 --- a/keyboards/minidox/keymaps/that_canadian/config.h +++ b/keyboards/minidox/keymaps/that_canadian/config.h @@ -29,7 +29,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D7 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_ANIMATIONS #define RGBLIGHT_HUE_STEP 10 diff --git a/keyboards/minidox/keymaps/xyverz/config.h b/keyboards/minidox/keymaps/xyverz/config.h index 6d7b6256a1..ae26f94999 100644 --- a/keyboards/minidox/keymaps/xyverz/config.h +++ b/keyboards/minidox/keymaps/xyverz/config.h @@ -29,7 +29,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D7 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 8 // Number of LEDs #define RGBLIGHT_ANIMATIONS #define RGBLIGHT_HUE_STEP 10 diff --git a/keyboards/mint60/config.h b/keyboards/mint60/config.h index 51c586e636..a762c5ffea 100644 --- a/keyboards/mint60/config.h +++ b/keyboards/mint60/config.h @@ -152,10 +152,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 8 -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/miuni32/config.h b/keyboards/miuni32/config.h index 9f26b2291e..a56a818f55 100644 --- a/keyboards/miuni32/config.h +++ b/keyboards/miuni32/config.h @@ -24,7 +24,7 @@ along with this program. If not, see . #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x6060 #define DEVICE_VER 0x0001 -#define MANUFACTURER Bigtuna.io +#define MANUFACTURER Bigtuna.io #define PRODUCT Miuni32 #define DESCRIPTION A custom keyboard for writers @@ -48,7 +48,7 @@ along with this program. If not, see . /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION ROW2COL - + // #define BACKLIGHT_PIN B7 // #define BACKLIGHT_BREATHING // #define BACKLIGHT_LEVELS 3 @@ -159,9 +159,8 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#define RGBLIGHT_TIMER + #define RGB_DI_PIN D0 // The pin your RGB strip is wired to -#define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio) #define RGBLED_NUM 7 // Number of LEDs #define RGBLIGHT_ANIMATIONS #define RGBLIGHT_HUE_STEP 10 diff --git a/keyboards/nyquist/rev1/config.h b/keyboards/nyquist/rev1/config.h index 61bcb80e2c..eec084eccd 100644 --- a/keyboards/nyquist/rev1/config.h +++ b/keyboards/nyquist/rev1/config.h @@ -61,10 +61,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 16 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/nyquist/rev2/config.h b/keyboards/nyquist/rev2/config.h index 75d2e93935..ab062c9209 100644 --- a/keyboards/nyquist/rev2/config.h +++ b/keyboards/nyquist/rev2/config.h @@ -58,7 +58,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 16 // Number of LEDs /* Backlight LEDs */ diff --git a/keyboards/orthodox/rev1/config.h b/keyboards/orthodox/rev1/config.h index 98c24c8c08..03936e737f 100644 --- a/keyboards/orthodox/rev1/config.h +++ b/keyboards/orthodox/rev1/config.h @@ -70,10 +70,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ //#define RGB_DI_PIN D3 -//#define RGBLIGHT_TIMER //#define RGBLED_NUM 16 // Number of LEDs -//#define ws2812_PORTREG PORTD -//#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/orthodox/rev3/config.h b/keyboards/orthodox/rev3/config.h index 8514991762..2e4018e91b 100644 --- a/keyboards/orthodox/rev3/config.h +++ b/keyboards/orthodox/rev3/config.h @@ -75,10 +75,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ //#define RGB_DI_PIN D3 -//#define RGBLIGHT_TIMER + //#define RGBLED_NUM 16 // Number of LEDs -//#define ws2812_PORTREG PORTD -//#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/orthodox/rev3_teensy/config.h b/keyboards/orthodox/rev3_teensy/config.h index daba627fa8..e2e693079c 100644 --- a/keyboards/orthodox/rev3_teensy/config.h +++ b/keyboards/orthodox/rev3_teensy/config.h @@ -67,10 +67,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ //#define RGB_DI_PIN D3 -//#define RGBLIGHT_TIMER + //#define RGBLED_NUM 16 // Number of LEDs -//#define ws2812_PORTREG PORTD -//#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/preonic/keymaps/zach/config.h b/keyboards/preonic/keymaps/zach/config.h index 40a083da37..25f88afdc1 100644 --- a/keyboards/preonic/keymaps/zach/config.h +++ b/keyboards/preonic/keymaps/zach/config.h @@ -65,7 +65,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ //#define RGB_DI_PIN D1 -//#define RGBLIGHT_TIMER + //#define RGBLED_NUM 28 // Number of LEDs //#define RGBLIGHT_HUE_STEP 10 //#define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/qwertyydox/config.h b/keyboards/qwertyydox/config.h index 5c4f8a6b2a..b22ca534e3 100644 --- a/keyboards/qwertyydox/config.h +++ b/keyboards/qwertyydox/config.h @@ -64,10 +64,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D6 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/qwertyydox/rev1/config.h b/keyboards/qwertyydox/rev1/config.h index c5c4daa3d3..3d4c9b0d00 100644 --- a/keyboards/qwertyydox/rev1/config.h +++ b/keyboards/qwertyydox/rev1/config.h @@ -64,10 +64,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D6 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* diff --git a/keyboards/redox/rev1/config.h b/keyboards/redox/rev1/config.h index f8041f2356..fe951f7226 100644 --- a/keyboards/redox/rev1/config.h +++ b/keyboards/redox/rev1/config.h @@ -62,10 +62,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 14 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/the_ruler/config.h b/keyboards/the_ruler/config.h index 16135bbd1b..e72875c766 100644 --- a/keyboards/the_ruler/config.h +++ b/keyboards/the_ruler/config.h @@ -155,9 +155,8 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#define RGBLIGHT_TIMER + #define RGB_DI_PIN E6 // The pin your RGB strip is wired to -#define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio) #define RGBLED_NUM 1 // Number of LEDs #define RGBLIGHT_ANIMATIONS #define RGBLIGHT_HUE_STEP 10 diff --git a/keyboards/vitamins_included/rev1/config.h b/keyboards/vitamins_included/rev1/config.h index 26023bfea9..0347477eea 100644 --- a/keyboards/vitamins_included/rev1/config.h +++ b/keyboards/vitamins_included/rev1/config.h @@ -59,10 +59,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN F0 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 16 // Number of LEDs -#define ws2812_PORTREG PORTF -#define ws2812_DDRREG DDRF #define RGBLIGHT_ANIMATIONS /* Audio settings */ diff --git a/keyboards/viterbi/rev1/config.h b/keyboards/viterbi/rev1/config.h index 3400ea31a1..d6a66408ef 100644 --- a/keyboards/viterbi/rev1/config.h +++ b/keyboards/viterbi/rev1/config.h @@ -61,10 +61,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 16 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options diff --git a/keyboards/wavelet/config.h b/keyboards/wavelet/config.h index 4e45ef8e19..ac6c966969 100644 --- a/keyboards/wavelet/config.h +++ b/keyboards/wavelet/config.h @@ -53,7 +53,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 12 // Number of LEDs /* Backlight LEDs */ diff --git a/keyboards/zen/rev1/config.h b/keyboards/zen/rev1/config.h index efae558927..890d307570 100644 --- a/keyboards/zen/rev1/config.h +++ b/keyboards/zen/rev1/config.h @@ -65,10 +65,8 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D1 -#define RGBLIGHT_TIMER + #define RGBLED_NUM 16 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD /* * Feature disable options From ab3fbfdb3b36533125f520b540212a88349ceae6 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 22 Oct 2018 10:13:08 -0700 Subject: [PATCH 228/269] Update hardware config warnings to be more accurate Closes #3565 --- docs/hardware_avr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hardware_avr.md b/docs/hardware_avr.md index 4d81a23d7d..2c3652a02d 100644 --- a/docs/hardware_avr.md +++ b/docs/hardware_avr.md @@ -66,7 +66,7 @@ Do change the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` lines to accurately r #define DESCRIPTION A custom keyboard ``` -?> Note: On Windows and macOS the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` fields will be displayed in the list of USB devices. On Linux these values will not be visible in `lsusb`, since Linux takes that information from the list published by the USB-IF. +?> Note: On Windows and macOS the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` fields will be displayed in the list of USB devices. ?> On Linux these values will not be visible in lsusb by default, since Linux takes the information from the list maintained by [USB ID Repository](http://www.linux-usb.org/usb-ids.html) by default. lsusb will show the information reported by the device when executed with -v option. It is also present in kernel logs after plugging in the device. ### Keyboard Matrix Configuration From 9374c0c9db317932d78356b2f92a7993145ea9a2 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 22 Oct 2018 11:57:15 -0700 Subject: [PATCH 229/269] Add caveats for shifted characters (#4192) * Add caveats for shifted characters And some formatting and grammar corrections. Closes #1037 * Fix spelling of remote * Fix spelling error * Remote not Remove * Remote not Remove --- docs/feature_advanced_keycodes.md | 20 ++++++++++++++------ docs/keycodes_us_ansi_shifted.md | 4 ++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index 15109e5459..85f4fa1bfc 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -2,7 +2,7 @@ Your keymap can include keycodes that are more advanced than normal, for example keys that switch layers or send modifiers when held, but send regular keycodes when tapped. This page documents the functions that are available to you. -### Assigning Custom Names +## Assigning Custom Names People often define custom names using `#define`. For example: @@ -13,7 +13,7 @@ People often define custom names using `#define`. For example: This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable. -### Caveats +## Caveats Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored. @@ -36,7 +36,7 @@ These functions allow you to activate layers in various ways. Note that layers a Care must be taken when switching layers, it's possible to lock yourself into a layer with no way to deactivate that layer (without unplugging your keyboard.) We've created some guidelines to help users avoid the most common problems. -### Beginners +## Beginners If you are just getting started with QMK you will want to keep everything simple. Follow these guidelines when setting up your layers: @@ -44,11 +44,11 @@ If you are just getting started with QMK you will want to keep everything simple * Arrange your layers in a "tree" layout, with layer 0 as the root. Do not try to enter the same layer from more than one other layer. * In a layer's keymap, only reference higher-numbered layers. Because layers are processed from the highest-numbered (topmost) active layer down, modifying the state of lower layers can be tricky and error-prone. -### Intermediate Users +## Intermediate Users Sometimes you need more than one base layer. For example, if you want to switch between QWERTY and Dvorak, switch between layouts for different countries, or switch your layout for different videogames. Your base layers should always be the lowest numbered layers. When you have multiple base layers you should always treat them as mutually exclusive. When one base layer is on the others are off. -### Advanced Users +## Advanced Users Once you have a good feel for how layers work and what you can do, you can get more creative. The rules listed in the beginner section will help you be successful by avoiding some of the tricker details but they can be constraining, especially for ultra-compact keyboard users. Understanding how layers work will allow you to use them in more advanced ways. @@ -126,6 +126,14 @@ For convenience, QMK includes some Mod-Tap shortcuts to make common combinations |`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped | |`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped | +## Caveats + +Unfortunately, these keycodes cannot be used in Mod-Taps or Layer-Taps, since any modifiers specified in the keycode are ignored. + +Additionally, you may run into issues when using Remote Desktop Connection on Windows. Because these codes send shift very fast, Remote Desktop may miss the codes. + +To fix this, open Remote Desktop Connection, click on "Show Options", open the the "Local Resources" tab. In the keyboard section, change the drop down to "On this Computer". This will fix the issue, and allow the characters to work correctly. + # One Shot Keys One shot keys are keys that remain active until the next key is pressed, and then are released. This allows you to type keyboard combinations without pressing more than one key at a time. These keys are usually called "Sticky keys" or "Dead keys". @@ -146,7 +154,7 @@ You can control the behavior of one shot keys by defining these in `config.h`: Sometimes, you want to activate a one-shot layer as part of a macro or tap dance routine. To do this, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `set_oneshot_layer(ONESHOT_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`. For more complicated actions, take a look at the oneshot implementation in [`process_record`](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action.c#L429). -If you're having issues with OSM translating over Remote Desktop Connection, this can be fixed by opening the settings, going to the "Local Resources" tap, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue and allow OSM to function properly over Remote Desktop. +If you're having issues with OSM translating over Remote Desktop Connection, this can be fixed by clicking on "Show Options", going to the "Local Resources" tab, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue and allow OSM to function properly over Remote Desktop. # Permissive Hold diff --git a/docs/keycodes_us_ansi_shifted.md b/docs/keycodes_us_ansi_shifted.md index e7abaa7099..41d6035929 100644 --- a/docs/keycodes_us_ansi_shifted.md +++ b/docs/keycodes_us_ansi_shifted.md @@ -6,6 +6,10 @@ These keycodes correspond to characters that are "shifted" on a standard US ANSI Unfortunately, these keycodes cannot be used in Mod-Taps or Layer-Taps, since any modifiers specified in the keycode are ignored. +Additionally, you may run into issues when using Remote Desktop Connection on Windows. Because these codes send shift very fast, Remote Desktop may miss the codes. + +To fix this, open Remote Desktop Connection, click on "Show Options", open the the "Local Resources" tab. In the keyboard section, change the drop down to "On this Computer". This will fix the issue, and allow the characters to work correctly. + ## Keycodes |Key |Aliases |Description | From a2b650df474420b2003978fbf391393b2cccbd33 Mon Sep 17 00:00:00 2001 From: Michael MacDougall Date: Mon, 22 Oct 2018 14:59:40 -0400 Subject: [PATCH 230/269] Keymap: Add mmacdougall keymap (#3852) * Add mmacdougall keymap * Make requested changes --- .../levinson/keymaps/mmacdougall/README.md | 21 ++ .../keymaps/mmacdougall/keymap/config.h | 20 ++ .../keymaps/mmacdougall/keymap/keymap.c | 201 ++++++++++++++++++ .../keymaps/mmacdougall/keymap/rules.mk | 2 + 4 files changed, 244 insertions(+) create mode 100644 keyboards/levinson/keymaps/mmacdougall/README.md create mode 100644 keyboards/levinson/keymaps/mmacdougall/keymap/config.h create mode 100644 keyboards/levinson/keymaps/mmacdougall/keymap/keymap.c create mode 100644 keyboards/levinson/keymaps/mmacdougall/keymap/rules.mk diff --git a/keyboards/levinson/keymaps/mmacdougall/README.md b/keyboards/levinson/keymaps/mmacdougall/README.md new file mode 100644 index 0000000000..bae8c8a4b8 --- /dev/null +++ b/keyboards/levinson/keymaps/mmacdougall/README.md @@ -0,0 +1,21 @@ +mmacdougall's Levinson Layout +============================ + +Similar to default layout, however RGB & backlight controls are mapped to adjust layer + +## Layouts + +### Adjust (Lower + Raise) + +``` +/* Adjust (Lower + Raise) + ,-----------------------------------------------------------------------------------. + | | Reset| | | | | | | | | | Del | + |------+------+------+------+------+-------------+------+------+------+------+------| + | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + |------+------+------+------+------+------|------+------+------+------+------+------| + |B Step|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | | | + |------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | | | + `-----------------------------------------------------------------------------------' +``` diff --git a/keyboards/levinson/keymaps/mmacdougall/keymap/config.h b/keyboards/levinson/keymaps/mmacdougall/keymap/config.h new file mode 100644 index 0000000000..63dd5bc88f --- /dev/null +++ b/keyboards/levinson/keymaps/mmacdougall/keymap/config.h @@ -0,0 +1,20 @@ +#pragma once + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 12 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/levinson/keymaps/mmacdougall/keymap/keymap.c b/keyboards/levinson/keymaps/mmacdougall/keymap/keymap.c new file mode 100644 index 0000000000..dec47a7616 --- /dev/null +++ b/keyboards/levinson/keymaps/mmacdougall/keymap/keymap.c @@ -0,0 +1,201 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_ortho_4x12( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_ortho_4x12( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |B Step|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_ortho_4x12( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + BL_STEP, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); + #endif + set_single_persistent_default_layer(_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + set_single_persistent_default_layer(_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/levinson/keymaps/mmacdougall/keymap/rules.mk b/keyboards/levinson/keymaps/mmacdougall/keymap/rules.mk new file mode 100644 index 0000000000..d7463419b4 --- /dev/null +++ b/keyboards/levinson/keymaps/mmacdougall/keymap/rules.mk @@ -0,0 +1,2 @@ +RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = yes From 47dcda1087a2aa3bbb46d69c5cf682bf45650a8b Mon Sep 17 00:00:00 2001 From: Levi Olson Date: Mon, 22 Oct 2018 14:04:28 -0500 Subject: [PATCH 231/269] Diverge3 - Workman Layout (#3682) * Diverge3: Workman Programmers Layout * Diverge3: Comment Removal * Diverge3: Image Links Fixed * Diverge3: Images added * Diverge3: Images cleaned up * Diverge3: Images cleaned up * Diverge3: Removing Images * Diverge3: Improving readme.md * Diverge3: Improving readme.md * Diverge3: Add supporting Comments * Diverge3: Update readme * Diverge3: Update readme * Diverge3: Updates per comments in PR * Diverge3: Updates per comments in PR * Diverge3: Updates per comments in PR * Diverge3: Updates per comments in PR * Diverge3: Updates per comments in PR * Diverge3: Updates per comments in PR --- keyboards/diverge3/.gitignore | 1 + keyboards/diverge3/config.h | 9 +- keyboards/diverge3/keymaps/workman/config.h | 5 + keyboards/diverge3/keymaps/workman/keymap.c | 212 +++++++++++++++++++ keyboards/diverge3/keymaps/workman/readme.md | 21 ++ keyboards/diverge3/keymaps/workman/rules.mk | 1 + keyboards/diverge3/readme.md | 6 +- 7 files changed, 250 insertions(+), 5 deletions(-) create mode 100644 keyboards/diverge3/.gitignore create mode 100644 keyboards/diverge3/keymaps/workman/config.h create mode 100644 keyboards/diverge3/keymaps/workman/keymap.c create mode 100644 keyboards/diverge3/keymaps/workman/readme.md create mode 100644 keyboards/diverge3/keymaps/workman/rules.mk diff --git a/keyboards/diverge3/.gitignore b/keyboards/diverge3/.gitignore new file mode 100644 index 0000000000..722d5e71d9 --- /dev/null +++ b/keyboards/diverge3/.gitignore @@ -0,0 +1 @@ +.vscode diff --git a/keyboards/diverge3/config.h b/keyboards/diverge3/config.h index db3c6a6f76..f3ed06739a 100644 --- a/keyboards/diverge3/config.h +++ b/keyboards/diverge3/config.h @@ -31,7 +31,9 @@ along with this program. If not, see . /* key matrix size */ #define MATRIX_ROWS 10 #define MATRIX_COLS 8 -// SERIAL is the only supported +// Only SERIAL is currently supported +// By converting this to use I2C, backlight +// would/should be fully functional as well #define USE_SERIAL /* @@ -51,7 +53,7 @@ along with this program. If not, see . /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ #define DIODE_DIRECTION ROW2COL -// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_PIN C6 // #define BACKLIGHT_BREATHING // #define BACKLIGHT_LEVELS 3 @@ -61,8 +63,7 @@ along with this program. If not, see . /* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST - -/* number of backlight levels */ + /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboards/diverge3/keymaps/workman/config.h b/keyboards/diverge3/keymaps/workman/config.h new file mode 100644 index 0000000000..9829a604f1 --- /dev/null +++ b/keyboards/diverge3/keymaps/workman/config.h @@ -0,0 +1,5 @@ +#pragma once + +// place overrides here +#define PERMISSIVE_HOLD +#define TAPPING_TERM 150 \ No newline at end of file diff --git a/keyboards/diverge3/keymaps/workman/keymap.c b/keyboards/diverge3/keymaps/workman/keymap.c new file mode 100644 index 0000000000..5e681f4188 --- /dev/null +++ b/keyboards/diverge3/keymaps/workman/keymap.c @@ -0,0 +1,212 @@ +/* Copyright 2017 IslandMan93 + * + * 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 + +// KEYMAP +extern keymap_config_t keymap_config; + +#define _WORKMAN_P 0 +#define _GAME 1 +#define _RAISE 2 + +#define _______ KC_TRNS + +#define SHIFT_MOD MOD_BIT(KC_LSFT) +#define SPACE_RAISE LT(_RAISE, KC_SPC) +#define ENT_RAISE LT(_RAISE, KC_ENT) +#define PAGE_PREV S(LCTL(KC_TAB)) +#define PAGE_NEXT LCTL(KC_TAB) + +enum custom_keycodes +{ + LO_BSPC = SAFE_RANGE, + LO_1, + LO_2, + LO_3, + LO_4, + LO_5, + LO_6, + LO_7, + LO_8, + LO_9, + LO_0, +}; + +bool process_record_user(uint16_t keycode, keyrecord_t* record) +{ + if (record->event.pressed) { + switch (keycode) { + case LO_BSPC: + if (record->event.pressed) { + if (get_mods() & SHIFT_MOD) { + uint8_t current_mods = get_mods(); + clear_mods(); + SEND_STRING(SS_TAP(X_DELETE)); + set_mods(current_mods); + } else { + SEND_STRING(SS_TAP(X_BSPACE)); + } + } + return false; + case LO_1: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("1"); + set_mods(current_mods); + } else { + SEND_STRING("!"); + } + } + return false; + case LO_2: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("2"); + set_mods(current_mods); + } else { + SEND_STRING("@"); + } + } + return false; + case LO_3: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("3"); + set_mods(current_mods); + } else { + SEND_STRING("#"); + } + } + return false; + case LO_4: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("4"); + set_mods(current_mods); + } else { + SEND_STRING("$"); + } + } + return false; + case LO_5: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("5"); + set_mods(current_mods); + } else { + SEND_STRING("%"); + } + } + return false; + case LO_6: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("6"); + set_mods(current_mods); + } else { + SEND_STRING("^"); + } + } + return false; + case LO_7: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("7"); + set_mods(current_mods); + } else { + SEND_STRING("&"); + } + } + return false; + case LO_8: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("8"); + set_mods(current_mods); + } else { + SEND_STRING("*"); + } + } + return false; + case LO_9: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("9"); + set_mods(current_mods); + } else { + SEND_STRING("("); + } + } + return false; + case LO_0: + if (record->event.pressed) { + uint8_t current_mods = get_mods(); + if (current_mods & SHIFT_MOD) { + clear_mods(); + SEND_STRING("0"); + set_mods(current_mods); + } else { + SEND_STRING(")"); + } + } + return false; + } + } + return true; +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_WORKMAN_P] = LAYOUT( + KC_ESC, LO_1, LO_2, LO_3, LO_4, LO_5, LO_6, LO_6, LO_7, LO_8, LO_9, LO_0, KC_MINS, KC_ESC, + KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LPRN, KC_RPRN, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_EQL, + KC_TAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_LCBR, KC_RCBR, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_BSLS, + KC_LCTL, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_LBRC, KC_RBRC, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, + KC_LSFT, RESET, PAGE_PREV, PAGE_NEXT, KC_END, KC_LGUI, KC_LALT, TG(_GAME), LO_BSPC, ENT_RAISE, SPACE_RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL), + + [_GAME] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_ESC, + KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LPRN, KC_RPRN, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_EQL, + KC_TAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_LCBR, KC_RCBR, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_BSLS, + KC_LCTL, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_LBRC, KC_RBRC, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, + KC_LSFT, KC_F1, KC_F2, KC_3, KC_F5, KC_SPC, KC_LALT, TG(_GAME), LO_BSPC, ENT_RAISE, SPACE_RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL), + + [_RAISE] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, RESET, + _______, _______, _______, _______, _______, _______, BL_INC, KC_VOLU, _______, _______, _______, _______, _______, KC_F12, + _______, _______, _______, _______, _______, _______, BL_DEC, KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, + _______, _______, _______, _______, _______, _______, BL_BRTG, KC_MUTE, _______, _______, KC_MPRV, KC_MNXT, KC_MPLY, _______, + _______, _______, _______, _______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______), + +}; \ No newline at end of file diff --git a/keyboards/diverge3/keymaps/workman/readme.md b/keyboards/diverge3/keymaps/workman/readme.md new file mode 100644 index 0000000000..48ba482fe6 --- /dev/null +++ b/keyboards/diverge3/keymaps/workman/readme.md @@ -0,0 +1,21 @@ +# The Workman keymap for diverge3 + +Basic example of the [Workman Programming Layout](https://github.com/ojbucao/workman) which uses the `SHIFT`ed variants of the number row, by default. + +## Layer 1 - Default Layer + +Workman programming layout. + +![Workman Layout Picture](https://i.imgur.com/IOOmRfI.png) + +## Layer 2 - Gaming Layer + +Reverts the number row to the normal 1, 2, 3, etc... for better gaming compatibility. + +![Gaming Layer Picture](https://i.imgur.com/E0vmEAa.png) + +## Layer 3 - Raise Layer + +Volume and backlight controls (although backlight is not fully functional using `USE_SERIAL` in `../config.h`). + +![Raise Layer Misc Buttons Picture](https://i.imgur.com/50L3O62.png) diff --git a/keyboards/diverge3/keymaps/workman/rules.mk b/keyboards/diverge3/keymaps/workman/rules.mk new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/keyboards/diverge3/keymaps/workman/rules.mk @@ -0,0 +1 @@ + diff --git a/keyboards/diverge3/readme.md b/keyboards/diverge3/readme.md index 2ecfbca3bb..43add9d990 100644 --- a/keyboards/diverge3/readme.md +++ b/keyboards/diverge3/readme.md @@ -10,7 +10,11 @@ Make example for this keyboard (after setting up your build environment): make diverge3:default +Or for the [Workman](https://github.com/ojbucao/workman) layout: + + make diverge3:workman + See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. # Reflashing Animus -Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST) during the upload step. Then reapply your keymap through Arbites. \ No newline at end of file +Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST pins) during the upload step. Then reapply your keymap through Arbites. \ No newline at end of file From bf57587e6203e3bcabbc161c1d45b9a6cc7abfaa Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Mon, 22 Oct 2018 12:35:09 -0700 Subject: [PATCH 232/269] Keyboard: Zlant refactor and Configurator support (#3678) * Matrix/keymap refactor White space and readability updates * Configurator support Added info.json file. * Readme update Markdown formatting * Add support for ortho_4x12 keymaps * Added planck_mit layout support * Disable SWAP_HANDS_ENABLE for zlant:wanleg keymap * Disable BACKLIGHT_ENABLE for zlant:bakingpy keymap --- keyboards/zlant/info.json | 17 +++++++ keyboards/zlant/keymaps/default/keymap.c | 22 +++++----- keyboards/zlant/readme.md | 6 +-- keyboards/zlant/rules.mk | 2 + keyboards/zlant/zlant.h | 44 +++++++++++++++---- .../community/ortho_4x12/bakingpy/rules.mk | 6 ++- layouts/community/ortho_4x12/wanleg/rules.mk | 4 ++ 7 files changed, 77 insertions(+), 24 deletions(-) create mode 100644 keyboards/zlant/info.json diff --git a/keyboards/zlant/info.json b/keyboards/zlant/info.json new file mode 100644 index 0000000000..b1f20555c0 --- /dev/null +++ b/keyboards/zlant/info.json @@ -0,0 +1,17 @@ +{ + "keyboard_name": "Zlant", + "url": "", + "maintainer": "qmk", + "width": 12.75, + "height": 4, + "layouts": { + "LAYOUT_ortho_4x12": { + "key_count": 48, + "layout": [{"label":"K000", "x":0, "y":0}, {"label":"K001", "x":1, "y":0}, {"label":"K002", "x":2, "y":0}, {"label":"K003", "x":3, "y":0}, {"label":"K004", "x":4, "y":0}, {"label":"K005", "x":5, "y":0}, {"label":"K006", "x":6, "y":0}, {"label":"K007", "x":7, "y":0}, {"label":"K008", "x":8, "y":0}, {"label":"K009", "x":9, "y":0}, {"label":"K010", "x":10, "y":0}, {"label":"K011", "x":11, "y":0}, {"label":"K100", "x":0.25, "y":1}, {"label":"K101", "x":1.25, "y":1}, {"label":"K102", "x":2.25, "y":1}, {"label":"K103", "x":3.25, "y":1}, {"label":"K104", "x":4.25, "y":1}, {"label":"K105", "x":5.25, "y":1}, {"label":"K106", "x":6.25, "y":1}, {"label":"K107", "x":7.25, "y":1}, {"label":"K108", "x":8.25, "y":1}, {"label":"K109", "x":9.25, "y":1}, {"label":"K110", "x":10.25, "y":1}, {"label":"K111", "x":11.25, "y":1}, {"label":"K200", "x":0.5, "y":2}, {"label":"K201", "x":1.5, "y":2}, {"label":"K202", "x":2.5, "y":2}, {"label":"K203", "x":3.5, "y":2}, {"label":"K204", "x":4.5, "y":2}, {"label":"K205", "x":5.5, "y":2}, {"label":"K206", "x":6.5, "y":2}, {"label":"K207", "x":7.5, "y":2}, {"label":"K208", "x":8.5, "y":2}, {"label":"K209", "x":9.5, "y":2}, {"label":"K210", "x":10.5, "y":2}, {"label":"K211", "x":11.5, "y":2}, {"label":"K300", "x":0.75, "y":3}, {"label":"K301", "x":1.75, "y":3}, {"label":"K302", "x":2.75, "y":3}, {"label":"K303", "x":3.75, "y":3}, {"label":"K304", "x":4.75, "y":3}, {"label":"K305", "x":5.75, "y":3}, {"label":"K306", "x":6.75, "y":3}, {"label":"K307", "x":7.75, "y":3}, {"label":"K308", "x":8.75, "y":3}, {"label":"K309", "x":9.75, "y":3}, {"label":"K310", "x":10.75, "y":3}, {"label":"K311", "x":11.75, "y":3}] + }, + "LAYOUT_planck_mit": { + "key_count": 47, + "layout": [{"label":"K000", "x":0, "y":0}, {"label":"K001", "x":1, "y":0}, {"label":"K002", "x":2, "y":0}, {"label":"K003", "x":3, "y":0}, {"label":"K004", "x":4, "y":0}, {"label":"K005", "x":5, "y":0}, {"label":"K006", "x":6, "y":0}, {"label":"K007", "x":7, "y":0}, {"label":"K008", "x":8, "y":0}, {"label":"K009", "x":9, "y":0}, {"label":"K010", "x":10, "y":0}, {"label":"K011", "x":11, "y":0}, {"label":"K100", "x":0.25, "y":1}, {"label":"K101", "x":1.25, "y":1}, {"label":"K102", "x":2.25, "y":1}, {"label":"K103", "x":3.25, "y":1}, {"label":"K104", "x":4.25, "y":1}, {"label":"K105", "x":5.25, "y":1}, {"label":"K106", "x":6.25, "y":1}, {"label":"K107", "x":7.25, "y":1}, {"label":"K108", "x":8.25, "y":1}, {"label":"K109", "x":9.25, "y":1}, {"label":"K110", "x":10.25, "y":1}, {"label":"K111", "x":11.25, "y":1}, {"label":"K200", "x":0.5, "y":2}, {"label":"K201", "x":1.5, "y":2}, {"label":"K202", "x":2.5, "y":2}, {"label":"K203", "x":3.5, "y":2}, {"label":"K204", "x":4.5, "y":2}, {"label":"K205", "x":5.5, "y":2}, {"label":"K206", "x":6.5, "y":2}, {"label":"K207", "x":7.5, "y":2}, {"label":"K208", "x":8.5, "y":2}, {"label":"K209", "x":9.5, "y":2}, {"label":"K210", "x":10.5, "y":2}, {"label":"K211", "x":11.5, "y":2}, {"label":"K300", "x":0.75, "y":3}, {"label":"K301", "x":1.75, "y":3}, {"label":"K302", "x":2.75, "y":3}, {"label":"K303", "x":3.75, "y":3}, {"label":"K304", "x":4.75, "y":3, "w":1.25}, {"label":"K305", "x":6, "y":3, "w":1.5}, {"label":"K307", "x":7.5, "y":3, "w":1.25}, {"label":"K308", "x":8.75, "y":3}, {"label":"K309", "x":9.75, "y":3}, {"label":"K310", "x":10.75, "y":3}, {"label":"K311", "x":11.75, "y":3}] + } + } +} diff --git a/keyboards/zlant/keymaps/default/keymap.c b/keyboards/zlant/keymaps/default/keymap.c index d586c841d8..a701a7965a 100755 --- a/keyboards/zlant/keymaps/default/keymap.c +++ b/keyboards/zlant/keymaps/default/keymap.c @@ -5,16 +5,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE] = LAYOUT( - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_ESC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, - RGB_HUI, RGB_HUD, KC_LGUI, KC_LALT, KC_LSFT, KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT), + [BASE] = LAYOUT( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_ESC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ + RGB_HUI, RGB_HUD, KC_LGUI, KC_LALT, KC_LSFT, KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + ), - [FN] = LAYOUT( - KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, - KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_PGUP, KC_HOME, KC_TRNS, KC_TRNS, - RGB_VAI, RGB_VAD, RESET, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_END, KC_TRNS, KC_DEL) + [FN] = LAYOUT( + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PGUP, KC_HOME, _______, _______, \ + RGB_VAI, RGB_VAD, RESET, KC_PSCR, _______, _______, _______, _______, KC_PGDN, KC_END, _______, KC_DEL \ + ) }; diff --git a/keyboards/zlant/readme.md b/keyboards/zlant/readme.md index 0780cedeb1..8f50e6d4c7 100644 --- a/keyboards/zlant/readme.md +++ b/keyboards/zlant/readme.md @@ -4,10 +4,8 @@ A compact 40% inspired by the Plank with a staggered layout instead. -Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury) - -Hardware Supported: Zlant Prototype PCB - +Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury) +Hardware Supported: Zlant Prototype PCB Hardware Availability: Group buy soon Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/zlant/rules.mk b/keyboards/zlant/rules.mk index 482f99b223..0bc5c8aaed 100755 --- a/keyboards/zlant/rules.mk +++ b/keyboards/zlant/rules.mk @@ -54,3 +54,5 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https:/ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no RGBLIGHT_ENABLE = yes + +LAYOUTS = ortho_4x12 planck_mit diff --git a/keyboards/zlant/zlant.h b/keyboards/zlant/zlant.h index 48c7b3f409..6310a14e35 100755 --- a/keyboards/zlant/zlant.h +++ b/keyboards/zlant/zlant.h @@ -3,16 +3,42 @@ #include "quantum.h" -#define LAYOUT( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ - K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ - K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 \ +#define LAYOUT_ortho_4x12( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ - { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ - { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ } +#define LAYOUT_planck_mit( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ + K300, K301, K302, K303, K304, K305, K307, K308, K309, K310, K311 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \ + { K300, K301, K302, K303, K304, K305, K305, K307, K308, K309, K310, K311 } \ +} + +#define LAYOUT_kc_ortho_4x12( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 \ +) LAYOUT( \ + KC_##K000, KC_##K001, KC_##K002, KC_##K003, KC_##K004, KC_##K005, KC_##K006, KC_##K007, KC_##K008, KC_##K009, KC_##K010, KC_##K011, \ + KC_##K100, KC_##K101, KC_##K102, KC_##K103, KC_##K104, KC_##K105, KC_##K106, KC_##K107, KC_##K108, KC_##K109, KC_##K110, KC_##K111, \ + KC_##K200, KC_##K201, KC_##K202, KC_##K203, KC_##K204, KC_##K205, KC_##K206, KC_##K207, KC_##K208, KC_##K209, KC_##K210, KC_##K211, \ + KC_##K300, KC_##K301, KC_##K302, KC_##K303, KC_##K304, KC_##K305, KC_##K306, KC_##K307, KC_##K308, KC_##K309, KC_##K310, KC_##K311 \ +) + +#define LAYOUT LAYOUT_ortho_4x12 + #endif diff --git a/layouts/community/ortho_4x12/bakingpy/rules.mk b/layouts/community/ortho_4x12/bakingpy/rules.mk index 0d568c401a..490ebbf779 100644 --- a/layouts/community/ortho_4x12/bakingpy/rules.mk +++ b/layouts/community/ortho_4x12/bakingpy/rules.mk @@ -3,4 +3,8 @@ ifeq ($(LAYOUTS_HAS_RGB),yes) RGBLIGHT_ENABLE = yes endif AUDIO_ENABLE = no -BACKLIGHT_ENABLE = yes +ifeq ($(strip $(KEYBOARD)), zlant) + BACKLIGHT_ENABLE = no +else + BACKLIGHT_ENABLE = yes +endif diff --git a/layouts/community/ortho_4x12/wanleg/rules.mk b/layouts/community/ortho_4x12/wanleg/rules.mk index 69f377a015..fa433a6b0d 100644 --- a/layouts/community/ortho_4x12/wanleg/rules.mk +++ b/layouts/community/ortho_4x12/wanleg/rules.mk @@ -7,4 +7,8 @@ endif ifeq ($(strip $(KEYBOARD)), 4x4) SWAP_HANDS_ENABLE = no +endif + +ifeq ($(strip $(KEYBOARD)), zlant) + SWAP_HANDS_ENABLE = no endif \ No newline at end of file From 6d7745a110daad815fe5edbb35a2e33702f24aaa Mon Sep 17 00:00:00 2001 From: markspanbroek Date: Mon, 22 Oct 2018 21:37:03 +0200 Subject: [PATCH 233/269] Keyboard: Port of TMK XT USB Converter (#3619) * Converter: add XT USB converter from TMK * Converter: port TMK code for USB converter to QMK * Apply requested changes after code review by @drashna - use "pragma once" instead of include guards - use LAYOUT instead of KEYMAP - allow customisation with matrix_init_user() and matrix_scan_user() - set BOOTLOADER instead of BOOTLOADER_SIZE - Add XT_ENABLE to OPT_DEFS * Remove unnecessary lines --- keyboards/converter/xt_usb/README.md | 17 + keyboards/converter/xt_usb/config.h | 78 +++++ .../converter/xt_usb/keymaps/default/config.h | 1 + .../converter/xt_usb/keymaps/default/keymap.c | 55 ++++ keyboards/converter/xt_usb/led.c | 22 ++ keyboards/converter/xt_usb/matrix.c | 309 ++++++++++++++++++ keyboards/converter/xt_usb/rules.mk | 62 ++++ keyboards/converter/xt_usb/xt_usb.c | 1 + keyboards/converter/xt_usb/xt_usb.h | 132 ++++++++ tmk_core/protocol.mk | 5 + tmk_core/protocol/xt.h | 71 ++++ tmk_core/protocol/xt_interrupt.c | 173 ++++++++++ 12 files changed, 926 insertions(+) create mode 100644 keyboards/converter/xt_usb/README.md create mode 100644 keyboards/converter/xt_usb/config.h create mode 100644 keyboards/converter/xt_usb/keymaps/default/config.h create mode 100644 keyboards/converter/xt_usb/keymaps/default/keymap.c create mode 100644 keyboards/converter/xt_usb/led.c create mode 100644 keyboards/converter/xt_usb/matrix.c create mode 100644 keyboards/converter/xt_usb/rules.mk create mode 100644 keyboards/converter/xt_usb/xt_usb.c create mode 100644 keyboards/converter/xt_usb/xt_usb.h create mode 100644 tmk_core/protocol/xt.h create mode 100644 tmk_core/protocol/xt_interrupt.c diff --git a/keyboards/converter/xt_usb/README.md b/keyboards/converter/xt_usb/README.md new file mode 100644 index 0000000000..40b265a189 --- /dev/null +++ b/keyboards/converter/xt_usb/README.md @@ -0,0 +1,17 @@ +XT to USB keyboard converter +============================== +This is a port of TMK's converter/xt_usb to QMK. + +This firmware converts XT keyboard protocol to USB.(It supports Scan Code Set 1.) + + +Connect Wires +------------- +1. Connect **Vcc** and **GND**. +2. Connect **Clock** and **Data** line. **Clock** is on `PD1`, **Data** on `PD0` by default. And optionally you can use `PB7` for **Reset**.(Compatible to Soarer's converter) To change pin configuration edit `config.h`. +3. You need pull-up resistor. **1K-10K Ohm** will be OK. + + +XT keyboard protocol resource +------------------------------ +https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-XT-Keyboard-Protocol diff --git a/keyboards/converter/xt_usb/config.h b/keyboards/converter/xt_usb/config.h new file mode 100644 index 0000000000..963a3c6396 --- /dev/null +++ b/keyboards/converter/xt_usb/config.h @@ -0,0 +1,78 @@ +/* +Copyright 2012 Jun Wako + +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 + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6512 +#define DEVICE_VER 0x0001 +#define MANUFACTURER QMK +#define PRODUCT XT keyboard converter +#define DESCRIPTION convert XT keyboard to USB + + +/* matrix size */ +#define MATRIX_ROWS 16 // keycode bit: 3-0 +#define MATRIX_COLS 8 // keycode bit: 6-4 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \ + keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \ +) + + +//#define NO_SUSPEND_POWER_DOWN + +/* + * XT Pin interrupt + */ +#define XT_CLOCK_PORT PORTD +#define XT_CLOCK_PIN PIND +#define XT_CLOCK_DDR DDRD +#define XT_CLOCK_BIT 1 +#define XT_DATA_PORT PORTD +#define XT_DATA_PIN PIND +#define XT_DATA_DDR DDRD +#define XT_DATA_BIT 0 +#define XT_RST_PORT PORTB +#define XT_RST_PIN PINB +#define XT_RST_DDR DDRB +#define XT_RST_BIT 7 + +/* hard reset: low pulse for 500ms and after that HiZ for safety */ +#define XT_RESET() do { \ + XT_RST_PORT &= ~(1< + +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 "led.h" + +void led_set(uint8_t usb_led) { + //XT Keyboards do not have LEDs, nothing to do. +} diff --git a/keyboards/converter/xt_usb/matrix.c b/keyboards/converter/xt_usb/matrix.c new file mode 100644 index 0000000000..e2d7117b13 --- /dev/null +++ b/keyboards/converter/xt_usb/matrix.c @@ -0,0 +1,309 @@ +/* +Copyright 2011 Jun Wako +Copyright 2016 Ethan Apodaca + +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 +#include +#include "action.h" +#include "print.h" +#include "util.h" +#include "debug.h" +#include "xt.h" +#include "matrix.h" + + +static void matrix_make(uint8_t code); +static void matrix_break(uint8_t code); + +static uint8_t matrix[MATRIX_ROWS]; +#define ROW(code) (code>>3) +#define COL(code) (code&0x07) + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +void matrix_init(void) +{ + debug_enable = true; + xt_host_init(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00; + + matrix_init_quantum(); +} + +// convert E0-escaped codes into unused area +static uint8_t move_e0code(uint8_t code) { + switch(code) { + // Original IBM XT keyboard has these keys + case 0x37: return 0x54; // Print Screen + case 0x46: return 0x55; // Ctrl + Pause + case 0x1C: return 0x6F; // Keypad Enter + case 0x35: return 0x7F; // Keypad / + + // Any XT keyobard with these keys? + // http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf + // https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc + case 0x5B: return 0x5A; // Left GUI + case 0x5C: return 0x5B; // Right GUI + case 0x5D: return 0x5C; // Application + case 0x5E: return 0x5D; // Power(not used) + case 0x5F: return 0x5E; // Sleep(not used) + case 0x63: return 0x5F; // Wake (not used) + case 0x48: return 0x60; // Up + case 0x4B: return 0x61; // Left + case 0x50: return 0x62; // Down + case 0x4D: return 0x63; // Right + case 0x52: return 0x71; // Insert + case 0x53: return 0x72; // Delete + case 0x47: return 0x74; // Home + case 0x4F: return 0x75; // End + case 0x49: return 0x77; // Home + case 0x51: return 0x78; // End + case 0x1D: return 0x7A; // Right Ctrl + case 0x38: return 0x7C; // Right Alt + } + return 0x00; +} + +uint8_t matrix_scan(void) +{ + static enum { + INIT, + E0, + // Pause: E1 1D 45, E1 9D C5 + E1, + E1_1D, + E1_9D, + } state = INIT; + + uint8_t code = xt_host_recv(); + if (!code) return 0; + xprintf("%02X ", code); + switch (state) { + case INIT: + switch (code) { + case 0xE0: + state = E0; + break; + case 0xE1: + state = E1; + break; + default: + if (code < 0x80) + matrix_make(code); + else + matrix_break(code & 0x7F); + break; + } + break; + case E0: + switch (code) { + case 0x2A: + case 0xAA: + case 0x36: + case 0xB6: + //ignore fake shift + state = INIT; + break; + default: + if (code < 0x80) + matrix_make(move_e0code(code)); + else + matrix_break(move_e0code(code & 0x7F)); + state = INIT; + break; + } + break; + case E1: + switch (code) { + case 0x1D: + state = E1_1D; + break; + case 0x9D: + state = E1_9D; + break; + default: + state = INIT; + break; + } + break; + case E1_1D: + switch (code) { + case 0x45: + matrix_make(0x55); + break; + default: + state = INIT; + break; + } + break; + case E1_9D: + switch (code) { + case 0x45: + matrix_break(0x55); + break; + default: + state = INIT; + break; + } + break; + default: + state = INIT; + } + matrix_scan_quantum(); + return 1; +} + +inline +uint8_t matrix_get_row(uint8_t row) +{ + return matrix[row]; +} + +inline +static void matrix_make(uint8_t code) +{ + if (!matrix_is_on(ROW(code), COL(code))) { + matrix[ROW(code)] |= 1< + +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 + +#include "quantum.h" + +/* IBM XT keyboard layout + * ,-------. ,--------------------------------------------------------------------------. + * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck | + * |-------| |--------------------------------------------------------------------------| + * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -| + * |-------| |------------------------------------------------------|Ent|---------------| + * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| | + * |-------| |----------------------------------------------------------------------| | + * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +| + * |-------| |----------------------------------------------------------------------| | + * | F9|F10| | Alt | Space |CapsLck| 0 | . | | + * `-------' `--------------------------------------------------------------------------' + * Scan code set 1 + * ,-------. ,--------------------------------------------------------------------------. + * | 3B| 3C| | 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E | 45 | 46 | + * |-------| |--------------------------------------------------------------------------| + * | 3D| 3E| | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B | | 47| 48| 49| 4A| + * |-------| |------------------------------------------------------| 1C|---------------| + * | 3F| 40| | 1D | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| | 4B| 4C| 4D| | + * |-------| |----------------------------------------------------------------------| | + * | 41| 42| | 2A | 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 36 |*37| 4F| 50| 51| 4E| + * |-------| |----------------------------------------------------------------------| | + * | 43| 44| | 38 | 39 | 3A | 52 | 53 | | + * `-------' `--------------------------------------------------------------------------' + */ +#define LAYOUT_xt( \ + K3B,K3C, K01,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K0E, K45, K46, \ + K3D,K3E, K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B, K47,K48,K49,K4A, \ + K3F,K40, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K1C,K4B,K4C,K4D, \ + K41,K42, K2A,K2B,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34,K35,K36,K54,K4F,K50,K51,K4E, \ + K43,K44, K38, K39, K3A, K52, K53 \ +) { \ + { KC_NO, K01, K02, K03, K04, K05, K06, K07 }, \ + { K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17 }, \ + { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27 }, \ + { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, KC_NO }, \ + { K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, K41, K42, K43, K44, K45, K46, K47 }, \ + { K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \ + { K50, K51, K52, K53, K54, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ +} + +/* Extended keyboard layout + * ,-----------------------------------------------. + * |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24| + * ,---. |-----------------------------------------------| ,-----------. ,-----------. + * |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut| + * `---' `-----------------------------------------------' `-----------' `-----------' + * ,-----------------------------------------------------------. ,-----------. ,---------------. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| + * |-----------------------------------------------------------| |-----------| |---------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| + * |-----------------------------------------------------------| `-----------' |---------------| + * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,| + * |-----------------------------------------------------------| ,---. |---------------| + * |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|Ent| + * |-----------------------------------------------------------| ,-----------. |---------------| + * |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|KP=| + * `-----------------------------------------------------------' `-----------' `---------------' + * ,-----------------------------------------------. + * | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 76| + * ,---. |-----------------------------------------------| ,-----------. ,-----------. + * | 01| | 3B| 3C| 3D| 3E| 3F| 40| 41| 42| 43| 44| 57| 58| |*37| 46|*45| |e5E|e5F|e63| + * `---' `-----------------------------------------------' `-----------' `-----------' + * ,-----------------------------------------------------------. ,-----------. ,---------------. + * | 29| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 7D| 0E| |e52|e47|e49| | 45|e35| 37| 4A| + * |-----------------------------------------------------------| |-----------| |---------------| + * | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 2B | |e53|e4F|e51| | 47| 48| 49| 4E| + * |-----------------------------------------------------------| `-----------' |---------------| + * | 3A | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 00| 1C | | 4B| 4C| 4D| 7E| + * |-----------------------------------------------------------| ,---. |---------------| + * | 2A | 56| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 73| 36 | |e48| | 4F| 50| 51|e1C| + * |-----------------------------------------------------------| ,-----------. |---------------| + * | 1D|e5B| 38| 7B | 39 | 79 | 70 |e38|e5C|e5D|e1D| |e4B|e50|e4D| | 52| 53| 59| + * `-----------------------------------------------------------' `-----------' `---------------' + * e: E0-escaped codes + * *: special handling codes + */ +#define LAYOUT( \ + K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D,K6E,K76, \ + K01, K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K57,K58, K54,K46,K55, K5D,K5E,K5F, \ + K29,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K7D,K0E, K71,K74,K77, K45,K7F,K37,K4A, \ + K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B, K2B, K72,K75,K78, K47,K48,K49,K4E, \ + K3A,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28, K00,K1C, K4B,K4C,K4D,K7E, \ + K2A,K56,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34,K35, K73,K36, K60, K4F,K50,K51,K6F, \ + K1D,K5A,K38,K7B, K39, K79,K70,K7C,K5B,K5C,K7A, K61,K62,K63, K52,K53,K59 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17 }, \ + { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27 }, \ + { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37 }, \ + { K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ + { K40, K41, K42, K43, K44, K45, K46, K47 }, \ + { K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \ + { K50, K51, K52, K53, K54, K55, K56, K57 }, \ + { K58, K59, K5A, K5B, K5C, K5D, K5E, K5F }, \ + { K60, K61, K62, K63, K64, K65, K66, K67 }, \ + { K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \ + { K70, K71, K72, K73, K74, K75, K76, K77 }, \ + { K78, K79, K7A, K7B, K7C, K7D, K7E, K7F } \ +} diff --git a/tmk_core/protocol.mk b/tmk_core/protocol.mk index 54913329e6..78b9deb297 100644 --- a/tmk_core/protocol.mk +++ b/tmk_core/protocol.mk @@ -50,5 +50,10 @@ ifdef ADB_MOUSE_ENABLE OPT_DEFS += -DADB_MOUSE_ENABLE -DMOUSE_ENABLE endif +ifdef XT_ENABLE + SRC += $(PROTOCOL_DIR)/xt_interrupt.c + OPT_DEFS += -DXT_ENABLE +endif + # Search Path VPATH += $(TMK_DIR)/protocol diff --git a/tmk_core/protocol/xt.h b/tmk_core/protocol/xt.h new file mode 100644 index 0000000000..93bc5daf82 --- /dev/null +++ b/tmk_core/protocol/xt.h @@ -0,0 +1,71 @@ +/* +Copyright 2018 Jun WAKO +Copyright 2016 Ethan Apodaca + +This software is licensed with a Modified BSD License. +All of this is supposed to be Free Software, Open Source, DFSG-free, +GPL-compatible, and OK to use in both free and proprietary applications. +Additions and corrections to this file are welcome. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +* Neither the name of the copyright holders nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef XT_H +#define XT_H + +#define XT_DATA_IN() do { \ + XT_DATA_DDR &= ~(1< +Copyright 2016 Ethan Apodaca + +This software is licensed with a Modified BSD License. +All of this is supposed to be Free Software, Open Source, DFSG-free, +GPL-compatible, and OK to use in both free and proprietary applications. +Additions and corrections to this file are welcome. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +* Neither the name of the copyright holders nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include "xt.h" +#include "wait.h" +#include "print.h" + +static inline uint8_t pbuf_dequeue(void); +static inline void pbuf_enqueue(uint8_t data); +static inline bool pbuf_has_data(void); +static inline void pbuf_clear(void); + +void xt_host_init(void) +{ + XT_INT_INIT(); + XT_INT_OFF(); + + /* hard reset */ +#ifdef XT_RESET + XT_RESET(); +#endif + + /* soft reset: pull clock line down for 20ms */ + XT_DATA_LO(); + XT_CLOCK_LO(); + _delay_ms(20); + + /* input mode with pullup */ + XT_CLOCK_IN(); + XT_DATA_IN(); + + XT_INT_ON(); +} + +/* get data received by interrupt */ +uint8_t xt_host_recv(void) +{ + if (pbuf_has_data()) { + return pbuf_dequeue(); + } else { + return 0; + } +} + +ISR(XT_INT_VECT) +{ + /* + * XT signal format consits of 10 or 9 clocks and sends start bits and 8-bit data, + * which should be read on falling edge of clock. + * + * start(0), start(1), bit0, bit1, bit2, bit3, bit4, bit5, bit6, bit7 + * + * Original IBM XT keyboard sends start(0) bit while some of clones don't. + * Start(0) bit is read as low on data line while start(1) as high. + * + * https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-XT-Keyboard-Protocol + */ + static enum { + START, BIT0, BIT1, BIT2, BIT3, BIT4, BIT5, BIT6, BIT7 + } state = START; + static uint8_t data = 0; + + uint8_t dbit = XT_DATA_READ(); + + // This is needed if using PCINT which can be called on both falling and rising edge + //if (XT_CLOCK_READ()) return; + + switch (state) { + case START: + // ignore start(0) bit + if (!dbit) return; + break; + case BIT0 ... BIT7: + data >>= 1; + if (dbit) + data |= 0x80; + break; + } + if (state++ == BIT7) { + pbuf_enqueue(data); + state = START; + data = 0; + } + return; +} + +/*-------------------------------------------------------------------- + * Ring buffer to store scan codes from keyboard + *------------------------------------------------------------------*/ +#define PBUF_SIZE 32 +static uint8_t pbuf[PBUF_SIZE]; +static uint8_t pbuf_head = 0; +static uint8_t pbuf_tail = 0; +static inline void pbuf_enqueue(uint8_t data) +{ + uint8_t sreg = SREG; + cli(); + uint8_t next = (pbuf_head + 1) % PBUF_SIZE; + if (next != pbuf_tail) { + pbuf[pbuf_head] = data; + pbuf_head = next; + } else { + print("pbuf: full\n"); + } + SREG = sreg; +} +static inline uint8_t pbuf_dequeue(void) +{ + uint8_t val = 0; + + uint8_t sreg = SREG; + cli(); + if (pbuf_head != pbuf_tail) { + val = pbuf[pbuf_tail]; + pbuf_tail = (pbuf_tail + 1) % PBUF_SIZE; + } + SREG = sreg; + + return val; +} +static inline bool pbuf_has_data(void) +{ + uint8_t sreg = SREG; + cli(); + bool has_data = (pbuf_head != pbuf_tail); + SREG = sreg; + return has_data; +} +static inline void pbuf_clear(void) +{ + uint8_t sreg = SREG; + cli(); + pbuf_head = pbuf_tail = 0; + SREG = sreg; +} From 352bef99a9a1dfe4c80d8b50677c7cbd8c78f87b Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Mon, 22 Oct 2018 12:58:23 -0700 Subject: [PATCH 234/269] Keyboard: JJ40 Refactor and Configurator support (#3197) * Deleted LAYOUTS = planck_grid from rules.mk * Refactor * Configurator support * Fixed offset layout matrix macro * Readded LAYOUT_kc_ortho_4x12 matrix alias * Refactor: rename LAYOUT_offset_right macro as LAYOUT_planck_1x2uR --- keyboards/jj40/info.json | 23 +++++++++ keyboards/jj40/jj40.h | 60 +++++++++++------------ keyboards/jj40/keymaps/cockpit/keymap.c | 8 +-- keyboards/jj40/keymaps/default/keymap.c | 6 +-- keyboards/jj40/keymaps/krusli/keymap.c | 35 ++++++++++--- keyboards/jj40/keymaps/oscillope/keymap.c | 13 ++--- keyboards/jj40/rules.mk | 2 +- 7 files changed, 92 insertions(+), 55 deletions(-) create mode 100644 keyboards/jj40/info.json diff --git a/keyboards/jj40/info.json b/keyboards/jj40/info.json new file mode 100644 index 0000000000..c6416ce168 --- /dev/null +++ b/keyboards/jj40/info.json @@ -0,0 +1,23 @@ +{ + "keyboard_name": "jj40", + "url": "", + "maintainer": "qmk", + "width": 12, + "height": 4, + "layouts": { + "LAYOUT_planck_mit": { + "key_count": 47, + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3, "w":2}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}] + }, + + "LAYOUT_ortho_4x12": { + "key_count": 48, + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}] + }, + + "LAYOUT_planck_1x2uR": { + "key_count": 47, + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3, "w":2}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}] + } + } +} diff --git a/keyboards/jj40/jj40.h b/keyboards/jj40/jj40.h index bb7068fdc0..731f2ff455 100644 --- a/keyboards/jj40/jj40.h +++ b/keyboards/jj40/jj40.h @@ -25,7 +25,10 @@ along with this program. If not, see . void matrix_init_user(void); // TODO port this to other PS2AVRGB boards -#define KEYMAP_GRID( \ +#define XXX KC_NO + + +#define LAYOUT_ortho_4x12( \ K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \ K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \ K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \ @@ -34,61 +37,58 @@ void matrix_init_user(void); // TODO port this to other PS2AVRGB boards { \ { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \ { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX }, \ { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \ { K312, K311, K310, K39, K35, K36, K37, K38, K34, K33, K32, K31 } \ } -#define KEYMAP_MIT( \ + +#define LAYOUT_planck_mit( \ K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \ K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \ K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \ K31, K32, K33, K34, K35, K3X, K38, K39, K310, K311, K312 \ ) \ { \ - { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \ - { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ - { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \ - { K312, K311, K310, K39, K35, K3X, KC_NO, K38, K34, K33, K32, K31 } \ + { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \ + { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \ + { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX }, \ + { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \ + { K312, K311, K310, K39, K35, K3X, XXX, K38, K34, K33, K32, K31 } \ } -#define KEYMAP_OFFSET( \ + +#define LAYOUT_planck_1x2uR( \ K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \ K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \ K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \ K31, K32, K33, K34, K35, K36, K3X, K39, K310, K311, K312 \ ) \ { \ - { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \ - { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ - { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \ - { K312, K311, K310, K39, K35, K36, K3X, KC_NO, K34, K33, K32, K31 } \ + { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \ + { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \ + { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX }, \ + { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \ + { K312, K311, K310, K39, K35, K36, K3X, XXX, K34, K33, K32, K31 } \ } -#define KC_KEYMAP( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \ + +#define LAYOUT_kc( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \ ) \ - KEYMAP_GRID( \ + LAYOUT_ortho_4x12( \ KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b, \ KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \ KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b, \ - KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \ - ) + KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \ +) -#define KEYMAP KEYMAP_MIT +#define LAYOUT LAYOUT_planck_mit -#define LAYOUT_ortho_4x12 KEYMAP_GRID - -#define LAYOUT_2U_space KEYMAP_MIT -#define LAYOUT_planck_mit KEYMAP_MIT - -#define KC_LAYOUT_ortho_4x12 KC_KEYMAP -#define LAYOUT_kc_ortho_4x12 KC_KEYMAP +#define LAYOUT_kc_ortho_4x12 LAYOUT_kc #endif diff --git a/keyboards/jj40/keymaps/cockpit/keymap.c b/keyboards/jj40/keymaps/cockpit/keymap.c index 02deaaa8e3..12ed62b6b5 100644 --- a/keyboards/jj40/keymaps/cockpit/keymap.c +++ b/keyboards/jj40/keymaps/cockpit/keymap.c @@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | Fn | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ -[_QWERTY] = LAYOUT_2U_space( \ +[_QWERTY] = LAYOUT_planck_mit( \ KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ @@ -85,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | | | Alt |Lower|| Space | | Home | PgDn | PgUp | End | * `-----------------------------------------------------------------------------------' */ -[_LOWER] = LAYOUT_2U_space( \ +[_LOWER] = LAYOUT_planck_mit( \ KC_GRV, LT_A_OG, LT_C_CA, LT_E_OG, LT_E_DO, LT_I_OG, LT_S_CA, LT_U_OG, LT_U_MA, LT_Z_CA, KC_MINS, KC_BSPC, \ KC_TAB, LT_EXLM, LT_AT, LT_HASH, LT_DLR, LT_PERC, LT_CIRC, LT_AMPR, LT_ASTR, KC_LPRN, KC_RPRN, KC_DEL , \ KC_LSFT, KC_PEQL, KC_PPLS, KC_PMNS, KC_PIPE, KC_LBRC, KC_RBRC, KC_LABK, KC_RABK, KC_LCBR, KC_RCBR, KC_INS , \ @@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | | | Alt | | Space |Raise|| Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ -[_RAISE] = LAYOUT_2U_space( \ +[_RAISE] = LAYOUT_planck_mit( \ KC_GRV, LT_1, LT_2, LT_3, LT_4, LT_5, LT_6, LT_7, LT_8, LT_9, LT_0, KC_BSPC, \ KC_TAB, LT_4, LT_5, LT_6, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, \ KC_LSFT, LT_7, LT_8, LT_9, LT_0, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ @@ -130,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl |||Fn||| Mode | Alt | | Space |MPrev |MStop |MNext |MPlay | Lock | * `-----------------------------------------------------------------------------------' */ -[_FUNC] = LAYOUT_2U_space( \ +[_FUNC] = LAYOUT_planck_mit( \ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_CAPS, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, BL_TOGG, BL_BRTG, BL_INC, _______, _______, _______, KC_VOLU, \ KC_LSFT, KC_CALC, RGB_HUD, RGB_SAD, RGB_VAD, KC_WBAK, KC_WFWD, BL_DEC, _______, _______, KC_PSCR, KC_VOLD, \ diff --git a/keyboards/jj40/keymaps/default/keymap.c b/keyboards/jj40/keymaps/default/keymap.c index 1db887bd01..d84b01b15a 100644 --- a/keyboards/jj40/keymaps/default/keymap.c +++ b/keyboards/jj40/keymaps/default/keymap.c @@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ -[_QWERTY] = LAYOUT_2U_space( \ +[_QWERTY] = LAYOUT_planck_mit( \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ @@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ -[_LOWER] = LAYOUT_2U_space( \ +[_LOWER] = LAYOUT_planck_mit( \ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ @@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ -[_RAISE] = LAYOUT_2U_space( \ +[_RAISE] = LAYOUT_planck_mit( \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ diff --git a/keyboards/jj40/keymaps/krusli/keymap.c b/keyboards/jj40/keymaps/krusli/keymap.c index 6fea9d314e..f996fbf35b 100644 --- a/keyboards/jj40/keymaps/krusli/keymap.c +++ b/keyboards/jj40/keymaps/krusli/keymap.c @@ -26,11 +26,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | Ctrl | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ - [_QWERTY] = LAYOUT_2U_space( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - _______, KC_LCTL, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + + [_QWERTY] = LAYOUT_planck_mit( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + TO(_NUMPAD),KC_LCTL, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ ), /* Lower @@ -41,10 +42,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | | F7 | F8 | F9 | F10 | F11 | F12 | RGB | RGB | RGB | RGB |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | RGB | RGB | RGB | | | Next | Vol- | Vol+ | Play | | + * | | RGB | RGB | RGB | | | Next | Vol- | Vol+ | Play | | * `-----------------------------------------------------------------------------------' */ - [_LOWER] = LAYOUT_2U_space( \ + [_LOWER] = LAYOUT_planck_mit( \ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, _______, \ @@ -62,10 +63,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | Prev | Play | Next | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ - [_RAISE] = LAYOUT_2U_space( \ + [_RAISE] = LAYOUT_planck_mit( \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_PGUP, KC_PGDN, _______, \ _______, KC_MRWD, KC_MPLY, KC_MNXT, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ + ), + + /* Numpad + * ,-----------------------------------------------------------------------------------. + * | Esc | 7 | 8 | 9 | * | / | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | <-- | 4 | 5 | 6 | + | - | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | 1 | 2 | 3 |Enter |Enter | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Qwerty| 0 | . | . |Enter | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + [_NUMPAD] = LAYOUT_planck_mit( \ + KC_ESC, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, _______, _______, _______, _______, _______, _______, \ + KC_BSPC, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PMNS, _______, _______, _______, _______, _______, _______, \ + _______, KC_P1, KC_P2, KC_P3, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______, \ + TO(_QWERTY),KC_P0, KC_PDOT, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______ \ ) }; diff --git a/keyboards/jj40/keymaps/oscillope/keymap.c b/keyboards/jj40/keymaps/oscillope/keymap.c index 8b30f52c8b..1a42261940 100644 --- a/keyboards/jj40/keymaps/oscillope/keymap.c +++ b/keyboards/jj40/keymaps/oscillope/keymap.c @@ -17,11 +17,6 @@ along with this program. If not, see . #include QMK_KEYBOARD_H -#ifdef KEYMAP -#undef KEYMAP -#endif -#define KEYMAP KEYMAP_OFFSET - #define _QWERTY 0 #define _LOWER 1 #define _RAISE 2 @@ -51,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | OS | Alt |Lower |Shift |Raise | Space | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ -[_QWERTY] = KEYMAP( \ +[_QWERTY] = LAYOUT_planck_1x2uR( \ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, \ @@ -69,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | Lock | | | Prev | Stop | Play | Next | * `-----------------------------------------------------------------------------------' */ -[_LOWER] = KEYMAP( \ +[_LOWER] = LAYOUT_planck_1x2uR( \ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_INS, _______, _______, CC_PRN, CC_BRC, CC_CBR, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, \ RESET, KC_WBAK, KC_WFWD, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, \ @@ -87,14 +82,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Ctrl | OS | Alt | |Shift | | 0 | Home | PgDn | PgUp | End | * `-----------------------------------------------------------------------------------' */ -[_RAISE] = KEYMAP( \ +[_RAISE] = LAYOUT_planck_1x2uR( \ KC_CAPS, KC_AMPR, KC_ASTR, KC_UNDS, KC_LPRN, KC_RPRN, KC_7, KC_8, KC_9, KC_EQL, KC_BSPC, KC_DEL, \ KC_TAB, KC_DLR, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, _______, \ CC_ARRW, KC_EXLM, KC_AT, KC_HASH, KC_LCBR, KC_RCBR, KC_1, KC_2, KC_3, _______, KC_BSLS, KC_PIPE, \ _______, _______, _______, _______, _______, _______, KC_0, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ ), -[_NAV] = KEYMAP( \ +[_NAV] = LAYOUT_planck_1x2uR( \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ diff --git a/keyboards/jj40/rules.mk b/keyboards/jj40/rules.mk index 4e6f626175..697e17a014 100644 --- a/keyboards/jj40/rules.mk +++ b/keyboards/jj40/rules.mk @@ -57,4 +57,4 @@ SRC = matrix.c i2c.c backlight.c # programming options PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex -LAYOUTS = ortho_4x12 planck_mit planck_grid +LAYOUTS = ortho_4x12 planck_mit From e7451448361b0d1490f74aae6dfe4f80e86ea1ca Mon Sep 17 00:00:00 2001 From: SpacebarRacecar <42380065+SpacebarRacecar@users.noreply.github.com> Date: Mon, 22 Oct 2018 22:22:20 +0200 Subject: [PATCH 235/269] Keyboard: Prime_O layout/matrix fix (#4205) --- .../primekb/prime_o/keymaps/default/keymap.c | 38 ++++++++----------- keyboards/primekb/prime_o/prime_o.h | 30 +++++++-------- 2 files changed, 30 insertions(+), 38 deletions(-) diff --git a/keyboards/primekb/prime_o/keymaps/default/keymap.c b/keyboards/primekb/prime_o/keymaps/default/keymap.c index f48e9e51ae..a2d9e807cc 100644 --- a/keyboards/primekb/prime_o/keymaps/default/keymap.c +++ b/keyboards/primekb/prime_o/keymaps/default/keymap.c @@ -15,6 +15,8 @@ */ #include QMK_KEYBOARD_H +#define L1BS LT(1, KC_BSPC) + // Defines the keycodes used by our macros in process_record_user enum custom_keycodes { QMKBEST = SAFE_RANGE, @@ -22,31 +24,21 @@ enum custom_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( - KC_ENT, KC_P0, KC_LCTL, KC_LBRC, LT(1, KC_BSPC), KC_SPC, KC_MINS, KC_RGUI, - KC_ENT, KC_P2, KC_LSFT, KC_X, KC_V, KC_N, KC_COMM, KC_SLSH, - KC_PPLS, KC_P5, KC_TAB, KC_S, KC_F, KC_H, KC_K, KC_QUOT, - KC_PPLS, KC_P8, KC_PSCR, KC_W, KC_R, KC_Y, KC_I, KC_P, - KC_ESC, KC_PSLS, KC_NLCK, KC_2, KC_4, KC_6, KC_8, KC_0, - KC_PMNS, KC_PAST, KC_1, KC_3, KC_5, KC_7, KC_9, KC_DEL, - KC_P7, KC_P9, KC_Q, KC_E, KC_T, KC_U, KC_O, KC_BSLS, - KC_P4, KC_P6, KC_A, KC_D, KC_G, KC_J, KC_L, KC_ENT, - KC_P1, KC_P3, KC_Z, KC_C, KC_B, KC_M, KC_DOT, KC_LSFT, - KC_PDOT, KC_P0, KC_LALT, KC_RBRC, LT(1, KC_BSPC), KC_SPC, KC_EQL, KC_RCTL - ), + [0] = LAYOUT( + KC_ESC, KC_PMNS, KC_PSLS, KC_PAST, KC_NLCK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_9, KC_DEL, + KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PSCR, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_PPLS, KC_P4, KC_P5, KC_P6, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT,KC_ENT, + KC_ENT, KC_P1, KC_P2, KC_P3, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_LSFT, + KC_ENT, KC_PDOT, KC_P0, KC_P0, KC_LCTL, KC_LALT,KC_LBRC,KC_RBRC,L1BS, L1BS, KC_SPC, KC_SPC, KC_MINS,KC_EQL, KC_RGUI,KC_RCTL + ), [1] = LAYOUT( - BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_VOLD, KC_MUTE, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOWN, KC_SCLN, - KC_TRNS, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, - KC_GRV, KC_F2, KC_F4, KC_F2, KC_F4, KC_F6, KC_F8, KC_F10, - KC_F1, KC_F3, KC_F1, KC_F3, KC_F5, KC_F7, KC_F9, KC_DEL, - KC_F11, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_RGHT, KC_VOLU, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, - BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_VOLU, KC_MUTE - ), + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, + KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP, KC_TRNS,KC_TRNS,KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_SCLN,KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MUTE, + BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_DEL, KC_DEL, KC_VOLD,KC_VOLU,KC_MUTE,KC_MUTE + ), }; diff --git a/keyboards/primekb/prime_o/prime_o.h b/keyboards/primekb/prime_o/prime_o.h index 1ec7277b04..99a8054522 100644 --- a/keyboards/primekb/prime_o/prime_o.h +++ b/keyboards/primekb/prime_o/prime_o.h @@ -19,22 +19,22 @@ #include "quantum.h" #define LAYOUT( \ - K000, K001, K002, K003, K004, K005, K006, K007, K010, K011, K012, K013, K014, K015, K016, K017, \ - K020, K021, K022, K023, K024, K025, K026, K027, K030, K031, K032, K033, K034, K035, K036, K037, \ - K040, K041, K042, K043, K044, K045, K046, K047, K050, K051, K052, K053, K054, K055, K056, K057, \ - K060, K061, K062, K063, K064, K065, K066, K067, K070, K071, K072, K073, K074, K075, K076, K077, \ - K080, K081, K082, K083, K084, K085, K086, K087, K090, K091, K092, K093, K094, K095, K096, K097 \ + K001, K008, K013, K018, K023, K029, K035, K041, K046, K052, K058, K064, K071, K076, K081, K086, \ + K002, K009, K014, K019, K024, K030, K036, K042, K047, K053, K059, K065, K072, K077, K082, K087, \ + K004, K010, K015, K020, K025, K031, K037, K043, K048, K054, K060, K066, K073, K078, K083, K089, \ + K005, K011, K016, K021, K026, K032, K038, K044, K049, K055, K061, K067, K074, K079, K084, K090, \ + K007, K012, K017, K022, K028, K034, K040, K045, K051, K057, K063, K069, K075, K080, K085, K092 \ ) { \ - { K000, K001, K002, K003, K004, K005, K006, K007 }, \ - { K010, K011, K012, K013, K014, K015, K016, K017 }, \ - { K020, K021, K022, K023, K024, K025, K026, K027 }, \ - { K030, K031, K032, K033, K034, K035, K036, K037 }, \ - { K040, K041, K042, K043, K044, K045, K046, K047 }, \ - { K050, K051, K052, K053, K054, K055, K056, K057 }, \ - { K060, K061, K062, K063, K064, K065, K066, K067 }, \ - { K070, K071, K072, K073, K074, K075, K076, K077 }, \ - { K080, K081, K082, K083, K084, K085, K086, K087 }, \ - { K090, K091, K092, K093, K094, K095, K096, K097 } \ + { K007, K017, K028, K040, K051, K063, K075, K085 }, \ + { K005, K016, K026, K038, K049, K061, K074, K084 }, \ + { K004, K015, K025, K037, K048, K060, K073, K083 }, \ + { K002, K014, K024, K036, K047, K059, K072, K082 }, \ + { K001, K013, K023, K035, K046, K058, K071, K081 }, \ + { K008, K018, K029, K041, K052, K064, K076, K086 }, \ + { K009, K019, K030, K042, K053, K065, K077, K087 }, \ + { K010, K020, K031, K043, K054, K066, K078, K089 }, \ + { K011, K021, K032, K044, K055, K067, K079, K090 }, \ + { K012, K022, K034, K045, K057, K069, K080, K092 } \ } #endif From 704a2e8d3c0bd15f6c8accd5a39fb88ca6c9e2d5 Mon Sep 17 00:00:00 2001 From: SpacebarRacecar <42380065+SpacebarRacecar@users.noreply.github.com> Date: Mon, 22 Oct 2018 22:23:22 +0200 Subject: [PATCH 236/269] Keymap: Updates to personal userspace and keymaps (#4206) * - updated personal userspace - updated fc660c, niu mini and planck keymaps - added prime_o keymap * Rename README.md to readme.md --- .../fc660c/keymaps/spacebarracecar/README.md | 4 - .../fc660c/keymaps/spacebarracecar/config.h | 11 +- .../fc660c/keymaps/spacebarracecar/keymap.c | 6 +- .../fc660c/keymaps/spacebarracecar/readme.md | 5 + .../niu_mini/keymaps/spacebarracecar/config.h | 1 + .../niu_mini/keymaps/spacebarracecar/keymap.c | 17 +- .../keymaps/spacebarracecar/readme.md | 6 +- .../planck/keymaps/spacebarracecar/config.h | 2 + .../planck/keymaps/spacebarracecar/keymap.c | 19 +- .../planck/keymaps/spacebarracecar/readme.md | 7 +- .../prime_o/keymaps/spacebarracecar/config.h | 1 + .../prime_o/keymaps/spacebarracecar/keymap.c | 286 ++++++++++++++++++ .../prime_o/keymaps/spacebarracecar/readme.md | 6 + .../prime_o/keymaps/spacebarracecar/rules.mk | 22 ++ users/spacebarracecar/spacebarracecar.c | 47 ++- users/spacebarracecar/spacebarracecar.h | 25 +- 16 files changed, 411 insertions(+), 54 deletions(-) delete mode 100644 keyboards/fc660c/keymaps/spacebarracecar/README.md create mode 100644 keyboards/fc660c/keymaps/spacebarracecar/readme.md create mode 100644 keyboards/primekb/prime_o/keymaps/spacebarracecar/config.h create mode 100644 keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c create mode 100644 keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md create mode 100644 keyboards/primekb/prime_o/keymaps/spacebarracecar/rules.mk diff --git a/keyboards/fc660c/keymaps/spacebarracecar/README.md b/keyboards/fc660c/keymaps/spacebarracecar/README.md deleted file mode 100644 index 7d87ef8cf6..0000000000 --- a/keyboards/fc660c/keymaps/spacebarracecar/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# US International keymap for PCs with German set as input language - -This keymap emulates a US International layout including a deadkey layer on PCs that have German set as the input language. -This allows the use of the keyboard on any PC in Germany without the need of changing the input language. diff --git a/keyboards/fc660c/keymaps/spacebarracecar/config.h b/keyboards/fc660c/keymaps/spacebarracecar/config.h index 9c9b00656b..9d83a27000 100644 --- a/keyboards/fc660c/keymaps/spacebarracecar/config.h +++ b/keyboards/fc660c/keymaps/spacebarracecar/config.h @@ -1,9 +1,8 @@ #pragma once -// higher value means deeper actuation point, less sensitive -// be careful and only make small adjustments (steps of 1 or 2). -// too high and keys will fail to actuate. too low and keys will actuate spontaneously. -// test all keys before further adjustment. -// this should probably stay in the range +/-5. +/* +higher value means deeper actuation point, less sensitive +this should probably stay in the range +/-5. +*/ #undef ACTUATION_DEPTH_ADJUSTMENT -#define ACTUATION_DEPTH_ADJUSTMENT +2 +#define ACTUATION_DEPTH_ADJUSTMENT -1 diff --git a/keyboards/fc660c/keymaps/spacebarracecar/keymap.c b/keyboards/fc660c/keymaps/spacebarracecar/keymap.c index 2cbef10bbf..760b83b9fb 100644 --- a/keyboards/fc660c/keymaps/spacebarracecar/keymap.c +++ b/keyboards/fc660c/keymaps/spacebarracecar/keymap.c @@ -28,11 +28,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______,KC_PGDN,KC_UP, KC_PGUP,KC_HOME,XXXXXXX,XXXXXXX,XXXXXXX,GUIU, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, CU_ESCT, _______,KC_LEFT,KC_DOWN,KC_RGHT,KC_END, XXXXXXX,XXXXXXX,GUIL, GUID, GUIR, XXXXXXX,XXXXXXX, KC_ENT, _______,KC_MPRV,KC_MPLY,KC_MNXT,KC_VOLD,KC_VOLU,KC_MUTE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______, KC_PGUP, - RESET, _______,_______, _______, _______,_______,_______, KC_HOME,KC_PGDN,KC_END + RESET, _______,_______, KC_SPC, _______,_______,_______, KC_HOME,KC_PGDN,KC_END ) }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return process_record_userspace(keycode, record); +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + return true; } diff --git a/keyboards/fc660c/keymaps/spacebarracecar/readme.md b/keyboards/fc660c/keymaps/spacebarracecar/readme.md new file mode 100644 index 0000000000..88c447e75c --- /dev/null +++ b/keyboards/fc660c/keymaps/spacebarracecar/readme.md @@ -0,0 +1,5 @@ +# SpacebarRacecar US-International FC660C Keymap for German PCs + +This keymap emulates most keys of the US-International layout on PCs that have German set as input language. +This allows the use of the keyboard on any PC in Germany without the need to change any settings. +The keymap is mostly based on the US-International layout. diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/config.h b/keyboards/niu_mini/keymaps/spacebarracecar/config.h index e69de29bb2..6f70f09bee 100644 --- a/keyboards/niu_mini/keymaps/spacebarracecar/config.h +++ b/keyboards/niu_mini/keymaps/spacebarracecar/config.h @@ -0,0 +1 @@ +#pragma once diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c index b850e5fda7..c3f6fb09a1 100644 --- a/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c +++ b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c @@ -12,7 +12,7 @@ enum layers { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Base Layer +/* Base ,-----------------------------------------------------------------------------------------------------------------------. |Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace| |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| @@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), -/* Dead-Key +/* Deadkey ,-----------------------------------------------------------------------------------------------------------------------. | | | | | | | |Ü | |Ö | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| @@ -87,15 +87,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______ ), -/* Nav +/* Navigation ,-----------------------------------------------------------------------------------------------------------------------. -|Caps Lock|PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | +|ESCT |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| | | | | | | | | | |RESET | | +|RESET | | | | | | | | | | |Game | `-----------------------------------------------------------------------------------------------------------------------' */ @@ -103,12 +103,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, RGB_M_P, KC_ENT, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, RGB_TOG, RGB_MOD, RGB_HUI, CU_RGBV, _______, - RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CU_GAME + RESET, _______, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME ) }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case MO(_LOWER): if (game){ @@ -121,6 +121,7 @@ switch (keycode) { } else { return true; } + default: + return true; } - return process_record_userspace(keycode, record); } diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/readme.md b/keyboards/niu_mini/keymaps/spacebarracecar/readme.md index 88d7221869..9672743816 100644 --- a/keyboards/niu_mini/keymaps/spacebarracecar/readme.md +++ b/keyboards/niu_mini/keymaps/spacebarracecar/readme.md @@ -1,3 +1,5 @@ -# US-International like Niu Mini layout for PCs with German set as input language +# SpacebarRacecar US-International NIU Mini Keymap for German PCs -This layout aims to provide a US-International like layout for PCs that have German set as Input Language. This is useful for users living in germany, because it enables the use of the Niu Mini on any pc without having to switch the input language. It's mostly based on the Planck default layout, but adds essential features for german input, like a dead key layer to access ä, ö, ü. +This keymap emulates most keys of the US-International layout on PCs that have German set as input language. +This allows the use of the keyboard on any PC in Germany without the need to change any settings. +The keymap is mostly based on the Planck default layout but adds essential features for german input, like access to Ä, Ö, Ü, ß. diff --git a/keyboards/planck/keymaps/spacebarracecar/config.h b/keyboards/planck/keymaps/spacebarracecar/config.h index 9b55fa93aa..4f48857fe5 100644 --- a/keyboards/planck/keymaps/spacebarracecar/config.h +++ b/keyboards/planck/keymaps/spacebarracecar/config.h @@ -1,3 +1,5 @@ +#pragma once + #ifdef AUDIO_ENABLE #define STARTUP_SONG SONG(NO_SOUND) #endif diff --git a/keyboards/planck/keymaps/spacebarracecar/keymap.c b/keyboards/planck/keymaps/spacebarracecar/keymap.c index 705f78f8ea..db91231bf7 100644 --- a/keyboards/planck/keymaps/spacebarracecar/keymap.c +++ b/keyboards/planck/keymaps/spacebarracecar/keymap.c @@ -13,7 +13,7 @@ enum layers { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Base Layer +/* Base ,-----------------------------------------------------------------------------------------------------------------------. |Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace| |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| @@ -76,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LALT, KC_LGUI, KC_DOWN, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_MOD, MU_OFF ), -/* Dead-Key +/* Deadkey ,-----------------------------------------------------------------------------------------------------------------------. | | | | | | | |Ü | |Ö | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| @@ -92,18 +92,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, KC_BSPC, CU_NAV, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, CU_LSFT, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_RSFT, - KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL + KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, CU_DDQ, CU_DDQ, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL ), -/* Nav +/* Navigation ,-----------------------------------------------------------------------------------------------------------------------. -|Caps Lock|PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | +|ESCT |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| | | | | | | | | | |RESET | | +|RESET | | | | | | | | | | |Game | `-----------------------------------------------------------------------------------------------------------------------' */ @@ -111,12 +111,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, MU_ON, XXXXXXX, XXXXXXX, XXXXXXX, _______, - RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CU_GAME + RESET, _______, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME ) }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case MO(_LOWER): if (game){ @@ -143,6 +143,7 @@ switch (keycode) { layer_off(_MUSICMODE); } return true; + default: + return true; } - return process_record_userspace(keycode, record); } diff --git a/keyboards/planck/keymaps/spacebarracecar/readme.md b/keyboards/planck/keymaps/spacebarracecar/readme.md index daa9c4ad2b..c8e8134caa 100644 --- a/keyboards/planck/keymaps/spacebarracecar/readme.md +++ b/keyboards/planck/keymaps/spacebarracecar/readme.md @@ -1,4 +1,5 @@ -# US-International like Planck layout for PCs with German set as input language - -This layout aims to provide a US-International like layout for PCs that have German set as Input Language. This is useful for users living in germany, because it enables the use of the planck on any pc without having to switch the input language. It's mostly based on the Planck default layout, but adds essential features for german input, like a dead key layer to access ä, ö, ü. +# SpacebarRacecar US-International Planck Keymap for German PCs +This keymap emulates most keys of the US-International layout on PCs that have German set as input language. +This allows the use of the keyboard on any PC in Germany without the need to change any settings. +The keymap is mostly based on the Planck default layout but adds essential features for german input, like access to Ä, Ö, Ü, ß. diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/config.h b/keyboards/primekb/prime_o/keymaps/spacebarracecar/config.h new file mode 100644 index 0000000000..6f70f09bee --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/config.h @@ -0,0 +1 @@ +#pragma once diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c b/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c new file mode 100644 index 0000000000..d38ff0d1d6 --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c @@ -0,0 +1,286 @@ +#include QMK_KEYBOARD_H +#include "spacebarracecar.h" + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +#define LEFTNUM + +enum layers { + _BASE, + _LOWER, + _RAISE, + _GAME = _NAV+1 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +#ifndef LEFTNUM +/* Base +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |\ |Numlock |/ |* |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace|7 |8 |9 |- | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |4 |5 |6 |+ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |00 |0 |. |Tab | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_BASE] = LAYOUT( + CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS, + CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, KC_P4, KC_P5, KC_P6, KC_PEQL, + CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_P00, KC_P0, KC_PDOT, KC_TAB +), + +/* Lower +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |Numlock |/ |* |- | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|~ |! |" |# |$ |% |^ |& |* |( |) | |7 |8 |9 |+ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |4 |5 |6 |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |? | | | | | | | | | | |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | |00 |0 |. |Tab | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, _______, _______, _______, _______, + _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, _______, _______, _______, _______, + _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Raise +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |Numlock |/ |* |- | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |7 |8 |9 |+ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |4 |5 |6 |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | |00 |0 |. |Tab | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, _______, _______, _______, _______, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Deadkey +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +| | | | | | | | | | | | |Numlock |/ |* |- | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | |Ü | |Ö | | |7 |8 |9 |+ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Ä |ß | | | | | | | | | |4 |5 |6 |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | |" |" | | | | | |00 |0 |. |Tab | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_DEADKEY] = LAYOUT( + CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, + KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, _______, _______, _______, _______, + _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, _______, _______, _______, _______, + _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Navigation +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|Escape | | | | | | | | | | | |Numlock |/ |* |- | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|ESCT |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del |7 |8 |9 |+ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |4 |5 |6 |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|RESET | | | | | | | | | | |Game |00 |0 |. |Tab | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_NAV] = LAYOUT( + KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, _______, _______, _______, _______, + _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, + RESET, _______, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME, _______, _______, _______, _______ +), + +// Can be used to place macros on the numpad +[_GAME] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) +#endif + +#ifdef LEFTNUM +/* Base +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |\ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|+ |7 |8 |9 |Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace| +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 |Esc/Nav |A |S |D |F |G |H |J |K |L |; |' | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Enter |1 |2 |3 |(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 |RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_BASE] = LAYOUT( + KC_PMNS, KC_PAST, KC_PSLS, KC_NLCK, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, + KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, + KC_PEQL, KC_P4, KC_P5, KC_P6, CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, + KC_PENT, KC_P1, KC_P2, KC_P3, CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, + KC_BSPC, KC_PDOT, KC_P0, KC_P00, KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL +), + +/* Lower +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|+ |7 |8 |9 |~ |! |" |# |$ |% |^ |& |* |( |) | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 | |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Enter |1 |2 |3 | |? | | | | | | | | | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 | | | | | | | | | | | | | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, + _______, _______, _______, _______, _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, + _______, _______, _______, _______, _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Raise +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|+ |7 |8 |9 |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 | |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Enter |1 |2 |3 | |F7 |F8 |F9 |F10 |F11 |F12 | | | | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 | | | | | | | | | | | | | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, + _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, + _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Deadkey +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock | | | | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|+ |7 |8 |9 | | | | | | | |Ü | |Ö | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 | |Ä |ß | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Enter |1 |2 |3 | | | | | | | | | | | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 | | | | | |" |" | | | | | | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_DEADKEY] = LAYOUT( + _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, + _______, _______, _______, _______, KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, + _______, _______, _______, _______, _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, + _______, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______ +), + +/* Navigation +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock |Escape | | | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|+ |7 |8 |9 |ESCT |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Enter |1 |2 |3 | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 |RESET | | | | | | | | | | |Game | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_NAV] = LAYOUT( + _______, _______, _______, _______, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, + _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, + _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + _______, _______, _______, _______, RESET, _______, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME +), + +// Can be used to place macros on the numpad +[_GAME] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) +#endif + +}; + +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { +switch (keycode) { + case MO(_LOWER): + if (game){ + if(record->event.pressed) { + register_code(KC_SPC); + } else { + unregister_code(KC_SPC); + } + return false; + } else { + return true; + } + case CU_GAME: + if(record->event.pressed) { + if (game) + layer_on(_GAME); + else + layer_off(_GAME); + } + return false; + default: + return true; + } +} diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md b/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md new file mode 100644 index 0000000000..eb8da3fa78 --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md @@ -0,0 +1,6 @@ +# SpacebarRacecar US-International Prime_O Keymap for German PCs + +This keymap emulates most keys of the US-International layout on PCs that have German set as input language. +This allows the use of the keyboard on any PC in Germany without the need to change any settings. +The keymap is mostly based on the Planck default layout but adds essential features for german input, like access to Ä, Ö, Ü, ß. +Righthand Numpad is enabled by default, enable lefthand Numpad with #define LEFTNUM. diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/rules.mk b/keyboards/primekb/prime_o/keymaps/spacebarracecar/rules.mk new file mode 100644 index 0000000000..f50334d5ec --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/rules.mk @@ -0,0 +1,22 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +# Userspace defines +GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language diff --git a/users/spacebarracecar/spacebarracecar.c b/users/spacebarracecar/spacebarracecar.c index 404331f8df..f7048869ed 100644 --- a/users/spacebarracecar/spacebarracecar.c +++ b/users/spacebarracecar/spacebarracecar.c @@ -1,18 +1,29 @@ #include "spacebarracecar.h" #ifdef GERMAN_ENABLE +// These indicate if left and right shift are physically pressed bool lshift = false; bool rshift = false; + +// Interrupt and times for space cadet shift bool lshiftp = false; bool rshiftp = false; uint16_t lshift_timer = 0; uint16_t rshift_timer = 0; +// Number of items that are saved in prev_kcs uint8_t prev_indx = 0; +// Used to save the last 6 actual keycodes activated by frankenkeycodes uint16_t prev_kcs[6] = {0, 0, 0, 0, 0, 0}; +// If true the deadkey characters grave and circonflexe are not automatically escaped bool esct = false; +/* +Used to add a keycode to a prev_kcs to remember it. +When full the last code gets discarded and replaced by +the new one. +*/ void add_to_prev(uint16_t kc){ for (int i=0; ievent.pressed) { + timer_timeout(); game = !game; } - return false; + // allows keymap to execute further commands when CU_GAME is pressed, for example enabling a macro layer + return process_record_keymap(keycode, record) && false; case KC_LGUI: case KC_RGUI: + if (record->event.pressed) + timer_timeout(); if (game) return false; else @@ -77,11 +102,21 @@ bool process_record_userspace(uint16_t keycode, keyrecord_t *record) { } layer_off(_NAV); } - return false; + return false; + case KC_P00: + if(record->event.pressed) { + timer_timeout(); + register_code(KC_P0); + unregister_code(KC_P0); + register_code(KC_P0); + unregister_code(KC_P0); + } + return false; #ifdef RGBLIGHT_ENABLE case CU_RGBV: if(record->event.pressed) { + timer_timeout(); if (rgblight_get_val()+32>255) rgblight_sethsv(rgblight_get_hue(), rgblight_get_sat(), 31); else @@ -133,6 +168,7 @@ bool process_record_userspace(uint16_t keycode, keyrecord_t *record) { return false; case CU_ESCT: if(record->event.pressed) { + timer_timeout(); esct = !esct; } return false; @@ -282,6 +318,7 @@ bool process_record_userspace(uint16_t keycode, keyrecord_t *record) { case KC_LCTL: case KC_RCTL: if(!record->event.pressed) { + timer_timeout(); unregister_code(KC_Z); unregister_code(KC_Y); } @@ -300,6 +337,6 @@ bool process_record_userspace(uint16_t keycode, keyrecord_t *record) { #endif } - return true; + return process_record_keymap(keycode, record); } } diff --git a/users/spacebarracecar/spacebarracecar.h b/users/spacebarracecar/spacebarracecar.h index 42879d2efb..1e18253510 100644 --- a/users/spacebarracecar/spacebarracecar.h +++ b/users/spacebarracecar/spacebarracecar.h @@ -4,13 +4,14 @@ #include "keymap_german.h" enum userspace_layers { - _DEADKEY = 14, //change if more than 16 layers are required + _DEADKEY = 14, // Change if more than 16 layers are required _NAV }; enum userspace_custom_keycodes { CU_GAME = SAFE_RANGE, // Toggle game mode on/off CU_NAV, // NAV | ESC + KC_P00, // Numpad double zero #ifdef GERMAN_ENABLE CU_LSFT, // LSFT | ( @@ -52,10 +53,8 @@ enum userspace_custom_keycodes { }; #ifdef GERMAN_ENABLE -// these save the current shift status extern bool lshift; extern bool rshift; -// stuff for custom space cadet shift extern bool lshiftp; extern bool rshiftp; extern uint16_t lshift_timer; @@ -63,14 +62,12 @@ extern uint16_t rshift_timer; extern uint8_t prev_indx; extern uint16_t prev_kcs[6]; - void add_to_prev(uint16_t kc); void unreg_prev(void); extern bool esct; #endif -// stuff for nav esc extern bool navesc; extern uint16_t navesc_timer; @@ -78,7 +75,7 @@ extern bool game; void timer_timeout(void); -bool process_record_userspace(uint16_t keycode, keyrecord_t *record); +bool process_record_keymap(uint16_t keycode, keyrecord_t *record); #define CTRLX LCTL(KC_X) #define CTRLC LCTL(KC_C) @@ -89,9 +86,9 @@ bool process_record_userspace(uint16_t keycode, keyrecord_t *record); #define GUIL LGUI(KC_LEFT) #define GUIR RGUI(KC_RIGHT) -// -// Templates for Keys, with custom shifted and non shifted Characters -// +/* +Templates for Keys, with custom shifted and non shifted Characters +*/ // Normal shift status #define SHIFT_NORM(kc1, kc2) \ @@ -139,7 +136,7 @@ if (record->event.pressed) { \ } \ return false; -// All shift +// Always shifted #define SHIFT_ALL(kc1, kc2) \ if (record->event.pressed) { \ timer_timeout(); \ @@ -164,7 +161,7 @@ if (record->event.pressed) { \ } \ return false; -// All no shift +// Never shifted #define SHIFT_NO(kc1, kc2) \ if (record->event.pressed) { \ timer_timeout(); \ @@ -188,7 +185,7 @@ if (record->event.pressed) { \ } \ return false; -// All algr +// Always AltGr #define SHIFT_ALGR(kc1, kc2) \ if (record->event.pressed) { \ timer_timeout(); \ @@ -208,7 +205,7 @@ if (record->event.pressed) { \ } \ return false; -// Different keycode for ctrl +// Different keycode when Ctrl is pressed #define CTRL(kc1, kc2) \ if(record->event.pressed) { \ timer_timeout(); \ @@ -227,7 +224,7 @@ if(record->event.pressed) { \ } \ return false; -// Umlaute for deadkey layer +// Template for keys on deadkey layer (mostly Umlaute) #define UML(kc) \ if(record->event.pressed) { \ timer_timeout(); \ From ca56c2145f25ab04daa6bb96f31b948be9e57ef2 Mon Sep 17 00:00:00 2001 From: skullY Date: Tue, 9 Oct 2018 09:40:10 -0700 Subject: [PATCH 237/269] Fold install_dependencies.sh into linux_install.sh and freebsd_install.sh --- util/freebsd_install.sh | 18 ++++++ util/install_dependencies.sh | 118 ----------------------------------- util/linux_install.sh | 116 +++++++++++++++++++++++++--------- util/qmk_install.sh | 13 ++-- 4 files changed, 114 insertions(+), 151 deletions(-) create mode 100644 util/freebsd_install.sh delete mode 100755 util/install_dependencies.sh diff --git a/util/freebsd_install.sh b/util/freebsd_install.sh new file mode 100644 index 0000000000..25ea80a7fc --- /dev/null +++ b/util/freebsd_install.sh @@ -0,0 +1,18 @@ +#!/bin/sh +pkg update +pkg install -y \ + git \ + wget \ + gmake \ + gcc \ + zip \ + unzip \ + avr-binutils \ + avr-gcc \ + avr-libc \ + dfu-programmer \ + dfu-util \ + arm-none-eabi-gcc \ + arm-none-eabi-binutils \ + arm-none-eabi-newlib \ + diffutils diff --git a/util/install_dependencies.sh b/util/install_dependencies.sh deleted file mode 100755 index 227c86f87f..0000000000 --- a/util/install_dependencies.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env bash -# This script will attempt to setup the Linux dependencies for compiling QMK/TMK - -# This could probably go much lower, but since we are including an Arch vagrant, -# making it the first match makes sense - -if [[ -n "$(type -P pacman )" ]]; then - # Arch linux and derivatives like Apricity - # Future improvements: - # Allow user to speed up package installs using powerpill/wget tweaks - # Always run the pacman mirror update script if possible when vagrant comes up - # This will ensure that users never get stalled on a horribly slow mirror - pacman -Syyu --needed --noconfirm - pacman -S --needed --noconfirm \ - base-devel \ - avr-gcc \ - avr-binutils \ - avr-libc \ - dfu-util \ - arm-none-eabi-gcc \ - arm-none-eabi-binutils \ - arm-none-eabi-newlib \ - git \ - diffutils - -elif [[ -n "$(type -P apt-get)" ]]; then - # Debian and derivatives - # This block performs completely non-interactive updates {{ - export DEBIAN_FRONTEND=noninteractive - export DEBCONF_NONINTERACTIVE_SEEN=true - echo "grub-pc hold" | dpkg --set-selections - apt-get -y update - apt-get -y --allow-unauthenticated upgrade \ - -o Dpkg::Options::="--force-confdef" \ - -o Dpkg::Options::="--force-confold" - # }} - apt-get install -y \ - build-essential \ - gcc \ - unzip \ - wget \ - zip \ - gcc-avr \ - binutils-avr \ - avr-libc \ - dfu-programmer \ - dfu-util \ - gcc-arm-none-eabi \ - binutils-arm-none-eabi \ - libnewlib-arm-none-eabi \ - git \ - diffutils - -elif [[ -n "$(type -P yum)" ]]; then - # Fedora, CentOS or RHEL and derivatives - yum -y makecache && yum -y update - yum -y install \ - gcc \ - glibc-headers \ - kernel-devel \ - kernel-headers \ - make \ - perl \ - git \ - wget \ - avr-binutils \ - avr-gcc \ - avr-libc \ - dfu-programmer \ - dfu-util \ - arm-none-eabi-gcc-cs \ - arm-none-eabi-newlib \ - git \ - diffutils - # The listed eabi pacackes do unfortunately not exist for CentOS, - # But at least in Fedora they do, so try to install them anyway - # TODO: Build them from sources, if the installation fails - -elif [[ -n "$(type -P zypper)" ]]; then - # openSUSE - zypper --non-interactive refresh && zypper --non-interactive update - zypper --non-interactive install \ - git \ - make \ - gcc \ - kernel-devel \ - patch \ - wget \ - dfu-programmer \ - git \ - diffutils - # TODO: The avr and eabi tools are not available as default packages, so we need - # another way to install them - -elif [[ -n "$(type -P pkg)" ]]; then - # FreeBSD - pkg update - pkg install -y \ - git \ - wget \ - gmake \ - gcc \ - zip \ - unzip \ - avr-binutils \ - avr-gcc \ - avr-libc \ - dfu-programmer \ - dfu-util \ - arm-none-eabi-gcc \ - arm-none-eabi-binutils \ - arm-none-eabi-newlib \ - diffutils -elif [[ -n "$(type -P emerge)" ]]; then - echo 'Please check that your gcc is built with the multilib use flag enabled.' - emerge -vq sys-devel/crossdev - USE="-openmp -hardened -sanitize -vtv" crossdev -s4 --stable --g =4.9.4 --portage --verbose --target avr -fi diff --git a/util/linux_install.sh b/util/linux_install.sh index 0e4e26fd96..a6a0532768 100755 --- a/util/linux_install.sh +++ b/util/linux_install.sh @@ -1,40 +1,100 @@ #!/bin/sh -if grep ID /etc/os-release | grep -qE "rhel|fedora"; then - # RPM based OS - sudo dnf install gcc unzip wget zip dfu-util dfu-programmer avr-gcc \ - avr-libc binutils-avr32-linux-gnu arm-none-eabi-gcc-cs \ - arm-none-eabi-binutils-cs arm-none-eabi-newlib + +# Note: This file uses tabs to indent. Please don't mix tabs and spaces. + +GENTOO_WARNING="This script will make a USE change in order to ensure that that QMK works on your system. All changes will be sent to the the file /etc/portage/package.use/qmk_firmware -- please review it, and read Portage's output carefully before installing any packages on your system. You will also need to ensure that your kernel is compiled with support for the keyboard chip that you are using (e.g. enable Arduino for the Pro Micro). Further information can be found on the Gentoo wiki." + +if grep ID /etc/os-release | grep -qE "fedora"; then + sudo dnf install \ + arm-none-eabi-binutils-cs \ + arm-none-eabi-gcc-cs \ + arm-none-eabi-newlib + avr-binutils \ + avr-gcc \ + avr-libc \ + binutils-avr32-linux-gnu \ + dfu-util \ + dfu-programmer \ + diffutils \ + git \ + gcc \ + glibc-headers \ + kernel-devel \ + kernel-headers \ + make \ + perl \ + unzip \ + wget \ + zip + elif grep ID /etc/os-release | grep -qE 'debian|ubuntu'; then + DEBIAN_FRONTEND=noninteractive + DEBCONF_NONINTERACTIVE_SEEN=true + export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN sudo apt-get update - sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc \ - dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi \ - libnewlib-arm-none-eabi + sudo apt-get install \ + build-essential \ + avr-libc \ + binutils-arm-none-eabi \ + binutils-avr \ + dfu-programmer \ + dfu-util \ + diffutils \ + gcc \ + gcc-arm-none-eabi \ + gcc-avr \ + git \ + libnewlib-arm-none-eabi \ + unzip \ + wget \ + zip + elif grep ID /etc/os-release | grep -q 'arch\|manjaro'; then - # install avr-gcc 8.1 until 8.3 is available. See #3657 for details of the bug. - sudo pacman -U https://archive.archlinux.org/packages/a/avr-gcc/avr-gcc-8.1.0-1-x86_64.pkg.tar.xz - sudo pacman -S gcc unzip wget zip avr-binutils avr-libc \ - dfu-util arm-none-eabi-gcc arm-none-eabi-binutils \ - arm-none-eabi-newlib + # install avr-gcc 8.1 until 8.3 is available. See #3657 for details of the bug. + sudo pacman -U https://archive.archlinux.org/packages/a/avr-gcc/avr-gcc-8.1.0-1-x86_64.pkg.tar.xz + sudo pacman -S \ + arm-none-eabi-binutils \ + arm-none-eabi-gcc \ + arm-none-eabi-newlib \ + avr-binutils \ + avr-libc \ + avr-gcc \ + base-devel \ + dfu-util \ + diff-utils \ + gcc \ + git \ + unzip \ + wget \ + zip git clone https://aur.archlinux.org/dfu-programmer.git /tmp/dfu-programmer cd /tmp/dfu-programmer makepkg -sic rm -rf /tmp/dfu-programmer/ + elif grep ID /etc/os-release | grep -q gentoo; then - echo "This script will make a USE change in order to ensure that that QMK works on your system. All changes will be sent to the the file /etc/portage/package.use/qmk_firmware -- please review it, and read Portage's output carefully before installing any packages on your system. You will also need to ensure that your kernel is compiled with support for the keyboard chip that you are using (e.g. enable Arduino for the Pro Micro). Further information can be found on the Gentoo wiki." - echo -n "Proceed (y/N)? " - old_stty_cfg=$(stty -g) - stty raw -echo - answer=$( while ! head -c 1 | grep -i '[ny]' ;do true ;done ) - stty $old_stty_cfg - if echo "$answer" | grep -iq "^y" ;then - sudo touch /etc/portage/package.use/qmkfirmware - echo "sys-devel/gcc multilib" | sudo tee --append /etc/portage/package.use/qmkfirmware > /dev/null - sudo emerge -auN sys-devel/gcc app-arch/unzip app-arch/zip net-misc/wget app-mobilephone/dfu-util sys-devel/crossdev dev-embedded/avrdude - sudo crossdev -s4 --stable --g =4.9.4 --portage --verbose --target avr - echo Done! - else - echo "Quitting..." -fi + echo GENTOO_WARNING | fmt + echo -n "Proceed (y/N)? " + old_stty_cfg=$(stty -g) + stty raw -echo + answer=$( while ! head -c 1 | grep -i '[ny]' ;do true ;done ) + stty $old_stty_cfg + if echo "$answer" | grep -iq "^y" ;then + sudo touch /etc/portage/package.use/qmkfirmware + echo "sys-devel/gcc multilib" | sudo tee --append /etc/portage/package.use/qmkfirmware > /dev/null + sudo emerge -auN \ + app-arch/unzip \ + app-arch/zip \ + app-mobilephone/dfu-util \ + net-misc/wget \ + sys-devel/gcc \ + sys-devel/crossdev dev-embedded/avrdude + sudo crossdev -s4 --stable --g =4.9.4 --portage --verbose --target avr + echo Done! + else + echo "Quitting..." + fi + else echo "Sorry, we don't recognize your OS. Help us by contributing support!" echo diff --git a/util/qmk_install.sh b/util/qmk_install.sh index 6f35e4c71b..76ecf5fc01 100755 --- a/util/qmk_install.sh +++ b/util/qmk_install.sh @@ -7,16 +7,19 @@ case $(uname -a) in *Darwin*) exec "${util_dir}/macos_install.sh" ;; - *Linux*Microsoft*) + *Linux*Microsoft*) exec "${util_dir}/wsl_install.sh" - ;; + ;; + *FreeBSD*) + exec "${util_dir}/freebsd_install.sh" + ;; *Linux*) exec "${util_dir}/linux_install.sh" ;; MSYS_NT*|MINGW64_NT*|MINGW32_NT*) exec "${util_dir}/msys2_install.sh" ;; - *) - echo "Environment not supported. Please see https://docs.qmk.fm for details on how to configure the QMK Firmware build tools manually." - ;; + *) + echo "Environment not supported. Please see https://docs.qmk.fm for details on how to configure the QMK Firmware build tools manually." + ;; esac From 79d495f51dd0d49a4e0ba84f3bcec588dba498b5 Mon Sep 17 00:00:00 2001 From: skullY Date: Tue, 9 Oct 2018 10:21:13 -0700 Subject: [PATCH 238/269] Add opensuse packages provided by @isolatedvirus --- util/linux_install.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/util/linux_install.sh b/util/linux_install.sh index a6a0532768..5186e31f2b 100755 --- a/util/linux_install.sh +++ b/util/linux_install.sh @@ -95,6 +95,20 @@ elif grep ID /etc/os-release | grep -q gentoo; then echo "Quitting..." fi +elif grep ID /etc/os-release | grep -qE "opensuse|tumbleweed"; then + sudo zypper install \ + avr-libc \ + cross-avr-gcc8 \ + cross-avr-binutils \ + cross-arm-none-newlib-devel \ + cross-arm-binutils cross-arm-none-newlib-devel \ + dfu-tool \ + dfu-programmer \ + gcc \ + unzip \ + wget \ + zip + else echo "Sorry, we don't recognize your OS. Help us by contributing support!" echo From 11c4c711310d297a378f029b7ffa1409d5a04dbc Mon Sep 17 00:00:00 2001 From: skullY Date: Tue, 9 Oct 2018 11:35:31 -0700 Subject: [PATCH 239/269] Fixup the WSL install --- util/win_shared_install.sh | 3 --- util/wsl_install.sh | 7 +------ 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/util/win_shared_install.sh b/util/win_shared_install.sh index f24ec08e8e..c7517881ee 100644 --- a/util/win_shared_install.sh +++ b/util/win_shared_install.sh @@ -18,11 +18,8 @@ function install_utils { wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip' unzip teensy_loader_cli_windows.zip - # This URL has changed and I can't find the new location. Commenting out until we figure out the new URL or determine this isn't needed. -skullY echo "Installing Atmel Flip" wget 'http://ww1.microchip.com/downloads/en/DeviceDoc/Flip%20Installer%20-%203.4.7.112.exe' - # This is the JRE-less installer, if we need the larger bundled with JRE installer, use this: - #wget 'http://ww1.microchip.com/downloads/en/DeviceDoc/JRE%20-%20Flip%20Installer%20-%203.4.7.112.exe' mv Flip\ Installer\ \-\ 3.4.7.112.exe FlipInstaller.exe echo "Downloading the QMK driver installer" diff --git a/util/wsl_install.sh b/util/wsl_install.sh index d11c78ac71..c2c206d2b9 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -15,20 +15,15 @@ fi while true; do echo echo "Do you want to install all toolchain dependencies needed for compiling QMK?" - echo "This will run install_dependencies.sh, which calls apt-get upgrade." echo "If you don't want that, you can install the dependencies manually." read -p "(Y/N) " res case $res in - [Yy]* ) sudo ./install_dependencies.sh; break;; + [Yy]* ) ./linux_install.sh; break;; [Nn]* ) break;; * ) echo "Invalid answer";; esac done -echo "Installing dependencies needed for the installation (unzip, wget)" -echo "This will ask for the sudo password" -sudo apt-get install unzip wget - download_dir=wsl_downloaded source "$dir/win_shared_install.sh" From 552b1cccec12f2685f594df5b58afc11ca1fbc74 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Thu, 18 Oct 2018 21:33:50 -0700 Subject: [PATCH 240/269] Update the installation script PR (#4167) * Update docs to use qmk_install * Update Vagrantfile to use qmk_install --- Vagrantfile | 2 +- docs/getting_started_build_tools.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 08de5f7f52..9c414b2bcb 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -59,7 +59,7 @@ Vagrant.configure(2) do |config| # add a # before ,args: and run 'vagrant up' to get a working # non-updated box and then attempt to troubleshoot or open a Github issue - config.vm.provision "shell", run: "always", path: "./util/install_dependencies.sh", args: "-update" + config.vm.provision "shell", run: "always", path: "./util/qmk_install.sh", args: "-update" config.vm.post_up_message = <<-EOT diff --git a/docs/getting_started_build_tools.md b/docs/getting_started_build_tools.md index 88f3642b28..587dece4a1 100644 --- a/docs/getting_started_build_tools.md +++ b/docs/getting_started_build_tools.md @@ -8,7 +8,7 @@ Note: If it is your first time here, Check out the "Complete Newbs guide" instea ## Linux -To ensure you are always up to date, you can just run `sudo util/install_dependencies.sh`. That should always install all the dependencies needed. **This will run `apt-get upgrade`.** +To ensure you are always up to date, you can just run `sudo util/qmk_install.sh`. That should always install all the dependencies needed. **This will run `apt-get upgrade`.** You can also install things manually, but this documentation might not be always up to date with all requirements. From 418a886ae44833eb323e2e902b92759369063339 Mon Sep 17 00:00:00 2001 From: "Colin T.A. Gray" Date: Mon, 22 Oct 2018 14:56:52 -0400 Subject: [PATCH 241/269] adds 'dfu-util' to macos_install.sh --- util/macos_install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/macos_install.sh b/util/macos_install.sh index 7bfb105ecb..c31be99d22 100755 --- a/util/macos_install.sh +++ b/util/macos_install.sh @@ -22,4 +22,4 @@ fi brew tap osx-cross/avr brew tap PX4/homebrew-px4 brew update -brew install avr-gcc@7 gcc-arm-none-eabi dfu-programmer avrdude +brew install avr-gcc@7 gcc-arm-none-eabi dfu-programmer avrdude dfu-util From e26a7b0ed8af7b6b4e99fee718ca265fcc8961f1 Mon Sep 17 00:00:00 2001 From: fougner Date: Mon, 22 Oct 2018 23:01:45 +0200 Subject: [PATCH 242/269] Keyboard: initial support for XD87 (#4182) * Keyboard: initial support for XD87 * Add row/col pin configuration for XD87 PCB * Add default ISO layout * Fix incorrect KC in default_tkl_iso The KC_NUBS is duplicated in the TKL ISO layout. Compare with the fullsize ISO which has a KC_NUHS in the corresponding place. * Add support for community layouts * Add TKL ANSI layout * Enable TKL ISO/ANSI community layout * Fix LAYOUT_all * Configure backlighting for XD87 * Various documentation changes --- keyboards/xd87/config.h | 227 ++++++++++++++++++ keyboards/xd87/info.json | 0 keyboards/xd87/keymaps/default/config.h | 19 ++ keyboards/xd87/keymaps/default/keymap.c | 68 ++++++ keyboards/xd87/keymaps/default/readme.md | 1 + keyboards/xd87/readme.md | 26 ++ keyboards/xd87/rules.mk | 84 +++++++ keyboards/xd87/xd87.c | 43 ++++ keyboards/xd87/xd87.h | 70 ++++++ .../default/tkl_iso/default_tkl_iso/keymap.c | 2 +- 10 files changed, 539 insertions(+), 1 deletion(-) create mode 100644 keyboards/xd87/config.h create mode 100644 keyboards/xd87/info.json create mode 100644 keyboards/xd87/keymaps/default/config.h create mode 100644 keyboards/xd87/keymaps/default/keymap.c create mode 100644 keyboards/xd87/keymaps/default/readme.md create mode 100644 keyboards/xd87/readme.md create mode 100644 keyboards/xd87/rules.mk create mode 100644 keyboards/xd87/xd87.c create mode 100644 keyboards/xd87/xd87.h diff --git a/keyboards/xd87/config.h b/keyboards/xd87/config.h new file mode 100644 index 0000000000..3682af7409 --- /dev/null +++ b/keyboards/xd87/config.h @@ -0,0 +1,227 @@ +/* +Copyright 2018 Alexander Fougner + +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 + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER KP Republic +#define PRODUCT XD87 TKL +#define DESCRIPTION KP Republic XD87 + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 17 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ + + +#define MATRIX_ROW_PINS { D1, B0, B1, C7, D3, D5 } + +#define MATRIX_COL_PINS { E6, F0, F1, F4, F5, F6, F7, B5, B6, C6, D4, D6, D7, B4, B2, B3, D2 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN D0 +// #define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 + +// #define RGB_DI_PIN E2 +// #ifdef RGB_DI_PIN +// #define RGBLIGHT_ANIMATIONS +// #define RGBLED_NUM 16 +// #define RGBLIGHT_HUE_STEP 8 +// #define RGBLIGHT_SAT_STEP 8 +// #define RGBLIGHT_VAL_STEP 8 +// #endif + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + diff --git a/keyboards/xd87/info.json b/keyboards/xd87/info.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/xd87/keymaps/default/config.h b/keyboards/xd87/keymaps/default/config.h new file mode 100644 index 0000000000..ed56340c39 --- /dev/null +++ b/keyboards/xd87/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 Alexander Fougner + * + * 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 + +// place overrides here diff --git a/keyboards/xd87/keymaps/default/keymap.c b/keyboards/xd87/keymaps/default/keymap.c new file mode 100644 index 0000000000..b31db9b577 --- /dev/null +++ b/keyboards/xd87/keymaps/default/keymap.c @@ -0,0 +1,68 @@ +/* Copyright 2018 Alexander Fougner + * + * 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 + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_tkl_iso(\ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, \ + KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \ + KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ) +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/xd87/keymaps/default/readme.md b/keyboards/xd87/keymaps/default/readme.md new file mode 100644 index 0000000000..41baff9435 --- /dev/null +++ b/keyboards/xd87/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for xd87 \ No newline at end of file diff --git a/keyboards/xd87/readme.md b/keyboards/xd87/readme.md new file mode 100644 index 0000000000..0b9389740d --- /dev/null +++ b/keyboards/xd87/readme.md @@ -0,0 +1,26 @@ +# XD87 + +![XD87](https://i.imgur.com/qVyOies.jpg) + + +- Keyboard Maintainer: [Alexander Fougner](https://github.com/fougner) +- Hardware Supported: XD87 PCB v1.1 +- Hardware Availability: + - [KPrepublic.com](https://kprepublic.com/products/xd87-xd87-xd80-custom-mechanical-keyboard-kit80-supports-tkg-tools-support-underglow-rgb-pcb-programmed-gh80-kle) + - [AliExpress](https://www.aliexpress.com/item/xd87-XD87-XD80-Custom-Mechanical-Keyboard-Kit80-Supports-TKG-TOOLS-Support-Underglow-RGB-PCB-programmed-gh80/32892540743.html) + +Make example for this keyboard (after setting up your build environment): + + make xd87:default + +It also supports the tkl_ansi and tkl_iso community layouts: + + # Build firmware with ANSI layout + make xd87:default_tkl_ansi + # Build firmware with ISO layout + make xd87:default_tkl_iso + + +The keyboard can be reset to bootloader by using bootmagic (space+b by default) or short out the small connector between the Delete and End keys. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/xd87/rules.mk b/keyboards/xd87/rules.mk new file mode 100644 index 0000000000..39540e701d --- /dev/null +++ b/keyboards/xd87/rules.mk @@ -0,0 +1,84 @@ +# MCU name +#MCU = at90usb1286 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) + +# Supported layouts +LAYOUTS = tkl_ansi tkl_iso diff --git a/keyboards/xd87/xd87.c b/keyboards/xd87/xd87.c new file mode 100644 index 0000000000..da07c71d88 --- /dev/null +++ b/keyboards/xd87/xd87.c @@ -0,0 +1,43 @@ +/* Copyright 2018 Alexander Fougner + * + * 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 "xd87.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/xd87/xd87.h b/keyboards/xd87/xd87.h new file mode 100644 index 0000000000..c4df290a3b --- /dev/null +++ b/keyboards/xd87/xd87.h @@ -0,0 +1,70 @@ +/* Copyright 2018 Alexander Fougner + * + * 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 . + */ +#ifndef XD87_H +#define XD87_H + +#include "quantum.h" + +#define LAYOUT_all( \ + 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, K3E, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, \ + K50, K51, K52, K55, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) { \ +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F G */ \ +/* 0 */ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \ +/* 1 */ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \ +/* 2 */ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G }, \ +/* 3 */ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, KC_NO, KC_NO }, \ +/* 4 */ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G }, \ +/* 5 */ { K50, K51, K52, KC_NO, KC_NO, K55, KC_NO, KC_NO, K58, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G } \ +} + +#define LAYOUT_tkl_ansi( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4F, \ + K50, K51, K52, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) LAYOUT_all( \ + K00, KC_NO, 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, KC_NO, K1D, KC_NO, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, \ + K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, KC_NO, KC_NO, K4F, KC_NO, \ + K50, K51, K52, KC_NO, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) + +#define LAYOUT_tkl_iso( \ + K00, 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, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4F, \ + K50, K51, K52, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) LAYOUT_all( \ + K00, KC_NO, 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, KC_NO, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, KC_NO, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, KC_NO, KC_NO, K4F, KC_NO, \ + K50, K51, K52, KC_NO, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) + +#endif \ No newline at end of file diff --git a/layouts/default/tkl_iso/default_tkl_iso/keymap.c b/layouts/default/tkl_iso/default_tkl_iso/keymap.c index f29ef2267f..eb4c48d657 100644 --- a/layouts/default/tkl_iso/default_tkl_iso/keymap.c +++ b/layouts/default/tkl_iso/default_tkl_iso/keymap.c @@ -5,7 +5,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUBS, KC_ENT, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ) \ From 5dc41446aae0b429c72ca020cb20efb3356afee5 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Mon, 22 Oct 2018 14:18:47 -0700 Subject: [PATCH 243/269] Keyboard: Chimera LS refactor and Configurator support (#3715) * Matrix/keymap refactor - Deleted `KC_KEYMAP` macro - Renamed `KEYMAP` macro to `LAYOUT_ortho_4x12` - Default keymap updated to current QMK standards - #include QMK_KEYBOARD_H - Refactored from `KC_KEYMAP` to `LAYOUT_ortho_4x12` macro - `action_get_macro()` deprecated in favor of `process_record_user()` `rules.mk` *not* updated to include `LAYOUTS = ortho_4x12` because I have no idea if and how that works on a split and/or wireless keyboard. * readme cleanup: markdown formatting * Add Configurator support * added support for ortho_4x12 layout * Macro and readme updates Macros updated to use `KC_NO` directly. Readme updates and cleanup. --- keyboards/chimera_ls/chimera_ls.h | 46 ++-- keyboards/chimera_ls/info.json | 13 + keyboards/chimera_ls/keymaps/default/keymap.c | 227 +++++++++--------- keyboards/chimera_ls/readme.md | 10 +- keyboards/chimera_ls/rules.mk | 4 +- 5 files changed, 152 insertions(+), 148 deletions(-) create mode 100644 keyboards/chimera_ls/info.json diff --git a/keyboards/chimera_ls/chimera_ls.h b/keyboards/chimera_ls/chimera_ls.h index b39bcf2047..bb99684e5f 100644 --- a/keyboards/chimera_ls/chimera_ls.h +++ b/keyboards/chimera_ls/chimera_ls.h @@ -50,32 +50,30 @@ // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array -#define KC_KEYMAP( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \ - k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \ - k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \ - k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \ -) \ -{ \ - { KC_##k43, KC_##k45, KC_##k34, KC_##k11, KC_##k23, KC_##k40, KC_##k38, KC_##k25, KC_##k00, KC_##k12 }, \ - { KC_##k31, KC_##k44, KC_##k46, KC_##k35, KC_##k22, KC_##k28, KC_##k39, KC_##k37, KC_##k24, KC_##k13 }, \ - { KC_##k30, KC_##k32, KC_##k33, KC_##k47, KC_##k09, KC_##k29, KC_##k27, KC_##k26, KC_##k36, KC_##k02 }, \ - { KC_##k19, KC_##k20, KC_##k21, KC_##k42, KC_##k18, KC_##k16, KC_##k15, KC_##k14, KC_##k41, KC_##k17 }, \ - { KC_##k06, KC_##k07, KC_##k08, KC_##k10, KC_NO, KC_##k05, KC_##k04, KC_##k03, KC_##k01, KC_NO }, \ +#define LAYOUT_ortho_4x12( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \ + k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \ + k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \ + k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \ + ) { \ + { k43, k45, k34, k11, k23, k40, k38, k25, k00, k12 }, \ + { k31, k44, k46, k35, k22, k28, k39, k37, k24, k13 }, \ + { k30, k32, k33, k47, k09, k29, k27, k26, k36, k02 }, \ + { k19, k20, k21, k42, k18, k16, k15, k14, k41, k17 }, \ + { k06, k07, k08, k10, KC_NO, k05, k04, k03, k01, KC_NO } \ } -#define KEYMAP( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \ - k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \ - k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \ - k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \ -) \ -{ \ - { k43, k45, k34, k11, k23, k40, k38, k25, k00, k12 }, \ - { k31, k44, k46, k35, k22, k28, k39, k37, k24, k13 }, \ - { k30, k32, k33, k47, k09, k29, k27, k26, k36, k02 }, \ - { k19, k20, k21, k42, k18, k16, k15, k14, k41, k17 }, \ - { k06, k07, k08, k10, KC_NO, k05, k04, k03, k01, KC_NO }, \ +#define LAYOUT_kc_ortho_4x12( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \ + k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \ + k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \ + k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \ + ) { \ + { KC_##k43, KC_##k45, KC_##k34, KC_##k11, KC_##k23, KC_##k40, KC_##k38, KC_##k25, KC_##k00, KC_##k12 }, \ + { KC_##k31, KC_##k44, KC_##k46, KC_##k35, KC_##k22, KC_##k28, KC_##k39, KC_##k37, KC_##k24, KC_##k13 }, \ + { KC_##k30, KC_##k32, KC_##k33, KC_##k47, KC_##k09, KC_##k29, KC_##k27, KC_##k26, KC_##k36, KC_##k02 }, \ + { KC_##k19, KC_##k20, KC_##k21, KC_##k42, KC_##k18, KC_##k16, KC_##k15, KC_##k14, KC_##k41, KC_##k17 }, \ + { KC_##k06, KC_##k07, KC_##k08, KC_##k10, KC_NO, KC_##k05, KC_##k04, KC_##k03, KC_##k01, KC_NO } \ } diff --git a/keyboards/chimera_ls/info.json b/keyboards/chimera_ls/info.json new file mode 100644 index 0000000000..077a760796 --- /dev/null +++ b/keyboards/chimera_ls/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "Chimera LS", + "url": "", + "maintainer": "qmk", + "width": 13, + "height": 4, + "layouts": { + "LAYOUT_ortho_4x12": { + "key_count": 48, + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}] + } + } +} diff --git a/keyboards/chimera_ls/keymaps/default/keymap.c b/keyboards/chimera_ls/keymaps/default/keymap.c index 493b8eee15..0affeef389 100644 --- a/keyboards/chimera_ls/keymaps/default/keymap.c +++ b/keyboards/chimera_ls/keymaps/default/keymap.c @@ -1,7 +1,7 @@ // this is the style you want to emulate. // This is the canonical layout file for the Quantum project. If you want to add another keyboard, -#include "chimera_ls.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -24,168 +24,163 @@ enum chimera_lets_split_layers #define KC_SCTR MT(MOD_LCTL, KC_RBRC) #define KC_SPLT MT(MOD_LALT, KC_MINS) #define KC_MESC LT(_MACROS, KC_ESC) -#define KC_INCL M(0) -#define KC_PULL M(1) -#define KC_PUSH M(2) -#define KC_SCAP M(3) -#define KC_SCOF M(4) #define KC_CAD LALT(LCTL(KC_DEL)) +enum custom_keycodes { + KC_INCL = SAFE_RANGE, + KC_PULL, + KC_PUSH, + KC_SCAP, + KC_SCOF +}; + #define LONGPRESS_DELAY 150 //#define LAYER_TOGGLE_DELAY 300 -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO -#define KC_ KC_TRNS - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = KC_KEYMAP( - //,----+----+----+----+----+----. ,----+----+----+----+----+----. - MESC, Q , W , E , R , T , Y , U , I , O , P ,BSPC, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - TAB , A , S , D , F , G , H , J , K , L ,SCLN, ENT, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - LSPO, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,RSPC, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - SCTL,SPFN,SPLT,AMPR,NMPD,SPC , SPC ,SYMB,ASTR,EXLM,LBRC,SCTR - //`----+----+----+----+----+----' `----+----+----+----+----+----' + [_QWERTY] = LAYOUT_ortho_4x12( + //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. + KC_MESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_SCTL, KC_SPFN, KC_SPLT, KC_AMPR, KC_NMPD, KC_SPC, KC_SPC, KC_SYMB, KC_ASTR, KC_EXLM, KC_LBRC, KC_SCTR + //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------' ), - [_CAPS] = KC_KEYMAP( - //,----+----+----+----+----+----. ,----+----+----+----+----+----. - , , , , , , , , , , , , - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , , , , , , ,COLN, , - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , , , , , , , , , - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , ,UNDS, , , , , , , , , - //`----+----+----+----+----+----' `----+----+----+----+----+----' + [_CAPS] = LAYOUT_ortho_4x12( + //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, KC_UNDS, _______, _______, _______, _______, _______, _______, _______, _______, _______ + //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------' ), - [_NUMPAD] = KC_KEYMAP( - //,----+----+----+----+----+----. ,----+----+----+----+----+----. - , , , , , , , 7 , 8 , 9 ,MINS,QUOT, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , , , , 4 , 5 , 6 ,PLUS, ENT, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - LSFT, , , , , , , 1 , 2 , 3 ,ASTR, EQL, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , ,BSPC, SPC , 0 , 0 , DOT,SLSH, - //`----+----+----+----+----+----' `----+----+----+----+----+----' + [_NUMPAD] = LAYOUT_ortho_4x12( + //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. + _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_MINS, KC_QUOT, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, KC_PLUS, KC_ENT, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_ASTR, KC_EQL, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, KC_BSPC, KC_SPC, KC_0, KC_0, KC_DOT, KC_SLSH, _______ + //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------' ), - [_SYMBOLS] = KC_KEYMAP( - //,----+----+----+----+----+----. ,----+----+----+----+----+----. - ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,QUOT, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - F1 , F2 , F3 , F4 , F5 , F6 , TILD,EQL ,UNDS,LCBR,RCBR,PIPE, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - F7 , F8 , F9 , F10, F11, F12, GRV ,PLUS,MINS,LBRC,RBRC,BSLS, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , NO ,BSPC, SPC , , , , , - //`----+----+----+----+----+----' `----+----+----+----+----+----' + [_SYMBOLS] = LAYOUT_ortho_4x12( + //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_QUOT, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TILD, KC_EQL, KC_UNDS, KC_LCBR, KC_RCBR, KC_PIPE, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_GRV, KC_PLUS, KC_MINS, KC_LBRC, KC_RBRC, KC_BSLS, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, XXXXXXX, KC_BSPC, KC_SPC, _______, _______, _______, _______, _______ + //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------' ), - [_NAV] = KC_KEYMAP( - //,----+----+----+----+----+----. ,----+----+----+----+----+----. - , , , , DEL,BSPC, ,HOME, UP , END, INS,PSCR, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , ,LSFT,LCTL, ENT, ,LEFT,DOWN,RGHT, DEL, , - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , , , ,PGUP,PGDN, , , , - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , ,DEL , , , , , , - //`----+----+----+----+----+----' `----+----+----+----+----+----' + [_NAV] = LAYOUT_ortho_4x12( + //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. + _______, _______, _______, _______, KC_DEL, KC_BSPC, _______, KC_HOME, KC_UP, KC_END, KC_INS, KC_PSCR, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, KC_LSFT, KC_LCTL, KC_ENT, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______ + //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------' ), - [_MACROS] = KC_KEYMAP( - //,----+----+----+----+----+----. ,----+----+----+----+----+----. - , , , , , , , ,INCL, , , , - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , ,CAD , , , , , , , , , - //|----+----+----+----+----+----| |----+----+----+----+----+----| - SCAP, , , , , , , ,PULL,PUSH, ,SCAP, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , , , , , , , , - //`----+----+----+----+----+----' `----+----+----+----+----+----' + [_MACROS] = LAYOUT_ortho_4x12( + //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. + _______, _______, _______, _______, _______, _______, _______, _______, KC_INCL, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, KC_CAD, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_SCAP, _______, _______, _______, _______, _______, _______, _______, KC_PULL, KC_PUSH, _______, KC_SCAP, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------' ), }; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch(keycode) { /* include some kind of library or header */ - case 0: + case KC_INCL: if (record->event.pressed) { - SEND_STRING("#include <>"); - return MACRO( T(LEFT), END); + SEND_STRING("#include <>" SS_TAP(X_LEFT) ); + return false; } break; - case 1: + case KC_PULL: if (record->event.pressed) { - SEND_STRING("git pull"); - return MACRO( T(ENT), END ); + SEND_STRING("git pull" SS_TAP(X_ENTER) ); + return false; } break; - case 2: + case KC_PUSH: if (record->event.pressed){ - SEND_STRING("git push"); - return MACRO( T(ENT), END ); + SEND_STRING("git push" SS_TAP(X_ENTER) ); + return false; } break; - case 3: + case KC_SCAP: if (record->event.pressed){ layer_on(_CAPS); register_code(KC_CAPSLOCK); unregister_code(KC_CAPSLOCK); + return false; } break; - case 4: + case KC_SCOF: if (record->event.pressed){ layer_off(_CAPS); register_code(KC_CAPSLOCK); unregister_code(KC_CAPSLOCK); + return false; } break; } - return MACRO_NONE; + return true; }; - + void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - - switch (layer) { - case _QWERTY: - set_led_green; - break; - case _CAPS: - set_led_white; - break; - case _NUMPAD: - set_led_blue; - break; - case _SYMBOLS: - set_led_red; - break; - case _NAV: - set_led_magenta; - break; - case _MACROS: - set_led_cyan; - break; - default: - set_led_green; - break; - } + uint8_t layer = biton32(layer_state); + + switch (layer) { + case _QWERTY: + set_led_green; + break; + case _CAPS: + set_led_white; + break; + case _NUMPAD: + set_led_blue; + break; + case _SYMBOLS: + set_led_red; + break; + case _NAV: + set_led_magenta; + break; + case _MACROS: + set_led_cyan; + break; + default: + set_led_green; + break; + } }; diff --git a/keyboards/chimera_ls/readme.md b/keyboards/chimera_ls/readme.md index 689d9ee614..0170dd8a8f 100644 --- a/keyboards/chimera_ls/readme.md +++ b/keyboards/chimera_ls/readme.md @@ -2,18 +2,14 @@ ![Chimera LS](https://imgur.com/FOGlO4M.jpg) -A wireless version of the let's split: a split 40% ortholinear keyboard +A wireless version of the Let's Split: a split 40% ortholinear keyboard. Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle) - - -Hardware Supported: Chimera LS PCB, WaveShare core nRF51822 - +Hardware Supported: Chimera LS PCB, WaveShare core nRF51822 Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ls/gerbers) Make example for this keyboard (after setting up your build environment): make chimera_ls:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. - +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/chimera_ls/rules.mk b/keyboards/chimera_ls/rules.mk index af08f7a879..497e58677e 100644 --- a/keyboards/chimera_ls/rules.mk +++ b/keyboards/chimera_ls/rules.mk @@ -46,7 +46,7 @@ F_USB = $(F_CPU) # Bootloader # This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded +# different sizes, comment this out, and the correct address will be loaded # automatically (+60). See bootloader.mk for all options. BOOTLOADER = caterina @@ -80,3 +80,5 @@ UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID USB = /dev/ttyACM0 + +LAYOUTS = ortho_4x12 From 8421a898209da6bbebddfbc93e4c10af878130a9 Mon Sep 17 00:00:00 2001 From: SpacebarRacecar <42380065+SpacebarRacecar@users.noreply.github.com> Date: Mon, 22 Oct 2018 23:20:31 +0200 Subject: [PATCH 244/269] added ASCII representation to dz60 iso-split layout and adjusted it so that it's consistent with the other layouts. (#4207) --- keyboards/dz60/dz60.h | 42 ++++++++++++++++++++++++++-------------- keyboards/dz60/info.json | 8 ++++---- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h index 36ddb7ade1..2cf2eec7a0 100644 --- a/keyboards/dz60/dz60.h +++ b/keyboards/dz60/dz60.h @@ -196,20 +196,6 @@ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \ } -// iso split -#define LAYOUT_60_iso_split( \ - K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \ - K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ - K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ - K400, K401, K403, K404, K406, K408, K410, K411, K413, K414 \ -) { \ - { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \ - { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ - { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \ - { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \ -} /* LAYOUT_60_iso_5x1u * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ @@ -238,6 +224,33 @@ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d, k4e } \ } +/* LAYOUT_60_iso_split + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │ + * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬────┤ + * │40 │41 │43 │44 │46 │48 │4a │4b │4d │4e │ + * └────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘ +*/ +#define LAYOUT_60_iso_split( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k40, k41, k43, k44, k46, k48, k4a, k4b, k4d, k4e \ +) { \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \ + { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \ +} + /* LAYOUT_60_b_ansi (maximized DZ60 Plate B layout for ANSI) * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │ @@ -292,4 +305,5 @@ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \ } + #endif diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json index 1f621360bf..a163cc6a46 100644 --- a/keyboards/dz60/info.json +++ b/keyboards/dz60/info.json @@ -28,10 +28,6 @@ "LAYOUT_60_iso": { "key_count": 62, "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] - }, - "LAYOUT_60_iso_split": { - "key_count": 64, - "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] }, "LAYOUT_60_hhkb": { "key_count": 60, @@ -41,6 +37,10 @@ "key_count": 63, "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"|", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"~", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}] }, + "LAYOUT_60_iso_split": { + "key_count": 64, + "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + }, "LAYOUT_60_b_ansi": { "key_count": 66, "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"\\", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"Alt", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}] From 95619bdaca2c48156b4749270199d4a50437f44e Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 22 Oct 2018 14:39:11 -0700 Subject: [PATCH 245/269] Fix file location for mmacdougal's keymap --- keyboards/levinson/keymaps/mmacdougall/{keymap => }/config.h | 0 keyboards/levinson/keymaps/mmacdougall/{keymap => }/keymap.c | 0 keyboards/levinson/keymaps/mmacdougall/{keymap => }/rules.mk | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename keyboards/levinson/keymaps/mmacdougall/{keymap => }/config.h (100%) rename keyboards/levinson/keymaps/mmacdougall/{keymap => }/keymap.c (100%) rename keyboards/levinson/keymaps/mmacdougall/{keymap => }/rules.mk (100%) diff --git a/keyboards/levinson/keymaps/mmacdougall/keymap/config.h b/keyboards/levinson/keymaps/mmacdougall/config.h similarity index 100% rename from keyboards/levinson/keymaps/mmacdougall/keymap/config.h rename to keyboards/levinson/keymaps/mmacdougall/config.h diff --git a/keyboards/levinson/keymaps/mmacdougall/keymap/keymap.c b/keyboards/levinson/keymaps/mmacdougall/keymap.c similarity index 100% rename from keyboards/levinson/keymaps/mmacdougall/keymap/keymap.c rename to keyboards/levinson/keymaps/mmacdougall/keymap.c diff --git a/keyboards/levinson/keymaps/mmacdougall/keymap/rules.mk b/keyboards/levinson/keymaps/mmacdougall/rules.mk similarity index 100% rename from keyboards/levinson/keymaps/mmacdougall/keymap/rules.mk rename to keyboards/levinson/keymaps/mmacdougall/rules.mk From cb1e45b4efdc685134c0dbc35100e2fb99c5b006 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 22 Oct 2018 14:07:18 -0700 Subject: [PATCH 246/269] Include quantum.h to fix travis CI errors --- keyboards/dz60/keymaps/marianas/keymap.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/dz60/keymaps/marianas/keymap.h b/keyboards/dz60/keymaps/marianas/keymap.h index 01de5c6e2c..00e51cea2c 100644 --- a/keyboards/dz60/keymaps/marianas/keymap.h +++ b/keyboards/dz60/keymaps/marianas/keymap.h @@ -1,3 +1,5 @@ +#include "quantum.h" + //Control #define MO_FNLR MO(FN_LAYER) #define BACKSPC KC_BSPC From 572c316e7dfb0bcd495ce09e068078593fd4ec82 Mon Sep 17 00:00:00 2001 From: Scott Gorsuch Date: Tue, 23 Oct 2018 12:29:35 -0400 Subject: [PATCH 247/269] Keymap: Fix missing 4 key (#4219) --- keyboards/iris/keymaps/dbroqua/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/iris/keymaps/dbroqua/keymap.c b/keyboards/iris/keymaps/dbroqua/keymap.c index eed288c50d..4cbb8af540 100644 --- a/keyboards/iris/keymaps/dbroqua/keymap.c +++ b/keyboards/iris/keymaps/dbroqua/keymap.c @@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----+-----+-----+-----+-----+-----+ ,-----+-----+-----+-----+-----+-----+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BSPC| * |-----+-----+-----+-----+-----+-----+ +-----+-----+-----+-----+-----+-----+ - * | RST | 1 | 2 | 3 | 5 | 5 | | 6 | 7 | 8 | 9 | 0 | | + * | RST | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | * +-----+-----+-----+-----+-----+-----+ +-----+-----+-----+-----+-----+-----+ * | DEL | | LEFT| RGHT| UP | [ | | ] | 4 | 5 | 6 | + | | | * +-----+-----+-----+-----+-----+-----+-----. ,-----+-----+-----+-----+-----+-----+-----+ From 03d16db942fe0352cc3b3522a1c778b7e60a4b3a Mon Sep 17 00:00:00 2001 From: Peter Roe Date: Tue, 23 Oct 2018 13:52:57 -0500 Subject: [PATCH 248/269] Keyboard: Ported ADB-to-USB converter from TMK to QMK (#3931) * Ported ADB-to-USB converter from TMK to QMK * Updated pull request with reviewer suggestions. * Removed precompiled header file type (gch) from gitignore per reviewer request * Update keyboards/converter/adb_usb/matrix.c Changed instances of matrix_init_quantum to matrix_scan_quantum. * Update keyboards/converter/adb_usb/matrix.c Co-Authored-By: 13-bit --- keyboards/converter/adb_usb/README.md | 83 ++++++ keyboards/converter/adb_usb/adb_usb.c | 3 + keyboards/converter/adb_usb/adb_usb.h | 109 +++++++ keyboards/converter/adb_usb/config.h | 43 +++ .../converter/adb_usb/keymaps/13bit/keymap.c | 26 ++ .../adb_usb/keymaps/default/keymap.c | 13 + keyboards/converter/adb_usb/led.c | 27 ++ keyboards/converter/adb_usb/led.h | 43 +++ keyboards/converter/adb_usb/matrix.c | 267 ++++++++++++++++++ keyboards/converter/adb_usb/rules.mk | 73 +++++ 10 files changed, 687 insertions(+) create mode 100644 keyboards/converter/adb_usb/README.md create mode 100644 keyboards/converter/adb_usb/adb_usb.c create mode 100644 keyboards/converter/adb_usb/adb_usb.h create mode 100644 keyboards/converter/adb_usb/config.h create mode 100644 keyboards/converter/adb_usb/keymaps/13bit/keymap.c create mode 100644 keyboards/converter/adb_usb/keymaps/default/keymap.c create mode 100644 keyboards/converter/adb_usb/led.c create mode 100644 keyboards/converter/adb_usb/led.h create mode 100644 keyboards/converter/adb_usb/matrix.c create mode 100644 keyboards/converter/adb_usb/rules.mk diff --git a/keyboards/converter/adb_usb/README.md b/keyboards/converter/adb_usb/README.md new file mode 100644 index 0000000000..ed71750080 --- /dev/null +++ b/keyboards/converter/adb_usb/README.md @@ -0,0 +1,83 @@ +ADB-to USB Keyboard Converter +============================= +This firmware converts Apple Desktop Bus (ADB) keyboard protocol to USB so that you can use an ADB keyboard on a modern computer. It works on the PJRC Teensy 2.0 and other USB AVR MCUs (ATMega32U4, AT90USB64/128, etc) and needs at least 10KB of flash memory. + + +This is a port of the TMK ADB-to-USB converter to QMK. For information on QMK, please consult the following: +https://github.com/qmk/qmk_firmware +https://docs.qmk.fm + + +Wiring +------ +Connect the VCC, GND, and DATA lines of the ADB keyboard to the controller (Teensy 2.0 or similar). By default the DATA line uses port PD0. The Power SW line is unused by the converter. + +ADB female socket from the front: + + ,--_--. + / o4 3o \ 1: DATA + | o2 1o | 2: Power SW + - === - 3: VCC + `-___-' 4: GND + +This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable. Using an external pull-up resistor (1K-10K Ohm) between the DATA and VCC lines is strongly recommended. + +Pull-up resistor: + + Keyboard Converter + ,------. + 5V------+------|VCC | + | | | + [R] | | + | | | + Signal--+------|PD0 | + | | + GND------------|GND | + `------' + R: 1K Ohm resistor + + +Define following macros for ADB connection in config.h if you use other than port PD0. + + ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT + + +Building the Firmware +------------------------------------------ +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + + +Keymap +------ +To build the default keymap run this command: + + $ make converter/adb_usb:default + +You may add your own keymap to the converter/adb_usb/keymaps directory, as you would with any other QMK-powered keyboard. + +To build your custom keymap, change the build command to: + + $ make converter/adb_usb:my_keymap + +Where 'my_keymap' is the name of your custom keymap directory. + + +Locking Caps Lock +---------------- +Many old ADB keyboards use a locking switch for the caps lock key. This converter supports the locking caps lock key by default. + + +Notes +----- +Non-extended ADB keyboards make no distinction between the left and right modifiers, +i.e. the keycode for the left modifier will be sent even if the right modifier + +The Apple Extended Keyboard and Apple Extended Keyboard II can differentiate between the left and right modifiers except for the GUI key (Windows/Command). + +Most ADB keyboards have no diodes in its matrix so they are not NKRO, +though the ADB protocol itself supports it. See protocol/adb.c for more info. + + +QMK Port Changelog +--------- +- 2018/09/16 - Initial release. diff --git a/keyboards/converter/adb_usb/adb_usb.c b/keyboards/converter/adb_usb/adb_usb.c new file mode 100644 index 0000000000..7026d62751 --- /dev/null +++ b/keyboards/converter/adb_usb/adb_usb.c @@ -0,0 +1,3 @@ +#include "adb_usb.h" +#include +#include "quantum.h" diff --git a/keyboards/converter/adb_usb/adb_usb.h b/keyboards/converter/adb_usb/adb_usb.h new file mode 100644 index 0000000000..491db95f1c --- /dev/null +++ b/keyboards/converter/adb_usb/adb_usb.h @@ -0,0 +1,109 @@ +/* +Copyright 2011,2012,2013 Jun Wako + +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 . + +Ported to QMK by Peter Roe +*/ + +#ifndef KEYMAP_COMMON_H +#define KEYMAP_COMMON_H + +#include "quantum.h" + +/* M0115/M3501 Apple Extended Keyboard ANSI + * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---. + * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr| + * `---' `---------------' `---------------' `---------------' `-----------' `---' + * ,-----------------------------------------------------------. ,-----------. ,---------------. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| =| /| *| + * |-----------------------------------------------------------| |-----------| |---------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| -| + * |-----------------------------------------------------------| `-----------' |---------------| + * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| +| + * |-----------------------------------------------------------| ,---. |---------------| + * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| | + * |-----------------------------------------------------------| ,-----------. |-----------|Ent| + * |Ctrl |Opt |Cmd | Space | |Opt |Ctrl | |Lef|Dow|Rig| | 0| .| | + * `-----------------------------------------------------------' `-----------' `---------------' + */ +#define LAYOUT_ext_ansi( \ + K35, K7A,K78,K63,K76,K60,K61,K62,K64,K65,K6D,K67,K6F, K69,K6B,K71, K7F, \ + K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \ + K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \ + K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \ + K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \ + K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { K08, K09, KC_NO, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17 }, \ + { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27 }, \ + { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, KC_NO, K35, K36, K37 }, \ + { K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO, }, \ + { KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \ + { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO, }, \ + { KC_NO, KC_NO, K52, K53, K54, K55, K56, K57 }, \ + { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO, }, \ + { K60, K61, K62, K63, K64, K65, KC_NO, K67 }, \ + { KC_NO, K69, KC_NO, K6B, KC_NO, K6D, KC_NO, K6F }, \ + { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \ + { K78, K79, K7A, K7B, K7C, K7D, KC_NO, K7F } \ +} + +/* M0116 Apple Standard Keyboard ANSI + * +-------+ + * | power | + * +-------+ + * +---+---+---+---+---+---+---+---+---+---+---+---+---+-----+ +---+---+---+---+ + * |esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | bks | |clr| = | / | * | + * +---------------------------------------------------------+ +---+---+---+---+ + * | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | | | 7 | 8 | 9 | + | + * +-----------------------------------------------------+ | +---+---+---+---+ + * | ctrl | a | s | d | f | g | h | j | k | l | ; | ' |return| | 4 | 5 | 6 | - | + * +---------------------------------------------------------+ +---+---+---+---+ + * | shift | z | x | c | v | b | n | m | , | . | / | shift | | 1 | 2 | 3 | | + * +---------------------------------------------------------+ +-------+---|ent| + * |cap|opt|comnd| ` | | \ |lef|rig|dwn|up | | 0 | . | | + * +---------------------------------------------------------+ +-------+---+---+ + */ +#define LAYOUT_m0116_ansi( \ + K7F, \ + K35,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K51,K4B,K43, \ + K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K45, \ + K36,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K4E, \ + K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K53,K54,K55, \ + K39,K3A,K37,K32, K31, K2A,K3B,K3C,K3D,K3E, K52, K41,K4C \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { K08, K09, KC_NO, K0B, K0C, K0D, K0E, K0F }, \ + { K10, K11, K12, K13, K14, K15, K16, K17 }, \ + { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, K21, K22, K23, K24, K25, K26, K27 }, \ + { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ + { K30, K31, K32, K33, KC_NO, K35, K36, K37 }, \ + { K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO }, \ + { KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \ + { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO }, \ + { KC_NO, K51, K52, K53, K54, K55, K56, K57 }, \ + { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, K7B, KC_NO, KC_NO, KC_NO, K7F } \ +} + +#endif diff --git a/keyboards/converter/adb_usb/config.h b/keyboards/converter/adb_usb/config.h new file mode 100644 index 0000000000..a5845a0290 --- /dev/null +++ b/keyboards/converter/adb_usb/config.h @@ -0,0 +1,43 @@ +/* +Copyright 2011 Jun Wako + +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 . + +Ported to QMK by Peter Roe +*/ + +#pragma once + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0ADB +#define DEVICE_VER 0x0101 +#define MANUFACTURER QMK +#define PRODUCT ADB keyboard converter +#define DESCRIPTION Convert ADB keyboard to USB + +/* matrix size */ +#define MATRIX_ROWS 16 // keycode bit: 3-0 +#define MATRIX_COLS 8 // keycode bit: 6-4 + +/* 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 + +/* ADB port setting */ +#define ADB_PORT PORTD +#define ADB_PIN PIND +#define ADB_DDR DDRD +#define ADB_DATA_BIT 0 +//#define ADB_PSW_BIT 1 // optional diff --git a/keyboards/converter/adb_usb/keymaps/13bit/keymap.c b/keyboards/converter/adb_usb/keymaps/13bit/keymap.c new file mode 100644 index 0000000000..3b36a20c25 --- /dev/null +++ b/keyboards/converter/adb_usb/keymaps/13bit/keymap.c @@ -0,0 +1,26 @@ +#include QMK_KEYBOARD_H + +#define MCTL LCTL(KC_UP) +#define SCST LSFT(LGUI(KC_4)) +#define SLP LALT(LGUI(KC_EJCT)) + +#define APP1 LSFT(LALT(LCTL(LGUI(KC_1)))) +#define APP2 LSFT(LALT(LCTL(LGUI(KC_2)))) +#define APP3 LSFT(LALT(LCTL(LGUI(KC_3)))) +#define APP4 LSFT(LALT(LCTL(LGUI(KC_4)))) +#define APP5 LSFT(LALT(LCTL(LGUI(KC_5)))) +#define APP6 LSFT(LALT(LCTL(LGUI(KC_6)))) +#define APP7 LSFT(LALT(LCTL(LGUI(KC_7)))) +#define APP8 LSFT(LALT(LCTL(LGUI(KC_8)))) + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT_ext_ansi( + KC_ESC, APP1, APP2, APP3, APP4, APP5, APP6, APP7, APP8, MCTL, KC_MUTE, KC_VOLD, KC_VOLU, SCST, KC_SLCK, KC_PAUS, SLP, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_EQL, KC_PSLS, KC_PAST, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PMNS, + KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT + ), +}; diff --git a/keyboards/converter/adb_usb/keymaps/default/keymap.c b/keyboards/converter/adb_usb/keymaps/default/keymap.c new file mode 100644 index 0000000000..6b63c1a3c1 --- /dev/null +++ b/keyboards/converter/adb_usb/keymaps/default/keymap.c @@ -0,0 +1,13 @@ +#include QMK_KEYBOARD_H + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT_ext_ansi( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_EJCT, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_EQL, KC_PSLS, KC_PAST, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PMNS, + KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT + ), +}; diff --git a/keyboards/converter/adb_usb/led.c b/keyboards/converter/adb_usb/led.c new file mode 100644 index 0000000000..ea9bf77b5c --- /dev/null +++ b/keyboards/converter/adb_usb/led.c @@ -0,0 +1,27 @@ +/* +Copyright 2011 Jun Wako + +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 +#include +#include "adb.h" +#include "led.h" + + +void led_set(uint8_t usb_led) +{ + adb_host_kbd_led(ADB_ADDR_KEYBOARD, ~usb_led); +} diff --git a/keyboards/converter/adb_usb/led.h b/keyboards/converter/adb_usb/led.h new file mode 100644 index 0000000000..19952fae2a --- /dev/null +++ b/keyboards/converter/adb_usb/led.h @@ -0,0 +1,43 @@ +/* +Copyright 2011 Jun Wako + +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 . + +Ported to QMK by Peter Roe +*/ + +#ifndef LED_H +#define LED_H +#include "stdint.h" + + +/* keyboard LEDs */ +#define USB_LED_NUM_LOCK 0 +#define USB_LED_CAPS_LOCK 1 +#define USB_LED_SCROLL_LOCK 2 +#define USB_LED_COMPOSE 3 +#define USB_LED_KANA 4 + + +#ifdef __cplusplus +extern "C" { +#endif + +void led_set(uint8_t usb_led); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/keyboards/converter/adb_usb/matrix.c b/keyboards/converter/adb_usb/matrix.c new file mode 100644 index 0000000000..8ee48bf23f --- /dev/null +++ b/keyboards/converter/adb_usb/matrix.c @@ -0,0 +1,267 @@ +/* +Copyright 2011 Jun Wako + +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 . + +Ported to QMK by Peter Roe +*/ + +#include +#include +#include +#include +#include "print.h" +#include "util.h" +#include "debug.h" +#include "adb.h" +#include "matrix.h" +#include "report.h" +#include "host.h" +#include "led.h" +#include "timer.h" + +static bool is_iso_layout = false; + +// matrix state buffer(1:on, 0:off) +static matrix_row_t matrix[MATRIX_ROWS]; + +static void register_key(uint8_t key); + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +void matrix_init(void) +{ + // LED on + DDRD |= (1<<6); PORTD |= (1<<6); + + adb_host_init(); + // wait for keyboard to boot up and receive command + _delay_ms(2000); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00; + + led_set(host_keyboard_leds()); + + // debug_enable = false; + // debug_matrix = true; + // debug_keyboard = true; + // debug_mouse = true; + // print("debug enabled.\n"); + + // LED off + DDRD |= (1<<6); PORTD &= ~(1<<6); + matrix_init_quantum(); +} + +#ifdef ADB_MOUSE_ENABLE + +#ifdef MAX +#undef MAX +#endif +#define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) + +static report_mouse_t mouse_report = {}; + +void adb_mouse_task(void) +{ + uint16_t codes; + int16_t x, y; + static int8_t mouseacc; + + /* tick of last polling */ + static uint16_t tick_ms; + + // polling with 12ms interval + if (timer_elapsed(tick_ms) < 12) return; + tick_ms = timer_read(); + + codes = adb_host_mouse_recv(); + // If nothing received reset mouse acceleration, and quit. + if (!codes) { + mouseacc = 1; + return; + }; + // Bit sixteen is button. + if (~codes & (1 << 15)) + mouse_report.buttons |= MOUSE_BTN1; + if (codes & (1 << 15)) + mouse_report.buttons &= ~MOUSE_BTN1; + // lower seven bits are movement, as signed int_7. + // low byte is X-axis, high byte is Y. + y = (codes>>8 & 0x3F); + x = (codes>>0 & 0x3F); + // bit seven and fifteen is negative + // usb does not use int_8, but int_7 (measuring distance) with sign-bit. + if (codes & (1 << 6)) + x = (x-0x40); + if (codes & (1 << 14)) + y = (y-0x40); + // Accelerate mouse. (They weren't meant to be used on screens larger than 320x200). + x *= mouseacc; + y *= mouseacc; + // Cap our two bytes per axis to one byte. + // Easier with a MIN-function, but since -MAX(-a,-b) = MIN(a,b)... + // I.E. MIN(MAX(x,-127),127) = -MAX(-MAX(x, -127), -127) = MIN(-MIN(-x,127),127) + mouse_report.x = -MAX(-MAX(x, -127), -127); + mouse_report.y = -MAX(-MAX(y, -127), -127); + if (debug_mouse) { + print("adb_host_mouse_recv: "); print_bin16(codes); print("\n"); + print("adb_mouse raw: ["); + phex(mouseacc); print(" "); + phex(mouse_report.buttons); print("|"); + print_decs(mouse_report.x); print(" "); + print_decs(mouse_report.y); print("]\n"); + } + // Send result by usb. + host_mouse_send(&mouse_report); + // increase acceleration of mouse + mouseacc += ( mouseacc < ADB_MOUSE_MAXACC ? 1 : 0 ); + return; +} +#endif + +uint8_t matrix_scan(void) +{ + /* extra_key is volatile and more convoluted than necessary because gcc refused + to generate valid code otherwise. Making extra_key uint8_t and constructing codes + here via codes = extra_key<<8 | 0xFF; would consistently fail to even LOAD + extra_key from memory, and leave garbage in the high byte of codes. I tried + dozens of code variations and it kept generating broken assembly output. So + beware if attempting to make extra_key code more logical and efficient. */ + static volatile uint16_t extra_key = 0xFFFF; + uint16_t codes; + uint8_t key0, key1; + + /* tick of last polling */ + static uint16_t tick_ms; + + codes = extra_key; + extra_key = 0xFFFF; + + if ( codes == 0xFFFF ) + { + // polling with 12ms interval + if (timer_elapsed(tick_ms) < 12) return 0; + tick_ms = timer_read(); + + codes = adb_host_kbd_recv(); + } + + key0 = codes>>8; + key1 = codes&0xFF; + + if (debug_matrix && codes) { + print("adb_host_kbd_recv: "); phex16(codes); print("\n"); + } + + if (codes == 0) { // no keys + return 0; + } else if (codes == 0x7F7F) { // power key press + register_key(0x7F); + } else if (codes == 0xFFFF) { // power key release + register_key(0xFF); + } else if (key0 == 0xFF) { // error + xprintf("adb_host_kbd_recv: ERROR(%d)\n", codes); + // something wrong or plug-in + matrix_init(); + return key1; + } else { + /* Swap codes for ISO keyboard + * https://github.com/tmk/tmk_keyboard/issues/35 + * + * ANSI + * ,----------- ----------. + * | *a| 1| 2 =|Backspa| + * |----------- ----------| + * |Tab | Q| | ]| *c| + * |----------- ----------| + * |CapsLo| A| '|Return | + * |----------- ----------| + * |Shift | Shift | + * `----------- ----------' + * + * ISO + * ,----------- ----------. + * | *a| 1| 2 =|Backspa| + * |----------- ----------| + * |Tab | Q| | ]|Retur| + * |----------- -----` | + * |CapsLo| A| '| *c| | + * |----------- ----------| + * |Shif| *b| Shift | + * `----------- ----------' + * + * ADB scan code USB usage + * ------------- --------- + * Key ANSI ISO ANSI ISO + * --------------------------------------------- + * *a 0x32 0x0A 0x35 0x35 + * *b ---- 0x32 ---- 0x64 + * *c 0x2A 0x2A 0x31 0x31(or 0x32) + */ + if (is_iso_layout) { + if ((key0 & 0x7F) == 0x32) { + key0 = (key0 & 0x80) | 0x0A; + } else if ((key0 & 0x7F) == 0x0A) { + key0 = (key0 & 0x80) | 0x32; + } + } + register_key(key0); + if (key1 != 0xFF) // key1 is 0xFF when no second key. + extra_key = key1<<8 | 0xFF; // process in a separate call + } + + matrix_scan_quantum(); + return 1; +} + +void matrix_print(void){ + +} + +inline +matrix_row_t matrix_get_row(uint8_t row) +{ + return matrix[row]; +} + +inline +static void register_key(uint8_t key) +{ + uint8_t col, row; + col = key&0x07; + row = (key>>3)&0x0F; + if (key&0x80) { + matrix[row] &= ~(1< Date: Tue, 23 Oct 2018 14:00:54 -0500 Subject: [PATCH 249/269] keymap for 1upkeyboards/sweet16 multilayers rgb lighting and tapdance (#4208) * keymap for 1upkeyboards/sweet16 multilayers rgb lighting and tapdance * Update config.h typo * cleanup Co-Authored-By: ridingintraffic * layers are using layout macro replaced the include guard (the ifndef, define, and endif at the end) with just #pragma once changed undergrow to use layer-change-code emoji macros are using send_hex_code_string cleaned up the includes * tap() removed maxtrix_scan_user updated conf.h cleanup --- .../sweet16/keymaps/ridingintraffic/config.h | 15 ++ .../sweet16/keymaps/ridingintraffic/keymap.c | 215 ++++++++++++++++++ .../sweet16/keymaps/ridingintraffic/readme.md | 10 + .../sweet16/keymaps/ridingintraffic/rules.mk | 5 + 4 files changed, 245 insertions(+) create mode 100644 keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h create mode 100644 keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c create mode 100644 keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md create mode 100644 keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h new file mode 100644 index 0000000000..c835440076 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h @@ -0,0 +1,15 @@ +#pragma once + +/* tap dance stuff*/ +#undef TAPPING_TERM +#define TAPPING_TERM 500 + +#define TAPPING_TOGGLE 2 + +#define EXAMPLESTRING1 "tapdance_1" +#define EXAMPLESTRING2 "tapdance_2" +#define EXAMPLESTRING3 "tapdance_3" +#define EXAMPLESTRING4 "tapdance_4" + +#undef RGBLED_NUM +#define RGBLED_NUM 16 \ No newline at end of file diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c new file mode 100644 index 0000000000..ad9786ba7f --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c @@ -0,0 +1,215 @@ +/* +tap danc eis turned on in the rules now... +*/ +#include QMK_KEYBOARD_H + +#define _EMOJI 0 +#define _TAPLAND 1 +#define _LEDCNTL 2 + +enum custom_keycodes { + SHRUG, + DISFACE, + FU, + TFLIP, + TFLIP2, + SAD_EYES, + TPUT, + HAPPYFACE, + HEARTFACE, + CLOUD, + CHANFACE, + CMDCLEAR +}; +//Tap Dance Declarations +enum { + TD_EXAMPLE1 = 0, + TD_EXAMPLE2, + TD_EXAMPLE3, + TD_EXAMPLE4 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* EMOJI Pad + * ,-------------------------------. + * |TFLIP | TFlIP2|DISFACE| FU | + * |------+-------+-------+--------| + * | CLOUD| | | CLEAR | + * |------+-------+-------+--------| + * |SHRUG |DISFACE| HRTFAC| HAPPYF | + * |------+-------+-------+--------| + * | ENTER| |LEDCNTR| tapland| + * `-------------------------------' + */ + //purple + [_EMOJI] = LAYOUT_ortho_4x4( + TFLIP, TFLIP2, KC_NO, FU , + CLOUD, KC_NO, KC_NO, CMDCLEAR, + SHRUG, DISFACE, HEARTFACE, HAPPYFACE, + KC_ENT, RGB_TOG, MO(_LEDCNTL), MO(_TAPLAND) + ), + + /* TapLand // + * ,-------------------------------. + * | str1 | str2 | str3 | str4 | + * |------+-------+-------+--------| + * | | | | | + * |------+-------+-------+--------| + * | | | | | + * |------+-------+-------+--------| + * | | | | | + * `-------------------------------' + */ + //blue + [_TAPLAND] = LAYOUT_ortho_4x4( + TD(TD_EXAMPLE1), TD(TD_EXAMPLE2), TD(TD_EXAMPLE3), TD(TD_EXAMPLE4), + KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO + ), + /* LEDControl Pad + * ,-------------------------------. + * | snake|breathe|rainbow|gradient| + * |------+-------+-------+--------| + * | xmas | Val+ | Sat+ | HUE+ | + * |------+-------+-------+--------| + * |kngrdr| Val- | Sat- | HUE- | + * |------+-------+-------+--------| + * | swirl| PLAIN | | ON/OFF | + * `-------------------------------' + */ + //blue + [_LEDCNTL] = LAYOUT_ortho_4x4( + RGB_M_SN, RGB_M_B, RGB_M_R, RGB_M_G, + RGB_M_X, RGB_VAI, RGB_SAI, RGB_HUI, + RGB_M_K, RGB_VAD, RGB_SAD, RGB_HUD, + RGB_M_SW, RGB_M_P, KC_NO, RGB_TOG + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case CLOUD: // (っ◕‿◕)っ + if(record->event.pressed){ + send_unicode_hex_string("0028 3063 25D5 203F 25D5 0029 3063"); + } + return false; + break; + case FU: // t(-_-t) + if(record->event.pressed){ + SEND_STRING("t(-_-t)"); + } + return false; + break; + case HAPPYFACE: // ʘ‿ʘ + if(record->event.pressed){ + send_unicode_hex_string("0298 203F 0298"); + } + return false; + break; + case CMDCLEAR: + if (record->event.pressed) { + register_code(KC_LGUI); + tap_code(KC_A); + unregister_code(KC_LGUI); + tap_code(KC_DEL); + } + return false; + break; + case SHRUG: // ¯\_(ツ)_/¯ + if (record->event.pressed) { + send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); + } + return false; + break; + case HEARTFACE: // ♥‿♥ + if(record->event.pressed){ + send_unicode_hex_string("2665 203F 2665"); + } + return false; + break; + case DISFACE: // ಠ_ಠ + if(record->event.pressed){ + send_unicode_hex_string("0CA0 005F 0CA0"); + } + return false; + break; + case TFLIP: // (╯°□°)╯ ︵ ┻━┻ + if(record->event.pressed){ + send_unicode_hex_string("0028 256F 00B0 25A1 00B0 0029 256F 0020 FE35 0020 253B 2501 253B"); + } + return false; + break; + case TFLIP2: // ┻━┻︵ \(°□°)/ ︵ ┻━┻ + if(record->event.pressed){ + send_unicode_hex_string("253B 2501 253B FE35 0020 005C 0028 00B0 25A1 00B0 0029 002F 0020 FE35 0020 253B 2501 253B"); + } + return false; + break; + } + } + return true; +} + + +/* tap dance time */ +void tdexample1(qk_tap_dance_state_t *state, void *user_data) { + if (state->count >= 2) { + SEND_STRING(EXAMPLESTRING1); + reset_tap_dance (state); + } +} +void tdexample2(qk_tap_dance_state_t *state, void *user_data) { + if (state->count >= 2) { + SEND_STRING(EXAMPLESTRING2); + reset_tap_dance (state); + } +} +void tdexample3(qk_tap_dance_state_t *state, void *user_data) { + if (state->count >= 2) { + SEND_STRING(EXAMPLESTRING3); + reset_tap_dance (state); + } +} +void tdexample4(qk_tap_dance_state_t *state, void *user_data) { + if (state->count >= 2) { + SEND_STRING(EXAMPLESTRING4); + reset_tap_dance (state); + } +} + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_EXAMPLE1] = ACTION_TAP_DANCE_FN(tdexample1), + [TD_EXAMPLE2] = ACTION_TAP_DANCE_FN(tdexample2), + [TD_EXAMPLE3] = ACTION_TAP_DANCE_FN(tdexample3), + [TD_EXAMPLE4] = ACTION_TAP_DANCE_FN(tdexample4) +}; + +// Runs just one time when the keyboard initializes. +void matrix_scan_user(void) { + static bool has_ran_yet; + if (!has_ran_yet) { + has_ran_yet = true; + rgblight_setrgb (16, 0, 16); + } +} +uint32_t layer_state_set_user(uint32_t state) { + switch (biton32(state)) { + case _TAPLAND: + rgblight_setrgb(0, 16, 0); //green + break; + case _LEDCNTL: + rgblight_setrgb(0, 0, 16); //blue + break; + case _EMOJI: + rgblight_setrgb (16, 0, 16); //purple + break; + + default: // for any other layers, or the default layer + rgblight_setrgb (16, 0, 16); //purple + break; + } + return state; +} \ No newline at end of file diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md new file mode 100644 index 0000000000..7a3b8c8e44 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md @@ -0,0 +1,10 @@ +# Ridingtraffic's examples +=== +This keymap has many features: +3 layers +Momentary layer switching +16 pixel neopixel +Unicode Enabled +Tap dance enabled + +The rgb also updates depending on what layer you are on, and then flips back when done. diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk new file mode 100644 index 0000000000..de44175531 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk @@ -0,0 +1,5 @@ +# turning on tap dance +TAP_DANCE_ENABLE = yes +RGBLIGHT_ENABLE = yes +MOUSEKEY_ENABLE = no +UNICODE_ENABLE = yes \ No newline at end of file From c8267d9fea5e8b0dbdeb8521238c922ff4a83a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Tue, 23 Oct 2018 21:34:06 +0200 Subject: [PATCH 250/269] Update whitefox/konstantin keymap (#4220) * Change brace style to QMK OTBS * Change Unicode input mode to UC_WINC * Align constant values in config.h --- keyboards/whitefox/keymaps/konstantin/config.h | 18 +++++++++--------- keyboards/whitefox/keymaps/konstantin/keymap.c | 18 ++++++------------ 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/keyboards/whitefox/keymaps/konstantin/config.h b/keyboards/whitefox/keymaps/konstantin/config.h index 725609b465..39450d6802 100644 --- a/keyboards/whitefox/keymaps/konstantin/config.h +++ b/keyboards/whitefox/keymaps/konstantin/config.h @@ -2,16 +2,16 @@ #define FORCE_NKRO -#define PERMISSIVE_HOLD -#define TAPPING_TERM 200 -#define TAPPING_TOGGLE 2 +#define MOUSEKEY_DELAY 50 +#define MOUSEKEY_INTERVAL 15 +#define MOUSEKEY_MAX_SPEED 4 +#define MOUSEKEY_TIME_TO_MAX 50 +#define MOUSEKEY_WHEEL_MAX_SPEED 1 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 50 -#define MOUSEKEY_DELAY 50 -#define MOUSEKEY_INTERVAL 15 -#define MOUSEKEY_MAX_SPEED 4 -#define MOUSEKEY_TIME_TO_MAX 50 -#define MOUSEKEY_WHEEL_MAX_SPEED 1 -#define MOUSEKEY_WHEEL_TIME_TO_MAX 50 +#define PERMISSIVE_HOLD +#define TAPPING_TERM 200 +#define TAPPING_TOGGLE 2 #undef IS_COMMAND #define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL))) diff --git a/keyboards/whitefox/keymaps/konstantin/keymap.c b/keyboards/whitefox/keymaps/konstantin/keymap.c index 247bc6bbff..edb049287c 100644 --- a/keyboards/whitefox/keymaps/konstantin/keymap.c +++ b/keyboards/whitefox/keymaps/konstantin/keymap.c @@ -19,9 +19,8 @@ #define UC_DIVS UC(0x00F7) #define UC_MINS UC(0x2212) -void matrix_init_user(void) -{ - set_unicode_input_mode(UC_WIN); +void matrix_init_user(void) { + set_unicode_input_mode(UC_WINC); } enum layers { @@ -35,13 +34,10 @@ enum custom_keycodes { NUMPAD, }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) -{ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case CLEAR: - if (record->event.pressed) { - SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); - } + if (record->event.pressed) { SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); } return false; case NUMPAD: @@ -65,15 +61,13 @@ enum tap_dance { TD_DESKTOP, }; -void td_fn_rctl_finished(qk_tap_dance_state_t *state, void *user_data) -{ +void td_fn_rctl_finished(qk_tap_dance_state_t *state, void *user_data) { // Single tap → Fn, double tap → RCtrl, triple tap → Fn+RCtrl etc. if (state->count & 1) { layer_on(L_FN); } if (state->count & 2) { register_code(KC_RCTL); } } -void td_fn_rctl_reset(qk_tap_dance_state_t *state, void *user_data) -{ +void td_fn_rctl_reset(qk_tap_dance_state_t *state, void *user_data) { if (state->count & 1) { layer_off(L_FN); } if (state->count & 2) { unregister_code(KC_RCTL); } } From b0a021c07aa38905090058bd57b9304425594557 Mon Sep 17 00:00:00 2001 From: Ajax Date: Tue, 23 Oct 2018 15:44:48 -0400 Subject: [PATCH 251/269] Made a userspace that allows you to use your keyboard as an order of operations based calculator (#2864) * Made DZ60 layout with calculator * Cleaned up and commented, preparing to fix bug with negative in front of open parenthesis as first character * Fixed bug where negative sign infront of parenthesis as first character was parsed incorrectly * Made a better solution for the bug from the previous commit * Modularized and added a userfile so that this code can be used on various keyboards, found in doogle999 * Removed commented code from keymap * Made the layer that is used for calculations a define so that it can be changed per keyboard * Made the readme * Made the readme in the correct place * Revert "Made the readme in the correct place" This reverts commit 7f8b59ed9e59c77401a48be3a7ac1e8fd8e84e32. * Manually synced with qmk upstream * Stopped repeat, made keys print character that they are defined as rather than what the keyboard wants them to do * Added support for numpad, might make all keycodes custom so that there is no need to change doogle999.c if you want to change the keycode that is associated with a function, also made numpad automatically activating an option * Fixed some bugs with backspacing, updated the readme * Fixed some bugs with numlock turning on at the wrong times when a shift key was down * Made the return to layer work automatically instead of just forcing it to layer 0 * fixes and style changes, 20% decreased binary size * Fixed some bugs with double printing and compilation errors on my side * Fixed bug with exceeding the buffer size * Removed changes that added const-ness * Made changes so that backspace does not repeat to remove backspace bugs, still some bugs with recalculating without having typed anything * Fixed obo error with calc main loop * Made includes more accurate in keymap for dz60 * Moved flags to user makefile --- keyboards/dz60/keymaps/doogle999/keymap.c | 74 ++++ tmk_core/rules.mk | 1 - users/doogle999/doogle999.c | 460 ++++++++++++++++++++++ users/doogle999/doogle999.h | 99 +++++ users/doogle999/readme.md | 41 ++ users/doogle999/rules.mk | 14 + 6 files changed, 688 insertions(+), 1 deletion(-) create mode 100644 keyboards/dz60/keymaps/doogle999/keymap.c create mode 100644 users/doogle999/doogle999.c create mode 100644 users/doogle999/doogle999.h create mode 100644 users/doogle999/readme.md create mode 100644 users/doogle999/rules.mk diff --git a/keyboards/dz60/keymaps/doogle999/keymap.c b/keyboards/dz60/keymaps/doogle999/keymap.c new file mode 100644 index 0000000000..deea641f70 --- /dev/null +++ b/keyboards/dz60/keymaps/doogle999/keymap.c @@ -0,0 +1,74 @@ +#include QMK_KEYBOARD_H + +#include "doogle999.h" + +#define ______ KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Base layer + * ,-----------------------------------------------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * |-----------------------------------------------------------------------------------------+ + * | Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | Shift | U | Del | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | Cmd | Alt | Space | / | Fn | L | D | R | + * `-----------------------------------------------------------------------------------------' + */ + + LAYOUT_directional( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_DELETE, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SLSH, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT + ), + +/* Fn layer + * ,-----------------------------------------------------------------------------------------. + * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10 | F11 | F12 | Backspace | + * |-----------------------------------------------------------------------------------------+ + * | Reset | NP1 | NP2 | NP3 | NP4 | NP5 | NP6 | NP7 | NP8 | NP9 | NP0 |VolD |VolU | Mute | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | BlD | BlI | BlT | Menu | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Cyc+| Cyc-| Val+| Val-| Hue+| Hue-| Sat+| Sat-| Tog | Shift | Pup | Ins | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | Cmd | Alt | Space |HwCal| |Home | Pdn | End | + * `-----------------------------------------------------------------------------------------' + */ + + LAYOUT_directional( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, KC_CALC, + RESET, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_0, KC_VOLD, KC_VOLU, KC_MUTE, + ______, ______, ______, ______, ______, ______, ______, ______, ______, BL_DEC, BL_INC, BL_TOGG, KC_APP, + KC_LSFT, ______, RGB_MOD, RGB_RMOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_TOG, KC_RSFT, KC_PGUP, KC_INSERT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, TO(2), ______, KC_HOME, KC_PGDOWN, KC_END + ), + + /* Hardware calculator layer + * ,-----------------------------------------------------------------------------------------. + * |EndCa| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace | + * |-----------------------------------------------------------------------------------------+ + * | | Q | | E | | T | | | | | P | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | S | | | | | | | L | | | Calc | + * |-----------------------------------------------------------------------------------------+ + * | Shift | | | | C | | | | | . | Shift | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | / | | | | | + * `-----------------------------------------------------------------------------------------' + */ + + LAYOUT_directional( + ENDCALC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, + ______, KC_Q, ______, KC_E, ______, KC_T, ______, ______, ______, ______, KC_P, ______, ______, ______, + ______, ______, KC_S, ______, ______, ______, ______, ______, ______, KC_L, ______, ______, CALC, + KC_LSFT, ______, ______, ______, KC_C, ______, ______, ______, ______, ______, KC_DOT, KC_RSFT, ______, ______, + ______, ______, ______, ______, ______, ______, KC_SLSH, ______, ______, ______, ______ + ), +}; \ No newline at end of file diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f1ef733f69..ce3cd83b3f 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -103,7 +103,6 @@ endif CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst) CFLAGS += $(CSTANDARD) - #---------------- Compiler Options C++ ---------------- # -g*: generate debugging information # -O*: optimization level diff --git a/users/doogle999/doogle999.c b/users/doogle999/doogle999.c new file mode 100644 index 0000000000..320de7cff8 --- /dev/null +++ b/users/doogle999/doogle999.c @@ -0,0 +1,460 @@ +#include "doogle999.h" + +static unsigned char inputLocation = 0; // Current index in text input + +static double calc(const char input[CALC_BUFFER_SIZE +1]) // Finds value of input char array, relatively small and fast I think +{ + char inputToken[CALC_BUFFER_SIZE + 1]; // Input buffer, used when a single token (generally a number) takes up more + unsigned char inputTokenLocation = 0, inputLocation = 0; // Keep track of indices + + struct Token tokens[CALC_BUFFER_SIZE + 1]; // Input, converted to tokens, one extra large to accomodate for possible negative sign then open parenthesis as first character + unsigned char tokenCount = 0; // Keep track of index + + bool dashAsMinus = false; // Kind of a hacky solution to determining whether to treat a dash as a minus sign or a negative sign + + while(inputLocation < CALC_BUFFER_SIZE + 1) + { + char digit = input[inputLocation]; + + if(inputLocation == 0 && input[inputLocation] == CALC_CHAR_SUB && input[inputLocation + 1] == CALC_CHAR_BEG) + { + tokens[tokenCount].raw.num = 0; + tokens[tokenCount].isNum = true; + + tokenCount++; + dashAsMinus = true; + } + + if ((digit >= '0' && digit <= '9') || /* valid digit */ + (inputTokenLocation != 0 && input[inputLocation] == CALC_CHAR_DEC) || /* valid floating point */ + (!dashAsMinus && inputTokenLocation == 0 && input[inputLocation] == CALC_CHAR_SUB)) /* - is negative sign */ + { + inputToken[inputTokenLocation] = input[inputLocation]; + inputTokenLocation++; + inputLocation++; + continue; + } + + if(inputTokenLocation != 0) + { + // sscanf(inputToken, "%lf", &tokens[tokenCount].raw.num); // I would like to use sscanf here, but the small version of stdio.h on the chip doesn't allow sscanf or its sister functions to be used to process floats + tokens[tokenCount].raw.num = atof(inputToken); + tokens[tokenCount].isNum = true; + for(unsigned char i = 0; i < inputTokenLocation + 1; i++) + { + inputToken[i] = '\0'; + } + inputTokenLocation = 0; + tokenCount++; + dashAsMinus = true; + continue; + } + + /* inputTokenLocation == 0 */ + tokens[tokenCount].isNum = false; + tokens[tokenCount].raw.op.c = input[inputLocation]; + tokens[tokenCount].raw.op.priority = 0; + tokens[tokenCount].raw.op.ltr = true; + dashAsMinus = false; + + switch(input[inputLocation]) + { + case CALC_CHAR_BEG: + break; + case CALC_CHAR_END: + dashAsMinus = true; + break; + case CALC_CHAR_ADD: + tokens[tokenCount].raw.op.priority = CALC_PRIO_ADD; + break; + case CALC_CHAR_SUB: + tokens[tokenCount].raw.op.priority = CALC_PRIO_SUB; + break; + case CALC_CHAR_MUL: + tokens[tokenCount].raw.op.priority = CALC_PRIO_MUL; + break; + case CALC_CHAR_DIV: + tokens[tokenCount].raw.op.priority = CALC_PRIO_DIV; + break; + case CALC_CHAR_EXP: + tokens[tokenCount].raw.op.priority = CALC_PRIO_EXP; + tokens[tokenCount].raw.op.ltr = false; + break; + case CALC_CHAR_SIN: + case CALC_CHAR_COS: + case CALC_CHAR_TAN: + case CALC_CHAR_ASN: + case CALC_CHAR_ACS: + case CALC_CHAR_ATN: + case CALC_CHAR_LGE: + case CALC_CHAR_LOG: + case CALC_CHAR_SQT: + break; + case CALC_CHAR_EUL: + tokens[tokenCount].isNum = true; + tokens[tokenCount].raw.num = CALC_VALU_EUL; + dashAsMinus = true; + break; + case CALC_CHAR_PI: + tokens[tokenCount].isNum = true; + tokens[tokenCount].raw.num = CALC_VALU_PI; + dashAsMinus = true; + break; + case '\0': + tokenCount--; + inputLocation = CALC_BUFFER_SIZE; + break; + default: + tokenCount--; + break; + } + tokenCount++; + inputLocation++; + } + + struct Token output[CALC_BUFFER_SIZE + 1]; // Final output tokens before evaluation + struct Token opstack[CALC_BUFFER_SIZE + 1]; // Stack of operators + unsigned char outputLocation = 0, opstackLocation = 0; // Keep track of indices + + unsigned char numBrackets = 0; // The number of parenthesis + + for(unsigned char i = 0; i < tokenCount; i++) + { + if(tokens[i].isNum) + { + output[outputLocation] = tokens[i]; + outputLocation++; + } + else if(tokens[i].raw.op.c == CALC_CHAR_BEG) + { + opstack[opstackLocation] = tokens[i]; + opstackLocation++; + } + else if(tokens[i].raw.op.c == CALC_CHAR_END) + { + while(opstack[opstackLocation - 1].raw.op.c != CALC_CHAR_BEG) + { + output[outputLocation] = opstack[opstackLocation - 1]; + outputLocation++; + opstackLocation--; + } + opstackLocation--; + + numBrackets += 2; + } + else if(tokens[i].raw.op.priority == 0) + { + opstack[opstackLocation] = tokens[i]; + opstackLocation++; + } + else + { + while(opstackLocation != 0 + && (opstack[opstackLocation - 1].raw.op.priority == 0 + || tokens[i].raw.op.priority < opstack[opstackLocation - 1].raw.op.priority + || (tokens[i].raw.op.priority == opstack[opstackLocation - 1].raw.op.priority && opstack[opstackLocation - 1].raw.op.ltr)) + && opstack[opstackLocation - 1].raw.op.c != CALC_CHAR_BEG) + { + output[outputLocation] = opstack[opstackLocation - 1]; + outputLocation++; + opstackLocation--; + } + opstack[opstackLocation] = tokens[i]; + opstackLocation++; + } + } + + tokenCount -= numBrackets; + + for(signed char i = opstackLocation - 1; i >= 0; i--) + { + output[outputLocation] = opstack[i]; + outputLocation++; + opstackLocation--; + } + + double answer[CALC_BUFFER_SIZE]; + unsigned char answerLocation = 0; + + for(unsigned char i = 0; i < tokenCount; i++) + { + if(output[i].isNum) + { + answer[answerLocation] = output[i].raw.num; + answerLocation++; + continue; + } + + if(output[i].raw.op.priority == 0) + { + if (answerLocation < 1) { /* not handled here -- ERROR? */ } else + if(answerLocation >= 1) + { + double (*op)(double); + switch(output[i].raw.op.c) + { + case CALC_CHAR_SIN: + op = sin; + break; + case CALC_CHAR_COS: + op = cos; + break; + case CALC_CHAR_TAN: + op = tan; + break; + case CALC_CHAR_ASN: + op = asin; + break; + case CALC_CHAR_ACS: + op = acos; + break; + case CALC_CHAR_ATN: + op = atan; + break; + case CALC_CHAR_LGE: + op = log; + break; + case CALC_CHAR_LOG: + op = log10; + break; + case CALC_CHAR_SQT: + op = sqrt; + break; + default: + continue; /* invalid input */ + } + answer[answerLocation - 1] = op(answer[answerLocation - 1]); + } + } + /* priority != 0 */ + else if(answerLocation >= 2) + { + switch(output[i].raw.op.c) + { + case CALC_CHAR_ADD: + answer[answerLocation - 2] += answer[answerLocation - 1]; + break; + case CALC_CHAR_SUB: + answer[answerLocation - 2] -= answer[answerLocation - 1]; + break; + case CALC_CHAR_MUL: + answer[answerLocation - 2] *= answer[answerLocation - 1]; + break; + case CALC_CHAR_DIV: + answer[answerLocation - 2] /= answer[answerLocation - 1]; + break; + case CALC_CHAR_EXP: + answer[answerLocation - 2] = pow(answer[answerLocation - 2], answer[answerLocation - 1]); + break; + } + + answerLocation--; + } + } + + return answer[0]; +} + +/* + * @returns 0 when nothing should happen and QMK should work as usual + * @returns -1 when invalid input was given, QMK should ignore it + * @returns -2 when BSP should be done + * @returns -3 when CALC should be done + * @returns -4 when ENDCALC should be done + * @returns positive value of CALC_* when normal input was processed + */ +static int process_input(const uint16_t keycode, const uint8_t mods, const keyevent_t event) +{ + /* handle even when no key was pressed */ + if(!event.pressed) + { + switch(keycode) + { + /* QMK should handle those */ + case KC_RSFT: + case KC_LSFT: + return 0; + break; + } + /* ??? ignore */ + return -1; + } + + /* when shift key is pressed handle characters differently */ + char characterPressed; + if((get_mods() & MODS_SHIFT_MASK)) + { + switch(keycode) + { + case KC_9: + characterPressed = CALC_CHAR_BEG; + break; + case KC_0: + characterPressed = CALC_CHAR_END; + break; + case KC_EQUAL: + characterPressed = CALC_CHAR_ADD; + break; + case KC_KP_PLUS: + characterPressed = CALC_CHAR_ADD; + break; + case KC_6: + characterPressed = CALC_CHAR_EXP; + break; + case KC_8: + characterPressed = CALC_CHAR_MUL; + break; + case KC_KP_ASTERISK: + characterPressed = CALC_CHAR_MUL; + break; + case KC_S: + characterPressed = CALC_CHAR_ASN; + break; + case KC_C: + characterPressed = CALC_CHAR_ACS; + break; + case KC_T: + characterPressed = CALC_CHAR_ATN; + break; + case KC_L: + characterPressed = CALC_CHAR_LOG; + break; + default: + return -1; + break; + } + return characterPressed; + } + + /* normal key handling: shift not pressed */ + + /* digits */ + if (keycode == KC_KP_0 || keycode == KC_0) { + return '0'; + } else if (keycode >= KC_KP_1 && keycode <= KC_KP_9) { + return keycode - KC_KP_1 +1 + '0'; + } else if (keycode >= KC_1 && keycode <= KC_9) { + return keycode - KC_1 +1 + '0'; + } + + /* other tokens */ + switch (keycode) { + case KC_MINUS: + case KC_KP_MINUS: + return characterPressed = CALC_CHAR_SUB; + case KC_SLASH: + case KC_KP_SLASH: + return characterPressed = CALC_CHAR_DIV; + case KC_S: + return characterPressed = CALC_CHAR_SIN; + case KC_C: + return characterPressed = CALC_CHAR_COS; + case KC_T: + return characterPressed = CALC_CHAR_TAN; + case KC_Q: + return characterPressed = CALC_CHAR_SQT; + case KC_L: + return characterPressed = CALC_CHAR_LGE; + case KC_DOT: + case KC_KP_DOT: + return characterPressed = CALC_CHAR_DEC; + case KC_P: + return characterPressed = CALC_CHAR_PI; + case KC_E: + return characterPressed = CALC_CHAR_EUL; + case KC_BSPC: + return -2; + case KC_RSFT: + return 0; + case KC_LSFT: + return 0; + case CALC: + return -3; + case ENDCALC: + return -4; + default: + return -1; + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t* record) +{ + static char text[CALC_BUFFER_SIZE + 1]; // Used to store input and then output when ready to print + static char backspaceText[CALC_BUFFER_SIZE + 1]; // Pretty dumb waste of memory because only backspace characters, used with send_string to backspace and remove input + + if((biton32(layer_state) == CALC_LAYER && CALC_FORCE_NUM_LOCK_INSIDE_CALC) || (biton32(layer_state) != CALC_LAYER && CALC_FORCE_NUM_LOCK_OUTSIDE_CALC)) + { + bool numpadKeyPressed = record->event.pressed && + !(get_mods() & MODS_SHIFT_MASK) && + /* KC_KP_1, KC_KP_2, ..., KC_KP_0, KC_KP_DOT */ + (keycode >= KC_KP_1 && keycode <= KC_KP_DOT); + + if(numpadKeyPressed && !(host_keyboard_leds() & (1 << USB_LED_NUM_LOCK))) + { + add_key(KC_NLCK); + send_keyboard_report(); + del_key(KC_NLCK); + } + } + + if(biton32(layer_state) != CALC_LAYER) { return true; } + + int action = process_input(keycode, get_mods(), record->event); + switch(action) + { + case 0: + return true; + case -1: + return false; + case -2: + if(inputLocation > 0) + { + inputLocation--; + text[inputLocation] = '\0'; + backspaceText[0] = (char)8; + backspaceText[1] = '\0'; + send_string(backspaceText); + } + return false; + case -3: + for(int i = 0; i < inputLocation; i++) + { + backspaceText[i] = (char)8; + } + send_string(backspaceText); + dtostrf(calc(text), CALC_PRINT_SIZE, CALC_PRINT_SIZE, text); + send_string(text); + for(unsigned char i = 0; i < CALC_BUFFER_SIZE; i++) + { + text[i] = '\0'; + backspaceText[i] = '\0'; + } + inputLocation = 0; + return false; + case -4: + for(unsigned char i = 0; i < CALC_BUFFER_SIZE; i++) + { + text[i] = '\0'; + backspaceText[i] = '\0'; + } + inputLocation = 0; + layer_off(CALC_LAYER); + return false; + default: + break; + } + char characterPressed = (char)action; + + if(inputLocation < CALC_BUFFER_SIZE) + { + text[inputLocation] = characterPressed; + inputLocation++; + + char characterToSend[2]; + characterToSend[0] = characterPressed; + characterToSend[1] = '\0'; + + send_string(characterToSend); + } + return false; +} \ No newline at end of file diff --git a/users/doogle999/doogle999.h b/users/doogle999/doogle999.h new file mode 100644 index 0000000000..7ed38fbcc8 --- /dev/null +++ b/users/doogle999/doogle999.h @@ -0,0 +1,99 @@ +#ifndef USERSPACE +#define USERSPACE + +#include "quantum.h" + +#define NO_ACTION_ONESHOT +#define NO_ACTION_MACRO + +#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Layer the calculator is on +#define CALC_LAYER 2 + +// Inside is whether when you are in calc mode it should automatically force numlock, outside is whether it should do it outside of calculator mode +#define CALC_FORCE_NUM_LOCK_INSIDE_CALC true +#define CALC_FORCE_NUM_LOCK_OUTSIDE_CALC true + +// Maximum number of characters the calculator can have +#define CALC_BUFFER_SIZE 32 + +// Minimum width of the printed text / the number of decimal places +#define CALC_PRINT_SIZE 6 + +/*----- + Special +-----*/ +#define CALC_CHAR_BEG '(' +#define CALC_CHAR_END ')' +#define CALC_CHAR_DEC '.' + +/*----- + Operators - Can add more here such as modulo %, factorial ! +-----*/ +#define CALC_CHAR_ADD '+' +#define CALC_PRIO_ADD 1 + +#define CALC_CHAR_SUB '-' +#define CALC_PRIO_SUB 1 + +#define CALC_CHAR_MUL '*' +#define CALC_PRIO_MUL 2 + +#define CALC_CHAR_DIV '/' +#define CALC_PRIO_DIV 2 + +#define CALC_CHAR_EXP '^' +#define CALC_PRIO_EXP 3 + +/*----- + Functions +-----*/ +#define CALC_CHAR_SIN 's' +#define CALC_CHAR_COS 'c' +#define CALC_CHAR_TAN 't' + +#define CALC_CHAR_ASN 'S' +#define CALC_CHAR_ACS 'C' +#define CALC_CHAR_ATN 'T' + +#define CALC_CHAR_LGE 'l' +#define CALC_CHAR_LOG 'L' + +#define CALC_CHAR_SQT 'q' + +/*----- + Constants +-----*/ +#define CALC_CHAR_EUL 'e' +#define CALC_VALU_EUL 2.71828182845904523536 + +#define CALC_CHAR_PI 'p' +#define CALC_VALU_PI 3.14159265358979323846 + +struct OP // Operator/function +{ + char c; + unsigned char priority; + bool ltr; +}; + +union TokenRaw // A token after the input has been processed, can either be a number or an operator/function +{ + double num; + struct OP op; +}; + +struct Token // Encapsulator +{ + bool isNum; + union TokenRaw raw; +}; + +enum CalcFunctions // Hardware calculator key functionality +{ + CALC = SAFE_RANGE, + ENDCALC +}; + +#endif diff --git a/users/doogle999/readme.md b/users/doogle999/readme.md new file mode 100644 index 0000000000..e108555b9c --- /dev/null +++ b/users/doogle999/readme.md @@ -0,0 +1,41 @@ +Copyright 2018 @doogle999 + +Overview +======== + +This folder is just for some calculator code for my keyboards. + +Making Your Keyboard Into A Calculator +-------------------------------------- + +If you'd like to make your keyboard into a calculator, you can do it with this userspace (hopefully!) + +You can make a keymap for your keyboard of choice named doogle999 and then you can make it regularly. + +You should make one layer that is just the functionality for your calculator, so it just has the keys you need (numbers, symbols, some letters for functions). It should also have END_CALC and CALC somewhere. END_CALC gets you out of calculator mode, and CALC evaluates the calculation. + +On one of your other keymaps you should make a key that is TO(layer of calculator). This is how you will activate the calculator. You should also define the layer your calculator is on with the define CALC_LAYER in doogle999.h (this means that for all your keyboards, your calculator layer has to be the same layer). + +You can change what characters coorespond to what operators and functions and you can add more functions in doogle999.h and doogle999.c, you can also change which characters are sued for which keys. However, as of now standard keys should be used for operations. By that I mean if you want your multiplication sign to be an x, you should change the CALC_CHAR_MUL to an x but you should keep your multiplication keycode on the keymap either as KC_8 (shifted) or KC_KP_ASTERISK. This might be changed in the future so there are custom keycodes so this is less of a pain and more intuitive. + +You can look at my dz60 keymap doogle999 for an example. + +Issues +------ +Unfortunately the chip onboard my dz60 only does single precision floating point numbers, but I have everything set up as double so if your chip supports doubles it should work for you. + +This Was Here When I Made The ReadMe +------------------------------------ + +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 . \ No newline at end of file diff --git a/users/doogle999/rules.mk b/users/doogle999/rules.mk new file mode 100644 index 0000000000..12698a27e5 --- /dev/null +++ b/users/doogle999/rules.mk @@ -0,0 +1,14 @@ +SRC += doogle999.c + +CFLAGS += -fstrict-aliasing -ftree-vrp + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes From 9ed0c2d57b4f5014c24ea48a6fe448b69789957b Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 24 Oct 2018 00:28:40 +0100 Subject: [PATCH 252/269] Keymap update (#4223) * change window focus shortcuts * hangul * macos goodness * re-arrange tab keys * remove tab switching keys * left hand func * glorious macro pad * workspace rotation keys * tabbing hotkeys * left hand tab change keys * SEND_STRING("!") on KC_EXLM * use SEND_STRING for all shifted symbols * SEND_STRING even for non shifted symbols so they play nicely with the shifted ones --- keyboards/planck/keymaps/callum/keymap.c | 74 +++++++++++++++++++++--- 1 file changed, 66 insertions(+), 8 deletions(-) diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c index 2a816bf677..1cffe15d46 100644 --- a/keyboards/planck/keymaps/callum/keymap.c +++ b/keyboards/planck/keymaps/callum/keymap.c @@ -172,7 +172,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| * |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn| * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| - * | | F21 | F22 | F23 | F24 | | | | |Clmak|Qwrty| | + * | | | |TabL |TabR | | | | |Clmak|Qwrty| | * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| * | | | | |Prev |Mute |Play |Next | | | | | * `-----------------------------------------------------------------------' @@ -189,8 +189,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F18, KC_F19, KC_F20, KC_VOLD }, { - _______, KC_F21, KC_F22, KC_F23, - KC_F24, XXXXXXX, XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, SC(KC_TAB), + C(KC_TAB), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, QWERTY, _______ }, { @@ -229,13 +229,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { set_colemak(); } return false; - break; case QWERTY: if (record->event.pressed) { set_qwerty(); } return false; - break; case SYMB: if (record->event.pressed) { layer_on(_SYMB); @@ -243,7 +241,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_SYMB); } return false; - break; case MOVE: if (record->event.pressed) { layer_on(_MOVE); @@ -251,7 +248,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_MOVE); } return false; - break; case FUNC: if (record->event.pressed) { layer_on(_FUNC); @@ -259,7 +255,69 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_FUNC); } return false; - break; + + // Override the defualt auto shifted symbols to use SEND_STRING + // See https://github.com/qmk/qmk_firmware/issues/4072 + case KC_EXLM: + if (record->event.pressed) { SEND_STRING("!"); } + return false; + case KC_AT: + if (record->event.pressed) { SEND_STRING("@"); } + return false; + case KC_HASH: + if (record->event.pressed) { SEND_STRING("#"); } + return false; + case KC_DLR: + if (record->event.pressed) { SEND_STRING("$"); } + return false; + case KC_PERC: + if (record->event.pressed) { SEND_STRING("%"); } + return false; + case KC_CIRC: + if (record->event.pressed) { SEND_STRING("^"); } + return false; + case KC_AMPR: + if (record->event.pressed) { SEND_STRING("&"); } + return false; + case KC_ASTR: + if (record->event.pressed) { SEND_STRING("*"); } + return false; + case KC_LPRN: + if (record->event.pressed) { SEND_STRING("("); } + return false; + case KC_RPRN: + if (record->event.pressed) { SEND_STRING(")"); } + return false; + case KC_TILD: + if (record->event.pressed) { SEND_STRING("~"); } + return false; + case KC_GRV: + if (record->event.pressed) { SEND_STRING("`"); } + return false; + case KC_PLUS: + if (record->event.pressed) { SEND_STRING("+"); } + return false; + case KC_EQL: + if (record->event.pressed) { SEND_STRING("="); } + return false; + case KC_PIPE: + if (record->event.pressed) { SEND_STRING("|"); } + return false; + case KC_BSLS: + if (record->event.pressed) { SEND_STRING("\\"); } + return false; + case KC_LBRC: + if (record->event.pressed) { SEND_STRING("["); } + return false; + case KC_RBRC: + if (record->event.pressed) { SEND_STRING("]"); } + return false; + case KC_LCBR: + if (record->event.pressed) { SEND_STRING("{"); } + return false; + case KC_RCBR: + if (record->event.pressed) { SEND_STRING("}"); } + return false; } return true; } From bef554d18bcb14492e2513b0759407e4b4581c9c Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Wed, 24 Oct 2018 08:57:08 -0700 Subject: [PATCH 253/269] Bug: Users had to be in the /util directory to run the script (#4228) --- util/new_keymap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/new_keymap.sh b/util/new_keymap.sh index b09f3dd0ca..73cc9e8cc3 100755 --- a/util/new_keymap.sh +++ b/util/new_keymap.sh @@ -18,7 +18,7 @@ if [ -z "$USERNAME" ]; then exit 1 fi -cd .. +cd "$(dirname "$0")/.." if [ ! -d "keyboards/$KB_PATH" ]; then printf "Error! keyboards/%s does not exist!\n" "$KB_PATH" From a5b10e5da24cb52c04dddc9168d5e7590fb749d2 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 24 Oct 2018 12:13:40 -0700 Subject: [PATCH 254/269] Fix syntax for windows --- docs/newbs_building_firmware.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/newbs_building_firmware.md b/docs/newbs_building_firmware.md index ac6bff2bc7..fabfefb190 100644 --- a/docs/newbs_building_firmware.md +++ b/docs/newbs_building_firmware.md @@ -16,7 +16,7 @@ Start by navigating to the `keymaps` folder for your keyboard. ?> Windows: - start keyboards//keymaps + start .\\keyboards\\\\keymaps ## Create a Copy Of The `default` Keymap From ffb2557a3aac1e5c943b1e6242c3a693da68d8ee Mon Sep 17 00:00:00 2001 From: 194h <38110558+194h@users.noreply.github.com> Date: Thu, 25 Oct 2018 19:04:48 +0200 Subject: [PATCH 255/269] Keymap: Updated my(194h) keymap to make it more clean and useful (#4236) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added my(194h) atreus62 keymap * Fixed what noroadsleft remarked in my pull request, hopefully got it all. * Followed drashna's suggestion. * Removed unused functionality from my keymap, added tap dance æøå and changed Layer 1 and Layer 2 * Removed unused functionality from my keymap, added tap dance æøå and changed Layer 1 and Layer 2 --- keyboards/atreus62/keymaps/194h/keymap.c | 109 ++++++++++------------- keyboards/atreus62/keymaps/194h/rules.mk | 5 +- 2 files changed, 51 insertions(+), 63 deletions(-) diff --git a/keyboards/atreus62/keymaps/194h/keymap.c b/keyboards/atreus62/keymaps/194h/keymap.c index 9b397fce46..1d069e9d42 100644 --- a/keyboards/atreus62/keymaps/194h/keymap.c +++ b/keyboards/atreus62/keymaps/194h/keymap.c @@ -39,6 +39,7 @@ //Norwegian layout - dependant on previous definitions #define NO_UNDS LSFT(NO_MINS) // _ #define NO_QUES LSFT(NO_PLUS) // ? +#define NO_ACUT RALT(NO_BSLS) // Acute #define NO_GRAV LSFT(NO_BSLS) // ` #define NO_GT LSFT(NO_LT) // > #define NO_HALF RALT(NO_LT) // ½ @@ -56,6 +57,9 @@ #define OSM_RSFT OSM(MOD_RSFT) #define OSM_RGUI OSM(MOD_RGUI) +//CTRL on hold, ESC on tap +#define CTL_ESC CTL_T(KC_ESC) + //Layers #define L1 0 #define L2 1 @@ -63,23 +67,51 @@ #define L4 3 #define L5 4 +// Momentary switch to layer +#define MO_L2 MO(L2) +#define MO_L4 MO(L4) +#define MO_L5 MO(L5) // Momentary switch to layer - One Shot Layer +#define OSL_L2 OSL(L2) #define OSL_L3 OSL(L3) #define OSL_L4 OSL(L4) +//Tap Dance Declarations +enum { + SCLN_OE = 0, + QUOT_AE, + DQT_AO +}; + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for semicolon, twice for ø + [SCLN_OE] = ACTION_TAP_DANCE_DOUBLE(NO_SCLN, NO_OE), + //Tap once for single quote, twice for æ + [QUOT_AE] = ACTION_TAP_DANCE_DOUBLE(NO_QUOT, NO_AE), + //Tap once for double quote, twice for å + [DQT_AO] = ACTION_TAP_DANCE_DOUBLE(NO_DQT, NO_AO), +// Other declarations would go here, separated by commas, if you have them +}; + +//Tap Dance keys +#define TD_SCLN_OE TD(SCLN_OE) +#define TD_QUOT_AE TD(QUOT_AE) +#define TD_DQT_AO TD(DQT_AO) + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [L1] = LAYOUT( KC_LGUI, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RGUI, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_DQT, - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_SCLN, NO_QUOT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD_DQT_AO, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD_SCLN_OE, TD_QUOT_AE, OSM_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, OSM_RSFT, - CTL_T(KC_ESC), MO(L5), KC_LEAD, OSM_LALT, MO(L4), OSL_L3, KC_SPC, KC_ENT, OSL_L3, MO(L4), OSM_RALT, NO_EQL, NO_PLUS, KC_RCTL + CTL_ESC, MO_L5, KC_TAB, OSM_LALT, MO_L4, OSL_L3, KC_SPC, KC_ENT, OSL_L3, MO_L4, OSM_LALT, NO_EQL, NO_PLUS, KC_RCTL ), [L2] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_AO, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_OE, NO_AE, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_DQT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_SCLN, NO_QUOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), @@ -95,66 +127,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, XXXXXXX, _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, KC_DEL, XXXXXXX, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, KC_APP, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX, - OSM_LCTL, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLU, OSM_RCTL + OSM_LCTL, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, OSM_RALT, KC_MUTE, KC_VOLU, OSM_RCTL ), [L5] = LAYOUT( XXXXXXX, TO(L1), TO(L2), TO(L3), TO(L4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_AO, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_OE, NO_AE, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ) }; - -// Unicode Linux -void matrix_init_user(void) { - set_unicode_input_mode(UC_LNX); -}; - - -#define TAP_ONCE(code) \ - register_code (code); \ - unregister_code (code) - - -LEADER_EXTERNS(); - -// Runs constantly in the background, in a loop. Only supports basic keycodes. -void matrix_scan_user(void) { - LEADER_DICTIONARY() { - leading = false; - leader_end(); - - //probably useless in practice, but cool - SEQ_ONE_KEY (KC_P) { - tap_random_base64(); - tap_random_base64(); - tap_random_base64(); - tap_random_base64(); - tap_random_base64(); - tap_random_base64(); - tap_random_base64(); - tap_random_base64(); - } - - SEQ_ONE_KEY (KC_G) { - SEND_STRING("grep something !"); - register_code(KC_RALT); - TAP_ONCE(KC_4); - unregister_code(KC_RALT); - } - SEQ_ONE_KEY (KC_T) { - SEND_STRING("tail "); - TAP_ONCE(KC_SLSH); - SEND_STRING("f !"); - register_code(KC_RALT); - TAP_ONCE(KC_4); - unregister_code(KC_RALT); - } - SEQ_ONE_KEY (KC_S) { - SEND_STRING("sudo !!"); - TAP_ONCE(KC_ENT); - } - } -} +//TODO: Is there productivity gain in the use of unicode? +// - Won't work in xterm. +// Create a layer for macros and/or unicode? +// Are macros useful? +// - Found no gain in having sendstring for commands. +// - Find repeated tasks that cannot be done easily on the OS. +// - Most other keymaps have macros for game/fun stuff, hard to find "serious" onces. +// Screw Norwegian layout, switch to US with unicode æøå or US/English International? +// - Will be different from laptop keyboard, requiring a switch on the OS side when only using the laptop. diff --git a/keyboards/atreus62/keymaps/194h/rules.mk b/keyboards/atreus62/keymaps/194h/rules.mk index 5246909a38..2c97aee093 100644 --- a/keyboards/atreus62/keymaps/194h/rules.mk +++ b/keyboards/atreus62/keymaps/194h/rules.mk @@ -1,8 +1,7 @@ -TAP_DANCE_ENABLE = no +TAP_DANCE_ENABLE = yes NKRO_ENABLE = true MOUSEKEY_ENABLE = no EXTRAKEY_ENABLE = yes CONSOLE_ENABLE = no KEY_LOCK_ENABLE = no -AUTO_SHIFT_ENABLE = no -LEADER_ENABLE = yes +LEADER_ENABLE = no From 3c95de3c695135be358800911f4d36767392f010 Mon Sep 17 00:00:00 2001 From: SpacebarRacecar <42380065+SpacebarRacecar@users.noreply.github.com> Date: Thu, 25 Oct 2018 22:08:25 +0200 Subject: [PATCH 256/269] Adding a readme to my userspace (#4239) * added userspace readme * small fix to userspace readme * another fix to userspace readme * changed and improved userspace readme * Update readme.md * Update readme.md * changes to readme again * readme again --- users/spacebarracecar/readme.md | 111 ++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 users/spacebarracecar/readme.md diff --git a/users/spacebarracecar/readme.md b/users/spacebarracecar/readme.md new file mode 100644 index 0000000000..172764c074 --- /dev/null +++ b/users/spacebarracecar/readme.md @@ -0,0 +1,111 @@ +# SpacebarRacecar Userspace + +The main purpose of this userspace is to keep my personal keymaps clean by moving shared code in here and also allowing me to easily change all my keymaps at once. However it also contains code that might be interesting to QMK Users living in Germany. Most of this code will be explained here. + + +## US Layout Keys for German PCs + +I'm using the US Ansi layout however I'm living in Germany which means that every PC here has its input language set to German. My goal was to create custom keycodes that emulate the US Keys so that I can plug my keyboards into any German PC and have them working without changing any settings. + +### How to use + +- To activate the custom keycodes set GERMAN_ENABLE = yes in the keyboards rules.mk file. +- The keycodes are listed and explained in [spacebarracecar.h](spacebarracecar.h) under `enum userspace_custom_keycodes`. +- The keycodes are handled by the `process_record_user` function which is now located in [spacebarracecar.c](spacebarracecar.c). To change keyboard specific configuration `process_record_keymap` is used (see [drashna userspace readme](../drashna/readme.md) for better explanation). +- There is a predefined `_DEADKEY` layer in [spacebarracecar.h](spacebarracecar.h) under `enum userspace_layers`. Shifted CU_QUOT enables the dead key layer, just like KC_QUOT would when using the US International layout. (See `enum userspace_custom_keycodes` for more explanation). +- On Windows grave and circonflexe are defined as dead keys when using the standard german layout. Those are automatically escaped when using the custom keycodes. `CU_ESCT` can be used to enable/disable this behavior. +- For a complete example see my [fc660c](../../keyboards/fc660c/keymaps/spacebarracecar/keymap.c) or [planck](../../keyboards/planck/keymaps/spacebarracecar/keymap.c) keymaps. + +### How it works + +Creating the custom keycodes was not a trivial task because it is necessary that they are able to send different keycodes depending on the physical shift state. Also the shift state of the actual send keycodes has to be completely independent of the physical shift state. At the same time it has to be ensured that shift never gets stuck or disabled accidentaly. + +(Shift state: If shift keycode is registered; Physical shift state: If shift key is actually pressed) + +Here is an example for a custom *US Equal* keycode that illustrates the problem: + +| Physical Shift State | Custom keycode | Actual send keycodes | +|----------------------|----------------|----------------------| +| Unshifted | = | Shifted DE_0 | +| Shifted | + | Unshifted DE_PLUS | + +#### Tracking the physical shift state + +To track the physical shift state there are two custom left and right shift keycodes `CU_LSFT` and `CU_RSFT`. These track the current physical shift state using two booleans `lshift` and `rshift`. To make things easier both custom shifts use KC_LSFT. A space cadet shift functionality is also included. The preexisting space cadet shift implementation could not be used because it doesn't reset when custom keycodes are pressed and therefore produces unwated parenthesis. + +#### Custom keycode templates + +To ease the creation of custom keycodes there are a few templates defined in [spacebarracecar.h](spacebarracecar.h). + +- `SHIFT_NORM(kc1, kc2)` Sends independent keycodes kc1 and kc2 depending on physical shift state without changing shift state. +- `SHIFT_SWITCH(kc1, kc2)` Sends independent keycodes kc1 and kc2 depending on physical shift state while flipping shift state. +- `SHIFT_ALL(kc1, kc2)` Sends independent keycodes kc1 and kc2 depending on physical shift state while always sending shift. +- `SHIFT_NO(kc1, kc2)` Sends independent keycodes kc1 and kc2 depending on physical shift state while never sending shift. +- `SHIFT_ALGR(kc1, kc2)` Sends independent keycodes kc1 and kc2 depending on physical shift state while never sending shift and always sending ralt. +- `UML(kc)` Sends keycode kc without changing shift state and then escapes the `_DEADKEY` layer. + +Here is `SHIFT_NORM` as an example: +```c +#define SHIFT_NORM(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout(); \ + if (lshift || rshift) { \ + register_code(KC_LSFT); \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + unregister_code(KC_LSFT); \ + unregister_code(kc1); \ + register_code(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ +} \ +return false; +``` + +It is noticeable that before registering a keycode the same keycode gets unregistered first. The reason for this is that there can now be two physical keys that use the same keycode only with different shift states. When rolling those two keys the keycode has to be unregistered first, otherwise the second key doesn't register. Also noticable is that sometimes the `add_to_prev` function is called. This will be explained later. The `timer_timeout` function is necessary to reset the timers of the custom space cadet shift functionality. + +It's worth mentioning that `SHIFT_ALGR` unlike the other templates doesn't allow repetition of characters when held. This is because it would otherwise require extensive checking of physical ralt status similar to shift to prevent ralt from getting stuck. + +#### Ensuring that shift state is always correct when pressing normal keycodes + +To ensure that non custom keycodes always get send with the correct shift state the default case in `process_record_user` includes a physical shift check that sets shift accordingly before registering the keycode. Also `timer_timeout` is always called to reset the space cadet shift timers to prevent unwanted parenthesis. + +```c +default: + if(record->event.pressed) { + timer_timeout(); + + #ifdef GERMAN_ENABLE + if (lshift || rshift) + register_code(KC_LSFT); + else + unregister_code(KC_LSFT); + #endif + + } + return process_record_keymap(keycode, record); +``` + +#### Ensuring that custom keycodes always produce the correct character + +When very specific key combinations that include custom keycodes and/or shift are pressed it can happen that wrong characters are produced due to changing shift states. The previously mentioned `add_to_prev` function is there to prevent that. It can be used to add a keycode to the `prev_kcs` array that can hold up to 6 keycodes. On various occasions, but mainly when shift is released `unreg_prev` is called, which then unregisters all saved keycodes. + +For real use this is probably not needed, but it doesn't hurt either. + +#### Adapting the templates for other languages + +In theory the templates can be used to create custom keycodes that map any layout to any other layout. + +## Other stuff + +### Custom Nav/Esc Key + +Since I'm always using a navigation layer with all my keyboards there is a `_NAV` layer predefined in [spacebarracecar.h](spacebarracecar.h) under `enum userspace_layers`. In addition to that I wanted to have a keycode that activates the navigation layer when held, but acts as Escape when pressed. In QMK there already exists `LT(layer, kc)`, however I found that there is some amount of lag before the layer is actived. Therefore I created a custom keycode CU_NAV that does the same without lag using a custom timer. Since I already need timers for the custom space cadet shift implementing this was very easy by adding the timer to the `timer_timeout` function. + +### Gamemode + +The userspace includes the custom keycode `CU_GAME` that is used to flip a boolean variable called `game`. That variable is used to enable/disable windows keys and space cadet shift. In my [planck keymap](../../keyboards/planck/keymaps/spacebarracecar/keymap.c) it also makes Lower act like Space which is more comfortable when resting on wasd and it could also be used to change various other things when gaming. From fc1e22ea94146d090af5b47a51fcc07cac7e677c Mon Sep 17 00:00:00 2001 From: lbibass Date: Thu, 25 Oct 2018 16:10:45 -0400 Subject: [PATCH 257/269] Keymap: Mechmini layout (#4232) * Added my Mechmini2 layout to qmk. * Added more info to the readme. * Made changes. * Update keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c Co-Authored-By: lbibass * Update keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c Co-Authored-By: lbibass --- .../v2/keymaps/lbibass_625_space/config.h | 4 ++ .../v2/keymaps/lbibass_625_space/keymap.c | 48 +++++++++++++++++++ .../v2/keymaps/lbibass_625_space/readme.md | 2 + .../v2/keymaps/lbibass_625_space/rules.mk | 11 +++++ .../v2/keymaps/lbibass_split_space/config.h | 4 ++ .../v2/keymaps/lbibass_split_space/keymap.c | 33 +++++++++++++ .../v2/keymaps/lbibass_split_space/readme.md | 2 + .../v2/keymaps/lbibass_split_space/rules.mk | 11 +++++ 8 files changed, 115 insertions(+) create mode 100755 keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h create mode 100755 keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c create mode 100644 keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md create mode 100755 keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk create mode 100755 keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h create mode 100755 keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c create mode 100644 keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md create mode 100755 keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h b/keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h new file mode 100755 index 0000000000..7adb68d347 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define ONESHOT_TAP_TOGGLE 3 +#define TAPPING_TERM 200 diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c b/keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c new file mode 100755 index 0000000000..40bfc42de0 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c @@ -0,0 +1,48 @@ +#include QMK_KEYBOARD_H + +#define _BL 0 +#define _FN1 2 +#define _FN2 3 +#define _WIN 1 +//Tap Dance Declarations +enum +{ + TD_DOTCOM = 0 +}; +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_DOTCOM] = ACTION_TAP_DANCE_DOUBLE(KC_COMMA, KC_DOT) + // Other declarations would go here, separated by commas, if you have them +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BL] = LAYOUT_625_space( + LT(OSL(2), KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD(TD_DOTCOM), OSL(2), OSM(MOD_RSFT), + KC_ESC, KC_LALT, KC_LCTL, KC_SPC, KC_RGUI, RGB_TOG), + [_WIN] = LAYOUT_625_space( + LT(OSL(2), KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD(TD_DOTCOM), OSL(2), OSM(MOD_RSFT), + KC_ESC, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, RGB_TOG), + [_FN1] = LAYOUT_625_space( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + GUI_T(KC_ESC), KC_PGUP, KC_VOLU, KC_DEL, KC_TRNS, KC_BSLS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_TRNS, + KC_LSFT, KC_PGDN, KC_VOLD, BL_STEP, BL_TOGG, KC_SCLN, KC_QUOT, KC_SLSH, KC_DOT, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN2] = LAYOUT_625_space( + KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET, + MT(KC_LGUI, KC_ESC), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(1), KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS, + KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; + + + + + diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md b/keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md new file mode 100644 index 0000000000..e09e520131 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md @@ -0,0 +1,2 @@ +# /u/Lbibass's 6.25u spacebar Mechmini 2.0 Layout. + diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk b/keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk new file mode 100755 index 0000000000..7bc50168df --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk @@ -0,0 +1,11 @@ +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = yes diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h b/keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h new file mode 100755 index 0000000000..2f35530627 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define ONESHOT_TAP_TOGGLE 3 +#define TAPPING_TERM 200 diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c b/keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c new file mode 100755 index 0000000000..7ad2aa81e9 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c @@ -0,0 +1,33 @@ +#include QMK_KEYBOARD_H + +#define _BL 0 +#define _FN1 2 +#define _FN2 3 +#define _WIN 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BL] = LAYOUT_split_space( + LT(2, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, MO(2), KC_RSHIFT, + KC_ESC, KC_LALT, KC_LCTL, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, RGB_TOG), + [_WIN] = LAYOUT_split_space( + LT(2, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, MO(2), KC_RSHIFT, + KC_ESC, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_LCTL, RGB_TOG), + [_FN1] = LAYOUT_split_space( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_TRNS, KC_PGUP, KC_VOLU, KC_TRNS, KC_TRNS, KC_BSLS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_TRNS, + KC_LSFT, KC_PGDN, KC_VOLD, KC_TRNS, KC_TRNS, KC_SCLN, KC_QUOT, KC_SLSH, KC_DOT, KC_RSHIFT, KC_HOME, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [_FN2] = LAYOUT_split_space( + KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET, + MT(KC_LGUI, KC_ESC), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(1), KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS, + KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_END, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +}; + diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md b/keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md new file mode 100644 index 0000000000..34888fbb19 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md @@ -0,0 +1,2 @@ +# /u/Lbibass's Split Space Mechmini 2.0 Layout + diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk b/keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk new file mode 100755 index 0000000000..fd3621e841 --- /dev/null +++ b/keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk @@ -0,0 +1,11 @@ +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = no From fa1ac4d7242a0f3944d71b58926ff2a1ce73c96b Mon Sep 17 00:00:00 2001 From: Phillip Tennen Date: Fri, 26 Oct 2018 15:59:41 +0200 Subject: [PATCH 258/269] Fix incorrect doctoring in feature.backlight.md (#4244) I'm guessing someone deleted a row at some point in the past, but I didn't blame it. --- docs/feature_backlight.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md index 8f883e08fb..7bb7e03a89 100644 --- a/docs/feature_backlight.md +++ b/docs/feature_backlight.md @@ -61,7 +61,7 @@ In this handler, the value of an incrementing counter is mapped onto a precomput |`backlight_increase()` |Increase the backlight level | |`backlight_decrease()` |Decrease the backlight level | |`backlight_level(x)` |Sets the backlight level to specified level | -|`get_backlight_level()`|Toggle backlight breathing | +|`get_backlight_level()`|Return the current backlight level | ### Backlight Breathing Functions From 39addf8bc99e6282e655298c2c24da07a5ef77f8 Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Thu, 25 Oct 2018 23:34:40 -0700 Subject: [PATCH 259/269] JD45: layout macro refactor The macro that was LAYOUT prepended KC_ to all the keycode arguments, preventing the Configurator from working with the JD45. This macro is now LAYOUT_kc. The macro LAYOUT is a more-standard macro. Switch identifiers have changed throughout. Format is k. --- keyboards/jd45/jd45.h | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/keyboards/jd45/jd45.h b/keyboards/jd45/jd45.h index 48641c199a..105a8acb60 100644 --- a/keyboards/jd45/jd45.h +++ b/keyboards/jd45/jd45.h @@ -6,15 +6,27 @@ /* JD45 keymap definition macro */ #define LAYOUT( \ - K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \ - K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \ - K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k36, k38, k39, k3a, k3b \ ) { \ - { KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K10, KC_##K11, KC_##K12, KC_##K13 }, \ - { KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_NO }, \ - { KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_NO }, \ - { KC_##K38, KC_##K39, KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_##K43, KC_NO, KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_NO } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, KC_NO }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO }, \ + { k30, k31, k32, k33, k34, KC_NO, k36, KC_NO, k38, k39, k3a, k3b, KC_NO } \ +} + +#define LAYOUT_kc( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k36, k38, k39, k3a, k3b \ +) { \ + { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b, KC_##k0c }, \ + { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, KC_NO }, \ + { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b, KC_NO }, \ + { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_NO, KC_##k36, KC_NO, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b, KC_NO } \ } #endif From 899731679d262023a9e25eba805b3674b1ceb82e Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Thu, 25 Oct 2018 23:38:45 -0700 Subject: [PATCH 260/269] JD45: blakedietz keymap refactor - config.h - updated to more-preferred format - layout macro LAYOUT_JD45 removed (identical to new macro LAYOUT) - keymap.c - updated to use macro LAYOUT - redundant KC_TRNS and KC_NO definitions removed --- keyboards/jd45/keymaps/blakedietz/config.h | 19 ++----------------- keyboards/jd45/keymaps/blakedietz/keymap.c | 18 +++++++----------- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/keyboards/jd45/keymaps/blakedietz/config.h b/keyboards/jd45/keymaps/blakedietz/config.h index 38d850ef6e..eb4cf3bdfb 100644 --- a/keyboards/jd45/keymaps/blakedietz/config.h +++ b/keyboards/jd45/keymaps/blakedietz/config.h @@ -1,19 +1,4 @@ -#include "../../config.h" - -/** - *JD45 keymap definition macro - */ -#define LAYOUT_JD45( \ - K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \ - K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \ - K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \ -) { \ - { K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13 }, \ - { K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, KC_NO }, \ - { K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, KC_NO }, \ - { K38, K39, K40, K41, K42, KC_NO, K43, KC_NO, K44, K45, K46, K47, KC_NO } \ -} +#pragma once /** * This makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when @@ -28,4 +13,4 @@ #define MOUSEKEY_DELAY 0 #define MOUSEKEY_TIME_TO_MAX 5 #define MOUSEKEY_MAX_SPEED 2 -#define MOUSEKEY_WHEEL_DELAY 0 \ No newline at end of file +#define MOUSEKEY_WHEEL_DELAY 0 diff --git a/keyboards/jd45/keymaps/blakedietz/keymap.c b/keyboards/jd45/keymaps/blakedietz/keymap.c index bde760a223..a40a2c604e 100644 --- a/keyboards/jd45/keymaps/blakedietz/keymap.c +++ b/keyboards/jd45/keymaps/blakedietz/keymap.c @@ -45,10 +45,6 @@ enum macro_keycodes KC_AG_TAB_R, }; -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - /** * This section of macros is for tap or hold functionality. Keys will fire off the second symbol in the name if tapped * or fire the first symbol in the name if held. For example @@ -101,7 +97,7 @@ enum macro_keycodes * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_JD45( + [_QWERTY] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, ALL_T(KC_NO), /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -124,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Prev | Next | Mute | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_LOWER] = LAYOUT_JD45( + [_LOWER] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -146,7 +142,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Prev | Next | Mute | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_RAISE] = LAYOUT_JD45( + [_RAISE] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -169,7 +165,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_MOUSECURSOR] = LAYOUT_JD45( + [_MOUSECURSOR] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ _______, _______, _______, KC_MS_U, _______, _______, _______, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -191,7 +187,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | Reset | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_ADJUST] = LAYOUT_JD45( + [_ADJUST] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, @@ -214,7 +210,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_VIM] = LAYOUT_JD45( + [_VIM] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -236,7 +232,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_MEDIA] = LAYOUT_JD45( + [_MEDIA] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ From 340dd097580f27d9f8ffaad78371869d883220d1 Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Thu, 25 Oct 2018 23:40:12 -0700 Subject: [PATCH 261/269] JD45: default keymap refactor Default keymap refactored to use new macro LAYOUT (from LAYOUT_kc). --- keyboards/jd45/keymaps/default/keymap.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/keyboards/jd45/keymaps/default/keymap.c b/keyboards/jd45/keymaps/default/keymap.c index 0bb519f5fc..61e051a360 100644 --- a/keyboards/jd45/keymaps/default/keymap.c +++ b/keyboards/jd45/keymaps/default/keymap.c @@ -5,13 +5,10 @@ */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( - ESC, Q, W, E, R, T, Y, U, I, O, P, QUOT, BSPC, - TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT, - LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, - PAUSE, LCTL, LALT, DEL, SPC, DEL, LEFT, UP, DOWN, RIGHT), -}; - -const uint16_t PROGMEM fn_actions[] = { - + [0] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_PAUS, KC_LCTL, KC_LALT, KC_DEL, KC_SPC, KC_DEL, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT + ), }; From 8cf15bffa0693caa99d1b9ddc5c6ecc0936f2605 Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Thu, 25 Oct 2018 23:45:14 -0700 Subject: [PATCH 262/269] JD45: jeebak keymap refactor - config.h deleted (file was redundant) - layout macro LAYOUT_JD45 removed (identical to new macro LAYOUT) - ../../config.h include line redundant due to past changes to build script - keymap.c - updated to use macro LAYOUT - redundant KC_TRNS and KC_NO definitions removed --- keyboards/jd45/keymaps/jeebak/config.h | 16 ---------------- keyboards/jd45/keymaps/jeebak/keymap.c | 22 +++++++++------------- 2 files changed, 9 insertions(+), 29 deletions(-) delete mode 100644 keyboards/jd45/keymaps/jeebak/config.h diff --git a/keyboards/jd45/keymaps/jeebak/config.h b/keyboards/jd45/keymaps/jeebak/config.h deleted file mode 100644 index bfaa128937..0000000000 --- a/keyboards/jd45/keymaps/jeebak/config.h +++ /dev/null @@ -1,16 +0,0 @@ -#include "../../config.h" - -/** - *JD45 keymap definition macro - */ -#define LAYOUT_JD45( \ - K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \ - K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \ - K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \ - K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \ -) { \ - { K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13 }, \ - { K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, KC_NO }, \ - { K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, KC_NO }, \ - { K38, K39, K40, K41, K42, KC_NO, K43, KC_NO, K44, K45, K46, K47, KC_NO } \ -} diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c index c711939fcf..bb6c829382 100644 --- a/keyboards/jd45/keymaps/jeebak/keymap.c +++ b/keyboards/jd45/keymaps/jeebak/keymap.c @@ -48,10 +48,6 @@ enum macro_keycodes KC_AG_TAB_R, }; -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - // Custom macros #define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl #define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift @@ -91,7 +87,7 @@ enum macro_keycodes */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_JD45( + [_QWERTY] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -113,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_COLEMAK] = LAYOUT_JD45( + [_COLEMAK] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -135,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_DVORAK] = LAYOUT_JD45( + [_DVORAK] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -157,7 +153,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite | | | | | | | Prev | Next | Mute | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_LOWER] = LAYOUT_JD45( + [_LOWER] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -179,7 +175,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite | | | | | | | Prev | Next | Mute | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_RAISE] = LAYOUT_JD45( + [_RAISE] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -205,7 +201,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * seem to work on Mac. Presumably they'll work under Windows. */ - [_TOUCHCURSOR] = LAYOUT_JD45( + [_TOUCHCURSOR] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______, _______, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -228,7 +224,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_MOUSECURSOR] = LAYOUT_JD45( + [_MOUSECURSOR] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ _______, _______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -251,7 +247,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_PLOVER] = LAYOUT_JD45( + [_PLOVER] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ @@ -273,7 +269,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | Reset | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ - [_ADJUST] = LAYOUT_JD45( + [_ADJUST] = LAYOUT( /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ From 357c1bb657cfa2c65c73b8b12929725db2465bf4 Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Thu, 25 Oct 2018 23:58:20 -0700 Subject: [PATCH 263/269] JD45: justin keymap refactor Updated parallel to LAYOUT_kc macro rename. --- keyboards/jd45/keymaps/justin/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/jd45/keymaps/justin/keymap.c b/keyboards/jd45/keymaps/justin/keymap.c index a797582b07..4590374e9b 100644 --- a/keyboards/jd45/keymaps/justin/keymap.c +++ b/keyboards/jd45/keymaps/justin/keymap.c @@ -1,27 +1,27 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( + [0] = LAYOUT_kc( ESC, Q, W, F, P, G, J, L, U, Y, SCLN, QUOT, BSPC, FN8, A, R, S, T, D, H, N, E, I, O, ENT, LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, FN6, FN4, LGUI, FN7, FN2, FN1, SPC, FN5, RALT, FN3, FN0), - [1] = LAYOUT( + [1] = LAYOUT_kc( TRNS, FN10, FN11, FN12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, DEL, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGUP, LEFT, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, END, PGDN, DOWN, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), - [2] = LAYOUT( + [2] = LAYOUT_kc( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS, TRNS, FN29, TRNS, TRNS, TRNS, PAUSE, EQL, MINS, TRNS, TRNS), - [3] = LAYOUT( + [3] = LAYOUT_kc( TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), - [4] = LAYOUT( + [4] = LAYOUT_kc( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS, From db8454ca99b58c31ea25954b4ca513d38e5b8c72 Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Thu, 25 Oct 2018 23:59:20 -0700 Subject: [PATCH 264/269] JD45: mjt keymap refactor Updated parallel to LAYOUT_kc macro rename. --- keyboards/jd45/keymaps/mjt/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/jd45/keymaps/mjt/keymap.c b/keyboards/jd45/keymaps/mjt/keymap.c index a53b09642a..f806de65d9 100644 --- a/keyboards/jd45/keymaps/mjt/keymap.c +++ b/keyboards/jd45/keymaps/mjt/keymap.c @@ -4,23 +4,23 @@ */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( + [0] = LAYOUT_kc( TAB, Q, W, E, R, T, Y, U, I, O, P, MINS, BSLS, FN1, A, S, D, F, G, H, J, K, L, QUOT, ENT, FN0, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, NO, LCTL, LALT, LGUI, SPC, BSPC, APP, FN2, ESC, NO), - [1] = LAYOUT( + [1] = LAYOUT_kc( GRV, TRNS, UP, TRNS, 7, 8, 9, 0, MINS, EQL, PSCR, LBRC, RBRC, TRNS, LEFT, DOWN, RGHT, 4, 5, 6, INS, HOME, PGUP, SCLN, TRNS, TRNS, TRNS, TRNS, TRNS, 1, 2, 3, DEL, END, PGDN, TRNS, TRNS, TRNS, TRNS, TRNS, SPC, TRNS, DEL, TRNS, FN3, TRNS, TRNS), - [2] = LAYOUT( + [2] = LAYOUT_kc( TRNS, TRNS, VOLU, TRNS, F7, F8, F9, F10, F11, F12, PSCR, FN3, FN4, TRNS, MPRV, VOLD, MNXT, F4, F5, F6, J, K, L, SCLN, TRNS, TRNS, TRNS, TRNS, TRNS, F1, F2, F3, MUTE, MPRV, MNXT, MSTP, TRNS, TRNS, TRNS, TRNS, LGUI, TRNS, TRNS, TRNS, TRNS, PAUS, TRNS) /* , -[3] = LAYOUT( +[3] = LAYOUT_kc( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, BTLD, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, From ca02863b569fb9a3bf21967942567149b562e2be Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Fri, 26 Oct 2018 00:03:00 -0700 Subject: [PATCH 265/269] JD45: mjt6u keymap refactor - config.h - updated to remove redundancies - add #pragma once - keymap.c - updated to use macro LAYOUT - redundant KC_TRNS and KC_NO definitions removed --- keyboards/jd45/keymaps/mjt6u/config.h | 83 +-------------------------- keyboards/jd45/keymaps/mjt6u/keymap.c | 62 +++++++++++++++----- 2 files changed, 50 insertions(+), 95 deletions(-) diff --git a/keyboards/jd45/keymaps/mjt6u/config.h b/keyboards/jd45/keymaps/mjt6u/config.h index bf9dc6df3b..41d1557c6f 100644 --- a/keyboards/jd45/keymaps/mjt6u/config.h +++ b/keyboards/jd45/keymaps/mjt6u/config.h @@ -1,84 +1,3 @@ -/* -Copyright 2012 Jun Wako - -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 . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define DEVICE_VER 0x0001 -#define MANUFACTURER geekhack -#define PRODUCT JD45 -#define DESCRIPTION q.m.k. keyboard firmware for JD45 - -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 13 - -/* Planck PCB default pin-out */ -#define MATRIX_ROW_PINS { F0, F1, F5, B4 } -#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0 } -#define UNUSED_PINS - -#define BACKLIGHT_PIN B7 +#pragma once #define USB_MAX_POWER_CONSUMPTION 50 - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCING_DELAY 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 - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/jd45/keymaps/mjt6u/keymap.c b/keyboards/jd45/keymaps/mjt6u/keymap.c index c17a07fd04..4c0b8828a5 100644 --- a/keyboards/jd45/keymaps/mjt6u/keymap.c +++ b/keyboards/jd45/keymaps/mjt6u/keymap.c @@ -25,25 +25,61 @@ enum jd45_keycodes #define LONGPRESS_DELAY 150 #define LAYER_TOGGLE_DELAY 900 -#define _______ KC_TRNS #define __MOD__ KC_TRNS -#define XXXXXXX KC_NO #define F_FNSPC F(0) #define F_NUMSPC F(1) #define F_FNTAB F(2) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = { - {F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC}, - {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, - {XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_FNSPC, XXXXXXX, XXXXXXX, MO(_FUNCTION), MO(_ADJUST)}}, - [_QWERTYNUMMODS] = {{F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC}, {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, {XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_NUMSPC, XXXXXXX, XXXXXXX, MO(_FKEYNUMPAD), MO(_ADJUST)}}, - [_NUMSYM] = {{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_DEL}, {__MOD__, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______}, {_______, _______, _______, _______, _______, KC_SPC, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______}, {XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}, - [_FUNCTION] = {{__MOD__, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, {__MOD__, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, {XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}, - [_NUMPAD] = {{KC_GRV, _______, KC_UP, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PSCR, KC_LBRC, KC_RBRC}, {_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_4, KC_5, KC_6, KC_INS, KC_HOME, KC_PGUP, _______, _______}, {_______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DEL, KC_END, KC_PGDN, _______, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}, - [_FKEYNUMPAD] = {{_______, _______, KC_VOLU, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, _______}, {_______, KC_MPRV, KC_VOLD, KC_MNXT, KC_F4, KC_F5, KC_F6, KC_J, KC_K, KC_L, KC_SCLN, _______}, {_______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_MUTE, KC_MPRV, KC_MNXT, KC_MSTP, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}, - [_ADJUST] = {{_______, RESET, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, KC_PSCR, _______, _______}, {_______, _______, _______, _______, USEFNMODS, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, MACSLEEP, _______, _______}, {_______, _______, _______, _______, _______, _______, USENUMMODS, _______, _______, _______, _______, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}}; + [_QWERTY] = LAYOUT( \ + F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC, \ + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT), \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ + XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, F_FNSPC, XXXXXXX, MO(_FUNCTION), MO(_ADJUST), XXXXXXX \ + ), + + [_QWERTYNUMMODS] = LAYOUT( \ + F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC, \ + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT), \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ + XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, F_NUMSPC, XXXXXXX, MO(_FKEYNUMPAD), MO(_ADJUST), XXXXXXX \ + ), + + [_NUMSYM] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_DEL, \ + __MOD__, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \ + _______, _______, _______, _______, _______, KC_SPC, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, \ + XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \ + ), + + [_FUNCTION] = LAYOUT( \ + __MOD__, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + __MOD__, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \ + ), + + [_NUMPAD] = LAYOUT( \ + KC_GRV, _______, KC_UP, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PSCR, KC_LBRC, KC_RBRC, \ + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_4, KC_5, KC_6, KC_INS, KC_HOME, KC_PGUP, _______, _______, \ + _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DEL, KC_END, KC_PGDN, _______, _______, \ + XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \ + ), + + [_FKEYNUMPAD] = LAYOUT( \ + _______, _______, KC_VOLU, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, _______, \ + _______, KC_MPRV, KC_VOLD, KC_MNXT, KC_F4, KC_F5, KC_F6, KC_J, KC_K, KC_L, KC_SCLN, _______, \ + _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_MUTE, KC_MPRV, KC_MNXT, KC_MSTP, _______, \ + XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \ + ), + + [_ADJUST] = LAYOUT( \ + _______, RESET, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, KC_PSCR, _______, _______, \ + _______, _______, _______, _______, USEFNMODS, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, MACSLEEP, _______, _______, \ + _______, _______, _______, _______, _______, _______, USENUMMODS, _______, _______, _______, _______, _______, \ + XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \ + ) +}; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_LAYER_TAP_KEY(_NUMSYM, KC_SPC), From cc8744548108b1c1f820fb411ac3bf313aca1f5f Mon Sep 17 00:00:00 2001 From: noroadsleft Date: Fri, 26 Oct 2018 00:12:07 -0700 Subject: [PATCH 266/269] JD45: readme update Updated the links to the Docs. --- keyboards/jd45/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/jd45/readme.md b/keyboards/jd45/readme.md index d85a521269..7ef02bd4fa 100644 --- a/keyboards/jd45/readme.md +++ b/keyboards/jd45/readme.md @@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment): make jd45:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). From e22c3992454ade93ccaef70ab077e79a4b2a5ef0 Mon Sep 17 00:00:00 2001 From: gromwalh <15847180+gromwalh@users.noreply.github.com> Date: Fri, 26 Oct 2018 14:12:40 -0700 Subject: [PATCH 267/269] Ergodox Infinity: Swapped Row and Column in comments (#4247) When comparing the pins in this file to the Ergodox Infinity schematic, it seems that the first section is describing the rows and the second section is describing the columns. --- keyboards/ergodox_infinity/matrix.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_infinity/matrix.c b/keyboards/ergodox_infinity/matrix.c index 3baa07f583..3a0a179286 100644 --- a/keyboards/ergodox_infinity/matrix.c +++ b/keyboards/ergodox_infinity/matrix.c @@ -44,14 +44,14 @@ static uint16_t debouncing_time = 0; void matrix_init(void) { - /* Column(sense) */ + /* Row(sense) */ palSetPadMode(GPIOD, 1, PAL_MODE_INPUT_PULLDOWN); palSetPadMode(GPIOD, 4, PAL_MODE_INPUT_PULLDOWN); palSetPadMode(GPIOD, 5, PAL_MODE_INPUT_PULLDOWN); palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN); palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN); - /* Row(strobe) */ + /* Column(strobe) */ palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL); From 85688e5b52112c86895171d3dc8b26610480e932 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 26 Oct 2018 16:19:23 -0400 Subject: [PATCH 268/269] add support for encoders to core --- common_features.mk | 5 +++ docs/_sidebar.md | 1 + docs/_summary.md | 1 + docs/feature_encoders.md | 41 ++++++++++++++++++++ keyboards/planck/planck.h | 2 + keyboards/planck/rev6/config.h | 4 ++ keyboards/planck/rev6/matrix.c | 29 -------------- keyboards/planck/rev6/rules.mk | 1 + quantum/encoder.c | 70 ++++++++++++++++++++++++++++++++++ quantum/encoder.h | 29 ++++++++++++++ quantum/quantum.c | 12 ++++++ 11 files changed, 166 insertions(+), 29 deletions(-) create mode 100644 docs/feature_encoders.md create mode 100644 quantum/encoder.c create mode 100644 quantum/encoder.h diff --git a/common_features.mk b/common_features.mk index 65ff6b5b38..3fd8361a52 100644 --- a/common_features.mk +++ b/common_features.mk @@ -219,6 +219,11 @@ ifeq ($(strip $(USB_HID_ENABLE)), yes) include $(TMK_DIR)/protocol/usb_hid.mk endif +ifeq ($(strip $(ENCODER_ENABLE)), yes) + SRC += $(QUANTUM_DIR)/encoder.c + OPT_DEFS += -DENCODER_ENABLE +endif + ifeq ($(strip $(HD44780_ENABLE)), yes) SRC += drivers/avr/hd44780.c OPT_DEFS += -DHD44780_ENABLE diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 465f4657cd..2c57380122 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -52,6 +52,7 @@ * [Combos](feature_combo) * [Command](feature_command.md) * [Dynamic Macros](feature_dynamic_macros.md) + * [Encoders](feature_encoders.md) * [Grave Escape](feature_grave_esc.md) * [Key Lock](feature_key_lock.md) * [Layouts](feature_layouts.md) diff --git a/docs/_summary.md b/docs/_summary.md index 465f4657cd..2c57380122 100644 --- a/docs/_summary.md +++ b/docs/_summary.md @@ -52,6 +52,7 @@ * [Combos](feature_combo) * [Command](feature_command.md) * [Dynamic Macros](feature_dynamic_macros.md) + * [Encoders](feature_encoders.md) * [Grave Escape](feature_grave_esc.md) * [Key Lock](feature_key_lock.md) * [Layouts](feature_layouts.md) diff --git a/docs/feature_encoders.md b/docs/feature_encoders.md new file mode 100644 index 0000000000..f482eefec8 --- /dev/null +++ b/docs/feature_encoders.md @@ -0,0 +1,41 @@ +# Encoders + +Basic encoders are supported by adding this to your `rules.mk`: + + ENCODER_ENABLE = yes + +and this to your `config.h`: + + #define NUMBER_OF_ENCODERS 1 + #define ENCODERS_PAD_A { B12 } + #define ENCODERS_PAD_B { B13 } + +Each PAD_A/B variable defines an array so multiple encoders can be defined, e.g.: + + #define ENCODERS_PAD_A { encoder1a, encoder2a } + #define ENCODERS_PAD_B { encoder1a, encoder2b } + +If your encoder's clockwise directions are incorrect, you can swap the A & B pad definitions. + +Additionally, the resolution can be specified in the same file (the default & suggested is 4): + + #define ENCODER_RESOLUTION 4 + +## Callbacks + +The callback functions can be inserted into your `.c`: + + void encoder_update_kb(uint8_t index, bool clockwise) { + encoder_update_user(index, clockwise); + } + +or `keymap.c`: + + void encoder_update_user(uint8_t index, bool clockwise) { + + } + + +## Hardware + +The A an B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground. diff --git a/keyboards/planck/planck.h b/keyboards/planck/planck.h index f0a12d9335..d908d80ec4 100644 --- a/keyboards/planck/planck.h +++ b/keyboards/planck/planck.h @@ -3,6 +3,8 @@ #include "quantum.h" +#define encoder_update(clockwise) encoder_update_user(uint8_t index, clockwise) + #ifdef __AVR__ #define LAYOUT_planck_mit( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ diff --git a/keyboards/planck/rev6/config.h b/keyboards/planck/rev6/config.h index afd69f7d84..c0fbb412ee 100644 --- a/keyboards/planck/rev6/config.h +++ b/keyboards/planck/rev6/config.h @@ -43,6 +43,10 @@ * #define UNUSED_PINS */ +#define NUMBER_OF_ENCODERS 1 +#define ENCODERS_PAD_A { B12 } +#define ENCODERS_PAD_B { B13 } + #define MUSIC_MAP #undef AUDIO_VOICES #undef C6_AUDIO diff --git a/keyboards/planck/rev6/matrix.c b/keyboards/planck/rev6/matrix.c index e4ebe48acc..2df588cefc 100644 --- a/keyboards/planck/rev6/matrix.c +++ b/keyboards/planck/rev6/matrix.c @@ -21,10 +21,6 @@ static matrix_row_t matrix_debouncing[MATRIX_COLS]; static bool debouncing = false; static uint16_t debouncing_time = 0; -static uint8_t encoder_state = 0; -static int8_t encoder_value = 0; -static int8_t encoder_LUT[] = { 0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0 }; - static bool dip_switch[4] = {0, 0, 0, 0}; __attribute__ ((weak)) @@ -53,12 +49,6 @@ void matrix_init(void) { palSetPadMode(GPIOA, 10, PAL_MODE_INPUT_PULLUP); palSetPadMode(GPIOB, 9, PAL_MODE_INPUT_PULLUP); - // encoder setup - palSetPadMode(GPIOB, 12, PAL_MODE_INPUT_PULLUP); - palSetPadMode(GPIOB, 13, PAL_MODE_INPUT_PULLUP); - - encoder_state = (palReadPad(GPIOB, 12) << 0) | (palReadPad(GPIOB, 13) << 1); - // actual matrix setup palSetPadMode(GPIOB, 11, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL); @@ -87,15 +77,8 @@ void matrix_init(void) { __attribute__ ((weak)) void dip_update(uint8_t index, bool active) { } -__attribute__ ((weak)) -void encoder_update(bool clockwise) { } - bool last_dip_switch[4] = {0}; -#ifndef ENCODER_RESOLUTION - #define ENCODER_RESOLUTION 4 -#endif - uint8_t matrix_scan(void) { // dip switch dip_switch[0] = !palReadPad(GPIOB, 14); @@ -108,18 +91,6 @@ uint8_t matrix_scan(void) { } memcpy(last_dip_switch, dip_switch, sizeof(&dip_switch)); - // encoder on B12 and B13 - encoder_state <<= 2; - encoder_state |= (palReadPad(GPIOB, 12) << 0) | (palReadPad(GPIOB, 13) << 1); - encoder_value += encoder_LUT[encoder_state & 0xF]; - if (encoder_value >= ENCODER_RESOLUTION) { - encoder_update(0); - } - if (encoder_value <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise - encoder_update(1); - } - encoder_value %= ENCODER_RESOLUTION; - // actual matrix for (int col = 0; col < MATRIX_COLS; col++) { matrix_row_t data = 0; diff --git a/keyboards/planck/rev6/rules.mk b/keyboards/planck/rev6/rules.mk index 3603e287b3..dce683a7ff 100644 --- a/keyboards/planck/rev6/rules.mk +++ b/keyboards/planck/rev6/rules.mk @@ -54,3 +54,4 @@ CUSTOM_MATRIX = yes # Custom matrix file AUDIO_ENABLE = yes RGBLIGHT_ENABLE = no # SERIAL_LINK_ENABLE = yes +ENCODER_ENABLE = yes diff --git a/quantum/encoder.c b/quantum/encoder.c new file mode 100644 index 0000000000..6629a098b8 --- /dev/null +++ b/quantum/encoder.c @@ -0,0 +1,70 @@ +/* + * Copyright 2018 Jack Humbert + * + * 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 "encoder.h" + +#ifndef ENCODER_RESOLUTION + #define ENCODER_RESOLUTION 4 +#endif + +#ifndef NUMBER_OF_ENCODERS + #error "Number of encoders not defined by NUMBER_OF_ENCODERS" +#endif + +#if !defined(ENCODERS_PAD_A) || !defined(ENCODERS_PAD_B) + #error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B" +#endif + +static pin_t encoders_pad_a[NUMBER_OF_ENCODERS] = ENCODERS_PAD_A; +static pin_t encoders_pad_b[NUMBER_OF_ENCODERS] = ENCODERS_PAD_B; + +static int8_t encoder_LUT[] = { 0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0 }; + +static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0}; +static int8_t encoder_value[NUMBER_OF_ENCODERS] = {0}; + +__attribute__ ((weak)) +void encoder_update_user(int8_t index, bool clockwise) { } + +__attribute__ ((weak)) +void encoder_update_kb(int8_t index, bool clockwise) { + encoder_update_user(index, clockwise); +} + +void encoder_init(void) { + for (int i = 0; i < NUMBER_OF_ENCODERS; i++) { + setPinInputHigh(encoders_pad_a[i]); + setPinInputHigh(encoders_pad_b[i]); + + encoder_state[i] = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1); + } +} + +void encoder_read(void) { + for (int i = 0; i < NUMBER_OF_ENCODERS; i++) { + encoder_state[i] <<= 2; + encoder_state[i] |= (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1); + encoder_value[i] += encoder_LUT[encoder_state[i] & 0xF]; + if (encoder_value[i] >= ENCODER_RESOLUTION) { + encoder_update_kb(i, COUNTRECLOCKWISE); + } + if (encoder_value[i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise + encoder_update_kb(i, CLOCKWISE); + } + encoder_value[i] %= ENCODER_RESOLUTION; + } +} diff --git a/quantum/encoder.h b/quantum/encoder.h new file mode 100644 index 0000000000..2024fa303f --- /dev/null +++ b/quantum/encoder.h @@ -0,0 +1,29 @@ +/* + * Copyright 2018 Jack Humbert + * + * 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 + +#include "quantum.h" + +#define COUNTRECLOCKWISE 0 +#define CLOCKWISE 1 + +void encoder_init(void); +void encoder_read(void); + +void encoder_update_kb(int8_t index, bool clockwise); +void encoder_update_user(int8_t index, bool clockwise); diff --git a/quantum/quantum.c b/quantum/quantum.c index eed59f811e..c9bec6740b 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -42,6 +42,11 @@ extern backlight_config_t backlight_config; #include "process_midi.h" #endif + +#ifdef ENCODER_ENABLE +#include "encoder.h" +#endif + #ifdef AUDIO_ENABLE #ifndef GOODBYE_SONG #define GOODBYE_SONG SONG(GOODBYE_SOUND) @@ -957,6 +962,9 @@ void matrix_init_quantum() { #ifdef RGB_MATRIX_ENABLE rgb_matrix_init(); #endif + #ifdef ENCODER_ENABLE + encoder_init(); + #endif matrix_init_kb(); } @@ -991,6 +999,10 @@ void matrix_scan_quantum() { rgb_matrix_task_counter = ((rgb_matrix_task_counter + 1) % (RGB_MATRIX_SKIP_FRAMES + 1)); #endif + #ifdef ENCODER_ENABLE + encoder_read(); + #endif + matrix_scan_kb(); } #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN) From 24b3556e844ec76813a42ce4c5b7a77a6f874d5a Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 26 Oct 2018 16:47:00 -0400 Subject: [PATCH 269/269] add better example --- docs/feature_encoders.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/feature_encoders.md b/docs/feature_encoders.md index f482eefec8..036c6a1d89 100644 --- a/docs/feature_encoders.md +++ b/docs/feature_encoders.md @@ -32,10 +32,17 @@ The callback functions can be inserted into your `.c`: or `keymap.c`: void encoder_update_user(uint8_t index, bool clockwise) { - + if (index == 0) { + if (clockwise) { + register_code(KC_PGDN); + unregister_code(KC_PGDN); + } else { + register_code(KC_PGUP); + unregister_code(KC_PGUP); + } + } } - ## Hardware The A an B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground.

W z90kG-GuI~_DYm)_&ia+K+Zp1WQ(^^YEZfHeJeo_3O$OHa;=h_nBzMFqA9L3~L00C` z{6T%P$}4^9*kbW^Q{Or1R`ef+l1VB{f2lHn#Y~${&?}?)+bMvILfGG!^Q?w9Bu>O6%Ed% zZEG}gPY>Nt5S1GT9qTV`elTWs}w=kQWklAJj1D@5YNi7UpZ*!g0Iw>QUt1mVYvIi3ac)S za=T%Oly{II$?5bJ4yUHBm$?@EF)j&hopCAE5Q7!)~t2S0Zi zC)n0~o!#8i`K*i*L$tFG(yqg8zE3hmP@!_l=V;HSduFw9iZW7^mV@oS*{s~GHt;F) zIAjaTj+JUZ25QLSSs{6&N5{+6eNHL1+ThaUOPH-n7Hz1iGDoqgkBGcetd;^MjyK?8 zG18&A-%X8U7+YP)BezRJ@Xr8?bCp(ZcKt`KSCR=QA7_dp9axR3J65H>on>pA%gdQ1 zXOHH5@G;vJV#`mty17UppUMZN&fKbxdOf62ayDg|v}J(?@~%EvR!%p6^{SP|v?peY z&A?-oPnUo{&wA98!Lwf639c?uK-vA%CJsk`rCigzE2i1*I)q_RugJ(SSbB5XrPZYs zdyP`5Cu285v$?r{D(HlLxNV&Ve~TWq(CNMqwsi9*XdiIK3iKYPv|!S-kr+1767i-$ z2lCBdYcH}x<_N;3%$LU>TH~pRl%AR$5Tc^BDna0_D&E*!L=sW7m|(_1J?fm=EVhj) zw}v;)Sg9B+{ebipyB?1P<1Nf(#EL;XWFztwt8JiY2+Qne%$!^Wm z6WJWyzMl&iu5OYY?wFXwFjE4wuQb-Rw?<8BAVA4>Q=Il5*r}w@Z8o%a>QE9wmnW0! zpGqT59LllC8RtYI0%XUOdKMt?e!p5ucONZ`Yuz_|4GMwfyAsN)fak7H<4lU$<|Q9x zg^M--h!M+udseJ={{U$p=(g;tAC_aC$EP3RPD!KFF4^R?jX@5Q<&_x!03JPhReAh9rdSBg<G*yFn1ig24LcwO`ZhEiV!{ z;IwVQ$p<_W{uP@nFg51;HsKH!QTLqtA3;`Zi@3kyi)}3Ig_OU}Gj!9@FUQqu4Q}n7@EfAV*m{y({)tgdTiZH@1;#loI)g|wT zCDw4-uA;Xs9GEbc+qHWESM^^NU0teKc?K}2c0d>z?ZsmM0BTz`^j8|4t2N58D=Hiz z1P}-v&MSDzPg5Br^d*PES}va}PZflQU7*NiZPAh0MP6Ia+^w+FVTfID%=u{kt1QH)(r_IAE^g{0>s?NQqlw$@kk$g$WLl3m}s3UCzv0D7Ue z)Y9TT%N|)+lKBCBsz2?45GLMSorfTF&$Vr4XUvIaH;_)TJi=nGOrbr08k3 z&=-(~Q}``%ePTsoTe>Z;))uNg7CY zk?3()nxwHzJgFoQ%z$l7e9|7>I$%}(2gNs5AvEysxyd5~kN&l1CffH)ib>g)n?$&^ zv=)}yZrNhX2iw61rVUk=!gho_uCH;HBPoy%Z2H#H-_5Jw3zYKE=4|kB>6*^*AB`+D zq?S8-H6qvoj&K@N+z(+;oZf{s6o_<9F`}L2x@4YbjHq|#9>YBaYKvx)M27m_c-BM% zc^O#1?^!MJC&Jo&m<^_pb99BH8?rd*laIouw(->0_OBEZ`4Y`;e8}Wcm0wYwl%*N& zR9q}eJ%cU6qz+te{ozK+xcqtnS~@)XeX08_Bg~Mw-pqJG*nMiSyV4%tYTgBp$@{2& zYy=rybD76gLU*4=J`xmiq~dP9r?4{Tzw z9tVy#hTlz;Gq&klt1;{c(u)HlYui90zLM%EM3?DMoOwkf3 zlH*g7E&I2zh+unh>r&4hq!Oj=n?=4i+#{57=h$P4Y!S~Z8=2M758ZNbRF3q?w5X6J z&F>MPof({-M}J{Z+j_PZNPW(;1d*gK60A?cl~4(g_Bf~ridaRpe^+z4R06CDvZ0C z4kTYdKMLqjyD@DdTis$COLmpZn_}f%6yqbQ1Ky(2H7Mg_cIZWd9n!}*%WXZg>sU#s zU+XX#<+KO`ou!E3LBKqJI?8=pQC1go+==53V-dnOlpo#)y>-Tw<71Xpl4pIY_@d88 zw~%S}0x2SlG#4ia1omO{?_B1i;@fZxx{kLpvLW(ejfh#?<3BI*J*$_S#L~}eADSLV zNnLa6ANLQgJ07&Q78h;?rzBEI7+}#z7dt+cq-e$~-ZFLNCuC^BsLD4-5=bKhA?C?s zJ;C+*)p;+q4MrEWwVj*I+{u;d2V8mz)E*twjAmgX24vrvo1MQ-^`jbF%VQ<3g=`3T zL7C)Hk&I-IL7voe#cY8_Pjj7)!biEY)8A1DjDL1YoH0FD>+eqSABNK2?n!MesKDg_aI#N(%_0X#@XDp}NH8#!v!u(8lA#75_HPKA__j&smf&Hk%(rbL=Xk!XzZazjQ75#OHG zod%h!YYQ&56GI)OU+WuZ%%{K7t<;pa(4S{#py%<1m8aU=Tj;(YfnC>Y&iu%{@&{p9 z_ZJ$q;0z=9BLO_mB8glj%zgL9bUYAo()f zW9eKqE7Ym+Gp-bA!Dx$jI^@}-INJF2 ztowZ^OtM{~ZAk_t9k4k3D{9|Vp6fBPyzS$q*$&dyA#WBtWa)nd*iPa z8Ww^;(@D5F_u=tpX`d4DAKNsJBQfh=$s`h6(8+er;5kuIYhq7|}LV%XfE zXLqn2s>FJ|%u&k(<%(_OjyC;kFG<#pje56pC>I&p6KG+#JRDPQb*GB+?Y4~|Q7%kn zLEWCY_Nw+*V&}3a)%7U=7Y#E$6a_`j0PKCuRX4N5VY{>pld;6?dSkZ~TSB+7G=gVo z9zsd<9>db2lJiW`<4c`-@y>~)PYBbbSj>&{Lep+wan$-%8^4Hpo|SDZx^zBm z(nY=~m<+B@QhTrKS}Zi=X6wQyO|IU>r%o)dE`&=uk+r{rp0&v9zB$q@VVcwJKo&-X zWimki@cR1JW{aVC&&F~ajdpgAB$#A8WM`avdz#tMei_)$do0shO*D+7WQuY!4>@0_ zdg+WQQeN}a!OEpa?&yr&4@K0qHHT39P>_YhNbXL-?t6;rbngh5ViMlFT+Ixd^SI#i z&&=QyM(Z@?&*5 zRicj2d_wTpwYad-Eh2QAD2I4v3Qk5&2Q?Ov<4f%l3AfnCIydgtXTey`cn3elTy~?a z=sp`*p|;aL(=^SoXWh3h2Vv+dIvs1oUMrO8UL4UG2zD~NkCYzg9f|j?77`XSc$r-9 z^?x5m&n%uG)nkl8e9jOk&!z_$6^%c}JwoibI&9O&jKF@&v750V)-ILc9Zz4@AWd%l zmMK>#(tX2@sC$oN?b^KpTP-V1v$nH|KGtoNM*}$LIO)${$F3_W#)Ta%b4W_PMcEwc z>NooQXCOQ+i=9^y%UW^DEz^>!F8Y>m0Q-1g2(poPjYBdBBPpU|QiV@rqTDP7A zzkN6RO<`MdPwwG!kT}jOGfcG7bo()Ha#}au#K`P-b?Nl2cl;^8)@7pz~o*mRAv|UG0v62ZFg9O;i4$P!>`qON6eKSjvI3kIJu5eEL zC}ZnZBi5suK$q7|BYC)GjB#k;q(wSO`wB#IXqVD0l~{{Yug zUQKTb3wycLNU4=b+aZ3Z)~@Oz#jYk>=-E(Xd1vH$0BaIo8fdz8td`M2B-rFc(hy2> z>E5(n@+Gw$%jYWzX%&`FFLW}paHrGjipbUExv+`u?V$76FUm8xd*oH!FT|Ri#lg9b z&`&Ijhw~5x0~~QiqW96Lj_@i*+%>q2e8;~vaaLqWrnE3FY;}!N)mHiAF^P95fNcQP z{XfDwrOER&FSJ7xNB7qf93+Pvw)>!j`G;g-Hxne>^#(s=0E7ff%6@VdSsse09wx1pqkHp#8NWl z07)XrMEd5Lsa&nhX=x;G%J^A~V+1d3A8OF>{FCZaNvG=Ch^ps8&WHz4`jqo|WOvMJ~$2GRP$uR7m!OJ;AIeiG+6C))Zv-GIY-mY4>`B z6I`pfXB+&vNH_zbJ%x1f*hwvtt3s+3hzDrkdwcuUHPMw;)ST)&ol%TpjN6vCf;N9OQKD~>75mISz5bP6((_P(n$fP( zH+CjhWWd?jVykL8(Jmx*jgx)~BJJJuZ+hmnEooy8X1N8>oLk69cvy5T?Ohb;IW0`5 zRw?Lo*ZwKfbf=EYU9X-2X)Vy?sXaeB%GLaM*4AP_wTE{bUez*KA5up_SeANa-_Lgx z=IVCl3PS5c&Rek&WVBI|4-<}k}W#5}m``BuKll`>T7Ptd`Mb*s4qx7x4G zBH+f$m2ufX_WbJZmEf3X4GygG%F?)Op(+Xf?;QuVYs;nI>9;AXSj`0X_QQ3_Xz~jB z4@2o!tvo|}9-i-S8m+6wT=|fUhW>RjsP>6bg1@{i&xb7RlgM~uie5fd;2e&ebTwz} zNX9r|hA$>1Ir9Gi)-!q^=~W`rf3z)H=$XFLKM`g^P_XU?YS0%+X(;%>4E>Tn3>*Bz=`yJ#=8$lf^`UpFy6&WVBC_B6}r z=d*b3wI7yeT*nY>9jB1l@7J1+?_Sd_6?9u^m0i~|EXQt1&y9zaFU)TiYRdUD+Zmah2|Vg0gMwwTruxJfrP9KptA1ilFo-)~`c#6e%KU;U&ix z48Rbr=s&`$6e9<8M5;HTYr>G*wwEXRD%~J<#mrI6?d58Nu~63+Wegt8ObNm`OnG z$J5@UkHU9C+xuGC<+SqL`SGIUvkrj!RePwL&gAiFH!<3MqWe|dBa^m2D1bhcmsW-; zEuyxv`L|_KCHvzXlU*IGv){B6M`{d;szl5N7Xt_7s8Y}OvpKj&l25%JI0HSsDLIy@ z+{Ur+>~Y`EaUHvY!AA$=1f22ceXDL5E!z5PkFyq)?bZ|}h9k#TBCjryB8WF3jf?#8 zzXDaq82Wrmj}+p5DfQ5~^v$!7ZYtR+*KnkXo%vfh`YY4%!o+9#WHvuq9r zH8sucwWJ95(k0XS%qS9*Je+n@Qss4GlGMMd>ha9U zH`tjFFTMoFkx0?R| zbdtm|jGW`k_x}LvQfXH++Q~eU-Kz-(*s!=OgTpE9nh>+c#ciIpYVg{{RZGy6x?=z?Rx^xM|S+x^SD8 z+A)md)rsJGVUJ;y)y9njcnf`xmDW}NC6o={jIy0RM7AtIx_1}@(;aJG&1Cx;z>+FMCU*wpuC ze{_!C)VB+xYfSLH&Y@*-VWgir=tO27TJB&vk{7-`DxKB4#Ngb|9CBj@XyV(*9P!$! z=>96ybc@*TwD)wGA3LFJGB<8&#rC1B+(i@JSr0W_%PBw)oDY9t?bfB)6tyySs3a44 zrr`YQ0baZR0LR{+b9*HAu*u}H!xfVUguwgU`ubL`p#&Fp%_Xv{C|&!u^kO;>{0IeQ0fznnwPes@z*xCYsj{L{gpEa!B_2)>f%{BCwxj!az{D zj9rb(lh+=Gt0|g!m81v8%D)00bv{{T;t>05Tpv~Y&Qf;i55f&8i;4ES?SzVRa4_?uQ(^vU2NQxPGe z`g_!VA+_-5hwo<6yfu4ysoKK%w!M|Muu?ja-_orlBv8GPL~?;PBQO<_Tx1`|wNQ&w z{?48ue{LpOK3M~tkhtKC^u^?+!IRtnA0P9kHsI28f zypFO3bXf6{c>Dz_Ymi&O)}|z7^Us+(HwaHb>q%HHjTkPp(12<_U|>sa$OVVcdseT8 z{Bx$hsAe`LE#qZWwGv<)4_{OHR}p{W+gmA6-4$>jF)84ZJ^d<#-ah+M$l6|*S9w3Y zX!0XD>592wok-cO2=?)VJ(tG1_Jb{myV3N*t11Aga01AUv=XF_pdZhQ^J#o{q*}=F z>JIX#Jbj;&*PaJlR!dEF;_^S?A@M!UwX}F-dolA$M@YSa_4lkzO2H!4B)hlKrm(~2 zI82+5vuD)*0Gw6fu$1XXl^E2-N$s)H>N=^lX=0w`@Nj#?U zH3-@%P9O;x`AF&;-mXjG{ZCttOWVl|4}hc2QbBIPvD4bLY;*{$Vo4&IrW?u#kvsQ( zdw)vnPMtFbs!i-?+iDudo2QLCSF~wkjf{XP#FA&Wdx2W^Iv%5|m|?$0@*$K-0uTUJ zKA7+CTly}Qq3O$SdvR&!h(i=vB+gj%>(|<}G`&vMCz>?3NbQa=l3?Mp$p)~VAtmmk zrk)+Yh{T)1_V$BqsSI7qJWkxR_xe_jjVyXf#TCtvk>drL-*-QsZ|Pb(^cp^`Zya{p z(UtJyb{UR4sxV1we|nl_j-?DTGaoIbB&opQ z5(gRS^{o5r&+JK%e8Bm;?$r;>f8Ecxq7b^W8*z%%>aR7M4Jj@)00T&4A8e0#F)st| zukf+zK;zQ0b$=S$P9Dnrq9I~gBa#&WFh7U?0IIp)9{Bd(Qi451T}B4M98wrWZhHK# z0OSHrKDC$OJ2`w!B$ltLJeNi$F__Z|=sxlG+s037-WYXj$ih{X?GkShYt|90+MF=3 zwmVVeMB+2wclh@;%U<}CSC7xPNlO>v*_D3b_x}JI(eYf`hMdi1qD>2AjKwc1$U5`f zlUX(v6JFgep#%Yu+^y8Zk^mhCU`2Wq;T0RRhNR@>V_MqX^=nk#(K```gC90Kny+mv z7PCCVQH>iuSCR)s9Sw9AnoO`rw|`=2jF!Pfj&p?`xbIZ$qmJDqj!58|BBUZm9v!*o zlhf-`rh|~&_<7=KJS8R7t)->C<*uNo?QM4mlR4vRlhf(+J*%X$_@k+KV$Hli;S23f z!%ULsJ^q@H=0Nx##2bKf&luzk*AE=GntquI*u=RG%Z5zhPjWrFX1DZv+wD6^npeHI z-eD^&a>2Yx3H>o#^&uHMv!a{O*oRZ_w~6(bb)OjcTK3k;=H(*2yVI3Kq5ygS0C?b& zj=r4YxAmAbFA8c?H-WWiwXHoy$ZuW{ts>(ia3E}M$J`#3=hwHA-CjckQ%JGKqY|;g zD<0yuydQU_e`_V*ie;U&=)n_30^!(?$DV&mhaR{26qVVR;=4;dMi^(7(5&jte2{RY z9;D-_s-76}jsF0`#<=kpg!Ldp+L$gRLRkPL61YD2{HuG#^F-6_ita6_cjPC`;Pg-{ zk+<;m!lPbFzv#P+tpoMlobozjy=_UU)3l7{xn-f&cn{;%rh(#(JI1KU7ll<}C zTV^J1r*Z-^3FD~x*H_|?iyj8}v8vqaui)|F>#0wfHlJfMv~kJMk-)$|dmg0v*OY2H z92)Ma9nHK^i6o3H%Mri`2OJJ7M&H2Z=Tm!Fe1Q`{q}&-u!vXUvdiKZHwI@b`pEpsd z$)iNu+~2h8V7rBwV#7Kxc zxDvO^B9qfU=bBr)(y)@-oCAo`EN%_{755El&&}?KO>WZ2p`nqCl43^#3iupn+NoYm zC8Ifeh#q-cYwb>|JqKVa#nS;Km#{R2gdi9My~ptm)WF6@FeQYMm@w?}ft4rTs_h8G z*F}sPciJYm%=^mQ$rVGjt#cQebdm;! z(opXdjkKsak#o}>$n~zvRf^sR7P-MLL~Y&M{5|WN)vch9Wvj(6m>r+@QhmieN%yLD zvC~ProcWR~UC^{rJB)~noMWDMdYn}}rP4&|K@B5dao^gvZ3&trv~Z0f za#Y8V2=_IK3|@3(TOx&%I4&~79l@;~I`p94vPKke!yk7Z{is(7YIL?&P~2`Z%D*CD zOjM{OakT#cjcZ$+$pkPF=7hrqCj@#QZuzc$0cz{Ajv1RR6e^#6Pdl?wYcnZ3v00HN`%Sw$%$W-m z2b1b>c&3|S8z5Lp#z`)Pvc%(`prrF-K&>Q#DEDz8AQWNWBl4$Qpn=oMf>u)Dq&d%S zNcQ%jB1nbIX(V>=L}Wvjd3eGp?MdgwDNW;WS0YqA0;9DO3+K2mBmgY95TY+E2dxUl zLn|TTJaPs%dR3%?#U~id%(& zuMq%E*9hDd^u{}r+ND`yZQO_zRZPzz%O^j>ft=IU;F!;}%W4+Z$`*|7K4+Mr$Q|37 zulAM&?fmDJKrNJ9A~8Gz?ti5=;iDGPMGeG}CBZ1Ox!iW=vGuC4eVOBuTgR1c(MqSz zM)D6@YQrBi?6di|R~xNSklY1Nm=pXy-qhLBXl~^z0|0O#$@`$6y;33C?KxBPL=n-) z%*)t{uHHlq|_%}xQSwy z8F9xxgW8y45D4Y+jOrvTs}tiR(4R_SXx1aT(W6f}n4yqvIrJi-yA}i~oE5x{Q_B7H zO$o{MQSVX3diKzZWLTZ$c2cZ>nAfg(@9$Fiq34Ze%yCFD=g$1ZeSqs!!)jJ$OKnQ> z)v`|Mpo5T|MoHwHRJ}&7O(~gttEmR%S3X(@#^yc9?V7Ifgew%U_IUD3XP_sZao3uW zRya{^-f2@dt-)^uD?B!~5}}uw8JH3Vc_Z7}sZXiHWT#KKP-j!} z$Oy&{PCaP>Kb>s_%$F@1TgHJmz0-V$x69~B{&iaN!BnrA6UiY3l;;2ry#D}0PA#z> z8IvWKf7$Li-=FD9T=|istg}h8D7&_U$4{W9fJmdApr1{NlHwMOFnCAIGtSmMX&xaG z27yv}WWWow5IhjU0Y`&nU% z+V194av0`q#x!+qgOB2-GAZVH1Y3b!lb!D0#<<{QQZ$H?gF9fi3NwR`@Tp>0~P+2Y%fBM?EQ~JxJ$yTt$fy7AI!hy+|Y5tt6JW5x|jL zxtdpUt8xb1o}f3U9V+51?HXymOCrnnR3Ib+&g}jbO6{SJHkL-(pLKFhc<=8`HDZX} zQCn@m{{T|iU~&r7=?%<_G=5^Fv99&qkO%jAR8w2LGsgjxN`nqc6P`!iZ(LG_CK-JD zxX6)k50`+WKE2H{k|tn_5f5zT!|!QCn?mGc6(p_pWP3JvFs-<=9zi{`+N;GT))w;I z!=1c5pzuGbsjaSIfdIL9j6t$a%&F(EtulyyW+A0@F_!(>Oe> z=PUK~sHC6IXSPD2v4&h@Be4Gf>(iyShFF}$rGfbml;@xZ zSb33+~tC<0a> zrg8U;TDa3-kxw{jwyE-fX&;Or=mGcXO^!KQ2Dpvad&op%_(nY_l4BJA0AY^VrIJ(; zwbVcA*F2Moj?HbXoZ80|l?0H*{_7sB0qOLsOn11BRUEK~aSQ=fz#yLg09t8`MC5K# z0{p58;QeWjEyR)%@hMg1*?8mn(y3zu2orAM^A{Vo^TGD2QU=Llm1AVLTZKWLq)Iqa zf0t^sw{BzKEJYeOE4P3!KZ_pqmnp~*&l|LEN=V>iXT4d4;kC04VlvD@!#kIU9Y) zx3yM+<`}0jWGscUBPRj5>ME0Ea~5Vc>i+;Vk0TScOl(FEa!0iZcJQ;j^8+wkZiHZ! z9Wzn6VvV%z3{Dt~l|R;*3(itgF$z@%+NVs<}%BG^zw)rsz=jV-jh4wWP+8CS6X^D;^a)e}`$J)1BmXjy9I(k?%*7{kuGEP*y&z<0Z zbW}6R4kQ9)GLDhAP(5ngc9UE}u7G)HNi4%5KA!bPWeoA&6%8IXqPNP={{YslZi}^u z;<%d3v5iI=Jea!f{{U!IZ7guWE~QBrOOPT?tKOdmV~J#i7{2DfJdl0;s?yoSnVK1y z!p1zoo&nDznij+IGUERLUFIyMwsK=9kPmOIPCVFEu&TTGkr{Gv>+MptqVM}O;IEm3 zA3gmu-lLep=`oVvZb60^IRtxt6x2x|7Uh+a-aw@1o=$5<7~qQy^M(oomj0B*hE|0n znl)D|mfObR+N@j3mivJO73G!r0=9y)E*c3u?`P!*;wOB(1{{I!OK`F%SyJuwK?deBZQurc^!7B!t^>v{A^FvLjSsJ_FOhd+bLUMYZ3!Wc<>2~& zC{s<`NYL`M&$EV%$mb!P1NTpSRYT^>aAL=nF^J?nhp!bX#cs^9ULjwbbXjZ$ZovCe zO%%ph=DM8&aLiC~k4#rrGPS^x2%cSu1ghkW5srB7Y0<`>TQt%tqqmkf@$>prBIHLS zc||^T@yE>J=Mz108tv zsH2YTERrRW^3al9M}I?1n&f6HcVXryA(No3l~jPSB#H=^X*+-nGtU&(m6jGljKOlq zqZkH~E1=3%dWPH%I@EGb%Kl=88-e661J<9lg{~`>MD|NGVq20`wvq$m4Uf{Ha*r7K zas;H{ohDS0)iW_ReTjmGXBBHuW>zIVIPJvU57`a@Iqtw+?r%GguJ-ZY*1S@>z ziB*z%qIsHTf+9wrxe6psRYA&}_9CL4F)6xv6c$`C+rT5xQ>|o<7#b-pAI(<5GB+pN z6(8C{Un+Se7a0+^^Q&z%JKSt?Nb#?b=eZ5nG}W1&M|T5r02eLS6(z)CNYl!VR1D-N zT>JY}N~)liU*b4Dvst^QP1uB^NIc2H6UGa56>i!X^^18Uht5)ii2?aeJ5^VbIIvhB zLyp7Vr;k&*wuxf2nGg&!VSezdrzID5JC{_bwGlHmae{NjLw4)2E#m#w-s8Pdz0~54 zVX{6g8=^k_38m9oLg#z zC@`D)H~ICa35#2$yA?c~7UYco06IvNOD~t_CUQPT70Bf7OKpmTVUk(%k{HB@%X2T6AXBvwdh^zWsG2LSqr3tsp*dzb zech?*EthS}GZ?_cjT!IlQf)EI6Yk%%{M&~LKdm-f8RI@dR&Oxw54Q`?r@aXwTTv#r zmfB$(d2@*qA~^o?gU>Z?!tw>VxVY4jmuw*u3(0PSG?vaC%tb=-I`%$_9k1Xe#}bBe|R>slb)Z-sNLE5l5TO8+mchM zK9#3!X&;&mxM_enM^)e-dU3WP85PhrGD|O0U9*y!)U^ipGXBLP#F9KGl5jKB4)tQz z%WRu&3MxnflH-6XW-@vfs7WG~Hn%7?k*6Y* zcSE?9MeDd#r&z?yvcn{SBOX(s&q2|u%0$7ozR*>2Kpd0pRxItjreKkkjHm<<4i9{q zQfeyf(MJ0sly*%aK{P7S5*(hJKQ6U)J9|4>8RGfI26wju+Z3K$imcBVRRo0@>rb?6 zMz=8Dq4P_A?DQC{{iIoL>vB7bL3o5jxRfa=2yAEGp<5^~CrfL&TG9656T4%vBCZ&x zh5YE^ZSDLnIV0Ms+|0;Nm_XXUBCz?lcO%ld-DoKdr)D$zKUL6Xl`bxD>5naxo!;El z%eHM+-BRM%tX(Bx_qPhJ`p?>3eA(2pE*Z-DdewOKrf>>cyEaO)bPxW}_O4o$+Le>g zNu{eaVv<`x&`JRq%Cq!8U&5dLqVXv5PmM|1dd8oa^I{{V$%AD}i!P4oiHX`c`t1OHo}B#dSP#u#z^7qdcP?0rka4 z4a7Ew5t2(eY=-HcYP6TP8rGn;>1yiD^0bIMejREntpiv~&C)TLD)S<65FUWnJ7l>_ zp>pF{Ye;0hjK(OYxs_XMatPpi z8j=kzG?lIaS9uRGryIZe-qn+BlkYOEosPA2dhdQrDlph_j=i|+#cVE`_UMZ_2u~<+ z&MI9aNSf)QY3?@`kckw3%OE>@)s06@dnq0u`TmuuWgprhXhp}ISYvXYhqh`9od$T|{?MA{N#i49 zMzQ_Z&*&;#l4UscL^ro_+HbW;f;4~}9&$SV6_Mxia5srt}wlvKy zH<2xx7v8Qy?>roiwXC+*kQZ5D!s7wEpIWzRd8fl}Wu8>y9#RG5j_sPw&s|Q4(29DI zKAU8#P@#-KU}LcrUr@Ny;*IqS6lqxqE{!fRp5m;> ztN3`LY8rj{7d}{4S#gq2RUc1UmnCftn~XPgR;``wp7wtsz#FkWXH??@hb%?56upsdpeM2IMWq&g2ShD{5xy z+30TT9xSsFeWt=d<7h&?Nk7uFtTh|`TI59)lWlR0`R603Bl^`GXzJ|RQ#_F4_foOL zA5o7=y4Nr~3N22?*|-#LRQENEnnF`@+|`pwxU#lc?`0xJA0Y>i{1 zhvy*R6X{EQJWHyilH1%EkuVhq{{UJ$fmSVi9es6X(@6^=u0iuL$NvCcv1M-bBe%bU zTefXE6{WcY_imrUztq$#q~A|8k+txS6$5N>0vS(y)}D`|$EVqwd7MJ)pR%xTne*4B zPdi#e{*v#tlmLp{GoJbOscdRJ$ZR|+){vWtO7E0{bJUL9_o;@G)&S0y=l7YyXMo?{ z9+{}(@dOe)mQhCSDvzE(*$5Ay^{q=*`*Q`jd=*R`-4Fi&UZu{)(2QALVQp(SlxANx z7z47m83)p-!z@B2xe&VSVha<~@U1hZLo5$+g?#lT2$bY7^r%wE88aQUg!z2Nq!6dp zq0JgtVp+Z9W>-d3Q}Te=aqbUK!laTLWnhThIQyr!9Ok9A)xODcj8z^rI3SPE(}r$C z$!i0ybsItvwOINOL0uG+#V8T9L7#v6_2cFA_oy$XjgfxP@4OSXFmZv?CZn07 zClq8wq(y1D;z7CiWDIeN(6xI-PKPS}?c5z)A%5zLX5 zay*y9w&8~S4KZkmpwpS;Y3)k3z`5Ev6wAwofnMV6aufvw4WKvHpnGU{H`ykYB4!Fm za#(XyTR@j_v&n4osdKb2$}kPPwXsUW$$JK!peRPK2dalz<) zg;F8O8z}1l)-TP)kiFCG4;&hg zP(`eoF-eY%w*@GG{d9Xq^)rfVNjRWGK8O!#vcHY1bChB$33VkDGZ+jP}J} zw6N7LWkiwSSwnvI+C?St*r^zdlr^qH;Z7lPEn%P%ZOc=R>3Ebt|s>6I68+S}Kt^sHr7C!w;Yp64M4 zfUNCw`7hEZEPvH0=bu{8wD7bLJ5A=98C6M8z3S$^wfP9!YV6pTZRc$lH zR_|h|r&&wqZYdhiN3NeY4OXT7I3Q$Y)EtwKDAlg_pR`QBu6Z?)oAt zU0YGUGNh0s=s(rFIYrKTA6yDl@ZP7XUMp%76_0@C4g&ic*|O5$NAm@$(cycCwamaN zMnlwr#&g@!wII`H)gW;-^lKhGvfFWy?N5CbZ4^NyzbcM$*)@}^C!=PHoL0pPeOz5z zZjluWecDTqF%iTiS$)j8A#DGaA z43d4r=rh|jops{<9!p1=oMtjXLc`|mjwz~AXopoJqLNG7#Zs3WR0Ebgj8z>{IU}AX zitwkDa?Eq{5<6Bi_`gur6k0_Z+bm=EO^k#2RXg2FSiZdS-wvx7+Zrz2?b@z1q@JWo zwbq8k=DTNOfQu}JzlJx?)9>k6nzi1ycM?2$Y>~$DFpbOn<0GyGZdv$t`p_yTZJu67^FNDf&Z*q*9KB0YU95PKiBq|Z`#fqoY z^)-6iLz>byo@nE64@E!1Is@-nzuPXe7qhr*mdZvyhx}@^T8^)IG_pKEBCufnKD>9T zv6^We16|qaHm@I|$Om+>O8HLC7FyA5X1E36kDaGDRZ3;8Y$CdsX|*KI+cw+AX<` zF&de~t&l2E|J(Q4n=3yHX zv?vT0Jw5SHeJ=NxQ`<|b>emG6 zO(d|QZh07gtM#G6Nr_4=6bsv==I+rX^3ln4-^+}i54B4NiOrnKH0vPvlXJ$%4oK)h z^v-fBJDYtz8GNly^@_;fc@ERprBj~nI1#0=$XL$`$DgiiWfakjr^?HB*P8CPH`;EO z67o?&$3IHd(Y_qL-GblUDR(4}Bp@mDBB<%Q?WE*p-C0IAFkzo@TCjMFQL%9yq%Y-@ z`?z}Wezg;GS}hGB$n|1hX&QZ?SY(TGuL~GnKECu?Sle1%BwCC|%8-2iPX;mTk6MOF zbzA8gN0vCT^A&N)K7yVki0+k~yOEaIa5L{&zH1vr#`+W6TtROUXeAcv?p8P*fncMi zPk*f?)*(qRu45Z>wmAnIo4Cb3-pbv`c9{kfs}4`KI!$Lu^VT_Smf@lUa2Oj&>A|T( zZ7o?07q*s6E*?0VCHbV>cr@Kk{?1ue+RiXbrsBxl1tX`{v-M9ATiin=!q7!45{m%? zk9x(r)~=cV0Cyf&_}`#b_7!TIW>Tz?*4%5kv+|Y=vj{>)^8CS9)O+Hv^*wq>tj(rg zLnDzKYrzK`nyChhtzAU3Ul&v@_tm!X{uMdW*;GpBl^-O8Wr+3_ag1VTDb7V}TfJv_ zn$qlvA^`F-6dzi!`bFIC(p}aC?1gWo6RZ*UPw36rwH2+Xh(w0CeKAV2)d& zW_j?=%miUh7YD6O_SZ;;;v2M5iVIa|1|;|#nsMS2d|rm{$K z@F)!ZK3)&KSDF(Pt#uIrq)-fG_op?>?NZ+~Zr?L0#>4MNL8oz-QKW9S6Szo~@EO0= z@5dneXR)hRdvLL$qei5#$5+q4r4wm_?gIAtc%&e2&fq}yt8i#nsTxld3}Y>Zd~ilP ze}zkwN>P(!cUoo9&)MTL0~mB} zEuqZeakJBJ_*6Er4PI$2uUGdN{po=1KT%nGO$|9UEZ=E1T2iEzZI^GEW0&UJ$6Dt# z4L0^b7%?E0^BD#dR_(r#Y4(X;()MeZ;Z^>BdIwAwjJ&K-VhNI1b#9ywttp+YW;X30g5^GGB~{vhdY?*}NwKA3 zK@hi}WU#X^`AlPlBj4V%EUhiA7CSklC}fcNj2rG}kf+dAQeN8X5TxmMxu++}jm|vM zJLl4?&u6LK7r2*F`J`1@PQtjyQH=DcwaUGXZASGNu|(derwW6TdS3TNhf0iDkAz z6lFl^ll>`4O4b^&Yg@T{7Z%aj2PE^j0=rLAJ;iZ8Cb89C;7J?ELy{sTjsW!k0PEKM z%4(PKJ-SK?;BI2Pq3=zeDb`aIs>l>7p~guRL){eB^fB}g3h0sQt#Pb0vmv+KyT(GX z9ZhygW1;GLWOfU0xWn2!4gP@pdsKQRns1%rvt$yiTfDh3kiFQCO3t{SRI!v?!?GaR z-obcc4&m2m6u+QKc`bt$_cSB9)TN5!jo5OWCy zIFxPg?OEU2GF>dJs3Q#-*ktREZ+c1%?ha`ims-phF->y|D3u61WRoSAHGnlAGUiry zD{fo&VL4)R$Zy7?pFp>?(c4qJnba})7`YqR{{RksDuw09duNi?K%o;33i8ByRmKYX z8Om*ze%*C&=6jieY?X>A*s7}Msr5Az$qPuA4Zrt9fU6-GH4`*ZUFXVRB}4&p_f9fe zrQ5`6}PM56NNeSFxShWi?1G{{Vk`37X+a@=-`oGt)k`V%F`YkIPnQ+?*L0 zebed1QMI<-pFjIo-QCARdCYTSr+`SQM9gGNB-S&N(!s;){xGf=xeE`$NZVdY`eV+}_A-{HEM~;}2g-n#aO!ZVbAO&eui+BXhR8%P$Ybrrj9~ z$j*!kmG%Ds3e!f=>|l_eEd{|DEHcdAgVKpteFqvh+)oc^no8-dF|dw#QNMWYjDvx} zA52#{tN2PCS6lL|8*8E5F~Xh?Z(n-o^$kiJby(s-=HO(Z!7JHMsj7OiOl>~b1S4`U z%%8+hrDGR0E1I<)TO9r8hh<3qdv<&P2N)wAj(ZA&LeTX4dF2tvo_ojul2yo6t)Z*N zu|+NXF3^T34(?ofA5bd_e-g=kBU@?qZqgPZ7^vIDbVu4rSi(x0cQx)`Pum>P-=c*j zTmg;V{{Tu!d_!v-ky#7BD|SI$yn~MQi3X9cYK}y+#TsC^C= zGRDM^J1^r-w6wd9;$Jq}LFS+eq+o&#KsB4_XEItqSgb)^{Q&4bwJe@0zJehg)sw>Q z$@7T(#wxjF(LB+)rGIU&TTKo9?W}gL(WxQS5~PmU=s@r5R6n(Jn<(1K*&~z6&hx)N z@F05UHBReWykr;po#=heH}yGAlwa!l0ELC6zQD)=j-|cH$4V3!IifvI>fKxsa}0%*ty|4wYC%7P$`5UOGNhOTe zQHU;DMj&8k87H+j7jY@*OD4N}41!2*7kGT8MoB)kLi12TGb^iZVU}lXt>2w#{0eXB_{P>c<&unI`u85zj`01D8DO?PC8e6Z2;D{UCsdQ~~bD1{1=W&%TX zGX;dcGrw^;C)%tX9h%r6grvNf$WObTq}N|%;Y&+_oj)!)^9qi7btm{h=B}oVYMOdL ztj{*~9(h~_Tyg;P9P?cA#K)nuaNW*pOVKr}*lok4N|Q`uW)X3~;OF>%9xF=cM$)31 zIOItr+QdyCV%YEPTl0OI*3vs$H7O*YA@f@}XvdtX>Dhxq8XS4 zX;kos92#Vz>C{1aBtgVv$s(@=4!9rEquR-$`4ZU7v$WIXEgj65eYjLs=ub@5gwm{S zVo2=nyuv};RGcTO!BojTjTThE`B41ZBs>!fQlN}p=Kj@~(^I6)a3 zy~!QB*H@?b$6T_}E_B^S_A8i{K(PS5K==GB8Md}INgU+bHlv_i!+5Z}+pzMb2a=xW z+MoTU7usJr)6+{Kt91=ij|YDDFTd zwU*#UE`%!&%^ZQx&7VLznik49$dY+O5t3xV3NzS>kz>mqOO$?RzYC=gpJO!NQPnSbCG;+(n%0)_tegk{DT1JjDl)KFULNiEc%N52YB&E^h& zD$zm7*oP#Q%dzX0@yzhv2-rlsr9h!}hWdXMMRTj^T9lGqLp$2V8YtN-}x!OB^HJsP(AZ0tY z^uQdSYNHEY-^p(cg}@3~jK_KTf&N(Zs!)5Gxuc@E)bFljgvDrW<2el^@q$=)&*Rdu zFK*?bypCWM|Hs?#waH(bNy;S#r*>HU+}F9F+iYGtV_t z`>V(eF&(nmG9*cq)uBo1ou9? zQFm{DD=aqAG2DOFryFt9n$pTF&h4U9(=BDSnt8)VCIKjf{{Y`VT8>Q?T}TlL5iT&H zdXKGK(eyo9{%4+0%?w}_DhTJ^w9~`)H&=&Ec%CGe9&X{Z4EE1ziB(a0GUG|fYICsY zlWEp%J*AU*$Qybv&Oq)5V_W)l&Z%>27X9p-2ky3G%ozK=!nH2+xa_WGO*viTSkY2q z*shvKc$bZ1q}#mmte{G+augmw_RVJMDeh|+D3e*2QZ232!lqA|7!A?=D$LMJ z5ASYu1V&Oy%Ia{Y)!q@ro++MH7^+2rINS}*{{I{j*Z@g?oFO%{}kE;~x-8u*V$mtdjhW z%e1%o{cEhX_*bZXoXO%nUOBF218uZmmh=XX!SK~L5 zQ7xIb!_Zbd^QkLESksaaSChEOE&l+rrjptn49f+w{`ACv_2VZ!IjH5d zOPFDak|mnq$WR;RIP85ZHvZRJ`y$5EXYFoI^mCH9&opV5I?AMBEfz(Mm~PvGPu8_@ zcHGaMUe-44JU(r1TH;cUm>A^bIPL9SL^oE}_BfJN{o3UbM?!kn2{UT9dFZY0|iIL`O%2cW0fwz$(VnIkzA>spg(5Y0UC&3qR(en`Tj_s6j9?O9K#t*Vc< z9jb@tBZ{#E>nkJ?G;^%0mTg=!P>E~}l#uDxq}ysDU*4`T$2)L3S3f6=p|vsy=a4GD%#pS-eziwY@q5VY3yByx zIAXvBC%?GjnxRr`msXrn&|Y}s%e9kDvOvMm#UpJ1<2~yJ^I2rm4b952Xjp*&Y!)9{ z#JKSaBYCq*9YbP3gAJOYs%!Tbu-pwkBF5ekv&^b9!oI z%RZTH8fo#WvW$+OGBEZ2wY#Nwyrtw31xcUD8*&FwI|`E5!a7+&X(~45UEgbn z!J${wYe`L(crS$mcA~3rWH9&ny{HvO!cr&Jz8Kz|1-9f0cG?$U@VnDX?&kObG zimZt(wcnZ~3lgUa4}W^>8^W^1X0qE@F$V!-Vlu}ay{e7Qks2$d<+)O;myeH^>+4vm z(KmEtQ;dIX1&v~jim&fDA0|ijtH(oVthU?2Q3CLb(NBM&siFvwA|<#%w}c}q#9?37~5T0x0!Pb<=1h@IQy^1HEKOONV%Fz z3rjTuQ-)GN1&=sCjTf5Eh2g6wHgkEB$e^h}7^5D!^{Teo$M%FM@>qpn#061@Z*y5c zYSr#&l{?uQmVOzv^GeLh(S`e}F_K3k=qpcM@XBe?Mr`AENMQ~Ks}avNo2J<7Qn%U` zWLU@DRwr^FUwY_KH3!mK+g7<)mA)MpVPJ5ojY z)c36jET%#?+5u*(Jz(;O9D^IU-*6M z8y$;(*%I1F1=YD&*|H)hg(uupA_PP-T(-fyq>fK+#;7!UvfPl@(ZLh2Rboj{+3TNE z>04SwhMgtc)8A?dA{bQ@a~@;|zqLcqYf;*EoRC?`ZyJV3^N?7Qz?!pn0k!g^xs8y8 zIaAYt#Z}ht!?3s0tX?4(GCIkVAsl`JsomT}k;bgW@h0g|vFnb6{{TwOLCKYLi&Ni5 zhB&PXdB=z8&-hkr&3S363(ZE;%?yA|3}ZR}0BCv&iscepLnW2ctF*+jzDdWS^c7Mc z5Z!5(7dBH|d2kRzOk?}GJwZH*>8D5Cxtp3s_NA!!PUT}ucmyh=bRn3MTy+Hc3d3z$ zOQAK@vKfxRRn!fxdu<++`#Y-zks!T|o;Cw?Yy3mk@v8UF3fv+WWG=+pl6sHspIlb7 z>8Q%YPEOhkH=bwryVirQQhClQQmcSC_Yk8%1^KzDx}6p({xeqkzBH{ zgaZZqbtk+eoIanrSJ8uVbj)I*_KZ{BC0X+8tC zwS>LIK60v=V`_HLdJCqW0~mDgz-VXUiDN9OLk+HyY=MJSP#ev$k1hm5SU< zaj*`#RqgbvGWa#t&+S(?6Md~XSr$?O$H99P zK}}C|j87AMMbvd0NS4+mNaYS9oDjP)--@B7cyGpf%#Wzw+(`;ZgL^8HvoD|>1$UNy z8ncE2G}dv5qhMT|9DOTC`)bcml-k%TC_oH|0O)!V=~nSDg0(b4!^%$cXAHgtwbRir zbr_oHGh#T1{o(*V@UEXhwXjQAH1MVta#Xs2uH&fZ{A%QvD;#fk5((HLFzgv1`T%OC zlK%i}l0iBLbUT@pU_?*(=~zy@>PJ&((u5v{z1M}}g3+}J=8yMBA$bg=+*WJJ8)}yF zz^yB|+YnFSBdeckl*ErB&vSOtu>0&>g>l$ouU)N`u(#YivRoJ>VfP;$zY67ZYjaB@ zm+^M3;#+Hlk4u9wu>wYA$RKscy;B+m-oF@&Qr9GS!Q*P}3Z!?(-Xpbi8idnM@Zf{8 za$N#&R~-H|R_4YF+ZDWl+29OWghZo*?0Z*LDXvtKIqF98cNm%;iJ>Dy2@kR$5wV>6 zuDvdgdtV( z1iM2vI_9ZK;cHv@WLvFEcg?vF0vqUkg-{cl6Xu4=L6;5G4{DV!eC&louqgS#sKjRXlEGR>QKG2va=x~ZzpzCh3L!Q1Jdt?Y`)R%+Q$QR>^I+;CJ_|)UH&bVd_#Xx(jreI+hHK>PvUhZ={QXg+6YAZWP6v-9M!p_mma)*IPWe&tpt2N@mk zeSPWDT1ROhHf5Z|0fo0@V4g_#_pK#b`XXaVbr(p|9>zqPBN@2P01^DBJ+bXWY3+A> ztElRau~_dUa)bN7mntet)*|>#O+-1-VZTkAxJCkoy zWffwadKyCQacy|gswoB-$=e|M8rU8M@jjuae{X444Kxr162^`JP)<3|Uj02QI(=;E za->>>(JQ$lXk0em?+;vYRQ~|sF4n@mjgXhfQTxnDaHqR{J*ZHemW5sj(JO7D+)1bE z`m`}DA2gFG;d}m-nd0w=`gMhx+vzrO{{WPObJ_H?1F*`Ga0X%tYKRM-4V34%KbB%PRu z%tITO9=)qeLhwWyjk;ZGdWG!5EU6c=0!9WlmK{L+>wm-AM4BV4_V(>=py5^dAbQq~ z{1(~SA75&zeF&MI*q{-h z+S$M>@BTE{rphpA8AOrc^U;^pYeZptF`gri$4*GC)<&JBi-HLTHpfH$HH)UhsOirP zZ>CIq=?cWAUJ;K!H?3^jTj|r^qfE>)p;SvDAP(89*LS*gh0IpSQf-o9helpGBQ>Ix zks3Wp?+x@~JBjQT4Y*k&nQ|npRK4*1nhS3b>7iu@F}xB1k8F3YYsEexp8DafRu*?$ zc~5TG2)O-8s#ZEm&2YC8-O8*+=UH5xx$FfyHm=yztn^1-v)ieP^1?M?48CMa@$gTl zwMBb>CFS#rdvP2tGcP0Ne&Yh0V`F?FXvxS@Jh02jCX`30$mZH>6%8j0RX{82S=}zC zy4zwIBZ?_J*(7IJKxU32R|nkGma;;{#4<%H$bc`Feq-OQSbI6{q>9qoM1l9=caOct ze`?XZ@SOHmP|Ia3M5`UsM;{2?`0ZKBtQLlmiy?~U>Em5GCELF{UUCUW$8SoG_rkGB zD3bZ)IfoNQ=YpgB^{aE;X^^+t7TM9!0<$}U8v~v`wG_89>MqPO?`>nY(|1cE$&egjf$T$i3X<1Px3_JVTA<90v-eC!57*X_?yoGb3Y5eG zAt8}h1sCw^R(!ijpo#55PXvdF2lu-WteziO>NiD#R z!evqd`C?979{C^EptZYcCJ|dk?J=9m5U|JqbvdmKW@{^bL+y(Xl`LUZ)G)|gb@!>} zD#F-J736bYfDs{(DZ zAT#HwC(^WZsnX)&84`R+fSy#R?w>+^X%!vGuM#VPz9&Xlj_B>=`}sYyP|FjXs|JXa z`3?ctPqj@Zjcac+OtLX=m_G7y4|;TQT}-I2WXjSVkpf4}j{d_GxscphO(D9pmN$+j zdG~>WK1mbl+w0o34ARR6WSE9l;ezAK_W*aM%V906#$tA8*|x<11jw!iTP^8Q+#=u0dhfb!b-N;_7(d z4~C4OC68=-*HK~M+glrGZzGOY0N6k$zmbnJ?)g;Xqf+-);H2fT6}9f6s>E*;JP8wm zk&*NIXNsE6*=?F;NM24iG|X}olhY@?TawZ{P`5HDS0^im#z%4mR=P08T3fkT#TxXD zum`yJq+Z4ATb&UiNN!=38X`=yMmS)453NgRWrc1bdtey8VRq+g9>d?>vu-ZrnIp6o zlAu$#ZXgU1?bOrZ^PxikxGrMJl@uMtPa|nPaYc|O%Q{TYXR1X7#OrZs47=owK~_+E z1Kj@rD$~{f0O23FwQGGc&&rZav?50zA?|9LS=?Gd4AI+}${oP%&hh>=H2OT3_UmzU zTGhESEQ|L~Y-9OUa;uK!1lJaETQ$Y5qNU>`l;?LGW8SMvt;2mGw<=@uut>%a<~r7n zv7lWwyv=%z=Rpv7rd7sNdSk6q@({$A*S2LIHP0+CN3C>0E>aqI7f+q!jm(#-h)z^W zx!ga(uiJ&QfS5#nT%T~SAUWibRjnX*VKut>tX~ln!P*rAYOG)^); z@%E(BxGfQyy3N&vl2UHEcomRO^Y%#Ji~or7{mK9!|&E{o(OR`Mbhh%&@m<|osqTIRKF zLMWC*X#BUfhj*Bxk?0w_{VEfyPjLdgw&b)*T%DNnGt(I9T6;cYK6@559ZKrjV|i~j z=i9PStH@E$Iqz7ShP@zUvw~F#E0eX8k9^dZ&vkWk_DeRE!NX3HfEwQ;ki>NrBzil` zbsR{rNfNNmU--LY+PY$)1#=eXJ&INq+O_F>_9R=Y?IF`4M{+%LU3Z5(4RwEKCa3+O zZES6bk*seCNoR{VEgk_3LB>JG0nKR4e%T~;UuRTRRW9+zz~hzTqp;JjuWn?zy<@c- z5EeNL+ZB~c@@mUM;YBB@KAWZZdOHiN-EHqJrw{&(5|5F`bt(pP(1JZGNPH(dTu9dl zPURkCZaLYW8`xE&VH|s8ypf}c8#7!;Nh&eG$9iYl?xuy@gXTKy%QxOp(R2FNJkotl zlp(W5)~WErSMb_LF1Cpkyyy%nqjvB{Mo+FgRvfl0i6Vl*vPf9RKA5h`;_2e>%rM1% z(mb)^Z?#BS6X}}e^yRr-T4>TmoI9$+EL~9dJoc<<%2K;#t}*CR*KO`6@?*A_X@Vec zAlrhY9ftO?;Q8_u5Jx- zEfQ!YxP(d^5{jc6t9T_fWK5qcyDtlgf}W??Rn0HOsed|KYLZ6;1w6K8``GvVt52%V+{SMc z3)qT(9N6g>Q#8dJ?H1q|@CHCRTKN5SEnLkyqWQ0jcqDEY9SI-KwtQpZ{WvUl z^I6X&pgXf~$qEM~d;3&AC$P~qEk522CqRK#01DkJVdYW>Q~hhYA6L`6IAa@rk?`B?omqUh zOtK7qx#JZK(Thtc?yY2zTHy$uNjWM{VdzKYS1q)Q`C*FdPQAB9Ns7w^ptGWmrn>zi z&K*ZaHrKjZZ+9yd-6c(X%19!bID*9_gFa?^ufO^2RV}To?dE9XR?Dts zK_Lvs*B+IhHQB1C%0E=KM7TCGu!=jQu^MFg1A&|pI&}V3T5Up2A)~QfJ&~?o7grCPLV~hf>IV6qw9_u6xRUW2J91hyol6bC_8qBHbrSc& zQIA4z4tQAjg&#@KwQDO&xS|hkXM7~z?Cu}dwXQU+A#MDkVX>Cnko$=~YxE}_hrMJz zqkrOIY4$%0{{Uy|4B3jp)pBJD3CJJ;w}MIF3YS{(J+`H-0pblWGl*15kc=RFW7D3M zt?p-{Iq66#ExC;OQYc491GjK{eJQImToPj$+S^6|8*%GWIhrlP&4i9e?)d}~eT_u> zE?7fy!W^&6PXr$QJJ;Oqer7Ytk>{Q}sKQ}X#M#H^Q9KPGb8%}ez(MmBeVOzhN_@{0 zp;3uZDcgrXHV1k@R^u+S{^>@=VyBWiimi#bnwD)YRb5O*bX9R91Lg6az5bPxtKa>q z%v#H6vjl%ET#y394_prC`c?b9OB&caAZc6u9!r+OgN~W)o|)-cx33(GGNvNjTca;R zI+8yQwK7*ml--%d>-INo9EKTEFD#$G9(>>SN2PODqTJfL>PYtQA~2bh@dA(M&uZ(n zdv+GLcay}-fRd`shdlPKH(z_JhZ-%kF0joBWRhjcIqDB{)2&KcSnj6oV_d~GwBlnF zGf4LMRwMUpr=j})0EJ`Rz|us4q9_jJ63hq=-OdL=TUYi*%_Bi;At5q>+wXDMdR9fn zv@uKeXGdvfO|gLIY;D&jlSf=$gi9o>-@Ge;Fu_+Ct2V-AwEG>*2 zCY;kU{jzuzwBQWJoI0mtj6pywt>=)!R_1uOxh$}V@tpLlZ@Ti~0KItL*+VL(dE)~Z^sM~|TKRD4_bgo` zd`T!jGLFY5x3yncOt$%rOT3PDwsG=K=@QM*a!#iU*;IsUnp#Bbk zk4i~gj5M&LsxH{A_JCiGPtvJbfXVIx#7h+t>;hvVfw$0mR1w`-O>mR_o@ibM8I`2S z4bud79q2Q{@~YfUWKE<a#3NH^Qfs{x&}6(xdx3NOrtNIDo?$d!Ip%(w1A8w=5Gz zlH+SbBu*97W1;n?G>YcZ>Pva#ebJ&8D%j58PfjW}RI~DLnWmAJHi@_#XAC{PYAdZi^UhSZF**prbqaEvat>-;i$zFaH#b;>dF)#fz%zv$ z{NBg4M#4xfi-;N$&dQ!+0>d7Z$z`@LhPZok58e#;+z+lg)F$FxgY26flKnJ-w>T^p$tBZWPV>AwR2Wb!P<&P(FfH+`!QzN%)WLsvR zYjc9mNj}-Bg2=BL++mQgM@1Maq;t(IsIKx_tOiJtK~;^$=*MTz^QCk<6#<^w53)xg zbz(;HoR6vYsoLa862mOxh51@D)MK~3IzxLcssxq{%EciCKIglCjaOkHaU2gA0EP2e zK2Uu??adbp7EQ&(bH^l>&m4=l37p{LfZqM-w-?KLMZL`FvN;J>SoV^~gOly+L6>qf zT%lKucNQlZBaVZvX_Ke!o*O_|1rDqZcW&ym?mGlh!EG8m5Jt|jnI+rkIs$*CR(q>U ztC9QIktPRdR>I`mt!S*{SQb7Th%fPFz8-Knr$ zG|;?a*32NcktA42a}0oxs!v*y zLo~58_b^KwARgyw>`xR+s$OhB0<>-NZV?Q!4ud{|nq?vhRwuJ)CfZfWBOiEu4Oq%b z<|dI8s)G_|133QxJ$u!8C3i^-HxchC(bMk#0QIV5bd0oZ^D?O3!FV3Vs^tux$*`A* zE}{j;l(I3v^~ctnFrbpFu})RM+lHqHYiBd1^30NQQGqJH!#ygs%-aE$YiUYLg-k94 zjogoFcVI~92^(D#=gEyvDt#O4OK}k+%)E(SH6vh&e(Cl4)I!}-?8uh6oRuNjvw}JT zDN5}oX)bd#u7AbBI8QE))UO0n2~&>0*vY`B6h7sLS-mJLk1BZa2&GCh~$hNC*;hk@$Q2P}`Ox zh=XL~j-sBCq|(M9llM|K)Zf7k>z?$gk)#b2kiK$Hn8zDVX@X+M1V~*kvmzAQkT>05 zf2}(3%W9i#$i_frCvy%uA4(0jZA7v_-@B80%e>gtz$9##z`3&v(ZOEQ2FZwkij>)h9gF zsa=gB{{Uyaj^$Y)3Z;H_3-X5Vk4m22(rKiON07z%z~CHorGtFv!pM-ZxK)wPM?G>Y zN^KdXff6aoOu&$UV|N`#psnKxNnIKwiZeovJgNNX)kfmTc7Wc7qXZMb?E6`qf~10^ zW3DR1&*iv=RcO!wlOunuZtLw;^!O6x(iT>QO~x0@JmWl{dY0K%u#(x`+%S+L6m=?4 zCtq5g-pb-AmK-1?<8}^L9f<8uwSqg%MoVi+P9T^MG(H!anq{%mnZXiDP;ChuncU~U zJ*!%Jvea%Z)xE^wStA(=6yb1q9co98Ib>fl;bRZ-?FoUv>OCq;nVnG^?5wJ(jmmyv z*#1=yor@&Hc2LHTUJ&f4&s9#dgtDw z5zlafL_!edaz|m*`_y)YEF^1tb_mjS+HvL#)kaBzB$nx}ioM0!#~59RfM5)IQB89xGhLZ+$<=AB#fBUkC-1qf2~+sZz?u2N43}tV0Arttryd6Ok(O1 z>9`HCvCjMtz3eI15!@kbbSWSzHf>&n_sOkND#*$S3eV*1GVlKYSsZPS52k8pVpfRE zCD=IzIXQ4eG0UNvC0&vg#BZGK^*E}L$#w?CQ8&xC%m<#meW|%}lg(mz?&E}*W<|oT z{4sJK!JXOKr?YHdDiJL_|83|}LYzaV_x zv?<-%;<=qOo3kT}lnO1w94Q(90A!kq*pL!p>x3LD9vj;gxArf!NYKG*S=lzloM4Zq zdZl-2ktdcwMutzAI`j1QtfvN@&@?8WEcZ=-5*Y|11$a^TRhy?b*2^8zE67{-WjI`p zKMKrtmMKh3n{xax=jExbuT+9yn0%{_PI&bm^y$^*R%22wPSMP$@sJ25RJkN6$0O@d zmPyNpRzn!dxI6>X1XWq5SruZCksMFG2skG_ezaS{?G)0ir^|8o*#4DYS(A1^<*9k) zX@lM*Sq!2#41VrEhzg3zPqRxV>xGRKK!kde)}f9^lHn0xJ2Ub*ZvFF5ig+WHPs`>j z?q$zW^s0?*ZZ2Zi+NASw9E`T>7~Z4)S~q%*YlzLdsa4w27X%D2Xje%JTuR#5ltCHMHuqfyjw&p4<$+;u!qGtVwi}L{*!j;lj5#s{TeW z#9#r*JxwwhB+F(ju^3Pn)48nSQLPAW#mBaVH1&c=NRYAHBR+R6E|;i(XU>wOVZ6CM z={X;cYQK>@Vly`g&GIu07d`Rl1xD8EZqme&o$PvpmCwCv?WGo)3+ifKUp@Ax_V;3u zIQyh<2<|aaTd-SkECpZ7%My*2B-L2lKbI`Z4ZLrOAJ^1U2Y@T8Cdlwg;koP9x)pwH zLgmJHRuQy;*o=&hR3Be@h2)LMDIk0|%&IwG#-VX@AXuP;I}?SFcc|cwc+iWo5bn!A zOj31S#My6h%&x9Z-!B84AO5{K6bzEgxkt!YbApTq-l~pdQhe3{Pe<%(dwFA3R$|49 zp1sGlYfhwO#i*-o=b!bN9rqqShLYwtDiI&GN=Tw*%o>Ct6LMy+Z;!F zpcn^+9{#4LjeNM7WU*-*AG$dMY5LU3=p3b6Sl(t5v`%9O4(c4`5N2sgv#{>mo z=vxma=i>*`yB;Evc1*P!4!4=(yWix<&m?$JAKeN%wkg*ZvY6Ej!9gFoCxTD8s`i?d z$r3HBVju}oBPbxLJt?zF#O*4?!_G6**F8*3l&p(URxGHCAzg#Ugl}>(GghLET$eGk zupF5|>*;~ov+bga-c^!omI6*fpI@bELvMF8mbhe%@H~)%0oUHMSh<#xB({PXT|`au z07K=E6*@y{uuE?-l1-&tDdTYd6Ht8c#?qKdgVZs`?t0WxT}f#tl^hHZAYl3KY0nbc zvn$<0uVjvOHvV44Ro>x;Kb>b8)>35`AZ;Ib6O4L_pHfS(pqR_Nz%Q0RizBXTEjq$y zAzXP%Q)|ZDjQZxem04VwUQE+#+gYZH&O3u4@_|yVp4`+|x^z=o3xcfqljdUIbPnHI zv8CxU#SC_~^G29vD=Q~c{uOpPp56jswpS{|I+4bEwku8dD9K+A!j}zm_Jm--1&L2i z{QK0mnq|1TS>S=pai9S+*BwnZ>ho!788>tC2>3bm_ohp9tk@2=c~EmUGkEn`I)}w5VNKT!M$G6wB-HHprPH10djzFgZrX5y`F~C-rP%OL`6(%_kxessLWnQ`4vQjgeVZ*2*2XoRBkASWarT>k({ z=A7>ID%z4HZ#*c1*g3&j3Lb;rnAS_=`3WJw1Q!SH`&6+=40vV-bKr=^HjiI=nQp#G zAc93)xDl~WynE-`qnVDycw!3>8_7MuCoBg}YGjLR7h-ZcDeG2jrLn!5W{xITf-S=* zDoE>!Y&t|5y^~#8>W1Ft7B4C`PVRX8DRb%;8+jZd9$R-}fC3O6LB};mb>soABS(F! zh`l}jv_kP}H!B6z=!#BM2=W0nZK1PPix)tTHwSAUPH6UwG%@ciZgmM;&ze9Oj#u~% zX3eC^?8_vIk^R82uLS!2YpM|in|9-{50!^jHF_%z0qtRmWpx0Z$WAk!;M7T9R!fb} zR>sQZ?ZuoW<(v($Nf6;%{i@ZoEw}9#%A)aO^5nNtLV!Pr4(It+ii2+?*7{;aZZZOK zxtM==Q|=%K6Hfb>3@KH?3_G7{&CP65iI6Nj$&i#ml0(XK)3-`wkS(gkHO0HT1|l|# zp!cmgY^RlE^4u!~7+^ST)`p9xY5U(xc`{vcjK_d|L9C@KA@Z2;Tg^4I`AM{q%wXWL z_03+jvrDfo;x#@{ZL-L7@{!jcjXn!qKS_D@8MP%5?91D_l2L&XAL&EF=nl;zO181)--Wfim%#chxS?gJPsPg7CJaH^YOnH4ty$;zK&?^Na1 zwJZ5hrJf@V^FDb@bo$hh*<4*l-f~J1NxT5NdH#Z>N2?om(GyzVeVyct1!QA{Pk!e< zm2*zLO+lGVxQ!Sjq^~RQS+nROXKALmj7G8IMci`3)MBKzdz~>A=a@?XO{xg_im$0X zezlyWx)n{exv{KR$8B!*(>Rb74I8F@W$n#!cV|_e>8x#{XwV<^jr>1_bkO*hO)wPL z$AOk7Ay=@hi~Fmq*@_EYq=U84U;*j{WVxFzrmI6PZ4P^@X)Y$zBz6&$ML7Ty+~S?# zrM9w#((f&E2;~ry$79WD4-UxNTkQ`SJSJR_`Slg6rTA*Xb`xGYvn+WYTW!ugeQ7zU zqd3!(W__IchM{8eT3QvIiSmFvveXaZ8?8Z2%=Zqt=@a&T;MYT@X;Qi0CA+v*B&-8z zRrfWtG@Uj(CEa=)vu=taK4m@gS-SSv+t}Z8n9;l_noAiWW!zWysQ&;l`j1MLG$crw z6{8?!iU3q+Ju7Z0W7Fh$X14{Cox{_xtm)=!q35hF%FK6_7~5G&w3{?k;*nd-hSd%8 z%oy}x{n95fZtPArjzWE53(_G z2_zq1T7?qd?Ck>YVhJlI?Cv@KLY}K~_?}sn*KXe_*A2U~3YQ|)k~D2$lHt6|bu3JH z1$q|rYFVb9#3;Ct7EnHNyi|IAuWP4U8%v+{kIZl*V7c}BRtJiFN2tnXhSm`ztbsu* zfQS5QTN|24zp1=yBPF~1!0u;bfs_0v(xrn^`w}YKT>wbu1C_2IpBc_^bdL-y0+s4d zvl_g{?k%@+NKm1{iAg($dW}i;mwF?qieI%@%_+IvG<@v?1;I65B%0u>n_?6;5Ib-W zy;7RTRC$E@JMS$J`CR;~{{YvdZBk}dw!XI7z#qBL(ruN^eajkyOSD_vvc-2!tds2k4ZRP(dr~E` zZ6#u|yPHt+oQWHkC+@GNDs4hT2?iUqaKkZMgyoO-v)Zt4wIgFQtg`&u$$Wngx3x@G zOPOMG9I-2~<(sD;cpl$MS0|ZRyp0kWes*KiF-;Nvaf*Kz1vG zjGs!VmfvTUW}fk+Or6b>lD>!5nQ3(B(o1tNh^qr^gk(7W@cyIPozSjoi?ae|;x(33 zhsFe;tnNZ%_evRe@f}JYkM6=aVE2L!V)(U7a2a4a_Y;&Q?ku% zXK>Q&A)`mY2AcS`G{T+Q;oc{+&$DA zRm(4v0uBis&!DT8!hbO>8zNZ7?0qVvI=-0}sM60cj79)wmw?#p1!d~q zB$9WQ?@YFL`G}Bj+mJdMn@(>*HyG|{-rJiv8_z|L4YzA{&-J3#_B|REy0`(If$~rB zWOw>j2-0<55?s9Y_hxO7?pRTde+dDg?K>J@69m zv{4Z_CuY&lVri=-rMd_pxElutcQ`(v`c_r$x2@m6qgPoz&RZ^#oOAu}dWh?9CBlnq zSC@DT5ZVAI-}0x***xgKsB1SCDAQzX#RYW0KYx zk?=ym0*Kqc<4h?O){Ans$8rJ#Zs3~A)Mu8?C0A7-%b5{)>+9`Hdv|da1;w$cnp@5-xu5{*`Jr*vZXFYEe%F-}s3h<@J#U4&NqDS8w>5r8j|7 zMY>B%*DlgWxfrhBExqZNUNF42yI8Gl0wZw=&nkWDEpNp7mb(}Fb=+&1C3i?MsR0GE)rQQQw|mjxtDYPh|Q<6hP#wysMj3F~{XSo2-Q70zmUBYTrHLO^ zvA~KECg;H%`qw{quG)t!<@rSyAm=LIK~vo78t$=TmfD=L?HueJF>dGSS+Z&NkzFEQ zTN55K7AD5y?Mf+i6y)B+Us7wS)nP|Ap?4hT_h-9iqPlV;b&g3DjtF*dln+r_liO+2 zTFDin?JBusX6NW@CL0}7Te>znU_q74i2ZTx?^;DG7|PDO(;49Z09tsz{ainPBCpDX)7N(s&!WGOwWB~n{N))Zjf=FC{W9$D!#B*q^!B4$m1jDL65?tLQt+YS8#s?ge>s6+XSqQkA zP>csBKYQ5Jm->WJ%JM@V0)PPu2OhOau5Yh0u-cH3pP0X6{VAxfgvwXkzhS0BJ=0Hh zbcD#bU{6|_dF`~a6)k}&oq?1SoOP_rXr+jsGD6#c$FZvsNfh!K-b}P$Wt3qenDQT+I*?d89tU!1f;XDpp#Q;i+1CIkfpB zFiHN8aB&k6_s?)?E%fVx3A>aR-a^6#Hy+&jR{URLYhfMrqccXukQT<;WEXa+DqL9z z@KEkjp@8=u^*+$AW{Ot2TEt6?1EbCJUO8n+}kUaA=+M@r6i_3BIQCxGN6)q z&v9E)X!>NfA~>$Rk{pw?{H({R_U5@cJY+OE&eEmS3`rUcfPK5wQ{#^i-CV48)`3aj zK_UVfPf&gR`x;K1o}uj{9S!Yb&HS%AX`v{G46es<9@R%qOGvJo)(i<*cLfc>C%N{l ztCOv22ND%XtzFZ6Id?3QT-nT3M=oR; z3PI|=l$?@UjV8((lR<8cBuEu)H007(dr0j;S$gb`j+BTaDtby`TU!C5==~(bA4GPNY z#0d!4t^7mMwp&VqdE(*m3vRW5#pP`c+0ZVr`-ndz*WiZd%~HC+@}@<{yn*l6^;4QTA6Z!agKH zgy`423NRdP8io>@hAI)dqb8`0Kl3yW8Ffn*S&%MeCOeSNCuc6RS-!%I~#MaktdwwY3iw>N=&ww)Rj3 zZ!3FAv;YT6!IVa_V)8%^33A4_k26}CO3Py0cT#R(R5CJvN*+iZjaAfQnkfF$Brb%$ z6LTD}AJU79tvWW1BERzsbFqG0@$2bSF7->9$B`!B4t`k&ryNsA&D2R6ntq96_GvFJ zbwcFEe7Hj#2H=y5bQ-KWJo!|PV-OCx0OyWy4P&K^`h>arQ=ke?)g*5Aq>@VmYDD)S z$`9Wlk1Tq7pVF$=BidOL-*}4hdzQb`A!gb+3cq*PG|PD|CMC5whH;P&92$W&F@bL! zilu&Um#b4GxbqY=v9n0T;A9WP3Z)fm6U^DKbu(kb)U5KyTtT`_q`m{Y=eW|5kHsp+!ONjSxf0c*Ixa(6|+PH8A zU*!P+9M$VM;GR)$c^E1j1YmGQX-#Wy1nQR1f!TjAz3eHvmL)*LHj+;v9!s7vv~l&R zpwZ+--2*Un;2h^3^>^&Dd9ehQR2IXKIW=(_${S-a-MAb(V~@hKl~#=*O*TgslN@nu zOQe<12ABeWct0OcN|hpKaR`8X+_av99AH(OoepV{UeXC1DsRMRued+sQo(5)OAHaZ z?_zw`^c9b^HdMyFlo8v*J-}jJh<8Tof$2|*-fJm7XgsjPu3uI7hvD?pWwwP_GcMS0cPf$H zyPW?3oK{Wui8ZU+SdmB#BapH&+DmpHO4>MDl8(9=I?zn-Zlcgk4IA9zMSn3L%s()! zO=H9wMxPL|v%N zJFrI^ed@iHDl6WV!A_-5h9PCGTHi{mX#++Cd)4OTGkRi~du6B<5=|-uX+L_QaJlXD zt=arJqUnY=)9zf`s($KM`^0;m=Cg17Yob}$&81twk{P3Dr3#QD9I)IWi#a{lz@zTpHuE@%I-XWcQw!1 z#ldTMKuF?^w)tbeao&wnRG(eFBTG{b$cL6)&Ls8CIbf=}UArJys%dDB!&UJvlLWEF zrZPIrY=Osdd>=eZ?tKZdqcD8f3kFKt#&V|ot|CgB{Chmff;05Bie{{W3&iu?O)Mo`HH z)K55;Q2wYCqFj-0AM{TbbW*gS=>fTuF^uW_pAu6^*f0c;yX13P$!rU z21lp8GgQ^>JUOPWfnj|t^Igo%a^>>Lo^ZZ^bSJ$}ux;oySuI)GrNxD$t2Nf45TWONS@=9`yI$(GD*PcnJ-f9gbCU=j@P*IVHKmB1^T3(MNGA^QT zyuut6R&u3V9FjdNPpYM>WPM@15-w{R+^}r1v5AbEi}|cRS7X=@PpxLhf8q(Q66*HI z2-W^pWWX=egI2Dkwex(NYnHe(KJo||W9{fF-jAjEdDLc7-d;*Z?UIetAbR8a)~QAj z(HS=>%W|2xH?YlgVv!lYbWsl6LnyT8QR!&`ELKG5qo;OrN+T!$iaK=$wV9DLR zF;{K06p<1gP7oEoS!6@s)Ou2Uv09JbdkY?<-XNS=#>}p}y8O<4Ew-jRmR~nd4PSc)|4^^-});#BU_8JeJZrt^`V)5$-E4XFa=cRhwa^$9%I)0$UdzU_D9otX(eKSh#rC_l@RfY-Msz zdUM~>wqo$D%+|?qaefPID$ro=iT!H{w4SWmH)}${mLImfdVTg5Sq37AXK#Fw`q3!W zZWxKdJKtbze+d36nfyO2R^Zs%IFxW^A8_&CxX-O>X&xN8y-4lly^cNS>bX2`dRefF)c6FKQ=NYP=JseyJboI}+ikpR_cA_k(q={Pj(dAm7$lAhY45Bp&f_T_ zTzJS}c{uDVMJ{ARk1I2E-A7llcaHX0&^PY?0C^S(QR(eeqtl*ySZ!4nKx8|E9Bn_| zC(^f4%HHbyHn9wnCzJ}#&NH6sN4FI<#*GczTw7X@#xw+}TozO4D|JytSsC&+$Sw3O z2Trj_ukYRF8;k}yND;BYoyv5rW=jF@DRx|7u6vh<%1-Q3@K;x?6{ z#^D-aQGM#(l-GB5>I^RgOvec$ZXta^t$1dz(|^(IoTCC6RNxzEzY47PYoDJFNzLlSO zeW>0~Hh%H-{l}4V;;PBtwh)K z+X&JvI@uh`2twm_Pg28r{ zZzyn!_W>m5(4Xs96T~yxhZc#tR#2+g2dA&CX&nbjx0UCfO_4_sXKmSYj=x&5V-|&C zq+VGMn-6ZmvT%RBS~8O!hX>S=oN;80Y_pVyFnI~j))5FJh za(8+im5cKzqNxSY_VhUSt?v&R@`2RXKjHf?7kow4CAED=`yS5%GjTuP zWhDH|&p022Uhx-%{5jxFO?1saRBci%q(m7&X70oe`09PC+#zgljc;g1^L zmDF$V3~!KD5Xa_UUO2^e`ZtF3C?#ZTHNej09oxA+wXuG5$YLJ-(jQ z-YPLxf*QlhPV#3h;g1DJa>)$#uG8;3nfs|dYqGQO)9H-2F~F>2C1qW^wvSx)rPCRp zWVW>V#Ebjkw~&6dZ&G+P+bK=u$&C^tyC;`EpGxALS=47#DaHtOwX9Ya?SCSnF(2L| zukfCRvG1eSB)wRnh)iUE-Kabh+v!=?pA=T={@x2neD+K!MF6hR$0xa@pTciZn!>3%S4)|&G27W+Sv z8X+3(^D=s8x7M^QehBD#6p`vaDAqxhfMtiA1_P)b^)|7g_;*aUTWvXaGxFpgl;`^1M}{rs7Ah3_nq(LHV)?M#Jicl9 zBO&lm{X62Zb&LN1vtH$|eEcph9f>Lc>DT#H)1_ui=B!wGV7qx^N#!xhxO7r*e;(h~ zrnr~SR7;7;GB8|q2Lp`O9QPM)k37({ObE-b-7DCDD)qI1xVE;ux4&;XHYVe5DR@nQH@CQns>f=_P&P%IUqcOw4cTh}k(2?~Nz=au$-KOB9 zV>!Z++v;hHZxr|81kD}@EQB0n^*HTP+9@HiNj{Bn6!$j^1d^ZJ{FyD0lacRN?X(+h zdhQ9~y^Nxg?;y&U*l~l7qNK9&S5;54*|o&Qb}Ws8(XKlJIX?ZXPI;2m;(zL=t z^0ZSs1ZM=Q^;Paitu(Ci+gw4Q-FfJeZE00E5!?g*6$!Lek)oRHYc}Pv+ZU1(4U8YC z9cqH=HWS-0lGM+6mL;EpHIHiqv4q0__nFn~!r@v)p~M{4`f$IYhs| z5@ok9p#bs6O4abkiR9BGXVb2u32+(`iyrOg(zKlFN;OF;H zX2s0@ABx3(!p|&=ljXT8=zDt_%+&l>VyZ8ou`1)`cvOILKfFI$$JM+=Zh{$2+4E#L z+)v+Ze=6fVMdJfyezD06&bx3}j355LHPJ^1-^6oO#3ixaKZ+hwR@4&ghjeV9g1=tX zkp{PVEqQFu-Gx?_CZQX(o(R=RHkpohx0xf&T!rgGjL;CMekMP$;|s2 z*r|1MZ+59~e$8xz?P-Hyg7(fj)2*&F{Xb+$d*p{FFV5Kq^vyKGsY`SAyS9&Pe6_kJ zOo{9N0M@72%N3MTG-}R`^Y53RFDIoTl0&D0WV*6;^4I1OvjEmWDZi4e$Gs#r#u-HO zsgbvWtXG9Tp2C(ilIq-CHNb`;AreC(eBbyp1d$QfJ&!&6^`w#r)RHglGGHNCQLxQ$%Ah1og)bDG-z(EiSh-rLw1 znDOTp1b!7F*~2N2N5eSs!7bcWQ}}Ym-M-Z|l+iQbyBmgR!vTU-3Br?(K<`lIrJ&Rt zQ1~?%HDem-jMFs0`I0*4Ve}N)t;~~071}Nf>>v-gJrCBi*H^Rf=AyC1c=s?k-0?u6 zUNCx*p1%J8N{T;-+H|t3*hA;yf0`|$datQI)O$I-iF1P7-?EENONF)jdwG2BEDy@x z-Ky7~CAqfLE!G0l3Sbgw*f)7Q5YMTcO-VK+spNiIA)A}o#vT@ zR}wj2G5-J#-iEE(Su@RC~=a61N9X@h}rIV7wuF=?M^Q~(usJu8fhjiT8Uo(=V{{SIQ&^#V(WofOF zY0;dPE;G+U0PXEt{vOa_@eTYMJ;^rk`NeLU;XZZ8Zb!8hD#q3-ojG3R`=1%ZtXspQ zGAI$p^8)z~$MBz1=~V*Q{jL~p<7M1=jgCHCR=0~Z{U1bix3PvX`@ONN4jbGbQ&@3Y zK`x}W`klZ@kdCd7m8+3iY;-jGnzvHgMQD#@1bf5mm05ZwKJfIcO-eSkhINfYtB$Js zcAmK>u&pcGcaHSwv&3VHY%(k@$m8#4(w%LhT3zg&l_iOT2^pV`J*tzl2Cimk_KNng z+=!YceD7`f4m%O;R;{d>;wDRp<425_N5KH|+t8XxZev5mtB9g(+sKClJqgFBr7US9 zk2Nk4S3G>V-Rp`Ro75C-xh%SDI;1w!d_? z(WJ2^a`D9EWpj`{{p+sNyeVl5#eI7mO!1x32V8l4V+41r_F^l_MN3oD|r&a`{ZI-UA|%d72I2CdR4B5CTLmirBY&?5D8!I z(S%U_Q$YUAvil^VRw$4kJTEM9)Bgb1Tvn^%jV97aw#r1a%vB=?Es@;+0F6zn>wYJ? zx(Ohi)t3(Hzw0yW>?)ML2DF;uJDpbGrNoPzZy|@%{3>A>tzil$D(cZ% z1tIYiX9uUhO5MKKHEY{g#-yugfqqm20CCij)SAoEw7oY26TWAU%`6{`5;M~{ z>01`Ix&*REJg+p67R0vlwgg!0PCM5Yd-29EQS6h@lZMc_Q+; zUERqYO=ayah zOM?6ymE&@Q_lK~n3!$5vXNKcX4-=4LkRQ&MwTj(`BV=}$Qo{cLYx`6&r<4PO4tIgn zf;-h4`6HfBwcM++ZX!U*hR0$nZhZ-~>Gr62)+m*&z+CMos3X7Dvh1#)x0Tvk$sCz~ z)y}v?1GlbEKb18#C3FrAXvamRTty2*0}xmORr$_+4{j@<(d=d42%aU|zxPa67~}l& zP+RMlQI~5Xiqa+>S|Hd__32dgO;&45QE~p!-pIH)4{Eb-BB$G=5+UB1wbu zgz5!kPdJi85J@w;Frv=jHS7p>cwcaI~jacq*&R^6!}c+<%wi`jQ2l{a<|?g)Gt_D>G51JGL%K? z5wXh?=~8K$4yAnS2BSIod4x7NCZ@YbKC+DBt^Au|EyO9(guGv2TFbf0!b zr&Gw}U&6j1)HOx9`$T_YmNgRzqTS|@2xRAh*ZS94p?GFJ7Qn-4Yvwc(d9VeKK3O$& zB}Z2B>`b0gWe`3#j+7?9sOU0zf?^P$a2YT&{n8IwiPW7<3ymniO+I53@td_TDw0>^ z!kW;N#rFDcpCz;w$U`yR=C=TMDpw{v}KGtIl=FrZ+eGLeNN`++G;Se z$ts3@r{rH_@AR!*1H%$o>CbcaCxj+MtDNsWGCe+(ct&IoZ)pJ~_U>(1Sr_RP#QdXnydCu7Fq5m{p(;Lk0T&=9`#~7=pqwa zte}vKkU%?!wJQ~=siMgygMIz2VW__S{6{kG!hJeZ{6phKxK-xe0)r)uHsieGAc+18= z)z28h{{X=M0LH0Oa$<5xYIgdzo2TjeskDM*A+X|0U$_|ak&jN|v6obPmvJH@7~2G@ z;0zuJJ#uRj*HyW_52xhYc}tuUeqen)OkJ| zALi9$ODqG*GKi5$^Y;v~KToY!ERb_1T({Swo!-eTBL`p!EMNwd_ZjR5>T8nmFN?1y zf=xbqX^LDDkeFMQKEIV|Yg$I9eUk#oZlyqwfs6t=jCb~`P-(&&<&NzVIHEvqWh;~A zALC!ft_dwnqS5a);du5>6D+%bb|+8aKf--D?^sl>ty?N{pCE;2d?w=nt^O z(CN4Lu{pT9jZwL4S;-~9>$ltKR&DI%uxoJ}mW|sECFvStJo=6+4`}VVx3kpgJ{sx2 z4`=Z0-k0JnO7_!GNyPTIF{WajIu!NmkMo>T)vWAvonbWlCRsemH=V1=Ty;N6W|wno zYOj5FbX-aDg;mDf9tarkSH`cWXu5^IrK?39>>#P~)qZkwoHwBUb;T*wb8Q_FjAD$t zn|s|&CGrGvLjsnG$iepw{VO6Uqk`-0kwq+l$U>~yRP{dJTJ%qgelPe_;&-0+z`9(z zWyRbv8N9N5xg01Af7$8Kbv)OX++IeXy54Z-YM4(!>TA0XDwB)3jZRc)%cubxM{Mk3 z2vjS+;2YR>HA_#`^p6c$m~LZpaMvI4@Lvs%y*tzktXW*#?6{p`R8SRSI3)Br_wQWw z}q9w)dYPxtgTh=4{1@u75(C(1{0F~e~4D|!s zn%~{FrYlpa@Yjy@7@)D89-Q{AoiD?>?~fpecy~{EFP?JEXBzMj9)u3Z zucc)8H%Gik{JR!O_hAQ~fQ5{3ai08FqI^ArSI{*@@vnn5Szy$3=`rSrgF-p`uBSgNQ4!rQblP%`4rM0Y^irsmU{m?&$9dlXo!E2{Vf*Z)Dw^asN zl;mwAKQ4L^UAK$ADBbwI9_LxnBe) zJEKfQg*LN}m^kby2Aa1FtG~}!Uw@LI?m_9E^`|w)qh@umcq7Exj4yP)8-oY~87(6U zB|d}>nf3fDE-U!->$gZF@}Y@|o+(GpPexyEdQ&_*;tvpLa={&q#lg32!I(>s0sjCB zXNomBwFnwZXgsvDjJ*C}8}2=ELe#t1n^M$mq()0<-bQHi3oyu5{_obXHEWGV+5vSf zp4nBlJ1FH_)7uoyH(S-OZOoRo?Gq|_kw(f3N;_cHo9`+Mf3@96q1jF&k@17wzO|x< zyhNvTQ#Y@0;cV^^SR9#lZdlGajY8f$Z^a5J@P9W8(9AUwAN|WXK9!! z%fBfQ$1U`&87<{SWs*=N37aWfK2^i_g|YW?2My34tzWZ@Q6AD#WxYCk?G@tI?X?F( zf+G@2#p6@l9>bhsu3l;yRppElSsRDBD#qZV{{X8V{{UX1vaeXi+u^d2BtIp^w2ldn zBdHzgfYmK*F8;#TLdrd%qmaJjk&j+~r8P^KT=v}Bxsipt%DQ-s)D?#W*;?GplPGDTh)ThE0Wi122&cY>}2<@UtO|*DUNk= zsxa{bfzz+G5?Y-!XKfB5{v;O$;yZa;C>7&(`G(&0g?5HGyoTN;d0a&iKQTU;uD@T= zbqFKGwr(;3iseRlJpuK_b8}fs6D@$aF7VIhF(BaQ)3~EUzA{Y9mM27(IN77}S9g}< zC7Ak}jwvp#B{N(kNg-XT(Jugdk6O8OqDZE9+R-`Kl#|b=(N&p7hDsuw_~06Gd|igBT6h4m~L%M`&7E?OrL9BH2mn z&NG49tFds)9l3@$-;yLBc=`{=(wlJ{WUa9-VX8aZcf3 z#U%|Kra^@RXy67p6M6*jI zurl692IKP)9u`K&-UGEX^cf8IR^Yt$l7%rLSGke0qaAqdk6NcPiIgRzEYe87!O^~+ z-RkVNx_+x1kX|v4-GCP?u2c{YAY-0=JJm+}aywk!%Wo7YN7&I6?jxoN9XO=fq-;ba zYg7?D#y^~>fr;D+{yp8kl*^kld1DZGW=|=ZZY~6*JjyzL0;P`DYiR&mc5x>=8|KJ8 zv;Iv)#S_bo#>p^#&a(6*bsT>>LrUd&cS)36fTwO7dgYmE8X}A?E}(YYn^_R;;B;U+ zQqHS0ExOyt55oYVVx}HSCO-mIc$Yf*ypcGS1e@l-A8K`!rHQnpvi8M z954fd$J@8QD!kHIy^6ZX@s-Zjjn3%+;F0ZC76%VB(L_A`zcG=w4ZX4HP&|@G7Fn7! zfr;~*W*vT?;YTp+CEU@x&uJyn$UK!W@wX)P1a~5vJTGr4N$q7)V;KjlXVcJAzR!DZ zKG!vl_&^3ZkZ_~ip7k36GsyDZyty4f+Ede-mdZn-WEUP(6Ni&v5kL>jr`3t3D2c7w zTV=%H5qAkVECKE9?fBD#0$taWA@fo%-MnXNf;%7Y8eoq5>~T*lK)Z%g>No>GsiZOS ztSHZXAoHO`3x#w0&r$Ui4b(E&+eq=^hMZ!s&6l}}gq zIifJIO3EiL6sxEMB2_%~?e0CPfJcUp&b2Kdi4>~=_W|sFoj(d~wAT?{OqNps3j!x) z7$egiu}wDUR!f+z?wrVeMn}RoIoiYg^rqv@Lbnhz2H}`63-qP~;09^Lj}uB}2XM{< zCp~}9Y9o+{<8ktaa*pzj8yy$gph(>iyGYH3<~BVCV5XkY0%f{ob88q^xI%KOdJ?C$ zdx~khfgae^0)Q2K#&4M99QL9xEu)Til?g7#U|v)X{{XEL`D-HEN(^prVrG5_JqNu* z4g5=YaxQG-ERg^TU?hj}>5jZpKohZ4^2eCZlk=(L2h>u>GCkTim@uu9z;FgVDIOd4 zK12|+ua+Nv-c%m`;++Cqyo)8rm$U$~GDoxkdzz#)$b_;q4H3JFCSt+Fk>t3~1CGL_ zYrC&LD|>r^Bd07va96PR`qRV_TO(V>8w|v~#D^u0dM}_9+1hU>%1D+Iu!fYVCY_jF zjPn%lc-JFw-xHkY)Nw?tu}}7B?_-sK46vcklabK-(9($z%e@x}0uGzcOjJb@26plm zJORCw^Z5FjdWG2acwrd8L<^GTv&lcsq=4T+GER^Wm9Ye_gRgx50F6Zqu)}2L;xTbN zjzHSKA}_c-&*@6CBdl*0_63gr0GomIpgD&%w($+CI)NmlJgiEBJt{bw(Ik#Z9iT;G zs)Uv+k6MXiw`oIMN?Ai?fj9~|r5j>Mmg-R%cQ`rW$7UYfbfPz;^G>Po4L5Sf5WpO2kIryCiTok<&ijoYU^D zks-rPk+&?U*l(}WqPI_xof*oiWPbtQ7Y7$HmOB6Q%i-Wr1 zM*)voOLB$t+28C>7*!9w3h|NeQyG|m>Q^e(@fHq5ECjV`aG;Q%8MkJVP9u!J4^BJbR~E_^HH-pe0kD0& z1!$_iqrJySj%SWnh;AT!h}qh4>qe7h4XQj&(gl>2mC?8v_M%Np!iMFQR2KVz0Nsz| zDbZad)0T`X#_9&%;k*3>Txui<>S!CAyg!{LS~#|ZBkvBvq5DPfSkxd=Tlby9E-ESH z*#KyW4kRFg-raLiTs*Pe#hv#nTMLaD-9q zEEgXZr+EOC(VRDz`?n_qHfldU?)q@=ZqhLzJ7@0y0QKo^QrT^chT|`@ET9pOaZq{0 zAYnEM96l*Jl6^tgRaGe11qmbo$DGsIqm>fg8$YwTTr&p9C)D~=0h)9Y+kC-Wfw%Ri zGG$KK*aODn-lv(dT!KM38(meg_eZS=&d!pwxs87OU}F@QQ@NNth{T*Oamc2VZRayW zKm-Ng_wP~8t`|kfSr^P{U~Q5o?y`6XJ^ug-SXM`y%@JXUD6$dIQ!OXBz6oIrh~aWJ z;AiQYPqj0nOuM%z##@YI*0)kgTz5r=iZ)>GOB`c^&5SZ#g*2cgGGWKqiz z+YCf=fCnVi5p{Pq$!9=UamL;U{{URnqGeop#fIKSI)hopv|A^cHcs<19i>TRB!wrH zG<~DYJeJwF<{)Efs`77U1h6Nw4gk+$eQG5LN0uaDyzUI$z3Iyk(-UsyfQHdxj^+v5 zX~>d3!1~i8j_D?jQ5Tqw#1-k&*V>}8U$c?rtGsHUk|tt^?4gUF zL7oS-b}1s#Y^fEvEX?qbcKnT;in$n&qDHQY`6WxPaDA!q+Z24nyF`Eo$kWWzQgbRDWeyQJEuR2+IX0k7{+y z*HW;JBI9o|6$1klhSiegU9OtlT|p(eQaj?DWULK#8p0_e8#e|A2M6x`Xg4ui9r9be zilc;6$*EsTKuTQBL3Q~;5;u=(vu&coa01vy?2LfOq@1Z05}a1!NtyO$>RjB(X2LXF zIdhyI)QP73pe?CmEUe_J?(gV*1!*(}Xqq_7xd(HE8ByD(b5EYov`=sycJw4J57bt2 zsJa%Q%s8!KS9qa-2Z46Gb~*H`mPryv_7e$E7l&K|D@NMV+6y;ZNWO4BP3I+>y+rWr zKy4FqbG^VHDIG;-tjbWaEOJF1q4Hs8E6xGu-m6{6(*^mNgGqu& zn=SW&^s6_z9>p?gu2wdDJI%=lxW#8D%OcXcGVP+0NF;~M8|3+Oj>EY1tr)FjQJFU6 z4qUHKdT0`9*0GqZmR1sygz?v@`cmBL_S%V)Hc~&5piCn;U!`cLpsk^JTH8Siyr4fD zx1q}89YsAg3lLU0;xj&S6gJQH?hdlG;r>W#1&%$C4FkNQEXDi8AeI_$2)$tHS8=x!31j@aG#O; zzG;avpk;ZIOB*rmj|nu+m&W{!C;@pK>C8XUFmtSYEhCM^df_1RM%tM{_*> zTvFkRU^;!|9=!F(r7iBCKb0S!a5odnpu&(TN^BFkR$Hlz!bC+Z7a#@iP>AD83B zWBcJD>S}o6^NA5M##`kK=eBzNDTB#uK<<((hhS#xJ%38Uy-8qgiisb~^6~&?cg|Lq z?EXmsrHzpf%<+;#XQnFjcXqb%8+)5z{ z%)mhC1e@}qj|V*}W{$)kvx%`HzFZdjzQ(aGlJ3qTvBflvpOH!GJL0BE7{8KE*93WL zbC%Y7%#;Qkj_XEt>(jYlcEwPi_8gN+_SnVa3WA%;X zUI_lRN@*|Jadq}}UU1!%s6TiQdcsq20{UFCgm4K0PE}5Pzp1HYz4F+*OY$6GW1RX_ zHVAJlUh*iyCzwOWj{f4EW&NW%i7ug!=3+95jt5G7*Fk%hp^izJRz_snGR#{51M7-s z+r0k(FxpH@5wx;>)&sY=p{+A86Bb|Z#2dHLoo8Vzj&2^>XxTUk&;i)v-jkBujEZYX zBy_v6kcpRCn&0fU^A(UW4$aBurYbATh!G-3 zoaSfSB9_B#$5BnY*7V74Q|uP=aCRmf9i(?B6)tjUt0ZWmE6gI^vF#i_JLA8lS8IuM z^CHH8sb7#0mdX0mP+Z@sXzpT2pimCu$tJADp-C_LY^1uC;CY=ZCeq!HeToz7mZ=~t z!Gow-IL0&B_N4oL)x1w;wj?sP_@wtejY`^7@R^cLKhBNU=8pjGU&gNK`fPB{vf1BB zDl}-pC65geBPClsaqC&Si48_fp>GpGc9(Z^mLmo|+yf_GJ%vMcpu*P+CA@Kncb1kk zU7!=m#y!n-4W^)pH9W;DE9c6`+&wv{n!$j3Yq-NO1h&DBz5f6T%2m@eR7qgaG&Q!4 z>n0$P;gMv{c=W0_S2j92d4lKd3||s%YyiD-D)ib`nR9L+iuq#9TS^jsV0-3>v@o!> zy{)pylKiuRGoR1tSUIce&3&D=MFw~^Gq&GNL|F#uCTVawdUmR3!`Cs#a zkIgUevGl>Hy~6e{{{U)U`LA(fA(q<;t|CkY?oMe9{IO3g@yZ$;4bD@5f2CArkVXvm z$L5nPktP5h{l33so+MLr(E3{EZwNU|-0m1(O0Z9qF4_WP(e1=tYR2T>NPx#S!a|AX` zJ)N_=h07#ul0ETLL3gHaTZ>qvk{J*wPyxetBD1Eq)U>PS)NLdRvL7wWFICS>QtBNH ztB(`w7qhHZRwHqc2>jLIkMySLkZL#6%(s_5QcrMfwJe ztE0oH#GYl`p{I#?Z|+pLrUY@eCzIs)LUKcQCam1*gfy|jQa6zRky$~(^s0AJ%^Z77 zQXno1NQ3W_{VCiuv1Zb5KVn?md2k^4hR?n2n%cSWu9v9WDYRkpt|J-heGPLaE30V( z#N`=>Dx>T&o~S&dF9YFoR}?z}pnNii!bkYV4-dm7J| zRfHJqpt)FGr1{yGcgtCN=ZmJAX$&gZ#sNI>+v`x@TwH3fBU;%!D}W1u(XrH3a-iOp{iX(jUyd{nCI%< zj~<@&G*@=|ZcHL35%3k1VEWO^V?S!!H6v@8CkA^JWp^LGRUGlqkLy?5kq6kNc*`>q zxZo-Gu5R00fZH|EhE=#mI3)F4@IC2Ht$D1YD!>&)n2<<7A^kDhp~bS))r}Xq@?}Pm z*eR3dW5_H0X_D#|*LNo3F}wkY*y9V^IIMZ%)V|(hoHC?Ixa9D}*6QeRt)w?lPGp$M z2b6~aco_$?t*wNE`hwH>UX=2;+F z9}*qWFy#Qx41FpqYdQ4sFWcs6Su*h=oFc zQqIr<+oM$CPMqM5*fm;AY1U+0xDJW}A!CvUPEBWDc%~?ThxdizY;P_1c<5@R$6eH< zHxWXs8;z}Tw}I`76fQ)k*nfyGtS&AQrEEUYmCpp@oK|XFTxtMW>GsSHa?&#MAGf_< zwD@m#s9hkrGM85QAm7W6T-L&AqfB=}Y_13hyHo}T-mT6tRx?!REl6~|72usO(%r@! zG?GIm&^YOj>0M2xqAo~yvR8ruJgFYFlMS+@szAhm@Hb#*y-g9nGLak`f}TRJZ(8M? zoSD^59EjB{E*Ov%OotdFfZnvBoJQGVZZJS?*dLWvX(WKGjLLu?l(O{qr4nV96iva0 z-W|Q_F3l`Y2Zj7asi1px0zIe9eW&y_PHhVQ(sK=>W<37@q%^CNeZ7WjO3TK2<%OEq zr_B!hd2QT!gHYaU?|P3UY6ClBQbu!%)_%!FI7;uSHoMgrz9G`D@3i)g-Eka4=5FP~W(0m;&tbpHnq~|O1;H_>!s3cRx6tXjHZO*+gdm41wj56OeCfSI%P^%~)C}H}F zj&_xW$s3e43uU?9WqhUo&fOJ}})s@=uBkV?qu(K$xsk9w(e z#SqREhbi)?J%@Tpjo5)?WZX8EQrk>rvPt}UR5IFFX2LQR0F#m5BiHF#YGmX~ajDu{Zk^z1S8vSyM$y`!eO@MueZHMB66a%w z9X_3fRg(Tgc&h^d;c*~92q5RRA-fG3RfH=d;Wu<7^{cU$JA0YCS?(nl+8@RE+InszE`Hxu`F!=7a2&m4MG zwpxfI&2xCSGv0$Npepa=0qA>Xs%v^yp(N($l-+=>l){X6_Nk+vNVLCS-!YO|1|ny` z1Kz3YJ}cC&ZQkBnB@ryeLv8t6rv(21T9lp2ZCKp7x6*X&EMA9+*gz9%;N#yuwaedl zx=1|8t(8Pkt|yc(ay`4|o%VU|ECdp(!grR2Hf-jZABIT3OKI$6mPrsdl@s;#1b!WA zqM*JaB;@upF15W*`sEoSVyzw^mmH|ae|nPJ!t?4e3GHv0wh}HEr#_;$^z8y0=w2w| zG6qt}@$k`*a6t9NXU}sbmOQ+eWS7fH&mbQ8$4Y$t5gyI;D=&tl(~)JG9JwV*f_EtO z#dMb1C6$hwzhIj!`^E$2hz^)O^^kPC%{us7zNjT|fbY(72<_`u?k&xgpuTy}mg|kA zlk;(qeJUj7E~Q0AJqO+1X|{Idp3!{ql7PvA)sOw9VW~wVH#dG!bMmm`Y4-Q2ZqY7Z zFe#ac!#f|iJ*XDCev}sC^3TlK^E^ayN3Bvx6DHd%Somr0=0giJh?jQtV}>4w)~>^( zt&PNYmhvQQgbX)UKBLmA+jzP=eB5cVM*e5~vkicvvhOtu{abTGFdISMM_>N6H5om` z}G%YaTb6>LCuDqQq{x*?HDS_!Z{1;S=K>PhP@Q)X&V4Go=vs_- z49{}p^=2o4aoVq2-nq%Nj4sv7vJ9!uN@v)vFCZc-z4LjWDg~>(h;g|NmfC%UzI?W2 z*LNzX8;^2*DqUY$OM&FuLA_V9^j}^*Y0Kg1?n}wN$qRspzbQHXbz;{<`x+UhWeS94 z$nR6l0jN}J)-k5IzFTHkBM-mj4UR|G(xSDr)k~PpSg8$_Z0)YX+e=tU^WamFk&rni ziTpV6$ratIq)RCM_>^)n>FrYLqQ0*#=0qBFuBv8*71WVF?&BO0{uO>L8qRw;E*gET ztMe7^I|{vV{f!K5{h+L%pxDg#Ao}}?&(w9bwS>v1h?5`y#OHCW`KK+7Ibj4${uQ2B z{?%=_Vhz&cpHIrHS@?g$_VYz1ue>W0zC}AnP6c45p{rh`j<86P5&QO!xzE>%cb(>l z*7?h#bp^T}$LmF=_hROPcS!A@#ySp_ri+~_5L527aiHDloSK72@v7fW(MzQ+S-;lc z5g5>$(y|vxW+o|xQ?*$kQ?^d49^Gdm0O4iN%qmjtrfc5pP++vMXI;@aiVz7~|)Qu=XR~v0K90$O1U+ zuI|=CObCbO1E~b}t9H61s#L`l!UP{Y4l>6bL9E)3b5DD*t*ZEj3pf@#Jvv7cl2Txx z`B)t1-`=@9>#b{2y!$nTO1a6G^a7ISQW9Q$ zy461Vsw$Kj01u}FIif8`VM#e|Q?>BT&4(A7YcP;v=10a*bswE&bIM4gT)4poXsjOJQi)DElt2+Xxjo(Uia;~BbO>6TN z!t59!eF^XVDtZj3cG{nq8r2_gVIEv%PamZs_-|F7c{NAes7ICnsV7UjXm+);#6x}8Jwf#pb9Ne!b242oQMRxieWNsPHsr2%{{V$wvVzCV zSF(ac3xt!*8Rs15(0WuC8npY2c9Ti-WlVU;KDZTH4NhX_2__IA8FL`O$DzkLqS9iz zOwrV}SnZ*Z+FO|<*g_oSoOb^J3ZrSSYKc0?mre{w3PgVI&D0UoKJ`~sws_qxH2crr z?*9N%A0X$a(wk{%J=D7<)MN8@{`HVxFSaSDB!uSfO{#fUO)G*}?fD!z3lZcrQ-YJ?S*_~nlx@Me{4+JJ~a1T8D z)S8XUO?YOCMUXZ&5V%k=&<}4~=tqaGV`Po4qgmhNQrs%A{z9^Jt6M1s!(?sbd0Cz( zlW_;3V0#0Kl~FPBv{Z(|R93%WRJ42MYY=Ap0NM?79tylID4 zJ$4V_AXeqyhGe$2bUsVP_qKzHN%Y-MpT+j+1Z$;O1VE<}Mg|G*Sz3pQ-gYp>6XAwk zjw_l{oSCvvNYb~qu!Q60D#KxpTxET$e@^i&$A>41AG1cWMT5E2Z3i7bwZ=z1)}c7J zfHO$Q56jdq^)+Z4%bQKNR?PctRC2yuv5bZ`E> zax%-Q$*3*8#nFlvo8{a&2hi2YZyMkUV7h3eNj8Zcat1iT^`>0QExVRT7Jrx=oPLD# ztzi`y*%2pw#>mnt%9heH91t2s-HM*qPrKA0NMFl%(C0DmIpYW4-l)j_Rno_wHTMQY zCzI=+YO@2hqDP5BkTAQtob?#1B)uk`9f~jqXo+`uZb>Wcp5~xBk^!-!bBt$b=bC|% z^6up%lH|>~mL!58K#v_W>QArIty$_0*AHPmppIdf^Rym4XwWZWShZW(G~r{n733R`$yct+Y)W9gaa=`C>8DliIoaPZVCI zx*@t!#!{tr@weC9(p~EF+&9^l;O;z@=t%zn3hMT4vkz?(X}nnlfRZaz4kS2`I)jw& zip11)qkTI%#)Y~f&U4!pa$8%A8-W$|ldPX~ zLP%C$My%_JZG=Id?c-D!4zdu%sV_A>PC^<;nt4?KMq|&g%^I=jjmu3I!r??W_i1e9 z{!=jf#GZf(ZO)qxnjPi7g;p7GACf?K-^}|N2t>)~SS$Xo#Jw1IZN?(WC)WKwe z?pe&LNl?9yu4)@e*~rmdtE5MCY@RZTP)*cJhVYf@o zPA!|8D0gfOJq3V;dWVwy}r7Xz97#+?#)(zi?_5F5bg4jIn%eP@T82*(p@J6>5 zoNjd^D~SipfPBz*$*kN`e)~33{#0I@#wlwNv$nN%iJ}b~L*JfNhvih{@f^B^+Di-t zUvJ*P0e!LSSFCN!c1dS+fz*%PZ2%M==czR;mS$-)FpNjQ+=>)0AI_rm;#H?ErF}MA z$?hW4ZkAx;e3ByrAodldCFY@PaXQ$AW{s4fD}{Xj0C;{C92Nm?Rt389iBM8W4psRe`PM2hfLJUMpa;!S%)SAXs70n?QXWy>9Bx2_3BcC@e@U8*&tUK)oP}C=Us7T~r znZtJ#+<8x@+NHxFcT+N#$UFkQ&sXN-wd0L4cGJ@M;TPY~j?LY*#dr!S^> zVhaeBV;48U z(Zhiff_EYH$9kirU&DAztmV=Xxpo{7-kI-K3A)rR-fP=jHc5o!WcnYaV&iA2chf=U zdux~_Ysnid2uOz;o8GzoL&A%FdXhsJ!lvm+VkAs-VUD9UuCrfU2=2bdFl5Eh0AX>* zO4ieKhPqi+#_=O8yQH~z_Z5%0Mech5cpYm<)Ri}MLxP&KI4j=@+6Y$RwDKg7l-j%( z9;f_GUDEtFb)wvf8rYO|{r>=(GB)FYJq>i)y~0MR5Vk&CdBg+*EE|0+uoMoQb*-abtmA8$x=@R~i-%9$Zw=gbA7)+Oy4*qc&P7p&Q`BQ3z{lmOotY(0 z$KUzUYp-53J5a{nWBie#@E6qo0QIPzTe%`jl#NRVVueS`Am~OaRr-~F#8T>Sbgy$F zDKNhbox5)Ktxpa3FZ)AFxQQ-8PxDC}lF9P1>OidZTPqmC-8%iIM?0ej8wXG^-lD#^ zmipMqD;VI1?y9!kt?S1kA3GMT~q%HMYei))LBQRRv@22fN_yM_0~MW@emF5p}$fOp{m zBxa+Poo-AK57i?SB;UatRw)4{&kb@HhS~z zO}5i6ri4Qwb=or{KO_%Y%GC7P!im;R%(9ZX&RA1XR}*E)ubK9&FqOc&0EpyHzW)G9&Q)TIRNG}JBtd9pOLb>r-du}-gWuYzy^gJR zTH@BwMg#46BtLxmV195#Of6z3eFdECx7<6D+;okdzw>(5zt(CKG#dO7x2hDox8aoGFCjc zvRp)d#~UHuOHRXZVf3zw&enUCYq@WlKw%zh0fkfO2YPJ!JT~#K_TAz@xXF0NK3<@a zTprb@W2=!`=3S|p7#bPoQj(|LKhCd150x-7S)6%e57R&6ROZ$EGZM)p*UPv*5;-`? z9+gJp#kT2qij&9&&)qggGJ1pQO~Q3H1t`SaO)B2u-g}v(jgf!VFQWf{0`LU+I(wZmBWp7T_57T0@ldsMtT zQumnD)7WOA<1I%}ns2k)84^YVi14wX?oY3^Q=eR#c|5r+%0E>qe(=Zhtp(Gfiz^~X zk-_sgQ|r)s(+fidkJ?zPZE`~G>z?(|4`#GT&8c@Ot^L*VFWYqJvl@_Q3Ij0gIP|Hk zg}YjXu(QZ=OR^Ep4?nF_`)$3G?znVsG4heKV1euJR!4{FOBe)wHUo#PrkGoUNtlV7MNR|*Jaa*AI zL}LJbd)GpRnS-fysdf!cNF$A5jpq);Zcs3T91~Dasaq^wZRFcyQb}aU2uEthg7W(6 zBY$C#o2sDWRb*>KH{O3LjYNO z0M%u|;{*I_Qs2Vf7t>uYE<8yV;y10j7WDS2=Ztnl^2wCEJ>cBw&2e>T zVjJ^3lD7bQ8kb$Pw$XOl+Fd5~aPX8FDUshbPsINK5h1n{S!uxr^&5(E54J0tm;Mrc zUUroUV*JYD!Pr_kt4nxwXRr0lh0g(|aGYR8`1SnAix(x7PLBk!=`k9GF0o5Ow+u=5VDaWqamkRyyf zbLt57s~#x7woB)@NTard3|qz2s*c{|deihD1$c*Fjw5HMNeY>K#4z_C-oUKqT{vH2 z;Y;4`RlC%i!}jH^8ry0TUKs`?ZO4M0vOO!EpT@o?*QScnG-O1Pk;AAvk6>%jwLgbT zr`pAL;wxq{FU-vG;E+8lFH^Db%$6^w>5wa277XS?jIZ$H1B!}u>2GV5Qk2uR>|P;q~(OFo$?#y-&LEJr!bu#!~8_p$)R)t7EGadV}(~iQf z=)Mzz(n8l(ra3XRGM)!K5$Q*_rww|Cv8g*QhccR8zkh8BH-fstK1ft?&wP&O+|zIE z?jp4jTuHKG+mmSIq3AxfS}8pCF~@Esk~RY%f>e^zC$~+`=8*qYPWngZ(Rk@xH%%s7}i^r6AY= zWZDA}v#NNr^4+V=_1*Zp4A@?^ydP)i2D;bEgBQ)Vx%wWRl##L!Xi; z%Ve?aGf+I^Ta3Xqr2DPcGNLxsV0alKxxE*}t*FRilGm9h+zgB}w>^iYbXSo}9;Tw# zQH5i8hUE*)gCB68K}*=GY_Dm~j%M|>0do-3tP03vDpqF5P&<>~{Pm@pJNv|0Ev-$$ z2O?Q;0&*~GK{V%z54T?1$s)+@<*J{(gUG9v+Cu79j~sC{Fh4G`Hvs#QTgqu86$aT} z8+k;Cs}j3Kw9J5fpksso0M@PBbWKvh;L_|wVIMOzYBtI0IOr;rF+&;~hMF~z{{VC( zVs;#Ktr+!7v1R^|7_|hH5XJxx{@)(8gy(&Y;}nUegTwJgmT+2^3Zf$Rr#Idl(N{#(<>rb)Pw8<=`MTOZnd2i+LK=043X8F1gOPWS| zO*#gG&>t~D+F7{=*ELgBy8-}hBqIy^zHuA&(TNmAEk4* zemvH$_vw*%T6>6|J=K~$j(z?q(4O-bbj>=F1 zs4^8Gg>UYke*XZCYc)m?VQ&E%ZD1W{Ml2vCPex z6sZWxdmnnWX{+g)RPezy&eCRQV8;Q^rfZk+Kg6JKWR}t^g@7>$blAb{Mmpm?`~I|{ z8kJq5hbcxX?CrF{Z>OlZG44gk4Q3Y$~Kktz^v=f1;=M(_JRo&Q}>f7BsNc1&0^ko zze~{`D@Zl#i^Nhx7F8_(9hmXEJddE{(ouCj5vg)~M`?ND$Fj5*Q3EVEB(ks0J;g<+ z>r-7=JlA@FSCs(EFXta=Na($6d6`255Urc{n|5XkhHGBRS%(?2S(r_=7@_%Vpu2XO`wzcN?7ih}p*FJ;i6)Cycd8mfjfm zM5HTD6C1eX=dcxRE^Krdq`QgYx{;Un-Npy-;P$FIw}{abCR61ypOqVE1ok!A7};4I z(v{uYHX-oEm9s`KwOHp6x!o4>3X(ZEqSnhtySps~gtE*ZYZ-Y6gZPIW*BhvKg6iht zIikG#LMA`e43y*7y>ID}_>OsGy|A~E546UK8?f~1-ol)s;;z{-l9RGWQDZib4w}wn zQet+=2M1{N`c>^OPPFkYzn5`*V)9NvBL@eK%0*^)bHTd3<;~J+cS^BG5|6bAil@v^ z1J$@R>y^9nn%X(uD1gN6oHLGtkD z#g9|&YQ3$xO(L0XnOYVj=6*q{8f?0J_YgyKX>jnw*`DF1!5x8K=bqihY4;kH)Ga34 zgixa>&cA=2p2roRD=POcc@1lRhTC{~9Ofn&z#ql!OL<`|Hl`~JlxZG9%vfYbPkdCq z4!pM0?N5kgoJ}_K9%keN^r$cOIOe-+yN1Mv?z*lQ@*Sv2+wGj*(3V!Q*Kax+?Y+KtDEq?Y1QBr5TRjU*p*dR85dgZ7ByYsgB@ube*| zcCLc+P|~!m9wqTEr4(XGio$?x$pfiAmCsQ_o82~qoxS3gouTSc+ZD60LmKC6#(MM6 z`_$1#G!qM%uObni7t16v5!5jLwUvAEZ${DWW}ik#nj3tqlFD}(&Od+-obWz|xSdDF z+P{ddgfYl%GbZT~NZdi}F3e1}Ni)&LsIpQZ}6b0AG6N zyj|m0xr|yt8CfDy>Jjl9WPgov*C#|-NxHtcx{aTD#~hnXUoH%G#~=q|!^vfTaAMpaEB+)-0?gmL{PI zr3Je=;~BT28KvDva}vp8VI{oKzHSQ;$tR{U-|JSi-vnPBLA6^b6f}S@xf^ZWopFVb-?ZD>+mUf2!5<~$kDh%nJ!;K`qFV;I4od_K(Fe<>dHm_{v^Mbz zm@GMDJ7jDTyU_d8bL)016k(%C=3JL$9eu#4)s~V)j}TlYr=**AMQI56S3IEg2iMlK zEiE+b$>xUOhRv{!MrO%9w)<3)U;U&c(3M1F+9WvHpG^AIG=Z({zi<^ENf-#_9Fyu# z_i5_H*|QWIg2c8?6am0FaHGCzVP@BH`BB6KEyFNu2K54{SzT&mqQPqAvj#NZYgpkFvhJCTY__*szL4rR@1+?rjRwZkR)Ch zDv$^sxUD;A5?lDZ$rKTisUvkB=CtG0>|v5UL&!mK6BRQ=01TZmj`TTOrNYG-^jSaS z`bYvKk$}K1a(!vvX1LPeI$f3$3xwSx?9Kq^gVb|UYJN4BPj9i`+lPV3XtuBiC%$XX zweKBb`sOV;+=4esrcSH<<@EYhQ>RjIVkcG<)~8b1rkQPOvVF4yb75s-NcGK8yZEnZ zqoQfigq9~IRgi+Y>-c^Z#iixPh+{^%iJB=6(GYE(+M~GAuH~3Rd2+82IEiDA1K*nIt#rLVPng_`!tw+GRz~?Y_55oa#2!A#rs*@fP2+%l z1#`DPD0|=ZhrUw71WLyTY4pc$YQVbjOmf^9W4o0=kQJ5=e6|Pm&!udrO|49wct>N? zbUU3o3rX&bo1Rmc+sq}Co`*dE&uXQ4;uNs+V6nK`&ZM)*GH`m4_}3+*=zcGIl-Dk9 zm96du(Qj^~1Yhr9^(XQb*LZW`e9Hd-Wz}_MIdL(#m~x26fWE&Aaq zK05I=?xXfS5*v4g2l_;k#CPMd4b$*7)p&njlTOwnx&}|Q6vE6H6a@9))#!W^rhSf8 ziG)JfkRs>_C#hl78l^0D_BM-ueHvT&j$v6+JgP_sLOTKnTE=cOdLvjSw>oQ|4OwdT z-)ho~r*XRO+WMQUiH%(N-nT51uPb9n4tLAhU&JqCZJT)dN3x{_I1B;76|AjCHX1Md$?b+k%x z3&h)toxuk=_NyvdCJ*M7kw`vcrbo4NIdeOkq>$(k+sv_>NgmeXA0}o|$`CWjso~V# z<`uKJM2(g|E!9^81As@RGAST}U!PG@pMF9K#_vpatX)S~wy=g<>t^#KekSuqbM8F_ z5QL{IA-O0kvtz`1wf(iiypFD}qBW6!fa9U}tc^`2(|*p^w~>6gkdU0X#~jx$u6Wja zsgq8!w~(VYcT6$}^&YhA%bSFc&AVoAAc9dcM426jYV;{#Wfkunlf)@IBWQSq7G$x~ z<2QFVA%g*rlzK7kSw1X-#5c(vn`D`D7UJl5L+$P=Sgfps#`ezSh1eY?L;NIUf_s5l zu&3DWt)Ar(p^?|1z}?vAwt7{*T2APN%~2Vi9r#usWcq}_v#8z~j|cn1-_%!CZQ!`A zB2xtLt{RZXkx(i2*2X7!Tf_*!HSlU}dssT_PefT_b4zc-yAo zkIK4fOOJm)*cSTX7OdsS7GWUPV_wx+Axh{{NJ9mfH; zW43TbSGt{~D$%hE8wTLvi+x2g8a#R7UR*XESAmaOWQE}ihVvhGNCSd93c)05Seo-t zn%GBV=@KzJ+GWmL)MKSOeJfgl5%mjQicc>9`ANrGhCORYfEgajLd5fGvJc&koAXme zuiQ;$Z7dyRUpH!m!3f^|f}MqNvff-;quSmhI>@EFA^{rzY>`Q4HGuz!++U#giLa`-V z0Bt<(&w5*Z56!syL~FVkh%*SrM1Xc4m^DT9h;5@5laT!kcLBaaPgTL@q_fvr5VkOu z7NnA~;BVjGp2DiqL|qTLfN2CJ+#t;n4uCM>I~M#Zg~X!lOqOpOB*&L?ou|}#dQ{q7 z&F-V9eV*>bI?Cl-Kk%US^)=F6XtwDIZ7)uLD&clCg+>U+=~CY)?Q?^?)0;}xov#Mb z5=SVwQ-|Dh@-M4nwG#N1BUfAK_}*lKWn4J*4tv)1-kKqd8Esi*L@O5VR1aUT@~nxx zH)}4Svg(I&IxH}w5&sEAc2za|% z)9!UUi@S7yMgmy7A2M9^BOi2rwbSZ80Py511Q6?=Xqd`8;TXckG5X?@?8&9sOK$f` zBPaTqv4PgHopl)6DAF`!-@M4QjUv-a(@n6uo=L)%g=BNXamIZIy=ugf%OrD6KGkUc zXvpPQ4_^7GENvyZyHBzP!EhBp&&}L^HPLGx7qrssVwX^z;gdUzGWC&2?OYS7?`rou zVFZzhcR9B)U0zy+m6VtfSBD)q{{TH{l3vSbif`>?W1Y%?fI#h8dWVQ()Dmk+A2$wm z#cHx*NaF_pgWrK!GkA{P*5GN<&4}CvcaZKVJr91>yfE{TjO)e>?yaM^@k1s@s4t}j+$EJ|xbZY@G_mVzm~^pj-e z&QWvRj@0&fXI3dHgo#NA69z&$s;a8vW^#-=el@am>8rClPI@CB zN|xhPmN}-8PWSm0eqG=FYTZ5@xYac2(ie!UM#(qHh73D<{{ULh(|k3jeWg<6$uKbH zHQF)gJ?l#DHEAZ)E$pOI92^D4=2h*EnfI(}Vzu{8VL`Qaae7CD=Cinwt(M<>v4wV( zGE@%Z(AKrJhN8b``#iD9Ews3F^2qX&9YOAEUK=Q`VpOx!8bcu^X51HI{{UJ@3<)4u zEtnuXLpyw|-k(awrY3V%G>rs{kXc*ZL}SyUF@nLFkb*aNz^;JlTArJuPj<<1Z)gA$ z?QEo@s3x%3O=BX;kqGagKO~FyQzO%%_O5}vRjJ!Vnnt5!jkK%D67Y<1(2D0$XCopZl5v? z=OMjKbv_&MSBd<0;dp!%cO9JCHi)5w%>WYGo^Vx%CxXN1ewE7jlTxx>S`X~Y&)=DR zu(Cmt$@TBeK36Ae5~kMWb-UA~m1go972EfN1B2{qb4c(czCW^__rn?u=Aky95o@Ci z49KI5la8H7*R^tFTurCQX8qi&Gdz)j$mflqclPOB&%a6jT; zw=g7&Bu5;8MstDd+~ghz#}KhGr+O;vYH^n5op{5;k?6Uzx)%Qcy!(bJK~bJ_o|T>9 z@!@%NxniA#$|)+c!slw>@^EXa@i&RQC*s{eYOvcyZFDY~o=Dep4p@>ffM64x)enfD z5B~t+8ICr%xnTDvbH{BK)s2YGPC9#v?4;)4l=Npb<84t^Z97RCKID~Slw{f>lauU! z4)sAbbD?k4q=4K$<&0aiagXm1dJ3ni-cJp@aYn}xOXgg&51Sar<(}1*d9FRB%ik=~ z#8~5WiJi;pJq2{apL3p7ZLxF39xjJdd9TIVq?V|6O2-OSda1{!Vrs5~uEB3=(#rA5 zTpuR`D5pO$!RmeM8pa#>BKs0t#Wbq!`;mB&S&7L9sI5C4BG<%INd%WmyB|N63W&(y z;0~F`O4`aO%bHEx@9|`e19_i55=MDR1QE!`YEY8MTFspm3Snhl81vAc^i4FD)}Lr4 zOj5QU-BcF*O$&PQ+(t^o*71O;`>sJF=E?4B>T1GNqpO2O43TdzH&w3ax_Z3T|p`hq(O(J)HKBdXdYY~}=F@h0aE6g5=rAHpcUO~+I*I-gUNQ0kPnxlr*6GXak|5KO4D3EV&2M6 z3K)8U=}sqY7papwNFx$kz%E#1`D?*XQgg*sGs)(pj~ENL1{Fd1)2=4Az8SlD7BQ6q zBZg(^+o-CNPiqNih$`#{lNf$+-#)pfj?IxYSKybDID+5}rO5eCdV89)V$;NTL20>z z5+h-f%~V6Yu}djav_x4$ApOzLQflOAV44{ni4KbF@pFJjQAw=>b9+vjXyGbgRb$99 z05+fQn%b~*@}u7SgE21};aGhKpeDIpGHuNBH_VtMuxzU+J!^W)Q7liBJPh7Pn7flD zy$7)RS2Jly%1N|t38oQ<(%*oyIRcgv}MlLW%-vs-8GwMb#HW$ z%O9C6?wb_v!bV42j@5M~FNk4(v^LSaMx3L1pFzbl28khSdntyiaEd&Y#>u%L4mkAd zPL|d(WB${nK(S){&bO)MlnZlp~uc%MI@1)gXvQwQjN_NJGUS{bc5x_dE?fQ zEeK?{lHzalks3y00S4j=FzP`a1~J7C1jsz~h4w6fM>3r4Y;qWXT3<5JO2Sca7?PpB zZhbvzlIhxkid)NDl2uo1krR_AIpBMGQwxobV+GW$s6!l4NesYw+3EDFKW)2?1E|M&2x!L5@88a3k*b*0K zU3dpxP zwURah0v!sTha9U@E@2mvD7cpePV@n>mFa>7T)Hw|+=(si@%y#g8e=89)pHgcO*CRW zjkpWQ#UhB7^j!HfCA5zlNMn_gA9Y86VNp77B6w6gbpY}M4mhc=Ayi2%M686y8QD+p zp5xw}u`R#Zt?sk2A8{GMAdg>KMO=dN+t0LR7ds)0gXOakl5w1R^GLSW7Z)ZHiRF>= zPn<6UAB9)F4{tDzRVFucvCl*4RxM#kq>{~ULOQ@1RgQC$=|#pPN^W9Xt6;?-LKLnr zor`0=KOS$DGsq=KiEz;_5R?3>CxTs0_9j_UBu7}JDlh{P)Oym~&vdb}TDH|cBg9i6 zWB9$ZieNKLYhN@zp=Q!V^5B(x5PN6ZkzrVaI!X_g$8*NSk7|u1gi5hJ;)U}wz`$ev z6*M-(QB+VsNZH(~u^W$aPwS6rb`{8)OL1`&cd{7eG4GBo`%*>ZZeM><)|M+-ZZ4a0 z`B9`H(3Rmva85hsrjq6vrHazS`xv5xfusBCyZd%VTzZPoSwKOH{iS_E+L) zW?x%d8$m3qyLNWVk?YPyP+W%PNZhG1AVdtFYUd5yXSE`QWr$g^-tGIr zAo&3A`qZr}31pHfqG=j16z#}f*#p*_8p|3Y!?n=o%sYA>J2m(WVZ;`6AL-+Rd!&jo^U;C1M{(Xrio)y$!z5M;-zc3rI0{k^A&CONL2wMG2G{{ zs@H6hM+uMvg({v)e6601&rY5Gl}IiPzEE8v4$RwB4tjd}QnDwQ!K77*fDCr>4|7pl zs|F+}jmRMb9Pa$8P1a0Q+*~qwV{u@6{U{5KidI;^d#J_cyA>N#7#ZNxE-uzuzUz#Rv*N{IlSr_?T^iHeW{p(h=)RU)*3e{&L++zYd@_L$x`-l!?HLi^1RIr^_U=74 z@y!Ct;?iKL427l}P)huk>wtYI85%SO5V5f_$fxZ%0GB!HFgP@`#D*a?!judCrZnn3 zAOG*)T1e2VcC_fYj#>T!;>If_+au2(XgGX(AH?b4|`l#xh4A2LP)q@xYaPyYZ~ zriR^Ocw~)=<%ton&m+^*G{@T;8Ho;D?MT$)1a+%6W>k~O5d=~;$j`}N{=G5T2yN03 zBYPn!iG-#H=_ma&Z)59GUCx)+38?*x%9zMhTbAND#{ha7lWotFCZTf~REdha4z8o7 zD3%$dK^NLL#8)c2ISuQdUut(6L}GodC8T!6rI9l!ai5p4rmQ5aO)Io)WF#m&Q^;8^ z8dyY|;e~$C6pVw@AJ(7#g$Od*58NDXGCw)TC+Sq0DIqTI?(ZZyniM5=u`zLsa1J`u ztmH6h!iALr$0Be*1Kau1UZs>4HuG6r3AfDBc^J#HW1&6Q*i%uY|W zT6ZZ)7hq(yQl{CJTsC8DF^rz90pJol(`USNvTJYNsdI&Z9GMSnp2NLG=1UVI&lwKH ztH`H?9)^}EWRgha`#_CDWV!zUmSg-)JC5NS%*_N>5SC*55-r#z&thp=BDX}gHw+xg zz-6$}x$T;Y-uf7>1>79GQvU5vIXr@Dr`nR*A0j4|!Ig-8xe>8EnrVg7E)wc|=obNU z3uBnibM>ZM*`zkVXH}3o$XqtK3&0 zo=K1+oEVFd6DaBHRNROdstmT@^+AayuH9NkZ?fJ<_7x?BMZRI4q*O9N1OYC?@02NE zsycde-ixriV=*+P7C?>*4a#`P9Pnz*g_i62=UZ`^22e=*LZ45iF=JJZF*IxoxdE~U zIO;v>V|gP+ZG451p^p+uMh`tdl~R%#L*fYW$7cj?(gIpy&7Uxn)BTkc%X^oO%NFG_DIE0aQ3(hJSffy&ZF0b2 zezZ2&n-RRk%f>2@^tgusGhdjXaYpBRB)8!N%%{Wly2( z4LK2HQSuVOx(@XUb85o76-i_}G87yTPik}!$g&xC7S8~Vl;n*Sl^t+N`G`MsRfwQc z-eXEio(>bQxT}h7j?InFmk*L)V!6mT=zXeqtP5m7x49~ z)|RJnA}~NvleW7lq~4~Hh03v6GAh9@2wRhmIqqot9DuUJZe_}0*l~gD^sRFO!n>IP zQTOr510Iz2)69F6M}%b=C#v`BU7pSj8hbM?I|1b^vOy>)`NF;d_o))u90^zFkIce3 zToB&owO37PX3RO0Y7e*$2dzetJY~?pk(?hb+ZZf;yHlppm61xC8kUV5g`iWk;~_?S zb5O_#AnAeuN=%G)7VJC_{^sitc+(o8bLnc|V;+=B&>{{RUc`R`AV+e#u>^SVMq zggr6dmhQ+{tee+!J_4Nm;CVEz!sQ5UuPww{v@aTjB<+-BC_ORnPD3)M&iRnBXWV-K z0EJ6((m?@H6Df%aiC>)iVy}2|!ruAenr*&hh`iciaI_z{c3A@1XkurUNQ$p92GwGoc9-#$Y8UHVwIbfm#;qFwIXS^ z7jj2$a{gOn2RX*y{=G*t+*eJPV$>~TiKSmKMHwZ-xg?X^e}yD^n3hP;+meOy(yvvg zHMP_-l%5Tx2noQ!{{R|{Uag#grH=#5%N@KAaaGR7YfRGH#*-2iT;!A7dVP9QTk6kg zD-=~|q#Jy>M*#ZOSDw=GQe8hJ6S%-1I5_K{=~Qm-mcnLBvm-0*3RQE4_w=jwwg)43 zI&YY>#_f%{n{mM1=sl{f5drEwDjiblB$v!>v6fsSmiFjtI5o&{{%HN- z+a$=GL270U|NyhG(|)#@@`fp zGOf|QKD9lznSCvsvZQSrD&V#`UeyB5=@-~UPZKcnL0~w~dX=vXo@N=?l~I9^J{xo0lr3K^LmFBPCzDdrqOzLJ5=C9R+A+34k8jGM)oJKbvqn@0QPs)w3IZPyjCJ+=D!=v$TVJ&I z@kq>!8JJ6eqp+*(XLWmcHcpXlj35ZVck-=GE?Y}?c&{|~V(aCSafBVo&r|PN&Y}da zX4q)Z$9BwQW)FgqD_~^$`qr{(kXqS^=Se)m;Rh>Rt%{9FF?Br~8E!Ew85r&9+oeenou)DegUnnQVB4GzQ}0)lFq6)?h@5~QX~!PF zN>i;Rq8ur%rFPR=NZFOp7mwtThIa~^N|glPVwMGI6yTmaGh$WO&Oc2h7`mNB2ml z3%1#`T|^Q`-5;0Sk9w_TGQP!mgRxwBoiXf1YH7=+*~w`g!bDdjt1tJDUMn{4%_3Dv zA{MNx2>{4jX&mI9YPHTmbWfNOhjKHIYT2I7*u1S3>`0+^D!xYio^f2>ul|cEGnXPS zpXBKNf}xH~j`G^(G4_w#wg?Ccec!Lvt2zDSfhvH6ZzVqNX<~%8nIZEDxQt-VwzKzeX`^`x$hv?h%uo?o-9%HjClnHZ;_ka=qzxsdMLka<&% zwH@3Swq=Ae!fHR7{)_^ob~mkxE5veMptnUkD0dr07^|Vb8V?6 zr7R)LXXjqW-`b^_FYTgh%P=HN6%qlToBOp4Ho;*JD;6kD_|)^B{89^|#oS6`H!+My zE0Q?j1y*>OZe(jINR!K4mTZiA8oyzCDYktvnidY5qXcn}tz~K#{{UdTXkJM7f;k;O z{Zw5A(W9qoaq04IwOGufscuvb{Cdy4NO8kSLQT_(8{@)>qk={94LPI2D z80V<^(o3kkL0a})pukw%VB`AIyB9LC4b{Y|-hY;SvVKw*q4%odRfNX)1w70)7onuo z<1)&E((XoqPUb>BVaGp(K{V3ow+Sq4=VrDD~k<=w=R$!TP6Jin8A z0l?4QZ>39jq)l$E71pZ?qb})jo$-U%d)8&wi=ed+X`{rVGoLx)Jdl5_Qq`~SZzfob zj{=xfw4mfjzQ?X=t#db0D`L&mwz_rMXPlR4z;t&cupKHWd{;H0bcH5)4jX701MsX^ zZQ)5omsb+HzY=a@NEEhrLrezrx!vXjgl9Mcs>Uv)nG%a^z$DK9s?t zv>U$PaLS!ow-KK~#aq8!PU<5xT5&}YhLzL|4Ep1}Qj*H{WlNdo+JN*2uecN|klwnN zBfPY-K&Vjf`FG5CMfLj9MXg`zGRJ47n874~nETzTou}9$a<}pXMZtELklggGJ8gOa zAV@qkQbzoDxCL_*C63%jIuk?vr6_EHXXxGJxs=6c_=s z*0pTRw(>@;Zxq`}B_1#sk3(6p+w0JgZ+zkj~zuE#vZxI<>1CAHp+}2Zgg5OEI`_Wu%T$PY> zli25=s+ayY@dmEq7;Q=c$y82NeZ6Zp88X!1j-?=i&fSF4s+Krx^&{8mSh}x?Ep4O; z75d15_e{X!k4)8TO+Q(9OKVcJkz;g!Hqw2LD#!LT02uzqx$(HHm^o8WxmM*jDJ=|v zs@!T<1`Al+4>NPI`^9}TTUs`Z>2Weia;U}aA|Po;0# z+1pxy1PEE5g4z3~l%%=}5pQvtXNT;yVu|G}ZlHqF4qu)D^{F7yWs3Rj#F<9Y&q=O-h$r7?Y}V7t1F23+k5a9574inNgqMVK|au{4mRM1#OC zGI5@S{{UKrUg|qpF0S(mv*AMyhp?tgdu^w*&SQCFg+nxodV5q}A@LMCu9X#?v_5La z*~rFs9^XMtC(ur6+OU>gK1n>Qn`xDTor)yEX8b!;H!@sYTX{D7H>b=o{Hs3V>Stvz zmyS?!ByNEB#a6tO+}r)0#yz{31(m_b{_!65qK>8xWV3l!H&HxH(JvxianIq}iDodT z$oXJ%kAG@{8C}($XtwP*P&MV~Q`PJ(5oTX5$M;@(ZX*!KCv5j7n`Poi=09MW zk9>)RS4PCe&`*QMponbMm8bwQk=*TaB|eog)=|mi`v{idIW-O}C+CwJ9zx z0$Ri;0ON2t9^_PwWvQYKL8XmBAS^|@RQhI$khrt9fU_g{lQSG(e{_0%Dr-n|<2=iK zVI!E+Fh>-aT$B7>)tiz}Lq!*2g{GfrBFMK>ypo3{aHj-%6X+_`7Lu&03P#Et22ws! zJvpgb!^oLtisihp!OStY-s{0Wl;vwHq*FSuNao!hrM9+~+sY;r6w)~|K5|F*dH$8rX~y;|#k8@tjz^mU;pIVy$6BGQ>NXL5qwH=( zsz?K_&wNzg=z0|=j%S%qnjj#2&J!3N$OFA)+}PMheIlw2vbIR{r3oS>I2$1#;Y^VhDf_f=er#4=sSCY{XXB_(8M zM|Z17aV`RsIQdAy`c<};ZA#e9az~qus~&NTbj?i`n&N%#rMVly?~b(Dv?)?HFfQhi zfp0O0+B*LLky^Hyk1T*`4{K`;)wn~3CRmVUkAF(1J4+qGHs~S*^BeMi55~20=q|3A zt*rwUM#PRs-aWwftqZRUCG138{{XBCHb|eL2A48hm+aeG7!gA3OGy?^eq?@fz4)d- zhoX5J?j=a^$sIH8U1hI?WYjFhtlN_0sZTLDJ9`oDRPMCnr8`^Q$f)Q(>twJ|{6{_N zeWH60*>@;fLpGj?J6Q!Tr5}2X5!3@$EiG)~mOH5}@W|ViC2y5m)~TIl7tC)uynesk zs+YbY`y-oVi_BrpQ;<~A%P9hIfzro4yB&fRjwYKdM;xBKj+EQIPfYOi(kGB5j~^!T zGw;v!t}0D(>REw?1GzEtvBEdEy+eC-dw7OBxL;}IhxDcFwbV|!wus+PAKO{T>GokJ z)0R9OdVUoR_lxJ$n-Vwxu2nOPRt>GUmoc^pgR~rHClvczD~Rrllf&i~IKqr%de!?l z8GBlcv2@IL%qC}YxB^0O2em<`T`!up(!xm29KsfD+tlkEaR!L$)q_G)piamYvSt_yWZ7MRhh7F*)go6}_ z%0BoCaDA&@&ihoowR>6Zf*s#3PeuOlr!JfJ0J2=jrcL`m1La^k;RE&kdR$;;a01DRAd_Q-mxLei<8?a<%UIP6) z)u`+xyt;fP#;{sOR-Ni}3|7)BQ^Bd85PL~fC&EpXjLL5sFK=8XkiO*pEurIA5NcI zvmKPOI4GbuXu<1OEc`F26^%7Jl|^xl=0BeujXP9Z4JzN~ofxp%m^eF!f5*~}Wb_1z zGuqzGZzOkGN%B-=J0RTW&>w1>PK9k?Z?+O7+004zm!3ZwhD~VM&ah8-jUEH-Cj=hi zvhO@X^W3$ajpR|FT#{EMN%yKzV&;l8HU9t+%V}(6Eb3e3UOsL;aaob;t#iJ4W_Z*L z&l~bwdIQ>dCocK+Or0(k^+dE&Tud=4k@2wKv<=Wo3of^XTS~Lk4j7XOM`9$-b65S z9>LMOinNj;$&H@nZa2v-*@+h&7=nKhQ$cfc2GxZKRL{;i{{Vp>TBNq&XO9D`jEDXq zj+Hbh9i)w6nka!$8g3*j7IE_X`&2gf zAiKjZ3rE&C_}l(9Z7otuu(QO6VkuyK53NJcwW=0zCdl6EWb()QuP@~+M{0)LT|{M+ zshF?Ljkzj4>hnQwrx!ccOvXw{CsiJUJx}=7Jboi<9YH37ZGi?vOgiV*rYXx{Z7t0J z_OrqkX%wp=ZNa!8jtC;PEK^aE<{d)bXgsS}^6{eKj~K}n%1z=VoA>U!7oETX$*m1C zeOB}(#kIQ!G2&EJ`{+7;6r~21ql}SnQoccJCB@uwM29N!nJ_b+Hv86G-Ygc?(aP!{T*1j-z_sNW(R{NOBwNRfe-6kjtWftc-#% zfs}gj?@aTxYpakVh15)bY!0Ws2Wo9;WuTK+yE<6(i#vG{EU$=Axboy;c|X>*wBHI@ z!6er=w~?_33i)9Cwa?gS{vxu7Nqr9VVTJP-7;4?Nvb%;9XVjw04sHJci`}v4E0$hP z=IM=lm(yR={EW<}ha4tM)j zSdx9$H%56uI0Yj(R0I3orlmsVDVE<&7Iwnj=2wZ=K2CVu{p|bq6v*UD*UV6a2-{r0 zAa*8$YY~bOdnt6z@D<2r80l5NwlwW5i0t=a%PtQkG3!kx_7iJzUPq{aTK4tE_~@( z0cRi5vOl!m`dKEql1X-`QUSmpg#zj2Mg89^)RTajamIbBR%s$Z8I&^lV1h|3 zSKl>CoKw0X&Br`P`gtx*2}Zt6vh zPc}$g24kK*DqR~#lHiMT14xX7I|jzj_J^<1l5HNxNdU<*lBXXr=brrasrMADRi@Ei zAvA^xEsB((zf)^ z2}5TS+%B9sj0JGtDL$Ol-7873vqhKeie`BjCA@$T$J7eubtuK`bjFoeyEz!6)b93+ zyLXY@%CznGNF#+f>FjGu!@dgB?qvynr^#>i$`8zdbBy|$>Bf&~ad4vQLrMiR$3ZHf==viv8L#nL}qIZ75R(zak`F>&C)TYB!SB_uVfpC`E-&t<5JPOFMQB?B zS2)T1YUCFdmT)|d3%d+#D}X!T*DnsMtKQoAlG}%o4ilcErcGOlU21E<9rJG(0^L$P zK1k#q&CYQ{rzf~6rLh*FuO^)dw$tKdo_9Ika=GoAjl5m0-AZn>w8lV+RdmMEzum`9 zd)2S_MdH1Od-h|hLETGBC#(#CRZlIz4; zyO>i^ff7K(#OMc@s(-!fif){Xdv!3@E@2If+sph7>Nfo=FbN()ks!+S4&Q&!ZtN;( zt^C3-e&7DA5+eiVTy+N>Yi>mpXUy9#%=%@p*=cZ9fyra{NdEvmsbz%Q+b!OmZtSK) zTsv^XzC8t2w6N3G6?c+PC<61y*(48YpI6s$X&t<9JK2`o)9&%qpL&a3j_EB-%lZ7d z&C?cO!ya>Uv}32?RZg!Z#>vbjmm5&8-N5cgtw*R&G?xrV&V+ywF`vX!Vq17T%Vo+m zV|zq5 zW)wo(m^aHO82A4G3YPNy8g!oSJjak@hBn)g>qAcBx(laicP!23DZ+e%ufA%&>zHR~ zV;eUCxw{qgs{zN_cLHOLzVIWU^%V+41i$Fuv`jZM$<$L?ZceO@d)Z@R(Jz$|11frt ztvcIWv1@_-p>PiwNmGtJG5n2Ky72AY&XXjC%5KgXlQ{f6Dx&yaTYHslML=a3E(R3w z(;l>QL9M~5r?F(}GbD?C?S-ge8s~czB(LXNajuhL7BvZ3 zWI!B&+;&oFmtHe>A}uN{3& z?OQkA6NgEaW1i|3W{4?-=dL=}4Hv|(5?e-#G{ehR#@)Yld*{}yH^hsJ$2PHAJDwZu z2Luu9E1p!VN?V%3r6jgJ6efwHIlQ=@66%1TmkRuS)9F>Oz9rjOS?{ycHzvZqX3%l{ zYlydPW5mUy*z0b<1_b=Uy~T7oM~5Z0Q}&o08vvs+7!grzTq7+xgt zUyFP|i)_*EwnpC!aHiHd9nX4pnc!_w{Tc6Mb(mzV4CJokj=1Sv)EYjQ70|tVKxJ?P zAm9;>-koXJdeR6C-)BpBp~^A9;~n$sN#Zo+f+HGOtmWXsC-mvfW=ChORbIT+~;WHGwju;+=YcAhQhVo{gQ`9Fa ztBEBN5ww3(Sg1}~$(vn8S}41!{79DFhM8+_Rum%`k0i1F9Ez)ZscPEEWpyL zsq#;EFUfNnhHijxaq4}k&U2I8BNT^RHHD~(-U!4(KadbQoOk!F2!c&wL{e=hm%-#8 z=~$A-G_3Q%aAgr7GD?Gk>^=KbO>rqh6qCsk$eF`%KA&1#oWadzS=78!C9F}|{gs_w zY&)X@ao8Gy0ew7gcY1<2_YtuD>t&dkfF9 zM1}mZkbKU_lNn@| z5L#V;gS&Sg!mnFtt#K~-7kN>;Z%mIsYFISgR7ehoW@Kys05 z8UFXF{HiSz!m~%HwD(XlGd~et9N|goe+tU+OIB-VeG!{~;tvyRE_Ar8C!7$1xNny}+*XdMX{D8Rw22Ey zpTWQb-m!S62WX=Htfal>a^3;>E27&hlWP}oNX9|b^S9Es^*uwuz7}B~pQbFuUuN|j z2J|ALYdCGKzRMHL36pzHNgy7;RZE=))@7RJ@k^79zdi@$-nrdL)Son&vZn|}(L@&7 zwzcAYLE7M-Eo$91e*Nh(b@l^Q^! zG2n8?+lo&U{A2L`g%aA^MAFM5mRRE(l}PU2)~Ujzq?AyU;S}7NZcQ4_Ye=;_#8!$v z5VHN}9jZ&ujJBQ@2HwgU9rl2dTc{zQj4nG5@UJ_$@xO|^T`X4R;%Np%1s7yd6Zf1i zb|7QFwRD~c_+4e9Z`O6&(=FNp=#jBIbM@==ttUnl<9e^;L~71b{n;L~r#(UzqktUu+Hq`KBL#@Yr2lqBrz?5kV5BZUU}>F zsjcIV)W>HqWk!5*IybMib4wPZ2N)|I5yQDlnr`K&ygLKLt#x|}$m{cOQn~gR?^N$B zp|OO^3=9DUSOb&zdezG--6-5i=SjTata0z;AMaCM;yH^VNrFD>70(sN%`2UWBvxBS z5^lV-HtcY|V}O24a84>mi~BjJF+6Ig3<576{C3S-T`KlyWtKZ)cQ4LY_>W;jXt&pL z!(z61XF8OHKgH}oa&yEUDTp=h?=aA72I zAC*os$*BBGs_9l1>l_Jys!+)rVI>*p-rQFod*kg3!P5T#WLjKJb8)n7ZNTzRa(fTy zTui!#z2cDYw){&gnB%r$6q0#jJu6ChX-(c*Af6^MR*tOgwSOPlTQeJeQKR95cl7oZ zfq(I8^7&%Z?csT2EJjq|t9ldZS=QbQ)PpI$oJyo%tFPT$bjS6sk4w;O^!qehOLZ=w z?MF~>amcQ<3_Ue{&TH1F`xJaV;qMiA!toOA8U!N~$sybd`f=W`-uxA}vvj|^hC(yt z#T;%&mOcKp)%bQftnFih(k3#3e89cI{(`OEO)b2Fd&VA8aWm&970&S!=J!sB(1$O) zU|9H9?28xJEyw|tCEPMXs6+&z!2Vc%X&tLZYWwD&5_^4qhYo=%+c{LiIJg-Jhnu6l4*iPr1>D)5$xAhw!I zcwvt+Fb53m-AMGVYX1P@4BC~{8W)Fj_1xr*(Xjjv_043(@Y3!{Us2Y4@wI<>6#V7A z25Vo!o*IKlxcfwQN)h7)q?3bz*=eX#gl~JZK6;aO*%x%JHtfmvjX@3MvaZyMFO?#0 z=N`4GWhjPEBKFL`@Vsh&)%%}HMmG{f%?x8{A1=}NPobwz1%zKC#d9>9K$)X#D*9%y zZszG(SY(#)%_PxB1Cqc6k2yPib62i($n7*8vFXzhB#gUP7z>Vb{xsb-Yh60ZNgm{R z%=jgTPp9}(uDnO~xEjrFKx5Pak@$~K=Tomi-5B;dWEXmo8kt#QSi+~7(;vyP#az_l z(u)Y~?a6r0?|xtlr(g$frDa^{+ODB+JgHR4D;AGvAQC-2D$bFjYWMzcny(^)51gZE z&rA&V;;pu|xi&@LwLxuU*7{1x8uBLG-!h->=CQ6XHCz7xGS5ebLc2(1+w!CLC+S+Z zzD=~gLqjW0oH=eXK9yPZfcB(mqz^f^vV+b6>Nw|`sJ%8NqK(F%eRFCP#Me5im|ZKs4Z@3cuByhT=cfQoiIl#aC9o3*={F6^#1v}B~{5P*bn$US-dDPz>` zG`neI)2|X%BR@2MDlzMTdRF$6Mo*P9df!6Qw4oNIs7&awC}lao&1UO=8ayqdIWStw zGP8Wk2i+sRa{7cmHSrX}6uV}Jl3FGpXB^`{%DKC*4%z6J0u4gpjDL7B&RCvE=C-GW zr!S4%%5~)rg&V#g_<`d802}I!W2TYhN(a~m+%R89BfTj2dp(VWI;OiUVs&!O6e@83 zg!*yTvb2laogOsRhMyx^qv4p~W7vA}RxNMu{7*Vt3%4bmhJ4e?6Tl>N$E|d@IB5+L zikCCIwPws3ZMshsTD9UJcH0zcn{l3*9V?pG{9Z{Kew}9KD`#Y4k#i$=IUNOGwD5kl zs9iOc?c2=Jp&~NJbgSu}*d6Psu+n@Z;awLta7}S|QxQQb@4)U`j1R3(JZbLkS0tvi zRy^}f(fm<-fWxIrZ4twVnNHRR{PnH3_+sz&hK~3MW42i#Nf5W%+@G08KPUq{`r^9y zE^fR-C9RgCflACA6u?|#8%{b8YPsS?lvs-k2`%v(7Tn_*Z$XaU)ts?Y=CVb{4I655 zJ|6HboN>U0)mGtIr3$Z<3Ft@h8tSymdw5^$a!dQ*H*8hoY5rB7@dmh8dv;l70bIt| zMB}Lb?OL@|yJ&1|qnXP|<;dakcH^(ov8gFk+}03`HaBd%LnW+>rcPE!Ir1Ij0F3_t z4;@JCYPH?9uwv6qvLXrE%Z_Ub=Uue4x1Pwd{^;&WCX=e?ou|83GkxQEPNNc8Sx+*# z8yZK-{c%~-!^yo6PNjz2DkmSe+ZuSJhYE=aGn_Bjl}o-Yh_MJne!os#P%<& zM2nQNLAj@3LPOW7?%&F zWc6;G{{V$whfOmTx8D-W5}csnut!npRP6R8a~qd&_)5!8OFK>9+IzPcI9dtPj3TM`?AV>Fn_)rjP>QTO`a+ zntJk2N`*}_x!JRIe{A<`)~d2a78`oE%DEl=>J49Ao?kK>Wj4~w7!h15f>+$uUG2jZ z6WB!TFhhXD8@(I-pL(sQS!(wn%|4ws*$NVu8?phHKAqxFF9CfCWhNuJZ7xCOIWV{YlEXPZzPL53;;nB@wYyc0X-HGPMBkG)950~9r9zt9-&-ZTT5PK5 z42Y-zat~%cm8>N+uFPc^w`66ekFQ?K_G_q2OCttZLi3)v_N|R4LAFWO>+Fn5{q-^& zdS@S6)rU>Lxg*Qd!Emb0GrtU{sN%Hav!2Ft4Xkmq1sxZTm7MFnk)$ZC*=J3&@Xn8F ze#|4gic}5eB%72u8OS}pl;d}0DuuU$0dR90a8G*7WxA975+;s091|icVmzOI#-vRe z#>t3^=1JY7!vt~_Pf{^l)@_|!$txO#qed*CWD&U-bBuMVVY9Un8*}rvGQ)AogXn#0 zKTEp%bYbnA%yuPQbz%YZ^c8FED;p$ezFdxW#*W$C-oHv6&?_^d(Z-cwr3-6_SzI{? z%6?LR+C6H8&bcU;?2yH{9FjJVm)|v)CEUp*sU(C#W5lklf;~w3RY|VZEX}oq``E{X z+;h9rG$h{Rb4h4k7wGZsj&I!-JP>i7{8M0p2fP<@OpIc~BBp;Ds+S2R$`3qAC<-59 zZBW?f3)p>X!s)k{F^9O7<7Ah5`9qdpL+wqZkvDA9)K^J+NTz8cRSojQ4%7~PduFKW zGs%uz1p zec9YQ1MTffD(t5%3-Pu2l`SEk%S`0VMpc0ycaEQ0){Z+^G?go8h$C`yBjt(iLG-R( z&%`(K#~`(eJS1cIcn3bct20y8^?TbVm8_pE`&`EO*uJ>#eT6qgwokRPH|Oysjij!{ z&~yzHJ=_r^sUt-Uoai1Ai>@3j@4(&w`^MKE~Yc`uu-&w?N#)N z?6j75)^AqkXF_e7B;by?+g2M;H>n-cD+9AEn?Tw1tlYIXOG_ezS_)05M*4lDpCFK9 zX53^R+4SPA{e>;VT*)U0`Q?s5>C@7z+TF>emDCp1C&O_2uoK%I>oZu@bq#9quC49N zIBmnt7zf(}wJvM0wT%mNrpX%IM4xE+_sWvD%5ZoePik^&w%T3fmzsrw%ItSYK2;lg z1>*n@nqVB$k>uJ;zb^(+uown@9nIMT*Ge^qBq?s zm~KG7PUO@}8B#-z8k|J%!%w8fws#j1%<_EUkq62;jE_puxV)0i&8`&{pLXWC>M`gA zXIjr^Z>Oi(?V3mP7>7p2)F*%kwOgL<$4mfSTD+h(OhDslBdC)qrQKFM6B% zXHdMcbW#-&j$~EA0Q4ictX~M}HjH0}iV>sEE23+pCBaV!BMRt+W0X}ksXy^hY$OS(3OSyggg zOzqpxuWHPjR=ScoT@lJ8W5{rM&vWz@(O+u~f2e(`C`^u2?~Ne^Nbiy9Sobz99Kz`l zKzG30I336X)|7nBQ*9a7mv3sTBV8+_V1O6yoOeCz4^p|hzL34-%eMu7RoXFK71om; zsIfWh!t~`{Js{Zjd-e3h}m1!n_~E*JTQn;JnUyu$-BNai!hfX^xiG-eR&H zj~fByd!KKmYNnGl#jHlyCiFq`0!S=7{c8MI7B)8m={$rn+U_yQ$!}~^rZGsVJ)^3x zmLz6=m^}deY1G8Gq6kn+RxsJy!rN63&CHv-k~(9iD#Rk=b1wM;A9MS81x3Q=5jRUQAM~fA`H?tLVy4V zwmoT)>NX#00xu89Wn;K9NH(eLYc6}M%efXv_6Spxv~}!3sr0LzDmDb(NKssqyTAVc zTAv_$L!-64w3gg~3hzv_up^V{ippx?j(Dlzt_$!)q>ft2M+y`z`N9;1pb zqDUA^HL>4u9@w_9T#?Ts-?a(djp$3J`L~xQBH*A+?16sfJMm0bkz#on!Fdn*um%-# z{Og{yyGfz)pthbV8e`@WCLgbCe=6A1b;x3y?aK&OjzIy2QNYLXAFW?3h;qJ#NZLqD z&wFo$o?JSH{sGe;;aV1!Hn%a%`bsQ$Ih$*4AbR80s`!Z}vJEVetEfAb#CYc!#Yd&x z%`Ra;o?}P5UOw@K#nq36 zygMcJ=v3YjL2$i_{zvjYm7{9XsYcXg*v%mFllpPqw){CRtEcPs`i_^b9VmxZH<30s zFg-sUR633eLAdj3bJF-bTCuPfULv-8Y2|IdW120m30}D!vsv+KEo!mJc_KfM{7eu7 z*N@7*E8>TW^o?deGQn0`g27%P-_(MC8sKeow6(trYERkOvKn8U`Mt-m6;P`wM^brR ziS)?sp)*~}D3m;*?e?!DJ#&uUmCFZV=>@~bswlJ@ltij#JM40F?+ZBwa*|LJMYf`hbyO<59_Qe$N#0+ZmKgGJzMEGMlr|`f*WccY1e+?H<`;7dFlg zOSjJ(laf^SAI_@Wc!I*xIVQHAIJ~6uH%fE7=bRjIQz~+k(G5;9S8VES^<6VbYiMt+ z1-y*Ki=&OseMhBnejxabd8kP|jdG44ki=1>CBV-F6I}ke;^mTY2bTV2%7TR-B1QHi zrD4y19;Y<-TDZwY45ksca9+n9hp&3+ql1ifmghBGQ)F3g zG50+6uFgY~ne`>rwJkY{!*pU0M<4E*PNx~*(hg=wHs^2E#m{K)DJIZZ+#7`ZZz zm!g|p*IKp6xryQj$y7VB-y^xLojXa=XOU;Kks38@y1(6V>5Oq!;PCy(j&!q@HhBR3 z@nezx$of@n7Aa!7SnpfPn95aVBLRo7^{#hP>vMS1aeA8zr(5}q?F0F2N0O*GZ1v!D z6(`#k!rpBr-I5iJx$7-%UV!`8XQx}mByw2l)5y()#g zw?-J}dwBepk(MpVz{hjx^{dfYf5g(_-g}mm#EQgVoM)iTI@;SxluVk0?4=Xrh#nb< z<37}e?6xxmS2hGqb$sZ^$*1nO_yl?Q+;-`o0Ve#gjq-lDF zi3-Oau#yPwH3jDjE(gtlw1Q6ucLKbh;vTEvD?bpuzKdw$9(RUp?qGiSu8I|^CCh6Z zwIHPKW$J$qbx#0aE{oy?c;zvHZmPkf869#sU`Kjq_RgU;forGU>po?Ul_UL!PPrwF z9FWX|)a2my3_!pnR)xok{7tRtUS_jz<}9uwib9;CjsoY`70YTib`k1Q-`U+dyi68! zagizhmC%%`Zb!n6eOtvdPY}M*Vj5b)#~GNPIZir&KyH7}TE*4;P`4KWe8;%BFz$6x zgjes=pr+khtWf>4QMN)!A{Q@!t=t9g$K_QtEiYHs;kkPVSz)pvox+b^$GvKxw=tbb zY+ms7t^M7YFwWV5yxX@j5*N`uNF8boLgEXF1h-J!86;BBNUU)n2cci(S&ykC7jGq% z>pHpFDL_W`9Y^QhrnT|rso@zR)jTsOOW0A3VI%8y;Znc6{-v!QlFupIyA3Jx*N*OV_S0EoBH57;f6+e8o>u?mdUSO<}J1CgZ{L zYC5Id>EcOF1@G$6z@)9Qsxct#Kxsb1jOLn8p@p@9f`lxNr{m@z<{);Ev#8 zr7N+y*;?Z@-8CbZ$X!IFsKXGuG4rrK>GU7{YUVYFbt9=QwD5hR24S+=F}0y$Imtb% za{I+vzlpU7r?}AI`Ps z@jghR0z#T_5cv(Orj_Ix0ZbD*DEw+aq!n$9xX#!iFQEo-G zqF@Lvlt@U=E5QE%^;UGl$ZtPU3Q>+A3&6+!0IITe9J&|Ek!s+(H0D+4geo2^~b$K3#2yU;R8D|7Nr`yMjXoMa;ct!{i>|8m`O=IxI;N{9?nY>$z$qz({A-4Zx}as zw#He9mz|g+z6kC0sIOo)(2HF}0Rs^2hUP`@k58p=B#ja$AV)6@%e}{%&zw5rfr@3@ zokA&IL?T@N@w3YIA4-9Z#IredK2}#T7R#0O2Ad_zTuAaQxR0c13mmr{%}Z7thF{wv zG-~9eg?NdW^O5OTnyX17NR!*;N^A!>{2TmhQfFJnc_T-5YzSnHzVi+?RyLz$c9$Px zlF~+ujoB}TL)6nia{AOUN#+kVni8NN-jY;~+4ZhJUY-bMd#jaM6KEb-JfF|Cc3vTP zq_%18Y|BF_F$G5G)q{lvq|DE!xLpB9M{iIecZuJ*te6 zMBA1PMJ=RRLnvlqN&e{`^?Lrw-g%N1lPs*IBnKN#Jv-GqnGL~`@)+thfi*4>jw01EHER7DtI1)9<&(b zj!|xwlf2mosLj-#=RF6lMT$foTrHCcRzo)mgRhm{FUzq_=xd4JNO%^C|3v(*kPaq1d@|R2u5!6*@(%KgL zT=$ml%GeRdyX8#q**#51EzHWhe3p?T`GF$?clUEnvbchFX(WbGGN3YUZM;pYIItJN{H4xn4U7-X~!jDy!}i6&Y`*(x9G2c|n%%WKw@{V{SOl z9eJxSF4lYKC2ZgzF`Tcz6qeD5tghg*y0tF<05mc<&+jwH$6!TL0<%bC4z~9zE>MAw zo0H$3hN6ZTwxN`lKuJ^_9QQv@dbu)9h%Rm=hBQVpN*ORD!27>U(;7gMMyK|*h6IH&3&O1*B202mzB|wa6ERztxsBs_f`0B58vt&-F~t@a zHi)ZrAVyixr zM@-Vl@<%C#XmEN2JxS)7Dm2UzFn1(-l(FSbIX_wxcN#-xXk>SaJ9!ayC~(iv{ePt^ z&MtEkF9CMBQULVDG8>3qNM?<`@%`GrMs3UnaLXf3y?6>X`DfL?#;u~*`LYZ6qzV9SsV8IHdYY#`*zISY7=jmzB^Z6| z9trdm@2Jw~7Y1dtmf|?bB0NUJgkTSUS`}lK>NUNDx`kHC@T@<=tT~Bnys7S8jIrm; zD}dyVR4-xaRcC9Hcnhf8GR>uU4REuV14#=^@ z?g=c!?ay)tsixR1yo%P!@4?>@X8iWmsf;qgBC4;O2;CHCt7oa=n$%@Eu5II0nq~zg z8vsMJtB&W|ogA{pL^je1Hp#jo6P?}arOZioSSZ-!?h5CUX;x=>FsvI20)Q|<9ckSR zxh2iCZ=1M|=a7<-jkzAQ(!~n2*9zdb2sm`dsqam#zp_NPWZ%`(Mt3!?xSlK%iB6H%?h$lx1! z08^Lq7<}KA3FUca8(8FZcOjYEAbuyHs!R!%c9o=r+oHVgRbyZ>0PoWjSv+vb_O!?* zO!;N<2~&*wQzD7v0iB!6jquTd^JB3MNE%q-JL2-unE89Lgg&S1RG1UZBE95ntFbO5 z#HvpRk6%i!<;^3pmkM0%UZZdagH~+hS$E788vtYj+thkfRwbSnkrpu+Q}>T6&r$hP zxD~fvNdfaB+qw8nqa)uv{*>isNn}vMM_9uaRl@V_Qf?6KamfQXWA{x%D$HPXEuKt` zv2aKS?wod~%pFPAMp+9PVMDNPLNk-tdm3APUR^#mZz3|_Wv~H!_8F?uO*Qwaf)fn)Lv zXY=VzOUqcMQ*|TxdEDx!kxctcCwGqjGYJz!ImuHJJ^< z3Cz==Klc8Am1ta)J#l3>}JL|jGW~E07{Nahyt># zPB#F^&fOch$E9h^kPm6o2^Q%gUo(T8VEWa0F5k+WmB9n<=kI&_denE<#z{=~2QI*J zqo^L07?l(&Njzno;3(`W9LRDWld+AYA=$R#GrNU9N{~r&a~sKY!9u8Axa(Ejqmp-$ z-SV!uWe1Q)^r_}z@db~92Vd(#mBC4}wZq5urCGsf++e8f?@J^}XBdiBEa2r^cNcF|84mWRV?4;<+u&So;IV zh_-g)5I%C$7NTmyuZQ_WaW*C(io)S#sb*HeU-2}^ z#mJB>kmW-Han*;YsUaydNplMq^3*hWKYZs0@D!Csm=na2MKSv|#L%pKf(}+df2~I? z%3C3M4lvmTzlY!JPFYHgk0e1$?%;GMtv)y-m1awV%_A@FQ~`m{e_H5sDpc znjM~PxC%fi`>~bdB$`siD~BU8Ewof!%N&gvBOu`JIXS^Kc6}o0?WBx5;D8jrRX&8( zn>6#Tnn=hD$^wt?V}V){%XId_2X*pL=1s|shtQh3Ra~_nB1b)Kr$udUT0~_LwjX)t zHK(N6S-UW6&m(|PIXKN#ze{Va!fS-&tlThh;$u4mJ0J>Zf zu6brWaaJb24R|gRUAf_q@(A=k^*+}6lXT4pn$B{!Ap;|gt06qbef{c@Fxf;>bPU^$ z6rTD1bjvWR1KFXO9f)YRWP|DNP|qus61*;fT>aVx8m$Gb=AJ~`3r1z!R!%_&sHmFaNg+ppqY;Ul2dN{!)YIo|mm<`6 zc9zmaziIMz47!d-)9X^++&s?BEV&X8%p)8E2O0FLw#g;UyZx1h?c_4D=Zw@+THGRT z%WaX0u6yJ9Qs-jb4ss@TlsRqVX?)>S{{T}^&X+sZ5~IuuxF$YUTz9Q8r8`Ch(KZ6^ zK&{4c-`cb0nPYO&$e<6r;C1#CtiwWZcgOR)A2D{Y01PfV4_dsl!qL5yDAC6%1^I|9 zPyYa}tJ>?jb-l7B-MnF=%QHI;0qIY7onT!;DAk>b3c-HneMf3{NLCi%$%8Y6gg|l` zxL|u^(!+BEX)|2JWnU}-9%d?K zG>cJ_F>WWFNx2B_SYQnD2W(Y{w2O^K1@o`ughIRBBOfxKUvpbh>2OBM9tmTK@r2JR zdyspd{?FllUC1Z{}D-fe5vUOKOMNM@%y+6U)d@`H6$qa@}vNTy49{&JZ>a?vM z((_Mw8gK+D`?!Zw^`=`{>K9S7HK+j??btah?^3~UvSfzfGUt#%#z%fdXYCCXEwLCZz^8DtFUDOj<< zGIO|kQk0lS4~8>(sZoyhK89?);EFG3i$Cw1!E%(JKT(N|Uv-PHG8jD81 zWQK4t_d&)v?~2d+M9T=vm405_*3+kt4U3G?eaE zMLcBXKECypBy)YGWr9M4@Dn_f?rPPw%#na1w~$~QtB;sB@o`evC$6Takr+=hNmMUl zeJZ-m7-F{HFq42Cvz&IV9WqTjP=Ibb9yKF*>^_x`a|NSYl!{4qhAkwAfV}pp<|(Td z<&B|`tAYVhu)py7(+s2jd0@E44{_^RcGo4OXl@kz&9*GDA%O4r)8*77nrBI+5x15y z53f!!(vy|NeGL=7I7Qffptb=co+*~vj4~aUYCw$e!LjpptZDB2m<^yZH<^&i+=d6! z(u;j!##^XuVRcE6ZD=KKgWP{wo3eePOz2?MS|TNO3>1>kZR40X)pvk90iPj zwd!jAz2Y|1VrR2;W99I~aL3S8H1DAK)rs$Qdq|>r@xSC89IJOENJH z7a2c|V(JmflLxhx#KiznBXBUi%{>KF0e*>5m2G)R26&&vLQ`&Th<;!Qpn-Uhd6q%2HWJW0>;r!K3m zU!ZLqY0$f1(m-GKxXyT5WNF0^Z#wNq>*00Z(aPUilUsBLWJ5z0wM7){3;k9>Pp zmA8)UY^~N9bl~!Vv}c@SxE_>Ut%FCSF{RQcypL@0$^w1yoPKm$`A|(At=xf|%myX{ zin$}}{wKKm1)aB*7Bel$TnwJn==>w7&!|TmObmDmq%VH|07^NM+)54XRyy3y(xs?< zrFOp=2cDn(YLyo6P?Z2GofX4!3i=O9-?Q+>pQl3-TgkYilO{PC^d6?9gGRD~C%v~p zy!^v|AdK`Q{3|zFHqhBomr}lk;psOP)mfCcSYil@JB|B8k za)Ek)JI>)51uY#UCvkUW8@!&EwpgQd26Rk@w;3~7FqF+EqzXU0a84MNJpB*i;fir zIsTMLuz7#Iby3mT`-AE2S*CAfL#V^0+}rK3WocGI41?~l9)hdeBrCcpE^^@I0BjNL zM|zkWXT4i^xiLcxC+R)3n!R!$M{qa zGWmXgn4mGlM86rQO@9HgxQgT=xdjLZoO+L1$hg0>usDj@OlyMM4lMkl2Oh9JrCk)l{I}#-DhnJ6ZnGGJ27(6F&QfC(vF?D^s2X>B}>TD${-j1 zD8>Q*0P9s*^tkSjtoH4=sReok=bkFonV?N^Dx`8pxZ3)w;_KD!oKkx z-nBEelC+I8Y-MHPeL1G-`evu7J6ajPehwl>I1I;uSIVt+XYDnzH6`&hT4lkMynb0+ z$0)`bk7}nciY_%MVvgPdt|o6d^aP)7!lu0NTWPm(uBAF3A@^Oja;gaX%lOs5u!$w| z%qljhEb4$Oj?^awu>JN`RWAUJ{&3=9i4!CO2d!6{*56H;Ahf(t*E3=`vBC^>_pRZl z%?_QqI~@6re7SLuJ%1W@l_i~=n{RA9;^XfX8AI(;%vUAMNi@rsk*uV-5=k!}bXvuA?_K{z1-GW1m{XJ`|)BG+pxD)Mmq&%{eK3_xZ)u5U^giMXtdWWQC)TY9vd7TyS~{#=N_=hf(2wg=T4}PuEVma>vx0wk$T?Bl=}>99?W_ggdU=vI z5lP{_hqXFwQtk_g{OWDotTdhqU z@BAYZ`GVxa2+?rdT z8>PUKcr4?&Qzm18FDi4?dQ+}bQP!srvBU#M(k$YcVYj#!1E>J~-_NZ@CxR!s4A%2YB0(n6D`)qA?|asdhdel7BwS7A z2%NOCV1h@cDjcAd(V$&UXGKjvMvrmIhLag5*FKe2{{TSOJjRYl;@*k6MTt&V zo}<*)RcN;Ms-_EJa1@g+@-u_lucIWE5?t8%D>O_3q@10n)7G$coy~oWZK=%ZI!E?o zG2C4iEaMxa7~|1_^sTuxt0^s3Yb%)?1H{PK#}!Xe*A^?1klM*U!Taep@Vw(A)~rWp zUS*QnBTx?2mFikRl#`>8M;Pp`dd*=ajR_KX)y(6J%lnTg2lSz4xrVqLG} zf@WzB9Z>SWg*!#@6}7#{x6~jaSl2BPem3W+?0=m$y8?FHOYIWiUj3o(RaXQu;FFJI z+O9-wbns!G7a~Z;RnG0h>S`UhdMPG0^Q?-vz+&8|uN2f| z#OD-f+}~M1%`l!aI{C~#RsR6%3ZZSTLX)lR5|`W#3Fv-%+2 zj}l}9>MJ@6SQrVeF2rdN!m!Ebr8I<(h(Qa-wYI944U_z_^ z02v*AlqK!9nnV%VnPx$dm>9>sItQL$q+(6HTfR;SrfRoW4yVnu0pnZ&7y!Bd0P9ee zq_?2e)t+ftps{F7zauEdKDevuEt!#GlP=4EJ#aY~tR%m#gmJP;zPHCp?H1@c)n@?#Oln9bHTpSVk*FUN0wlG{QzE97}gZwT26`HGdQ-zK%#aBAz?ZJZT6BvO(RkvOS zM@)|O1Ro9jUiQm-e*;AniMu3am3rj+*G^3GzmqP5U8R#ojT1i?aPMVai&TiMjDw{W}l*h@I=RNCtMzR)&8Y_9yUARymADu{#1gZti z+D9oHyrMDJx3vdVn%@5a?0QbynWIh8KvVCpam_^KIp|zeVo7zRYR@ZM!{xZSj0fDO zAay4_t0Vpq3tzUp(p|xD8J0N_2|YdQQtQR+bk>K;lGaH#BD|O-f87<01b0!}OC7DY zK#MCNZ@P2e)}|_U)Fk6`ptQ2^u9S$f**Z3M%P2SnJ$|)DYq$fo)vGLVfIx7)P;h@5 z%Yatw_H={aW2jms+NkY$7K5MNItK$p1bFyTTXv=aK{Mhx+ z=}!LBH#g67YO@EOR5LO8ln#qVi>BM#Tsk;1#3NrX9Bm!RtqY57It#VD(=ORvM(Ec) zJ^kovD`X|i`jeYzB)N8rPi2rs8P#MXamOdpvhFUv&3m;I*{It+S}>t_PcwTtsRco$!-e{{^RRVUige_Hd9(^pc&Zi z`?wLGQT3~YB&U9ca+-0mP90+2;@)=}P796lkVj1a0153;>bEu*EbFJLsz`$?-3TAf zplt@~Wd`2;7Aa7bI3sE94M7#CjsmhFATb4puhzPkFGH2NbsQwz@ms{(fG5o>{c0q< zxs}UBYGRBp%p8tQDU(mOl@elOW1YEt0(}pyG8@5kSL|CHzF0G*>a&uY`Nv%nCxR{$`<!aU$R*dx7g(`d*(7ml)KZ z!)%QyLlc~qAKwDDVb@YD{hm~ZVu6Rj$nW*8cUn(lsx%?g=i%@S*3w7k+>|lorp7pM zd;My2;d@IcqPf(h!bc$}%(*%L06pq`Z^Sk~Ybv_Z?2Rz2qY7A$(zEWoP}+=9nROu{ zjy;9MVRjGe^`Y~TBmEN4jIb0Cv8w2kQ^N+1&UU-4NVy;SL7X;^E9FtQVH07&c>m{+*zl|*7+jJ+4 z0OX5yA9vr=H1F*RF0K;d!X}Mab(4^%9Ml#X7LxY@O+C`;NiEUDom6fa6zFu@dwIO6 zuADW?ZD_*~t&c(4rKl!ab7koDjXKuUSZeI7+lfaFf=T!81wjSmHxkB?N&)kT9%;zw z)km!wpNE$2NSY>Cq=~mi(j1`}?^d+bycBWGzp!&+BfCywUSEYXFDj@^W0NyOCCpp{J+nLf6h|*hsrRSjQWWwL&i}rn;SMw{K+v zL>;S~xbXyfbZV1cq|dzMfwzxg+*35a6>9rup58EXkinxHjbE^BT#s!V*y)X@+9i82 zF-CRa3mxt4S@)3L>DLbdkp^+LEPTNIPfEg)O;-N$2Z+2Z32#0}>}u@y`hk)qXY(cm zD>TD7AKv$>RN5ufOp&L1+2n`LXdOrIcMSaqrF$Fulvyk_1920NljOr^zH{$UUTRY$ zg|7r{Dvhf4>wrhU_|!?LJ^2x!4;PpBm9d}7wB=;;CS9@8?*qXO14#1~cro(<>zW%) zlS_G0cgfyzjNK2VM`fs9#}*{FA0vI$Kg0F!QC?jei-~{ImQ|DmUBKmiX(cAZnIu{_ zHxOc2;PRu4#rI zBtD-?p%vD%sNF{$!3yd~Qd4N#o)m%n>UJ8G7i^DW(9046%OUx8`j1+*7K!G$CZng^ zTF18cYL|cBB5|-0ocq-+)5ryuowTGfWF%{Xx&9(*8E$80Gf5!?jiBz%1vYD(&*m4x zak*E5+*PQwX5@=MYq~}&Ba({PBd0%Fib-elrnq~M;KmBXy{Zd)h$guv>7Q&TDg$6K z^fh5_7G*QSWBHCaT#S$DP3RZ79GaTP2IaLV>^^BuG6$tsSck9WmE6skAn=Xh(4t%vOs=FgAbXTx%L&&=w1x8 z^2BKqyC*U*D^aeD}c=h+F zp=*-^O27=a+#@*|=xU;By6v>)No-?{8!G&Gbt`eM;w0x{xe3 zWU-F|P%x@M?kbJeopF6`5-C)~MrMSLcX!QbSZenvY!>PO@~9vyoE9FnR^sv(W{^V2 zP;!9aH^0)UT`wf)*_X8qTUpiYZZ0fz86r|j zG6DpO2UCICv+VQ>nVL(PZRU~DceZ*c`qspj_co(+PU?>kc95Py_WuA1ZLf$dL=mL< zFv#UhnZV!vMGAnPeyDTy-PV3glnKl0&F8`c0cGY~n!+H*Vy5XC0}+ol3fsDaH#^ zSH+U*nsD7~rxayl=7k(4I+8sPYRlBM84LvyaPO5|B=?;N4oPBtgmWYOkH72^&Ns2hOGIRmG# zt8m8VNETakNh556pcX5R^~&ol&DA%tou+6u_Qh=+v1a82jmh?_*4CGM7+Vt?NaZCA zINx6{(KBhv0KA^Szl1g3E+0mvha=iaZ)r@>(}&v#@;mPQ%6W7u}5 z+y>mM6jP;wl=CX-oRgdNhK2e{qp{j)% zwH=zVGph(I-01vE2Nct0|;)3gf<#hvC= zaJdY_Bk}dGDs`tfc6v~y2&*Edn+>#cjqgJSLKbL1dQ{=W|ZXgG`fn^8p1tMgESju z5)iw1U&%8_V2KA)-9B9xhf2t+GVmtKfSjgJ_ z=#J{*;%L0GT_Hxv1b-0s#dp)e&8y2pnpl*bqK{40el5diYdl&-i+QlCZA0CM1bt7f zavF!lZyjFTNE%kQfn)vBqTzu(*n?QwU7nc<7LRc>t0N8U@{-C=IRy8uR;G!;drXw2nx~9S@~%A7^V{ zLn(7~7Eg#iB)FWzq22jJHtev*N2e6X{6XWbP8lrq3x_EA-xOyA4`2TPRdgO6@I`>P zO+rhUUvR(*56f1c!N@P*xt`)Hk1PkmIZzK^f5Mci(TmXvH0nKDIi&E_rkxB@-61U& zBx51VVEWfb;cF`kX`O7~Q|1y$V~?o%RMKga2;T4}S%FCubAkQee`<~mE9~A|EN>JD zH+d71cbsx_>FwULoo;2htZDMdwG0=NyIaO`P!I`^ms9EVt%x*TKTo$3Y7>bii8C2y z#tG_3sv4HHd?AgjbmnK1J=XGVV#iC#VPf^Ig@(i)o}iw3gP2 zR1L3=;19i@@vK{q5@}i`ua+%KL}VqSToB`_AlA^Rt?sQ%rwKQ!C}{o$(&HjkvfQY= zIbF_}bfu`8nMR9*{h)R;OsN{~^cCKZddE5yM19>evisH#hL5cYA|9c9+5r3-eovb#yyNoNwAupP5hF1)MQgWFwi zc@+Gg-N&vgHv2$`n5VazIKEy{${Gdb#l%28xqPwONs zm_`obc&=wy(nK&w){QJ~Mh&`+&$xB~bgq~}l$E-e%5#pUzOSm;+1f`Yqpg;ZOj#Wp z=9>eBC(w26(y~X1t>-ewX*OJp#+!Ll)Q~Cg_$OAnvxf5L{VB-=S*o8gPrqz>ifz%J z$)D}|GeYqZ`?x^f!~3SUjA0dIXDLa$hxV4AWjt59?9A~@Jh$@OZ^}6t$A5pql6^`$ z%c)?tB1DY?W-@W?Gx=24uxZlTnWcphkqPqH{pCKDOG%4RivB1qBifJ5W>g1ubC7+# z>qMg^aci+pQSmQ`E-lwbwy=`Y2p=~gR2S#mbpHSvx1e}p%TbLR#20e}-a@H=nSI#y z6{mTk>T-?u=&Kuzt2}GBIQ}2QwLePGkVx}NSSl#uegwv)_Q*?1s#Vd+p!1D!|BwbKL>OhHzS0;_#0&ZDa7E<%536oDKcC`q-X$7AX< zQpw_75(tIe=`ihGtYjgA{vAbS%{v3S}qZ6n;zcJoME z5iHG+2KeJ| zd=;sP5j9EWU+-Hn+QGW@9<|))ULCQH*&k1VqCf#;kY@+KA6ir7rnek9>OHJ-H}M_4cV;Bk5Xl0gKtzSMq=b(BGAcu* z67I&;9$lMVqg*Hhp!TcRx|OsC%SaKUm9Z0?W;gUFwNP&nNG>)9+NsDpa=W{O-1MrC zGe&JB$*fUU5oLbTrc|suIL>`)X(f!TQNpZu4YEJ+NAK&J%Kp=u`sCbOP75#}Ixb3| zP%7QUgX@tAVQFENK_4WClk3NNZE7MZtx`Cpv5FPAEO=#;ZoqlxJ?k>}HgFY|c!UAS zUFo>1ah`t)+n(N7S(e_+U`7E9epEg8cP6rR4QESzGDxghVv$KRG}v<@^vGVrKaE^n z$a)g!{&W+nUCOB(-|7+9{bKw66>jgxT1Js#_K}5Xkx$8t1M0QO-_LuhFPCi;(|MdL z#&+yJneB>_*WuQ=bX56HA|EpO!%9gE>&nKi&Gkifhg|C_YjU;Fs{g&R{ z0NCEA+LiTh5csA)ve?_KGP4v7FyL|1j^?)X&jQ%#P{6v?!p(6Eg`e#COoRL+binql zeLqf^TshM%e8|x<^E_aY&sF#Sl@qHN?2RK%Z+2za_)kmI?Ur3?2}-){xOH!tNFRHi zn5`jerdcEnYZ}NT;5=`V$~)9om#c4^8@uhd4huU@g;m!*N3Xp!>iThklFkH}DvV7L z+IZ`LMugMSOvxRar8A{(9p*D+2!W zR=j(yF5l%26w1;r(xb6B>^-Yb{t*?_Jhs$WTu$+95-8i4{{Xv>>s8AYxjfRA#(mF; zAiZg3u$n!}z&s3d!2VRt4nGm=cX8cV?r4J_v=T6=qdax%@9kUmJ_^zFq+406SsBmE zD)T2jz42Pg_PSC@rUnRrW=R75?`+jM#VbTngqyo%J6lzU7SUX?OCtb=G4m+zQp;*% zQ#5gyjFO)%q|YRG_No)>=S|xxjL2su22co-ugHBqzSS@O&YsAM-3kCySm_1 zG-=F`@hh8hlCaEV?}3HC4#C>K7bm z9<^E)jtJzqxV4BF?Z?_;01OVtiqo>RXyA%>x>ExUt%0OsiewybAa>FFwsJ_9(AvGV-JB(8gVdJ5f}M7(ICOXW-; z!m7uOym$3Aif)0ndz%>ykLBVCBW#x)hrh9@7F|ffEUi{|Y-U9dlb*f$bfK}UT+kQ# zZk`%Ddq{=sUpmPq3a6(YwN@Qo`sV58w~14DA(%&v$G;wxFw#x*jU~0TrIA6E++}l) zaqaC_ENq~3Smu-W+w!fAsgLPdy3t6kM#}m=h=xxx-5PwHv|EV^4_wxTo}D7zw3o3F z6i6_E2R`40S-85h(k7PRUt2~cQ53es{OqHXk4|cZ=BKGki0v$j#rz=~aa8ptu$4(j z)-Z}i*=_9YEZ*WJ5=4ORP;f?nm0}+@S=LKQhm>ChWEscM_Nx~n^7U5E>e=mh+RwZF zU_BUm{S8{tw1_ON9$TkZX;;b!+-IlFj==V!F34?MsRfnPrEP_ag@3%P*(^W3pGutD z7=afS+d`gJQ_yy!$*_WUvs;C@9AZRrMi21*6=YjHYOzY{*&GmaxOU{yyB5U=(lxru zvj7`;0kEt;sP?OHN~*Fg-HB-AT*PDG6aEx5aL*zSErTXjG1J1@&-Se;=7u*h!0+!m8-n2t7j zoF1mE+#O9rTP3&?ZX4JPhEfJN{*;_LvXikq`i0~nZlxks93w)QBaXiHLibhj6)kfi zA-A^HAjS`Tj`TEeL2mHHJeZ17Woa0l`SkQ2)v4jjZ93}r?RPf;tZ#toppwJT)md$|HGs;t zv9wD$3Ry5y{EF*m(CzK~yXfy@iYAliEVv8D^{m}WIj-!Dx7yRobtJN}Y;E>F^qQueWwMQz{al67CL^I8e*s!Tq+G0s zlx1s}anCa>vRm61^8RLY8B#u-zLjMx=a+2K$L0W}yixT4j=sW~X$_LavdLvKAUHL0hzl{_*>Ewso~ZdX?Q2^G72jFfwnF5!bmirr>Mj2+**X)-}Q&04p;(`Af# z?###nj2;X2&-hhVnQszdZEVL2%g9063C2CorB(X~ibjR4=88OSSqaLP_V=c>LcN)) zZssMo6kVg{0Ar6&tvpEkN?YA3mLD`^63jdE+NiEnmYI-~$qkXe{{XE~>Nk<4l-9`4 z8A!J^!=58Q-Ou^rg&VyF-IdKL^~+0gk-RG$F{jAH;hDV&s?+$=-segZOza`@s5rMRmr6 zId0Br)|KpyZF^ph+W!E3tL$-vRwtA=``=p2{@d5CFJDi#vh&1;A81CxG5&e0npcLF zCknBk-rJ?~Sg|eYGhHTu;fSDAxRTt65sMj<_*fo6{{TLoHebz%ANx63yu$Od{>_=M5QCXG*nRzoqROg?UwNgB-$BC1Lq%8TEuDc-Feq> zE4hyWIw)h^MQ4UhJyky43kZhRjgu^=)Sr5e=KkhOaOy#nvGUud�{1ax_{kN$0#) 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%0AX-%N$=*AUYL*`vcwXN1FYYxKyFOU* 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ⅈ?SdU)4 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

$&Ta0NXeGNF5`z3p@DCoAP&?B%Cu56 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