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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ð<5(oW^V1eM!%pBsc1l*b?0B06hPMzN8R;*!3DC9M7H z%H{J{dmjGa!e}z#tkxbi`I(DaYY*J=Q*N$XS+Pk)KmA&j0&k7+#dlMt{n|R^)|tkT z9I>-38+l(|7TIz)e!}X5d(}T%nW?9#GgU2l{;_J8$FCa;yFNuZ{oHIfBZGgtCm)}Y z{zKm75t|SFo67HDZokVz=;;6M`ES-JrN(Z$JWJ+sS)Y5;p5?6nSl?-$_-|l%F#dM1 z_{!4zc(RF(39?=gNJ0=7+G4@Ae+o@_K1f@-JLbUhV~tbWnE1dX62}KPgmd-O*b=r)&E| z-Srb!di*x|d0R$Ot8lHb0$bD7Z}ltUqE|UFe2Q_Za9=6&wW|4Fw3}zBw%ggn+Y3D` zj|yt8aR{8;KA|;P-Rl-j<&uuM@a)@F&xvI!)tgi1McRKfGvQvGb++{J{koaz6)BuD zNhUmAAK21_rXBd6S#ar5=1teK0G_n$0OzweK0cV~u+?}9%l#NPmw%dldw4cp{U2R; zBsVI3UDfNp8(-IjPSJ`Dm5gQPme|7V;aTOBnYnZG#emX)50TM*M-o=c{g=KtZ*8d8 zw#`B^a~|!LcbDwDEopj5rcG4g)#Je8hXu<|M8%~E^lyEAFu6?X_ogZTmp(X~zIlsv z?l#!=?_7RucmGw!Dv1f3o;1G$+vF2nDo~<_&|QigN~aWZTokZT(0$fCV%I9-pkXgr%irj@Y!wN z=l?}oUta`!CGOI$S$+Icmd(<)%U@WeM>#k>ylltuG<5TX&u96Jb5`jJ&JXSND)ZW{ z^d{$&oXkt9t2TE|EnFP$b7zH*_vT4n!OOHaX3Vr+(tp1vYR1e$6**Rue9NWbS0~tA z7QA}slY{38zQ@PEMSa$MV!ogCWT?>NA7v}El@>19S*)d9&hn#K;@}g{eY^taos+N1 zq(skow|9m-yM&xx@Q(7yJ%#%5)}8fF6&B2u_{x$neSW~Hh(m#s{omI9y!&WlL$+w; z<-HawO2fN1E$|gS>tC|&M)a56>$gu?#;`%*!odX}ZKE$Y)!Xe&l*@hUeY?ItgCW{! z_3X>n7HhJHHFMMqe!uj1@ zX3ei#H?wz%vE#~#*5Xg=<@c05eC{Q=cmJt<1Q(kjzaw-#m8-3>3pUMvC0U)*@#z;&pY+%4#rB6z3hA%h9(6wI;L)!~z3!wMKj_#Y6EgpX z;oIo{mrt$i3yj}(p+xxLI`Oj%(;jc$|8&aP2kicG-hPhEoXjpUvd4;LjZFI|Op7}C z`bwU>_N3q+9B1THrk}s`v6(4N5DrvK9Kx7QV47`rdBc&r8B;`&T|w z>$&kqTGZ3?-TjSzYTNGj);&Dec+Pj*qsH^skKEaO&cJ5JM6ORae{Y{s8uqX;J~s3> zi~p_Os}mN58pZEdjST*R6|yU zZsLpTs^IfzJh$UL%USu7!WH%p&L-@7fBNy&yL-Z>X}@>grI%p&=8i*P>%v&c#%Je_ zOWx-f5A185!1eC_a>L7OJCvCI-l^8-o6~tzn`MF8!Swt{n{uyzscV^J{KIT^7WVGk zH~pEm((?>Q=2S}&4oQ}yr!CIhUVr3N*4KCX6W07FZseNrF!)NL{VtL7A14U+_c|?0 z|E;n?Q*zaed*6(2oncpf~ zrtfO~usEYuTXz4|SC&dF&6)etk7*_@iJG{GeMRw}Iqs$rU)xLsZ$t)_3wph~dSKBj zl?}{3r*-Q;HKdn#=l#Cdt)J7d@FL5DU0?637KldLG8pr@M^`?aFCy_*Gw^_=h?}SF zq(`$O5_^7qo^2KtkW_eM=M0W%le7L+y4z>TtXa0qxViN4&#+C8);^xF|FLz&*NFzd zettW|eOOz6PeRx+-}1v3lM=u1&2T&Qteh*S*>O>p=yidlYuj}%+-PvpoB!jxxmUK) z{LQ)_=H|z^M}vpJqhUwPxD~$WTzZ0^~dHHeKUav{I z)pOQz?fzXpLFf#_-N&~NzwR~4yLaPL@shxpndpcuXe8rkSS*$?Uj5`1GoFWhc)q+7%`j8o7gGtqOO}h`F%63WhXZcA4#+6Z4bRhlazA%k=cBAU-S3W` zw~px#Vpy~MZA6*q#lP1#_KK*x@A>n=SiaCs`cd!4=C?LtwHk39ZK@yL_(kmVPgR{i zb40PlYO$2;RtBQ%imMdIyMeOfrTOPmvT5i|eb2GlWITao+ zF#ooUM=Iz4A)oAt9us~=M@Kh)tGYLDxugBGIQ`HypR8xJv_1IkE_qPtLhO^`srAL5 zCZ6+E+r0DdVLN$?pDDM5PQ>##9az?RXr1D}rMJprZM@?bJoYe7kQ4HqbuHUJ<6ddl$wxPP`h6B_e$osoPqH!G zv0!1p?8LakOm-R~e*CQ0WR4v2D6~G95+-+NMg8n`J{}h@XGdJ)`Fp43nbDKLz4K!0 zIu|ytZgoFsy`u6^XScaYa%O_;)-Er7?-F3wBP}ypFGF!>{7LyU}iLEOm7PO#!MtJnyDR9rinB zT_wzC68L~GMn?R#?(^D|D|3u887`KT&14Sln%>In(9oZ7PWNv?-dcIZ#ATt+o0TKHTi`O8d>5BiYHV zE;$c5eaaT@dnXohp7~e9&2w|4{7aTv+S$x$@vwT{=D0d@$(cn@cI<6ixW_vAyU)yk zET`b#4|TjBd%g%>GbQ~HkA0iHgy+SXQyvO1oph5c$nH65u#8hb@kGzniTOqsV^S{t zws%WCAGr2?%7Wcb1rDb~c(^r8SkUp6pL@y!&$F^?3(Wu8pNL$+>+{ni{J*Z0#hXwy zx7I`ZY%+cHMJLu2xHDC!?Y~$bvq2*xQ1)a|x=u{$j7n9Li!<6yHyuq{qg7Jj`7Lqt zGQPhz_`?_XMCCqskbS*l>zmy6#}xryeSQN4A z*%!x-H}=)rf5!1jy3Z2bwm(v#IIcD2;ri~~tyi8J|+f61}5;Sib0kZ44`uh!6z&l8W@07fKHQS1j{mk&Q@e#VgQ}b z=f}Xnz{J4Hz|6qFpcKr&zzh`+XJBApfr?uNGcbTo8U)z^GKme$V_*mhW?*24s)-6_ zVBm&|7X>pgNHefA@G>wkR0T6I$TC3AvTP3q>1JS1hn_O24W-@0A?F5WLir$7AiGvW z&mT<6WCEWf>&UWKgbY9K0ZESL18sfQ8j;4T~mLO z!T$pcf*cHc8U8RcDlsq#GBOJ?{y)MX&%nUQ$_NG!PcbksGBLBTvaxe;a&iAZ!mw3< zfr*isnTds&m6e5sfq}7>k%^gsMUYiU(a@1iI53f2sZhkIapFP_Wv7h?MT0JWP%%y_ zYU1P)6PJ*bQdLve(9|+9H8Z!cv~qTFb#wRd^a>6M4GWKmj7m;PO-s+n%qlJ^Ei136 ztZHs)ZENr7?3y%r%G7DoXUv?nXz`Mz%a*TLxoXqqEnBy3-?4Mop~FXx9y@;GC(E1epaH>=`~^UU4^>@ld~G;MS+7OK0xq(-M;4nNW~v zX}fCY{KAN8PvzQ|GJk!I`@Zb<)pEIH;letzkAYd`(vCOgU6T}*_niox*`F$@w(Y@% zge{%vSD)RS7sm3m*HdrRw3kmaKe%VjTabGG+T7iJ$BHthFEu}-+*q5MQ#X}ybN^Yv zwWm%T|J~(l_pUN_fA!9jPsA%1~%^Hi&%nchC79QoPMt%=g&R`TOpFKdZR&iug>~2~``9 z8gSb0`|&+F>`lo@{iTQIc34(MFY3Cay%)OQ=L1HEw4>XjQ+h=-(r*dL06|cJ*#G2c5;VX#0ORf zy=C@ge05uHKAUsAz1P9+tCm#%j5WGXCa}5cM0{XaetV&3s&nrnwHL*={}_io2vFou z(OJIYyvV1n1y+oE{oF+t)p8UXu2@^3P(RD!I{U^~wkr=QRJrV*Ds%0H%raZig~kUZ z6&7u-=ITDz!LHRKube2sEc^Lau-~Jsqh3bYLEb;|bZus?Z9Zig+0AhH`kW%Wtz4&> zZdc|r%`AUjAoEym=kbSKtA&fE`LESTewDra!`pRpSE{V6O%?bwUCrZ(#(xIiJDpO=2F|NHpo^;pMag6Os$u_j<4B3dm1NemMK|?Bqg~uI)O-Pv^CNdXdfb=u)+3Pq^TgJZq^h zSI-)~J9Y1uu;>}D*Ehb)JKtK-JukU|&2!ys-!@%kFYlj%QSTnqy)Ji=+v*?l;mfUx z&kK@u_tih}{`z(4q$gQbxqG}7JQHGfM?5h2&!DuWDL-kltM=;Sv%<>C%JbG#&04#A zuU}4H_`e9t?}5922J`NDyhf=0KHI|2Je!vtxc+^`k`(=@vhBss@BR#|U)lULzWC0y zY14&oWqcR+mX_>4)xa}np0-THJ-KO@>oi<*HMX*fY`@~YGlHjld4txem*H!_FAkA^ zYq4^=C+C^(g$uqt|M_T{Mb@QTIx>&C)N}0^E}7k!u<;Aiy2l<3pDx8%ys-+}wp=52 z+lJ#g^LCtE9Z@QquD?6r*}fAKb&hDM?kkk4FSnW1^*NyOvDk-Z(GC9?59Y58u8eZK zbMD;zdwISJEWc){N2+Ehc<)GOUTW$2F4HCbrK97W>)NT^JLLW|tX0gBo5Ik%*RqT6 z%DokA@A9t9j@{K2Z^Ac2WL~DNW)_3)`Ou{Oz4kd9`y}i)id@ypN(r;gT-~u&WrH=d zl8q5#?}3z%qPt##3x(K%*f^HowMa^4NGLURou0W?ciEEofV1+w5k5vuqV-x~K_R^h zsvDz!vu7`|?0V31J$U`mrE!@BSz^2p9_Z;iA`);A*nKlF=AJH z=bK!kX$S6{e6^g*UhY3bYti;wt#?1CJu54`>CR=(wZwgEcEM8)dtpeItk zSo=m@$!_=hYqNLo%~&a^wDFC-*JR!1^REL|rdtFYe;GARif`o#_h*jzzxO=YEx;P& zUuev_@8|ioE{}C%8$N`dpRqqjGOcHM1!{;9!<1&b4RHye}Zpg94?!#3=NzkWaNHn?u=N;1C6&D4lga4CEsdypJUd$^bUhl ziy9}{7T?;c_Mvy;)}y<8Cao?_o^(KN#>?~hhvw^TOM31uG<$B7tF*CP1JBi|m-FwH zwA?;1$>P*%O_u(+>hOgxgCe3Mlw539oaZ{V)AIZB7>`NE#CY!&^-pt?IQiw5Oz>0B zo0HGqc&_llxg}CRe+rXv$CP$+ChQG zPg5m%e|%Z_Zq2hBHa|OR53D>^Q2#e_@x!vDXF1ibOPBac>27H0k+^CoyfMe`J(4eikPvVop|2%)$Nm9V!Arg_ASa~zk;eVwC^N!&u&#s>P=RE z_S|xX-C3Q=N_q9=rwZq<<*Z6b7i?5}IAKY_qvibN1@`4kE$5_F<{ws@y7q-p*<~HQ zw{6Ow#Vr+QPqnqK^-b{4{@YsmEZS&`|ECS=^B4YW+w$+E!s&Cx+Z7VN%6%<0S8Wxu@A#7` z{1<*nb*_sIT-|#0@y2tKDgS=jNBJB6b$=Qa_%iy$>3LaS;$-<6{v7{!G+D>J%zv|i zufdfwY?)gW1rsiw^**W|$FPh!r0=U5qfGFkjXUShNGy}v@o2r{!npnNyTgv()jj!d zYS!$eXC7B~vOPW&us@im+1|xCdcCRJbC+ap z+`#VFqj;?5;Ep-pp6|c3Wo_D@lR+DwZ@acVyy$1yhLhUK7J+lPuC^bVwWayF$0PLx z&;rWk5o~)bF zxo=sP&bROWBGHpH_f`1SJ^w!a!}+IO`*LHBO*&ujhTrkzv(BDkM-zjXx(~e<%@ZCk zxBIKLb=ty0(_Jcs%IWRlF>kY^p7mbHIWD2Ned_W|`*P!ya>oAp<7+cEA4?3B+2C~J z=l0~!t0vu!IWO#9HqQ$d-mK-*{?u;q4vRl8zio(iH}DJ*ec@LnU$we)&5fT&_U>74Bv4@y zd*hYmDx<8kI{S(agfusa&prK5X-=~4EcsbhmAXo9tjRHq*X6IRJX*7@$dYHxjFSu> z4qtyAbI9wuxe}*dM1FFsjz@gft{j&vk=+L8FU?wZZ4&qWWVgph40g>|x_UDI=gS6r z#cM15>kBuRsCm~E#RwVL+FPA&4xH|Pl`BRsq$h!o>sQyMomWggwLaO?ocNFTuzknt z@HbOznZ661lYi@4nX)%cdunQtr?TAN-t>DfPI67(X5@3qF5$4sUv1;xZr0X^b$iYv zTi)_`QEPkrT6e$Tt8nh^hEDuJ-A(m2*E&t!Gv;lzsZJnL-Y4ujiPJ?V_0`xmS( zyY*~NYOLL(N7@}ve->YLzw+g1VcD*<<*Phr*4 z?)g6}V2$6fd3V`YlV#85&6;Lf&ucnadbL2x_E+Jn-Tx_VW4b$gXeQ3!_w5 z?5Xb8Nnj|KUse@nwI_V`y2SodePKE)`#Kqsp z)uC`lWB5#=yEmDhXde82G^B-fCSR4oTInPI8N8d+v23>Lrnh|yGqxocW^8)e zq~|X;b7k(<3Z-3cf*vRM&v-sx>bT^_L8YA&&8ILh&a*0x;#wrcb!4K(`vYs2i!Hfq zxIajr@8{#do!hrgSW(8ahR zsS8T_uQzs`yc+iGvztbeUFz#dzPQtrF5}R z&9*y*7sNd&J^pZ3?zW|>N7p1-1cjFJel9ajx@Vnl@`km^OnRdz+q?@mUWH55nf){p z+WD@1;-8mCiyhb9>U{CehxK$@g69@n07 zqiKKse}+?Yc$(YKuV0&KQ-Al-`Wv6T1B+uk^VX}C-L%&TKJ#g^{S%R-!85@T`|w6fLn%3XTn#t?1#B^9WOt9{n>tBbcc`8 zAyv27mUPo&o+~_S?!}zwo;>4J|E~H2SCno&dwDu1xo=<7)^B->{5Zm&-knvoX2bE~ z=eN$SWBmJSCvxG-}x*rUU@1ZIe+`(f1v+*d&taiXIk-=u$9+JRx^ZM zvp3vv?&vK(tK!J-aXNbn!tSUj|D8Db=d88|Qzvd(F8a}a$JK2g))+3Rb$c7?uA+a+ z-Z*UE{fBGS|N3|rYJKP4{nhkHOnl5;vzO1x?bh5}<}7k~+l|HL_HTMFg{pk%3~#!s zzvp$nO>x-dZEA_H1Ra@fAtE|84<|Yfb&Zu1H z&M@ykgV+95*9wcWPD~G<`7Z5c*`zG-PC1EVd?|@Hs=^mX-R@V&Va|BKcuZUGkirtJ zRjc|A|IuF9rMw}T{l4jw(5W}xR2+MiS?FW)b+PD$iF1#yp8NQ9wE6vypZ-0NzYu1$ z&R=wI)#9^ZUtR5&mOZ?_>*Ta2VwYmIRz-{5dGhzZBAUmcUDylCb5Pit4N_ItnSPfz$n?pw99ye*gQ;GewJ?Gm5yi9g1% z+sv`J~4?QLGzfl)Wzq^ z#ddFq@_6<3pptj7Mr3O1lp;oT+3dNON}E#?LLYzT$$!dv&f@K_P=QTLn*0r$o9Etq zwqQ@m_A56fug-Fi-C$t+pW(Ww$jfbW;sdvBH%-5;mwKW};vxHml&jgdPd=L`{VaBq z)=wil1Bo*GxGO)WHuY;6ILhr{S~yE=)}aa`mY&&%ny;)k4QNR^xVw|Z(8T)m2R>U( z;gjWtTGQO6z4@B&e=wb%y0Y7YbDF*RoP=4a=XTrNag{n^yVK;!PSu3)jJ^3)%2(7| zw;x&9_4%q>miOwvmVS?|eeOC$ou2ph{lcIm`3$FWtFHwPGJg$!&1%wCY)YFNEW2y+ z&#-lKmS?(VXfNHF_wJQ;!}frtNym?L`G>yAT0XP7>|WGKliB?ooc3*6UuQ=~Ta;}z z{@^HNcUAp`b)Bi^we-H5x{oI&b@DyfupoH;_jdKq%k8}N((9c)E?2)vTQ=9Y_LK5| zhKfh)Z)JW{D?2W4 z-ZS^?RB!7b$(bVSbDmtX+sNW9=yuM%%tG}1^y2#>KXRAvu;0~t|GrFJsobR{cPFkl z>N|C;<=5NWPn0_jzG;?Uo9<~d$uKR+^POL|8!un^e}<@6^G=^!t6_51>PFsxhzsrQN9p{==ltV`8+-fU#PQFHu{ebmLt5u3OBPW$-o zxKjnwX1&tYotqYJ*w=kDXTz4vKY33+`$cDD9bNLWEV=YBrv%7Yk)NfjwM%a1a#*~) z!GCDy@@bKFp93aLvuV2GE$TIIg2PJl-THU3zKi>B^_2W4DzW-j=x%p~Sx)9v>85VC z1SL=B{t9c|+?v=|+~-@lV@}E|?Re*mgDx-Lh|DY!FML-VE2C2BeX-(Y*He>2hg?q! zI6g@436IbFSgHM)@%W`ZJ4GsNMIP-~!nFHh$5XZK?{-E=UlUy;BKx{7E;l#&-%Q3| zv)&$lb5yU@wda(NVgJnAl5cPS(R!8fqS^TDe}N+wS#NPWcEGvT>e&{xeU~Sz zE)$a5!ECy=e$$_xsx20gk?x6w1}(c?b~p05)n=B=3`?09+{4&&HDl}Q;^z(*rgTM| z%KM^zYooXQq!mW|HBvLYX9@K$FnQNEt1@x>&vkj>${QYkS+h5*BHe6y+56p3ZroeY ze5~H;eAlVS$`gUtbqd|5bWV^jv}^9l>h-u46y`7|t~;pGH2a#G#WHP)2Mp|=S1c6I zHJBRZ``~$9Rh@~-ya4G?#;?bG%_5&ndFGz>YgTtq)VABYZgm}-3sW|n)QUORb+K6X1uyzt8=;iA$u#;j?H^QyT1j#iZK?x+Goqo zG$T*6x-lg3#yro}0ugu4Hcb@ZFMAN?d1cj?-Klq7%h-47URHk{u%)kR{;6%cUzBbb zdw6^a?7wn#{pN_9pIdmWznWg<*|%ov?2X+=+`dK4D2Tk{f2Pn-Zh7O+S(mq8P_6&E z{)fW(SDAUHDqN?fo-0e5hP*0gWl3^l;7JHO)h0Ii`+Q@zSEqA%r);?V=6XphH~;&Z zV~eMUZSPi6x!d{UGQEs_soym!;Sy>0A%&+-9efc%>slDcbFQS1@ra4c` zDmqX#x$&)kpwv9J$1$dco2Lg?T=wWpN_*pfZCM1v@3;L+?RBaqESkNO@j;&5){|P7 zQg150Sh4)6Q|(y~KC2DP7eb_O%t`+svOwUz8T;OpCpS)OJt+I*8@*jFxtee5yyg2} zWj$T|_)h8TfCDd0p2qO`%gy0>`QVmfOzZirMca6~ilUj9<~x@yvt!!uRrlJ)NrF#u zb}UO;HX+0%yvopNz33i;TcwNZH@Ux#U^d;HS;`!-#K=SNk^1_A>~+mskLtA;zYDi^ zE1G|8LEqU~rV~$aRLOk(qjhEbwATl$&u(m0m2ayjybPc8`Ns2_zJ7JQX738Pj)d06ckSnEVK+VzebbHo zdHAzy$pJ2g|I{|UGqqf%B5v_T^rDnRR=n7n_`TC7mL_f5@_V63zn}l}z|$+2)V~T= zzjDpndiz#m=ACL&KK@xfjq5~KQ@z;In_Im*9i>mmHLcog{r9ocV!=a?U;7C@o}Tq! zW%rcrX&alOm28`Bp3ItEE`43t}lz`{&6*xC!{1W zOySUW-h;NkuQcvXJ9&V);6?GgY!^3&pQ?ay9eyu%ni?OnhEhKlb?F31!; z@;J=ZJ6+`I-z)FMbDjk4Shtu-Zf@qJb>T&QuC^T_jVD(5FZ5Wal6WjLym%Xf%Dh8s zR&*DnJ5)Zux8>39&7F+BPQO`?mRvZjHDBbCaIQ%1m)$EjP7&-6xA?1_b^P##iacD{_ZmNl`B%Ns@L(f%gtQ()tl2lH>1n>_9530=?_7`@kfa+cAF%Hl7g5hvcheV4gF{$W%=yUqM- zJF=2hb#HF!isn_Q7Z&znJbr3HZRUXm7J-w!yvwa!i%xA$jqun1{nm?XJ;#<~sq8zK z7|A3ggz5P+?=4~-)G!6h&+|Q6My6aQ_YcIwHX$&p2;2#GP~=T=5Wgea`i7& z5G|iLxmDzW;{&GS*Lqjqd1v?KP2)+6UqKRYmo!N3_#*PuF5r0xDufq}%d9N3i69q*M2OFr(2$s#*>5=BJ_*wog&4=zEdM^Lj zeCI*%^NpT@E&o0)U-9qN_plyStm(=7vyvg_ z`Lv@J0#*#RXAOk=EJPBEPoBTlAS12*`%v?a?+4_jTs--(Uf9j@=j;z64FLfqCr#eZ z>D%pot%2kB0{xxKS>x8-?q90i(46sm!OrD536>V$M0S6?Fwyt!{9XK4E=hb1m|s$- z*7Q?u*^JtsOJxfzf0Zm?J$e4iQkKc*UwUtue9mEcgGhnKjtB?NZ!1MuU!UJ=Y}vRy4L1&+ms{5K(%@~FUKb}uLeVH=8{ZjAb|GhNli4R#1vjcRSct5%=DBhINLg1wXq>|zU(?y_40USFm*-_NJUZ0(=aR-_ z6HUuUja|i;XPD;p-yna64vv(w_I`&Kcg z*c&#_Obmz ziL*AMGGFbk3KrcdIcp=khwlr+pN+Ot0zdsqf9)GQZ_6VGi{q~yLvMhtokh71fi^xJ{;J2T`n6fjgW6ftBnq%&kN zlrShTXfPx*Xfh};7%>%18*b)gYX3g2CnGhG-D&MJR^@20|V>5|NlR$Gcd4EW?=X`;s5{N zi~s-syM%#(`3?iafjrPc6$U2Ik_$!<$piu{%pj5#w9eKQb8I9uXf?Sz<*$LwF`I^&yZj3@+YAA z;g#OCom=MGrSrk*`W)=GzP|ME&DB2v z9uKD3^URxMC;TD(&B--C8rLT5-}6cD;l4?hsz&c_OPmO>7QWo4T_t}r+dX>47t1A| z-!9piXtQRCk;RiaeeOR+zx|oN`TgPB9zmauF>G3RS6jLEb5DNYt@Z97u0LGg{#JLv z?hV_`rk(k8Ug_=Mhsl$U-&g;6?Zd-2sp{{epV`0FDvFBv$$ohLru9v4^{1v??4Dx1 zcH4=-?Nv>d&li4O*LD3{=!dg+beG@$;dk?SQ_%x=0lqW!``lx~uS~lh&syT~VcSK{ zxsg15&NWmQcOOULA*G=_7w#Swba$Ih+Zb9MdYFIthk+L_|T z&)4dIv%IiW@Jx+*u1R8>khJa6h$44CM%!IdZ@%omseG_3N9yo_Kxbw9nZ>eCs;{dg zKVg5@pZGU>_qF=0{VX?Ku2;nr-Qq~%mdOe2v^~f$=eqHVe|M@l`0Lu9J$fX;wRXjp z+Y>BKtPh*c|4`v)w%@;PmgzH+o_|;^p0hu7uC&j#-00t`A|7V^liB-UMj6$e5&L{< zlG&cd>Df~r?%7aPYFj_GviCp3+oQFmRh@j3%L|$K@2}(FeEqYE>v`$^Tj%4hoIbkz z(09IcmNQGIPON5r8(V+#ri@fzOY|4xZ!^2^<$PbckGUe~cFC<{OC_32o*Z$Qxc7r~ z$hZFte03t38)7(2gH^Qir%f*N$oHAIXkXs`A5S0mx(8I>6mqePIxf<0c@$Re`NY}DB{?TM@dWg)t@r_i?z+ps<2_TyeA+WF;l*|wRGwK2& z+@7n*J*mDLeZO-*=a$>srf$_p;}lf<)^p_E*N=byUhi3-(iZlS^O%{nu|Uh?Is8$k z{JdG8B2~(7J#IEh>~NkGQha`Im0(HItQMZD+`CWC4|#Qe%ksm&IWE6>FY-|N%noM7 zjmP*Gd|9*C`P=S`xhnc*i^W*1XXnIg=AA0Mw=dnFD{JG9X`cg(qVK3Fw^k;SPM9?G#ax`oNQfC zb+x-za2<=dZsLZYt^Nv~43AB7pBcw&nw{Jy%`INa(&JgGn^qlpIpmt2-qX*F)nzq5 zEC0P;>S{KzTxXK$)jhYLI6m>X|LJV|%D1sDRj#wN5WIT9d_*KRh)EV(sYK&(glt(&$jTlA3EKsaPoF< zvqYQ~|Ju^Ree*V~oi;cB^V`1(<=&}^iu9iTQgi(5!TXYuk}h{+NILZy{DFJ z>g_sH)?m&2-t+I~<+pGDUG(u{xT=7ntb0&)#M6>@>(*(8gze;;`p{bJvit3T1cT^` z$KB6z3ZiXWy~UdoBX2IaD`Qmrd-K)}{F1gmmuK$N+^}u0k$bs{hqzK^xB|cb(x80t zBOBeK3NAnWb4Gr;Y=`XXi_4q3!aR;%?=SLyvvQq?t4NVp&!nU5AAVoG&5@k_V(PX{ zN^R*k8|rVG_7*d!V7ZQy zU%cQ><({gv-N~&zrn&kvr*C&pFTy0rbCPv89304wkPQx*e8*E{o0Nff5MY>?xh6o z=A0rUS(mE3H!ia4kzrz0bd`303{Jqv zaOmRJiKlPJEZoNaz4+bF?aWP@yDY^0F3-xi8ZxWy4ZmCW;eFDVuX#H^{r8b0ptC)A z-m_KrUfRiA(p9Ql?$TdZA#e0+gKcZ&n|P50DLaA{U3<;foVl+pRQGaCZ1JP1TcmQP z7ssqx;_`QKweX%Q{tu!@b<7-ni%s@DiQjhYysN$PM_V~2 z#od3e!S~{^dZp5;zVc}g!&S`GN;Zm$-g|yYs{d$6zk#2S{Cs_B`5FDrZ?x6EKYF|N zO^)Jj9hV(K<`Tz0{MCLw*Zt9*$xkZ7x%XDga+kdQ!uDuVmb~cJ-8*fjC(1+@3Z|Zy zoo(@C)?vY;mAUFm^p48x+v3?+Og}nCV{Mx*E&CVAL%9k5GOCQg5d-lQWm6$3sm%CPNc3VuL?`n-3 zTc>E>-TdM|gXEvwo!K1kY;L?W@4p+(KmFOu$v47fS5&<7o<8e!kfI8Mc-$)K%XV9z zO#0(;eOdddT{j;0@GeN;YreO6e(V*WRH3I+rGix^eBNTdVx5k=r02S*DEF z{hW2>>&|^DH#Pc_%5svVjEoqMJGncDF8)|8y>$8+CeMHQGe0HE?YsKacg=n6i6VOh zPxbHeUuT=OJLc}5UW2L4f=wZhmG-PGbW^;2;>E8?w$9-nm$qJgocZ~#TZ__sLqE^| z4B3}9eDxQL@|6F!X4}1#iE|s2b6F1@$SD&&s`F`G*?#plyDRgO*-oXT)ZDZ@TNr*` zJFL8VmOH0N$>F1mBzr!;nb5e)CDkJ5+cN*hEwj$Q3Fs6qS=xF3)L-kQotw`1>)z^l zkjyMM^|;Pup{v~ySs7P$eU$xrrDxL|CIiER?ANMb<({C&u;>cO0z@>Ne~%)R;T zk0zh>zePKqcdQOB%a$tacM7&-+?M|AVf$9MGnW6pUtg+Lc(3nyV53;u4TaR+@$pNud)S2MgA8qp0|AMz#wTMH-D~r4p*Gv z969R?wFeil*gqFputA}3OX0js{)K-wI~;v^C81PZq`IzTZokN$dB)co_zYjV+wS^) zl+lx?@IufoqX!1Z-0H0uG9J&l*kDk6t}1Bifz!+%jij~WI(@5epWA(!4v*4egHwBrVIfyJxLrG+u; z*cfAq`wBEem=0)7K3}(U`H6WUO`6i$cUC@Y?Tu~v*|Oq50=vcXgdKNVriHnkkUUov zyw8cba|%yUW>RlgtDxaY1^%cC)~m|O1^kmdnC&0>DjFHhRFY^+xN(ws=TZ&j=_xA? zG#+GI%5kb(;y(K}1CQknj1pW<8~!QI)7TKx@y2=Qd1mGeiRCM9|Jzt__#Mv|yR8ac ze&J~nYGujR?JJgis#y`q)yJ5#z2;&f(@!N&alJFjJd8Gmw*D7_!y=ZZ{hVF2Kzeg4 zLz&%FlfpZdxjAWVs-btzYWzNYLGa|SkZUIeJ0Eu4v6xuA-Gb%!d@tWfMiG7SnNLqG zJ*@Y{Ro>vM-Jh_dQ@0eZaekY1sMJ2a`056uiho{&Yu?Mv zzQ1qwbjk$J-EWidGsk}SyL#oAulk9zqim9J;y~u1rjTmTgy^-6o+(Yw{I{<9DY){}lcbax!WXKq zPwr@*ZQAT9ZsTfVG&8xcKuSPzyWpqvrG>w?TsrYy<=evao{7dhJnKI^{(0@$+Ldpn z3PmV!1xPHgP?`5&-q%yFrf-VN5f_wrA~Y@HhxA`|*>m<>*ZDmcrCl~ERbiRxdUvPU zwr7^?D;dg;CVNZt*{fS4^U{Jt+xo^u&frdpMr*dC0 zzW%yaH|YrDiJJnJ2M)`5i1a+2IWsu(mS}Cqd#{Tpl?}>{pZ@gmSS_#Kf!lE!63o3T z&Q6~9g|+Q%jZpj3cMiX|%)H&kvhI@qg-e@U*6mBOIL&Z&|MI8KtnEr>JdCP-^>dkS z_Oe)s1@D+@eZZD|E$gO#ah!QOWvv3D3;7ODveGYfPEG!Fg3^P5qp(xfiOdL;T*v$0S*BYE46Qf zwmAg$-e5?VuiRD3tMpdA>>lTHc1gK=SKb^b^j)5z%5e zTRxt(rJ-tBk$KIjC10O(O}b}$qkz-hVq!>fSBIDPl1)nOTp~$RJiOBt@?IJHFgbM{ zOzzK+FN}EpXO>gThtoX|Oih1C$NCk1+W2Uegn(Odf8O60j0ZGznibOfssfJ8D{E{# zYrf!Cz~78Jj4a1Im}fcY2`FpJ{V}WRGAiIa=3Mq=iM$3wLPKpPqpM1;dO26|uM5l` zF_R1@ANUpYa7He7gVnD~!aa}YJ85!nE{XGBu+r-dyV8o22Ng-vRX?oB1{8Ka_ZxJ_6y z$szVpZ(+}W1_9>fm-fxqI4P%PcWv9mmv`qx%<*p7skn3Ihs6)4trwecYkyZ_f^M>0 zmBziJ2aXlr+m)UA>ACnvcLmPRZVdmXUd@Q=TP)rd>~Q&QP^R8(eeDel`qx(9{=px7 zdCN)lJy&yOm(D&N;^|g!e1YuiH!p6@2?^`W=m<$wFY$eT*hb)PywkH3=^1jihFvfB z80V@VVchSq-Rxg*T4?d7kMFEP^Mx{Ii65TN>AoiGb;0*=`Q6)`cKXfr|1s-Toyc7K zL-w4evUTouxkpkT2=UZBpCcH(dh5!&d?{Zo=VmUx^7Vw6^^caYiBl*3WG?sJy7JNP zv~G{BZKq!8>#X{DVohY@e}=Eu&}`f`McU}_rBiM#^0LBbvyP) zo4;kiR1T}{dAyl#?wc>XD1K)0#xpNwyieHZne7w%VVu9T^PTUTVy_$19@h!a^UG>)|5DHWy3Tt0)(`V%C~jqW zGv}k8efP`g;O?jrj%7^3^}$<-TQ6rt?b$9Y-gia) zWb?U*S=Xdahv-*v9msa!uc-Hz6DC-fO2X`0=0N+Y(=`qt`rnS|d7IoNfAc%3rzO@#FO4^Sxh> zRkkg#S>2}mM%nUK)#MxeRp(|O{&j5Sv@IK_y~?<;W`gFy{4({e+#i-7xnAsUY^;;^vZv2`UWZSZ^C%|h) zlI$b-YWDvO>to+8KVTd6WWN4D9<0EJIpF!tJU#$e!_r2!dLM9o1 zdp$eec7{g(*_gz}Z?DgmNa?>>StvOB%`byVX-}^iUbb~NS=x9s+9hAcX31B(w9Zn? zr-o~L4)@>PcYcc8^IK~pD$;}ZOjPYsGjd~?!Pu~P<8l9gTWiyo{5xjOFH^v)uxLU= z?_q^``=eg(G5;-guK(NazqU*K1a*T9IOUdH>I>~&ud;69rbEXxH$RH*Z?n@3n{fL; zkeZEhx~l(2=D(WX{xfja1m~9X6s?{;HNmlY664ERe;F_RXGpGm%9$&>#dU6Az(ivxR?lvMikaMDJ(J_oJE4ztu9r zK3eYF*z}Y`frHIv^ZVCPYnHSBIr!Dh34yzplTuk>AwTTwA0Uby-ztaEu zY)t#NSPzrsLXoEn3qGZItlnT|c_6NA{m*CnJ>LFjNUP^KY*VmyjnP!+cHZy&POj1Z zH%}kFaO%I^DWB&p>DuA0*X4Q8e!@Jq%s)PVzHI(Gxnys`-zHfOZJXpXXB-6P z?puCq-Hm_8_DS!oJ-PJn9PPJ8IX@@vZn8hN-{HxJW6&ha1q8=h?~I=JPOi# zZ(dFRnbLWz&P)bH?%%U#i}Kj1P1ow}(N0+C$LH~9lkV@yIT!0b$~<$pztrlOC*NYJ zBb;Ztr!uQwTKD7r;r|RDx_>PD>=v%G;f%w{CwvEfKiWJgGWWT6M|}3N11sZ>U)$&T z*(uECwW;zO|EBqypTwD7c>DOG{*yl0uIrL54E{l!-`B@=f77|BI?Gb&!)lfZd3Tgf z^fbPF8PoqJ_VLZq^_;iOmKqotF`5|mE^=a5XuMDreq-7^oy@lilhn9Y=PX#$!e`jK z^L@N;<6NtVjNN%vQ$9@jD7dG8&X)T(w!3ee_~f$54kiAn)13LWCr>_}b2T^koBhRw zJG$=W@`j13)~s0cdfxuIwK_JjyjPaqW%%i!F(b}aYVqWwVcdB_8WW4v&#XNyVBb+4 zo_}q{{!Q6`=elako813*Y}>Sprvu0Vya4G%l{SPOrLVumM|7K*hsprhety6cr zv)3sXHJkriA>-SbH@8@~9y&I&;-1`+{|v3QlIA^IW-k4-xKDM8L8`}<9ECEI8+$^N z@@6GBGfbXPsHPd+VP`*e`7GRt#@lGUBRwKDxS z9JK3~6!`n>)6Re@p6eH{#c4I%;ooAl#piH|qWj&qUH02ecC0`|T0t)?XRv=AFJdQ2)*8MTd=|Vlz|x`3*fd4lR_)JzBluwoe&Ck#IbSHX2 z$HsdpUu9o-^Z!{PCN=lFjg|aOy+c3tXnj1+bHqZy{AAyezAff&b|;+E)hl^es8JC3 zNVP(4`PS;fkL#u_3YmT?Qkspoomt+i&0hMb(U$BC!MXc9_tu7Vt@HAa7F!wQ-gl$! zY+3KO?u*N2csMD$sLRN;l&fD`Qh&4QDE&^#kY1l1qi*Wuy~_=J?-NW;b`vEHk*Yf6y3S+1n+-nd--AbwCsu;eqAG5xZQHlUY=Y+rFybsk)l-cb3wO<5DlX`jS;9N?6F> zwOF5RXWsf`hrl8aHHHHx?xfq=O=X#9b?MqQw_V+*rix4z6zn~={AQx+H-W#sX6KdU zH~a2><8t{>s)2kymtE6b{Wp7;&kW7`a(3+w1Fju63J>#VeeL*D$v2-vg1hl^oALzr zyC(ZTYzoT^PVCsFcg^wKmG5V>RwVpqn8<(QlE)|G-$plYp80ITt#{&IdWiDmKW9Dc z(<735Pi6iVT+DO!>F1+WSK@3gKJ~wMNL4~r#LURH_}-%F$D?Ww+!d-hZo@a@%hCLQ zr@jRp$$Lf$7-I0y7g+&tW|u*s|}rs2oW#+QCtO;rj{mfrca(vFSM>d=SQ!lQEPW*+1L4Z z_qA4Ancew3V#E0!x`pmfBw>`#-&jz+)(k(?K!)7nCH#-YHF7IqT|W(JD<1zP!qa+Iy&T*`@6?B z8xA~O<@!TK*(KYfxh3|Hx#XSauP^O(`!P4+lSlI9AoC(oXM@)-?6y|gR12w}Oy;Uw z<;e2ql>36Wo|h-zQhcYr+UA>n;|AS>Q{QfQYH<}PQLNm zwxbK0ZgAG@@%cOdrMLV6UaOl^4lmc3oF-xQ+;ZJI{?1I>J!LOhyw<9pHvD~{oNcMR z;3WpBV{av%Yfj+zTR!V<;(~b-uguG`-d1#}Mr2c$V`26Zcc~Q;s+PLcD<%YVPeeOzILUg|c?0k8< z*s@M6;K*R}B9n*R9W=uf_{E}9=cDj8?_A*R@CqKSgu(M(qTN&G^w*zhOs3 z@?pLA50A6$iWjXo_wLyfqM`Nm?M=U?&XTt9VB?TYKyBNNXXPfFEUHMf2F-kNjSDyu$K$&`prH!oV3 z`*f$a$P(EbM$A1akLO2yzu$0;bD3@1jN<~V0eMadJH8&jzO_>PFhAR}?W?3`U#&Ry zC;Hgw)7vc1)+&FPeYji1K4T_Jup_t2YAqQj_K%ErJ|3-`_;5XclA)<;Pu8hx?vrOH zEo52w)wb+%gs-aN7G9Y)#hK=66}Ei*Rj03fUEa$+Q|S#~IjhW^?`tAVw`~)geY-MU z^2o(?%sXDrnSXBedE-AfUAg;qp8OU5>W81`oL9wHF3QZ9^K^$QuUl66B;z;J*@Ax7 z?&bRSD@^s^m7I4j9jkR*PwM&K{dP3duTv?vOYP*-JNvlFzHX1bNZYj z_l4^>ESzMG~P#Hh4BnIKwxdd2SrpPR$h-g1yU;w7Sa*xqu9*r7}D zx=D(KpH|jP%DOY{Ti_C%rT-!YJT-zrMvzv=u|k! z@jG(krKMs&ig$9c+V45>SMzk1&6BxHCPkGk})NnSz{Z3j+#TOD|N)!SK~6M80` z@iTP#yX?^`Y3}S|l}Uyny~3({&u`ybdTff)`eN>rn(w2Hl z?y4xVJ8r)&aZcOmyT`7}@0B)I90^v}Z9BE&YgCt{PU7Sf1xmx|wTM|7YmtP2KuL(XVXNiWl>vK5nf1$IP{Jxyht= z=XOz5-VtBC zQE<(S1F|RI$87J|XXVN^^;?Jj<49-u&51>8ZoWKT^<&TZBWLC_i(R?AJ$YYWu-aGK zW%)ucIS$?`n9X-y-)8;wdz-(;%SLcVs(G(y^q*SB7uo)4{oFmSAKL?WB`fw$T-bjm zS@K}H{h>RBUC-1%_IH_jF7ei$-JL1>;p5|J7SC6_d>_x;_i<5kP@mk~_gCKjJJD~n zr@!{p_ieaou&p-A+Em3}(+Ye#o{j zT(_5ThZfU@1csafP}>)t`J z&wBUONXE=#-+m#eSL@T;h?f`GB@X*6E?V&Q`Cjjw6sCw9MvlxLJ`Io5&+%EweEFkQ zvUU58J$;dnKdbb!GJQN|B_Fjj|KaW5jnCZkt!->XyX^Lqe_hw@_ak;qR=C+CU%O)N zBnKw}?&NoqZ-ji>zP9m{!QDA$_-&^9Dj!G)@ma0M_-yLa)8G8oTVAlO;N@fk^)tolmbM4KiN5?N|94Iw6-gej9(vU4XBfOYDKkEG+)eq_Z+s@y9^H@1QQd~KIY1Q5%QL#O05s#b_ zoI*bys{i_W-qkTBy{wCdY9X?)iD!^J(Ss*Z1_c8r5e;Tg*#QuWI|-e#kY?4ESR~?z3hhDotoqS^aEpl^wdgeT)Wo0 zHq)8vr_5b*a9^nMwVm=}74weW?U`1dvf9mX=MMcl{aMext{3%HvT`^R*`24lBmeNF zox0w^d#^}&?z=71DO2slcv|j3_4UT?voexxIDY zK3-vd9kXwF>9>R09P`-wY!)g{@OM5QwP#l9-XA^D?uvJIhpE-?y8E9&D)(&forycQ zJMU?leCV)F;qg<|CF^Cc6-|9o%{5)8GN~wP@0GF#QHxYw{5h>Pr_KJZ?9qrero1?h zhTeIm&fN2YFUWh{sa3h7y>@9&Bbx||H^ll49!_ha|0o?i%2O$t)o)_YI)c+T>f^cdNu6r& z3AvuE2$O|74jU^sor#TZur&-`qp2j`$am>R@|>o7S0)}xZcS<|xHzfkruE-dG84Vb zIM>E;CQSCbXo4%rt5N40)xDm@F{7SXA&=|97-R}MM1Cuy?eFn650xP9V3lhfP#L?Rw(UD9fL zFIV|^`NLq*$>$Bdn0BoXyis<1ubHjU>l3po6H+58HFxCI{7Tw9LDwauQJFy~eS(a~ za@JZ#Q|4RoGZ*ID7xbRI)!lI9>WVk-l5T99maCk1=is@DUssM@KNrHssjFxgCB!9o z-R|n_zUDip4Vxz&oO0@k*f~D;oW7~5TY@T|skTLmZV=X~3wy`^d97HJq0D9D%2bC8 z?+=_WJXR!Mo@F}0wIC(vz>y!v_^VE3ZcUmLu6(3deww=UVYwr0a{sn0HE5j5cZpB= zcJsWiSr)-Ul}4-iZcn$&cYNt5z;sY$y7al|p1QcHa!0pCO>&J_th+e(Vw*rs`<2J< z=2>-35}R^Z=7`$+nJEmZ5q!tinC`hQ?wKr;AJrT|Q^YB7n$sbso62@uw>eox zCQmS*Rw(E1U-&vS?`_wK4b4wa-ElQDo*&?v>v{9WsU^WTP8xblJo)U_mWf_7Vo#rQ ze8ry==C?TG-K5z+j~(e(yIRC^c)Q=eN86uo>kG(jJ@r2Ev(iRZ_I0&?wdEr>Z@H*&}AR@`)oqml?Je zzI_`jwpjkgllv;FJQG_r6<8k2$X7l88oW=F=bU52_R5w7`y8I|<<5`X=Y~AbzdCa+ zCp+`g1cUI`ue(m~P-y(DXH?vH{Z81n&04#9H_Vy#pzQ%q>Gw66OSqM`?pe_I$KqUV z_O+&586kx!h9}h-*7Mk(kIGyf~L7;XecC>)_poj_jR($2C;z&V;|`H=Gsl`mkf3!Q!XVm;8zYdY+u#urqn< zlsRlsOV%)do0_Mr6}xfz3){0Ue$ppDGta%L!^Y|%qui1y+VIf3{M#QbvoOJ&S$6Hu z&WkX3&V6$v_kiS=OMEkQ=!qk^6c-^_i8gHxV@C=Iu&!w zsI0HyKZDh)I*|;kwyi7A<}bgU`s|jO;Nj;A{O5MI%*%e}xp8XPO?{aa-`Cgv?fxSy zw)>;IU(ef}ZJA{%u6!vIL$(=zVR^n!OWRB2#VP-dMtl1&#<$-JoBdF~d7tEmS9e?m zeAP6b8ud(@z`&`(Bc}ed>%;zAua8~4bzgOj(4kF7I48;8nZv|zJfSxG1#h0N)umg< z#JW7ywrt^)ss1qWf~qr-A?{nZ^xc2pQ*N^Y?48F?#UBp3)lFSPyQ3JuKT#ue+F z{W|8JLtulu4RgFR$ESnJkz1ZGFqAO4rXUpRANQ=uJx9v*@tp5L4BRk7mHl!^DZ`&C`+;d%bSgrT8arqIjcm3tHe z57(3QJC`O-y~i$cK$<~Fy2&=Pz~lQ-t~JM#c&0ths|qmixOx5FEOAG-3x;!q51d@A zGI`#DBF-hJo@>?LTXO1oX3xaF=B?sabo3l0)tT+KJhhfEjAQ3wRoAQWxy68iTCOY zp3f@dzEM`Lcxx~F8IG5}IZxQ)s^mZ4YI0hC#`smShoih^T=V4qxGzUoQY*t4>IGkV zElJ5^dGO@%UdGw!)1GVbpK*Bm*25*H(#JoDaf#sz^QPU~p8Q$xeVON^8EH>sqyi-+ z+=AyVX5Y)>d0OOgK1+eIL%ZbNi2`$SZ9U#p2m3kRk#4Hjat;4k++%n^t%s-fPICXT zsRx3J%=2&ghbpgFs>5gCA^G_AYmeLAxe9-7EIBR2nLk7B@q(oVGDhWk4|{6XR0oL# zbuF@8v*dlw6Z0QIhE6xWzFPb%NXVb%%X5h(2I@QoH-D9j)Er;&c!hG$rQU^YkB=2k zeeJo0^>pElv<8{-^a6_$4-4JjGcuVzw-NOG?)7{UzxtKH2Jy`E>f4KbShWq5+MRyW>k=#wwPRww5n4S2wWeElrM_Gx?=s!d>@=|4anp zC4X)*FuZ?j%Dl3v*1Mn0Xy)O3yzr#mmBhwl46-K|6chzayltDowL3JH&s_Ej!-9rW zn>4xS&v?9*k0)ovo&O9KWxu+D7@75VOgs23N?gbPs1uO!&7=trqM^W!+Lh(fdj7{gtSj>s%&_B%PpdRx5t?$oA+@hPd?6m|JG#g z9qS}J0xx`DFh?$?D@b&wkhY2C3%`%PnJK3|R^OK4 zo419hX3pG}Z_*oVR~kHXIB3S)qxr)2teIQy!yXrd!nXL=-VG9)<}t{+N3nR+{nnaf zvxTMRuK!xQ$dn1GippgyU5gp6XrE9x;-Jjym~PlUg@>olR)g^!|5>F;dy?-@Zr%Xy_XP)4nrD&XY%P!}`CdSLQFJ6hMPJBL5!lPw{WMJb&pPsgoO14XD zr`^85@1@$u@FbdzOGJ#PsQCUY7hdhYg6PG`>vxDSJl050E4#({lUdGVY0{e3CA!D& zA9v8~IWm7{*){{)qZYY(>y9h>Yrpku_<1!T`Sc-!Q_a`qcK(|(N$hjYa@7+I8o_g9 z>ZS^@JDpWfX6GuNQynySlSZ%jdiIR>uY=yPER1OWw4pS{|2%8)agh_x7`=TZ^Ji;> z|L}F!&~G@~_8{G6R!Gm!p5&Ohi#aThD&9LhtCVpQAG->lK}M#>k**5e&nW>c84*@b zB!0>9)z-dT=1`ZpL!tKFk+KDPUa^sJrqa%}7p$e2w^Z;|YHzpq>Xl&&Rp{wy_BbQT zlVTvLZhLS+xLR0&N5-kA1u`X)-;wYA3NYbxG4yzueOEd6O~`DK|)a%8}Xv(0KU{4Za6TxwHZsNQ51tTIJus`8`? zxp`mS$$ASNI%(0$HQ^Lj731q!{gs9@0-H5e3syL`EpzkM%5lyNfqSsy*mQ-6-%{;)7bXZE6>Gq#Bq9x!F{xM}Tv%Kgm!OHJ;9 z=lndrEcwdhZxrg=caUL1yYGCX-~Cln(0CHh zM9;*=OHsr8>h^S}$+Ea6i1+0Sk*R$21kv9#0UW!9IY!Yw54 zC`;bh!*)JOhxK4l-=;h4N0Q%ZTAX}Q{6fpoQg3E&*Mu^w`P1zdZT?q#uXGR3<98cu zzRLbx8B}?5qjKw~_IFo$c;;>8GrzOsmPy>pCyhLBR&Os#Z8%+(er?INot#xNtf~P< zJ%5iMGf&3n$ptu97u56{NqXck4CNiQhDy zdK?s4Tdlh0KSPFjK6hf>bBXWYe_gANW#iU9_Fk&T(CwDQe}?iKAswH2PRlM?vt~x_ zV+*?PGt#h~h0p z{QK8mTDxqy!S;&9ySi*Iw8egWy2Pe%-hnWun3g*n3OuQ|WvZ*Mthy~I{JnDO{?gso zufO!axtjItic$~RIKllTr<_C+SQ5S_*w+3II#|witnJmc2dzoEr_Y|qe=i>xX<+RU z<#ABSe&X!~693vJN%}o{6Fa5KylQ?*dvVR(TgSN%u8ck_dS2&==XR~i;KqN&KZEt& zCr^^s;w~%UZZ?EZ4gKhe`>!j#Y*dh2^sa*mcyzVe&@ zT7UYApWVBr?dq!8-D&PI~CNDn4(8D7}cKPI=AwjQ<-WVJMr0_jfR;gKi-lt?;#;G-DZmPzfp17a2@(EX9!7=qrPQ}j$^Bh)w6WkFy z`~I!s-ENT=_6Sw3opR^|f5eF|-&b7wV)fpvXRry=+?m#0Fr_8< z_u+XFRdphZa$m@rFX%n3^KhR7|BA1xLZ+@^_q+8cn`KtZC&o#PH*P4){{1)Q{@dtf zJ9c!v%P!wO!7a#l599loKUS@G*Yv8mXlwjbt2h``{UOVL`)S>q*)wJ?;aXzi-BA1S zW#HG+9kGj-Hpd7p6i{h$$vL-!xjxn2(e>QUdZoQD*fuygl%3k@r+jpKy*hrxx;0`RnlFuq&#OQ2 zT#6+&#?3`CGmA znZ2%)D?-cjM9O%q|1)T96x(ZltMTcQ%&wiTKO>6!58v9Up{M71MEK=~pO@OD*Pe;) z>M1hxi9V^=_%5mMp<37(c{7KE>b@&BIx1YNtxn5&@@%{UlkX;M5Mpt)B&Rp)EHk0emPUSiJ{>QINtiJZWSjF&8 z%-%~D6L$aHRKJ#e+5P+vD=JK$mIbX&UeSNVz@7QdNyCzDA$wBERPu&>x2?xlwsj{Kj&8)<}Bo-r6@w)=?$3&tj%fB(rD9q?*oo#Xo-4m3+N=sajHsdv#}O zU-*O*GAnar7;IS!@89w*SZ#Cr_Q|A^`Oh90zU;Hje7$P#)#o!No>n@l^o(V4>({Vv zi+|fGeLM3ef9va=xysquPq*b8XPq@TsL>nOn=gwd8KCLa1wLeuREu{&djps?M(2hgRq3XQ~*+c<$VAWShg!jW3M< zthCu@CoC~%I4PByU^ID$+>w7v0%m>QyZM;j@tcvHl^hD3#pe!Rx83;9Wz9|%_1L+! z=QgK)OV++Cl-@hZB!Bud36}w)Q>Pd-d2=yGW0dzc;bIxcB2<=rO$wAC*<7 z921n9>NZ(ON9EIT*(bKOn}d&6ggv?+u(kK>uBo2eWu~kDm~P9t`d3em|JJGR${!yM z`#eQKx?vLYz7q{EkKa}KdVFcz<*z%Gc20fIq?w&G;kf<1*4^eipMP3!x%GPLZ;^MO zA2?fUZ+73Fq1&*hH1AI6{#U~AHrh@3w^Zw*u6s9rJ>LGGVWkaEG=KiW+x3S6m)*|1bmvai#FME{ce%y- zJ*oM0;H%w?*Wv6PXXhx{ItO++a`Eohyx;Gi7^5RKMb5|U`iYBMdfd-cOsHo3^XkCW zM=eWyjSj83zjvDZiNxD4?0{W)FvNcqG(2b-PKfA5gBEso)tb%*EC!#rat?YuB`6~>yhx2u~<1|K#Z1F?XY~ z1Wp%zn=@N-v5JjC?-9O+uL|FerhQsAbzRVU;hmSa{+711`Kg>@yzDaf#Qn|J|7fP} zDBqeJk@@K`i*Ti{MB)d$F3U_rk5;*<3Q4 zQxfyZHOc?6erNfw7Gv3}jK`nMo}8Rg^PfRb{`t}jSJ79VPkoabOcHb7sq~0QzAC)` zE0DKshGgLSWbvJf;^n8FU(ijA68)HUd9q2@Qs3Vzj&GQM{Cl^`thT+@-f|BMEcd^eM_sq0L5m#}gZCzV3N< zzAgE8@#6cn?>yBM71; z8-7&X66^X`@#N0I&eXcaw*1?xu5Q|~X;+{5_U+SLHIA&=RMcotrqN_Mi}Mcldy2ynE+<@8D&4%@vh<9h znUV2%_1A$X*E;Ghm?hmmb>^gq^Fi#}mnv0E_Pn9gb~H~dqwCa%^Pd@CF@E{7_Tlt{ zSu$rX?znhF(Dq1wzETV0!=A)OTSwUy+cs?2v@Kd&!)EQJ$%>ifZ_Y1VGx5>tTCsy~ zp6u;YoyxuS%In>yWh>v$J2ca7U*x}Yx+jI)q%?yWBjn1t?pbKKzSB!95xi|v=i22h za^kv9=rx_k$`g)nwY&H3qRr#-%-yGox;PH2@AzhV#`DpRhpmsR7cm`C=`)qcdA=@d z%{{HH=Jh!pXP;T{T2G$1rHpA;sFXq6M_%JSmlsa=pZc}d$Rnb`TwuW#&%0CP+Gejf zz1+uj>6ys~B=XxrCQq_{F1Pg%zgT39kKDcQ)w}aP3Cz7Ax8rS~eeZkSXJXT~8)|F+ zTo%?}_MpD~h3%^88@l%%ym!sLt~6uIOQowewzYd1nO;Rtz5BHBM*9Bc{~4l|&OYL| z=6hkHs-XC`ienDvgKB*%Q@{7QtyGzItLMQ<0sfruC*jFozI&i6R}+-ThXz=Q?cXq z7n#zfT37U|rQC0o+a~VG&CELX&Lb{UDNS2gaLc@zU)G#{FLfi@@u_=BRHTZUNAx`Z z?OC6CgOB&C9=dVs)kKMfK4+~;6#93+kG%h3qp4%Q()p(+rWgFoDPu_Dsz^9~B`o;N zilev8oI}#Sr>{BtQRunq1MEm+pE(*KHHI% z_R;U0>ndH{{*-)q$%lQX-aW{lYk%?F`yb!(b|&7rD*e7QY{LC+?%7wIlFz&szuVJz zUH+cwN z%b&9IV)Ofzojr`KC}4rJNd(x^$NQ_=Kj5z{OrWisf9B+ zC1sB<4gGg}*F+!jO*Rvri1lp0XCL)^C z#TQh6EZO$KZn?=1>B zZ#X$DO6oYTm%3j~Ht)*(jb}@BHZ`Q|m{#+kOuBZ}o_WT5Cr+8Yld)e-wBc=lf01oA zdt+l0U!_vd2o`R;78pP{M!L+xud6Q%E3^Up{yymj;SjuO+b+~TkqtkuVF zwQKEs5E@j?<&*qW{gw92N7*MMPfks-^X|MObZP#Krwuk~Gs-nj6d!l?%1|h=oB8XS zUr_bNF3FEu<}o}7u9{cR6=2*``sFAy%Y(ivvvZi&OT5akk$F<+#%2{z^=ty;<3Abi zuP?XFc<+7ep2b%YhGxd%dA8OUn_pgP+Ho-N-<0;{_S4rgFyER!iQiR(BN zK;h+U^Ms3@%l@jmu!@mgBBR6<- zWM@v3*PlBj%UUhJ%3ZZ|2tOmQ^<47&%dg9R`khLTh*6R;t4hB#T|-fn`GEzK?d{Ny z7k*!kGTg4@Py@iX^-2y-dlFVBZ;WdR-X!`aG~(nd zi#M(|E`sG#tsTybDz{F0`TR!5xg#w-iQ$$H_zvHiv%E<2z)y=~R(*d0CaiNy(pnKM zQNPRjKf|vT1_hy0-UpwnV)VCWEZ1!vz zdL+N~^MsXY53hV#X|uHUU^f#x*K(Qv483~F2Q5{^6dLX?^~{wz@sde-mvzJ0Ia5U< zQoMPdZg-QJ>bzs}_sp|WCwiYwSe)mXrlMwBYya!Z^B7-^iU?!gRiQtQ@82seU=)33 zkH*iY!s}NqZ&+t@)Z~-yDy^2B)b_B)3%)EXTFxvH{8_E~m#~xZD*5SI%yXZw{F8Zh zt0hZvzLtH*yf16So#fTud(LY}|!LDu`zS!Q4J2w~-NJN7E%*Wau!!bb%wKD}Ej z@#(bZ7Po)P|NIMe<4n&Gz1bHO_L*DbXUGS}@84Gj9(Fs}Z1$#cw}iyk?`!S^OI~>S zeP2p$wefK&j*TWc2426`=X>q`yPoC2t)0a}jhFmq{N;EOZm>>2!E8F`v>9(dd*_}4 zj|R4f?VjW|>7K$`0j?*F?S3sQ+5|91dbyIGgaGLo!dF*9J*I;N6yY*ppYjTiXer}eDX z3{5FI*?WBX&qobA61x)vyYzTk>N%FJTE_hDq)x$suOctbG_0N`8Qi;|_ThWq2bSmj zK7U#e_wULZrgeA3k~q&Rl!;tgv#>p=Dt)VMbKBontp^T1p6C$dXV|p3srs^qbA6eI z;(6KflJixGHzfu475Mvn?wYQDBthM-d7?+aTe+~iYj3vs?-Y5{;Nbl5nvnnx&(}YH zGf#Qdeca~3?s4Fte6OHrlZ&Ep+wXl}r6ig5#TMUqd~a5VQ1bUAg98bZB1$d4F4yGO z+H836vHjg;c}Yi=9gNs@@B9i9vu^%;oxM-Ygv33`ROom8IM!VVup7TOOj51+U9mIx>5r>d(= z%W2X$t--E!&caf>DDEWCT<_Y_~h)!QO;AR&3qX9q@AzYEpO zpNl7YE%lI|FnQkby=vcXZ#?vPUE%r5CQEtT3m;6JSKYwVY_a2^4CN}>H z5@6K1^!B)g3GacLB?(W2GGiF$OXeB()gI+5Fj(2dF1_M?tGuIs7w5YtzfCeCZ!Z(y zztmLHFRW`f_tKp*jZ>Z)Hd!96Vm}n$RJFZVPdN5!*R9M#^YhyCiod+}{BZn1eOHa^ zildb)GUxejDPsE1kRe}N+kS2D&p+bd~wH^27XWKir+Fm+WvAjA}S>B+>KyJ?5QuQ>()+PpeG1x^_Wko`ViF2#7{IvFsbMi6j>L}dS=IXQoP~KyRZ7TVIo1FR`>6DK7s%7 zy;X*N+ikT%ZcPc&`%|}LcHGBD73Th3E>gLx792P=sq(ojpVr&<)<5p6e}vg8JMK8) z$v#Jq@2Yc8fo(Q_(Cj1If89OanUZ^5{M5mzZeHtc?T;NcBy3COW8Ra!#7`@z3u*{`yK0+c0S(GV03bFr{f)u*Ijk1KQO&M@Llj#_^zo- zzWe-6=D4Y2-T!ZIUWK;j^)+8SYl7=n`Roqus?>`Rvt_r{vSm8?$NACHe^(;&I14o# zetbG-sr*NKmFA~K3*Gd>bK<+KqBG>gFPpsfF5}dxUY@kSV&07}tL6E0*V?EqjLG^g zG|~3doAxuW?%g}IZIA2Hitb13ow~g}ii%6BW24Xi1dYq|OPqAyEPVJVc*o8-?v$^lM{3eP zy3Jl6;l0AW2P9w2iY@-B`UggY!4-pFd^CwsL8kMIU== z?sl5KlwyA~due3mrzP7yK3Hb1{(Zk(_HD%vI=5tcQ@V1W2)%3lAYmm}&KUM^!z7Q? z-BW5NrrzBp#9kBTFRT|`qBl)wO6a`hvoh;9vo(L~NUmO@Ib zt=^yZ+4(b|?S}37wWS3|F1!}Ie6+pQYs)5`IjpwzQqhl7rf*(0v4nSzIpeaaJFTNv zd|Q_uR({!e*IcQ8|;v45Ciq*8RVb)sMLL^q>- z|CTMO7s;GeH@{%}WDle0H;o-~>His`HZT9!H(zv-hkkOv*_jfb9KU=Mx$5JxYtv4R z<(tfA9X@QPp(}RDJTjW`Ooj4&)1+8`pRGOae3N#2y;YHEd~rYONq?V7^vU#DhyHdQ zIH;U1uhUZd$oPchIpffGHMxs2U++vS+o4`|-dN-0msNpN=Do3exp-ZzyHDWrvkW>b zoRXUgZ(K31Sa`}^r$eR3b5d7xfn58IaN+uoQkTxoS)`rExbJ(u*V)O(FPv(<=CtZ< z#}g+G^&O_`Hs;%ek@)0 zI6_4+xK6sy>6d&|U%W_++nSWwMf!p}C48#FCr1Bqy{b3$c1=c7|C#=0Pj?r7S>b=A z@<~hWvIK@CkF*E#p733{qJG2jrS8qw=5mG+eLr*$Hx<5Hyz~2l>}_Y>bXKiezL1jd zdDTm;oYR<`C)v8M4O$rbF72b>i&{qh?&NJdB9rWQYn5A0wvLu*lU;f8v9#nuUXiu? zRi>r=^!T=ZuIi7OE0)iezdiMFj!5hgnd)EH@)m#ej_T35wrkF7CWF*ZCs}3cf9)z? zwxM*{o0&pK9kn;VocT}r#l+T4`>s58lN1n-lYUWuY>o5d`}_y9H*tT-{$jh0@twp>}6VWZZ5?SI#5HS5!o;%^!M z`YU?jx5N>jP$JFH>ou+e79XYFcTX6Eb$3Ip-Tk>Q6ic{Qf2e%#n zY$+RV)7AS==f>L2caCi~(qyu@^5@)5h9~p7ELZo%cSW~fU-ZTOLb<%ClC$jDBSPD* zYpDh?tjm6M{fPV3KQ`aYw!KQ88ezcBBhk0>%X;y>KUM@rp82d7@YBQ3?R`vr)Y-is zuPrZ6`zGwGbX-d;_w9wp&2O|{;GDWl_!9-@egN?vEqhy)|oAVevk$I(4W0 z3eo2Z513YePG4#I%6^OMp2@GmzB?vOuzUM7{F%(h<~yb94Yal9SV+oU{rIz&Ke>B~ zpSWIn@k{v|s~_=5<%ItVeS27_(IOBe4ud1UPt?Tt2!FS~yJ`Ekj`k#SerEzjWn6Kv0#9X|TZ;z+JyX+q5f z`S(oKv*d)&)W_T2{ihUlYt41Wo)-75g7UJze$T4<<8HXhS8hqeiGti4DeBknTtEL^ z&U(kz)*$Oi4-6IbE&pVxeEhdi=Tlz6!VS^v?*cwtzcc?WYi<7`r61duIlSevvf1dl z&n>ax-@QYN^Sh=UDk(0M@rc;e_PEm4&3dkhj(TZ&v$1F_FAO zw`x5aC4Q>p`Ps6j>*&vzXS=WclKh9QTW(Lkon5?B@nquu?DS>)+dnTm`?0_=Yul&F zyu;5KE0XvNvY(yUlUTBG|F7VbIZIl1s@rOQw-;RQz2Nd)u^fiR3c-o5BW>hoOtW&o zU|bWrWyj3cZ3{S*jhHHB>ZW@B(~my;iPuqd+nYr ze6k~M-PtW#{EQ?1y`F!}^|R@ZOs`(NUtYwtsx5ah`-kI8m1`V#G~J7QvS(Jh%!=>_ z{rOq_Y1hu|e=GJ&-pli&lX$sZ+KZ-#Q@lT?Ey(ZsU^$6%-Brf}uJ`BF{?&e-{-aS_ zz56rrAG+_~xkO&zU`wT-(OIbpXLrBvU%oY)`*@lD`u_|izl{HhZDCpLX=HKk z+5`g$k)Qw6U1ArtKH*q7GrFws--Y!v>mQnhUA`Gr&c*n9{UrCQt zH4pSLklu6nd&QHG!aork9(b21bu_I@$>I8W`JZs^rQ_eq*(Tceb_n_f) z<;tHfPuyl#<|l{Dn?3pKv+BRck90_hwLN;+WAta;!w(Gq8EjYH|FG5h*u`ZFTpW0h zRv2!ub^JH=f%c&pXCb$yNqmOaQ!a)VYv(^FTe60C2<6%pa%)dANdqPSizbvfr z*V*JMdhcoag!ex;m|dF?dy`*UuYKo#hC^4FJYA1moEgF>)OJwei+xn+k1dDo_gaQ2 z&Mx!#ww|;5=;fnjmuLRj#+)RUdqcMIU)$nsALpL2mhmVT&z<@9>)MdT@>}%Rg`{6l zek>xWeN^_bl>wWpyb$^+K;E@erze3@Wk+(k!{^n zn>e$H7n7MSSu|d_uUz-XG%NGfyJVY?oA28n?I{lzyyN#Tj!*d6p_9k`v?}-M-ZBY1 z5}G`7(^BW>{ZT*vGyD@u)zcArt)P(LGpG1U@cC}p+*@He5|PKEme_vbTcd@bU_pv4Uo$HO?&w8+?gE6&#CG*QT>HJ4;7pBfGJGpPc!IwE~K@5#y+wy%p1z5lj*YF}C2g4K)%euevFBrF$u_olCE#u?{J z&yyF;G|irzpl+m8zj}h6P&= zHD^Q}EV$pfuPwG0u?bFH{!-lF?mjL>CE44~!k6}C%WBnK3To@j2{+DEtC;>)@X>4T zzbEs{o}ZTA(=)m4eA;^P29xumyALf~I=y#o)AHB1cJ+7O)0iExb4TA7_gzMIFP_V8 ze%*EC!___FQBw?Jrm8v5VLWk+!}QZyn>a1)pEGyWO!>?2{UdN;>>}M$xskD6x#!-t zl*>PkySQ}n@>@sCzPtEb%>8Z6BgVX2{&igWgV_~{+u8)hf4!d;aqwV*?eFlo(iG1) z>ttny#t<)~1GTlQe_d}jh^Sev-lKTE_|a$1U02_o{m)<&Hswf9#Kcc2pZKrMcwN*o zokPX-UQ18^!mp+szZRL)XHRoy@a*X{h?aG;)jGTO;O+2Nmb)@jnU`;~4h@_4P+iGs_kmN%8{X7yRlmhjbfD&;&LxYmTSo4( zg?}|S-dN+W^^WK4>GVnNE558%6%{Ru5j}Cqf6k;eOEiA&db;Y4T!F&o)po@P-oJer zs5e`MYu%)i&GVucimLA2;IDgToq)M^^X`wP^LHJ4*U7EAMmz8A#645XZC1-2o2ud| zuOPGVMSIWhOR=U$SIu6wO+tUZ!2@>L*3hmD&P0{j&Yw8)cU4`=(=H1M4|bDm-l0~z z<^aRvIdyVV)2v^296DMQe6sWS`?AC({}~t~?QeoqJ}_ z__(2yspsui`{0=1^FI1TW7!cSiBID8r}h=?mrePiwc}KL z=S`Vai@R*gs()8Jzms=Kg|~CYysF^EADM1CrER>TyL6r_SCgx?yKU|2qtTDPXsb{8 z-uaY&?~at``+Pm~KPG8cJl>&`?&qnohw*icsg37Jg)KAVZ<@|Kz9qI||KXEaDNSxu zrx~UC9oU#*7!#Fkx4af)hAre8tCp;Q9nJ^ zZtA!Be}s2GJ~nyz?f(pi1RrH4x82-!lILHByyS)@nhkK{|v|K#CLgq&DB1sX~}g_ zDDcYn}Rj>F4p$XO?fTh<96v-5r2XE(#pyG#&={RZaiLa>BxcOWi2NdK5w6sW_P>Re{I^` zTdVWWOfsDCXI=llHDz+o_R8)Pdi^Qt&Aj{1-Bd%1C)s*_S$%Ck^LtaxNnx7}7clO* z($8UWoO!FemQ(2BE1zEb>b{RTYV?*_qW7dqe^B;{3nt-$b)OhdKU|(F!DYq#uPS`e zi~UUbN%eZUMv)TRE;&8svhRKwo7Vcl>m$RaSfk_#QATb>`^7Cpd(O|?aqQyT7j{#3vrR2IF){LO0Vj*rlhsw%H@(=;ptdh`e|F?z zO^LAJOU{>jO60Cy$^6f-dCSXW#(t-%N$IJq7U|0C+?Q4cEf4d1UVbgp-D4hi`ork$ zo2nPxSMFixZcDP7_%f=jPT;Cchr)L5o%Pi=ou~Noo#VbPt>KAR3g5ZKaL!b@gjb9& z3}gA*{xL0Q(|4^oW;8r7Jbqz* z)E9g98pcVLj#lZ@H?p5NRd8ru&xi1X+LntaJ$iOV<+{3%Q-^rDrA!&qUU{D%G!)X0-TM*oDK|uih1f9KAAs;^*z{^=UstZFau7B{H2+#!dUe9{UeW_pUuK zJ@$Bu2H)wH9{$9WYI}>{)JcB$)IKZeL65?l`d?q;{3T!hs(Qa|s(4RM>AB1AV?|yZ z<2oj^(lYC2@1j5ITP_EN99Y%zTxZYQZ(r9|?^X7=#6EGK?hSScmO8ts-7Ek2W$32t zo)z%$#wxev(uLRdd_O8L^(I%<@MuAU{MQb?=iiSnT)QRfbg^9O&X-clJGQ(Qnc%9E zA(9$zd9-k!(#L)CQY&5mWGKb7)iK(wj!R$jC%Ihb+qWXa1g9lS5~^kDy&jj&7tgwW zX^*-2i`7>uo8Jj(ubU>Nr4^heyjIieqAm9kdC|3xrk;xBTrA-dVq+{H^~A>g@z4Cz zwr5YRw-J5t@z$RAp&z%1UAA3)vT5!2<9Cy)yPkgS@9<_>okQ= zy!`4vgW$dsDI2;2Zt$N~@+xvlzrO#{#>XGs7S`;`JtEnc+}dxm=s!c%N?yj4U7hL~ z*E7N<7@SV%y0rD;6VF1)@LT(>S3P0>TBncedF$wPxxaU5{ujl! z{ML*OUYFg@L>yW@(~HmHYt-yJd%Hf|xO4KE>e6dA_h%~AKa~CX{>uW@EvMpc`2}te zmN?DF`73SO%f*tvrEPrnznT{~r}^HbNHzWLin@U2Y*7}*JN-46s(SgWBZX2vhv#$^ zy{HJ6c;RZ}&t=$SwO~fexrY%STTg1%3WeXTtzGNJHx;fuPd%F&Mk zzgcvvEYawBtW|iruC(OkXE!t3eUCzNV;=YCN4ah6ed@_p=ElsxuYFu?=?1NCjdfm2 zULHL6?f_TOkxT36Ykd^61I`0J2Tzo=cJNX_wKh^PJEXZKFc7MJ>qhP-0^#Bx6fwm3h&REB$kr;d+|T! zK#%1oJe!%=y!D-KzO!9bnwSzg?^5`d+LpFEo}u<;?EdR7&B>koHc)pHOJCsU&D-9t z?SJhX-Mj8YiqG3)5;b?LrLto-IWTl4o=)vJ`20`C(;S!HXEsXi4j+%tNvS=2c~;43 znN^(}){p%ScD%nm@nt}#!)|Q}M!TTHwzb9Y1G%qAKQ?Abo}e<}tL5(<%NA<4UeZ0T z)G6i?C~>a1=W>vPO0Npz%qI#H|5dCy^e{?%n!85C8;@h<=4&m}?i^zH!P2TwD);lP z|0Jhfda>#L{iiYu-p*YWuG4TO(C=IJR@vrb#rypC75~+0Ju}@fMnZ9?(Zc%s&);ht zck)m4pOm`e&RQjlZi$?P$zRthyY4;mY+|Zvh;X#C6a)WkjVYMP`?yjZtHSohZX z>FU;9UuD~DSpzaBWp`XN(|r0^aB~XV`yIc674}6MD@-k$X~K;l|MfpE zKh1a&mb7M)$_!P1_E(zK(uTXXORIcy^Asz(WRm%5h3)S;lZlcno-!M9>MGga%{%bx zYWbeDHmA)^8x0d~ySeA_SIr9%`|Mu!bmlbMBk2u=ClbG`t(|-3XWLoD>V(Y&M<$f@ zB>ayuDN@BM45?w;K1ZN(+O)q=B63(B6?<9IB?_)qk%lhqti z$*C)5&M`4a5L!B8;+%f}wJEVeM~oii*{ri=jo+7=Dts_6VAJQB#&gQQtvPAtb5f;c zo$;LV^?uyWZHpzG8Qj=y=KKn{GpUH-xPzv%Tk8zB2&=bw)xjYv6VG#>tG?E8B!=nF zDe*o|S^m8YLiZ9Gcbs!IuP~f@r>CwyDkyTsx(9VJLac^Nl{WGQ43+S2ylD0orF)s7%S znND(xsqA4;pZL$Dt0261z3%sqM;UCrjrGql@_z2!Gx7GvB>~aWF)2G)wr7c)dXZcs z+b}g%*7om9KK9ecsv7QEzV|v{DY;!NCe{CxNa-JqqHx8@Y3!0R@`rkIr}|wevTymo ztCDSW%;v?XbN*^GxRqUA^k*|SJ!dVxFEcCbpvA#B_Oo{;UYqfv$Ezt^`Kk5pU%`*L zce1SBTKxNxze$7tF3%(hgF}V)Cb=~(k)H6>-QmVjuA+qpRG6GMeV4nkcBjD91hWU9 zER`?KV7$MTq1_^R$L}gB$!?3X+66KXf_6>K6WQTBUGkNo_tQmIi;) zSmOpm-}77ho$DV=j>`E}WA*j#lS*;34xb?TDf9fksxSB^e{Ij7bAA@t>bs?4&o8dY zlv!r|a;+Xu(VE=PC+q^hep!F^{;le`dAZ&Jm1~z~A1-YVxb4XBIBVjS@E767?*={h z`%zzUO}#2ku`j9pd#i!x^9}1yzrUp%xbw=M09}PE0xCxRn-88y4SrSM&655yGWBA2 zzww<;{mOZz(XOuW<}Fu8BB6*65`>mC@+zt*r}$y;e7!#kI!-VhM^ z#2@!;qT(cnNC)exl&=f)K7V4~QFQ;!WnNZ>%`$q7?{5T&G4!teYO&;n<%{|#w{uk` zFON#Iw#F_H+%0>I->Zn>hVudSX~(_tqFH{In8>jH>{OQl?IGVY!SnIvV9x_jY74y% ztNhuazRs7`uP)#3%DW3wZ-@K0j14v=74bC>bp?Q0V>!zAPUedHGP?{4r9JT9`1 zX-@LpK6Vp}P@9F1SDdd3J?C+EP9KL!;|vXlom|E9*IF;|U^APlee!XkjmCclsTiIo zni4OJZ%x>6?w!?_#m{6Tp8UGFfXi#nTM1@{+DuMm#mRHZYA*&OOck%ynE8^=4zhWePbTm)pPt+dECqgpA^4zZQ!$Yusy1w)n2UjW=?|K z6xjolx6d=26|~z=BKNUGmJY-6=b<5Yis$aT!na@Jz#H3_%PpTb|5@>1-K8oyKh1{S z(=)k_G*tyXdHY=Qm7nE;X=!&G4>d7JEV)xC+;z83-K{E-+>v7b`G$*k(#{ zO8m9ea464nJI&`IyZ5D)rb_86+sr%c3}+5=dCIWL2-&{eBcicD$gjvc=t;^BnR$E} zsRH^b@ z6RG-28`M|L-~ILbf{m&(JDe6jjgMkGnpDJI#&Bt8YP@Qck;t^*zRIr)9JgqvHcGd7 zDz7-6}7SP@@-K{y})+*99)wk|CBSP99G9y1X*4amIn)SCSPz&M)+GyC55_=&5!3 z&V{4p?{v@A6}kD@8af=%OAUH)M&j>*0$&zmLq%_)0UC}nGx%XloXOB&ewfuo!aI!;Vy^WyhYs%myS+Z_W4uK<}$e}D^l$D-Pz%I zq5rv0?UGz}Wt&IyKRvN<^0Q!H_-$!|6ko`nv-2M&R4lENY@cEG;w1C-rIrU1L^dS3 z-(i;cw#545G?wBfj+YJ$I)3a+^|+?$tzpa&`(n~w^fsxhw!ex?@Q|3{_7&&&t0b7& zolhw5;IWT#$*fCBU?^-p9-p5T=HAa8R|=!gl}Pl4mCv zM6Ej?Rs}cZpI(#0AhS~D(u@;7`5vA9UVLqaphjS`;A8uV%LN4r^&T1Q*SLG(yUFqb z1p%ga2Ng<9mNvU2X&6Y%+41~8!&L`f!QC?Mf)gG*4ZbvidFt(^Qxysyzbs!7Xm$Ll z(XOI0bC$BBN-{@QZeiZB!TDZ;a?$LDd%?P&A75J%d*XS;0gKyvlG>z?PnTd2Zdg*p zzb^CAn)Ifp%?WDJJ7nvo9LQ$rEm%2;^Bn(6cLs^8Cr&l*`1Wnt?)@`3oIET~{tNl0 z!j}AkN!-Qx+L*JoouV6?BUg^#a9X^T#N1jZot`6W@vw;0)7wh@u z8y9dYi9J<`Y-w`$U9sW@%dh$QS)OWeSt+@HKq zE?Rgh`%7OXkBi}X%KEKo?2P-iTx`ufTVlXhbEfp0$bqRxUb$|Zo%V=qv6jbyS2>(c9$|=nj@*yd&3~8BI3TfeXlsU2kxu_6u&_JwduyKKP%g-A|u)4=*mCuzD5`8+9g~e)@N*Ip^lqPvoz6c_ltYY2I|Ei2SvW zC)dvQ)StCTX^nFVU-7IO^I}(nS?@GeGgCC)Rm&7^DPaipOg6h*dF@`LedQH7|CP*3 zePxQQy)JpZS3178?9YOxs(xoDrs~MYvx1jZPprqz+%_|F+cHOl~0?>;l6|61hd49 z0><|~oN`Z(WPLu8;Kbos_T_loT>qt3H`;g>+m}Bz+^D>cQLQt1bL%ASvZ+@#-U&S^ zsXWQpCxpweP};_bY0^*k42dW5|F&{A=GdOu=r%vIQ8FdMYJJ z6lU;q)+>{nDfe^L#9ezjb=FDwHd!YM-a619|31LfJ2J^^+r=F-PpcdeC@Q{@-01p6 zbfWRy4JwjHn2e_}TG}mVes5^|Ds!Du*H_6W^Q7AxRW9b=+1OxJ#Z)!%*21>PmWLuo zWfo^0Rqpxeyz_i<-``a`=N!!Vw1oeuPVZ*s_X&R=_}jO7-$?6@IjxcuG5vI3;*9p7 zz1wU3*KakSp|RVZ8V5@Ery65*DG%wpJ;15u!Tl zjn$+RyL^mYCO-Z?Z|58Sr3xxrue?dxQ~Bkoeadz%A<5|a88;7GoL{-8DsePhj_7Yu$QQxwx2l#au^y ziHu8Xs!e>%>D#}ocr@?Wtyh_iQ%p`QdiZS0X2HLgtV-AHPV0Jf^vmwZ)NSdLbG8>h z-TrjPL0NYB=d)&?OKDZwc|~#N=}jkvj+JZ5u(9u}zF6y8mT|Vu`RKCQGuO^pZ7}1{ zsa0&{jMtX#yso-y+P&xBv$a>q?`Thc7``&VQswh;uT`bi-!@n121@(nGFEJ= zc)sp_)~fZEg=IdMS4{qAcS3_(zwqx><*hP@s-{1`a(0V#!X(v6A-A0MY7SId9xuFZ za^rp46`RwyT`F}yZ~3$5m^;tU*JsnBZm+!^qc^>5={%z+8!gq#@0|a-dfJ-HdvZ2x z2)FL6>tj6lpnl$0n_E56XPxfqs#YIKGGh(%{|d!P9!mQyCK_u`RT1uE zt8W)Mui>wHWV?_;^9l9DxKxF|7bC@`)-Bgx-;4SIHD%eMN|N!L{u%zkh2 za(Cb2y%s-a1}e`qjfg(0oTRBD|3UPZ`?Z(G=R>~Oviw+oYHPS&+2?HvcJKV}iLxH= z$hl@Rt76W4>(i0RwTr~Qo~`^+r)hZ7Y-PTtU8Lb1_c<$`?|2)+-<>?^P;_@?lt;PI zuIGwsVU`f-l^I(Em<>qoY03+>sqHd`rmL3Hz+{`blE*H&(ky5z09 zanserChM6pt9+h#?RX{e<(nwO#~I;GDLW?Ke=C`Lybv_TnDW_T-Qtk@$rs+&_F%@zdp_=VUA}E;dEE--q}4lQG-NGApO)`4yK?fk?7l@jEbM6l z4CNEg?~i{Px~?X0#hvJm`f`hYWxH;j z734H|^9IM`{(e)>+Pt6bb}FK*in-!g#k}lZ<7l>sf0-;Cbvg4Y->|yM_lNr3&`;IQ z+r6}M|K3;2*VV2*|9Iank28ib8}1qW_A}?N>Nu_JvQg}Txxd%b$|KW`{${Dts`1{i zd%LfCT;5>Mvcco|u>|Hz52jIG;BwF|toPJWsyUo!uBO!<6E3H{>^ zhQ7C~9`seNd6jO_wpJjbs@88#jqkODCJ&((9+w21SLI6ld-=X=l}%>7&bqdL8IN+z zr^s_fU%s`Wsdsn7`{wgeh7&LRGd=U!CT9D@x>K`W#O%DLzB4jZK5KV+=HD#+x7L3& zetRnLu;yj)B-Gw=GQ9D7*3)T9Yv#U->Iu}obJ{@3UBQ5{>4U|$6%DC2G69t~&3#w) z7Ff$!h2<4Z-krS3DVKTW0=^?$vCC!mZK>JQ#P2n+;lS^kN7?5Y8NYR7cPjk4;Nz7G zObN*nM0mcaqfBtH`K54sC zWPu!;M&1-2pTg_^8Lm3A$Rtnn5}8+g%+jR5>htj^2LI*j)%uLLD+EnF##!L`Mzg@p zxre8~>jJZTk$V=SmYeNIzk?49mPn`+Pk!mZc=GYSileN4j&J7(zsNkn_jbwSd3>6O zpRpG=IDC2Su+EL$uabRMXzWdfuPYrg8#$V_*qHjF|70#LUbr0!yQRvk30f!niadWd z$kra^iPFiimQx!;uM)lKmNVnzf~dd`*xnmy?c-E^|-iUI-AiN1COuvm*&bn zk#<^{P&}u^?u&}JvcX1q#aC4U0TU!vu*gWwa=qj2`F-;w@t(gL*+oXnYPqWBkrRIZj+>?XGgqS@rkv%b1S$AuZcacn0t>#TesYU!VH}{>Le{D&Z*aU{2o$8I3CEjU1^zsu6Zt{4r&Q)3L zb=unHRI>)tFu%R7Pq-RsGc8{ z)u~>4$*n9|>q$ZYOI+Z=F!q}buV>jz>y1m#pIX7&_thXQwp)hpRjSIwD?KG5leCSe zg`Tts>EPS9;NlL!$EO^X8ASK@^gQ_$eBq>I?j}~99Z9DrfBCjj=}0hl`!-bp!HpkV z^Q(BY6e5+UY`fs|bmwuKq*)FIF6{3)YzvRNBu!yAl3|nJz41A?;he{f0&z>`ugf-Q zEmAtbmU~#aE0@<=aE1D_V~?7j-f~d*b!kcnQ<+=pNxLIgCMtPq>#W`^(<$B~ANcyq zvK5lXm5Y@pO1^mh((9V&v7Z4A;VkSi)0}_S|5`C)f~f5E4E0Re+gC1kSF)<`nQeT` zec}62O~GSwmdZlPYL4%C74P(l&e)Qz!7kIJdBnPRrG}FJjO69EFE1WjxA;t$V&xZm zpUcxvr+<1jV?}{usLcGTDh`K4J;{J~iH$oy*q#t+&`jLsv#x?`hw{Ct*H2}WL>NOQ_|( zZZKl#e=qZSR%NEAcwM{-!vfwVg0D1BsZI-1;P~cd#PmSpKZ9^U$D@jg$LB~GOBUVH zczcvF!DF8P7H@`0#av8Y{ZrDfgiP9*%GJ3;LHe5OaPok>& zazLBbOfK`!iZ2)!9ah#YNSzpT-Uy&h}X)*o9sL4VTPjChV> zMfG<)1zFn;YUSylaj&>L$MDP2^qqHpIyfKyeQ5PDTdkOgd6`>Z}6{G+wYLseJUt8;4w^Ur{@GwmySo>ocx(s-9y)L6y2c;>MmHx|`? z;4{C%8qhG&Q)#NoVw0KLFV8y59zHI$uUzPfj2_!9&v%@?odsn*t*OWSx9Wv4`4&q( zykg`cJ^lRId5=ww{(jnULj8%t_wNhWNv1?Pz314k5mU4L<(17%hCx5Sfxz34ScX8s52Xj7paXFoRrup;nPiFZ?=d;rME~p;XE(x*} zDPs6G$z#dqZyE{-Jq3p^P3Gf1DXpQmBUSs-ES1STJ)zwt7Egk`*(49t@m>3BdrTvM z$tmWYr#L%vt4O|v&%!3F#-^(N<$H~J7T9#RDLk2cQ2wFsXOUd##sq)Um%3ulo9U z`BpPa$@IuYNqh#9JC_{`EZ#q-R95p-!>5A6>%W4SR_x236taz(Z_1Se$L{n8_(#?K ztl21#AR^oletr8(zXKYq4#9J#saV?Xec5yK+%=oJWlf?T(%XJbd+Q+NIVrrS_D#|X zc2>)K;#_-LZC^aj7uHBi-fO!zbN}v~c^=#s=0#lTTbva#|g`Y4g5PJ3M?gGdpINrYeiey)J<7qcu-^m-!s#~&+_?871DCpm?!o;UTRfY zcUkS{hW#4s+F=B3>+6>)PMo=^prGhZ>B4=9Pp2Jo^A3`E z%zCW)X;oJgf1u;L=I_QOl*B&`9~x6$lTKtERTD|r0}f#S^4-{(~=&B zqN+Io2b`8nD5yWyJol#d$(LRXw*QvRDzI<)J=uZnDZ7N-e}7 zPFOs_^Swhyk5_2dJT`W=rQ0u;avu{soO4`#fvna;r?s9@+JR=1u5{}w+IfBK^IRYC zcfOt2@(%k)^;O5;JnuA`dAq6JZ_c&thu=3!h0g2b{m;<($lvGzo5!7+ch$LeQ{R{w zWJ;CInB~?h<-(Gfc58pF$IJNK$tm;0=5Jf|Uax!Ovm`^gt3~d~)-DyxrY_z(!6fW? zf}qSh=AQXp*S2ohex-AA#J=ndvxy2}Px_8`EnRg`uP5lxrLzyZ)5IL?DmkA&d*AQ1 zb@h+@xJzH0i`U)Ub+k}|<73%*g~vayU*6&V-k>GwMM*v9J}JB1k5<~uIC^*0@>3t1 z9OJ)j4v9LYxlix*t%&1K{?2=|EcN#)#@BIMKb&{m_2KxNztxXsZ28Y%=GuD7bJBV> zcgI)S=WMtiyiE?fayfeD)hY9hPd$I4zR~v8Lr+b!D#N99AzRXuf4jsv*Jdtzv08FR z*Ug%f^DGORl`mi0xmWpEo$Te3i@Ak4DvTbQd-%`4jE(uvz@7Th_VwvC*<~j-Enu(t zajVua{EPq1*9Xcb=`DRE{X#uJT4TxfITj}lSTf)5df94W5&3Ri{+riM;eAK>+vbZc zn7Od&^1*B0r}Lbdpl7_N_WsjH1{;tB!gpiN!9X>?_-W1 z>TlbX-o8&cDpQJWQOc&^eG&I32~X~Q{&jWL8K=+3%FVA`nA*CWgS&V;%a?VtJZ~La znR|BUYODH$KN@}4EEnI`S-Z2-;^fh!jQhD4N^a_{eN?FuI3Yx=_zi2xuC|pAfA_}S zJN9#ybaVmB!W+3V#SK$+c6)X?Ob{&mY2(( ziu5XS>fUUAn9Jo`9y>qi`ZdqACTEE<3$C3Hqdy$2Dx12jBG}d6JZN|4vo4(|cLm<9 zGm66Pj<2m0*{5q5Yf^UUXI=WQ-=&Ga&mUWJ^3kzc9^Dfv?e+II*B(9Y7%xB5TYN_7 z-nXKg++9Qx`V%*P%x_tndo!s?b(Z~ZW%E<~>#r@oZf9H(v;O8cj>p@4dM5ZZ%NsLj zADkZF`1WzVby1$;)Eg5HUw$2$XDTtB&13VHNh|odw9iI*&s#hFt*WYvN&IJ>5u1=}B9gGJb-wEaa5p`=)mfl%w-7Ou= z8*+;8_kDdjz0P=(WcBVl$JWR$?3r-nKSOJno!Lg`-`~sh%3T`1%RGPCRUfpuO6Zj? zf9SP3#k*PCCOZ~=Hmu>eUuLsJ_Gs|@N4~dI!Y15f=CBUtp7i|6tWVkdJC<7h97<@voiCR-)G607v=VT+WGZSpI+Lj9!+@oXlen6wDGjW_p?s_XK0n(XsX?}rMW#>aRZg(K z5L*0^bD5sG=F9V6mc>-uKR;2% zm`R*h+nl}6&34*CYeu5xk;apD@&6g(R_^bOy!v$e+}o#5*d4cc85geJuUuWMa?WAukJKEI z?{txRFra#j1Ry5jkQd|A(=2efExi59OXLnP2!Xw8GyBj9_72la>^fza`in%^z0vtKyThq*B4UGcH~G5AAgq*=}c=@JhX6 zTTHz~f>rVPr4_G#obePCJhjo-LVNG7{&$lD?^ay$H!VA}FrLZfSlRC`xonnoH=^9v z^~>tCoX@XgNbamTdP4d3WzneT$9OKh5n?Y--r4WOp8Ph>v;5JI)E4Eq5B`eMEbAWz z-2HLro5g0pwedby3 z5_^pU=PkdkJsTf?#dHQ&{2k5783zLo$Q|CAaz{~zTkv>cyz0#GKDGTO-c4C%Y0D44 zp83YcJzt5P<>c>8%U8;Lej9f(^HJ$6-IofH{~3Ckk3YS&$J{SXT&^ZqwBlz_`&7HF zcV1Loy_DH?eVg;?X0TtVmYQngZ6{`I zc7ZK4QPj$LF!*(_dWVo%hIvCMv&ZB2M)Mxu2w(s9QP0(L zFZZ}@exPM_L_X)D*s(vwC*`&#*$Xc0QSvij<4N4<{60qJpGL>af6<3NaeNAVWOLG` zPSx{j>cmUpT6XTo>IGkWzt&h%?)yksrLf(te^QuD|BTHPdc+9pht8PQXtN7T-`8U4{Oj1xXRzG#} z?}O^A%+TH0upoK4%KFLbKODX;^Iv;<>!h+n8;&Ul&R_Xw zrPV5rtmC1%k2;h3EY+uHvs)+UNq<~1JAQ|-gj9;=xyOBu>%8iPSbDZ>GG17_^a4-g z*JY<4acgJJQ{8!|(b1FhqgLCG5e!-sgeECPIlPoTG)~F>pt!YRpZsN1L#GCbudrHv@7T->l+cR#V^(!VY#tmpi;*aok2Mh~TPwb;`nfLNB7O2ok>}S0IdV_MMr-&dz7D!2dHLug57Ap5CpZ}N+_n6R13XuA z>)VU7E-8MtM*D=q7r8?_SAK2vtl7!;h|STtAtN@(Q^1|Or*WD}%44~`t-cp7TkSNh zZrc?-yK?f$45v4#Pwaob4RT$ry5Ia2muI8Wv4X=_8gK0kzmj_6`UDrvC2QHNJ|KW=Gp4LjN;l{JL~@pA>$lgmLiv(dT%GWFXMGS;<8kD zb!>^>vy#1r8+vkH*)p??ZNhqn-$^@XTn?FZt$fFo#O-dO2G49JpAWVBYcI9wW2OIwGdu^KEqIFD zmv0SPolv-Qn`!B^1f`kIwU^FbbYJTF?WIfp%txU?JTbCIS4%~|o)K}du(hY=u<|px zuSwinw9c|Ps!UT5isXB8e4TahuPecK;*LF=b8E`AJG!SN*?*mxqrp;Dbt(Rp(x z96TwLZ1=U7W%A3<)~6yD&HdK2XU4}n>3cOIoh23qPB1z!XHNC}sQqglzly6&TwPqZ z+h+C56zg_1`J)AY)FxmuojhwBkmyK{o>!plFVt%?3I>uGn|!8w)Di7pH> z&G&YCno2BA?rg08nI*n*>E}G%ciunWJUPM>A`2&^)SH9NQQPjF^l z*gfwF3_oWi^Q_4V`8X+NapmntlPkmGX3EY;+Hvfv>Vz#?3nnaFnrS#q^6i(UR%Z%N zD&6&*bi#b%m0yf6qu1PujyZe5<6Z97-OqMJN5r(`@7lfZ!=t^k58TS1k?cB~w^gU_ zzQKvNafTl@J6=hh|JLYs^WN_|em5& z+otW>+*cTPQ(KmAZ6#}4&o=Lh-A59h9^gHy#)D^6{C{`1k68l8P^3$6HCe49{7m`O_T=bUY0IvE zJ1ZkTNoyO|1`G9hS0C-;{b+h_-FxLDxiR%?+@G@V;;EbZvQFY7!=%)0`x?``MA>Vy zw}#APvwnVS-(|+*6?=U3s;gwq>n)kvANb*1r`UQ4gPFmncKm$O^5@`3@HX`P#T8EH z!ZI!$je7ZWYQxV0i}SXeYtFY6MQbk)SS7NNL5RJu@7dnvP8%=j=U$Tb5S7Yw?3gMe z@9Zyltg<(J?b{n)UZz@v`dVk-`SdsZ;n^FPpZ&YEdE%n}cM}X7Z;PIN73Cr(=J#6d zB~P`;c7|Hl>iq7>zS|;od=JkIJTXn|1)s%w`5&E+xFZB}|1*^Ia4Na@&ulNKo7(^D z>CE7!nma4@zgeTMooAjt`$v0F-!Zf9-@Z#bdW!C_f03Jd`u>kw(jGb>&9a3jS@*@vD~>B&J2UP_yo2(@zz7{Tz1nlxk2lU!P7glnb^h*G&D0%P zg%_o7tv@>3*HTdL!wMCxbCx$JUiog?Uj1>`ja>)67d3F+c+;}Dr+{51eAa7T)w6H5 zeHMy*qGl@lsko`$YpKb34Yn}Wb{{_0nt$qjn@?T7w5;jZUeRy<9(#X$I3{m)PVAl= z)7ks-C&FyMAAMW&F4A?C(7y0{_bTn?YIku+hHfv(+O)~!5{~ z^PHfkbHfvQEu2GofBsYd(e&t+HRsZle+J1G3csGMxcB4zk*bz%o>_~Jio0rl`uu}$ ztK-`5Yg$}>cRk>Fuzqb=iePTfq>w&|zOT=&oGH8Cny1TdJ-Xf7tys$Uf=B{y3xUx?8En`Edy2Kat{|xJ6pH1a4p73$kzB^0@3(x;n z-kKgR%;zq;s#bDQyWR6w=l=+A|Mp<(N834ag4e#zPM@ZF>UhC!m*#!OFYkoE^gopS zpMm|ywp-FOZtA2>GN=ollHC6^{%n22AK$e#HrLl~z0aFfblY$9O8?o462<%T>mKwy z?)vNTx7Gf^@_GCp+1n={`e(c^!ck`{bx3a6gWTP*tXTqRE$`}Y|YpB>-l zUjM_qn^!8hW>cAcP$_@2nbqDEbJs4|>11Bn#dv4y6M6Ca)b-rH*(!k*Df|Y1&Il_A zpL1VYx}WVoL&ka5itVmlwfx5d*;7w;xjnwWUvk~#V{$e-_HD}4`5JLcOlFef9sA{8 zA2$4)ZlbrO2&c2^YVJr^>n~G!7_OG~Ybjqeh$1+oX#rg$@p9S@rE<9|bZ!+6X zVZ+}R8{Nc$`+1lDU4F*IaQjSrZ_u^g z=X}@9TUE*O_1oHiyMw2`QgyXG&$I9E^e>aQzBM^<(fuCJUiR<)mpcA4r0Xi(63=+c ze$K3N=F8VdtIak(>XzOyhxJ99y+aY{kuAMLR351%z>=L_!G(Xs1*_I2|pG;y4%vQIYv9TKSO#~e^mLZuRGpNYswb;Wj1f};rygFi%*H_ zth+vC^E+QzD-@}x($1Q4o9Dov1;6{Q9;w*8nEwn>m!`UYIQhzy?druZsq1^zDwJjKynZIYOf+xag0AMEAN!LzCuOX= zX3kYG^XDe*XVLe&qI&oz`dUjN*DXdDq zy>q>C^h%TCoF?~Q^EpgjSA9il*>)D^CsU^v{ryxI6P7Q|mG|bBh1FEizVp!^&+T8g zYu)0t79KY?bjhqMzVm3)yVBp>>4qC~Z^-Wp{L~y%`@Xa02GhY359gVJb|2*yTnjz7 zeTCB2Bb$~_d6Ar=-oO6ZhIzT7+DBzgKCLuOJGVLf<0GXhk&m3#_Wt#=eLd-;d(T(x zWhH%&i_FYctDm-~+6t0lGx6t44NJ!qN z3tv{IZc*4~ocHc)^mT2SLniD6r|a6UT+4c~Ywnfr!gDt5xV6dsnmPNV+SO|-bk{}R za9I(%N3g=2nZ3M*-+UhOOUTdSR!%RA}a|!@f(Y0TWw(iRa-E;M41kVKbV2LLP_zRraXwv%d1yP|Q~(z~$k5A&nS;swY)JJKpqM%w=9bOY(zJtmmuZ zb6K3ZZ%^F$JW*-ik8^(#zHmova+5qTRr0EzPv)mdTHGx=ZhvcQ3_r)3e2DqLx5WXQ zG~-V0-0ro+sAkD_iT@0*uS!l8on>*iyELYc>6g@A9epFWws^}sla_`r_`d3Mbi;cd zm4-djzG}aH>npr5Fj>#$!@7ffDcl#^muhV5EA!}nV`QgTX8CjPQM=rY9rsL1 zI(Xg|p8&0$x9}{M=~Pa1tVt|-Y6CT3_xlGw;v$isFq)>54k!eOgmy zkISyjlfu`_&-GQ^bw?w6h0}CNE(@)@pMxsb`QI|Qoz#;b%FJcIa)s)S4$G~x^>;sa zk88ehX?w!1SJAzP|FkJ9D07$>@n4%_qo7$H^z*dBWA#5;le07)N@+T+niLlz$$Q)@ zW%>rQ%R5_IJ@oFE%X_tpSugr?eUj_0$|I49pH{~2vp=+G)=QNs{weE}3|V)5wtW6~ zV&vMYi7lU({C#}F>3-`&PH>9}nB5&ry^O>@)T=S*mEcB&vEw>V%_N4>+gjNq!e) z{;~N+)fHi1i6qGr>Q9sI+O2*YD)+g5%Em(*D_h!hPuLw=FgswHCF|akss|1n`q*_b z@qVy*z;2r&VHshirglTS!in#yyV|tdxYlM%iAHi{+@3SPnxZGBik6L#`Tf5yJhG$qFRG#zevXH^Q zlm+i@e&Xrhdp^)tr7cX{;AFuy@xpz^Q!>uoH;}LQNkaj&DYYV8F2^5&D|yye=c|K+aLFJb;+fZ&kTOLyE6YUy#9GjZctdn zk&o)@tlN$+Ef4IS+b7i)`}w5GyqdDLLK8o)58$(R3`zNHbK(9WYsQ|COK;Qe#H@RF z;EK_zyr1SWJd^yRz6fnRs9vTl6xg&uruMPt4yJ;IjW23>mG{XUYi?sm-T61uY2sD> zs3jhakp(pe&h{}p{=72TdG97ig;Hh-lPBFtI<4l0Njwn;k69=+iXB?BuxRbHujenV znd= z!V4a)Ork2E_&;1YB`L|lwXld=Zhn82QsHiK{#{0vsjmuOI5*OLm+%abVT5@;M35m)X8N)hl;~@w2|_%2Dy@sO zN!fCRqS-B-n-|aBvwg!7L+_1K5}rJf-Lqm@gI&;4&)>@}&#%v_;8_|tec|2hGLK(- ztdMN+n$29$WqJP6gqeX79!@(|j3-{cQC0u-Wn{xDW!3Wj2^&8P|L9nzA+Tt%<&l)R zy?-{}ns>fu*TaGxth+7=Dmcg<&W)dvG`GQ(d-_C)A~sL;{;Yt$=OxVV9!#@k{Ldhj zy-7nZONg&P&ry+4jVBr{9fFb!Ib{n#Hf2(&lV#dQTG?M^}>OhPpR@7_3yu0 z)%en532VB<;SY`?tIjYw?F`uI*ys7{R}iz)u|v_PGZVM>&K8(fyL{5l7q+jzO#jC@ zbIBd&5Br{di28fO$zig9l*#QA_Whkry2Y5M-) z%BH>3Z(dv|xM6CW;Bg+#U%yJ%>zik~ab$imtIwF3Q>xE!KRVXhsgs#=!_o47Kdb)u zs6Q8eJehPi+xmpjqC-bdJp7)%&ekw~iTqaHCz~@S9~b%fNTMNCS;_G-(|)skhCbV+ zo}Qdpv-P)gWnJRW2KIOVN~guVEz!OB{F2_0Q?>W&wj3&+%ED*)ZRNTv`3Dn>s;)>R zu(8+iRx9xK&Tf8k$?$a1;n!Uj&zV;|NSnBUjhnA(mapg)MuxUzzdP=($Eq4V-~RKJ zQ2FF;BmB}k@T<6%L|Yuk*CmoHa}S#cA6H5KYO=V$-m%L;@x%!Unc}k&3O$177c5|K zV6FZtvV;BE`MQ}eJy;G%9(;RXsRH9^=Dse?Q0_^hp3Lv%9bbF4r5=|!9_+y7s64r` zkJmJ08rRxMRs2yw+?$$i9A_5UsZ$p?uc|(ZHJew_L-jucleLta%G@*V4>S*k@}Ic* z)o#n2JeBo<4!kVu&n%wvUF7`?p5)I9Lw2fGX`EE~wnWvvepz(@)1Mvh+-ojRo$AT6 zlfB7GDp5ryea_`66C89ba-Q@}xxn^z;S{A$MV|kp98Xw#yuK`($|}uz{8!VAAJ3`M0W=(ORnUNS`Bq+NfDlcx-ASLPXrrJ zO1$)Y#QJjjlj;jcKW_bT+`(1PT*xQBdV@{zORs=c><78$Fl8=~I+DzFWX|W~Ow(LL zlbG`)B!4|>o_d14=kF`m(*iAxuOiBqF+SaRdV0=o4|X&`TNfoe$@d*i;K%&6namT3vIJ_@@T@J+aep!2XQ=VV`6g7yR&5C z36a%1`;6Ocgu61d&M~LUEt+H8IJt>k^2@4c-)o(tKzBS$DoVzJ00T31$ms`$Ltc4qCZ}lG{J+uk`$V@2Y0Xxhw5y z_q?V(c(zzbG~vL*insGJZ=X9nP2M=wTR)1$V4H~2oK->|w(eUklUWZNDllKReOYd^ zamJ%<*I$~u^$=SDhjMe@zANnt%}tyZ zCv9z4C^s>Ez9LkyfJJ9xo05aUp3k#l&-S)3o_l-6VB*Q#-CgUg!?zlUrt0~t6wYgE z5P8}WF}J+r;Bv9v zJ6^umT&R3Z_-xQ#hubIA*P3kPDmw6I?{WV^hvRcr#@m(p%t>eOuhU4FIIU7|##8@k zqWtG-E8qGAZ*mB&cvW5`@qPKRPb;it`z3iCljAC?Mhn)H(w|?P)cvDhZ5@-`)4}_RdVO z`^Nvpgy8|-r4MZkMep_Ro;6I0bbEL{c-jN8_dkMm_ZwHc6@~B!AGF)CWa0;wpoYqG z>?;>NW(|w*d#Ym2l^`omJ*Sx>0POzj2+5pR>Cix+Bjk+w4__N%eOL# zI;4iMmp!-9Jh-sYjV<;BSvABvkJ0+Z! zGsqWyS+?!mBpKejBA>k;d74H4oTINW@hHzymDKc@b;b@1DL=1R1RQ3NTmEsWocAe} zG=;`C$#)hDSuP2SWVYosG!%bXtimVo=eXo?=X;HPkuvVmHY!?{KQ~zY{(V{ed-as$ zXR^nY=RbGpVSYd1F?(j<8%>57p7#lSMf_`-1m)bMXBI5Cuz2$O%Iwnz6eb$Y-kD@+ z@0IAhJC9%4@?2)XM9I^658kGV@Jzgrf6MQvLh?TL9V=3uPDS}1+4%dwH<72;K}3(hyQ$Z$dNbpe0E}CgvK4?D}0*w4SjeRBsOn+WxKLLjiWEr zCUJw2`+tV0X`W918P<0{y(Q{ZxT8uwDoj8nVO37;=^c|SEf&TbO=n;#JYmCMQ*}{h z!NZU_ji=@rX!0zxzsF#avreG+y$`#N!!pNv3ns-D_xxvY_UG#Jd9}tTxmA7tTDON6 zSynZOC7*cNRlH|{z?uDu4hM3d{H@hsl;)P4pchg5#3pHi*9?!F1;&&6q+id9IO+I2 zG3MkviIQ(7^1GI%g{wT68aF@6fkUOnUB+dFy72lojU&hr>3cj z^Gb`xEdJ~KeXFGl0}yoUKvZaS-0MJL)C z899D2RoT=QR&mYfxxJ#y->luW2cLUh+8+Ln}{ zf*AQdwd_lsIwIzFl=ba=G9mLN*RfUHPnf(W&zt+g!DqStR#m|{57u#7{M#x#m@&)Im+>F-i2 zZP5TD!wYgts^;C*Y}rv3d0Fc~&BX-ff3+G;Klsw*wH_vNH(9>&uS$sAxpmL(Z7!Eh zeo89ToYwy^!9lw4`elK$LPw>i5x>bhy&EUq_s4tb zE!-+Tue3)mI_cruO;*Vw2Uh2O*OuH?{wcIk>+H$%55t#D_D$RRX_=viqNeVi9Ixl{ z_3BriEB_45Osf25*rVxpu&}vr-d7dlJ$f4zgO*QfwJTL$e`)GhCTHCfGowx}7FrO@ z{r1GKmH!!}%ATaLCL8wN%(z={aQBzDv)WGjuHGDdDqz>26?gjf^cQ-6o3gd#WI?ZC z%;XITnr~0OGITvQ;l~YcvC|pldy0%>4xRmM#n)rY@MU>)+s2*x98At9w@nb^@K<@f zEpzjp&+a_t0{T<_N=YwS4qv(O%sm3tMj6ukVmk|!{VJ5>*mjTH`bn+a)Df>@doTHKV+@!_yDev!Y%c!!cWlIX@RO-&3{i<%tHgBetM_%j;NUAyHCVk;o zApdL~XaCZ$q_ zJ38+tO`61^{=0|YKgyi(TlnUe(@z&>KV5WG;PaYiYOb^FUU__decY?T;ZJhQ)c2c`JlZT4uU%*5B; ziTsR&<&yo(+imwJ<%g;X%NdfV9sl_^izQR)li2p{ zmC2_%9V{oz|K{qOpS10>uh?3o>#vvvd&=IryJ2rr%pPapB10=bM2&; zce_g&zW%A_>OW^>Gx@eqXaK7rlXLR#eOu#91^KtL^!%M$_Os~Ep}=`F-tC)O`7GA> z^saf18Y(`j9^V#y{BHK2!9S~U(bO+#ccvP|RGt->WODM*ca{D^|7?lewUe^~CjFF0b4s?U)(?ijf_h%_%?k>U4h?^^S#f11kK6+YjM?wsc`oH6O9U(1{)Rl#DJ zQzgUv_(P8xOFZe@%f43jSD0UM^~UZwOia&hD;MORJk|W^Ur0mogu<^2l4br)HD@>& z;AUMs(LHe9@~!OitY#T7{``H3fuW3DZpy>+{1>YDd=+G?ACxYZNngL0K{AO`dBN*0 zpLw8JNbfDpjR)UpSeHF`uHN%agvV_1fjH|~KIwLMH4pL?h^zl_c<;1Q-Qt)A;~trf z56Tzx)V^P<$x=M8c4YyBx~0Uk2B`uIg-bon2j52OAf=sb`#cPZ>_!M*a|F`9xt$c`LcO855LTRhOaAwl()B> zF1~G3bwONNLqu>#frfG(=lfqFjdjk7wtiP1uUve(h(kfh{q9kQ8AsV!?&l6jCY zscPO;o3M4Cru651i_t8;HkWtTX1C?fjO@-fudA(_a_GgXi}Mz|3o3{xS;8X5b+>-0 z|I=w{;XMUq%lIt6F6mQzx@6^+ZJ(#+eTi&Nspe|(u#YLotl7h^FfFE_uxmqdpMp=z z6FHIZXI-Cea&zgP_RqlLmd1v4rjJ83&Kzia)$r$jFUKas43{iU$vaj5M7556-gi6W z`>%;Ng7~DX+@zn%2flZ0Xje{iX0ZJ=tEzdLmhq=1K8s(M?^!&)EhQu}e`d$Y^IH|d zQ`5E1EGP&`2$*`H*e1Gvs$pu7S?`YXE0-PRONr=UFitKmlaH#rr=epMJRoAu8OCEZg`QuOVgzxMq+Gby&GqIT)2Co8_KT>IGJqt~aW zvFCo;GJIRcDJimf*ZTKtY!=HCnGYE~KO=OELvg}myDuFx!*a|n8A!`;O=Zc|6nk1c zvEi}8^R;}+9XpCrK5af!v+Bs#1Ix1+^d4_yR+f3_VIlD@(_B&g+!Q6YJ1K!zz8p23 z%QUs{P|xP{Y3CE)Xr5G8b5IgmbJ(;;j@K4;AHwSV8H;cAOx5l1x zn!CI?$i3CIO_DL-NfW#3uF}_j4xb*GP2@J`3P_k=6?-$Zw1r>iJ2UgW)*U>FRtx(i zxHT;m^x3aSO<8m-bz8M&Xe#%{&f`;GPjn2~+TwS;x_RHV6z2oBy)K;kPZU3USV-h8 z-mbn?oG~)`jFKiJ!>7WzhbA;F+`w1ZdgA@dV2LOT#YxX@cJ1B}=G=S#Z(^WDueS@| zQO+r!qg5tfDGX`Ih?M`{yVFx5tnk1hv5I9vLTk6Y^I2!){$*v9(YY0NNdlrSrovh} z)!dW!?#n%_S~vfp=R0P%AK^uo7Si7~r8HI7YW9faMz(nuw>)U}pW7jQkNu=&&vRzx zpI7?YGg4Evzn?DGsbBDA3A6Z<8m6Q5R*Gqc>;WE~r}Nl9EbTwpvN+b7QmJa>V9T+D>A1nCSt-iJ!c!-tl)ioGCE_As_lRHP^hM8qB{q#Jw@$4+ zR+c=c>OaHR6`ZS;Mk)sa9%()+G0Lx98aw`-L^JeV$XxLv z4nLXN%fM*;{L18WS=(o@0mP@KR93#r~Mwu<1FSTPg8GiS$?K!Tg3t<_udaGldGCMZy(5C%6K)B=ZuAQ zSM!CkWhRw@(iZHocxhI@b{$8H9<%?`{_L?NMAdcL3?s1vUyXszN zYa9#ccMjaWfkDXV_%nsNDGLO6`Wg~yx~gX-cpPbEU8Wb`%6TPdqt=%oZoOSEDeYHWEC2`l~ zi8lnEzt_A|WF^1UfcKeMq`0M|rOo4)zFJOs4u1aXvM+Bt?_*ield|3MN09oI=#rhv z@*2TC^Xs!%O!6i)IB;1%UaH}=D&n!q=SGiY1+jDqnThl2e|`DMpfbaa(Q$`dy?hp% z(i@$CV;+eO2OhKEo07OVf!*;&$%@Y8Pty+ASI?^CIz2~--Fcpdzzhz@;HEwA)R!ur zPVMJ$wC>feuXVd1QdD_<$I<}KgUZid_Oz%FT9bxHreV#pJ|;!E>*TD^WI^B+jEJidLY z`m|R&N)`I%ec@rSE?B(qx$RM2$@qIl4+P41z86VC>(^K4a;>cNJWfOD3xH>02~7 z3vn_pT%L9y%UFBvj3)_C$`*E>cy95^VTn#pXqVx0-hQu8F3<3!J%zib&X$<-oX2>c z=Yl8eZ2cW?E$O@V$j7AY%}omnnalqfHm?iI-`sIy+Oem%FH~JUHs#)laD{*qcNS>& zBwQ}uQhev}+88OHPwT$KIsWvp&8n8?$uc+Rl$mxsdCoNEcYkZOu8HlLJBcqf*>L73 z1G6XJMb*#Uk)NJ_SLNfEb#2!VY_i&tcW{aBp}td9#jm3TYiv9ERo|u*v7ZRtAn^Tc zmB^-=kgKfQ4XEYqGw7Wq$a;y8Elb(qP1reoVq zb8NmN=yz|vZWb}IWIcO>&V{=BG1-GRpbZmn-U!ry{-7)#&)h+ z&bM*X_VF}{cD@Zuo5M4COD_AZt-3b+nP#)}d5Ub-8uBzeNWcCvcFQJ~t#dlRU8+_- z{q_&9aZJ9ZVxN)C)4Uz;w~H>!f1va(jDe@}?}3b;b_=dA&#Ysgu(Qh}lF!clOYonw zc~KRrIo}+XN|Z9_`DI^TI4P)bZ%=yc@!~Tk=i5FUWAcix7f ze0BSQfQ6f`JXskOY}`N7z^bz|q0MsJV!=-nEPlF1Y?yR1=UwTEgv`YZ$9kV7KWCq+ zyno|rsn$(rx+b3%I;qsJDp0UoZt6z)!x>-Zv)FfieZBuq^ES4Q67_ZNYpVo%!j2pg zntJ*^@ALg1zwOOVG+lLK0>kWShI{%J2)_-lGrgsHyf50J?Z*LUbwFR zTllWaYuCNocQu)J>xSmax&M;xR?7XmdMazy9PxQ7yRN)nEX=lhf}7*dZSP)Wy}Wq! z)4ZO|e7DR-IQhX}t=CBpgEGTgEML@azO-|%y~D@ee;a0nx4nB>lF67X zaBD&1bswk{l9Uo)bJW)G-X87nAH6H$Ht)JG##Np=Td{rNw>59$ zA9??@E1A{hH!s6Q!{hMdck{D;-n#KT$}dz>?$)Uj-%ih$aLoVDAe6N^p_Y5f70V_?Pj`6P z)^YOiyr;g!wRsJD_w17US^m*1sqL1b1jq5bLsq~3X6uLiSdg$KUvtLP*mL{R&m7xh zX;Zz+Ic>Uyphd=$Y5x2CKg`csTl@H0o4@Tlo5y^QKYb{wF7|%CC1HKBWyq9i%Qr7S zIy<}Zo2}c!ZM*Y~^jTTc?$tQ$4T)yE!rYy7{@J^ex2jUUA6PFw`H^VLw#VmY&Mork z;N$qV=Hx%+SGMr z#}@0Nc7A33VBqCnd~^PzlFP!ZXU^=`d(>5zpH#cr?)~xd>C@imu1}l2(sxqsLAkF_ z!sRrsww{^p_F=LTOIl!0{|=E%@@Y_c2B17wgI%KXpC$s@lg5rD=Un zr|wx)s9b7$Uew87u6Erq>r9W1BmA?1eDZ8pp9v4y$K|nOf>2#jyydrLd%s?J+H>i- zZNsCT>T_1VEZX|6O1j2zTlJIOvtFK7Kdo^07{i1A3}07mnP<-`CLQ?M@LnqKwC6u+ zS2x?6S-x$kT`6T|?V(U#vVLvy-_0E_)FxXm{AhF3X4}VzH=PS_omWn2zW*{L*QQe2 zPwZd*7Oj;LQ_nMB5PqROrF44Qv&qYy>bv?i7b&Xr%&S~Et*|@4Akcf^wO4g!y-WLQ z7oKA5^l6{=<@kbC^FPcy&$B7!P!FfW{oOWs=L2J2Z09T`ZC!gtEcrjfHrd4q7unV49;i9|aoL^M;otc- z`MfA#I3er4lyjMf$Hd6J9g=ZzdipYL7B#F{b+|mKD)eFAkv7dq z3|t-yZgdn|hHcYpL#yEv-JMKkaxS zzt-p0nNKG!pH^DZvuaaL3KHeWI>Ye^SaJou~mVZo8&%~d^uQCgqh=>^7z z?a)zlpRh8o;Ca_}zTL{+PfuE%Y}~rRaGsUaQr(T8wzJyE9_&@v=5}YLF#lx5-!hj& zpY7_Oa>2LCt>xf;EfI^0?1s35=m)3T37+a8{ZZw|{i#m=kIZxHPbVE1CF|WI zSqJr`pGj&}1!;*ZS-3qv#}phT=2UZz)8e44#<$7u{1*Sauaxq0c3q5tdh?sir2Q3h zW|wJCU`(@I;kxbGt=EUEE+i%~lpJt-E;psx^EDS7q zwXb%$-IVqdFXOOfw0Bv7iosS@9z8)jW4K} zsv3A&fW6S`v4jzi%)}FmZ~5;y-Cb{N&bQa{tj3kt(@bWY3+{Yi__oS=`l1QPZ}q;F zX5m}DyYSM&E3;n()|N6p`|0Yf!0`FTuUYZinrC)-oLlm6>Ms7J0enZBHXh?EvhMd1 z3qMz3dwj2R?vy3ja~;=ut$W;L6fw_TcJHev;=PKl!E^tl%-{X>%dhKJsya(rp8v=S z*&DH`W$x|bYm;(~cJ@s=mtDE!QNVI}4c*@5wy$#Su4$^L8nxR!pLojH=&ahbOU_Y2 zZf}FB*Zr8!5BSr?o|oGtc`e*?^xGFvo2aA9T^hF8y_2a~e*fC?d8;&wHo3H!cieX8 zfTy)uq~t`v6;`}tEq{3 z;IytU{xU|LoE~!>E#Dtst5?;$$@tG^Dc5{?jmeUhPx~cazYRF4?69yd;$QNFyD8_h zF3r06_U*N2?hN9p((50FrbW(}_E~9W662i8c#HoGuS2yqZ+o(1vHi)uyLS`j#>)SV zdwhEP_o8Yp)yAbw9ygPV7EcXs+}$^|{`;k)CdXW6++OzM$^zC+g~uNT>`B=Fr*g~0 zw@-taS-ziN8@_dZk)=}L%q83ZK4>mDz_;7|)V}5SCMM2|I2Ka)S!nfzc~i?mH1oc5 zEZLIf7_?JDZp+22bIhlU_io;$v~j9J^;Ne$J$Fsg?|KQDPYc{BlDe(WeQo9oE7!l@ zR_A@N@y!=nv&hBo`2D?}56|-d&W`wP>=z(*raez&!RxQuaLEeY)kL%r1CR;rH7&?D-$odwt|voV;vF z+4b!X$2K&uu0K8Pc)i!+rROsr{N|9mc4zAymv+yB;0ugD!spdEe2gi)dB?rn>}jUt z&)0LFJm71n3cu{PX{l@c!l$m5C!YP&sd&Y`^PR$$NLiZ$-D+=)Ccd(@)jqkt_sXTe zi%KK*?`{0Iar5m9p>K=BCr3?s^iT7b@Kd%EMgmp+S;zJitoeBVsIt$*_R!u92G!Tw z<95%^b5FHcv070sV~NnZW4(fG-`*8pW}B@t!7FlIkaNQVf!m=QLzQ;TeQeaAlr!Pr z&O4gw(`$;{S&j?#tZqJ5{b+}(x^m(hmd2~k9Jf5lv)j9GtJ+lAGusm)W=x#_bn=;g zoo1U2a$7@vzH@C7SlqwsaL=#np$~iI12*mVb>sH9U8CZo7u@*e%epzToMG!lFFiTA zr1!72YinW`Yr=&?3xk68I=(8tx2sp}>`8%TjxnOC5`VJh&0cn#$H7SAF@r(e;`eKY-#>t7lC(dEA7Ji}qwMJAlRbuh^*#S}W8b5rF5EFLK7d^e@63?W!2W)q~ z(Z2VGef_(}u*&v#!Ip21d>8$Eyw&bPVD3Ao-N)`&_3-YS_hWs;hq`59VjQ=ppO#Sg zYJVYoY5$>Wi-qRG>9>ktE^~3f} zB6BAmi?>?S*mlYI^Ta!$;^(UV@>!UseZA$bYrT%2$@Eoi)@nYpHhYZ|EG6rLCnTz* z%#UA|b#}60j^@wCQ*sBc7WFI<3n;u%wlYU8V`k_CqrB5SMXsD($M$@ivH3GkLsOA! zs$buXuoKq%g8O&*R+YEdD2r`pFyEG5eT2ntvAS%d>`R-(5Bpx7ySrYgA-~sL>G8^c zFTa0Z87dyQ^}=WS%{$yY9;*mn|9NFi%#(R#`Yd&!r6!#rYmD`$Di%4WS+MW-JG7wU zmeaxI9c>o9S3P)N{|H^_5|)}dLsTo8rEli5#Rpl8HPvk%Us^t~VE4B_i<>;3{0>mM z#r8$!*Ss4Gw;Y+6bU0wvB{wFc2aS99z25y1eQYr~ph;3KCy!An?054{wLQNqo^jbc zu}D4;w>v8$b<)M{N9`x{{M2D9udeEPzM54xaErY2D_O4U>X)hQZ@u}F8D}my7x3L~ z{<-DsVHZkO_Fj6PEW;J5wtdPvY^$1N{b+~UU0W&hUc1_vU+y26f7|&{{~_<+ z#%fFJ%X1bq3+}C17`(IY_Dyzkx%UO~4xKI0Y zzw`AkcfEKo%y`Q8yR40&_3PT~itDG19g7x;p3o9kN#F2gJ-g(@)EPH-EGqz*^Nh-Nnd`r8y#DLD=p+9h8ad@c5|;x*xQcro*xBvf z`}*^}XOBX*cSWS{Xt}*zOGUx_O1Ww5p74T6yYAjIS)%`E%PZI9zs;$zKLvWLtA?{Bg`q|EzDy^WO5lI%EF=*^OS2J{q???*taj>y7yJ z?)$g7*YzXrd#yBq$boUL3}T2E+Ptan3F`Q3HR;z!eVR=VGo zWoO-P_%nKk-LpN1J|8cdInR2>y$~&%ZJ#aFuiqE-vX_pvd8*LQ*FBS)XPtje@UJh6 zzM4eVUVL%g>fN*n=V#tOGozsIKSRmyaMQ|1+0m7L@#j)wcAK-FU%o-~y#J$2xqD)> zIo3RJ3f&aB`?_)QiaW2wdrq#%FHw=WkeqLOyy{fNy3}`zS54!(J-79J-=iIc8yHpk zx46s^V6R{5{GWkSW%C_jl>-b$G5UAyy`HY?xT5U7BP{ajcX|EZACK8Dgf7~6LdyKq zV%Ij7gzMU?gI8ONNzHnZQ=k9p+1+(|%67%ft&`_Ae|T)M?CeTSf1_7scNlMV{So|U z>S?n)G`z^bpiy3Wzf|92!P8HU{cvGCz1>oM`&REcOLv?0YPc_~O`Bh&`IDJvwZ(yh z|D>9t4;!Z`CLMkz5*>6UFjK{c z<6-|9w{syy>?;qhbUo9r;&Hm;V&`=3)BOHft9i~B9eQT4@u*Vnxi`gsHLtm@ozCQT zO7XTz`%c?cYXZ}&))@7k36`GD{!CP7viKBt(;K$}orU(7%&%IXF0?YE=EG?PmNV|W z^A6vdS!vR(Kh^wk;2nU=0%7?WVG{-5D$Xx>t{*v^8MRn0=n9OZT_sdW@k z@Yu9oF1pM-?|r{x$i2U569o23$R3snS>f4xQt{GB9T_c=S1|?$pI=&Nw1qXjwYS_MI}j2s+`NgkUApr`;%VlWZ=*Ck&ILK0EHw5AY)FtcG-|x^ z)!r*f=;-CMA!+B#`}ntpRZo_A%c!i;@I-Fsl1a}~m^@Xv$|qd(+HbthLOcA;7o}g* zmd`lUbK6n7!RdLT+?OZ&deb#zQvw>EFW~)q|IiA@a+x2T&+^n+C3n}_W~yYe*yYr$ zRDY6q|5|@q``P4R-(8h@x3oK)+zk#L^VeYy(wft+yJeHd`%g?#5+{G|u;pB#xWC0K zcd?Mw4i>?aETzg9$`;;pi#=zyUqPGC;rmjFsBm`eg>An)BG)N9G|riR%lP=Eg?q2K zuISCn3qDzH9UA^zU6ymDh~}-2D{h~NU%z6Ril*>cW zEBmubyp4U~udmD2bY5xI{kH4p$4;dQjSOM8xBi}UX^MBn65lgtIMtt?(>h|N%9p(T z)5BgX!*kEy_j~0upX@(X)3E3B-^^0kEgZ^IpF3)}bcp8fK37}u^2^FHf3cgAi5W-Q z6Ad3!KU=hYdN#AlMyC6Q+*kOHzYI1#ur<{CDz~I%Y2HlRpD#U^9hP zV^^N|llekqES@G+tR!-bSslq*a^_P-zPw{<`5vr~; zWjdY5ZPTlG;@C~;3HN5K(q3sW$w*;RWR!2ugTDvtyG1U1=Pvkc^P*!(s>jLXuWvL0 zuE=^%f3joaJk|MUH3CHEsmdFE7Y+0Lb3)>1=?+n?+0!T3{;k`}FsV{Cl1Ys5*poaX z>sgJc+QW3!G<`=5=y1`>7Q03ERxdnKggfu}7(qcJaE09L%y*(|!M? z&1$KvOB=WI{wPm*c)qat@~!or^6##C=kuNxwPk!8s`uFQgpgOw1^!bOhrT?i`h9J~ zCgZ7RV&g(5ybGJqBH3m8gQxnrY`xU;t?ZFg_jIZ-Z0CD!Z(h6qF7wh7slzH0Z6+x5 zc0~FIPkjA0=I@{FWd%nIRX$c;UvNZ>FPs*@$=&}cOHo=>VSn7rmD}E@ewGX|R1o$_pTJru=kU|% z@!k@dUb90gx--R$PVKnk@gR8d_MG_>p4;p=~#>%AX6f_|Fg)y0I}#>|oxzOHPceW@?vv4Bphfc9NEuB70%~lyGgk ze;lg~Zr{%J*mIO!{j~i(rG@7-E(WJXZk=W^Exq-!B+JPcwzXN@yDM*rOjGS?c&^>& zzAt;>whNDUr3XoQ+I<8Zk1B4d*t2cI6osjw5}(em-|xj@ ze)5Rxb?ev-wY`EmZ7G6=mE1MUI?V-k&R)*?SVquc!ZM%icJ`;m7y7nf4pv5vrA143E)ZCv z(lXCdC3wa%t}VH}b7Vdg-4)m>UV&A@2C+mko|4g=*^5qQaOT`>Af8=E>yrP`lJ-wIt-DmdvJngU5-xw~J zJpUp4cczTStLU2L%ZlH=zPDfF3&*|e8OmF?r|YYEp1;eqKf*pi^J#pu*vC6ZRzB_R za$^1Ce{GM=(=97+?_8=fyWH45dv^H+8^z}b1fNV?5^;e~*|uBwzHF_<`m^%Azmq=d z-&nXOGO}~xl4F&&`&`m^+7mqYa;riYHP zrD~jNS75ySqBh${BxvPA?&R(nJ7Z25Pj0&L+E?RfV}PgbmgMU%{W3$=Ph&ihA2;Q| z@q*M7iktYVq`u~HxSiS63!OBrNO9(;bOZ;#-dszS$r#hK@dCpf-#kDK}UT7xjNq^x`7Ym=oA-sIOys$K5C8Ogv)qf8^?WFoaV>SEFteqDIz z?-k{z@7RMKigtG|P|rWzA0Op==TqfT#vLi2r%9@>SSs^mBg0=!k=BGG|7v+PYIx9w%k_th*e%wzDty`Ru)u&8g%(+bqv>#@FUv;0t?E zWH_(L!tP3UQ}LF^He8OBPV%swn5mTCkYd>JdXrERhX<$de&);d)}YRn|t=%3n}uo?m9I6_&LL# z!sA}f$3*JCu1F}Go?=^}ynic$h63Xk-b+(&%$Sipv2XuU+oyM&8#r%+@{Vc9oZiFl zzW$pscg2o~_`P#JzJ2X1*fjA8^Y_NZlj>gl`p?j+cHuC~3LA!tM*Lt zRuOxE`|G!!dp4~yJjZ$9*M9~px3mQB?SZ{F{%YP~H=XkJE07-XpGL9yhCW zk(E=YBsSb)Jo#Mi%H6dMPk$y~ztq6{dWX3}AD@3#z{R&(D<>77un91{((~@|<&R5} z9@)-dU@H9d)r8^kqzBppx83-^@7Hp(-WS~Z?}O5Wc{e1^7hY>)_;BNwl&QqCq63>Z zeP9oL-FGE%YPaTb$%5+YU}wD#A;~*Vo>@RmZGQzsdKzs{U|_kt(~65PboOcO=FfTW9Y1}t zFZ*5JA$+gBcFiW?2~|NnJw}uKqx6_GT`a?s8z;Yg>)?CJf%iJI$=c?*J0)eFUz;we zkly^~WemGyV8m&uNjDB2cRubDRC_0J%9Dax&D|cBjwkZ`m#VoH9hdvDjJapV&ne%Y zJeyu1X{jvJ^JUq)1m;yWdpl*MBrmijM5`7zUznfo<-@Awsa#iNJl~5!A&=#O{2nW2 zw_tVa&D&c=@{=0*%9;w;_t#%);OSj@=Xs9?OOJe1!RiIT&bGCd&)Z>^6x%JOQR zI6Z;?UW{PRM+d%~9IX|8PmdMeo87Za(reSa%oDexpD8q0#s_+=33(Uz!`!67k9{(%4N(dC6)@l^F4T6)^UMKuVn2^xi1U_g`f2t5BL;ioH;8#=f+Pzrp6|X zleZh(6&R0aaW8xD@te)_SsBhf3Asgn*YfA^@o5@QIDF+F(=0ExTWdVjRi1CP^zwN9 zoIyG5mBpRRFA|11Df5~y&3{G^rEPRVa zeyZ}^bm1znGOx;ZSJX;w-EgF#ey>L|7vIwtRdS0aU69z+@g)DQTkzALQ~T?_xFx1c zJhRk`alU`c5>GGV!*4tr2M(*i`)y*$oyIf)` zPj5ID>vn-(zJ0B-sFVDedk=~ne%8&8N=!7%RXp^N@v!*Ul`1pNI9Em&7|7Z0a`);p zEqHazC}!iKAxH`0P^MlnV}?ug~Jz%&)Wf<0P;7&piq!p7XP+`m6a~q*H3kM2q0b zlmED1YUKG`b7;fuLjlP@cAD(o#L{EfeByYppW&HPlQ|+*+G`%amw0RDc7;>Q35(ag zYiigaKXcDXXE_573wf_l#dc!`2UY+5OHB+;6wdSfbW)P1*3gSFjP<01rA_G)MajUO zx?AL)Ti7jH(v%XGcpcyk~)=x2Ywb9I`AFg;wU;;_C)q> zv6G1VT_FbJ1NPTuU6K^^pHjqm$C}A@#obA6XYZsWl!_cEthCv@(RlK?hZh1Steo7I zd$f4RyeaoMe%Af2y?b1t|MR_$TWV*to<@A)mT7hn+LfgALBln;NqSB1>wd4!xzmig z7%fkyB+r_-xHm??$mxmM37(8SdRdn;u4tJuU`c?Azm zI3@o3*kZw^MW#gy%-?gWJgE+9?Q=RSY#4k{ukI~_h4;6TiF0^1JyzdW9sHP6`?zjP zr?lM0lb=i8X;~ykrgtVx5KHGguWYv^rzBJP&h9IZ6C`e*S8I?|Y?;RKreKdi0sljP zXRgUQuO6_-7w%Nwute}!i%#Qq!&6i3HJ2Y1*6vK(uCrwBDL!-g7n%%Lr2VHFPnF*E z=CF16pUhV=78TRnC%ProBvzH$eR-Xo`7R>bIq#C$r6YVxitk^V!LlamUgW33sW*>l zHtO_Cr~0p}=VDNsS+lHuvq{QEBa36wwhgkH9?1n~vw9Xz4Ov|Cq^J0N{#rvN z;it*7i<6lwHt)W>^Q~9Jn!FS1TK!MOU%qhp3Oie;a+)ho!$X52#`j;BYfKXVv_85d z<$02xtg%O+v(fE|N~_vVt(UO%fA0Nzsr9@EW?vaoo^#JTHg5sr;>X`zEiV-v0wI6b^ScepgVu3=3Q((wWhtM z(2VmPyO-V?rqq-|)zg+dcCjU8 zp|s*8lToY7BuUY3W8>$|7uGM|8?j~fnJKrt#be}fo>fyNY%)qIqr`7Juv%W7k&89swT6p_R?M}nyzwfKs`1KN$ z`YgGps|wD3H}A2iiHCZQlT!IHp6odf3g=gq3+kP|`PeY}w)+#Mr*a%e5dNN z54*e@P&|zCxs5GTryti;Pf_m z=efehmwj6%Mcpwvn3pHAX3c4qiC-<=RbP~{DYV+Oj!`=CxcZgn*QN({+-P&zE%>w8 z!CYtICx;ta9UV3P?Ahu@kD3q3M@ zzUV)LmWtVhO(%8V=<}5A-gf-BN{V*j$(6d7T+BY1wAMU5b7{t>vad0GkCxs^ij0xg zY+G(NBX64Hwo49oqcQ=l~7}&ZDNN1ESI^8zSt3cb()13o6zcA zb50!IAh#v%H1F9Hvouo8Ckr0PGyM1Btw+Z5;y=z^2JD6Jy9$FC?>63HzBhM+Cc}=C z-xe&K@t~)4VZUYa#CcbqI{jzRTAAd>cJJAgBd5wN4#-z*y1>lm`Lv!Zc+&0J4D%lb z_JnM>J#*?!35~#c{_#r{e0mnAl&b`97QJvLH_qYtwF%4piu=B59bwQ(;kxltS>b7~ zvJ&%zH3fD_{&!7Ui)@!LL%-03wQU&qP{uCZKs&>^jdcV(==SE5DoqLYP zxHRw;-?);~-6OnpLeUyayDdzTTNqC~s27!xWlDLz!X~8AT=4iQEB;{jDR1Sz`aIp( z>=4tR@#Vnz_$tGL%qv#%B&(*n9jofQBI0)9e&bE+E~ZBs{bvvBxv?wmSSavm9Y>Od z$h%EBT+tVFEklGv{i5X!-!@-r_4*SV!=+4 z^&%79B0B=-w8~8ObNYB@X0uH3j{gkvG(Yj1JZ)OZz+iaL);hRsm9fs82^J?`yS>r# z-q_-l9uQ(L$s%U^@vX~(V?EzKt^71w%j5aHdta_t+;UE@)ZVzi`9H&TkN*rd)^~dx zJDI}XzcTdqZW6pKWWdF&uU?*1yCN+!a>gOf8_Y%z7;3Xz!ZT&BnkP$4?B{)Xt*Ik6 zxp(^ph7HWuS1iyoT<9o2>uAC8Cr_RvO*kw*>!i$KKD(UsPfN@B78p0SDTeUm{%3f7 zVP8^WSipi0+cFuGxJqLVmj3yk~O~lKiJKPs_XcY*Fw0vxZZ{+6 zzq9gbSIF@hJ>mJM^*Gq~8NYQ9@Z-F{{d*1v^BJ4TKY~x?<(>(h>LIUi++@8(#zo~E z7S%hR=Pce-Ul6?+|GCNV_|}}=*W}etdNSJubN4QP z?K?x#fA&+0dklK~42`!hO|bIT2;}K;;|Q?`s$a^$<#_Z+E0=c7zk62}>WL}zd~D*J zWSa7{@r&(C(Z}UZA5VBDN#~h8zAW-$hV{v!6TcS(exBDnCnbQ%h&k_4Tc686i3@XY zzMoant8H=LCiR-_;`|RhwU@hGgIZIa818;vUsK;|+tRT}YqPwwT&CAO1bQ z)FAzRPRiHE%U=gYz4^m;dmOihTQ|wX9X6?7hRCPt{jA zTYG(Co-4SWowWA-tRj!M`5N+O;W!s@1gasoJ7mbXu!N;Zw5Bw(2WI985eb zmDTIydoIg)-kfG3Vl(p}>vM^v363|n2)=#&+9{kdQCq|(X^yDmZNZbr*9zS^DW&69 zz-G=6B4qJ;RwnPWpU#YdMjl^HHu;FGpSD6-fs;{E{rXF1T?1IZ9J+Pg5w`a@6Rg(h>*jk6R0WNo7W`S1z2=c-Zo3=R;TJ zho|~Hc&8>`?7w_zh79AzsoOUGJm!{p%=d(N)rP>|oA_Ub7>1W?iR^P%k(+X3@ucui z6P{57pJG?rRtZv1SHNC?~s4QyzuKXF`1N}bD`mq$4^;t6&r-|9MHFw z_>?K7F7Q5ptIwNne-uZ|&#c=s{xisb-_NCEz^{_JxZ=u_1hKf8?=)9Et}JcrUS^Sa zkZEcsbFslWvk#hlUel5y5>om3elgEw(!DQM6A zG_UfQ#h=WZT%wO1B#R<9&-u^L%A)tc-Sw-9)+D>YIRy?PM>iZ|V{lWE^IX^_UUB~H zK~c4{>ym#KSTf5rdroRGDDrsa@!+2bL$6@yXIUA|7&mu@S)oA(+GQR;dpoP3XKHC^ z`HkDNGk?0(uT`07;`Frk6#;j73-+}pM>JX8 zXCL6IIR8=JE8@bw=(Ib0qV4fZEh8T@D#v+#dFgwax#7&(SBLGFXX!Om9g$e~aH{Us zCOKDS<}Hl!XE?cR?Y2DM6}zzJ=qdeEN)jx;e$R4Gt7!1(I>zT$nNaJ$V0npH(#iZL zmSQHGz2}enXC+7%+>5_!y`lQjkwp(Qblje4&-oR)+MhS8YR}8;bna>SU+WdEdsXJl zU1S{{7HAz_7SHk}C?omGlf1Zq@1~bu{Ab|UQ@XZUby>6G!CPxyluf=o&tl!-gZDSZ z_k4Z)?A2M_o$61t<>mXA=JTj2<$H8}bD!LMyOVRC-3ysn^CX<#r!cuO@GkhWevyg) zjm>dg$ywJj-fI6@CvNS(wY-Y`ji!*%+N&+*!rOQzaxnDF|F(LYWo+D9E}PHQ@^b5@ z*H%kbYilm)^*2%yT73K7mdgj^w2FFpyEaVzQQW&f=F9rcPyS9R@l~qG^=;`n-6W>* zVMX2vvzb#L=s4+hJeX zA7@qQz4(v9qEU@PT$*YJk@G#M$Pi%53!eyn*82*-N@j+ zR{x2x1wVMMMbA`fjp1GBp~qZbt-f6JYktc<{)m{nXP<2`7vBF~vA5yC^JT1&*J_xT zMc+}5>8_ahgky$-hZ*qL2%^b9$&Dt@yIBSt> zQs4!~{v+YJGG=0nwj?E6m9Bhuo_F_;OoeUwqN^3%6;B3u{`$o={h#2@HH&_SE@sv| zF_EVxf$!?eU0bYD%0JC`^I^SEJFmL)+lcLEVc+x=rioXk{AUQ2`2PIMx{e1cmY4Lr zSKn>1;*Sy2&&-@v$KOxdt95sJyU?}LNZpjM)I)-oU)8Q&^6#``>Gq(VeF|qkO??rz z#x*muI4?=@*3A?JzuxBgd0(@6CTPoi-QKP=Rd(GHU7eori4BJ@a9wRa93Ua?H%WxW zUavxnKkG)9w8fDO<OEMyIqJ}yq;0}mzZ&J* zScyd{_nCy=5HT+P(RF$Ihi9`+DR=qKdE``lQ1;cCq?_wl@`c=Gnz_#W(C%A&=j!x{ zsdH?C)=#_G>K^#(_f?Z=4{mL1*_AeR+22Xd#Y#;-KTVzfOr@NCYw*6En=UQsy8Fm= z=R|L(C4UafM$2DYa@EE`H)qe~EdQIAxi+pp^L&|W>g_v9Q87Q7kFdCH_fqCN!q(5; zBk%ul>6y7-EtlQB$a^I0QxKV@Y9O8e43mLE#@V=u3-2`yaGuXdJaHm8L8%Ey;lWi6*I4Q^ibrt)9! zvUqvno3}lh(v6sw%WKzvZLNC#mhW3sdW%UuSLViJQ4blDB@Vqm9{fi8>>l|_vy~sk zVw2viDRiwnD^tLy6!W0LR(s{gC$o;_~^8Kvey=SMpXtbXs~1B zd|pEgbtW~(k+9q>`$-}B?^vLDq4!{$lz0>em)$D<0^8M__Vr2BD5fst^;MYk zwu6iFT;ZHqullvSwg*iy*?H!V`u6P~=1tf6cG1qIa{l@FIdi_od%d#Jf4o-jci6Ph z4<+U0?*DAxac$a=_v-M%Z+8E#?tUoE&weA)cI&r&lRY-R*_GNOeEh?#dsl2SKRkbE zyL|Sdmu>$U0(LgKZk7@4nO9U~Y3sgKXvLztQ_m(##$8kVaK3+Qq+V}}9pCoLDqX@V zi$WQc)7S9_)n*^xpE19uPT`V`b@5|+i8YBPFQrfQ-EZ;pIA=X4^nPdjw)VsF?Ll{6 z+Y2q}%f5NVq-=xwdq0bi1Fye)S>N`bA#44u=SSkV^sP6Wx#*?4&xOS4XMP*)iwd$b zW<2nGg5|;Irk^Fx3q1TFSg_>s{3lu0H{H4aWAE>R8qXgym;7f)&x|^=t9GJ$@1M5A zA}=`Qwmub)vk`Yv+qq+!r`aRV&yB}dyr1=CNuTxpX*Y5V7yR6OZDu}8IH$s_phh;4 z$4#}`4?bGH)7t&L&+Yb|7pgzHi}jxWwsXvp@o+qz|DPc=aQDa3%N|k!$DipOUZ8$m z)Gdr zQ{P*u*TQ&T_?s@eRlLC=DM4aFN?!YiFU!}>J7se$<=o|oeTA=sUY*{dVU{Lc8QI9Y zLvE+Yi?jmqryZ91%)JmQ88~7Yv@n$(LKBx9+#u`J9n|&{jJ#b&XE-Pf?Rv~_+RO>zt{)6AY z{R)1zLqn1?A#%@A2ZQ|v$qn_tzN}7@-0n6rX$+o!aobX^TQr=w}H7p3~cm7XR2iFBg_MGRsdhe(79TvIyc8Z711<@%zPac>{9L+eK z)Wy7_gtw>dpMIjJZr5g=ez9PS)Z_W_ReIa_g1T;RGr8(NjYg@HuJ24x;>J)Hf|OxVvsF-r*WZXsp{rbPq~Pl83))U&sm3rPurxt zx#L_JpLVY9?aYZw+yXx>aV$9D9#k#Wl&ziVtYS1hBQre<|Hwf*i}2vG!{3%(GtI`GBfsy<}JG-56k%l~M5IJ|k7|FC$E-p{LL9e*wV zO-<4c5gSqEHCSEBs zy=uDJ@zV~?X98A-ICe7(*3?vL$$a} z*uAMnC)*5yJ2FRv>Kx@&G}VJLXwSM~Ma#V?jcS6rN@{B5Sk+}jGG z%uTktLxgU`L@(Jc>=tCw!ZOQ&bK>^oEWUk*cK-ZoWjiU|=EHG8acy~(hmR&aU!LrB zD{1k&%mATEhr9mYU30fhQc}9BlM-|{%#&Hfw$j8ky?3=nFPC9TlC9OV`4-hGiFaS- zG9O9Zp7C9NO5O{@`}Y?4T3&hIcXz|uX}9cyqZj+n*w`bQk?tcTKGpsn`-YW?n{LI< z=QZdI72#pBp1)Q-=%|((*Gq|Bj^3WxC(7A-Lh_fL-2LQ9e_k$A{V6ltS;u(Pm?~S1mcSPAN4yv!TJ;#4(VRWTUcXw$!TjKU}Gu@Rf zCBBI4-7LS+gUw=I-Dbr`^nfg+akvdc%xh59?8tA^VMw)YBfS5=CTwOWnQY> zDAK?h{QIi9ef+VR-vpm2I~}O|E@^*={p-3#wz_u@co*%=^VTa4JiEMOtZ&EbnP-{>DNTIZzsK>8)%QoUzV+O8l}+1C&OWo@>BHVcmKF4S3^3#={&PL6S!02sOf^#pdBZbFYV$!t9UgisViLK&g#Yk z@85?;`>L$=<>WZq!&5&ewAxj-=dM{#zQPLTdY01nT^X5nxfgR~8Esc*WPE#mcG4p; z>G1EV(S3XWW?6ojJ>%k%3iA!}dl(A3s?uM(8;L6$O;hi6W_xUFeIazRCA;#xxms_2 z89%H!Cii|4gWQ$#8_ZZ12<<$mQaC?Kuk}e zJ119Z&YY*a=4VB$t2wxViLIbqE=yJ|ew&rzibDhzqiH(Z9JR1-SS?Fd~Gdj)wIrKj*D5gZkwd>T|v6= zOnq;9=Co;5Hj2s4Q(0#io>aaNVjlHI;M~64Q>o&WL4Oo%-e&!(2w2|QiKYrY^XC8Ng zPc%oRHP5fASx=X5{moM}L(MZ}0pIURr|LOhZCAH#4G$}?78O6WrswwR855Uf&d>bE zs{CF)FyeZV($2(_)0skbs>+Tpjk~gbx&N-_Cz7$R56$@;k#}j^vn0kmi{gZ5fIzsi>T78a^xY&^VS<>A`eSL_qiJlG`3#;n8Psl$eb{fhgy@Kx^7Qi^~3r>^nV7?AKgjnvpM35b~1cFTCF?%@a^txzh$@X zTIqVE$?<#p(yI73Uw<2(TvAb|eOKyWSkft##wCYk??wn;mpvX6zVyfY2W!_z#RN?8 zuAHQQ-(BKh+P@E`-!0SRBqa1w%Zj{bt=VFixZ#q}qYt+Z*-T2kwPEr(#(!HcM!bB} zu<-oM-9oFYOa5pt-}j?DKj)Ik3AX2q5w#EQKla=9VX>>i_E`!J2g7;K)ouM{7A|9w zv1(%VoUJcIi#EIJYOxldWOFiT_^{yD_4Ea=l6~eT?(XnZbT~NSf&7P6V)LXU(ij(q zJ*i{AaLv6huWiQpY@KJC-MI%J2)M^*y*v`KG>q@P%eqW2QH`k6VQ2m`blK?`N5pDR z70`Z{sy;<--+ugHUWan(V44qBe-buQZ{k2%@-&1G5r=>pWM(m%3`^wl= zK3}*lnD;%&LH+Jb4&|QYd;6sy@f?!4Q@!bumE2yHhs?{jUR^lpkoRdbe)Z`c7v@=5 zs5D>OP`dl~$+u-wS}aw&mpBN%v(;#N_OxfSC)-!Y35$F0eErYxI?QizalXl`x0(lR z^a|%^eNZ*c<(hmssP*==V(k^&J=*+H4Q`)LZj4{C{Os=P;y$~CS}nsZOy&(7k4>A? zn4=k{hCP^nYMPkq#PWp)a=sqR+U7vY%pUCa3sGRBD%ic~^(kY)mW#!8s*H73p?5V3!ee^o9+Dcq8EZRYmc$v;+~S^w_p)mcZ2m7lDat5DJvKO*F)yLz3f?p`*t z$#=M(Y^`SXPS>_!@LHPOe)`FTx^IPz^S-{bmo~``-}~=k&-D3a$0peGG_RD~v0mYd zPO7j^;w;X@#2H7@ZGYMw+ocgws<=Wm?c&M1?ox&mTqQIXZ1Jh*>FTl$|2)N=apHE~ zInQlMjweQKm&(ek43m8!oRM(n`K9@Mv&$|?u2~y9{iO8lb=SVGmGu^X^X^RBmT8$n z4|Q*z-Wj~%ah}DpZqpv2!1F4Sj6Xwu2}TFJSerEQ&YIi)a~n1(KHT-B&a}2heTB=X zlQPK#xBg|TJxQu%&pLTM&?IE`jpvG&pG}ItbIYS<#don+4qtx-d<$NDEGR5oQY&)E`PF7Ax*`q=ce|GwM|Syr8SywfyWs%odaFJ$7BIp-#AfATuB*S9a|sC5Kww)|`3qPr2f7 zNRBT9*GBzwlY~-}e`(0gd479omVS4s_wtNs?1fX^N?%w!xi)ougRZUshi+)Xj7Gsb ze%Fo{N7;YqdeE`F)oE4Dy{OuUufMF*n$cmIQF8gv-Z$y4E3HPx@=F}IWPkfKOemf- z^IdJ0>$E2ujlI7ozH*N#{}oz3iQ~kqgj0Uyg)akd-O)O(Gr{9rOX`_s6`sGh`YYeq zMNFHfY~Zo@meZdbc3ZCMgx+0HGGUIv%M@MQ- z{G%0>QRZ}Fk@L4uCC`97E#nrIQj>n^7-y-MZ&p=pS+n!mvZ+V+sAYR}ow@j6Qc+po z{NTVnA0)yml`?Md&)nQl&v#|&ZC-(C9}mu4>~`46abo8K=6mxF*rbN!-LpJ-TvVo9 zLz(Z|dZ|0|cW2r^U2f~XU1YsQCC{W&=Awt14D9Azt=W`V67A{ST9Nep^3HEZjXZsl zPvyzXpE2)#)Qags9o~0ti>BTYz4D3u;k6l?HfT3U%A_{fG`{wA^3j`^x+Kjmd;PnM zoA>bXuP|BjbjIe^gL!824Bv;=d`K?ipBDIuGM#=pHOS2_@8*{kvmOc=2p%uX*x&tm)mqIyXPs&9+#MBc3U7`Zh)y$;u>z25uwStPe&c*bzJJ z?2*ZLIK&*zh!_hVt9bcE)}J`FL8;b;;VbpC+*xWNkTb;;r&MwXq{r+TuZ2kJwGQ0KVV5cz>!b z+Os`#k?$)nF$H6dmoI8Fmsm>%dwg=6wD@PYa`F?I^|EKJ?rbdE5xaYmjm{>S$2Y2f zg>3&cWy+T6f`3*wDFrZxsJ%GUzsq!@{IpY___r?=%V|6$DZ*wrC5f|ABHi-KO3q0h z7osOWV<>lfJgL^zS@o4>u*pBK69qeM>O|UuK1*i?*zD`8zVtMCZ|A9#HbD{}%6WI* z?s>f8tdNbD|CIBZnmy_71YiF%4Y;@bq`;}U$IJZr_BF^`mc3V`CXT+ zsVp<`PPxSw(IuHLSL&6S&iWW9yOQIUw64N~-yxZ`d6Fq%g$6~AX+PQbru<#_G~aT< zZdTTr7C}27H+qUpx0cjr$V}^E~TB?+NAKTQ;)yIg7L>AO9@Q{GRVhk&3@fXYZx+ zohhB=bKV6QaL8YpSy=MuLv(GQLrUPzc@8JH%ZUC9S#xTlPIQN|^>t<){;c&aLDLRv z#GZ7QnNua7Ri$WY=9T}fPt2;oXs6Rs&U5dhnmF`axA^P+d#~F$Va_N25C23SOq|ZO z@pMDE`_t09uWak4Jli(M{i)XqX3dkwIM{z(=I(EM^toTZ?xcQ55h<$~a|c!8@n# z>Wj;kTDp93|4Jt0@$CrL3cj@A-8SWI$6gdU*lOp8O}*OpcH_p!&jNfC@9g+o?%l(D z>Wk^iz_^!Bua>7+H!y5?B3B&b%(BT&IPaP5$^`j6TwF|k>@!c;T}`@mPmI-Ts-9Wz z8#n%~*(E(eIkj6GCu}KlIpW>YIb}lV-)yIAR~I_H6! zZ=uSkAO7+G8Di~yH}sv@djDMBGiyojy7vh$znCt}U)q@}HsQEZIAzULd{$q3i>DgLbBnhxG$l?r1l>4rYEGH$ zs)|6BhsIUut@>Y0?o*Wfi%t4yH>OyQV2jz1?>-lOcF}li?qhj~+jC zCuFd+s>@m@cTG^;?i4vST6IT2)%v}W(=LYmEO2=%G-sx}^yWL&X^S>bRodxZI7jdC z#M?`~3tT2BPD(3cys@f4r0mz#C2Opwn|!OTzUsz5hgp1z(;NGH-+zU_ZhsTXbmtHE zrhOe8Po}Y$GdkWn!Xx;`^ZBj)in{88Q*`EKuU_|NJ7e*M>#x555q^9`XFl_zzIW-> zl}q`>u73Uc?ZEMeabo#(8JSlu&E0BZpR+>e-5>QyQKl~G?%I>{etX>8H%CT3>d(p_ z8>fEkTX5ep;u*JCT>zh@#ro^=x5Yi?JwAAO%B_>8`z~&*yj5GP{VDnJ(YWiCY-9@q(oBO@YdOq+KzV<5OurBT?%22kMWchW8p~%!2hT{7s zjLiq$UuqKhYWq|2tvd_PxA(6d7~=K>cneN)JgR>B`sI65Ccfd1%V1GS9IRDBWYzG4{1c$z=U=lP@x+l~d% zT^z~1%kKoG_q=<)ap_?unGcMwyD}M4zRE4`au&Dv#kb%>$n(Tkl?N9T6g~XIN z>*N)S84UGqPvKkC*g0pOpRKRv?Kzs~ZDzSL%;}l;H{({}mcGA+4r?UCp?naf$9vwBGUdBMmiw^L+JPv4x6UXc+zJ;`0MOWgN7mihX1fwRA)LaoJ1 zFRLf%_nHr$|GKb|x9ydiyU2wMtx23I3B?B`7B|k}c|5Tz;Px?TN#+JN&E0#pOGItD9kNS=J?+4MZdS`Q9v_M2?A$7C#HJ+!rkMdSIYc%fFO)V$<^VF_+^N z8aPkNdM;&PyzsZ`f`YQ;9e3si>kA9}3LI@eS%@sZ@`?Sqm(`O6b`L&eNJ+V|eSN_9 zh3UXMmPyr@c+w?om{B{TVZ<6jM@i$-%2G|!*0x-8MXBXM64<4MWInauN! zUta3b$+hh9B+sAw=1rL?q;}+ahU$)EnM)KoxE7vXX?f83^}0ehiKXinn+nXWL#<&CEw$XyXU_B4hkS@z`-fr9pWC&PQQ0-mdxJ)TpxgrVz9 zL5H7T;a^^jTaj}eAHSRPWl89vcAdKXU7Bvp497)yJ6@f!FTYWEK5AmBpwZle8;VZ% zF)n+XuC>qev>gBXOB4RwRA25BEF|;UzgTge^W=F23lajjHBTA!e3*CTTJZe&J$%dN zIcp~_QtZDkUB&;>S3&TS!qUYGdX_9-ZC@GR{bBi7{_gkX&Ce!?TAr6QnO)#r>CTYa zmU)BSl{2SJ;`!6>%TBbZojAt-p(>}P2i`aA>*%;TnTt+_1f$Ls$F7x~=@>!K~nJT^~0zne<1 z^Mp=m*m=IHsOb{hEyDv0JX{R!?vBlZv5S?pZ{KU-iO|{*aKB=rhh4(a8Ul(j$d*zdT`9FLuKBsv}?KzDgl?WHPfyG5LFXd#2| z@hpSfoS9I^pRePq}#_h zm8U-6YU{luYgJ{KBD2hcUsqC_HO|a8$l0)z4`@z1Lve}2;ra2%)%v{pe;Oq!UT6^P!`ktlk(k zv8&E>m%9?fHgUg>=*Np*9}KLXP0LX24e}IiIz3s!{)lbe6cx9Cm<=H^7PguDZ4U~a z-QU91^L$kwgS<~LGw&U?b49h9FJ)?G$a6Wc&fR2t zV(F}7Z{`0+=sd7-Gu~k|uO<0UR~Tb*W#qOKFE%b>a$bJ-?X|@L3on0PbxLAR!k?SV znGWqi~rZv9y>vGMwiS=@UvpF7N) z<=ivzQ1zUDZL_tGOXn2W)g&+#E$F{CPxMHAn(kyxg%kB1WyhC$F%(%(Mb2jPPv2o|EG!tm_df%Z-IN1v zGbH>j%vJyWrnenVt_$yQivjSALo}dD8I}cK5!_ zi`H?~Tdb|;e{#Eo+`lb3%u`H^&X#^#a3uH6Y>WJys^Ffi1J05b`k(&X{doRDu=&0R z4;N`MaGkJFzHIwawL_o+>#I^u0T-xjc+*jHt`#Nh2`f!qmm64K}V>eFa?7#k21 zJ!LD-q;W2Z6f=`y(QfKJZ~1izBhLixX%6R} z@_k9TDS7_WLY9}BU2nq-);`mo_`UJ%mv1W*BJ*Z0m?qF=xGi=;;rqTTp1jY`Oo*)P z>;C-Ik+FV{?F+e<>LZ5&3(jpiW*2)y*1zz}OaEZQ+g!I-yU$&B%Al_0Z)VLWos&B| zqcapcnJwO)uj+7AGVG0!u{ilvebKY-jyaaw%-%(cX)HTo`Lln8-HruEZMJ>7tHh{S zyWwrzy#EZrzI~>iEUTrXPf08cv))#<{o0IOxi?v-X*OER^zAT-Nz_c4*s=4> zA{z_M#-Be8($XiEVaJ!(O!jee-OBJZ!smAL zoG(Y2^p4wn_}R;~_}`1#MYm5eOyJkykD2Tv;iP+0^3+5f2f@SUp=$kR+*7Q2@2nMM z&q*nn&CKc`%V%#TW|((s-I`U>-zVCuPTy|3@($}Xl^LC7r@uY5-^p`RCHYHyDo>x? z=ev8VS>MbP-`)nQOmgu_vt4!HXb$uCYtt4)Px5%Wy;tPzJf*XGPyaK-SgXtK`ufsS z=>5!fDK#zyVdnljs)~KON;p*73Q{dkPN-S2|H{{uQSU631W#AX^sFl0TK1%>Kk(OO zhR&N#M^y||Rvpo{xGS^sMW5YVUjO`pu#9!fdCpB{x;;O`!PZu5&Sbr(hS3|dr)bMG zwmV*D{&i)dyHu-vda|||^GSQ|_s!RO*^|6i3VE+wIxXYWYIZ?Udy6lRuPvHYp`fcX z`AEzP!ejPR{JJ_c3n$KIiOit;a9>G&YD%O@8XS zGtGg|xu9-~MAua5gL)R+!5!1o_!T2X+q_)AH}!3msb)~-Ik3)=z45)*Ext#N-zMBk z@wgfIeM-p^vp0ShBDNXT8VBh;z4M7*Cm}~}`Q@%jW_=2uyoy4LCBB~(bK1R=r{IX9 z!p8J4Yco09&;F@FFCsqqpJVr%BmZx!U-G0gmGNmuCcE!af6zF2Qr0fDpM^?urm|@D zn8$lXE#ytLy{*4n`h4Q8Nemag)SR2=aZ1W}EH`5BJhDm4xM$Id#|mFoIw+;x-5Q;6 zN^pV(lg7zj?m429wcfcqzOv=D%)RAyYufuydPRP2)&VO{xnv9QY8*CvTF*6&wJmaC z->a8`DpPcBu&~IQ%jah~glBv*U%evq_uIZJ-?vUU{-nc_x!}0!=9j@*AGcL1Cu}m( zyC>Sd-ey8(ScW0r&!#o0Jvqy5zW)nR*sWM`#VK#4-4z-vOs;g9{JnEvf@Nm$ zh5D!|o=;RRaCFan#2P96?(_U}bMqRX>hj#=TCgQ&&f}eI-HLao&N6l0yG~^4lNIuZ zZ~V;^QFc?2Oq@JTwCGi^($Cj90_t~z`{q4cE!Jo8G*InH-Ydg_i|f;qc`m0FbEZGM@}GfE^Apo2VVfMz zz!L}LC%klRbNzkj_Pzk;;+@4`mP;(2I>YT92XmpV@msGh741znJA>?kzqfC-E_yTh z&67tKjwhAd9ydEQS;{e-m$78YE!W^+zC0`Y5c7;_PAS?`TrIf#wzewr zY2snIAB&!u+)z&A{S)_a-g$9@dvo zUvBby_KaDo!C75BcCklV^Y-O;Uwx59OTr8QOmD*^E}+r>pYgXH1eWd@Q?Tsb`#JjObmZ zzMZUvHv*r|bTmr%_qmOI#nlox_oh@BeCa3!UER@Vx2G4enPNQ(VLaJmSoLIw~(NH;G|$ zOA?&k^Imx+J4=19&+aQ?A)oo~PnSu49XNlEF#iac z&E$6L(mWZ9TXo3??5^qrIYgYzYb@JV_U_!{JN;fcYL5$NvFb4Ot_xPwTzBT|)9oi7 zPs?p!p6?jO(yyYX>a%}VU&NbZUh}3(8T@=wRC8RlU^xSSe$_Pnt&Td5Y$|s@rP_U~ z4#{c~bBVZR>aJqbzQ6uZgNQ}YQiDT=pA}xY?=`a#Q11P(`<&>EdHzA{iC!0H=I%K< zLI2$0!uaVg>h^81Ntq)lrtqKP=yqkf9m~_0pY*EUk(M`C(ERKEBUnnj_wl6EL&B3* zAI|-{G+tv-vyt8-r<3R71HD2YNl$Y)6R!2f_@8fRie49^qpT9ChsVjq-K5PiOhe7)pGm394%C7(m1?% z_oRi=T>QmdItM0sw{UG(x=lv&=Ozxx*S?No4ylhVZ%NNzYpUWiVfFrulU$W&rCEwq zPyhQ+FA;X|Kf~+5G?q7;_T8>byp{BG%8FO~>ok=zQ?`|QoSu8UXnEkv^GhA~G;cC; zNdMWtRb|p6N16N<{_h74+U;+(W=t-bSM;XmDTAf*@~tL@9LYhmnT4M4?f3UuGnwgl z@z?w*{P9thNnY=m8;`MnUY?*9R^ZXO@zbBBSL6?iT$$$kD8*x9<9~+m?R{F-k;&pL zu|~_>jUGJUtL9ra>k^ymopJ#`$qKnE5uA_Bj+N@XiT`nETR}C0Rfv22v;!++pFEAe zB3C!%*enOfo)ralaaO^hvpjAY9=Ls>Z~1E<&TCE)o787EerB*dzLt;Mb0VL4sl(kY z69tRY0!|4VY-?9CFXHVxvhPypr3U$D7DX#s_SrqKQ23i^5$D__QNZv-?yKBQG5b5m z{OUe4PST9edlu%zcSnA9|5|3I2LkWzYrMU4$$jU{r9BNC$L^$Dl&%cYe9&YOlhz<) zWR|+Wqpu}Ep;h8!U*+?O$1ly<-F9^{*G-#mBG+!Yc_c8LeAc*~F**3)IertKs<*dN zQdo=IV{aT-c5=g{=Hhj3*Moma%zo&UG8d2rg^H&u)MiP^)0kw$bfJ&ob_D@@(=bR=e1{T>jJ|r=H_lPSbw2e_c`YaBGLfEsKN4-ernCPQ1Ta zS=QfwseQJHSnA&0i$jbaM)onSKa=UbIORc4kF{}1gVyp}b7S`8o{-l(|2%N!Y=sTy zF9g1Q)PCx8%AsTy<{gF)wo6yn`np=)y=-yvcHhn~D{77>PkWLq!xLQOXKVXPHSV{< zQKQ98G&0Wy?J#VVaSR2+*F%ItLpbn^4M`KI7<2R@k9R^7;H)(NuRc^w&qk4e%N(tzR^4*ep%bU zuP^UW|IJx3J7}89wYTr)=BXU^*~5Eyo2~Yj@PqN2ueX{!^Om-i*_n3s%qcce_N@CG zFYYmYc-G}WdN+p`Tg1Un$CuS+Z?cFHm7Q+5)r$YEyxSKnzqD3#RYlXaYZ`C=m`v1C`fSjW&wGDX z*W;s7t!KMlUMsZPdPB)`CPPB~-_lJh{j3gg+C4qiqP*<+?2P{mo7EdlHtNpZ^PB0^ zTAj`t^A_-X?Ok2Le0Uqf%U_{OcUw-83^M%Qo-^;>)*GG=-wQ+;@^x!!t$ohmobsQ6 zQ|?N{54qPt^E~faD%T#cC_Qj|#kVD|tnWQr>AuSHc)QoO?a{Tuu5Ffy>O2mX>?`cH zPR>s>y}D;pWDM8gKe|u-)$#SG;%+Go>Q7r6{R;^w)BW#o@dNx66K@hT$Xk{gR|X&-r@`q zjT7Y-EWdxvdSx0f9}#`aZhmf#ptN-pPrl`Yey=B`{vEfzY-c;~)2kA(_)hXf2YZL? zMf11hbZTr}@i+cJ@S&z?iHB+D&#ifo6JPUvU3FO3VV_BwZ=MB8)OhcB(!=K=H*-~- z(Z|qhOGS8#i`8dqvwpgGLaUaySn7V4o^H~Si&IjP7CB#jk$qvY*P2N?r_4zzomesb za8&8}TVL)vF+KeJgz>ZaI{(C&_#T^B(KVAJDld4|yf?Gh@nF`WD}S6e#q65ubkz9M zc9p8@x~pFOOTB&PKf{_^jE3v$k8iD-VvuR_r0~iS)g``ni;rd&@J#!@de)z-qokmcg&nA;oWh?T>Jg;sO5ZXgwJRgKV6XVBzZz@ zZGwr@HX3-WbL(4V zeIrp?j`6clba9z!?pDu0-yedDItu0P2p*R>zP9qrJmcNlTi2}J%Hb{Kv+DHp+w*sa zzWozlT&eB2{As-M)A9%Ab=KkL-+EQGBbIv3n>6d}>gd_kt7{)Ty)cbASw3p7$TiP| z>4iT#-qpE;{bZE=&mi^8QdL#3Ab;rZo9I0Qdo_Kt_E|@yrv~rzr2kOnk6Bn;%_>ow&jrY8QC9i z=f_=D?fGuC_G5OnTK??99zBo11E$w&crN6duJ63I?R}bFjGYS4el7i#>I;shYgHLu z@(T8xvQM?b?D@euvCHpFcZYSZ50Ut@cyix?>#Kj*hj09F{>@X>)RVgO zJj0xD%irE{(LdUcnZ?P7GoRR)J1v{*)7m?aFZV6my2pIUy;pTIv6kzSLX%k13L6`* zTu-&i)VNaZDf>lpY2eaL7W>)krZ0V6v}N0+%5^JZ?>G2wSa;dy$IJ!M6+O=R4{tmx zajLuAQ*(Ix-kgkju0NV9woK0Y^@roy5vyZ+%otyBywYCsk-e=>*tDnU#fQ9I0a6Cb zx!(3|y)5BA>$UgXl82}HqBElZGqk)vI?KNKeAmUdlQ?eYuqr*-%vb!z_SO6bl^q}J zJI;4}eaNlEaHzz>Q1Hgp{|xdKdH3!=SW{ItU*%F?H!j*Ya-DH5v+TJZwgSiJ<%M6?ckPLNEHCoMb(hro-Wu1^ z;-dAltIOy7%rHL2zF+cJ_~Alv!P8v##QC*PuYOy+)=4C3?z>a>g=~^n{qg*m`@AF1 zv6uJo&%m>aX}2f$BsUcH%}LuZ+qa}_TWQAqtZ7b`rVE0!x2HGV(R7i^o_1<}Oz^`^ zp=S@raC+-0cUtw=Tz_sfXSw#tyK^pmzkAcQ3Qg)cR`Qs1y=7vB1r) zH1wa=rM4SyKJD3Kz3rHhUXe9pukS{Bn~Exe*7SG^=FygdM7#dNVI&W?=I(vGb?u z=6$Jcy?ex;?R%xssyPLfcfB2+x&^(=TH>zs+`eMYbBQl2?T%|ropLBV`NO;UiV`of zJs(YSiVTrmVRXju?VJnUGU40>Dw#@-J&d0w-+AzLiOh;q|IVjR*do*^QuNHux!-l= zqD`rtPW%%liD&#?`>r6X&edI_eNMT z?B9Qe^;->BOqq5ydE!HtplIpqJHD@M-P|GR5G1etnQ!sEExJ0wDMel#aXw9}ZdZO~ z-+yV^+oViYk1P7`4)pqm)%~^Nvf_0)FZQi#Q`GH~O%s}wiu`RqzVsGdQm~>++F-?= zEs;OlABUZ(aM;dqW|EBimbVIhORBCMx_Cuf^5F!z$WTv()!4E;|J5zJ&%j z@P4i}ej9u+C)E6)5o70)?6JuRYxOlya zG>|Y?DZDrJwv@-&?27NX`d2qOJZ8T)S9a3opZa`fj|jb~l7AVVE?|9Z+L1~no0*I! z)pyu?)d(DyX_D@cX*>4MU90-i?hO&gf13my)#!~~9N@g6Zn>@fudAl54T2u)g&8{c zuv4 z<2)P>s`|ZnyId!0tvhBdA$pq0iZLo&sJn$JBZ5U<(|=0B_eZn$)oj`3x5u^Ntyn03 z;nyWM-t=6%d|;Mf0oRG=(o=VI7T&*dwPWp-MwT2y#X~|nB)^JkWSrJLbo$An6+h>C zhQB?yOgv%DsUs6OdZs)OzS^+lw(~}jFzte8O0Rh?OmaH;pF!7JhHKuF*iHW#7T)~# znZfMhG27agXO;>$e3X<@y|Y|q`+tV`TeB5HcDfl&I@`O(O7Z)ODP11Rt5!|pSKJ%I zy6t(o*e^FrdE9Be9(>cek7+Lkt(=2OXmfNxN;>7baCERrk z4u;F{Kl-aBbK{aL|EAMTZ|AJP&))cTId|gk>6zRHDt{KY+HEa4z!P}*`LYY%np29; z=T}8UzFQ~ZaAMWr4A=O5?lDzdvo}q0)!6dA|Lh(!6-9^i%-dRz?GL}4HLc=O^@_NQ zELyEjJm|7yO^XVChrw1MG2gP7T@sp}?1{AakB zdvTllwA`DY?QhBLSTXa_#Fn53$K0N4)g{&LU9o4zo7U}{dfR6+dG7re-sg5A!PY%% z)3>s~J8z#XX~~b|H=Gk{ktbpHyL(P+&fYEFZJe*?J^2;#*7|7Hbw3FKiB;x$T~_H= z9!<_MQQOic8GUL;65FSg*gKE6*}h`T+~dvVww!mbWaV-D(v^oknP_}id}0&p-zP4q zjQ{kix~AqOSC?zdBR_XksD zgtWKJ(@1Z8$UjjgIys?IZA0l=ql_oNV;7y=X2Z@=+}yv9@%x{T(QZrsUMoH|%kRb8 zKjKTH_Rashl4o~f#=kIo1O7jb?(0F@qg`tkubp~gPfKOdbEQa5jX57UY|`d_XwrY{ z9hsARwZ7!{T;s+)^E^af%zEBD{m4D(j71737We2ePwcb!6=qacHD%_L{pr#BO-yDV z=?R!%z+8TQsin#DS+}y)TBS^b_uj1Po56l*%la+9uj~+taorf&A+YH2y!n?_oKz7! zzD-in$K~1mGH1T8=BW!O+>VZ25+!mkN$nV0#PuIlJrmDaEV9T?+|DFnZj#zR?IM#` z^Pg4so)jc+lk?zWJb7B6zMW}Ot?rxku3OJ77v8{dY=wuqvPI4}xvAngOWKa6Onxfc z?B#G{^;FjWz`(6tGxwb;Phf1`z0fp4do#yF=?w=S$T7U{O39Ix%XWG%b;hN;ulT;G z=B6#$KMT+DOuTtoG1cBAx?A)4Lb)GHrh2ctbYitSW2hUekB_nayQil_51IQpKA(84 zyI`ZorkG-)%0;=(?zI@Ui-j_Co*clu1dw3T3C-GB)uU2H(}*<^FU{0`m@* ze~LE@-+N6o>2T*bf0>zOeuCy_zFSkCY^hvXFZ(7Mw$6Xbg z-qP>vU6`u7#X0L;ugV$KMNcF8?(L7-=6*A%;?@%rog*_vYBsKXA@S?-nXs_y1+h{0 zJuN2W3O$(dz43tM3;yJ{?=(NNZqc}XZrk^hJYj{CcL@Aue|O`nx^0$nzEsTq`2`cV z)El2T+_$$i+GCxB{1%T%yG~A2$?WrdT6kY%ZFb4V+13YHy2`a@T%H#E((lp6c{x&r zD%)0^O13wgJi+tvr&X6Fc+e#VY!R*2OSR zI(zv)!`j%KuxZ{F;=iihRvwPA?mc|DKdUQO#aB4SEqNYKlIG;ak2kK4=zEseo;;yi zQY}zK$2{+6tb0`F+FJ%JE%~yAvAX9bNg3BDvrIeG@*pKNd##yv_$=$)#d6B*mCBjt zEhW|}huZecRqGM&Y0*)(H~%Q;J4;o^!1L6@#>Z@1rB0?ed^+dnm-MsZ_|ouscia^| zGg|jCeEa$~--z=uJ&bBjlQcgr==DkMkS$MN_;vMSpUM0kGyN*Lj4EGxr$4+K zAK0OFXz5{*h<@qU5tru7>uA?FUbNWA$~EgJ3-=Y2^DY0+a6Q()y-wy{ zoUcq(hii~W;dU08+FP%;@VA7m@Vy+}y&y%dbaS6F^A6J&4?oqUW-Oc5Zt9aNm3Q6d zxyOfZi&vbM*xnQ-sjVz>fc?&|@X&|xtya?(7hM<1JgVf%)0cWM`99O$aL*rwnI@Lr zDS|G0+&G!%-FvpH*V<|OR*r`gV;w?+c5r3C_^`)N<$d71*qlqR?^^bARj_+rj^aMu zmgXI?d0X(mjpt+jYACD?aR6|u3QolZ+bGX&MnJ)ZKu+9OfXmIUBdBVv8R76-^L|BS}$~b z73bTB?p~Q>AnzkJNERx%rJ{^mUp)7+gGkx8}*QzGg#m@&yphZdz0t=XL#(t zdtaNSkZ{3L51!ZacTc21#HY0Ip2?e^>0Vc;y3TxcZfnux^G201 z?AGDRduy$K^Zz?Px#IEBZBe~nd(QH3#ZFmxbGI@NYsKbe>?4%ZdQmN61aDg@prJ^rKMGqte)-7+03&v_?G9b!>#6_w-?^4G5KMf zn$8lHdv&&Fu1Ms)jc+xopDp_M{c!8QOP-1hkTrG4jF1Kqkjp09Q^UpO)Op=aL0Ns&uFC3gwAg-^P> zDf@(-e$1UrvF+vCdDLf_DK_&=vj27Uy_~_0ZkLN;*DgxL#HgP+x|8`vRrqQ7E%T2U zFLAW(UHhlVtL|sw^@4-XZ|&Tib7`6|tI55!5$9iBFSlWi-8Vhr>eJox&bXCtv&;GT z-e>DPwbpc&zPgvMUca(k#T}iyabzTeXl0SV)gwGo6{N5Mc zYwcWj#qGq4x6@8H+>rPxI=hh5^Uv9X(|1sFUtWRoG&bW2c=}4a3mSe}0IBc~d%`Hzicv_z7N&m3o+=ZGWJqy`c zEYEt*l+^yd^LWjy%;Uay=6(4jE}=f>3)`&7kK38o2Wc>Lg*Bz@Zh2c$5Pqlc>)Zbf zO#f_NnK@)cJ-wOAAS8SKz4*ewf7h~)h_g1F5AOL@edSi^pIfe4M_tyvjLWY1<)^rg%ao%NV&O_d9q=dbU-!c`JAtd&zPMa>A?X3%-* z!O=a()qK2+Jid$WUHZe0Q#sRhvvJc$cCL5& z5VGx(no7%wC3WAkYcJk5J>I=CtZV1}))sB=VzuiBUvuShTw*X<+Ms@&-8Sp*^5)z} z&om_V%+y(RWa{_hOUulna#wGhXYP7}tIz)F{EdIKuKdb!ICk^Ok`s?J{EYVY)xJJF z&#c_GB2h8roK8i=PoD0a+w=PktCBBVoAo2vH#=B#>E9!!a@K{@SrT5$&)MV_zU=qUI(fZlceEw)qm%)b!>EC$~~bh+v{JhpcQn>P$iKuQ{>O`D~tg#S#}%#!=XpA;`FT;4d@m_z@O}$0>f7dCUyL89=-0qa~ zuFPAVt{-w!a@;DC{Pg|H5Y?TmK8c@x+l3^5&VA?b-b-IB(q|%%lAF0%@s2N#FN>~P zEVnFgv0iMfk<-EMm8r@+Rb46jRU+Ho$WIZ~xL>;W)fRsl!xe!$jXYR)+RrsV+c{fE zBY1ali+xGe{HU$0NiwtV?76;X6K9@ycFt*zfsq%y4*C@w z*?7z<_f6%>1)q8J^SR$lyt>W9&84pW{>z}3N1GuZzo>nA@tll}&zwzv*7-ZX z3_sO+Cg!)#M6(Y^%?hW*8B|wat&GcfqBwy)$H3yD`&yl!yLw!;9_LHg%wM=H??_LJ z-W`4edmZ*40h65fo>Wif>TZwSDRJEAuk9;ljpU~d66^<6cluXt6p?<`_i$;9+kt6$ zEpiNUU-@Tj&utV^2-gZTW$lpLazXI#vRC)~%`90`WY?UU`KO>tYM#+bX^(Xb%##kk zuhqM|TE>tUDsePw>O70{@2<}anEGVCL;X_cN)xjMC*FnW|4i|}cm8A09d_$I-p}5C z7Ijo(edWIKz0Zz_S+}!OET5}<`KGkEts?RoCr6jLy72qQH?EppDSOwe;uJqMZ^!p< zs{(VTt90+HyU8*y&FnG5H@ihkI+yo;_gGrKfusIg*6Dv2g12-s+__)5lWkW16OR83 z>9dm`G%8w8`JKEqXvv9h9XB!+isyd3@#Z%2gpt^fS7RPHg*}|J!CZ6T{0nlWemh^0;cA@p&^h z++8j8=$&fpkzKtD#L8AY*gH`#yB(&m9R`nN1J;-yH-v4x7;jgaw0bv50-T7yoJ(3ZhfA;pQKwDhEf=ZjxD?3$L=cRyQ<$4i4DVcwoA+Bs=yb`|pa zWftc*EZ?+8P^I|L>Ca-n@7Gi{|JAr*s$wo=bxO5k8i&oIrHPcWvGkK}HKU zdw&+q`?2)QBu&>%n~!{YC>5H!SSz%^;mdcWg%NRONYv_ltwiwVza4x<%n_`ou=PgZpoMQJVN>ZWq7Gi8CHy z{7p-$eqH_E6w-P2AlJLS(aB_=By6$JRb$?JqyEZn^5-zpVZuVos{*k)q9WPq8!G zA7M><{d(b|MQf6KjVz+o*bf!WmS6dw;dN-Yt?lFaa>Z=+7QT0FUp)y}x@TQqx3=Lw z@dI*?ZR@7|loE9cQ#*G@Eb*k>;#-@irmH4B_I2&8Q0OySE6keQsUrV3tFVuwf5xQ6 z5(hN^ znJX)pueI_{m2O&iXvLj1m3QxTCvHlg`aZDi7=zAyZM*9F`CgkKDfx9(Et$hvh&6ETNu}qeMNb+vp6K941M#XzG$f2Jr{XbVtT;6v%;}H-P`PE zB@{WWeEe};b-<3k)SG*g&a^1Vmu{%y_dmAvtF&icW1GgZ)X$tdnHA)to|hIX_8y;h zcIU}}<&E!Z*+pLkhg)P@D+>o{pPabCdy-7~mp`i|=j$bhJ4F<{GUEKU*4E=uYHIFl z`7;aMn9VHzXq)W2mR2r3`xz@6gYD}JZ4+%y?%w3;Vw4w>`-*{~$TutUWv|MrB-Zc+Fjq|py%~&hCd6R34tb^s<_w%D>P0AEy>HhX@LwC#G z&kj@BZZbZ2P+hY6SMC;zn<~}LGTJBVKH5#?-J`OlS0wq&r>4a|MZ0V3_I+Kw{IKdO zh7UhmWVUq6ITs&e&-(nzckYD7qSMZIdd+Woxvf#oxcc+>x~j0&eX}keIHSx`G%t>S z#*ylISN_`FE_ry+dZChA&>pYlmJEE4)|>cvd->hrziS_p{^#pDOW&_nk6Dw|zOl@e zou6@tMKOfU?&ccaq`Ni8cZC>C=@)$R#O?4tTmQAC*R?jEH0vL!mu=aWG;xlkNP)zEhA7`9Y=My+Icg&M%=cdhy_|Oa^RYZB(@&2j z!)(tl_`cq8>yOO*WOTi(AkCT+&lbJ>&p&)D*1va7T1w9Wji!9QWIzlv0*;pESg|DEGw zf9!lGWux5zm6+V%&rOv|YgyCWrg()bOD}z~uW99hoi(h#?{>Zpd#f7y_wJGAQ|CPL znoXDJ9M~)(wpt`8S7ou-q3uG2m-f5=XLvB}*U@k5A4uQT4{FdcTiG43SIGHl^yM4> zM1Nj=xFf1I#O0H_l>29Q2}%7g-@mQjYyV){JT;@3?0cd{TLRssHgSqSQ<--62M9glH6Arrty~}pLR}|;I|4)t85jo~7-Z>ef^%bAwXUIFg{U`b}^0#Z|yM0>IgXapS z?B0>D+cMvn^_9mPHrKk%HI?4F`46vr6Jk?fQagBXLVaNTbos4iUDN8+vyb|){q)qn zz&HQe&Y~0QmL@6BrtI{WODKxAl=#{4(sOHpqs8M1u9gi7Wye*d@`^ZR9uyhIEe=cl z!c<{BeY>)4hIBb=T!9tel|9dU3}qdbC^E46dA`zQXjfKfGImr}<#^I(_}Yt&U*UI< zfCGbh-J?dua{fKV2mTa$1zs*pQFyFU6;$%m>aT{(*Yk0nUlt^|d7PS8{p(WCgxdWr z!5(o-CK(^M%{XRNIB!t{n|eOGTV3jt@{}jJMa#QsM1sfp) z+ZPfHPlT#JU+PI|>@#$@dm_oGN+!U%`-cn{Q_tg`?@Ud64k!OqUp!%>X(4lg;Xvcu zD=m$m-aeVPcO@rx^U3pBF$^4EzAo@!bGLoLSk5znt?CYcu zn%Eh{DH9~HU(fTbgn~>LC%Z*lL%QsX^rRxsV{AqCUd(|84yqo~Zhlp>{343aTR!S} zzJ9&PSEn~h3{U3#&5*eBu&ugGsYmAX!E^3Qx%e(c^le#lo%zko0FPpI?7j!op%HTbm)az`?#oK!dr@ z!Q$<_E9=&X*g2l(vc9lq!p!IQ<_BC6VM}6vd{${)kw5cG@9obN+b^5&@L4~e=+N+I z4`1;yO$KFU<-QwB&q)~9mGC_1<6m*yOW>=_e1%Nz2Yd~E%P-A3EW`MH=dYk9W;T`5 zpP2^!L7cW0kGfwd8Xvp6NA3zM_o4oxyDOb0_b^qyV3qbzmGqY_vRGn!*y5z*K?##N ztd=L19<<-hKJCG?2_NS)&zoVw+M2`URQ%rW_u{7q*{{vA`o_ZZ`O2kFb^$xTK3>Wo z@mSh_uf|E+%)LMVW*+99aO0Tew*_IWGQB(4w>>=g>%z(%4<;Dj->QCgp1b7nE5SRN z-_6~(g(uJObILZ)6LM2z7$lmQzKFbS*r{PWhgJ3^=Yu(g{a#Fm8haS-zZbp`WM;TM z<9J=wCE;Ul53{ecpQ_0dvLbGA51*@bYxBxGewxeY9?w)LTQ0zzI6aTw*~85(a--|f zM8AsAC-a&n{CP0v$@k+jT!C{w7|zezV$>=f>Gd{eQgv{GTuy7*G->vnB8?a(Ns)KY zSN_dp>=8X-TU7Z<)9p=D#p4E7l>_n9C1jd^Uf>hgZ94Mtts`?ivrIzqh07kfI})re zNVoe;oVS0f9z)_J$Jd@GERGdl>Yr`#fbU6{gT~3&f9;poY9_ogYn)J*pvidfbYbJ= zYm*CuC%8Yo)VQ!bS2DQaFxzAXCT`}w%Eb#$D% ziG%WMWn{{aTOKvoP_y=(;pL^Q&f7jta<4no^PfS`K8j!RVBQ>=ix*5)JmV8X>}y1A zY9D$?Y+|r_(qNVR+9Tq*`u>`Ft>^z~H8_$cZ z5f{+jsG#R&^(*MHg8LQyye~C#*kYdVFwtr%K4zXEe6O4JV8Gi$6AzvBO5_G%z zN!QvIi`JUDH>*yVJ?)Pv7g@o)%UMOWsPf?3*G?yxrfSal&^v#(uZmG?a08!b7DJ55 z#5V2kp0{s{bnfut(OGkNLhZ})5}uak>$xWXK9=zaSTgVx-)j(Q+Sw^%C@U{po55I= zl5y_dd}sIj2}>I1P3dyhd;6g5ph!b(`y_GIa2?OL{#qB0cYND5^&G=tX5Yu^O-2UZ za$6F%3Clch>;1laiyGD?8LeLUq|K*DQz>`xwBX~)mm2%-?v{M;m|2D^d$Zx) z9mU6el0}|sahwv9e9pdBF?eq8_v4|=^D-MQoOz;=u;fGJ?w|!6YgX);cxBFmOSyLn z4m>FRx_tfl8zsyZ2ShGi$;kf3KIh9>#m_$VisvfwV}d74RLDJ$WAiR<%Yip*xERmd zdo7G9KUL($7B20sHuaN12*ZJzV^am%eySf-R%krG*JQJnprDRK!h>RmgDol3xEt8d zpSO=H()zQeZ^=9RstE>eH{9>}IZ7^l5h6eJN(#Hgg4w(b9*3M9-rRWH6|d>Ud$IU@ z-Tnuf^~LiIliBSngzx{+OuEAmIi=zGhSv@;p7+nV$|dTs8698oMpKsWS-|cH20qQY zU*c(!^7=cMSNfcBDfHlwxOMn_)hq|oh6giFF&Lf?%49gHy_Z{Vi5#ni+rvFeS$6a9 zs#>vJKtlc9)kDvV6^^;@^?kzMj%9;%wbDxp5BT<=1`z?Rq<77i;Z&^4ZVr z_SWQyj&%mFC)|IadB-KkYvY54aHYvy9C!9s8CV>(3o=-7!aSw-^mmUpniJ=?@6z3`%#W0*#bSv^d!S2%)a7f{q`N?B`jOt%sI+k_UUUpk|)U5gC`!0`fO6`@- zPES^r$nwWXG1M#zYF*H~{e)TbF}r2ci`;tUCpfw)WwJXI9$0aAN@~r)t!)SA9sZM9 zAStA1$2s9`QiV*Z{ZzXJKF;edT{NGudP+|362X_AQg3f7xt&|}^Um|0-fB+w5U8Qo31*^a0|nlefO^1R7%wqaNy_` z{P=y&_mz2xI|V0QV9SUXO8DSsRV~#T*>h?)hr~VZ^$fp)@&gwtZLd_kuexQn)6~hy z37f0u9h$4rW5m`v;nU*md3@HtE_qt?CTBLkDO2o8Zu_IDI89R7^L@hP)0G^5PcnS` zvoeNJjN_m8>hg&W$FA1yU|(rsKSj5vevj6=V>i4ICbOTs*<{oej zS}0$};(o^UZiDByucnrAG5Q8N>@0jsCI@P5OgC&ed+gH7sdwjj$W2u-JoQN=dkK%{ z&u;?KH~6l+Pmnsv6Esmfe};x$M_s7;;)E|2uLD(-{!|ty+sSK%&#Owm!5>v}LCa;+ z?bFk9+POScs^kL$j;)dN-(a=NinVC#@L25$lxlz+@=>@nZ!RVd{uk#uRbam*q;CMFBzUzc|9 z?`?@(eoLiP`<@?v>9`Jl7%);~I zb97pK4^LHnRA20*H0zMhWj&MHWs>LZo1)#mqq^gY=TpZ?JAW@X=0o^5=Jud5RS#fb$tiQbe_O%8_l6zcrczX65={ek;_n*P5psVs- zz#YHCSr0klR`+QpDkW}vqv6-+^x*58EC(K4k<-F8n@&7flk#a#>6hiV9-sASS#{v# zw4VNF)m+LqSuWLXEZ^?CasL_i#Q9k%;haKkLX8?KqIr|l7yf6EVkk`8{+XvZ@1B{O zn?do(=UbKbsES40_`6D}i1GK~jdD}2R9Elha$0xFl4ToL|7-u=(|X_fRUHqj`#k>{ zbb;+q^8JmECZABYSzq(H|HG0`(>U(l3wY;wO28rU_6yBBD{f4l(E4lV3H5!N>-7%# z&)V(qa{IzBD;Yf}Sx7o>e%z)r2TBM z;_a<|1{_~jZaeX@GkKQ__rJ|rMYbz;2%d3hkX?61vT}JkQ+!4Aq}2`*u4VIPhqi!EBd+?K2E##>?o{_L?wRZnd6b zKa1mMh`Cl~sI0S?{xhxT3V+Z0TvT$qXmUjFh-AQV)|ERTol>5puv9!>=F7`KkN0ZN(gja+ z|30q8a6E_cz1IPjo%JRHk_8Jilv#qd&wJ;3O2=Q0(_zMmKUzX!9@{G$-8>k~)vsLX zSs`6~a>hB);AI82wVGMXSHBg#h^*RE`CRV!R^3xiXGL2(3)BUv)gE+^`KLA`!hLon zH^Y9L*1{8S&qrliN35B&dgZ}h|C;Y2ZOU4UPbh7x-R<_D!B~=gpGM$wQEp)k?JfPm zuWDD!k`$>Fw)o7iEc>^AtA)<@b*CmN8+JeA*m1kd!Fm6p7R$Szo-g&>W6~?(dgt)_ z@&|QO-s`5e*KW|3bZFVHvf)@^SLT_FX`9MaugqIJzy9!26UFi^1uD*SCV4Wm@H_h& zojS52;Rw&)d+h%i;`)+1Q$liYTBb?rXoiL=-D_%Cr{_F3?0GaLYEPlgr46BX$`+TNUn^I7dJa>O1LJh&3|V`rO1Z?lDmSG47-K%W z&fqQbk=_@udX6&BJChfePqEDS*2b>!{M|)~xehxkBqq+;wf@wy*&^4)`8M6Ty}9}= zLv6iR8KX+XEHk0lp9$+vEw;!%HP2(JPtIMDguVrrC$LYPY;Q8-z?;gKZ+&}YAEqXC z?w+PSY0vl74vMLbSACY&cN-PYQWkVOs$LYh^M>jTZDK6E<~F7E7(e^Opw>Rlc~5&%14WuRPv*xTzBHqikL~Y~d7*xW?`l^v z+O!^Osw|V?Dr3C1X^S~y97DjqXR2-->MNFs^=U+fy7N9WW6Yn@pZMDCdr_cTze?kz zy{txVp{Gn%y_qvtS|=~O}(1w*2aw!=k5=7mfyV6iR<0tOq=;t%AI?TcDPTLxbu2< zll8O3ww!LMEOYpl@cUfez&FiNB}MXI$T6o65mj{}YYWyb5MgBh)f#6|d%nt9YR`;j z4vu#>pYT;K>yeA@Gg|%9fyv{eVRV_|{N|&2FFrT$+4sm@IXI0mWnxI1ihUO6b1uGb zzkj~$V&Ad5>Cenl{SWQt&HK_=cC1{WfRlOuV&#hyE5Yj1ADHBb9Z-098_0H3Ap{Fs4=9CL1^*2-?f?T6OxQr54^ws(xbZj zQ>E96Gv3xIe5*2a?)gtu3|jHz%M+={y4o2z0tOCW{xe813(kE~c;e7UhnAGuwOe?! zo@}$K|N7D>%vHKs|4{IkyK=0Q`z-o=Mbv==^S`6?2_K8agfz|sEbye*fw);&Aad%VkW{w_Z@ zt6xFuE;maYGZK^3Fa<6<_kPpKXVRta!z{?Bx-oX zC;j=oa>g6gmsUDCF?m}aIQSrVda?!2QIX`zW0?yCtfn2BQ^ou@vu2x?%*tC5PY*l@ z4!y9uGW)>sV86^Ng(UXURemqn45hu5g=~MCbWZTdnfLSS!Y6L|Geq;+=WRKtcK7y@ zR~9UV0k@nt8cr_IeJbE^oPGUXwMhBAvui5vxPM-;ecc7ga~E&hW*9v^&62PrA@IzE zud2dU6SV{<6gFAS;^bPpDrne@U3 zg=ZC$FEf-c`+VX1Vwp=tIqbr_-oZb9zbWv*|iu>L0caqXMH*!!m@i6^Y*ac;1hds9+A>doTmk5;?SGQ1GJ zdy@^5wD!+~)3hyP-AkRjZhu&QSYG1Cp@dm+Q`PR?F!ET!_$%f5-Tl1w59U|#&0c={ z)a5mwSXidnxWAhDKJNL4-QT=E+-onpHRV^1#wo`pLHSer-zM#iiqz_zo0hTi?3=o} zAN=2>KKgC>IJa~i)1I!H9U(mHcdlQ!hx=q9mgzcE@cu}?gx1G6`$7jBO#rI#>uHI!)BPO|3;_fWB zrr++pe{B9vt}%beZ87PzbDv9s=)F*hiH6_(Wp~Rh+WnUQ!M5g1qqhdON8EF=-0wKP zzb|^_wVVc<+NKYGoJ$YNyg4h;@6Wrye`(F@I)$!SoeZhiB^wRY9A5W4UmkUB(+8RBhRfEQ zIBYV1e?XFF(VCkzcH1r;dM$oyi^nF9nyvYJ8m=3!6#K6CzNBbc)YPl@=IyFFtDw8<=59fwOOXTP2s)X=Q=)8D7$v;2p#d_2IJQaSCcDF8Ua+$BXrStc3mEv>O zVQw2g-a7iGe)Asdd?S;IPgE|Zu-aCx+?#1%r0lsR?!))PE$u>CXEwUTmpq(4E&f~W ztLoGIoIk28*O}Tx88F;jb17xV`M@ut&%*0PzMfq7WLs`gS#NMwWwWC6W!u-vLD$l* zJh)rF%H)&AVdMSEAKqv$P1N>|G%~yM#b2Z*?9#2&-P^YReZ{-dq(We;S`jmsrowN}rK@Awm6SonzJ?Sm^zU3WOGdvzqSZtB!W^QF$GFZbm!?=QI* z5phLd^Zop&N2c>-GCpN#NXNFOcIkg9DXRV=DeIe%EiYKg9X`oBQn^ylSZRV)xk7lY zjJ~y(TJeen>y>v*KlW)xpDrCcPxC7 z?pdFE^B*N|-F+;bd*XM|4UFreLqG05S)o_5dRe4|hRVJN>>J+3_3Ci-J=giDy=?h{ z*Za&ai#=?=bt;Cz*)Y%Ww&I@ii5*ye+riH87fZ zj6X2u+~UWxvsL>f)jcjQNefoDwEZ{rYK@+h-IqyUEmMP*x-Y!@>Ym1~X_hU?IqQs{ zw=zbQGi@-n7h2=}{IuEKJ6g}BJJy@+|FM2)lxXBu%aqdj<&&i*G0FXWAM zrbM=$a{FZG;=04)eSg)blYa_VoVMJ#F|=dGH_KNtzaDLRc6FL#brrdPKh`U4 z7je~gjak~>`O3Ur;Nix(OZHUEt_yt3tS;|$de4v9iCjvy2aAqOb7j~3&v1RcO|nk! zv(0AyMMb_Qwg;z(x@NqA8fatE_`G!c37oQ z{EWhS7QU}9zuC!t_}8nQaVy3;_fTi#UAs`rx34N*#s^M%a$}~K>1*>Bl|SahD9s66 zvnxAGDqzpP5Mkp~j#qm=>?yo7?US{2rOGYI4GYT!C-GS_Us{&`wl+Fs^VZf&H=WsL zEQwV*9x8v&e)+?wTm8-YYv1MS-g=uTJm>B7HF3}HT)(?w$;79@Ew6Sj-ts}cVM{Oj z!=>;0O0{(-tz8+~8#AflOH%c(iIMX+fA2K4<&U3#M5!Xrxu*MR{}j+|au;fH3)$QM zF>`B2Jf0T)^iv4)r+G6IU)5@N{YYMxX(c=5E${62-Zi`2ZZcn2-s_@iUaq>>wm)4o z$S_vWZ1d8%ipj^s|EX0UP@B1Fqf$Zh%h%V|N7PvVn7aN3cdyo=my26!zn@y2{-a`b zoczaUy}2uUGP^ZWZmHTD&%d^Ja`4Cfoqv=cu9kJI8L4_-g{sB-O}c0=7OrbVa9ZY}SBUutr?S~B(H+GA4-l`6yDEO6ibu6f?P z!(H$83C7%h{cGLwb*~C^cCR^iQ|8ISv(69hb1hrFJ~sBwk^PoAr;-jH&#Ah0p?B%2 z+`MJ&T?!wbtufip9g{75$M^eRM_nua;qQ{Nb)w2%@4Xvm$l8}ryfVLP z{e$z(R`;eqa{0*mZ(Rc4lLb?E`X|qu6JGu}zgwP1ZPTTF0zdK(nO!)aS^PXJ>dM2i zXE%nuQx=!-v?M@G7mu)>~ef&RzSpGk0#Si}(4!@T8V%;A4+x6`> z=1mj)#BX2U=CGdko*_r4%?cZk}Fk~(f!!}Xuiy!{ExBsyJ~VZ_UaYL8I`rDZ?NUG zIKR$r#&ex7-N!q8k{F$3KW-}Kv*P)#erfBI%WD^1nWdR_Q)Qz1Ot!);^Xj>3kH{zY zEWJ`a&-`FX4uik{%JofiGq22^GWWJo*85=1l1=-ycrQ+Su;4{?bMWz`iECOP#J>Hb zVIWe)UmTwMAk2TW>8(kXLXW4MkLml$dh|}vhDn-_Di=sf{BG&{&(P~{%&nxc*t__7 z$IY4HEw{{*|75<+mfGPxqpQl}Kf}SVvS&47qGv9v6jeECv^kmOo2bro#)q7;t0(8R zR~&n$@O{x6uJ=;5XF9e`V((+z(|k~NqxUY?HVM6jy~-hJ{!?UkzFK~5-u7^_otImW z7_#~s1skyLOPs*X@9%e2_OY^qTax2IkF5KgH3bgR4mON^S5~D? zN=*&eWX!6==E&R_;B7Qb`tkj(Ck)x1@W)rx7)PBtEpq1M#_r0lg7EuYdYyO5C(NvH z+Q~2>*jCzh|Di?m3QdljOSxzN_>m8*gscI3VsNKE-yAWEN2Td{ODl@MuDX}(TKLS} zXufWRr?^7Zvzb=HN2Qk(b1XZUD(%VAd_I1uuhwxB-lvMwqDy~1kKa{%nL9)`|M?_? zPiOXeJ>fHZzJ0I#+dx0pooT7J%HDuRLfLnIUG!r0^mX0tMz>>k?K&WOg|TN6yZ_U` zBhNVePpx|MCcbBWfbFVXca&G{5q5Lqf6spQa#!VEMdgm84YNC^tau_*=-K*JclX)c zyiIr9Tc&#Q6ohj83#r_AQvZDlM_IGX%wz9!LfLn^)J(f`sb-n+cg^Ivizd1>G_*ex z(zkDQ&U$Pj^yplKldnZD_Y1rx73qIU zd>gCxY{}&Fa|6y6@|=3H-zIUFdQRV$r+ap6o2j?Q<~ku%j{A3 zVCqCuWIsJ5A`yhi*66+I(fWv z7FxW_Rv)s*b&XhIjAUIdxvg+jrdJ zbNDLzO5>ZOMOSt}%z{M0n(C)}Eta3H+vIjHW!1zs>Bw;Q7j^Tt6!X-qwM_VMr1j!w zrj-Yt6lGpov%&A4>z!PMz#DVtR8?J3dUUCJ$74fQ54M-{>rcP@^!-k)R)R`q=wfcE zcA4!lLC;dvlx)ndozG@*kmQ)y{r7?YNBtk6%k(y#WIe5AQ=u$>bk<6y+sBJL(*%{b z$(%eX^KH3{lldeM#rFH>3eQ(rwprcMp80Nnxlr4yGxtk0Y&H5`=*`i4HjyP<$fI|Q z{GCh0?e-6I&nslsrl11_4l>5E4O{?XAp?>7iq3j{dBo!-VKwTQ(NM;PGUCP zCiv)51k+LFKF4>)_g2L1+-rE!^42cZjN;AEH|A#vt@_NO+Pq`ZT2IM z`fUjfYxjK6`1J6JPD{;!y3$YErZ2x2d74>8#Z_jl;@$5z`(1VaUOex&Y~QNCJvNT1 z<%#7FPQSj)dTIWaoB6({ZqI%e;CaIG?aRx{nd?67J7%i4c;WGyq#wd-UwZ!Co}2UW zz@0zOvlae*(?0rckNxV*+`>$yG|m~%%41S@f4naG>-59_49!*HJ$nql$wnR0o<7xJ zy3gzmiGxggl)p9pZ7kIeG+Ved^Ij%%iLqAAf-1q+p66uVY0d~!Hjo04+`=Y zO+VGosdI5oLg)^~zH4V^mGZqS+PqoFtL)ic_2c!Mmv@+~_1#i^+l`I!*@+&5_`j38 z9_8&(U*}w+m)Aa7NOqt1@re@;%3bj^-Fe+_iOQC=nDbkVRdO!z@8C{IzP4!R)WqK0 zhqF&N#-Gt~SKN5sK5C;`|LW*FN9`vqGFE>tc+BsPOwxjRhl3(&j!crArgZRP;*;i^ zonPL1J)7M->(!-4CbPWDJGaYE*}(AeI`h|MGo3Z(%+W5G#5{50RbR1V-lsL!r}uv3 zYGqhvUfh3anVs}@ZqzF7>byTl6$_cZqr^JaqW|a zm-0R)k&`@D6JI(-Y}V{q^s|V8o3Xh+ziK<{p6C23`WtvR9$UWu`)rfhQm&496Ftu4 zI;#9Rvp4+STq%DQ*YruIOg=w9x&JB*3%h3-;ncVLlefa}*YCSL6PPlBJZ=~!3EHoJ z>3Ul;qV>VHdE!m)LbY}>sphUa@IAS2%E!z?sWod>ojMcDeWK^_uW!qLF5-AxxmGG5 zP2)okU#;}(TZ@F39#N`D)D)Q7;Zzx9p>Sz8FMI9|vB1ePg*rLE4=_*rsEN8&#~x6fv}l(1q-o#fDtI>K8cduJey!VJm%xFp6QAar zUTtvq>#;q)eg9IU?8@^q&I{DeO;P5Scsq;t%?75Dn?jMy0wL;mzT0~h+)DsoA(NczvpFP+XZWZ$^|8A|P2;@h zT>O6bTVpc4Ty`E=adBhv#tR*M9{zjSe_Tm9D7*W3ewO%I>ka33PQD{wbz|FywYU1W z-dm~WY2i?KKJln_h1k~_r;B)ZhW))Yad-W-UCE6{JTrRYl%|xY+v+$yjC|Po{qK#N zKa}rWPV6o@cI=SI-AOeIjMm*f`9<`a_lKA37Pdw5oYqX*?9u&c)8qbS+D`Heu2Ktf zHf`Xzvwyge;y6zDT zorr~*2FW{AXBJ=Eo5bIKQT2fDP6fuj;ccQDm;7K{P_a(#X3doeQ<8R^__98p_t1}< zXN$F!yS8Pzy5GGz&p7{qXG^}ywC@URpDv0PN$xGY5jNq6vCg$)cSMb1H0}lTo_;&| z(%xIA54xWgFV1l~Q|CL=zBOvghtM^PEMs}H-qn@+gkODFVazL9d3N_a)0|g}Z$^Cd zReu=lrc{yZFvXy!!LPu2{>OFw-an%ACT;0V-R7u%=HQOtzs7MZ(;uvmONe{L^q=9- zfd}hs-K%yl{}E+cdvQ%-=TQ1jd^3H1bRdnWb zTQB?iy}7r3nEL2_cHcT9J?#$L^KIHIbA>K(PcAPnn^5<@pmDb9hWe@LuV!6q&&*ev zeJ(rKyMFS9OB<(Vf>-Z{B9?DA)+Rc=lV0rl}-C$If+OkQ@IGwzW(|G%yN zp>|j2KkDz$7U9j#Ef(mRmr`K#`o8Fse>y*wC-R>8RU~=ygqoxt!-?DZ z?j2fnH%sVLtDM8B#ZSZDWVIfBvd}62v&6pRu3W zZffssU6pomWmN~3dFCaedi{&%pCPrs z>DKlm`l3;2{0u+CRFt-gfua2RutQ260FP#;HH% zEf4DVnC6=CXVQ@qAqm&79$K`t?RhPa(4JZE3gpHADeF!V530{L3(4tzdW?Np_7i`Z zta3ZGk363$&(&=HwCMBG{;=~^-}-yEhfB?Qot;}Okr}b=C`<2*C)*c%UvJ)i=xoa7 zmXy>P?6Y!r>h`^U`!;@NdgPXm64RD$vZ`BOaZ{#5%I54Rj~5%)8ND%Jw7-69-R+7r zx8yx;55sK@vNv4bV=CBVKEdn69WnXx{R;ouw&~Q^=G3M1b}zS!TCbyhcv`ZbhH_KR z=kq^YZFVQO@_x=slSz7Bha%FuL)n&f0Pj=|8 zid$K^?2fDMmKK}*9b%SDdzrmIn$GW7JKN*RkxprbBQ7^8&VRpheO7|ulP6bq$9g?t z34AW{X=jkt_O0H%r-E#Se!aU_Y96-vM39o`Pt^?;(tG{=vcnI`XyP{j#bG8r-%YK)VAg@tOYnz*G`^XgQ~ zV)x=(dki0~w$6Q9Tr%5?UGUu_|AlKiY#e6I-F1??Q+Cek+`QV=$4mY*h&U$~=jZ0E z{1zj0*7(nZFA9AB8J=I-HCtXHI@V2*$>Iv{N|_WUw<1s5vo-Iu^$Mq6vi)ObXB?Jy zym-bfWr<*Mo;8;?T7F%o>~Y<2Hg{2U-qrrH@`O^+iToXUddlUK%%)B?WO~5Fzw`ak z=I&%^opY~{P@de4hip6O-_sZl!il)3JktBhXl?$4p?)F;TEsjJ(4 zB{BL=RiNsT32sYcy_lRdWLCcO{I_-Hs(S~ywrCr&|7iFp{MOHKx5)CO=)F#NgAFG* zZA-s(L;Ic9#=SqIEbct)4}1S*Re7-FLH7w}58Lh@bKmN~^WuD%4dI0%eiyx&fI^cc+TwcyZ;QW){4c3$I5%B)vj7&;L^9h{IZFAxj?60ZvJ79H|I4zec10{ z9d!F=zV(sm%I6$ExzCgM{p-pkmsIIIWl3e7@TUyFK3?ip*fA-lEm1*x>+GjoRfT7* z?!Og&CD@qY%}k%X`Z}3*ISExV{5)k=GB+W_?E7C+u7Ta zx%E&U&vVOf$CvU+xUKudsHp0|-1ts2*|1YI=vIIOPpba$%OdV3LDurB^O9qW3uK=c$j(ZMWtd*e$sHr1Nn~*VE%O81EjlI4;T(?%=iI+^d*5D?<+)jjY`B zOf8_mQgzoQsT8BPlayu7PY~%{y5sp$ovwv7(-^PtdCi*>WOGh(9`6z@9%a7T^OqJU zw1pdZsRT=W7G?bDYi%a(vEj7s(%IfBD_FX>XY)L$lCO%lG&2cyVwr#J$$thu3${(` zmK5wuan5Qzd8f#8d3}aa^h}l0({j(8*t79C^Nrwd`Gs1Y#)*3#tkk)7yL=wEK9_A_ zz}};K4xE`C+AaDy>7k=+|I)x*uTKH#<+s)>uC_SIeV;*Y>)e(1V~&?~WVi6@&&OnH8_O#3aF^68uG z$M)ExGk%4NXR7?Y@=5PN5toekw_icd)!d@y9Jd2ce)4?s&u(hnIh9?LGB)d8U|l+6 z?z$pD3x@v;UXAMtKd*YLQndfl!tHyzUcFfo*2iZq@b=S+FTXC`(aF^AcsOB&%!4QV zOM}8x?{26(%o_VtpnvMg=O!yncJ}x=Jb9vyrK0yNvMs zs){<^J%Jk>iaaeCCZG6qX>Xga=JfQLEIudB94^dx{CTz5MsE`(Z%Zx>^|P66juLOI zYqNR^^$uN>ZS54c-l&|P!yk3I>!NNhi@2`Blm|8o_eF{~8CYEof5p5=XB|(`u@f)b zEY8c_`|@IjtHk6}(o@e*TJV6U%x>9S-bpHnvu-&`TWU|fQ+m{ETA|uCz4CYJr_&y8 zvg-GeZCmFMVD#zf%zbGR5BawS?RM7SWoiq!Z>{m|ZM45&nBdC5jgETkfiJS=-$leR0e&oGiI}7cr~b_dAC7 zZu;3~;1=?gdFSFc|AL>{XoQ|*N%{TPSKKj)<85AninX_p^S1L3zZ~Cc`^JCPzL>;` zH&_`y@vrq~32f!rXeRk#WAmivmu-8ay2P4%7hTx&_9r`g_Pn2OBfWBSqPjE>W-88d z3gI(YeIt40uPYy;rHiIZ-_f2wbwa_CkfV9Z9Z@HfJ0%1s_Ax%6AJz59SXm=_nZ^vQ zlZPhX|8UmbIA^s=$HGP>eXYFH+s~eV9rnmWDJ-C&&H2-Q>%E09L+5#1&pEFd(DHF! z$~UGpk6n#o z|7tGTq%tAeF3hph(dYTgm(E*0Zs<(9!y#SVV_-6A$wg&Pev7A@UkCi|d*ma~)bpf? z@8KQ(tf>pc-b|l#{He(Tl}O8T>@j647jOG?H`!c}DZs#KujeacZ{Ec#1XFf>m6bTjOSG ze@=gWYmJ2CZ4to+@yR=$&x&}EA)AsJWcNr-QupifyvCbKT_F?NPCxkjuy5W~KGzjX zTyh^LoK_Gr|MU4x=GmPKIAvDIZsI(y?fG=UjI+F}T`tKm#M}2;=Oj*2RX$hqv-|e# zmrfhvj(RR^jEv9-kk^p-!12oe+UE7#>^H4fTUsizu|JF!_g3b=r=hht?@rC3P3yc_ z?sY19%vZcFGx6)&D94#+BV&&3?NeIwUbEnNCeM*KYxagdasF1ZAa~=`R6YBcuWP;U zcCu_@J2lOEdY;v+Ls#ak`031QGp%^;@*Cl++cO@lc$1X%TQAkB=aAPt7hWTODg;UhaInKIYo8m6e^5-*xsm-U$tF`?jt+e5b**rrO@ z#thapmd7kl9$dRRM?9SGQ{}{&UX3cP7J)Y&?R;(4yK?ocTdA9;NYC^ZD%f4gRsH+A z>#`fSR&%U7(q+ad(7VBXrQO!4%XO4O`WH@RIwpOE&#zW{<;5=xC!1V)DC(eb;JNaS zFQQMbuFQ>m8Q7%W?8~INOx4rz_q4EsS@W{1OSVthsd9qhX9ZU+Z+zF$#Gch2oAT|I z^#fndYRdhjvr>ZnR8VSv{+W8N$DtuhN_X6pxYbhh)5yk9fA;*jQ)<7;vTrTE^|MK` zr6<<=VUj~tLXpQ8(W}0k0zcP(&U<^ImN)h8EngY;tat7cCTa#ws&0Ity>7~+bX%93 zNAF5kq?x_W3XHe**)u)wjW*ve7M>u@?%w%(CvTLS@pav$Z|6*ZuX`B!FP(Ri@$Fk1 z)_wUIWvn}aZ{mKP)5naj?Ugd#w&L?@*E!7xE^TySc>7$vhv(PT+~t*}sR@>czOB9M z#_{FJyl)?tkybs%X+SR6>TqdzuXp5E|tsa{-aeT6TVkyHT*R3`iIqKR=UU5Z@TZpb)$9@<3UN=^VjyqyZxQLeB-6~_rXKPc`yUB3Fq zH1=!{;qQqNy?xb&@Be1s*`xVENn@XkV`cVIR&)QIk;2Luug_M8b$+m1^x=_nX*RPN zXX?Z{cZS-_U%sy1r!d>+!?y_v+bbURUE&LtaQP}9^>~{0%$uBQHy_?p_>r_NPLB0m z>#j9>cFO$a_!VyaNN{OXjM|)SJt90mcmJ5oyztBVfRD?Trat1%%#(W>FTmO@!w*`; z`|-Z`kIC+rZLIYct|&J0IxV%jevRb;ma?@k%{9z*8JCw7)#=UIGq3Jju>3jC-$xx@ ze)+au=OgbQ<5O?*7O*96?Jik;&-mlocT1jesug^CusQwRgRc_nQkUsYc&;vax9ioi zS*|6VPo;O9U@7)tbPxRUtoL}?155SgYZ(L&zJDEF-Kb=6PU49izpYlrA-jXmgg@7P z$bI`VKqIHIKdZ`8g5kk)g?U#Clgw=t3o}ZWRWB&hs(WObWA^T*=~wqZ!k3SK%$P5x zv$pp_r0T>YFEtO_xGOA|^(%~5$uyTwxu(1B!S4hA86+Rxp4Yr#z26V{N4im`k4L4> zn_bo5S+^!780hI6W_R%dYq^=z>Z`BR@Ow)LU)PN54qEh%<& zAHF==Z~mVlN0;frtNU5~&mEP2b}W|mUt8B7b+A(Z@abqxm7uguN6sC1TjU<|Yu=9a zZT}f^`8iK6_qh=1XO?qf!m{#7l`(S7_t#e3EH}xHUO4CL#E+{Vo{arH)AOXVGVXoJ!Fxr1T?V6F{vLL}Mbnuj*!O4o2%gV* zQ1~loSxjr3<#Q7Tp@=6970ZpS9tKt0s#?8+X~C277Q&X&&T{{@M6d_n={o! z_V|0|IYDpP=Nq+&s z3Owm^m!z-N51f2?na2C=E59w!%v&%&iXnbB%QX2nUCsxYl`WUrcDyP6&v0!?(qYSg zu^NngUs+bZu-eMNVDVh$QsW={sVtA5DNDR|$YJ37)1T!QyqmTCp_jAZhCbto{Z)(y z4<5HadaL*71;3r=pL(&$78#xoyww^MpZ)7!(sYTFmMkSlgPdNe6`1oKc{HW3!13f; zj{-mby2ZAcmFhayC0~|I3>Wxd`L1H=xl0a@ubbRsIKjSN=JE#VmN)~(U*DH+XgMz3 zVDanXZApD$&e#9erMDFcs(L_q<&2&?4bCvrz-85o6DS6!OJc60apsxHS3 zVs~~Ic`!9_*fzeO#VNh-!|SumvIoC^UGy-KuXx_wkM4Ghre|=UJn-$UM*-iP^z9~1 zx4NX++t_<1I(+)g#35^ZZ}Q}+2Na6md&R$d(%gTpfsG@$sl5E)f}RwiB6qch;!jP+ zH>xkaQ+b>Cxhi=ngW^eP4h!Zcb`!IA#aBwyw`$%h+P%T!L11G;*d^sJhEj(;l?>p=@6zPZ0It>FE%@}zB1hD!Qr*9U#^I~SLI zW!>2NMPfnn4t0ySFFh~Y8+@1hvfzo(om@#}la|eTcjp@aXL!9J*5zeSPr{e88pk}C zWga}=YQ9kN<&8@{6O8YC%3#oPdM+c}><~D4v*q`tx92(7cP_oD=r-X2%ReIv^{tGF zOL&*?^;jfdYkN_AfzLyvu>bh_wGz*#$^5!tU>6Z|%K!Jy7a9lcHO|}gdxfU@o)M8f z-7YsJ_i<(cqfA=E2IdJ8a@A6tN#(|j{}~t;o@5YOP#>kt6QjT|O@=>;!AB-tzE4vk zA!R-L!nd;uf{t7J)oMy}tv%+yJ&T3Gz%qD#aNiU@aZvFcu;$^mo)U?`vq~%aiw#x! zSgkt(KNoN)%-c65MQ}oa@%MiJLlbI_Xid2DpMgKn?+Nc(dD+h8D>#-2goaGo^LVTF ziAx?SIt%vSJ8;Z>siJy$l1Ryt)KhO_^4|IT1T$zJJfKj1@};+uXu!b=m6Wn`8h7}j z{45SEy>WE&?)g5!0#-&RlBPzOv-bONnHd~R4=_G1>uMvc%&}xb%^mHH5B>M5~@WOv9vy|JzojZc6o{Q8RRzAby@b~>eyCx|4@ z&#333(5y{+aCX`Ljd9Qf1Di1e2*JZcgl*`E~KmQ=cqZ%9kf> zi+KAWZI%av@Fe?=BZW`trRRk4)X=OFK{e+wvqRVsnDTw2ufj-jWo;oqXE$z`#xcF6L% zSEbB8uCBm0r+fi}X5bDv#`Cf(Pn6a4oVpnoEwk1{k1Kuem`S}mRm;2 zr3{VJEr0)K@Z$U#cq?%7+ynD>zjTxT8`X45TBY%_-Is;20oJUCpD-M@-urh2!wEf+ zhT{@CniB6iSnfp_o>X6}^_m}!oyFH*LA*2A zCpg+@zV_fUF1V?DuZdY{Y5<#Gv~8Abo1}zJ#Pc8h+kd|GyW4ilUwNUQvFGPK)qWf& z84J%p_nk4Z!Od%%gy4xKiVvMW%H)akMa;RR;@|Y~&*?dZf7CBcR#H`*U1n)>rN^Pi z#e+k-?BbP=4#!sSNtyD~Q{wqj)~I{IPp0rJNS*RT*mIX+6L;P@FL|#phlbS+OZ)17 zePKI%{=LDIDa@ULRs99EFD9%$JE3gF@0CC5t&}Icy)DveU{}*nWV>>C2E$ve{V}sL zq8YRsmL9lM!1(&dB?I?+9H(Vi6dtopJsIPzcK7gZIYT$TnoWEC%7c9va{A)UEU%sn zoMhziRphzY1n=Jy-pbjczyZdc|h4Q6Y<=os76H{M! z)@a^6cYpm}tDB;WN+U&60?H-%c_$xOaAHT%Du)!Vw-XON-@eynlkjH)p4F3f$hz+} zjF|W&_L!9NL|ABCG2{Q73HjwSHe;+g3z+H+5No)Z2OH`T`I&h4AsCA&J_PS_AE z=PB1VQ^AGjkxu(-`6A0>wONwqUO%WGl|J#W->M+w z+9#0k+osJ@T)O-5^9N6U2RSsXIpZ*njrD@h z0u1q)42H_r<_B;pwRtq3*lcJSDPJ!s%f3}f;<2@hPt5{O)t~CO<|lbh)xFYj?2}JV z#q+gB$vLgFu01Y#cg*W?#`nc5gnYAJY*_MMCGmz~;*I3xvRNLBx`THZ>Rz7|{LHql zh>hX#f`6rvJ(EtcDBdmW?Y`RiRqo1@q&ze02?yCvt#0;UnfC5kWK!Srma>Bp;p~6D zEcaOY=b|;o?X&_u^W+W7ZZ2J+7xjW=qMvAAoD%=%?@K)stEU>CN-37$G?rPBU-NAN z`_@BSf=(@2eU_`=$oUZCmsgo(cN|>YUa1Ic^rlXzS@8AXmtPkas%}4h@0cR{vnl$L z?^vCU7E~(l{i$SOC{#5+KFeA6MOBSd*NN-D_Ac$6lRD4Q+OU$p)RkdU@fVTPt2@@M zONvlTsn;)`5i#NQg~9;!4`;t6xE07NY={YdB;exH6~SuVKI4w&w=ZX{8?EaP*~+!8 z(R;pQk2v2YrPCeXWD-gqT+#WsenwcmrWvzJ(WjVil5cEZrYD^F;C9h{#-D?7c6s&d zw;HKUD-{>i`u9cRnNSf^PuYJ4Ta6vUwtF|-shyXhr&M`?GeUkkON!t>QJzUBv$G~! zuQ|=ViQ`UclKQWC`&&IWd9!3bJ=Hbsjgxl0uzXeMtn3O#sS0n?98cl?8Qbjl-rs87 z+7+Xqw|zx0!_$ztGvB_;yi~beqvL?5P?1V+fyno>ZktT9WWAm|FT42N{@4_iPrGg{ z2WdBpLB@_Y@0@fbjJ{ zlBRYYmyDeMly_RcM4J6W2gXT(!ZW6bGt50uB6nztr|g=}Vq=wwlSChBpEEpZa_PvO zpN&mV*`CdKgKzw2u+n2<5sY4Qv}F?~=iwqz!-J+0U9P(# zlw;3tFKU%MEB`uR#VOf635ES$JUim=u9GN|;eYDEz^M>#@ z|9xP2eyLTW@(SzFHoF(E3SZS~DkMBNVhEW(`)d8I{|v8#H!~hsm~mzeQ{Iu;6>on9 z`J{jPmKZxhEJoiUQ!boyn@`Q#rm~tf)=ASDm)zDpQZvWs!6)lt2j1Gr8zNOXpM5*d zz*QV$yux>>(EuDDH_qwpd z!P`$Ko;)D&zAH0^V_}(7*%62H43D3kUza(_vqjNUZ@F~gh5F#2U7CzRP6sU_C5j&Z z(M*<@D`AzZzq#zrgL0F#Da>iDGqwn+`5kz;OK_s!=g6*~le9PdKFY?DEPt-kQ*)Q6 zv!#kw>p}Ubc2;b5A(+uxc&8G}*yIe~OpsY6b01XEXnw-xlTx-95bU(}@R~uP43^ z^4_Y-aHn#qTa?qjyY=Uny1c1bc2`Nv_0+a|JO6E2V|!fePRI)GD-C=5tIDVK%l(j7 z&b)I#rtO>T%8hQyTxaK4G8b4L-)gJc=XO{1M1WC5?vuusU8^}dk1Svm{i_qkp~X&wDc{SJ3}Zj@|s9`^54(5 z@BG!uo*5Q#Cgb8_s}++xF83c=aPI4;o7)yx{&ZLQa;*CDwa_P?k~|9px63~_iC|4= zT&%6Ym?Fu4!lwM|l1k-W(>(TUXzpW9;4jFWbShPcMfDWpIR}RNV5bwW7S2*&skG_e zv;6196U<9yY`c53a87>cV}`mdMpKg3tlHg{ocP`I>o>NUYI$` z_br)Kvx0M)LwFX02=DD)gE{MBzn4Dsi7#Y4VT!)($H83U5nOEd% zxT!@nK{DEsefdML_R~Kn7Ef$Dd5(Q6yIsW8q*8W^O17ffm1aywZhP0x`SiLodWFJ& z2CcB3lMFZZYwf%<<7w^Zz$U{z&D+;KeIQl9*~3&O`g8LYelNX-lBG72g%T@RCeP}f zDPdS}>dC`!8>z4)u1R&t--{}kw`K0A$&m z@{pfEW{SMU8vyjjwLUz z)@@nWbolcmzXzN$&G&BvPBJR)DQ>d&O2{cFJn!J{#b|lQ!6tc@Wz&(aXNFS)L_Qhc zo2ANAP{3CGZN=yF?4K8Ww^(}Sc;dr6_4#t_1*aMg2D1uu}4w;uPZyA^~n8an9Cr$*@4|+!Jj?zpE@e=&G*w_P~Q0G z#R>N2o~qyn+h;vX+3vtNaof80QSWTne_Pi$ef&Dno~q6}|1;cTmbE>n zT@{ga_3nao>}=9=xb`ouNRIy~@|vxG$$87t^-4|I)shAN=2xKm5qXGOyeb7Q4*E_IjWH)~b@C&YNC~@2m)( z>-Ki}$`9`k_utrm+)nNCx#jC_?cL_5yj^+P%X8JW+Ar&y?|<+=&!3retopB+z0C=g zyGlag{d+i{gkLZEV|wX}G>2~MqBUKwpPb(4QF`3@e%HOWQ`fyWW_PL^?b7_z;FI#} zulC);i5n_XOQnBJTjB0rJM0F?dhtug`vSh zZ&Me2GVM{8?K%CM*VtuqzsIIc{nL%anVCN>dVWOwLPYB(hs$bj`wmOb-tc(Cy2&0N zLiawF{u>!rzh=A}oLeU6As+G&&bL0Eh-ldOj=%^PJY&4W_bL0z5Yl3?ytJRf!>kJHP)3|9l62( z%Fr|0`mXlvTf3FL{C-Nv^!rp_{m+mdQdTOr)K#VLc;JuaHs->obv#)ZTM{&0zv3;7 zdfxf2#=Tl~&vv8kf|kUX2b2FeO%5>k&Su?v#X7NdhV_0)mAYj+U(Xl+k#eguPjA+} zlshR+fxV}e%P_uW#z0ZrzL7SDe})e`(jg)e`G# zZydbt`J#%wt4{g$YvDiJg`EZRCmGyzzkX@Q+vwxdH5HqzTc?`8wRS(}zHq(a$MWO; zyg#yRuV1!#vh$4N$KA3F@4G(d3)fu|ekH7Namz7J0kO=}xy+Zlo~)hubce0}S(TKh zVNp5#+1G4RxqWUG8+J-^J1fepuK&7v-t|3|3o^4dXH^}DJaHq+(jvinVjR2vF?ngv z@^AfHUC!*}iqd%?cVi8&bJ$hW=w*AaJWs3SU&dzJo){y#W6_7L7Ozs@EUt}w6LtS+ zcD2O63;Br?Q)aw#DTv^^Q?|}M;>S@X!+&SeA{WoGm~4}L;h*V&EsAp_7A3F;_^T}y z)8gzAJ#p}szs>jcV*5&a)?Pat(Dfqw9_V(ozh|betlhZeWWfR%`J6s&u}80d74OSl z$>$egJo$Xp^fxc|aGXf0JY2q9ci&ZA4K6F*yTx&(USD79*ZEFO3F}R1?CCO`c%?7% zkWv9p%;bZzyj~xT3`_iH|9(>!6S6W>dt<~R6_%5^JAPf$WQ<@9JhZL2iPtjprnm5= zV5fNXZ{@ce0;^a!w=UttSfz6$Elwi__koJ#RS0y zONl>O#}D3b|F+Ni>O5cXXRRuXes;eeZ(ncvZvTg#$ckkDPLmx0%00%S(v7m6U)HZb zu}Sk$Zd`SV`|R#xTIDU}+L>j$mauTFzwqM2Mpc!E?Z4H(tlrq6|4wl2yWmqDhM#U0 zPpXy)5y&jM&;RC|;j~@W()|5Ls>2slXg{o}%5ToEajZ><(oRW!uAN?aoNd2T*SG9g zeyzEd*QP$Q|5ou~Q^n(>`KpK4bZ3;!m}!44c~1JRH8pwLey8`#o%icZiFh+Lz3+}t zV$K7m>g{z_X?f|7dk@)H!*xjCoEUR@bbb zW|99oTC1ox?0vTK)up~VTA$OsS5~ASxu^MI+vJ5WdkZeU{K#ggaqdy&pVx~%gda34 zEX`m0O6t+g=v{&)@y9qM6uya`a9#0Z)gy~{CEYtu>!??`)L-3ZmA-S`=Le;|*SprF z_y#^vh_)=9Yj5V};6%(@S6Tm+M}B8XmVHv@oEZ)0r^~Tfe*ddI@j_B;b=dZ;nHOBMwG~u^7SEfv=lar$ z#hx3knr7R|dGENIvo`#>TdIoS6~3=~!Vf>m=PJuP@!X_x>4*F_mCQszNr9GB*y_l<>{^3>oyr+I!3wzfx8f4KX9Fg>=8C z{ipR!y7xXMXTejImMdTMW!?3bKI|9WV{RT0W8!PO=RbpnhKFjEjDYb8_8Z}+=5Jen z)HnKIdBKnBgI0^`Gvd;WMdHn;u^B7ciafSBoAu-QKQ8ViHHIHt-?!B8K1i%z8}r2U z$aU#Z&fjM|pKktV`tf_up4xSP9IijVwzZO>Qo49akx=O78{g#5?YDgtr_{3YZ#3V# zUt534YJU&E9(45H((-RVze;a6H}^YmQfEy{?t#*i&n=iIztFPy%G@yRjg z=P$21wEL=1?)gj&p%X3I3t!x|Tz2oZXURralS?Nyy6h}kDB8#7z&t1Y+J2kjeQQoV zchf)ey=(iM4J(*c$gV2G(r+O9Ywpp5`yeBqpS#j~i z(lS=&e=PocQ|hyv8E&aNq*%wRzvuaTNmDO9MQ6p*$9K3bo-6+f`P}v5^1lmxPit11 z8?^R?o@bD2_;ty3mDTB~a~3O{RG71UTkUFtSfkk4OKX>2U}N23@$Ku1YY$9!Yzs@4 zm@wh_JpaJg-gA2{?%3C*(XsP}((h9{p3JY0YKp#j?0Tx+10l-;b`4zXo~lmlK5)jV zcg_d?6$?{J6|bzGDk&k8e626-fX8}fjR;R6o=)%Y=e??8b{V~$=n!PYuQES=sgYZ< zoK&a|=TE1E^*=5Mh2>6kKdn~xUZwnxrY57wNpFzjhCZ&x% zXT@FH*?+QBk88#3KRuPhito`P*HZ0*^gjRjydnu7tkdROt1ik^D{oEiJ(Jbvk;<%W zsyQvK&$D~c?PF{q>(5A(GJIQg_$~XBEujkXGj^Q2=#yO;BK*8&>E_L{{8g5X(--ba z@LI_zX%Rc8`IScIO^@DZ5!do3N_;v0;|jO2+cT9JhRi$8amp`MJWw;kD6ryQaZ`1d zW#gjgViT_m9-Cy_pM4g$41Vu*o&9h8ERnA|cc#YYS9K*yglg8ElV%F-w>Z9h=SmU% zIZ92+Pc&FTS6mhGCwkAw?9xkV6Xlia5LcBb-fj2ythddy&j+XOk*km|dH(chXrag@ zPQ?>n80!Mx1|PQkbgkaXZfRsn+=A+FBI_5N6uom!X&X!B9*;MbOp8^lRkEcwwb^AU zGG~0XyYi!vWeMkVlP;SHz2}NgoP1-O*;DhSLTP59!L6RoIrAQWS;BPdj=N5m%L4B` zO>e9iF9`Z@6?V7YIoS7{nK^&M(%qFy8yUBKdUAjB^T(f;dw89z*(vg1#nZa?vMXbl zJXL=mEk5SSeOo4}WvVi_^)9ywb5DKxe7?Z;<G)Ij*7LzWpB#911s(aq zGG}d+*v1Yy*6l$OY;Ivss=lt2mDzM_?anY|1*^}^um5Vrv`skDCbB8kbNvQYch{{? zw#+ydeWQBb4vUuon_YFZ3x!X}^nZ2rNL47cyPD*!@i6DMSY=_Sd>K>v0*3Fug74kS zZu-^x^}=T%)ed)#gDT~=D~m-Y@_c0F_@FRBH1@J^<8E2Y-* zm%?4+HI7s361Dy;e*G@KH_g-zx>zfo(e zY4UV;=AXS*5jUo3D@%Ots|ss!R$6?=?W9H!)3NT)Z1zzlV%s*nZF^*XTX@c@xoclJ zE?!fADeKdn#lES|G1Il3xpiIGkFnTZXd zHtR23GFcQRe4caCH6>B+`qTbFc2jN6_H;eEuuSx`%8LoA(R$SN; zBqA5me`-S2gQ~~Z*0^Tr<&{M_w{dag-L-nYy(;-t*fu4h1or1@kIyN*V_y*Ol|ScD z>?*J6`BV92s)S!U?bs%Ks_U7C!TYB=OJ`1bQ1W!|tDl$FrfxNMH;Y(!qt8R~O;$^I zq{Ds9f+Mp_{xeKV{=4w~>tMB2pPpr_M>n~J8Q6s?^;a6~(s{WdLZvnC>73&dJdGz5 zd&}xrJ|_Rr`&%mUbYhApL%7@VY5c*n9zEUkJ6dgJx|YsIhGje-o_t$dl(KEdr^t|r zt*N>bD$d(Yz3gQ;$1)||w#?pZf0F*K>xb{zURrA-yC&X2Uw4YD$RvUJnJ4Yr-tg7i zaQ#~5S!4ZZuJmuKAL}GLIwKvp++$|_@%_NxyY)WXy5z~{(nS-k4A|I+{qH}EY2?}^X0izwEXv}YMH+Fe!uLqYg^WPEq)sAbIh~o zMQ!*;{|EYQrC(?1`g^pdWEzS-N+`S`ANBL|QTa`6Gb@XYqjdsjsHkr5Gf&^Jb}#?8 zmltZ{?QcABI(0{LT8!Dl<8p_u?=6{TFJWW>_5W5k*;^=jN3sO#43C)>|K7`Hzp;KV zkhwkQ;u?(yJaacCD88Lv^{gh8t#bwcT}SyT3k*+62C>`x&Az(4X{lwgpMJ1p(kj)I z^L?fM&EF?3$z)-R_;Yw`{jt^Nhu4OmpY=-P)M1vaiTUydlXog_SihpwpCePqMQ?G) zXVv@(>mBOm_6F|wz&E>KV^p`!g#Qf2jouQPCeUyqsN(z?ddXY>^p2f-YFIRvhzo5qO!!>wcS%rue2}eo5Pj< zN9#9Z&RHpu`aK11V!M%j4%Fedbqc;k(58WUq6D6#bju>iVC7!)$H3VfY5E zZV4U9O^)lAi$BaU4|m`W>3O2P?VVxYoO07ybz&MjOQO|M!W7+u_Qyxvn$PDHrIN05 zFZTTGb#`)bO3ge)ye}KPQ>vcyN98U*{MPU0v|G~U8B2uVjqc2pY2M{&XB1o{KCS(_ev#^r;wMMyF6KO8Re2++QdO(vt=|^5eNt*! z^V6@X2Yy|f@UUWEi?`*Z>iM>(KRhcHh?<=vlQ&T$LC%tGY5&8PoG8}~(q5ve6N?u5 z2X_79`N8bbQag8<-I2b?y~aVFA3nG>=7}$>$XQ zUA9?v{D5yhM^}Vsx%|$}s{X}q!zUlucEM+R*tS$@i#zwt{A{hmmo9I);$|K-W6rtY zoW<6Yx7EIMo6J(o@hoG9MUeKcdA?rr`i_fi*7Q%Q+*Dzw5q*+x72{nE%{$+IT|Kc! zC0(-Zdy=ep_NCVo^~5R&;(WFlk2cb1&s_GUo3(Z@4ViTg?u+l4tI7d8Xv#naZ~NrV2;hZRM3+ z?XmpFL5bja%W#Y1SMz68mDzSx)=AB}n3a)z&-^3X)@RP;8XimRcMJ50ocO)((WZw< z;)>sekF61TqB|QHbI{(f4nL-*H_jUw{ zPs-NIxOZ$7&+~PN_< z%&Mc_H`E#r_?Wq$D!hMhhrZmDrb{6SKAn>|pXJ$|?BRUk=j+%TR=HO_g3H~{*Gunl)Dqs8@_CLyz+r}O=O4yf);N6>eKzCS zz3hG?HHL-GSNFPatulWr`qX_Y4)iXY` zndU$EF1oF{uTP%)&4aJT3#HG!*|_r7zQs1v!&AL>Cv138e^dEanC`vl;%7GT?sYo0 zxWQKI)2rnPop*BGPfd|{wlX$;)$tkY12!8AEvY#fKRZ0;v{_ovP*Aly4MgQ9=(>>lDN&Z&COs* z+H8wg#fSH7SzNQS>4o8eZ!7Y?sv0(m9OgYftKCcYd`8|ct;BNS>g{oc;?27EN-dRWr zvRfR#-j%Q1lgz$@eGOID?RPw3TYl`f-=`h7ERI^olyAK0yY^_Y z{jI5@ZJ(kG9<23U_WC6EmN9g~H|@uI;S9PZ+gK?2+MP->dFt z6ecy>@A=A#`eXK4ol4U_GJUzNc%VM_@Y2#-;T>!8E~!LMm~VGcFnK43%;z|EvDM`~ zoIFAuiz7KzdfxpCyVn2sX6_Onf4NJRY0p(k|7f2*^7K^IkuL>5zRRjq-;Pl|y4z|+ zoL%V4iLWE2wk|Oj*EF2DeLchS9Ik^OjvvXEeDrBuUh{4R!DGj#Gw=ExcI)-G;^W^= zY+HYNhuof$6YGUaw1TG2vdy^G>T%a_^YUATxh9Ftf(;e7YWvq(xaB_n?LNcV_|5Gm zUzN)zRpPUZ+-_RN8Fsb4SLoeye=F-TE}pM;i#A_b6q)h|8X zdXGAp*Co%knQD7*`C&~DZ$|;cRrAel=C4?Dbl2bO(~fc}rKwCvPhVG?b@$9&HF3^n zhKwi7%@Z$wSah(cxZH$eU56xts^}EqcYIZsYL~gQImMT(a&cH^bodw7+01oPFT+?) zlrp;2eSGhoZ+i5F;mKXb!UkG*{VWdrXW&{YB5o4($>P3>Xzq^m^9;X|mU;KyH+p9& zGbe$6X^MBc)u|(=PB}50?wMe}Hezd6#6y9zRjP+&1UQ&)e_4J)+$8rM^R_Gg=G-UP z`}Uuk$+wW@;vPw@*JkFPm+b48y5v4dmQvDSESh-4!1MiNKkt*v6Vsm^V{tC{y!dD3 zD?YoqbyJEKh(-2pJv5VfGSAF38#alz{~4|?^DO&ziDT{TQ^JNutiO-%bA0P-ROu39 zX{7Z@kj?Y>hrd~+#;P0mvjU!12qkQ4z93%}=5lw_j25S#DVAvmfA0Ez@cZ(gdMN=* zYWldV1pB7i+|XLLKrHRpy9534#U7i~Z?zm#SRuiw%zdfJW6vFVa(HStPAa@?H)Y*RHa)eLRTEfdJ{S4AqeN?q zM+*OjpJ{gD`)V`wMD5ak`#2RfpFZ$l;%!mWHFYV+te+{Ce?7;ozhFV;rFECi2%oNf zaU{L@LTKEPR{`28H-F2iaFiR!%{{(1X7ZUy8gnO4Pg?5mdrs*}v7<{1r399kMKt#O zXZX76ir8+BTOIG!Po48W{ZnpAu}YB7>1y3~p-L)>_j=~;7ILo=6S*rGF6m}1W_El= zw#%(E9U%;T>)bwBB>!VtSg|OEVMpTJ7Cz3eBC!UU6QU!1r8eC*;5b)v;LfM2$Cs9F zxVTPbg7J|XCpnvsu~+TSmE@P*?R39dMUTx>_V4PYn=k3;z45)&ENQREQ8n-DlvNty zQhDiSCN~!KL`Vmm*UImVDAal`Blkeg@YW=bWs^LP9*}-mry?8NQ~WwQ>g|k;n?iJK zI-WdmpR-bV+P6Pi-O(L-PUjY|X_a6k1pWgdUQ{xNRlgA;$*t_!; zuj}2@8$%bgF6(n*o?yHqh2`t7`BiPAj7~?mjV8ASzdsr?@0jP^(4`ZUCN^1|{PHVg z{>?XfJ%LBJiWzP_`S9c`_XW#VX$zll%wu|3vz_CP7EfyQepAD(4!gPK9Pb$4{*!ff zZ;wHvP42cd6;1V`iT~cOjp)06x>GsrVXEHw&6E7|6JtKFdcSZ>=FE!@D!L-9Gg{ef zw%a?u_Q;v*ccf#Pr)q5RmhWq`I~1m-@9n%|lffWunfSt1!$YZJGmjBNh)_)P?mHpX znM!{r86|EN-d40!Ip@80gVx_ALaR-H0h4l#Fgn~*-otm%04`~-@h(j zyLa!N9nmclo){+15q{Ymrn22&dhe;-ny>cFziaYi!Q}Q(?$+PS_phs6Y5BrbNJC|- zw%M6f%X|LJw>k}4w$EUf)SaYxOu{Gab#k800Yho$hDwF{sHT4^5le!W2IzT&y$vk- z>ilp==C>FPj}5y$Y$nKHQ&E-`C(`D znJF%}>wA*l*J>KLwz8FkO+Bn2uP*Dp)=Xl3)Z?1Yrz>KXRh`h-a>pSv`KPz+$LAC5 z_t@G^wcX5b$nDkVt`vBIKdbFc7e~UKg$rvB`bo3fRA1R})AmR=*9z9z+#3?M+J$RB zUCDJ|qx3@w`HrtEAMG{U@Gg4CzH-Hsl!N}?-1jD1?rS}!Ingt3g4J=8*&Rtt{DC(v zyG}24c+$LI)_tqERP)b;vvc|<*(?p<_|G65@_g@Z=dI!I3j%o3O`PXBP44knpVq}O z<)qzFcfCI~M{2X}-dQTmvpnJE)n^)d{xR?MEcxKKmMPLlI^+KDi*3KcO8-8V zxU0w`yzYxjkbC>3T76RO*@c$|8>l>jRl^`MgB7mD<~ej?>Cn-sP6|WPa4utM4R@S$Aa0JY6_pyW9J(qG#jIq)wTW(D=Eh z^cUZuy>D!-vnoxWml-~n{_sFlnSt-C?wabk0eX)dnb{|X9@H@kms@AeAGLS6%O;B; zBlkNB5B_Ga@;mX|@6FET5$rS1-;%I&oElVd+)sPyrfm_IJiq<>e42a9*Z4!5O;$vC zmjt6K7l8qPc^_|Gu6@5R2O8h0g{cUC+R zzPCrmH|>jUm&l`;I@cy1Tm7u5)$OKR_2cDRL-uWH;oX>m0E? zD01@2+?f?KH_80!U%x!-(3P*LGbctp=8AsmX2E^j^4q$skmu$LF9sEKsqXgH&U9XT z#8iHx*9P`%|~~?rDBi zmAqVHeNz3+s7uEKFaNR5Ubau6UFg*FXA?W$X}cH$LzM2>sQrr)SZY*Z?BW;7no~S`Bm4=)qCdoKO1G;*i$86-k!JQ zdUgG8^XQC!W=+9Q_uoA9pJ6fMDT}Ya>e}{B_W5Yu{3Y8$*ED-!w$wUFW#;L}E#$t= zt%<(HuDe{ltZ?lIYwvoFsLZOl9lc4vFLC^5xW;GLpY>whn?IHh=UUzOxG(7;ZmDIL zu znp4WOQ)$&zO}FFAYl1(v?%g*_+V85!!K}vPQzy>k|6mBxc4$xe?}#7uuA9x`R5xwk zG0ExTNv;#i(?uWH3;k!v;w_KgVP)4^t947f)cVP31Iy?A&)>!c*Vfms;Jv=Nax#Pa zth*lH*E_WdF0bU>EBIoc<==&+-j}}p6WRAEQFx}niJi$Wmdv~Q?AP|rum2eY{La_b z#7{c2a0BP}KUs|2qGwtX>puTy@R|_OV7{v6K<&jV{ZU_%C63G%IrgaL8q0%Z*_9H4 zmp_YU+?wRg7QB7cvx#rcRRo!rK3 z+4!#O)(c~^J1Y|B*~|Q!dQ_!Xnp06DG@7SYJKN>jo|TH(;R-7IawfV}$;XtxytG(Q zE=x~)#p926=dZiZ@+UNPeTC4ew`u0C$#->pibZmJ`gm);|4#Xl{5$VZp)zyT?4_Pb z{TcF(LG=gi?2Nr1o#(#u!#Z?t&uQsr_XK+y{8zlH|Mm6dec3N1Y8?ErhuD6~>1s)2eCY}tp${vLtIOy23y^5hnQ+Icw@=}w=$#=doNX-k$kYTmojh8IQB@1hAG#7fx{B_}aU{U59<+zfhwCWgol+ESc9Tba-&9dG&JB!0e}Q#XaBWJj*Ti zK=YjE+r6frO5T$5V2A?8< ztYxCb$%8EEOKlmI47ddfzbG{<;h&Mr($iIU@zeA??-JQots@aXeVh_f-o1CdznTZoD-up+~oRKS2zHBN(TjJ#fBC-5|I~{7avJ~H&Zd*2QuIz#fZoIzE(CdYc0pran@>PYb?!WdFUznG9+p5Xkuh8vIa*vs9#nQqXJ#EYq zkN0v($ca3E9b^(yv#R)Srp=<*5T-wW_Frq*aG{~$Fbm(J$?WQL`j>lEI+(wEkj{JF zi^oNFt>gjuxr|8$R(b5QXEkJs`}PFi6I$|=pF!+b;3fyg&~sHE9U}6~Q|3Kh%d9S` zJo$K5Aqx}7ahd8%iT;dN9`6w0I^cgQrsSOE63K7hA1}3VyQ%Vd{;9U$IR+<>XE9{3 zG_jv?cswU*N<+lDj|blSDQpbM+kZ$?O!wW2RF|AN)8)@KE@U_^@#{%|n}IoB^`+_Q z4t;J#Wpk3ImNTpq);hl9!7PR}MhV;EbDC#v&#>g;ka$?28Ooi~dXjyr{i)d-CLb%R z4loFm7P_Q)%y7>4CF~h|hZh%Vo?G)^*}XZFG&er%Gv}G7!H{aV??IQy@!fpKS&GE3 z%~`p7xkB+-iPV2`_8k*1-)oS({q6x@`@Jbo|L!=dt=0O|@1Gxo%q63@X)Mp5vdk%2 z;CN6nli~R!cSp|#e;J-H3){c98Cg7EYq6Tiy(WeERs#d4x=s3(l4YCI-zTpRFwpdB zDv)1a^U-So`)9MV_ZR+&ur+&Fs!J+-dF|JsSj6Wp>;Gvf$I^y0Nm&P54K)G3n<1Z% z+rHptd@}d(`kc>QzPopFc`z$*1#fve`$wfhsYo-|X<;vpyd7T_mmiUHW#*g|pXlPHtbHmnC$nOQ?9m%7-2=9eD2z- zG)2orT~&k%n{TxqPMjjd9u;!yIM0p41^1?KBq&aKzC9|y(;|njaw%h@!~vGa%cBAo zxKDDBJXRPogPkEou=%Ca=R1?$6wP ziQnCfTM9xFn7@2o_MD-hwuo1$!R=n*b@r`Nty@^jST-gsC|8~pdvp`mgD>Yaa*uqP zyTQ#;`PO6$KSrB5!nbctPWI&E@;LcVZb{h^h1LTHPW-HRHc`sxK*J68XJ>V0vU+JS z_Mh^v(i0Pu&$v+-fqoLnNp z-+yyuO)7GlRNo?1epkupIK%V&oy!zC*i{PWePM{)&}>t-gk@Q5gH4G^DkGn#D%(?r zN3*#3*ewhf2G41#Jgdfdg3GY4dHG%m1`$bRl^!Xs$ziyXFBR}n*FYSWAH5Vk_n=?^m5=UofnxxDJ&8`UH ziw?|^^3}KI?wqWg)ut?QRJV=c-C;vUf1bkI*JiwZwp#Cl|A&e9mfY_6aNLObLW$Ch zs#7g>`a+C(DK>wV9{qh~_Srb$IP!u%~CEmUvO&ly{ommd;Zp z-+%fQAa*5KGf@8w=M6s5>Z;)Igj=ub(rlV4lrP_!t@dN*EE}0rk#dtKZBN5_pcD+1?Cyw|Wv^TvbsuiWlAymrWw z-*tb3wt*HK=by9Y8j_DP&ZO|Hdpv8pqBB&DDWx1kA0Bnr(s9jwsvt69+H>~h%C;-26D7p;qFiKF27j;r8zLk8#E@M!a>w%O)-{Ze zwkN!6eXKh(KqgNzPewPCV77Qie>wLJ~w+h ziIsoSk7E`uj|v&&-`B}K`S;Pnr-gswZZ2aiI&kd8CY~=v?UMf)?51j`M5z=^e0q%Y zPPn?=RwnhC(*-A`s3$dkyV@5r1@|Dd&$2j;}z2u&YfXSZ~BbP<}lP|UPy@E z*tm&XP|e@}Ou&aDA0@+LKA%YLF}2wovs0ywYwr~PBf*;-q?M za!RhJ@}1`1*Pjh!l4mtn1a7OnIQPlt1K<8=WhVc&*-^PE%HZaWI)~cYS0#+BcNa4< zIV$cr`B^4e;>%Gboxl^v{^@RfcUMKRY~sty*V=YYx+kboC=w>^7$R@}JF9-FtKE-f z;fLQP2|4{~W1ry4yip}M=B!%k4(GgfG9pkTn*_@w_R2XRn+&oYpqfkn$_B6vQEQ;`c1X9E7d&~2{|d=6`sH_;c0t;>ujCc_yb)><$0fwzipRjgRwv5feZl0+EtatA zz&4&!6+bftT=mN5OqJ+){yzA|kqxXKOTvriZ=a&M@S48wf$yCx6Lu)p_IUwFJK zli~49uEPxn9aS5iq;ECJD-D~%nskJRhpTA9@zY_d;XNhF_wUVk>XbjRktJ8!pQ|>r zQ7xHe$&ti1CBNCxJN z(AtIFX~CI50kBU8@S@3JI02lljO%#V7!4xgNB_CfNM z?x~9>#fuD<+iD(7(FizZ5YfDOpVh>`oeJ{0-gyuC*J?8=zrAxv_ESsX)~3g=kD3K@ z>Pt9r>z_Ej@ymaP*O$}NoHp(@yQ+M%Q+dGx%Y?F&$CuatXIRzEa7>3$-rVlbKU1}s zb=SGp?Kv^yg>5Fc#!0RxjmHd%>JN3g%$#6Vb7t|gV~oE76I3!~)BF`1GA0*Ilaa3p zQjUq<wnvrkGS|fgM5So&NNA|yj}lmHKI7>&gCh-cb&F=%?0w=kFX4p5`C$JNmQ@d< znL-#Ir2drn&mff%ymhuZ!^a&38MpU(e+s{TX?7D+W#jBg&gmj+7y{lOm~n!gOSHgV z%4{7+Ov%qyEf0pY!l}nkIlh1IX`r=-;gp-(y?b9w)|jaDF};yt@@Jc>T2gOlar@*? z$K(4=T4yf)bgP7mKWI;vgl2+}!<|nzA9PI+GP|p}L#W|Eigy2AuanPK|4dk&D;buz z<*LfVz@p-dI~TVnc+F{^Bc~zJ`*~r2(_5PdmsVQ~I5IqE*zj0xi%Rvu+L_MZXMD4p z9~HZ4v&y6&|ntUn?%~jDfLL-Tue>eVUvFTu+Pd@W1vr!naBI-=#UZ{~4s50)(gBoqC9&@W-Xy z5@H8cJ$S+=Xx3b4^(fw9e)8}Ab()M?Jbtehw#iI=5+He_CB}~5Cn0U>5zRa0Mrsbf z4{!LsK+JkJW1nH;t(lEGXT}%*O8&Ck(uHC9sk9$tb?YfnCAo87`N=`TB1W-+5pVf3kmOL76K`DJ;DG+&yINBTK8ONpb5(|5@v%g9Z+mN;jl<#{ikIklEco>=oIm3=#0 zPbN|P1RpFS6nd3%LXAcj*-?9dg&sQ!O_b|HGWhnFrJ22XImo8|Wzx%)f z4R!XV>=v)TE?_;M`LFig zsgtyqTsD!lyt_pm_fjSM z&7-Lkdl&w&clmI3#+9{OUWCkf6q=J`H$O%yIt;i9xk){I^E>?M(^ONU#~rlb;7PaacZeK>Y)3d;o7RI z^F43F!Y?S)>xnwJbl7+NnsxZt)%gC(1@C1y)_p zrkrH`erwi8!=0hYQ;K%V*1lRYPjR~Yj>@HiryjTUn4j|hK1FWkmvyfyyaF=!x?P!h z>8S3K$rjODDqE!2N_yUuE}UnZ`Ha`V;a1Bhjnt0!CHb?!$epKkZ>V=X<*cl&z@cf@PyBiAPQe_K5}*`7UTX#x8-+ic;$ zk4M6bW|rK3ujX-5P5mJA_UAEf8$YUL8y1%AniII{L5_~Jz2ob++DGsE=ZRi2TepmB zOUr)-xyw7k)`@6ppL5x1QZ;Sw zU4BtU)_=7R)KvbC{89GKS+BEJbE-(Eo4M#4!`E@ikIvunKYnYAP~?l;r|dq`^Y{Gu z&rq(+wByxt2_CC0v444%Y8t;-oBmj=V|vidS5lW;3zp>QstIns@{1>Y_K*Jz-xhrM z*S9`<(Wz3;XFO{X>|dSwlHmUHXa(z=U++6qjIzwbd6Z*Vb`(W9-+z@=@g*a7f=}1P zT~GeJJ^!B}YERT1=k7^av$oIV({hhp_wSOO_O&yDHC3(m){^)#CjvDs)P%UhSY=hyaR?bs8V z|HyaaC%ra?t+PH^s_&ZSp88zx{_|NAGM~%u>YN(OpmV(WKf|@PTQ6>$I!WoMc(GfB z`km^Km&=a|LN?KpxHmdV{*TrwTR-; z^4K`-q{b_Qh_XN0W%Yb}viePo>>lpiv+i^spY>lYi7!8%r|$4bt#k{D_p^}rB6rp6 z$gN}U-!gnWpYDF@`7=vXA*1hb#u<^e{$f7=^_RA*Y|gh$yK__G&hmvZ$x5>}9_7jF zS1H<=l+0uod}V%4`C>;Euxfq-YelxC%1WTaIe!#9%?k2O}L zhMsyNQGnYSI-}{Saj>%tFNMO-n8~qZdk=u7kqDD_Yc>H88zCAj%Q|z zD5Zs_vKe^&e)3i2bKE)ascX&)X6Eb{?icU;CV07M`r-9l(G}r-n=W09KhtGD_qcoU zmEUQ*PL@_Y?=oyUuaM zKxIOO(!Qx5r_JYYt7CWM34Al{5mUM0o9YLp>m`2lF27UZd~{Rhtk882c~ajR$Xk{Wo>uhyM%*?rD5{n z)`>c~A4xaoXZC(*PgfCavUo1{HH|mw_#ru-`nTFi7p&fNG)~^%$A4|TyV#^VuY2uI z7mFXPa=vx4bj@88#w9_CP5OJJZSqX7{?Ypp_-MV@kC}RTrX_tE{BsLUulZShU|)V| zOP%}=@gwyDB^CTlf8?&4d;Kd`;ht}3d_aA{xARd~uh{rM-fhowzOr<|NtSQl^RseN zyH8J2V_D56A=AYF)GIV;y~Nh~6MIwE^zQEz|Ie`ba>Z<~5ABEFYR(U7(!F(T=M#w! z4)S__=AX}R^S`t&^6#!X>mS+={af`-a*aO!c8|QOdL-bsXU~QgZ>lxcoBrLs&;G~x zhtrnLle@I_b9!~n(nE)C_hePQJFaZ{aohIQSyKNNtF2%2O5FUr5zp+M=_)I29;AG* zvhlEJa@MhRnNBbGTZj->hTW0g*Df&o4vVgdDrH=TDkd#H>_c~LAP#+ zXR61WHl~%@SEToZ1?&l(^2RNkOJrT~{3_+fi(>B{ot@>HRK#H^yFvT&ceU?Edr$tm zIpc2b;#*vKM)PK#_i~wX#>tG2ufnGJuU2~FqccVBJ5~MXnaCTLulRRXM&Xd?o~@Rt z&L_U<-rHQp>$dgGDwW>DVgVeXGTR^fWiFk4rdP4#0IPg`-JjrsnhhHSde%5gvUzj) zK8(*ud3@#bd@mo)InGBGF!t}+@i)uGwI^3dKt&$5f+bz*jHP~e|hAo6(qwMCyUE=mY_t2{NS z(r)I$XVcGk%5&|%dz@W_@69aJ8K?SAoH=#iXGY=twVv8;rxm71+}QVU^M)_0P8Ts6 ztDKxVmcD9tgJJ(m%`}~H;KetbCJLuTEB=%sjkEa*U+CwYC z?l7%9SL?X+{!YHjQv+LcEYF&(Ud_9X;Q@oY7XweD)PY)TiQK7c>R5_ zTqXVby)~?b1^s2s8uM)mdw9y!?=5a;OrBL;=9;{nA^D8RkHt@)%slwhpih3qmnBaO zCv_yZpX%&Xm{xRrUUi*_j#mHgBWVoH6ACB4^qc6IyTMg`$_c*5O+{9hjlwft6XYgiOKiLLk1O^tNje-oea-ef5JvTW&=rAw!|2mEKKQkC2H zbh-u>hChF)M&JFDjC0t91l8CKtogJ0Gmf7~yA$Q{Z5`K}Q>h{P z!LKy$r>RJ!q=esM<|(i>ejTVf+*EM)Q%fOkvb%9Y3WcmjwwM zZTB8n6_m@awUec+TjA$AkvH-tc?K$S^R8xH_Q+hvw2{NRX~9?j^_OO{9?I{1I?3ec ze}?{v^PRLR^&WLyGx#{SSDTZ`{LJaTonKbwPMIWetH`y8`OK$>J7zGMG5&FCZ4G30 z-PmlXYxHSN?Osj0t3|rKN1NFaDtbOC$9(^){$=^CSkd&h2&QAt%l$+qpBKrJikWon zNc5su!A~ciw5m@#zI>~xQlF|hlceA>7M)3k2@Ef^#3!3QO8QxJW?x(d7k_}}#@$E$ zr4&ui>3MHGh2Mc!+l=+XnYT~2NZ-!d^;qWfIa`k}OJ;r3Zg?bJ@%Ds8_<2d&^VhGf zJ}Q|W@u<%6-f^4$g{#^gX*a7Jl|Rj%ddTqD8@WY&0XwT6{Yskjx9xV3iiDC+!o26| zd*w4`KI)51>1@_3m?KcXG(1D@mYA^f-g)+SnJR8oo(=CaZw*q5={S~BD(kp-O1R#( zg(61sdM}*j)*L>0_r6Gb(A0zKg=smP*BRW8YGMg|wr3)n$Mxqz^?X_Wo6cM~YO>7i zvwV)DyW`)?NQT7$kt$lT+qE7D6wZ&zJ$fNEk~_ClUi*3TztenQTr=Jmt$K0ln7?jw zPY(0-pO<+U4s=xbj z<$IGdY<5JynaumfaL1SL%9kbjW`nbD@QwxHofhdj;9gsA8&RUuvj6%lDGI)REKY1QK}4AAdgTr2KiI(B8{#N~eu9 zR5r*TD!ejl+Eb;}jI9>xP5L^by%O3zU!DYSV!RZq*nDyVlgqqJ#d(V}SBiATY*6{EzN)|K%^uy4$D=lR=&qZ( zsOygWJ(DM5>zqaRI_Vs-YH+LP^nx@JS=V0sbe%85Z58v#+q*&%GHBn(o9;0nY z=%F<$cOQ4wnzGPzm0k1Y`poPfoo&b7pUo-k{O*2!|Js~eb(h57nopR(W8Ap+z80V5 zqkVDzZta@d@=@yzvo=$YcJ*Ja3LE#89tW4sHETa%snGnUI^3u5#?&j1rt!^pe)T)P z|Jvs!G2hGDbAS9^SiASt7kjBUi*$TXAKS#kcK+Aq*YT?Az36PDn+mG4GKKzujH@CH5J-==Be}=EC zgU%nnm2zR>ykhlADfMHvjO*L&ALeF%P}D9}(DR?vRrm7i+1Sff?<`8*kj@l0|8eYvNA0o;iuSBp ze0P4D>*Kj>l1sK{FW97&uJWAyPgd}w`TXu&(ko{a?wn;N$-XW7QRP0{idnaUWmm76 zuc0{0&#ks@s$YKpKb?uqx|g)Y4yv9ID!hGZ?Z;T}mkg0U{~2cdp8QYPpZ93tzvjAi zw;c=4@v~o>so%55E=6PdiIcmvo7in%KfLyL;h$(GQL!}hl-qNEI@EHmT=L`Pqs)Zf z$12M6@8^H{w)Wvsqr&}~`s&k*-+Jyze(0^dJIKj<`-ue)emz?qU*q{<^J29WhT4-V z76)WkKRWCG_Qoa3(FLX-P@c((;e{kNnu>SaWIa?xcYK3`g&;PYnOJ zExf1phUA`!Ctsc4rut+1!!5oWo#fmY^rHKZt+GG1mo-LVYf#`0#ZR2S%GP(O{bmRPdPlpH7#2oMo_x%Gf!&mq z`ARNQ)n;MrRTdBA3*W|U-7(!@&X)9Co8_FMtL!FUsn5C{zFq9l1D)JyJT0K&hYtg80BYxy~mkv7V7_YZhKu2uh++CpQdnJJZH1{?LU$88?2uyPyU;D`|`qdZI@l9DQvjo z#Zb!e8^H!KR`_#ni>-dcO{j@tDtz2HbHgRdT%+Y1t^%b9N!ix1L zEY2*P^moU~#TV0htbKOJPDw33xbBp#-1Q`nh7%uCAD61|-sKln*=4&}-a3Ov{MjA* zsYx4e&H5YgICqb&=ES5)C$ASLidN{(_u88LaHmSX!J!k*IcDeXTE34}i85V2Tl&y&7u6eYueMfnA30HTYW!rj!D_6k4L2#Seh*otloY7wzk&q$*m)cGB|JRg}E!Q zU+{fhdf1gk(^Z=#e!b=ItNyZf!@1&=uqRDgS=Z})ayIrf-M3(Wf8DlNvGQ7}7Tf1f z+bvA9UcK>DQZd}bdpv)}&)3&BKP~!rVzmM*`!wmgU-|`#vy|Yo6d*SSRt}=zoUZJ&vghGBYO^YVb~O5~+Rs z_N(oQ^%wJR%>I_S{nDDZde67rS|NT~)$(!A^ILmu_Ook!eqODt>HTKy&G+@2^bgGc z;reBD_3v!iO&$yR1nORANGk1HeQC>yoVAO$Gf#1RW}j5cT6~Z7!`=ODUtY|*WO3;2 zjjrWw7Ekv}z5eo=X~}V!h853k3+HWp9n!U5%hpH7GP%q*aruce4&6VB_$<~c=00`) z#1O%=>5{{LhBWzdg{#%Qei{pPcdO4*md@zgy_oyhtsXJ4^E&G{YabF{KgT{}z0~1l zk=`jc^=(q8^v!sGwA%m3dC`cM*DlAIcqPN+)IWpfYpK5%yEBo>G@#~PQ>w31kBpL61Zh6wSwbF0?nxl1MZqr$# z)w6S-UwE|Hrt)$3d9jLF(JTCp8$FF}(0bj!yZ_qk1l?_P18A>osS zt@xeaLD8|5E1xehlGk~cdnfPY%f746e_L$Lma29;om*)0Sx9tp(VIzbwjw2u);Maf zDLl3`#N~O>={xm7SsXEwfA5?cxbH{lN#)C?N%!n$IxjPF@cnzX^2Vx=2V2ZqX3K5Z zy(JcJ@rzG4eyKv+>ZVft+*Yg)KJ+P>yg}NeCYDBCX0ek3(tR;T37rc`^+{>{!-phQCRj?lpE_m0zP0L0w%el5HnV<|vzKl> zcS5Ad{oc#K9oiGzjKiL9FO}{Rer0%0YqPp^WC6S5>*zTxITi|X{85evMINoavR>9m zlV8$CDv7cG-}a@lRr@TTO?bc~d~M1cKL4z&2Nu&9-u^4qIw8_Csqi|xD4T=D>!TW} zvb9!MnRRB**J<-JsM~5HZQicJuzZ22m)YUw1GY1+cBC*$7rru(2zI)0ZNoLal9T_g zi(b%S6K#0vzG7{y`SI{=W|t2=c{*i6#3!SwuIEeL`WW>Yb{uBD|1wl%de+<%CnRc? z`7K*kvM{(LM(dQc@s*rCx%qa}Cfq(%b1cUo?ctACwyar^KN@ZB-0_(g$aO4DzWhp^ z+}0=C%v(fyC(dmAdz$T^e$~|t*Cmd9Jn^*O`jN_m`7gB3uWnfO&3fhI)GJ>euZY-u z;$@lH3Px|klh4<0SiP<1)6_oB#k|6K_o`BUU6)+?dNu2rynB&Ft3Pd5W?!&&u6axk zvrLETr`aXvEMkNYtT$RGRB+?{@;DzuuRUGBp4eP97(loY3MsQYDMbX6&5(J&{S`a*yDR%T8}nJ8zg26;82GJZt~v>C#W{ z7Hct_S~bT|B*rDq_wt#f{*16V2U-8E(VarL+U6Q2J~`YNjDn8dMo=Hq-j)AH$0x=bD<%;W!k@2g<%nT1OxDA%t(;lH~- zzH0ZkvdT!i^V8je3<~EL`g%Os@p(#|(ry9e^8SVA{r~ONOL(e%Y|@dXirVLSyo$TJ zqC=-?x}=Dvp3wZ0zE9i9qpx`4P6@$2;{e0HXYSJ!PIXmC9MHX!zLm?j^Qgdap*I38 zmUmAxpT986S;SkhO=i1H%GYnt*62hlPYO99ad%74{HmIb=VgkN7xkXvO07KjPBTU) z#I;F6y1Fe@;z+Z!-LlrMn-eBQK236B`p=-b(s$QPFE_VK4z+)eS5+ySXnoY0v`Ij^ z$LLqmY?h9X+K)01ZEpQ1dQ3CfL$qM^UhkSS(l%8gi!5utPSWF+v6@%J{%PUE#zSr= zH=nhLJ$uad_)@*3D;|%V3XVKKo4|1^n1R30chae3j(VNVE>EYkOPtN@wtV{}BBir= z(-RHJQ;+8828urkvQFHqtsbe{{jFRx+DTb6U-HiH&L-+Eo!;4QWIShgfw_q$fq zt?9Z?y}~Tp&pa*OKCfPCO4PxO$>()`FR4-8;^TLLJ?7WsFgBOQC5Mm9`Dv)fkstG` zI>2Rrdfz?8r+?0zHf}h5K1%O4t3>Z4ewE`a=MHQ*;b51*zt@l@H}Bf14(>^7-dV=~ z+bbNSe8-smpaLtyrvlCO8ZO)>suMTv&y;TXDiZbhq5+e=p{l{=Rom`Q-)Ai)&M5hA zQQEDe69pc2yxA&waK?el3CpAz_dENC8LphAdcq;fO}UJ{CS*rb#*WCVcTQ#mm}EKe zlz;uQtm(*4qv#XN{QD$wj<3JAutmjJ=Cad^-y2RV7jD1sH|tF2b4KPvfq|bkE>Eb< z*3=dk483C0EvPH#V41gU-my%Mw8^^LSH`e>QwS;Y^I{WwwKSrQeIC2WiM$7e8#!+s zX0JRg7!WD4Y2y@;mTBit_CNo!Qb2OC*<^`lP89(b?EAEw^FHa{nmA>pMGEt?_+yK^ zGNhEB>fN1b?Q!t+`D<-QCT6iVm(MIK(=*#Vf7jyIcP>B8*Zu9AtuLQ7Q`Ph( zpYEB&ZZeu~QS)b&{jt@1T>KWsnerZFNiPZsyST;6?%Z3233E4Ur?c-|sj9!tL&_*Z zFMvP3YVM5hE-HSnRU#wG^=`N{znl0fQ)%A2=o`;HB7SCWZIa`Z{rJ+q>(I+jHOmrC z@0`1<@Vcn(y!ko>BIV(h)^o#`+uF8<%yL*~a;03K+wQLQjdc3tDOquNg>{QV^0Rlft0LB1TyjKJI`f3l9QmaY9=VS@r#`%O$~^z> z{Y#sRV!1qLz7?6cXpQDGBVz%pjpt*oM(Vud$%`@zI^AmVdw=}7t$DN5x5sYWQZC&- z&HW?a)#>#sRCE@FPS`BOoZk3#)$()qI)XhV!v#(~PVBsL=*WaUPpYqKUrp!fvkR3x z`B?sO_*dSfO6Ev|P&do!CI*fDagVzW?Y*XZz4+7-m+qaOHk;F>>!rSE9xJMnDK2y~ zTU$2aj_bA@p{D`D6X%r6dp-Hu8+Xa1BJOUKdGelo$@AY^GqQiJDe#!?Ym>mPvYKZT z|MKEnJLLu9PUPQ=K3$p;md<(X^7)^l?;gG|&z@&nwKC?^wPm|lAMNSSDbjOZag05$ zZfd`E?*nU|$Ng0`*TsXx!YpHtuP=NXdOw3(q(^+;M@hM#|&Caw^WJ_nC zfw)ar+pHLm7N&xt1O0p7&i7i(wEWb~yPuQOYpSlEh@4~=shYs}vy3nNPM~Uu#%|+f zm!S%Ud2TSAV!{dF2{ebDzq*{!^h-z8qh_ z;mf+n2P>CWD#x!o^-F+X)O&TT?beMGj;%b?wR?tq;p=EQ@gJp+>_wwb*FAjf!1n3& z9G zv4-=KNp<>1*zHXpmct>Kbl#8>VcVW#I~ z=V(lMyzu+C_3R(tzYSfP_3hoP+%MBE_#5l2I?}^e$x=Ay>&ia4C0|`NG8cZ0@B3$e z>xbUAZ?B%+vkZTxadE?GrXsKB{V~`3D$ajBquH z@xsUL=9@lQ>V9fx@u{k&s%ti7<=b_>8=G{?PyZ}nA-kXFdaMq&r{zYwxc1V={vP2yc(~p^`tWv7 zR+|Td;-_SGOSuKVEO=?Xy+NKE-g%z4J3mA%+jJ_j%6+aFMyePzMLwfXlfZW+D0Z`2~eY=7ixgylJnyiYvIU{t@clS9qf=4{cd2Ze@`zF_ZZPGE%#GQJR z`1hWdwO#dZWmaz9_S&fntsNP@oB9cyR4CZ_?;pE=)tgP}dMoEW{4G-xUe8byxNY~e zhYD?BTq+jK>g!Mc3H{}ryY%Ld-41h>p7ObLd-dcw{c+kKe;>Nla?5OccCAcWy6`lE z#kom_*KHf#$1jcF6n`|cCjVh{aY|CkMwh;q$~o;hbxHf`O_#mA(zE!=j>vhQzXNLY zvpG|)EZ(Lfp0ts9ho05s_wkBZzj!9zi8+yY=iu$rT!njn&HAhQci|uT>J=|9@1L~l z(rS;MjejrIW{CW#EX&7LZs(gK((SK=Mwl#fi)awsY)rf}Yl8NV3&w(Q+3zR}&NZElvAp|wmd^7`3w64$EqJc@#PY3EPOSM>=%zH);8cil`i*b)m!@w^{-&<0 z*RRNOTGA!XrMaR0{9Yqn`Ezq5ReM9vU3v0g!`pdRuO3|da%C}Z@7u!``BQJ+zpYy6 z7tg1DA_K7DgGH-2dTaAC4JvjMU)IlU! zdGhV0W$NzS3f-pzq-;+xJ-rb;|8Vg7_xsN7oy*9-z47IjrEhQ4#yn2Bw65W{>gE+% zjL+x%)k<8lyFKCMp+t^zlKYpI)_>?1N!$8~dndEy!zIZ#D#Y)*?N95?{`iUb$$w1@o?| z)JbI~M@~v{kZvzkDL$qVu|hGWByyV1^BgrRi*7-61l6v>x z!<_!DE*Z}>C70d2czLFmi-pZ@45*$pKYj!ixe{dt#Ui^hKyVQ-}5W8TtB=&;UzZF_>XPj{nv5x z{)u<0_Hm!M8)e2iPxzRv-B#A)?Lj|JR`YLSdOjyzd85SguV0RTHL3hkCoyqTO2bqQ z<_!|JU!FC3edzngNz<;~E?f7QW%UWu7xf?dZfv}#G&4f*xk3JvzQdv_vrI0D&8p75 z*u-+Saqs01Z+~6+TNzUy>^?j01vlTz7NH5DPKym#WQr&I`tzODu}eF8&hLEkyX*^j zHYOYHnC@NZ*0SiC+s_%3j2mD2?f7uZOQA2uzg15`OjkMTY zQ(yPLe(x8n6xkr)vvK){&3cai8Ps;Oez>!9V%@nle?tXwKf6^|^S|`Vm4B+MB60k@ zbTT8yJ46519P!~6PcP+(FeN8&9=!iIbM3Ni;m>jMuM3=ce-e@$TD`jyAj=DqGYy62rj&!=YD zjB4?F6Xs}ZKA8V#-PS$Ug$ityA}6JV?N9!Z-Js#iXFW+J;-1e0WsM!T`~GVFuIRoY zlYaBuhqXQF@1C#q+Eu;Uh^fe}z>>>Wd!3w^uVccb>=^fN(;Pwz?pmH?o>f&*yY896 z?Pvk^*u(7kzE}S4iKva8)0A1%xI5eE-GNfuzc1A!0gG@;Ly{ogY?ZZ1A~_wTL5 zi>Xc4wY}0_Z(O=w9xJ?3#kH=)e`C7ox3KLDCnVZ(#Ev`rWC$`FPAy{ddcL%z=!MWB zpK`I(2(t$aFZj3Gni%t}-&=DiN!slUgMae8Ek7Trd(Jr!aR2b!!_8i~cm5tIuzMBZmH;*to;@@D!$4`WiInxcCmAN!oBc3 zHizT!Q4Xq;Ts!&}KmGRWdhGHaa?f4{S!W#HvUV#s|IFIsE55C-_&dKoRaZM;Z*KBY zO_44$_Rnsj)34TAzV$q-Z25ckJjoBIAGmkfshyKMbnjvA&5-U!&I9MKufMjp_CG^n zbw|kzX}>1#?hVn!J_frB|2Qvyd~4sH56|2G3D>A!Qr>fAs$z-m)5?^*<9XIS;d5(( z{;vCDSib!1@{DZ)jyx%=V;V%5ES{9IJYHISYV%}ICEMpKKR!MG=Iff5x9-d`Tk=3c znuX*18NaIej-s`ljzq6*Pl@gdfycDynJhQ z{hRO)pX@vK8PsM+Y;G*M^K-h{gFl;?4=_{(Pp$L#?CsLE+tUB$?|+;}*VY6~y7o+- zPbEw#SY%V2+B25E753eKKF1f;=>2DC3awH2P&Sz-JWh1$9^UJxa z>l=Q^$NX^q5bd;OdeqgNwbG~UQ#;*dEu4?n%|9>tVE&f!KO%nL{$>7AesFtZTBn`z z&TSUG^DlN-DpaMkiGh3i=iBGbzhVFI*+h|v8Q->@FPprvtmV(j zc^&rWm)4Y4|5nM`+$rwc7e339YfskfDOD-o{)K*x7ICHy|`mSzum*{ zvS&PXe_VZQ?{dLpL)wllv#eWB%r9fI`t>_}A=l-;$#>3XY)L-?MAkL=zXf4lgt zc_3I2XD57_r7rZy>;0U2N+14=TvsA_L{R_N*_}c4^IyiV_$PC5{t=hRmvs_t5Boyi zIRq!Z@U7}^-JkfL`$ubNP2j_bymxZCAEVR1r*?d0ZqPg}? z4eZSRovIhA<9vNxN^N(7a-U^n?m2TwgQ}0WWkKyilkDL2d>I>pd~bYaQ^*rsSMel$ zf~Hz*OJ(jPOZH!(FSeYlOEG(+R(7kqCr_z)+2&?Fz860xI{w}tb?eM(5e_xS28Vam zK|0BqT6RHI&-cdtW>Xbt?&+E6{BnKq8KVbo%QKjpzkFXDC~`H_?epY5e-nM>q75g% zy$+x4J@v%Y3k5S0_LQykn^?}}vfV6IW%AS@i{tAr&GK=}zk6i2J3H^hgCdO)hG`1h z1Kge8c3t~-a8E!|r=R4$q{9mG{#k2wiJt7vpCfwAXVu}Ua#!9Qda<;p=rF@qyD1C9 zTkT8cu~n{(_UF2PH)f4zcC+U1HN~I4o2-6t`{riVS(2h`4|YCZYqIo)zO=;KiJzAh z>}6bh`i`@HOySFDqaXeOjf;0gNX&f7vC6IBKvl@(AHqk}Ue#V(Ew#+5OntAqWEo#d zLgIZ*eTF{kVlSo@CzLIZ8UMO=;6vOl8L!)c5jE!?d|)s1?LIjD)8S_(dY9~Kw#eUQ ze}C!e^u&8=ImNYerX_!t6P;Pye|W2bNxx?Kp93%7M~VHD*|%ew=+q`_*4%tKRn;x!C%?qkrM1pZI}Gy`mufhic>ZNM$KAP&vD%}Xuu$n}&RD?l*B|>F9r;s3_>8dkF*hr&)A0;H&dy!?ddQ)LU>Mvh21#l?$w%mX5-JMjK1TF zk6*d(->R@#xw~S5Xll4_L*a$sAhX`cCH;$KZ$1{;=a;A=Ah45r-jeS}c|ZGwC%?O8 z_uWbJi`p6ARpL)$Ciz{QGym9xX+AshXB25(l3egJt!1J8ky92TA9J`iFV>lDY0Y2d zyjd~yCsQZ?nfvCpwl9yY?(O0$Zd9}h>CHRj(sFyJ?&ZuUU1B$n$xi7pWR&i?yd$zF zMO9QrVBw~izI|7&1zenxVi8c-{O9GXy3;%J63cEC?fKxpms2I!LNS8j;0!(^`$OHW zZ5{y=9)3E&5N^BC?LvjC%zuXR1#(lq{rz0K;PcLNcjOLlGSXsS!POjaTro#+w z79~3S8XjC)B^nS}nbR}x-juIBjT5;>v!%96VbBgMwoY!*+RO#Z9W4L`T^Mx4m#wm@O2VQTRdPU>T z%~0N-myQax2sx|Yv)jphZ)&*kPbJrc2YCrQd2ClQ3Uu?Wlorvc{A_tk(O5k%8xh+o;HnSOt z*jmOd{}s};%q^75YjW=b{wd#0E*w;eP`$tPKHm;W=4%Zbazk}g8TJ*59X??9#m0V* z;>GQ`cMm7$@88QRD9@`VVt(rIL}xJz9lql0GPBr}-QM(WnKN+`d!g4ePyY8ILe-58 zJC?BXFj~fZY&`LG0qY6HHp4l6S2zSWofe#2#dc?L9{-NBTE?O}%3Ki>jx;uC26vi! z?aBQq>t^I$=$Ik(z_s9*V&nA01M*%>2i3lxX`XHoafQ!r(S(j09~oKst@$j!i#*Bw z&#))>)R*IyUzGo7ax*kauWBl1Y^vLu9pc-5-pD^|xfIP($u8N+dsao zm}g-ZzD0mg#pih(|8>QA;tP)VzPd6A(o>Vn6LKy1Y>mB5n3Ii8i5Z@jTiU*0 zrKaG&j~AvT2)Sv+{Jrwk;%(4v7nRzzR+SEKbt<|4U0=COEMAA>Vo#A}0OvVgp*tGR zDihx^IxU~Z5WjvegRP9t60MnbG2-k`?7mz$Vzqbe&K^a+z;kc5*DqLje#Xlu9?}I& zuJI2=C6YCCr7S~j9;Dm-XYgWnvDhIgz3u%;_B^MpnyC|(&)#A*htF`bZV?_ zsF=Mj@Vxt})#6xn&_U@I!Q4Zu^OCpEtDnj&(ZhMx)GcVIkO2ts`lEibHmGM!#m0Tl|cl17v-mqrDo;K%$UjpCz zeezW0e!TP7??5SQk?q@WEAJMTYP>T4rEib2)@El-=?zEZ+HbY2VVQQX{B+TZ8@>CI zPEYKwN_yU6>~%l?~ky{t=-r$uni3eJ;fL)S4+oa$|I&_5;l zLRH~wx348!B7ctjoNs?mL?m^l%SW?6ea1ac3N$xK%8B$I_$l*bVw3UhFRM1NIUVEt zxjog#S>d0_?8o7;&m}F+XO&E>3^F?7p(*jR_=MUF^J6`|M(>Yv39Fl|VVWn9o}qK! zPYC)pamZ4>R_e*phRk zrRey5QJr!vW*g%_w;P?+UGuY&PJ{>w{7kX-PLK&!%T(=6;*inv<7%i|)*ZpQd`DXm zPkK`G?@#Qf{1-6IQtdu{$9V6Im4W@cY_-%5pKhC6s9+Ynf16guRrSDJCW8rfp%GtH zs{V;w5d69NnYP+fhn+E>YC&7b6HhQO8TnP-ocC3ctz7UZOOx-Nbq>#eg#@{T-qKy( zx8U2-1QE02EI#I|`R8v{TC5>q9kER&d8^hjS)a=_9nCC{-&Y4avQ{P;*`+Bjm0RFF zHBHOyfWLL|r}f2Oml?R|upUrWX}?wAp5@RW6cpQiVbY!F*XA59(A&ey20I6-D~{FZJkGoO|Hb??s36VkYfd zP$%-vq>ZhtBw_ZZ$^gT!%O;o$3NzjK+3?m|?QYMhpF#W89ya@0WZX`w=g*G{cTDo# z;BwMN!E;O9C*_If7s^e!ZY-v9%skyXkl`qU%cbSPdp=38<(j?8TW0;4ofdap4_y;j zcxRDGj^Qnld9^R^1?x0vMihTqwc?4C)5fOVj}nUKHvY8xvT#Z7;Ux?9OGoc8FGQBSFO&SzbC;Xmy2H#Xj$1Cz({6mm#2<1zt3gDzk1JW? zfzk8-4A*@WCOG%VozVzZbUL#~$Z1>sRIdAWB5evK$3HJEQRMvTtu9^F{L-aiRg;Wy z72g#hCpIn*l_!nYChpn5tuwpGLVeDq9Y?LD+wZKB*4z0+KEKLexBD&EDRwQ%UC*Yu zPja62bAw%&^7gMw(p)X?tuvg{cU4D##qg<2+Z_vu=dU!6&I~>^LDb^JV|KZzk~sy3 zm2YoVw0Udupj2dC)0qO@o?K?h^CAm+gpN$JA$9`vrGK-u)hnHE1tg~iR z{N(+F@%+lA`g@uu&PndOH|0>R^;Z)^m8To$lr1gTu%PD?$AN{N>g(0#SqG&|K4AHV zy~?R}zm;R6$HDhME>2>PKh=1>r#8bM(^iA=-m?i`{#XSz&Z*aO;!$W7Dp`ITAueh;2a`6d6< zf$>4IP2d-XK+muL8NOa%>iHu3E3n_mcwVOE`#a?enw#epI&gno%s%n>j{t@Tjk98R z{EYs(faUo*>y(Q6{bD@>y+}G(c#Ho z*6fP>1N$^Sy587ysl>W7C0(%1P@wDhmB$}fwWtThYz$8h%sHxmgKOuKANldunaw6H zxf9d!`~~ z7iD&Sn<-G)ccF0y|K7&9Z{mt;gQLz*W$Ia)t^8QN@jt^x^`1J_o3~!wx<5Bp^mhHC z+b%PT|NV16Wq&UF<$s1|`3>&PHoQf@T6U$+FImB~^t@WwIj`URAJ(t55&n>LAx_2Y z?97^d3cUsgYu&7_d$V<>F1fRG+tOTN@!Z`35Blpru8*51&DiEW$vo}Dg6T(B9b(7(SN_*I!=qL^I!{LKR<1A8c2;(~x@E3jOr>g2 zshWb{gC)UR;#qxH-!Z*=cFROp?FkE-X8(NsW!|2k%mf?+WFJtlr*1l`KWqH>8K-evBi@m!e?gsn}lB+rR!oTXu z<@DWKQ#};@@AjUyJHN~J{8GL3EM?_lvvj8|XPVCw_lS^*Kx^wM*I`?Cf;bps->*`*G^e!vkako&7Crg^kKc?R?wq!$5 z)|-p&vA(|bA(>lEyxrpUE0gxR`_;=_D?NMV`a{+2lQfR>xXep9$MN;cn%VD#y+!w2 zyzMD4LE-0(0>A32aO+h+e%-s|K6PO@H)mwP$>vFQALK9X)spbmcQjj9Vl{7Jex`-Tt_%N3!MYwrrcZc<(NcN6gh{ZZfPdj4S-e z{CIoIm+0)4{|qg&6h(3(BRnVmytb)Cjd|UYJ z>4vh$?>=7JaX0u;>6}cR>ETH#;RA4 z^L^>GIg@vIJ(+v9&)u}@u%p<6*rUc`6S-FHsn=v)XPbRu{rsfYx$k}n?Oc=lN?xWW z{Smui#DtDSyp6;uA&c0w>$;s8Pr+XGYvMqY_DE8@}V?_mb4Q$y(wTMUV zZhM6Y9(dFJEVm^~RxsEFJv`xqhlWV`!T2N?teq&DSJC&^olTuT4+|MlD@$K94(@SS> z@Spm70^8l@_dNAhSLQu3YF*g;#Bu6mX8!XQ^4C^uS7?uydgc)r;^spsBV&G{D^Wt|b^@jkiDN&e~64d#5uZ{J%R6BBK6WOijjS4F5_ z+R5_cI=1XZTGrh+9?sL$GddKwHFSq&Qx&V=I#8V@=dfVGw4xd;?^_EWW-J!d-zJL=lV3qnM?0(5}ffM?dROh ze^%aUPm*N0_>M_=ZiAr>ll`GpF)^&{rxW`zm+F;N;+*)c)`SV9~Ku{JezB; zuBlOJ;4J!z5RSy@?KwZl}}&H4LQ`}z5OX)QQ_Z*FSJ9VZl8Ym zGiCcM)_5I;O+1?(U)r?J?rdhJw50EmPfdIWZ`5o3&1P*_+PGw)Z^X}&SEokCxwUmJ z&Dy81u{I=5`LxWMUI~^Q|G@Wg^M5O3T)S1@JL}uM+%q2ya?kHhcs{Rs-q+P1ZXc-9 z>-}K$`sfCyPp3Yfls#A%%~IG?Ciz!;#^3pi_gu_Vo_6T&6!wG@{<@Q@uP=2oxiq=^ z`k!;NOyX_w)|bTnXxkr5qpNmN z-KOMU=>E-JPXphse06zO(XK0}e`r3=4UeA@^&{;ZYX?(E>kY?$Ut?>7k5(O9SiB%> zSI3+s?G-6MJJ06)5&B@)|FB;6zW?&Os&_nMB~I;eo7WH`7UeQ+pY9dC8;tq7Cp9&n zO#RQm7%r7R>v*cQa`w?*y5F{yqRhN%7ghkmb(`wv#Vr*c&L%ncVgDe!o21Kj}ZV+dmxn zW@j<$`H^3De*QbzqpiC~T4J+(kX=H9q4JJfmCEx<7rQMGEZ-bNNo?c8%yc*@g6 zb?LpY_DH8%KS{DHp0NDu%0l(~ljpyiQ;_|6+wJl+nR9+`W~oLvOcYiMv&{K>-~T^D zsHY^4z;nJeZciWR?+s7oR1Di8-60)XWNG{NRV2%bCEoc81v}q1*=Cz{`OH48*(p^T zz$bZS0{dRmywr?qcbEPQnJ5w1^Lu_&&uO0B6YgkqpMH4YdHqr=LzU*|KRaT?0(8(9eZFEvgqm( z$-bIgo9F8;w=atLvetpzPi5Vw<${A1l zQyeC#9ICj4$;CqQpVmg(T`H4At&dOJE$GHqcve^7O}c2OO2j*XhQnEt>bM{ z$*{<@9hZ0?#?%_9Qpn_zUZIfk*KW#6k-}Y*g=_Ei{=N5~AqwHo>s=P#)ff(K zSO2)&Bry88LPcbAfrqW_D(~*LF5{xmzkDJNGp8vSUx=th#1z zoV0BAjD1)0mDW#Ne718_Wc&6@^L6Y>)=lSB=GQSSedYdxYu42~-6j7S+$W|+Pdwvc zbfE92t>*l!NZo6tdxNz-PQBc|V$FNC)0-s4=c=>?ykOmvxc10inJ@NJeO33wC2cHK zS#f70kJ4XOBel*cE!MFS6Z{o^HNN!Du4UQw!a-$E@AfhScUjw4u{XY`w0mm{onLuJ zMdzHChKixzP3Emu*`ixAzWYd5J{8~ed)~2`rU!O*#NPE;BiSXioQ3hgiibOX+wR!L z|4dUgy6Abc>k^iy5y#EnC;M*f$$viQgXZ<%D8Ex_TW>2eoK&d@&EaFSwZ5vX(q`VO z%MB)4@&s3g%ktK6qZ<+eK-%Cf_g!hecO!rJPZ6lsVX3UI1XFe`EnY;Y9o9rEf z$?sWJLRrh2)ccd<%sOr`PyDNyqT93Tq@u?U&a3TTkIJliSajz4q}``gCUy$APZaSI z*Rwdkt^S-A_v#a#X5YEhqHGTwx^eTX-Bm`z+Z){YcHd!RnDhD8wCt7JOlP`wxb2=f z%W#g|&oAGWEt;^-Cy!;~+rH2Q_p|49?6z!gCJovK;GZzx$%&r`1@FjJ{#MrUu# zu2Tnkm;cdJ>xxTiRs9^(yR`kp{&=tA1E21+=YA4m(3G%{DLrbS+PUuTHSm&O>Bw#o(nFpz9DD%HuUYooz35K#e&bMOuXn;b%CWZ zAg??uxX0{qYyR@3wvmf#9-mIy5#;9Z{isTXu#N`z;e(%-#PRR=x@_7U_u0`cpUo3* zd3@r(e5paDLMcS-;|YmnF)M85{AaLVYFP4Zd&IK|qW3)e+=`fgGX~%G$WINAC~uM9 z-Ri(*WHqV!`OnbGMC(vx#T!Bo@7ph5Aph8bTd2X@W6WuwDowW5Q5X7e8WXZX58c!e{!(0t2dk0;ejv2cmG3BFVHXTCoF^QFa| zu??S%mQ0H{DPPeapI=q%!PU@X+}v{1?YlOkQS-D=m38(!Ne%gdmlh^X+R1aOz)^*7 z?#oM0QXfyw@G(wEVZ6}%&*bPl=1pR`>neWshc1gbp~#qbuvfn4xn0742CgvC)8D0< zV-9V!(wHjFI=@}}M*Y`UrUIQ46ImB^yt^x%{L0>HrQUKem((Wny9sWQ(-zf+)*aU} zYMAtAccb(LzDIMLXG%?Uls%H0SQOf_VAI>5h4U6Inz7~*$IMwKTm~-+FZW&bvi>nG z<&$1>)4^~qzc>FG_^&PN581kvTjln4oz^HN%j0Xs%2`!TOSmh!9t&S~=V|}S<>k1bz2bPpDJeoih^-T1<{n0IAU)uaz|Ax)NRPx&NQ`PPXB9ol8O6{(8 zsvbJ1bzW<+*I}+RMiRAJ;oElI=rQ7qc`&C*bHyT=nFaA@E^_F-^U~g^qF3bp<8so~ zB{!v@QQz_^--=%DFV?RVHtUMCoZv+nQ;2$k1ID+ znROJ_+iSjBe&y;3oe;riiba+Ie1^gQ8PWwa((f56PnE9wC_DS*?N?f=Q5=^{QqD}B zId{*F)H7N4t)~3`&+s>^>CxSH%rU-3b612vQJ436p;t0{vPikG*6{`08~We=>D-9yUm-Y%gd%S9ITK z&eyg3-xL>02%ku9xBUFc{o!$w-t5libF0=p&X9b?E-ClL#>Z{NnbX@Zr|BwhQ~p_B zJn@+4%5xJ`r1PYcIzDmA?5+}g89i-QRO;D7Yc{WH*r1%C_;&Zbwf`B?Zt3Wp%{txsts?|WA->iT8zXH#mga{tpnJ&x!1@6E|u zlsVTYbLV5l_62W`CVUjFp1n%s?Z$I+nY67dZ=8_vmb>!ogwNgE@`*y7P`z&_RHnm>XEk~EwCHsi@E68pP^keIP1{GI643L*xGI7QI&h1Go6Lax3%5z%lDPaQ)g*R^vR0s zyKui+d9TdEqBG$vi_Ws{{<(X@zJ$~In}bu@PMHZUp0VeqWoYtgzCC54tb332YftNF z*paaF_{?*>W{(5!Gk)sU>`FSO?!V9QN_D`3ch=JqQ+{528nD}$^|;dV>iq_LG8UG( z@5r;bd%Nq@<~?`wO->d~KFxV&Me|B^xyWC|0e4Q9gkH{+?ALmG^Yfqf*Zvc?iEmQ8 zuKzggCuhO}(K|P7E$yS8e)T>&Wg_2Wh5B7<-(I--Ha>`7Qn1Bnq2ipz*7I@J^Pfgc z=ZM%+_JC*ZxwCiXKaIO4&i9aeOJzmZo=Y2L&Pp*#nSImUdAwBq`Bta3-*&Hf`=DU0 za%-A>`TYE-=wpRqCvGSUH_m_bD}438GyfS_O5?>}Py4lHR>5z}si8JU&d=iGlz%?! ztHBJlw^q)7v-^Y9^}}YDj>~rRsx-Rf>(m?l>a%)0FZ(4w|BHgmT}dxLOi!9$ z7gU%0b^YSG>Rxu|<~#4^_Osb@$<(CVX9bIzXy>86c~dWDUQ^k0N?Bo^MBh|@?+qSZ zJL6U{DDTaWIH2ertZ>V%pte?Hx&Jh)xlg^f2(odX`rLc<)Q|b$zfE{$*D>YYdGMcs zbKUgFJ!ae9@Ab54l$3e4XZoZ19%<*xdU`cm%e5N?ZIXZAT(>IZ%1oiE8=ubK@_*DK zl_UJJ>>SIYyPYNW`ZmIE<7e;Rvi@k}`mD7}9F>pk_R!yLsqpz|E$i=un$oT#v3tz9 zjxN5f#N4>urt3%Yk$*~Z3fG>@+5XP0rXkv9-hQvgXFvAM`et%}<=Ma`ZMSSL-;unt z;?uD!Nfv7*Qf5hKJQmEGdUxtci34wZgSLykXtBxJn9T8T$7fru3b~i3&s^-3U|1Et z@YnToMKf1s7u}YaaxBWNyyuyY8KY@!y31$v&uT`wvUacey^c+K;+=C+r9nk6Hq`FZ zcIWe7RzBDjZ(~2NaQo91v&wg0W~Fsy+~2_DBCzt-a-E~Q)3;^aaLjK@eQueiJE!ny z%8N~Fj;u&FpH{TU$btFZmLng378%ZAz5U(eiGi(lv!L_bxgpO}q9eCEJY@_z-J0|H z>&k0I{kudyonz=YW1gFM*qlI@v)p7ok7V&I&V|LEH~ z&4e{Mt0vz$_3fOHHaJ8tvMB$9?pKHJ@ZNlLu<3ze+DO8&eyRMRxIf^ zTgx{0;z>`rb3eYR%?R!MVt;Cze#vC%3D@3O{EV1qH`VFUl|}73eEtk!E1qR8S{Zzf z|GG)DO?g5^^*OsK;;fr|kMfb*)$m7A+mr5!m z=hgnzn$ntdcF&sLW)02>p3GD8vu1JLmDo9@@jlba)r{YFd^_urs%5zQscqJF!R2CW zZE}*8Tm#Q}{=WHrwb(r6imAoQHRoD@~PY`|0tsk5%2v z=+070-I>>KRh&#X)5V$6UBqh1xOZ=Myzj?szYBhs6K{SxIK7z9nm_9Ek(qV*N@0AQ zTsQx^M)pVT5=t^|zUUy!zhaGgOUtz5E{4W^&o|!4-YCZPQE*2?QKj6^uWQ%Zy-e?! z-LuN_7UQvS(MPk=ySHkmr~LNJYw6uz@$1^R$&aU3GE~Y4)OUQ`y>q?RwrK0^!uzI~ z=|;}mnXXfA%+mMBrk-Wq{P_B+30pF`*Jw_bP?gWWr}Cd+-qzz8aaxxicDa4Fxp|6N z(fLr%SNT(0bZY{0)}Gm&WN-ZEe)WCZ*2?0AK|)*mUR-OL_S}V8(Qr!8nLTbIiESF8 zf+8&%3Ul(*Rckv}?Fw5fvhJwf^cmkdj^CeH8-62gjoM@`r_1`NsJu3g3BVOGUzjHl>Ae_G(zK(!|w^gyQc)7vks2qE_LUM*Kp^l z`_Hhg`s(WJvK{qvjxA(+dR%_~TAw9B+9uM?EIHdF&Q-EsxIFEeQ=3c1$3I+bA<66N zkF7g4aof$bfaPWJGKEgZ<)?%(c)ioRA>03D#q-o6(X*5H^lZ>bY7kHS?qIvJJF8sC z?z`i03(+J`m({Z?{wxbTZFp+(e}?N{mTawj=NR6eJ%7*sDvSDH9%E5&F;Y&?BRF@hsEuiVq7u>^Nv2l`zSo@8AxLnyJYbs)BqD zDrDx#C(E?@j>#zuoPvb#L@%w2q0#AnUKlRTA? zW`FjjC%+Gh-lThw)3~y+V9&=dzy335HJ|T`oiud{n`+GI?^D~8|5}GGv-MO6|6H>p zUo383(i?@xH!d%p^;BWvgO+K!-z92RpMT-&l-d^57WPQfE@+R?jTePs$y{zW7o_tZ zEh*4!YgwDOZt;nB{ib8V2fX^<2=9~k|MV>Qdq?opy#EZXJ_WJuXHK0mI(fkE*aAM? zDehT)`wj1v7w|9qzI4SggD#F4YfhbSQstS!G4oy47PHmDGldJ>CG_IISA6@vTJL)~ zw@TQm^%6eb&ot}<15PYlTNgQ<=XR)Zljas(J&)~-iTO&eY?nV#{989=WBl2ipS>F@ zbY`5tZ2vIOSEf@!lWEJx{|u`w9?uWFH|tjFnTqUoZUyNE|6ND^GibFq9Hb}j}GwH)7nVKD|F2=CUSbSpRh8GfLD?-(dJrwbjo44us#963_D@ulyZVoXU?`}y}nyt1)xp(4xu6fg1yYH{JpJ&rNadv?!h zy>&q1`1hUbIxfuFZd{tQ%|vzDy`&dsg7cUYCOH1FzMQ+2?eo8*8z-b&FMZ*^E^Er> z%^I29qQSeLJhr>{Rr1RIi>FN3+;xAiE4aOvf5qB;>z6I54$g{o6FIH2>du3cef*ae z&-!xg<%~H$=O~FiD4bWf)xEOZ<90!symIpa+k^7g7VOxQ(dlxe?>KwDwBeNt8(tdz z4vXAzC2!K(@^prpj=LfM8N5#J-FK^K*RsV@O@cRP@c9+-ZxHpn?EkwgNsKQgA+9F5Sm6cxg7r~t@{^Y>pB*i*^vaXc z*Dud}I+-s%gHig~>zJpn&vZWVIX+FtukhsC*w%ZEwX3!iI;I5WTh7YpJpS%jt@ZDa z_z!FH*5x@@u6eO~FVhiEOPQW>oAA9}y^GdVeAQa68+lm6^++KbkCA}+`n|TfOFtc) zC^Bcx28mzc<)t6qow_I_b|+oldgFtmFAVQov+t-e%USEQY15VzanFDRGh5rgtK-6^ zo|!V)a;4GQIaAL|+OF(6vmn8YQQh)YR-~h#w$)n+oyJ}Bm%4w-chqxGSLA%{tC|=) zz2pb)G2PS2%Flv|!cBKBs7U;(JtOxkcV^8(y$cUNMAjDH2s3Rx!XRiQeva8=Pi|br z_q99rL~XnFFr_y+Bf4r*@zgi|E5EIIzWBn9CEsl?Ka@Yb*6tXao1t6NgFTK*tQ{?0 zRi`uUo&NCK^oM5+lV>rq!Ti3ab64M#YMcJNoW*L(USxdbcW7<) z<8@23vsG>tpAd6Cl5@n&-G6DpIaAeIbFGUzzq$Np5ZGh*aBWcZ-qc5ODU2Z=2iW@; z+Wh*m&icrIhOKAk?hy~)#oytgCZiJMsrFQ*U}2}FLfQKMKcOGHlO;X zoOtMyww=n(JA&bT9`Wn*uk9&5W-qnJbA6W1$5(pJMG=#aKYaf>X71fP(|b~;UA<>& zv7^uaXYM=x#J3>}w(Xf`8FsfrYi6+evbuNGvtBH3Tg_h?7!Ws<9#N_YD`gc z%(Ud;&)v&@ZS_f(=?#twIqG_=IJv)mUtK4EaoN?B=+4K})O!BxNtyiR%evo(=JT&l z=JR0J;Jsy);^FyNZr-CguYwo#D*Ba59((yuaKgdP8z*EptPyFJ|M6(oYI}yekw+%& zoOmm6tBX2A;q`e_uidQ3(h!{H9eK=R=6#7{)m)dmE{e8x^!z#gRPycn7~!K{{?5DR zNf}1X`8NGwb*;fuMWebG?Dy{SZ(Lg)t5>ZZ-gVBzc+Qr}m?vRd_f34ZWICg_QvZy` z17FXtjoEV1_xAd!`5lk_CzU;Pmb-dhYkGOQPvWU92LF!Qtn>Le$8Et><%M4t*=n#E zt_)*-FH^+7G+)+2b?3yTx;?9Nh zd(E^ye)?k9HqqpZ$INRt*7Q%a`Lm#^@pY`!t?0eSCo3fvF!bGcAG&UB?jjx0u3X99 z8F_45dP8o^2{H^jFVLCVt@L!8%Hz2^{%vtw+B(aB%k8O$8d=WVWv{umXl0Yz9IcHE z5*rKzcYh4xoW>Jly4rl+4b~41$}87Sxhb>ags+g{F4L~Z*$O%@6}9*mF7lRL{^ps3 zWCM#pUEqzY-}fdQPg!Je{)BQ<-PD+qm9hu3GsB+;Z8GVcd;ekBk`tLC>vVM&c209R z*ffEmcHw@l^B>vzWo`xEcDT6PW2Vkc)mnGcO-#ABgclrce;K%Rimqby5k;nHG9Ruk zQMtVL#H3v|*+-|nm>zt`%uFZy$ualf`!BTTcn75=YHIJu&ynN*ZSVEvyx5P@jjDI1 zoq2KOVW`82H=MSso3H5TFPi75yV)Rlr%H%~@{Q{7ot`TXMtsUrm$aVpaB7OqyMK{E zj47|gZ;O6o|0BHkk?q{2eVZx@8gU@a1JJwHl-x%Swb|a&^PBXjc zjX&%^n#~(+BE?pJi%jWq>Qp-RyG+0M{HJg0a_XdSKfD#a@Zjp3Z|W9ST=V7^&g}Wn z%+n@&N%3jL`U(FGeuxG~?=0Y%wEn!*de&VJlJ-sc!T zB(nwgPu<^q`*q0EOACcORa|tM86WEualCSPqkX9+_CZB%>F?8Jo?(fWm5vt2s<@sl zy?o2;=b60sYF8Ai9xuzzc%+(bd?~Q!Yv*bI#JqJnlLBPV{a9pQAyfN)sn;wP#W`Ch z*&P18^T3Ih{jX!0U#8AD`?N`wLH2%q|HJc3l_PAr%H~XsIB_Y*v?|}bK+CUS60GdDHmt1jk@G9D|O=Og}mqO z+BbY#H&0gi)Qpol3O~EIpUx>@U+{IM;)kzq&b^coTw-l;DrLiYiA(79Sy}RI z+oV{(Z}&W|xQJ;o@h(`O)w;#Ar{$HvPmR}mPDr-}-)7$bY27k?p1Yaf<2>iN^%XaK zS1)>gf%(hoz>MQnCt5=qe?Lt*`D^{c6%|WN+a?~@o4Jq0^o9@ObFy*|&ZN(RR%r|~tesHmi#|#EByTqWn-{m5;Sqd9I-FVvG zmO4p(%hCfUS+rVhCcnM3M!&shlTF~MxIEFR6}SHOZ!HbGWoe_kAuQ+Z-HW#Vd*ilm z?wnkDcbl8#4JMQ3E4A8OGj8fmTvBj)<(Zp5a+j*zy86NE-}j>D$`@C@f9TdGQ^|GE zI(fpqoo{1vrir!P&Hc~t_{Qp{$;(yx-DF?wy`!}%szffbehPEHL3OzGk*ig+YvX3! zdFI~!aGLYfsbQi&zv~CT$=viK!{wyzk*uHb6O&>zzaL*)DyTn6MJ($`3Eu;=i!a{? zNT>)^u4_ncE3mHmt65#Odc|Cc5(AYFPdp`h*L-;Lv!U&kt;Nbj1(qgOHBRzS_Q&}kVz z>2!N$=;OjR2YUZT!^W*uSIpc-3aLj){u; z+#HWOW9RnyJ-%+&d}+RQtlLTngO_$Wb%BKfd5y<|-v{2w_@Fi4%H#1l_Y)rKvac7< z5-)z5YW6_jsQc5SVH%=SFDaz(IahX1a9{CFMDs-5Nr}@7PO2n5)cL$a{%e*wgT=EY zJ1^RAeik}UQQ!ujOwGyv4AJ=XAlnjG$Am_{8rsZ*{tvIZ@y1#Hrhx?|y#$ zHf+@i+bMo^*Ij$8CN<~JINI@k^7qDnQ-frcZt6bsObBIGbL%az%=f#wZswz2jxC3E zddz>dv2VXN+jgd*qQ^sm4eR`#eL0`C`;abayV%{!k=Q@=C zo^ecJE?{{w`E6jwB$H=nHb^&eF=)?Q`_6Ioe}=^A3TxcLUUDluzcMFi-MrhOxr-)D zI{qYi^8BdPN3+CsIyz>E8y!nZ-eUZL^9}pT75OH|cg%@>s+_~|z2zkH{aag)&E3~ZQF35o^WW+#O&l#w*D6ls=Pc>jD)Z4tCa-AY%gG*+LU*)M8Wkn^`yNg5wa@WN zpK2H6erm?~4Wd`pP1@ul`q+Atr&i(dt@ghS=W8mNofOd)Xx4tG`P*CI<($bCh0~r+ zZ9n7n%xJ$J|N5ogg%3}AXA9V!RlF5(?4{zZmU-+Cy>Ht+*%fAa;|sUFPJHba<0T5Lk~faO40-h7jLRCWHMi%y-+ungs;XHp zU1zNeiao3L&Lw+}{^gx3eP=s-iaD4UrmrKY{9sc3?$EcXcVar8U3RHRG8ee%yH{fB zw!)p;`k0qr-|;?t?H}7bJ(mM-OSt|;NTlWaC!WnwUC`&oR;r$$@Oa|Q^iSXWKQWBx;=zdr;(dFS363@gQxTA9Z(5B+owAv;53%{~&)q z?FH4@)4B7XR)&2{o!EKj$@gaqrb*AYvQ+B$c=DWu#OqK=k1%&@z3v>3j!q*_LoIWS z>iJbA|KxfXt7UizEm0ObcEReo=mp0t4p;4_b5#@PSM4!5XcOI|AYkC!=dspy$%IJb ziM1STM%r(M-iCw)Iera%R~?*ZW3zE(y1Uc*bMdO|$?s!LkIh@Dvg*5=Ym#Jg@F|&k z{=KHTH5ZO1{dBlh&hy~+tfgT-^FoR)z0lgY#b9Af%JzA;TV}p+{5R$JWfj56CXAAy z-JT8Xmt|kC>-KMPQ{LHlGi1Wf*Ui^fo=z0L+pVE^B-Ks!oRjd4`Aef#t9UnA?tc^7 zb4<3(_*3e!z~ajvSJ-bB3W$ApXVufP4bn5docJPo%|B6g_RpTa6Ppqv{X%y<`Kx(y z(cVqkCuTHmI;$8nY00mT8BUwN;|y0tF9v(I9RN5>JSh;MQY;hP&yZ;WU^ zubMHhw#HQ}>vX}Ej|VUO@f5w{wKREl%|kb*zK6AEtMyy|Gi2Shcep5ZC!(@bL7Piw z=8fYk*|%TXlg6v5oDwb_y7aK8!b$eYVe>2$I$YC>Wfrte3tCa+zu=qb>phc%t9Hxi zi`;i!{c-eTm7a8DM|TG6^gxizNLZrR@Z5BlHke3aj^LE6^n+Kr!qEYm#WvmQ&Z_qFY* z(omeKawV-(xntrk-x=zcC0=EIiq33`J$35FK}r98{K+w2H_bAAxx-_9&ik_J`~CkJ z@@?}Uaj*R{{dy`-PA5-Z&59Gh&)DrLs^>}D5v|{Q-TZo6_UjX89DOExsoYtRE;H}= zAMHk8vqQ{(XJ%J4#C*D8Qy05h`G}qTwALYQ*IeU^GjS61e&BU)=a=ezf}S_hDVP%y#keOYipmedct$ z@4mnPzrA&}FY8o3PHVO9E-OlOl%L}N?$rFa`~6wJe*fcK|MC8TeLO!p#U?)H4RHJZ zar&m+yOK8cE@=x@|MPf$)kk9)kquv-21(txW&G^o{N?jE-+%LS;g4d!&HJzDhBylq zANcu1*17yo?dqG4V)cC{s%+iXbz67Gxd7e+e9afa=e)4rvj5P32L6gf-Y?rO$GD1% zee~g4^lRfg>wmV{2kf)>Z~x6(kj>Bh>e_X=oci5{{1Yt>yu7t9Nak|6cd)nhPr3IW zzkl2QLA;^l`Gq%nDLZygSJ;vudWXHPUjIKsY)$p!_ibVKx1R5q9g%CQxV8NJlnW21 zJZL(&@pyrI;jfZ8^iMrKp|FnM!Rq<^r|~fr+7Fkv z)+jGGDKjhB%o4ai;h^ouD5pIeK7Fry@Fc(ZbMd3?e}sY_J$9KMbWtsX`$(9id`sK| zzW)sVUO%=!DnBq^_>a-mJd?M@?q=rOK6O0low3Plv2vNm6B*&%KNA}N@-CaWFpG1W zx9!XRoeHeQU)J;gU1OgV&s-Dy;mCKx7lMB`Nz8n-Q|xD6onrI zv$kg~xwU&|Qbg-3TZdJdUB_PhXwzLkC;G)}fe9SX*?Bj*Utg>9&u-iFbLL?eW1blZ zpAJ~l{&#Vo`__b872Ze0H+kl5`&4;H_T3H%`7>9x-4oxJnckap>x|i(66J~aX0^~mvPv*N_T?bLB&$b*Yg%kj0l$#yms*3wlzgY z5i(DzLvQo5XJ0SuRM@8AdC_opfBeejCxd=--!;qGr_MUfGT6WOgZ~tj_+7Pi`@ZVf z3$0a}vc^nx#vEU5h9iAH&VP8e;KDx9?5N&DM^`TBdB;|;_<6|5WB2Q`UazrFm!2%R zBlGO86ZJ)#nQqE0m(|#^Yr@Tb@gsj_*S7w>HlNv`EHXJw;<#(6{28f`kJsCz{NJi| zKHA;Ogf*x7SsONm&c&(j<-E?X8KhC}J8*blbxEHD4#=typMQzsE-tDb=iorH+_bq>0 zv!7acUZwfYuj^j-`Rqhqlr6h*M@4V)&rAM0HYzW?{lcp7!1|oOlkFeOkr(~XkYnqo z>wS2i{Ekb1w7)g1eI)($)73{OS&p#l9G8$OeciWp&a9TalaqVQ?W+2&A6%>Kp1Z{M z__T)D!#U>GD_`6RFONN> z^U8=gU(r36Z)@{wMVN0gJ5apgS5MF5D}jGk*EFeb-8Dr=xkz)$gZWV}3W}nPE^W5E zcBS+^`-?cyX1~jNiL=~uTaz6RJb2I(&i#m2Py6Q5=<15Osg`}Zd)RC(*U!HFNWA;c zmC3&YFSC~<+bm9A@qMMqe}>L^mK&3mveqjbo>`Pv{@~-6KU$&eBIak6U!G?>Fe`TI z-DxYAAGbD9jOJ|ToyX@MQ*wN7;Qk+usUO+H{kLYmv^ui<^v2K|jfJPpzxP%D)jsg$ zeXqUHmv5US}FK+TBNkW`vbRiD?(*D&t*5Vq0iN6ZQL``MLO zBpyGW+&AOPmvxU1)NhNMy~bwR_2QT{+MhRBNEY`wGOv(3w6Fb#^NJeFAAPTLZO?X} zu5d9IJS93i^PkH3`nX3sUis}6tz63+8nLa0aaBdox2sZ_a|>?jh}rLaSMeakEROHW z^3Jz!7Hu<{!gJ~P`BPPb@8j2s{b%^#7tc`f>SC#{hKdpEEh&>2^UGKMR$sSY`=8;U zqN#Uh%dF5D6-I(#p`V_p?^j;%>qG5o`?aw#D;{O+z4)`Z^uf)Z1FkCG`67u|ex~kA zK3vPH^uz6&b|uFqy``JpygaR+r2Qp4@;^h9|DTAr_USb@pP&Tpn7*l$` z&x0>#E3bF&e=vK$_#53PlXQ(DjzsE+KMQ)^yP)uR;jc@-Ud3mBu+sJNdhugdJ+H&U zgUv~A8UGy9-Q2f7s^G(iHW$v!Huk3>mOO^{e_p>(r}4MvpZ*IK=M@!ZU)ZI6&p2}x zo)5nA>+zR$b@@$kdY5Ki`|Y^1x10CF7Wc-t$3HFkcs9HyC&PUr@Q+G0-DT$mE zyenqXLjN4Tui6z+KV2qA-(J)4vEkvB2@LO8t5$w!y*snxUM6eg6K$!EkGt>9{?EX% zO1o{+&4a-^j`z=OFVM2zqNOxVO6Swh8g-RtVihfo^OV-kpm$ zUfneM&%hDy6Tb53!_;YC!!$n5pX2oS>G{H!!ABpOe2OY@ZcAGCoHhKmsQs-;+ON7d zK5;&9Nu^)(7)zslkw;N)<@Oz96J?!nnm>31xtmh zd5>oN<5PI_NYyF0;ISn8j%Ay@-FLd#fz9+weqAQXln~y}a z=KP$baiFKZw`%S4<~0)@l{x&2P!Q8Hd;C8A=jF?X>|)Op>J*;rXxa4B@QIt{ah0Nq zlk#&jWzO0y)!}|qX%Z(gA$sqH9TOi!vfF<2w-cS=W_MF7_tVaJeIAjr?-on{F5BJzis$3+`J9}FB4s_y1&8l7 zKlGlk==Ga7EAwvO^Ia}+%rI_a?t_ffKI@L$rLjL%BR>gN7rzcq{82Jt>dtv;j5nto zJO62&mHfixf0v715sO#9@Ns30>M8@Hzf&q5J>8CR^DY0+aNR|YdEf3P>mQ4X1>RY4x51eFLd$Gwp?9@JngR&j}8MxYK2fYhAt$yPJ z=N{Ho_xxVU?g*(-IMY18@U8ET4{fW{g|%;bGikkvm|F0=z3AT8_qh)$t|o8WxtY)B zX5`GmhU&r_AyVy)b|+P~ecYii=h(TMKm7~+e+MyD7P~huZ+^eHL+6_7z8u!%lPcej z3Rjf6lVdU{%CF1^pvK}GJ z*L}}L_HR{AtWUr3F=LN@VYShc!iDZJd%B7)uHPHJ|HIdBom?l2GX(U!I@!wktG*ri zppq7;;+>kPz^Kw>Bl+`*e1O*0=Z!Ug|CI>#tZ?hg_@%0ePdWOgwlHwr+ecimv*vCFu(R~ z_uMgOv+kZgk%vzFyWC^0Z+8FiQD5ko#o9FM)cY)F_IRopHq^53mH)8zt!k$3I;F#I z#oP2Jc27R%zu?Pz-?Wh5?N?MP4qVO)ySkNO;WeY06W_itE!}lNEjndZcACNNhRF*L zZB(`iUwit)cb~b7cV}}Zm(*@dw)T*XW?q-Ixk5^FuEfj9@@7w`KILH&l{M=-a&^ri zp7|?w%Y|1i^xhcdxKZH4yTV)3e@kU1-e)Un*f62^$E>eQKa{=na)0C{D+Wsk5;-F?q_o^qbg1zD{dZk6p{De=;y z4nA)pImhs#ashe ze4D4`f2&w4X2q7zYJ4{8E3wx1(qKecqSXzpi&{e|UB8 zmj4VdxxTM^*j%Zc<@s`pTmx6`^}`qc?Y^>Rp)}4xRel6Td8cys|UlS>=+d zx`iTZEw{==O}ZVu%zowayU}NpPF&Ap6_T6p7W-5lii6A4dx%xH~y-dDtrCV_d9yJkIV`d+={CBo*y6B zf2x0d5dTV_&$}bmIb^7Iw7VUrw) zH+1pm2W3v*&!2Y1*|c@D$7T(#4f90$7WVI7YudBq-ovj}oifZfy*_q-Np+psb#zCe zFn`>g%i@0fdS@O{vs7Ze>2Z#|xa-U5d=|%ild?&BSJ^B+{V82ih{-PX`O7(1KG)dI zWR~tOYYOw%6nnsQvVYh8caN{lzxF^rWa3lZW%o`>ADO7EW^TNGzgNw*&AVsjg)UBN z^gq4jgRS;u_J-W`sS!PaGY_0_S2cg!V|H)e*0|dTjD6I%@9eoVh51xT&uW+AbM9eZ zM6PMg)aN>H?Om2C?6+Ge;H22oL&MPcLshl;GKH=>xnR)4$ld-9usV6sCQ2j{PVS=k{!JzWSfvp{XBQ*6mK)(_NUB&Mm2AS8>j&@K%4W|Bktma~ia` zj(w70-jkB>Y|f^{t~W1sCibkZt`2fnpRRslC*N+)3F-3#XC>sWkZnwy#PwXl^yJ-`Kq<>kG;>6Py(7q;JovkhL)1LmuIij{1cP27CSjSypJpb4XmdjeKuJI39 z=GPQyrcGpWo7mu0bkv{Sw%5E^QRsu=#db&EwDdD8n%_NbkY8)~&hx3K{;3xM9tF!K z&f0JmMOke3l$S_-(D>FjSop!dmohzCng{G=F54tz@F}5>Yx0R@(-w*OG(|Gk9G1vi zm8s-xW|y#VU(oRe&Gjn#iflN%Ry}lSw%xgWP2kVjQLdH&1x0MNFV{vK5C~|ME;2Bi zR~WP=dTB_PjHEzLe_>MX-(J_PbL6M96rG+|cw1DVU+1E`LF|D9`91s#O+6W!j8>&^ z{bc8hc;0vTwXaUhL`{}H#+PS3=J^%;w3Kj?W|;5%dRESZW8Ewp&E8DwE&Fuy>sO|^ zZxp4%wg)Y;TivEwJn?;yYVVN=o<>HiZ?F4yKFGFxtM0xVPrbVr{fm~d{P*h@S7*q? zJ<3zVv_JPW)bdIFzgOgOMvmyKeT%P6ay2a0snoq}Q}{Oc<>lzwH70M~ZZ#5- z;rU&~6B3`!nZNVOpS}pgcea`@6O_YUL*02!NX%hAael4M)X+p>PUdA?{~5&GKgpk) zCGb2aLCBrqyGYNPiK|(3Pincx{JOGNfHz-f?$d_H%qkz>AJt&lnW<*UWwt?vzkaR4 z#L!cpcRYTk-cWyR`WYn~!`mls?V0H;z`{}3{QB#%88i8g^{hX=Lt9@(?$PYp2FY3ebEZnXFueSqVZGDTqV(SAqWuy)@ob1><^ToILG-c!cso%Xfgn_$DF%2bkGoL z(9;_Z3%1GL-m$dEr8Q!u_POwdUl-3i;5RAKU2|4Q(Tzi^w%bQFE^*+@nKSuV=32!d z2NpJF%l96V2k$JA(~3E~Q0+_1_Lvnc>7SN8-7fGv&pK&_hdPV!#Ir1$YtGbL&CBkn z3vF|AKYRJwp9WEj5c5zQ{Ol$t-Dex%e_W)0EH0EEm0Dwx3@3+Jn!+{@*GK zb@ug+j@Au93<{+pja;1U>a}{W-2s+_zj-bC2Ns_-j)d|K7W|g+Z>0Z*Hblf&Jf* zwZ|n)+Sz;LY%>_%UjAevcy9`yyX=1kE9ai#9|25r1g}kB_|4?vd+*8HC6Ajhv^Rb( zbn`2+x=_F`^DC{d@cPH2%#3#~6j-I(pXzx&`KZjiJr@)nFW+u5_dmm24e5@UWZM@9 zAI$r=g~#}~+T>Yr*0U^?)fyOkiZU&i9<)iCqFr*ULT(B}^TNd$vW_cRbdG4Sv(#;Q zug{*S-nXY@X^B`$gyo&;3xXTJ*KO6GQsAW@|Gs>w*@M&wnQuqMoi{6Kd8o{@%`_9> zXYQM7KS?F*(~rmdO`dF3f0{9KM*o!cSurOpBV&_w_(UF*F4y5XyUkSP+tDcR^qapA zZ_iH7e0kPer^sVp$z&cE26;8U`(80GmNHFf@;xANQsF^Q$*;?k?ri5eP}tz_^ZV+A z+$F3^4+}r>{5j)WGEeG9@Z)^ZxWmcIGq!VzEXkYt$Rg(JbCCzDLZ&WQcPixKnW!7y zr6QA}7v$^wIlS{%*!RYN!WGvax!wt@lf3w(-ef}TgjNUZ=Q7tX%QOFHNLcYcXThG2 zS<@!?IIrfP$yV{8^k{A9hxZTkW2{jT}?>-eA=yT9{n6d%qIdZuf1zb3n(W=_ht z#P@Ntm;d1RpOzBwX3B|=Md535*z8ZNd#2CtyevBNTV~oO?=6xuju|T+t11)yBC_(~ zh7C`bORua`E)%U@m#^T}6^J-7UH!JgG} zbH1)y9`Ir7`wn$)>D`%&TQ3`1H84m#7Tql0Tw>23vBcr{-YIFh$5kHB)1J3Z)AQ9? zlfF)w{w?oo|oET-qlWIWupotnZvHH7ivbIBn*yEfYMf zyR_?8=CxBvQzjkUP+jEezcypJr`<7Du+s4rMdC`A>go;iZaI z6%V3AlUg|?Ll3aO4CV+~b>wPa*X6jrBWJb?Eb!QWEynvC`wG)juk36ZOLxXs+j#Ac zomjVzDUTz^Hg(toq@Ue&zF(6`gWA;Zr>@+TO+2Ipnb-7-jT2C{N5k^7Iv|< z?@7K*OyVXHxt99Y!hMQA7Um1@w3?DNab0=yqY7T+t>bah6?H6~Eb8C9(kziN!gymQG#2Vkfi%WRbbo|R@50u{8)ZB2teQV9v zkLKTQU41{v*4|~yg!OZhjEvrDHLv{s>(biZ(;u|&mw&l3)9mrWuj-w3dM^qq7sYx8 zW!yOSF#gGjmuD;DkIcXI+55t!2fA;H{Zwy--90Q6^7rEVc=L+p6*IyTXko2QzZ+_X7oZVm5G#Bsq zc>QhY_T%s8NLpibikF%zcBB$WRaMg z@>9D*TXVkbUa5O6a>1>bUEAEbuk#pQ+LF7)LpgWb2?>dvMjJKwi`dtyYcF`3R=aez z(_4`qrAd!$_hrhgc*WHpHSOL(F^$LbbeDPybd~k_>;Cw z<=;F~Y;>YUXtC<={|sMO78`zA7O?GN+*_Y*OGJ{lSj}S;&E2xZfoGz}CALEwtSi6E z9`%*o_4Bi5flpya$hyM~27bO)ub%#yvZM3Lwl@rC=V-{7?_9X;_$kAZ7kr}OM){`? z|B3jz#46^gXLp*CI@g?8^K`>ZeJ3t(%jn0gu`XR4 zn4@#;Lc}T^$J3R&mranF_@Ck0sy?ag@@<=)$~@k^Ve_!{mtPw`KeYAoUj-4**?DJw zRNBqEI(ub&W$%+y%N+V7(|U3ZKlc2dQ}|_7RGxRn<=m*d#nq~p4$EsuUS|-zw)x$9 zmxUK~o;MjbUGljpB=_Ts=*$(bt`|k`+%-v2?9s%${Z+Y@gD)!Eh*Gbo&^L5S3tsF-WYkLT)^m;Yf zU+w$(-8AgeyOfHx4+2grO{<@6A-6wjUiRcO@$)`;^v_b@mFmCec{6&y>}so6$DTOP zv@#yg!uyw2-`Uf`DP{J1N0R4ZekZN&6K}O9I4IP;3X@5>c*c2Z_w-ql@3?I^t|&d@ z=j?EH*`5EU`aSzxV6f$Yg}hDgRreoPio_N6uF=(SoUVD%*4NFY*d=h{B-P)atezLz zGT2{QX(XLf>?tvW!zi#a-eCScey6&vBHNV=pB-9!#=bh;=U4KE6*n7x&I@uXVPET+ zm~6JbWLlx}hN*|#UhL5pzPCV;{p!un3nO-huDVnu7;+5ds_t(w(nf~@~M%zs_Vf&TnblqG=n_)&G#Ke`R*PaLMXOlh4Y=Z9Hq3 zTHhVMwpaSwoK0r<^fVm24kL2RwZ&Ve{)h!#wR53bR)%u4`KCr(0}#<<%bN^5jK- zn5wxgA9mMOMjAaep2kvc_w_)9(l72@JBeJ~JlUzi+x+mhZS;eW*Yir2&5EwRkdk|&;>R)f?Kao8?OsvAn^T)LSX3EUN{38l#OOZ)e`;NVxn|seVhG%r*x;3k%bWCli!PVju}_xIee8{zBK!X^5I+d-*m4n)%LCWy!%AbR-R*K>NY*0!VhoiFYLPRzcqcw zBpHX>EhS@yf5MebF&Xi`QOqnm-ut=j+|dL=v z{P)d%mJ;{x21V0j`{W-@KbkN9C;4N^Km8w#kGQ*kZ%=+&x%ShceO-ImzrK(85|~$T z=Aql0Y2Uw!-1wKuoX_wuV&1&{!G5QhrzNoOullnuDEIEWB1=o_Z8qtwS9t2HWzv?l z^3UmP<*B@PXZeM`tFbeLoOkHV={Wc{NM+@dP4lO+m9yI|+nnsOz}ofGv50pzjhFwh zS{X_;ZFa!QToxO$!CpH&)apA!!Eu6gjb zM}9_se$*t3dlt#^sXER=m)1**zYNS~H<&bE^O|&nvxn7}b( zWwiv4%>LP*AC`TyYg_i|PshBgx%Sm_pG=qd#?;H!)}}b~ZN!ENl{qa>gulGWJQVrK zd0W}T2#$}9FMTJUh={Y?Uu2n-Vo_AfW?dD$C}Qq^hLY&Qz^&e2zb`S^v4c~qWA>?x zN2;=p$8G<<*w%4lTjXEB?|cqgqGYh()Cwd2_aYP8@4pUHjkwup&XJ~|ZNxvN z?@q|}h0&YlR7*HLFMCw9WZOmgoyUX2rUqFq+Fr?|EfD5pU@mx4ZpzJR9*6dvQb|kR z(sHcude?>x2lLkaD>k3Os227!*tX&8N|w-Sk4q2d+&1Z*Bkp$KxXnc0Pcx=YIjYQX zT$D^*XlPTV_14468%}qt`=OQzo2;f%VjuhQhbU_c9jkzp>8loQqz_cGixQb~Bg%?Od43TQo_pE~%^P zS8?#+tg~vNkNS0I+FY~wYj|mH*7~B5BZtdp9p1UbLXyWkT=1AItaj)n)upf0}fcVb!EpWgBx*dw>g_~#h>WZxjSY+2X!zgQ?mU`sc8yBmyGTa$sb!Yxw`Sd%wNGU3YK6laU-AD4)$*Ah zaL1fgsqa~-)4~%WVYeb`wb-x3|Fb=`YFW|jKCkU{wc3JPr8}i77*-rOVSj4o^G#1D zY}#h`)AIPkkd;cZamV(aTfJNVK*DZsjo()VuN=6$ahpNRin@BPlbLz3SMT|8HHh%k zncThZ!P4Vtd1{;Hsz4X3NolLIvP9nG{)pMf|MKgKCD*R&Ofr5K_{s2})ME7+r;a={ z+OJ%e{5J4R*MjrC`xRJ(=geB_r{PzmyKSYRzoFytnRDO1^qn5AIPZ}~S<1w|1y_?A z{jTNAf7f4C+1V#DuTn*B#!#b}>m}JVgcmjUFZG_26x1?vI+w?_ ze{t8D)icg3&+^pO%VYb`U|gUsVUv4&ZSGvrZ{plfc_v))sE}A0?)$#Viz?>z-msZ=@s{dwM)5I*d^Ot2>G)^ zrewAL!;Y|etp_WUPxf+3{AaM6vUiW5SIf*3$1~13E2u`KhRe*Fq-(OOsa!_p@!qns zI*I7cTw%A*KH!9j;QFypIJma54&{>Net&EL@iZO4$vj6$$E!HmMDx*G&-?@KE z^_9OV^xI1WBYDPJmOKgs+k zGh4sHG5e0^>rM9;@&w&(G&;sPW6`RbC49%bA{K8n@0ZDVpyQla_S3su;`OZfhzWmt z0=v_fM!V?kzqF&|XQ%I(%HOLr{++R2WZ2Z*JK^Xbj~lPw`DPsX&yc!P=$`8?lc#N# z%9mfh4~u`Js64sSRmX?5pYzA#$^WXaRAt$B33Rc={Z!;(uU0<;aBwFJL={Q6?I)$USG z-8tEwi^~>2ifv~+HGeis_3x{#n|@nwyB)5#%3%ND?K^*6J)O-qQ*@Ej?Pd9sB_v-J z2I+8$IiHt)FTbyUPUF9mZ#_?LT(Kk|J3G)|?wyr+BI%ajzAQCk*}UXq$LYt!%f_fR zS)o@`_zIk5Wd2r%-dN~*hDoN=|GkV^&HjRF{;Y|*2~$>|mORvxCwWk|S@(xHe|2=U$n9W9>w(RZo~-*&kXm@tTotQutw>GvSx7{AXx& zk`-dTyGBPfU|jbZ2mTf1_@fj6rrdL2`yDgve;~X|eS?R1W_x}6zOT7P5E_3dMpO5G2)HxQb2>n_2 z}H^-6(BE96z#>#S#OmN@ZQ%;5HiNx~;? zSuTHbJNcR1XO85lj|JNepBO&aD7*PaSc>s(j`b?x37ZU4)thV$|7LyJ_Vj6_Ph7$S zo;eBi!JgmLCQO|n($BJynWaB#t6NaD(37Bv%eEDKv_JQ{hzF?@;qnBfaMgY)OY?YR>-nwl++tOx$c)>KWrn zT-K}d7%#{_d{?(sGgI%~J?`rHM%Jb5XaA|$GKemjRn#CLJgt6LRZ~`KXPiOPUB})N zMIkj;0}uK6#5_xmK5vs`Jh6Fq|Mah-TDN}+c_-)ZY*tGY;(1g2{(aO2N4C4`P4Z@M zGCck;?6yY|bI#4?&nZtHZ`0m1FXH(|y;TOvo2I6=zcsY7-6=FJ@Idm!E#K5{O?q@; zPrk?sZ{goZgWH&G1f$O`66xLM*>bya@}Ib^@;72%EzIs=5^$M;H?B|~|e2&#yo3FLFc9v1!ezTBI^PcTo z>y;tkYcok~T1@KXg`$_+PwxGFHX}J+=t_x!six%BJx@5qJEqHQP4nBVlQ`qwn~i50 zlJiB&gLbt^OiHwp^qwTr)BI(5MX}RWoAA}WV%BD@%O!o~Q{Abw0 zo|JvoKBfNVp5r3Hu{Sxr8&qazu*=POA7A@N=|^$ug4>5}_wGCs_E=KJ;7|7Lh3#!j zbDw@R&N8{1URH9C=~C{Nw?>ylH_y;IzVW7?r~Re9?B3gMn$J{8=xq?HKOc4Kg2}N) zNAZN3n+M_;)-5}9wyTqA?#@$_?`;k$FRJwqGxT;H-Q{?RH(OR~?{==6Ao0+$XIcVfTe|xCv--EQ zKOTDiHaJ5lTX4^s$Sdw@k&LfA-$#e7mr=D#<}|r_^Ktza`=inCMY6vqd!IRRU=iUc(;IgtF2t;i0i!9+0kcwfiKl= z@rCeHA#+xR6xI4g`kr&0UUu%p!v72vlV9JPx=rj;^4w<;9R*1&3E$6ZA8)-anQtI- z{Ok7>qW9c0LJz3gSDY}M74D>(IrVV##>c7?p0lK_jTDx>&LXVh%sgl1`!B1M0#0na zy-VJ>srR)0zO1v0-JI4W?m3!s;>h2NFN1DL?LF7+FweVUL%Pv=`-9shZTZ*cDsR~+ zk>cufID;kGu0`tEm&-Dzwu^7-UD^@IFH`pG+TX=zD{MAzS+)EWdt%I0vF%nb_j2~` zIyYly=iFo&wNLE-8P=_dZYk9{tq^43(_Z%QvZx5x8s&KprP(dG)tNe-XNn5_$z^!o z$*z3in$YeGcXNDRc^DqwI;G~Ag5|FZpN>qFe5xhBc%uc=qHeuK(H-}9y*tPL*!!D? z1M5zie{cKcqs~uvoP1na$5%LdP3QG<7S^=}wOL!=ZZqf3xTZGY->v`RApzYYLBSyU4tOf!q2y^LF)F=K_3|B)k&4eD2}n9U+y{ zJfB<-Gg$rRT3WqWx{d4AB%Y?F;Th*YGwtfsxv|k{25*ld^T$Q9YS#UC#BTiF{JA_n z>-5C6odrP_ZXbG&ekneiZR7YoanHd6b`51~VxtdxU9#p5i!lgrJmzP4d~a3lv5wo@ z?x-EpDYKACzt9+BI-lRwqEBTUd!_vdRGxBUv!+xlR>T2S6w*>@=cAq#&x zm9q3N&6nDk&hz1IPQh7e^|LpA2Xh=}-TOg1?z_W|ZRMOwCl=(X^zWW`b-wLNHwD4t z0ofrJ&pf*Jw7^1rPSO+}1~yi`@RfPRC*FG=zo#sBY}ST`kLN1i&tf>7(o@~VaFWaN z!mPgyQYmcOFgkyVuVC z``(m;S0)}bSydrjuY7N%p^#WzbKeb-hk6$`$Rzw(`yxyChDw`F-_F-x7RcGpjhY}P zc={OsETf1%HvY#!-0h)1k8PF`pD^`)QZHoZ%Zk5|49n^V=eF@2Tp65*Vw zkM(w>rCBK3@@C%tvFedXsZ$y2BZK?ZuiwV(zr}Y+M)vT#$4hNfik^DQ-jFbzvm$8n z-rnS>C83k8d+m>3c6qgaM-I!8ozHDQMo+63Ts(JCt`+Bl|c_j4G;AiLESK6GZU!reZvpBUfuUc*DM{f57-Y1I_@>0Tnc6?vE<>MTy z-s3Y(E*^Or;u8L2`bN924>i}t9#s&uV|qM+{cQN#Kb}?H`>gwC%rh^syZZdvDdp*giAO{-oKr_iM?%!QV; z>&{Pp8MW=cK%8ykQto*_&s~1`b)DtY{Dl`~N~-3a67?E!_QHCWYtmQ<*x` zgTah(dM9IE_UX+I-}$0=%UULzt_8+IGIAWp@0zgo%)R9DTbx%i?3n+xoxJ+Te$^gY zwD(CKv;5?G|E1YSA9E+~eO4f-bnff>^8wnEO0-;WF0Q!NGV#Kbw`tuvd}ht(Y&(}s zisT=t>tNlE;n4LN)KlMCd`_Qogg{@L%fnZI-G+od^8KLXNp9A&?**}y0 z%4Id9qqFB3Es-;?=DYGlh`l$YRl*`@=bifH*H%TnHY;lNT-xi&l2ZLUbawXkULJ$H z>a$jz{eAT0)QShyT+=0WPX~2JPxcnMwp6K8LNn>y@fETMzM5Fg*ZCRjCd@it%QHVe zIdpnZb%UY~M~|4Bx_qnA>%e$Tu65ogoLIlfJZqI?H*)EDCHkm?{j>PAywe^o9XA!G zX|Y9=%3V1jqLW*y{yy^Hp}f~`w6Z<+UE1gox#@Wx$L}4lk4i01P%Jj^z5UPS^p?b; z)9+_xRd({vEHyCN<`60~uSn~%(|?8x%_kG(|9lBP8ollEGegmi1*aZN*m-^{?=fYs zH_LRN&N9!=Y$~!ZdVN~%@qdQ(VXkXVojq8l{(bgzR`=zXwg{c#NGLaBZA#b}WUldY zUY5t2TM6fM=j+^Xu$uU)cC~usedkbKo}+y()@oCFpK~;nu2gDrFNkt2Wq9kfgW?)Q z8*%)^;%9O{msBP;2}#|Q^gOBSGJVa(pO3RQ${jG@8nR>BtEWD@oeUpKJm6o-B`Wvi zw}&pryQRTJdNwy2({4HZ6MX+R@J`mWi*0fV3079~r<*!GHPw7x-D_s>>6qE7#)GC# z&t0zF$~O;A@8@E4c|7ZuiOhDRX-bASXDi2aZssW#m-V~_DvI*dM3WhoS!+(RPW7^Hz$=Bt}==j=r3UGX)tU5SNUay`t_VO zbCra0pDUmF&oHgW{nNS~2}^4QTQ&y1%ei^$e8sZ}Jux%K-$(0u_%AJ;?bDgd*!48& zq=MJZ1ly01xBNTbtjVjpY=4<~`K3vZgQB<3xNRmRdS>JE9=Wfp4u%$c9oZAB${X=* zSC9Q{Esu56F#}=N6y3^mhZo=Tdw}GNV>Gz!@gS2e=^4mrknq! zE>F%a(PcgIR)K5wJcFGlZ8yhFDSExu-!8J*^=$OfX}gS#C0&f}?w_2kazyk_CBrZN zs&jj43)utCd+Pz@nalzZ)DsS`Z+3&KoeBZS)arv^v zwLIS^Rfc_>;G|Uc_4|K@*WoTjr#Q9WrRp48`{hR8iTJzD<`eU`w5gfQDLh}baao1p z*V{j9Ud%cCl;M(cy~O*zL%VbN4-3S)f9nu+dMh!*oZXgV-Ri@?!rMxC)oRV|=04fA zmO_xbbIcI!>+ zy7X3Cx#if^mphANw|?9Ga4pxt;zH)RH}u>U9_`Fce;nUx@-@Z0aLy#}$y=6RzO~9| z+0$ihzFywph2js_uAMh4_vkjg*zF!aB<-)%T3_S+&(N~vw@LL%)zDJj-&-w|m75sR4{L7k`?^77t=beeH%iHlsJK~ssSom&P!K8QJ%xBEK z{nO&SV}SLE6_+&G^PQ@LMcfu><~(1&a=A>d*6YcC-(6kgcVwHV$e9BMMSNEC*lM*h zQl@fdavrn${@wpaXvNgqe}ftpq-@Wr3OUI#sm-jwh1{j9YG<%)bExvcev=I1}$sh+SdK2tKU@@R>ad1J~hZPjUW(pYLwRObAx4hvrC zHE-=KH{r<_W$vz#-WOwhKn3#RyhS&a`DM6yMcgCTvizqlT*?p-#mJyl0#-gD99 z2i<#}By|&JK6YX_A;Gw}I97CdqtrvCF5A`w7SRyqYPp+lvbS#7ux-mMW3A&HIh?W6 zErb884w4mF7WV9>XgTx2W3{i(&9hourMyle!sYRo`)rxpF7MfYbMt}s60Tv>KeLNo z$h@T^U={6}tHq`myZs5{`#W>4ZQLjxee3Fk=?6IbBKoYpiKhFyw#rqWpQw_|wIJPg zbIj(|ny=12=5UP^IoDe#vPrs~uV7Kcx5PH9TCMC@-R5^U=X_$bduN;Fxn57Y>Rr%l z2~I`%`WyclI#-E{uXu4ue@6MjfSm_;te!2hd9yqv!>{C8r(W_dor9-VxtTrh_j@$$ zbAVac>3q{W(J~AZHI7N&+oZRC-E(c#GaD8yVs%U0ZrgC)KWnAz(W`%4V>Ve$e%9_| zG@)?2-2Q*NZkfyvin&v!J8s#6{(+H#ueZd++n&TAx4zTm}Pj@QS(uB&@g z`E35l*o&K&1;*~oDLwJ!`^p(-PHjBrqn@w(_x;k66>dj98wdIN{QDa9p!YvRiRkmP zs#@Dsdv2|H=CH~wzP)x&$&=)*VI>;kXNn>#9jyK{?47knH)he9^a&p8%2qz8&3Y_x zWZG@L?h66kmEr|C?j~>}kx$1MY|q(h&31b_VTpC@PEEz%_y1;X z%~N|Abh~={Jr`!}fA(INoyv9Gwu^h{UAnUFK-qSNbr$OPyCQV$F0;?%l3g;P_)X=X z%%l$M*_KnkX+9BdJ|A%3tER|W*d(v#RpD{2f?C@`A04-EFYG)Q7j)e`R;hmBcksfE zneSS6d93)9+$O{LSL4QtpPfxd?mEwTYy0YImqc#M^>n74bZ&A*&s)Q%YQB3u{=M(@RX5n@cS&QQRAg$POrk%_w{?EG zl3(5n{9VUxxMhytTz1K~f3tUUcNDhk2TvAso)vDh{b&{Qt=Elj7T;=QyKuOm_>TPL zwaG8Ub2C>ixo#P-#(C2mo?q4B%PUUZe!Jx5HnCIhHLOoP5V-TtY0v)H&C@-1W=Bu& zImsWHY#CRTe&zaF_Orfbm7D#HH-5{1J?>`8KYF*{hurqEBxo?oI4d9)Y@a; zIgh!=x72XTgm)3`@s*}v z>C~66D&N*Ke!SMmJMZ)t0!bwyEWYKc_ED z?!Po|m)9Ayj+0>zXIjaGJ;}^ZR6X|Nf@Wv=c?I@o=kq_T%v<*;pgqM)($1lQ@ttq6 zkE^izMD#e?S=tGgGkI-pDTAxxAj=Q__otqmFbx> zs~94#7Vz)*zUpkL-8I7_-pnU$*{?0#zRy#gH)nR-ohNHnNtesaU#iV|(R%N;xgs0< z8Pg~9HXbYBw{PX!)ZK9*n&Y94`Ohp)$Jej_naoS}H}Xhg-L-lB^0gk<1C`sg%5(qT z44gmx%EiPfXM3*%y>)MTq-H(;l;8aMRr!+zJ=GIBx8xQ1b6HQY4xO)O+7hGOGpQo% z+|$=xT`7GJB%XwZ-P}2$BtL6nOy4VSPL`tRCWjcYVk%(80v ztm2(_WZfjp_#WSy%d$<=`gqNX72(fScRXKKyXsAg*IJYIxWvt=x}cD%tJC|` z@YGS2)u$#N7gb%;bzbJOqBXlv^1ENj*B0!UbRBi6J-$$}sq3Jq z*n@XzukOtGdd~XF+GUFt`=|-+eA?sOzsx$sI6gMoB+jSX@&s4er^RxAE{g4&uw}!+ zV#yq4J$ElZ<7##z*WI-yKJQrqerij-OUp^z9MJ8NILT;1&7^nffd{_+nzdSQQ`8Hm zc=o&}l285D?^u-ipW))c&x}PyUSFQ?)2z0<_r~&~&4t@;DdCKVPVO^t?mup~#j{}j zvl(w4QW-iWm_(|puV%{ZoV%c|=G&@CrwnC}Y&Ke#{GuZ4X%bQqWlY z#Lk4*6K=dR40)ic6g_*+*NJ8FJ67y@{yNauQz28Y>EP1|Au=_GKde?+oty3Lpqf+Z zcqfIa^3js*Tf5(cGY5CrrR2V{a}2m_>TF*d#lfvE!{9- zbAer`y;-fR#@*f>H`W(t?`$c&^;J=sb>~T$C*MR)K5Q~^aR|J4V!{cJCqXAmCChsw zHfV8+{677k;rgog#d%%2DLXCL3r|g|{HI@aSM6fU98WoRK9)eH$E`8R&G%;9^IfC; zEg|+nQlxwSQg_>{dw7IioVHA2$>nEP-}x)BuvBEC>CsC+v$yAXG5mdIu{yBKxX9&& zkmk07YM!y@4%D9cwrs`82!rib4pIGcok?zL5q$EEg;{->mpFP)vqv0G zJRxby=($LoU-bH{*~}6mH8)=Wxa=X@8D$rF>w06;k`krG(?kMJJdJv6`BR!X^W{We zy;he^oQgd%Z?vj>|VUg>lA_SIB*pMBl8C#&_Y#xRJ#ewTIVMIU3@r^A(c;W`nU zwyVn@Zgh4zDdny;h2zbq;sfk^4NhkA7~En1boA(Hx9@OJTsyuINsh4@`-S8tv=Ve4Lo_;=O(ckBCKfbLw|JM3<#?u|yZ`+lvoO##&>b?_U3)Y^yX2FC0wGQ83=ePu);`EG`-Vs+nw|1Yn z?xBY(mTKI;^5NAZ?U31-vjQx(Roqn(vbKAvQu?#;--q-5OWoDBq#MPZ&oN5X2roEo z@Xl7-Qcq9+EB}U6RGu@Q^NYXg>s#(`7C$ByKTQ8vwlLqyE#=mBImcUF zZbhrA=C6&7Io2z(SlHAp=<2+fe=3(1nmixO?Vdl$e!7-zc~xkvfBX!y+a+$57K|Yc zi)B~WAD_>gZzH(eQ*P<~%@YV5+KBY)03X07}e_x0Sz(0O~#tc%cVx0+tnvtBB5qsND$$0^Ro^82LJq1!d#d(g)SKmn6+kfyr-#+<_ZKv{rY$qA`TQIid zJosxID|>F{gNS7FY37DIc|wz?T5?%G+ty~Z*7D`bo+&B)^YWMFvc+$4&SBXZ`_b^k z{kQX`^p~&j=J^mOzgeYyMx282*Monu?@1rD=l$bwx|(&DyZ)4#6Olz6vcE!Q^B=TL zUU8s1Pr>tfz(%jft^S9%{|HYyez*FVZsd!KyLaDA50q82_D(Li$Wrj1K}p2^=)9YM zwKr}3@UO?D{>@qI00AAd!>0^S6iLfG`Tgtrs(YG0*dKAUtWVBV>FEeK)a8DQ;ob5} zJ67&7UYAjJEPhL@>gnC?zb_q8>YE|^vG42D%!})nz6r{*_4jXn^!@04w#;e&>UI}D zZ82CZ{&Q*1ubz*`>%K1ju>5h@oPP@K;n(#3yqx4LbGnGLXIU+KP5+@i*KQxRQ{B;O zayKg@dB%|?rwhe6yB8$BKmPEjxSXWB|65t*@bq4lFoC1T=l3nP-5ghaAmB+=)U$b) z!tG=1Q~opbi_J6s@O4+zo!iWr0va35nDul1$t3Mt`Jrv;@~mqc-X%*G?^#ydRLfc? z{_phuE&sNDm>xde^~&26u}eNF8LG3B)ui7E`73{UJU{BM#Sh!x@h@)Oow{uK!gHx- zS4~ju`S9cUtRFR}nZr3F&%P;l3Ro?zdw%UYsms1+kIZUXlg_wQnQ71GN9k{QW!EkL z&%iOiP50mJTBVf^M}t9lq+ z`;PUcKUjb3R}?=yyF2Ti#w6)p=k|#+Y8F;1I(}36e0|pERCCn@ZZc~=tiKihO?>*d zwjY7{E3zPGHA*ExV5|ug@=xpHRO={NUN@2j#tbe^ejkvY(hIdq3Sh zMsjMsIu990lb}7sACp1^e$nRP_$&ZiW**>YiJMB|sxxdZ3 zkoU)PQRXAb#lg0F`sGr6dZt*s;{Wpe+TNPYMkOgL&nK*uepBcCa=(a;eQK5D9{a5m z%T5Z$y z^7-JKtj~yI+z(dwN_(|OOwKfCw@Y?C_4tQhRn_%7iIuBO zt{vA|GU>w2tEHWbn!HmswcS5cd*QfJ(ah%`O&wmFhffc_b;niu)GFo;Jxq&b1Yc;y z3;0dzesZqi^qjS)w!OXiWu1HA^|vLFH%+Z4eOjFs>0xj2hRsUu#=2b-dhNCw`JQ&( zcS)sUe(Kf@9`mLDoH)pH<4M0`w9<9=uu6T^##^d9%B^NolP|xHGq*n$8+Pg9wPR;P zPI>UWkv@lGD@hYPNfYlN)c;W*-WFl={YB>bUJ`jl{ikKmGWo zzSYRS#62(XC$hV|wh)&@GpB*3P_Fma1OB#mB%f`Nb;F2SPS|_8oPK zlP+Z}U{JkN=kjsmiIOjNUw<|JXJFf0k^k`d9~<@9AJ0FY4!NB4pP?oE;WHDDe6xw7 zcaOZ9S0%2TtrPZ1Q{l;)8!wLSxpP|dtB=mAW7hgVn6_8SJ^n3He{k=u`^|s6mt^1H zCblqtZAI(E_4W^iFCY5bcY%TL^iB!cgN~BSPgs(5XZ>Yv^KYwX&PlwuM|ttfU)vVv zv_|pTnf{iYwBXQk8R3H`WZ7(Ay?-11yZDd6$7w5zAKY*Lr@DC>YyFQEd%W|^_Pkjx z=Vk7+Bv(OGS$U4&`J?|Cw#5Gtkv>q*m*CG=A$0p~)Rc=G%>HcFV1B0OE_sgqk?reK z2Oni6FMcb3_~$Q~t(l&_OWsw_KeGR}@R4~;7xnEFD}EmnlnmC<)m`%G5%V0k1#@`9 zpNqe}{hxtV?8oHa0S8MzJb(DSeb#9g#{UdkN2a&$t+1Iw342`(E=TlZ3oZZagHKaq!%AJJWqX#Mi%yQ=Rw8vs`-5X6N2BD(ds9>*r1F zUit6bKEuoFc+yTxI`VVF)Anh#?4qyh#D08U`f8v0tn3S?CR?Ud95+-@5VG}LzjP1l zgZcb5kssy=Wqg~td+MRvs~c<{+&^-rQsR|s-P8#MeeAZmfvex^z4^K3dFMt;laSTH z7w6A6uVLtzBhRW8I}9zJs^tS$mhplpLqJ;C|QCtNRdo?utl zzx&G<)1Tke=4|*nM|!vWt-#f9S86UzUiabsVQyP%pWf$}_pA(g@7Ori`JCt1ud=JQ zuJ7OD{D9ZDG}r1_g-dbTxkv1bQ+LW`urJMyd_6H+swVt9Q<`g$i{Z(p=4Efn&lcGk zHO4)v4LX*-^NeDcyz$ep^YK|vFGZOI?M}ZDzp4F?Xz>v_#w%~WyqCLse&tPXgYBt1 zZ%a!uJltNupxk_8PO{AP*XeII|Bk5P`@8VVlsy;!xaXG}t_yCTX5 z&DkY>a(z+mUuWHSuS{F3xAZJ~`VXPKH>>v-{x!V)$K=DkrMWCm6Eo6I_CEgEXxILq zVSQxO^8@qwypF`YESR@@v0zX7wf$=K$@hQgPw)MsU7Y*SzxSSudtauQ`t>yuQ^RD^ zA|xg;N?OJ=xck+`U*f;{{2!O?Z~K22q^ja8v>(~cT)A8+IlsVMn~!U1j?v>g;pdVJ zX6!Nke*LHPv90ry>%;#}w-H{U?X*iIS2BLaCZ3e9x2(fiAN^;zq5bebLq|jCMcvbO z0g4^MKYoQ@+Ew3W(pz-PQb%u6sD8^ti@Osq{JwHb*+d6Yw|sv zAMD5LKX~0|J8OLV_KS&4>pU|iPvVb1zO~Z6<3GcL2_NQeI(ErjB+tj2>*2vSoL~Mk z*o41o`RKq|sXO($1b?5evtIM^SW)Mk9p@qh@88(RQGXCL_U z+%=!_?c#!>@@==y@BLx=Q2T?(%MCN8$WK`z^LyrP8zFW(4WBt|qW#MFW(@BA2!=hSL{<$uKgM=1EPQ0(4g zbHB~-o)pFsyU_hg@z1)c5BCfGXLvAkzkrSHGkN~`+j5dFEM$~nyy$5o_iygz*AZb; zE6mS|Rc$G(@Vu#36I{3?bK7Q*p34#^&y_z|@n%h}*2ztGPBjL_8?!1K_GmN4ZGZg! zrvIb+O_wU)+t{m^2_*PUKDtB9w&?M;?DP6H#-+>db=OAw?R1dO335MnbK{@bLyzZw z(w-C=9X+qdcFxvr!~YDMcvo*-vg!7zO*NOcWcKZOEW7H|kGk6oj(O3{<>tb^Rv&9beFHqBNOUcJJychjah#r=*EexcU0-3*PAHoB#6 zneE3G>Yy^8`N=oA2f+_6tWE7M3HQom=XIG#NHuq14|x6Eb3&I-oOdp@3EzqXQ}&oRBKNxMWy zD^VXVKceV(Qg7v+p)gmN`Fd6;S+zT#h->n|Rqbt%pG z@WD3))8#~d8@$z=vVsvfc%)hZ^7V$q^9x`+!t7!gb2>a{!@8$Pp{5-c$ zYN{G4z`a*72zUT=Hzc7{UD(%tg+j#d6jzfcwKExN=g zP1eb+kJG;FBkN(FBFir;*ygKjs9mJA=c#hIyyC(4U%##nRXb78+UND$VNw$BkzAF6 zWiO`baXg+T@o3@X!@kd4KDo9sx63+w{cd{0ciGxIZy9$)EUq|Yt?+Zg_XJz5z5k|7 zD|2EgEld7nlH*x_uytRuv+2AG zm-Z;LDY+~BXXq^#kFwn*Hc2{CNLXkxcfzJ^mX_aFoBfm6wySi<=H9LojZ#V#%vb)| zW-oueq&BkD!sCywNDn*Lkp}Obhx(3OW^WhFllqh$IpdIh$wnE@!YhscOkalW|9koU>u}`{-4i~Z2uglBEn<=H+ApHFy&s;4WIc3yTFczE(xt)ufv^2{ zUb=OQ{MzHk_Wt0ej%&ASR!m40(7P@v^ZC}K(}zB} z)?62QIiu;G=qJf5V(b(5+kTAwI&b!p-JZH%rb|CfSe2af@yECCORj8L&E9b`S#l!J zzGzLG)_>o3d|UPF%8b1&fzOv8>Uv~aYcI4|EK^xJw0))Q%a;!|Qd(zuT$M0n6yLwN z|HHal-`(3prfKhPJ(FM-AaFvuf&WKn_E~%Xu6wT2o~iV>|J!*c`0@= zD^^XKv$%(+@wV+*!!3W`HcL7jez*VQ@2kHnH`UIyJ8r1oru%S*#=<2nZflj385>ua z>KZu&ach@2{AVa(VOHVu%U;=c!K1rqI`ed`56P+_RrCHcczM5-@;-5N%F1oBv!50$ zFIvCiXg1fix{pFj*|ymHXZX!$y}U28?tDv;q@*QF`M0(4Z#31m8k=PNZabbXv*F*% zZ(r8Uis!naBkdxWlCxO3jO%yv%eUTtXDBMC?tXiY?ct}^?`!92&Aw=?+P3ld-4_Ou zt_K@*(glwT*FH(Su2Q-xsG_Li%a7dWyH7{Om|Xj;aLdvDu;M>G?Y*!>Y{8`gGuNT!VE4aQ-cvI)BlkaM7PiijgS3YgK^BtR2NV-G# z6nDABoI4~dj-AnJZ19jhzw&MDwWW*hMnz5EmT>H0OJI)A&-Qhe&qa%3#lttw<97G9 z)cqH!msD-w6B)$m-1FqSEFY`;wYOL7mfd$gr~5~j+mj_eea2DMlVueJJh^=ma))m( zb+geonYNNEvg48P&QinNN`K!2{~5~d=VyJ{8-DP+SpSpQ!y0S`uRb2{Ip!|$N6TW5 zp+uMUxA}^0N7G{ZtkNbOy_u)pH2XzOy41#$_|5b7dOqmt=Q_TDbz|fC2bl+y*412% z*?7|OXZwn!GsDbSgaR0Q_cAKa`u+LI5l=CLC|8w@S_1V}4zY$$7jV^mP=0r5rpS@* zCsTj+6;#?k^h)dHRu(d_`&RFy!Pu}uC$O#T^Zp6Nx285unDji)P2%xVjb@{cS*1Mn zEngY_GekK~Q{QN>SA4*33&VC{PPUgEDoRW0!Wka-Wd$fsPANDNmBtu4_utF!zpAdd z%w4H>hv}%B^@djtZynu2lU})9Fc*8g-iysL@zCkLjV=%N74G=OB|5eJU7tjcXxwkul~=l)?4&Q$1_K>OOLZ3@A$H820u@zU*VSZ&VJ=36VtogrujB7 z?X) z#m}Xgx#Fb6GERpnLedh7f^f-fEeyxK<6Q{k;#hsfQufKGf z?UVft_^ci~#-BeA9^Yyr*u!V+QT+1PrJ@`i4|6jSGd9Z;OIX^Z9nRNu zxw4nN`8Px_=vk=Z+67(4SGFP`)3W0xLtgY?D= zzPns_~ZLx$;WGDEzT+k%qgCv>2Q!m@O+?~;YpicLFsemSu9{E;H!K-Cunhw zYQu90xhwaKy$Y}L=Q%E5XzY{TZg+*J^!Q~Fo{bigUymw2|D(ZJ>&d>9wNriha*>AL ze>Dp)&tg;e+p<{UQ{9$=>Te7BG8km|#6K!E85CH3U%>Bws&O7G6CZobzY@lCRXi8O zn~eW6Twki?am@0|QD%WJ=hutm{@hUU_1kg*&oYsFJ03&eV1G}yGeeRt=$%zpf`pqj=gt&=`D4~W3|dey-PDnlo{JstSCx;s?EV6 zsXnRhU8Q_fNnzs&*?-@cMr0=xP5g5-SdZcNmg9{d7H;f+FK6s-d;D~woKQoLsLo#h z&x=f49F(U#-4|JSUQ{#TRZ?YDK}6q`Rc6l@q`tEX`7C zX2izlpnd$>8dj~P4<|Yvmy}e0>9xV_!10X-xXjWQ+P*CApDMV7>jp_s~3BJ(V{-PdC#`jC_lI_Sg|}n>=s+E?U^ME4nC~5pZuBTBnGWn zD_S(g$I|87!{lu9^t3xl$LghSf5<<~Fa5{;O47Cu{~6lXd2N|*a+@Q#Z%_Dz{|rp^ z31@@D*^kOud$Lctzq7SU&;S1Uk5%>a>~{Z1{cT&3d`N8L*`-RWZXZ7P^w7rlaqsw* z=Ukeao)XkO?f7YXHv0$jEGta?1#h2LY4bg*7p&4#!ce+?^*)I|92fSOFW)zHVdleq zfzOV7Xu4DOZN1Bd8nJ8tq^Cz$I&bz;-cou(!}z4!);ks9hs9>awc6ikf1eh6bk~OG z^R|8wS@H10#w~(bf>CqK+w9~sw@o)XEjRlqYv5MSlbwJ6W*0krIC^DP-$llNO>Cdd z9vI6R*=jGkXd=D3McAGx)9+g1`wQ277rywA`SEPgr^-pqpH|4!e_fT86k?`%I(Y7d zJ=&(vvt6a>wVN-(ru{mVWz?v$hQZ?H4xW;?QMY90Ub&{bBG#$R zQexTFS3AC%7BMcn{c^gvzGUW9&(Px%Uqzo^IpURUyr$%DaMYDs*PR1e8rI9qWwY*T zd=pmdd}=qxjeMP{FC-g7f#`%h$R}($&!^JSOn<#TzI6=i47J-*TOM8)(+*QPIh@m~21caOKbFMqT%I}olR@eS;wYlLdi5(NBY;QBYyFWj8;(?d<_ErDr{vGh+`y<{1 zRyy`KzdhNID5>Q0z25Q5Iw@Io19y>zckweL=FF@9{cK%S#u{rp3^nHBo>q*(KzJ8U96+A>EKKy+8*QjEx%Ef7q9!%eMn89Gl$9czX z_rChuH?iqr<;N|J%%TS+zkOrc@@Q+s#cR3^EU}xsFZ_DEw{rTGB{Qd{E?Q&Q^zBg4 zI&X8|{|s;X9kkLfF4oy}+xpnkPg3bRs|p)-ynUfvbn9UGlM_t_ZiUy?H>{pEE6HzO zGQ-55`=a;E+jnT`$%rLA*0H(@GYn=ao&N63^Y$x?+}5o7u9H;Cd`|A%?hzsrwkI*S ze`3kT^uilVJpD;k&(=iWI-V!>O>*0r!u=RlCj~hk`Xn)L z#(xGb$Cc7A=O<2lRCan*!s^<~^JXq*31PClk;20k;2*f+}Y!>=s=+yJ~ht%dumRf&z}*o+-PDedEeq!WnmW?B-{l+S(*?ICYoY z%~jKPb)P!E??=3qT)DrpmgC#kRpz^T+}Ih}csu{P)KaYneqtNym$7 zUrRlX*tLD8KDWZu&oUb}JX!GV%PRj`rODbc(>^EP`uItN=lRDa&zy5-UCPpD_BNbn zK1IXO?N!Y=>-EWf{~4mr?!Pikr6?u$h0OuM9Z6LyR~5ycSMe-p*}ZydnEc_st1uu>|y>H z8mY>qrsirLSYKxM@#LEj;9YaLf35bWya=h*!y=kGDVk5-o>acKaMsJN z{Wq8JDq2{4{j%ce4EM>(3W}AX61v`6yKl9IK0T<}*ne&A5ta3lu2WQ2swC@wE~rix z={pnBZ|G;)vEt=>mwvq;&s`N4A2|55i2ZfojW+87At5CatwcQ>Vr-Ha=S+ zU;pxbp!s_boi&EvjVeSQy?VJ(aCTm?LJohO7TetZJ2H=-O1uu6$$Uh&ykOg^S8I+i z9AB=^w6Ehwh_?Pi6nNs`aFF%sEe%&3VKNBA`gw&VczqQ}}Ax8GyFaDC^$Gg38y8Na42uTGbib~W71C+VL2b^WfAzjI{g9aoc@wbnMQ zecm5UvwdPeTEAttPB@)kxOLs^HMuX?Q`aqi?9(3bqmga1wNAI}w)0z#-1U4u@kY4) zqD*n2AD5no>`IpQwzlbrsOg-?sJxD~RBGz|mQ7MGorEPbIct9I`1VHYr*81<w1y$rgyZ{ch4D6U9T4 zoF{_9pGo{|m*k#MZ?Zr8{146f-FC(mrT=7Vj4v<0@MY3@-mmxPao<%d+*Qjg z&$spk8=lunEm7Gh81rerR_yN089N*`J?91gPWThJ?MMH|!{IwGn=-4-O?r0gjP|rh z59Q*j+IRL36s}KOWm5R`>XgO_3o8~r_IRd{$9SCMxDNZZ3ES*4zL&i4kNUG|Yh?Ip ztx0!x&nccg=T4{NX=Vv!Talj6ul?@T99rgJeB5u|vIQ(cA#5!3IPI5O7KxW#oHyg! znoi$IGXoYD-AQL`eC;f7ZmrT6hBr2OA~za>F3l8pE2(w3Yx0S?Y(E8(<&RkY(Tbhu z^+v9IlFzO--R}kre>6Vbu8he!XRc|>|7C%jn+S88g@xo%p9wvp9^c;_WT>}lyQHbz z`{`2f)6>Ga3^LE9SH9xjz`-nP`RU->_fE&W1wtFnJ#ng(`}bAJX|^+u(xy2c>*pR@ zy6J$#bJfK?y$jeF%Kj}|;&J6zSb7lS!B@OWQ=}!Asdn6+@_XN%s^3>m^jipdHcb5F ztj1UUPo%BMXlJsLW=Q{2<#n}LkxKJ!F={uSu$efgE9sr$vVx_If8VhylpX&Obhv3> z)Y;!>=1;dgzg$#Tw4~F^nfKm7`7;|<_7(kL><|3@qua_+QS3b!TlCQNXv^{eKZBsu-8@Y$S{AcK$l zr5)bcYAdeacV1HX=Ruj26Yqaj*J{3Aar;i2*e0<JS!B^ZR`28)wE~KKQU#xnr6gC{>HbL+V+WUTzh1lxp8uW zgbsWCQkhA7C7JG}=`3oNl1nwbIj;Ft{*%w@etYrAqDYyB;*E2j=wE*sV!vha?dP}G z#fBGXHxNx>$};>WG<<~_jA?rFgMp@Z|1zcb+}Nz{qq`Uoyq>sk9~T$f&cvR%W_lN zs(bsTYp?$7yJvX*Wys2f)owYS>pfZ%gi_YI9gE48cps>?o>B9eu~@G+1E0aYsT25b zg`C_i>z%yL)^4jzr}aa@28rKCifmU+HPO#h_WB-K$ym0N=SYHj;mcVoel1y5-kNk* zYm>9F#fhK_K8J(yQM~(AZ|+N+XM9j@@vW7vN|j4a$~_Tb5L&ln;&};^&SJUaH%>AC zXOJu6lx@}ByO?P`4{OttU6Zf1ZYcb8BqaG=lfBhi*7pM5%8RyaT)bI+|I5BBE|+$B zew*CJAbQ|s@X?%2JV$rz^H*PfX}PcMRdavInE5lFBn0Iu1g4s{h4E`I&}vq5Jof&> z^5d*GlP7Ij5Wjaj^UHAM%TIcXb$FKcDe2S&zYhyKmT$mu)m!xU!@6+We@)Yk@AESJ&3@cFB&r+Ad{^ClZep-nh0z%I*E!>31XMvH!R>bz9q~B<1{Pc_*~? zFxhIUh8c!ynJl^4GAnUs>zU0$pZFwd?=P3NSh?u(q+qcVaVhGVKR@I}>u$WrwY{)oUPbg%i2#nU`209+^^V@{CLxh$>eF1mi%atxYRhb^zOpgn zjO4`!0ZdIhBrX3TIvOCrmR-C(gsr<40)U=O6nu!;;Z^axE$B5mWh8e5L%^)Wv9IAcP-xdHt5wU*A=eHid(WvT2!u`JH2JfcK&AN zZ#?xotR~)Xd>!_DJC9<-^3d~qu|~>||71Pvs&Jp1FS)~T#Y73lgZ2l1gu1A|O*?nB z=H_C>r!9JA&#zyaZqjujcTeEjJ=1=2nSWvrJzr2A+9}~EvXP0&swY?S;JRqxhoeA zdH>MsJ-Vl`x1nFBgs-|QWjepgTHcLXr}h_=u+27EaBQ-tNY6@Tg&PNW4>$k#edWV( zr49O=Hw>H})b00LqU*Zt&gEy8q5;eAq@IgjxN?@fNp5*i8UGADhVM(ZcKv$Vy30vS z_x6*}n2EQ`+#O$gd@sAskYuhNk6AgM8I`c%viSrUGy%!(f zne>^HxoG9jsqOMp6(^iw)Y&-AGOWO8^^eje=3!@_dp_&fUnX9jd*EV%)V66GosxEj zYfg%(>i@9xw`tQJr%O+Exan9ujJ^@H*v%y;ag?}Hv4_PoHCQC){x3s3*=L!7x^Zl1^jpO^|`DD|!2aPk${xhtOyBeF@&3i22 z)sYr14&8qjzKH5%K7Dkj{jxwkocB#SBj) zy~BDzn#zYJzo=!6-!bXR+yyPA{xh8m{1^WEH&xhanOH@0|9i2Y9qc>KFO6PuBWBUH zjW(N&w2$v}w$z;#pTqC9ktOKXamkHtWqi@6e;;g=`TFv;r}Qb#NfAd1m6J5v*VoMZ z@~}{L2V0uqZo^~#?02fTls(t7mRK&@5gxEjNNBlT0<*pITmNmF%XSLoD_W~3RL@E& z+9Uj?^Zcy3H0ysK-u~d)o@-#gt4ou4+Rqt{&94e$rxa|OeZw!4-#}%^nF|}a1r9JQuzvSw)`wGlb??HNPv1U&ZRwrqVV@l)K2wo57W}?q72Ro}if-0nrJGrbb$6|M zW|8C{pB!bD<}&jTUKRmVRG?blRa|2R}%warHK zFz?R9?Gkp2=Bu7^a-XSid-9fdFXuhlw3YjMr&OYvqhhcy zi0#%6R*_y<8L@hkoNtj-&n5Tj*`lcd%&f^fnD2iyUB5QIZRSk(GwgTr=KW{rP28pX z=h?|H*ZUf`dT!pS-G6A)vBbonm<{eaS++N)CoYYB{aq;PMwFfRB>DWimaqRaTwA}Q zKF$B;Iq%h{ZN1;H`0O~dsy#EO`1sm{x^wp#^J*L`Wxp-YHlM7_5|(m|ulmuxe}CuO z@$gFf_H6MLDLlO;-zQIbhv?HiR)sTzY=05}Pi;cH)yhE+s*dm_Gd%Y`(wQ>Kwe($_!rkz+Qvmwc_ui}^$*Da4}_XRgSV7yXd^49F85Ytf)1v&nx=HUHJ_ry-gJYJTq z8*P45^lPr0bwo<+>E1ntwzjL!|0#X6+E&_k)}wDlYfm`vt8K0Eeq@oGWPHbKm3i&u zYx|P^F8*gO9cx!H@2m2ym}6^hu<*_KCwkG(X4RYNnVV18=lI`}tg&5kha>Rn?Fy~8 zpWl2vT37kU^<&)9N4jBYdv{0HU3hqRX2I!sUD_AwGx>YX>r6iKo$hWlZaQ)1?05FW zf1*z&M0u8RxP6X|wl@!qx9nT}03WW{(}_TQG@ryVn8jxGyhU~)|2`Yj*z z^rH5Rnb+rMIB%J|#_jFfmt9K*)201H7S|;$-&dV7p>-FB8MDrjNjttU?_8n#ykqrA z0i9LmtZ|;o`?pseJR4J%+FkirXz>x2ob`uJ7*7n}a@v{aX@iC|pP%vM02RM~0iB`O z{8Apj>yf&$v6sQftH|O2Z|{=&ud7l+-BjJotES~73Tb)>G8TBsT7F%7R_Kz)y2)?0 zJ3i^s{dCB!oNsQ{x@o;OzFHC?DUaAp#9YobclzUWE!qUGFIF8@2pP@re-iu``7PS4xpUsona>MjjW zT6&YQN8?1l-M#&%HhkN2+{rm9G?IJn?}(I!x*+$pLM%JB8MvHLE%J1#d-?0zO64{u zNkKl5)b?eWiUFw_J;$8f{*)YFD|1H2*2QJjZJUn5&x?y3UjFm7ap`F?;$AJpclgxD zdmXa^R-4G%pL6VW`04O|^0hTbSuQO)!EW@_DOtkueejvn9t}r#td`;JKE?d&l8U24 z*#m}h;VX<`O0A9=scwSDT4(f0_Ej>!42p8w7m}~7{j;@ErS{=`zeCeak4=nKsGQ)@ z!@;h2;N{n4vvrO=a_@1R6s|e<{2k_7>s7q|GbkDG-4XC-2zhjgz2m*pC;eYr-3}yw zc^{}2u6UkT;b6gco}QzR8C={Io_|`Uy~xAn&}7X?F^iAAp2Sx1gXxACDxxN+^wPW3#7ClmjPo_-z2$+K3ZW<$*!{$2jX zFXK-9syZtWaK~7#@YL_n?6XXo{~4}E7jNh5Vo>>Yxwq2gSVe@-2V3_;+Y5ZBbXcBa zYHX@~Z5C@+nmmPB#{Bf9y{G;&9C+l(q{$)u^xk51yY@>v=lUOH%)Q~YbAq93XiWON zty>BMUlsbZ{E~~f_S7?p({`ip!KV(-_f?0duC9;@GSd-qI&Aay$?u*pxrGZ zv%6i=WhPniZJ8;<{C#inf#pUywJk+f)t4O}@827gawF)t<%7Z>L0_ed_^N~WBm}Cy zoMmXdx24baz+0VMLyClY!OUbJRA5~*)Gbf^k|B>ldHz1kDga7gJGrdyGMS>bG?XCwk9JeDM8naLd82&VrEb_FiWnYVM8F4V(3< zH1qMx|RvS+Piys zE8a}9-d2h(4&Fr`=WQqpH0)<8iiY)bsVX|9Ewu3Aw?& zD{)SW<{#UvZ?ix0`xv>X%@B}nnH}A7v|_=I9XC#FFKT+OI^$pSrRBa=zf25vga+)_ zc;~+^+kDDmkH@Q)Rd3yX#9HzRcdJ|4?Fk23zpRzmlhLm}D@EbWjT z8}8If-`bkHr!aL&*gR9W3A+U9UVd3W>-zDkMV50;gl^ozd-$pBza>|eKXTjgQG3fn z+2|IA6#n2puV+Q-#Jgo|j$AwO%eJ|XPTM*MeYzL?bQ1G7_Wum){davVT@vmqB5Y+O zxXbj_o)5;a<4qhthR1E2IPcy&w~5ht^$q$fzM3ZacSoK1#4_tep&Uogl1Hn zi%j+FIR5(7^Gmm!f23K5?KRI>wP4dii=?~uQoU=xWY7Nbbno<}cc(RKHhw=^^PeI4 ze#A~ymMaL3u<3Y?eANgG|%Jd#N^%-onFP$#>JN}?diIGO#G?)oPY@n zl3(6`9jbUmPwts#p59VU<-Fdx9q-SJt~!-?wfVUJ!q-vr`%6x@RGdBRsonf^)iw+J zqvzQ+r+-|TX)Jp~e|tvk{PH{3=X~&GMIgm3M7~j@wh4OFONv&M#(t zQyhKyK;W{q$(Bj0{L9LIwRb+5$u#p^S>jB8nO}TYPHgS|>lYs2wI;*t{Tp_faM`~* zZiowRwo5+P8m_W_{eOn|TWd1@sczr8+3d30^D{bP4v$M}p3jfEf8(gG;C$~r3&_xj+vo1f>z`|WSTdqSDzxcJ=dzCJRqQ)sg;%(MxdaYD(d z{rMl;>~hy1hbvQ)Ww%`3wIs_iG;o*VjoFI>-MEU*~L&<-G7!Uhv0Zmw%_WZ)$q0x485BdrR&UujjRV zJ6bH&evD(w%RO)H?ibz?QBY5^pgnUBZ|peq$7Qko-Iw$0w$3%ZC9s;? zK(X_VpL6gN-@BWpwXci)cVWAe?zhP+Zp}{BI6k@W^&ivz6@Ln^FX(dHuE8aE!a{fc z%eb8HItNv!Zf-uM&)U9lN%rD4KF{C-VV1{#Tsbu*<=xSpmtNTm?+LEn867rT`fzfc zTdn)2<6D#CUWZ?Ao%QU+3GVkQ8&6oiefee0<-!xLi48^WYt7GECdDL_K3;3e;hZ9# z88I(<8RIm|O_869EdOM#EmWQ))AOCBFyNi~R7-YAlXg{0=JiUe9&OaNs@Z+~&PlsR zEjl09q%f7s%qjb_Oe0f9C)s)f=NHkmYd21Q);MwSAhUf`xRlfJeC3)$wnzB`F=DnGmdeZc5CN5g`KrK?~8?)FRL|-?VFv<9c56h zG|BMiO%COZmp`t}v8pLQExmMN?pzlK{k*SFuAb5Iyea$P&}Hvrb>|PUQ#5%tEpk_J z)>VAY{zp6S{^7E3*VQ~HD8!h*>l597pnNUM<*173-?=WB-_t&*yyLrRm9>iJG||w9 z7VkgJ&-;4V@?7=il}?5?ma;DJ2&qhbtW$LMkNTY}AKgA4<pFS4%fdQ&P6nb>n^C^ zzT;>xO-0+jst{csO|8Ypo+*E34Q}3j;n#l#t%O~rhkyD$TUWI6Vf#YaU!|+= z@bcT;FPMHd$Vx_zafROcGn0+9S(zuXFW>4aw`jtF>uNW|YknqfV6gr1ebshh6|dVN zbML0v3g5UCxLe@+uE>aWlG_Cqh#lkK>uhq#QQBQ+m3>8#;i=zJxkoPkbc)`4DVZ@y z&z$c__0@u;j@`~`Pn|EX)O~rr>P1tyVxQ2OB?jGPkH34Kmpv%=<%?3K0K1{4^}gco z{ySw?aVAc3J)Nd$&fB-A@Q&cUWlgMo0r!H9g=BaBOpW*dxOVStj)=t_Za&+&UU?dy z>HcgW%kWL|W#HT7?5)bF_xwJp-^=%3uzK6Ja&v{VRw@~sstgBX=H1=T6|zyt#ieNW zj1bYvT}B2L8V5eVaFmgc61jTt=%()5CzU0REKPf0cwFLbSkTR~$|l2xf`@&@@9ef_ zt~q*iO_t~sZGl*}$m9N()*M{snzQKUk)F_^N$JgRGD?#Lk4>35{qJ1W!#{;L8BKlC zP|kRxPBiPj*Uky;TW`x8v*DBw3gK(1@6Fbm)ADno;@$0Yqv~S)?r{}QtIxx#E+j6%1pu#Sm zRs9m7aZkRpO;gKkNY6bh=fSZfG;ZdBf2Dd$W_oc-zFfRzgXwISvPqGC_dNeIa9!y4 zGH}q7 zS|4|v$_cr>*PCD1+P+>kd(xyd{EFO_ zYwjx4#v13lM_I^|-S*$qmy_;zE_}tgq9IHr$E%^Cp!!;V{~lw#ol5S@eeT5`_^cda zq2uwqv^pa4Y{+)E%80JaL$6CJRKktd?tW=k5kF@dL(%^JFY6cAC&hOis+YU{qdaJO zw#OoA51%`J9(fJ_8N?Xv9pjWA=kuIQHgYc!ulSiV(U0$4^YX0IAMP#HYhH8g4gbt% z%Vajju30Sf1Q}=J>KaTPr>E+{9UAOJ-k(sj|-dB0NS?!i?|cTD82XFRxvaE>wEz zXjxL{Avg72#d-&;nxgjYl@d=U$o18-CY()wa%{5gLL)gBQSp1MxFWh|v! zI(c%>HLsSL>$keKKIzw<-Cf>gV61+I@1}dH#mldY9*1}ym?v>NTX3q4aO0)Ts+G$2 zS+hz*rX(_|Pkf~%ST21)F0xo_QW@JZcAsnW4(guyyISY&9fhfHXW1KQ@Gx!TP~W)X z;KYT=8@U=>CVuCBAG&Cg^%S;iu?Kd3n*C$*o$4#6WyCph?^%|Mahn}G_SE)2gV+9a zAK1*{R`=)YMci)hgCfmzaHOPdhkS+rs@3dL)bYt~JP@is_xSw_A$p%yZT>q)spXEv*Hy2}br0TViFmA%{66$p&l>L) z>*6M=2~X5zc)Nn=HE?s_@DgNj&Jel3TgY zFwduX{ynq0Pv6#xa-I}^8OdwKo2HW1TWzTX)iu@5hUMyiZSUT{QEsC)d+?%)Jfsmfu^Nc=!0*-BRM>4^;A= zdS-Ho*-VwcYZ|+5oA%7SK)#|i74ZvK$rZ-mspJVN(^}=n`Tpc`WAV;8#|omeJdUrF zt@yU~vD=BWS9316eZ9Il>&fGlGL2tXU7Doq+E?ZjvrXBi|M;CNLNU{HwcVdiJup4< z_kof}v!Cs${^Y>Jpbm5uG^9ycAnHLJ^Ky7r=rJ6$G* zzjb)*|mSm^vbzH z_grr(a87dHzHrqO^%?W7C8rzR_1c%w`CZ^H!?*9t4y(*|;@orK(xg?V&sp$lx3Sd7cP$H^l?)=Q1>(*71-cNIzkY`(49rEqt(Htqu#dhKD z2Tn@9v*nGuxF)G0?%w^PHzz~Yr%A3XbC{eKb1iRDM~cskp8@>N?_USrx!t|eWli_a zf;#6de1?;|ZtS>xcJIzZ;({x!1B&PTn$?myFXz>!o2NEDu;eQ|UijXvxiBquPqDw= zjmWZTY)+@ADwM5k$yR--BC|{~`uc_Ht2fpxoXIoYl8D{+{>cohjc_?P~AtO5V?Y-W%=p?oV}Jer?ItOY_8y-HTE(t+eGQvM*d7mpyI6 zowxm`%30U~EOcsjhw*KHoE`0+uT{ILd7H=n)_VTWmsT0fxz|=a*Ft++X3Xt_tOtUG zJRTO^YcG7|zF^te6}MEfF2+oaTlnO;-13((a=Smq-Hd$f^dh3)s^W@h=sN$HAM@*r zi*A)}u3T|nL5m|i_}shfee>eu@?-ftA3YRZ_;T0s?xd|d?rX1J;Ct#q>47h6EbG)y z)mJ~+qY=^CXCu4zUEQ4PbM`HLE)+#Bn!66-g7;u zercsnH%o45k?vs@=}R%w6y~k|XF7Y;eGNyhGoM<6pH6z-Q2YD(*0!b2tZWxg1{JN< zuh?5$waI?EvLWMP!@JjCWKBJKY++@Ely>gPXKy?XoD6(DYoYFu$u6JHID{#Py1uj3 zj&|^v>7v&s=EJ}rns=nSIwa&+=t{8(i$(fZ*gu$6zv=Uz{2w=${;)eI`EILj-rEE= z#f=Kv@9w)mI<2%m6Gp9&;CG!rp{c3v(ADm5hx~^yPGKY6sn#K08`~6Ao%vY{|t^LoyI^|j& zdj<1>sOLxXyX(|9UN$+cYni-f+QTXD6#Yc>iq1~nqVaTQgUt0$>p!+X5}W){_-OdA z{jG1FZMsxFi1o>j&mME0TXoq))2q zsgLs5T9I-p=Io3+EaA!L-hBVM-hJV0-_2{=kI%ZhyHTa*#MzV14Xwa6fTUUOuJG6U0-;YU;-W;zseR2M7Vvlg+?F)QYA4K^rHkjk6ZD4)S z&F$EmU-KPf|1&i0al3G5?cJlhJ&tahyhGw?=o72w%Xiq?M_rzO=XS6<%grz84PPa` za^H9~?@Df${f|F+F6n==_uFp@Z>dwvys&OAPx=0=o}JQ$8@}oo{(QD)_k(Zim)?)y z-kashX)`mVb%QMDW4T597X0wq_H6?9U9I1zIaW}}G7Pp>1=`Pgi(NnJAD;c6VPnNarX!zz zCaJPUpE>V#o_pfY>+kswtxY~~&+wAMhyM&ci@Pju{EVLS_T--({~2soKkxscrT@nL zp|yRxxzzfWFQ@D6-U*w}ny}hH%m3Wko+`n9uQ`0RVWFZ{d%ah;JoPJhQCC|d`a^bU z-39*g6%}Fk;ti5Clhf~f@Y=&W*3Kk>g6|D-k_jnX|Fd(*vYdDxcHXAy1AOvc|2ys>(|k750- zw#)xG>aN#sW}E+U@q>FiCfZ!PpRsA42*EBW} zMno0P-gQ^*bn?myG5b-|XyeKD*b|*C*8Y{asb#{wUX_!ua8{pPu>m z&nTbhkzZ=1URlaSWyi4HDe})5l{fh7JSofdd zTgi|A3?H69oHpav^?uXc1(#)Cmlr)@VMx!jYJOL5_2HqrXq4I0-;L+y-dldfp8Y>V z+TNr;{~7ZB`0TT*xxcq;?xr(y-T2pU|FrJ$@jBxl*&m)C7QXGAn#p`rP~p4*r&Qx< zW4YzmKd$enGps+D^@nruP2c1P+?HEcA8(yz(z?x!>jSglxjV_r+4h_!yZ|aMOMlqqGYhuF7I-ftQGG6_6znw;n z*2n)0N3?I(bKW|xdUnsglt_4<&>r)L{~3gT+>YJ$;eLzB?(W;& zZGpKw>dMb7^zL<7Z~Rvw8XO+oYhHbO+U%wl1EW0IUDvPGZ_-=)A^cm>2d0YUkJ&qO z-Y(g(J@ehvDV38nRTdqezsIfY?YW|&?Dsn#PkWFweXs7mbm_3#{<-!U?;Cc#KX`EY zP2Ql3>!a?Ux$-c;f2tZIvn}JXBJ0BQF*P?!(^qGEM5bhlrlfsplIg3O9~>W4ch7!% ze0!bwt8zKXAHfe6F3UW+XLoPh$MCno%biv%__NC4RY9f2o9w6ExmmC7vTj{^(Rcaw z)HQQ6uP)oW==#dQo+-24mbHHP_c(AzpLs>|PL}jXt8-viJSs|d#@E&7K`QurE-0`KI7$< z_pP^Fie%lxuPZd&l4w~sds8Imf#dtC!?sRutkKd_x%_@>b!p_n`#GHopBZh9-@d=J zLv`0IqYJlv9?F{S+MHhgBZTeQ+h(hGI)~F|_}^vTR;#({%A+qGbEP)jb6;~f|DpQj z+^(w3$gx^*zmk6hJ9eDR3^hBS{7RXh7;jc%_hadj8si`7DJHX*?%chr=kF@lq}z-SG$o#N z9nL;4Q}N0D%GTGNoV|^V$(o12H$`CtVYfBQN=92`RY5j zp0E6I@^?hG)V&T9?_67@nMQ&SCv1>A{wMqNKh_^+-;ez>-E*asyLA$GwA!p!nli1K z#s}oucJ%Y#d1=)!>)oR-i@g?p`jmM44HM}N*O|ES&b`I=?Y=%P z)E7xEo>ktnHClG2I^Tm&sj1TUix1dm%QwbpU9?HI?@rz}ss1fP+C(Kw?^IdKUu9p{ zi*>!bV{Bcyn_oxt$)o9kH_Z%a&S(g zpUjog%o_I(Z^cfgmt_Ryg&wytUw&QmL!W5Y$({PupY2ZdDa}z>Tx+lV{I7ECRg>2X zP1k%9?RggxRL=8DZhmX7=VRvTtPkE&O))=DaIo9XxNcaRzA96Eeew!NC2yHl?p%fR z+kKgfJarG|h0bn@DgCytF68E|H|HjMT>n}t8O19dW!94jF$GhI`L*7-lw|j(mLh3X_u!IPO=g`c+$eYVI329 z#}ZbR32W9K*X^Hfnsx2%r+itVdl40lcbJaw8L`)|4cD5q`HIf2`3vrEmj5HR{@cVK zss*#$k4PW+=-RrgU+>Y=Z+?s~)*X1OEc@-RyG>pHzti_WMAqND{5W;(yy^9iG)#2; zN>9JswdGXn9LBkm(zE%Bo7-N0>T|8Pop$To?-}V+8(L2->8hxd{_}mUto0G`UoM+t zZpZv|Nt~<47wY!FjpLowZvm^MJ!ky+C(ncBRlM%3eS2H}vdyz^X2c6Jxck%olb7;c)3H) z^L@Nw*MW1rnNHeCDm8y7!g}8Z*^A*dh7kYOV6od(!)R7dL&B zFOXTk@XKnUJ#1#PP9B+IT`qjIa-FWVNvYcWpey0QE;C!^JbwCpwbQfgHclPuXh~}~ zhE?B;Z@Vq8UiZj?eg3H>(`rBFd0Ox`-Q723&4r8;OPh{mMCMIbC^;U#HaXi)=we>* zSusI_0_V*Ni6_3l$Shs!_UJ~ZLhB6e)Z4c0S!XwXJiBE1o5^SPd=fAB`My?})37-5 zMPfzwgZ>87-*zJ3Cfx&n zI(7s+zI@qk>aUZ(GwP1~GC!)zxF>LN=DpN=^LIsOJYbY$lv!5aG4H?xBX(t(x|Bbe zKN26^Z<}>z(yK1L1-&24+?yrNF{IiwSU`$VrH5O$ zSf9@MJVmp~anAF7)nU`-X9~4%%x=_nnf>(f0`-R4?D?0!daQkR^LgFZ&ofS(%=p{? zQ)%sghRjpBdph-8#7>lZD(j!Qcc8EMZKQ?g=1W1I;;C(SPfNTzvfup7#6Iy0^1-fm z;Y%-`n?pwX+}Y@2JuK$n@@I z$=x*VMyZ-@?;aPWH~9a!y2do~_}y-UdD{Gbe=bFdoLzc%&PtXYv(j@vZCWRy{@s7C z|I!nWf?OASKKI_qz2Q*5^UMCIFV*^uQS;WOC`|e*=IO^KlNx*_d2P)0zq3j?#NQU* z&u=|GZ3D-L=&P$;8;-s`RjhNJV&hZQj~z60N-_ zFjZPEitVxeh3i|Q|DF2WXn-2;Y3Ge9<*MJo_8Z@;rbS1yW>;SS?!O_$;B|l14YO^# zVubH<9=6dl-15oOrq+F{qwX2ATTRgdz0a3R6`q&d+nRAJW81V{Rrmdtp9%_9Vpie#dcNi=hpDYu(Y6WqUDj>aS$F0q ztG)brQzv_&h@UIB&Q<9OGg$1~k~n{F--BzXL{){PyYAfFdpU1mvXn?#XS2rvIg$Si zoN`;6Yc(rvR)+I@67}S`{q#S>*O!-GeU5Rvc(7tcD0Q?L9p>B0*6 zeacVM-uG7(E_<{!#Zv9KNqOa`T+uR1UhD1F4YC|7Z=8^`-f4DP)9ts-;;GI(%x8lq z__J`9U1ROJEPICkObFlN8=*IqJ-GLH%S@e-UR=UhytXG|?qEg@``8dbt z{3ox!*JT@)O|01$bnn3HPiZc<%o%U2d>{VrOwy+#{jDKt!GTE-2?|zV`>yl+2*IdIV^1V0Q-`H`?eQ)%v zYggXyPuBcxal|X)&+&zSELSRb-HGXrUbM<<-HR(v48DC|du5B_k@d1I{xgo~C_6q= zcqcVqbV`udif6y`EFdX$dd8oyb47(w}Sx<%6!3E3F&1)4nYM5?)mH2=Dz$@<-O!TLt0GK zYQ;HQtp77SojfP+`MqVKQc}zM^mx^tSH05B^F6%MX<|Kt?D4&v4^MX=t*&^h>L@hH zP=nRKcz)FD_a?j9=eaa&OL8b*U3)+N*h^Cd5_A}f*(GQ-<`1Ty1aYmT+_(5xeZFKHb0nBjjFcU z?VlR9&26W)$ftE*ChWHA(N|w*yJ~0K+>YdnZ$7Am*?ACo1kM-rDcCFIJc(B7QeFild-qa z{K8rp^YF6&40+DaJkEJdJn3M?Q*vPC!pr(~r@n1?893ACSlZ0s#(B4EtDmir4leq1 zzCP!bXq`*Po223skCyG+a_QRZbHxRsivu?Pd?MiRH%m20^VO*ixY`gYqNGujd{q&aggEjSCOTMHQiJ`-uWU@ykMivB}WZu<+>RhcfLKj z5*aAi=O*iU;&s25vvIKx@y~Z^%oiHPqmIPSTc+3?AmCto0X&Oj?(kSIgdZC_;a9ak;cPLneYD@xOz68 z___IImrp%MTxRixO{$-tMv80*Q=Zd!VA%vQ-&0Q->b|cvpC(`a>AmL;#`!0>V$SH; zpLr~KBK}L*x?*oTg4;(n26ySa?{DVLZ)f!- zAAeoIyv?ohwSz*vmu1c*<5#XMOnds8yVx}IejHVhNh$rlSfywFwZ1(`jSRM(j~b6J zx2;`q@`c6$<;h)a%-26JNS;vf#iSr2MarP;$pywMDPLq?ygVtAu73YQfV&BY{k=cF zdbQQ1%jU5e&-uRemiy^BlO4DmUhMgJR^9K403UkBdNMo(mF%zjkD15r?F=iuaMiq)5G&uvrKM5iKI=)#zU9X9A50@uV21$Id`N_ ztC^@Z!>!XN?HU40n$AvOD89a6xlU@M!pAV*m3jgzlS1;iiX4{zonn6K2w%~jB3JK8 znvPS&j6AiB`xbm#8WFi8MBUb)D)d>4(Vj_elAT;-J*@WsRt0A?&)9r<^2?xS;flVw zsWp{_V#fp6y+XHZPe`_uHN0{4a>hEo6F1F19k#SsYUi~vv_L}d;pD^er@t&ccWgn| zJWuvF52y6JQUA|hIqr|W>X2-d|`zxxrdXzm5E^NKg{Jpv-v^Zv7 z;6&|}YRWqVn|3T|WB1rs8CsVlVOBin+tCau$;P3uxJuaRUUAfcj&8nL&iOnZoIjmH6>x-CpTE|y0_DPA{ zR@E&vECXd3RI0<1j@8jMJoxZY~ZJ6HtoH+aAvK`i$2dp=@{858sxr_t5=vJ5%CG(;_1W}Es=exqiF5iDS>2P9Mx5CWu=Qk>Oj4VXI%|G~`;imS(`;8^u>9c(TZC7uoZm^u_ z@hW`blXTncn+H>V^!P4SO??)leCAF6+&Z?p!@vGBbgfmo`X^ED1WV(8hLV;yECu|| zljEanl>W{sv2VXn+quVF=>HTZmdTBC}FFv?B;&_f)%4bduuXnfqzNrd5wK_v)t5&blx%Y=ZW<=F4cIWY0a$?4zX|E^0 zjuw-ui3)A_q-12TA-F@OR_of-h12>>w{fi!aJ#hJE&koa`?GFbF$uf0R(XE(jsPRx z-6hAb?N}97bkQ(6*vy~5?b5`Y2cK>-CdfQ)zHaw*X}x~y9`lDC@3<(fM}pmUa!(#bredPa5xpi7kDkdUblq=VKimHp`V6CLd?Mwy9O}$~DK5 zZC1JIM+NS@y!7H%ur_wV?4^@`#fwS6uX|2$)w3}+qOb4_38@WJ#V zZdbL?8>P0d=U&?r&R}%hsXNzUD&b?a~hag#T){f0REmm))nY>`Kb*69zk{w|+gp@@U2R zqx!dIAF`88tFZCUoII^$>aYHH6L0O!Pi{N3`fB2-Teho@%ojM@yJlqzhw>ex;vI5+ zwc00as(<_ca6Wi@e$e&gzKqJCn7@}_zSDlj-xo}c!%HX(?`oUNk0o-=!bb z_DCCQYNnlLa`$6%uLIqvh!&4<(S2F*hUHh#~rQ88VYu0%33iL3mI9tjW-?+N`vRcGU zr5>}xlekhC!=8FB>|NG({T$DXIZBPKiz0K5oycRk7c__6?Lqprg{Phtb@MJ#<2j?u zJX3{v;_(1Y#gsY6J~QjorG>0KkoMIiCeA_e_H$vgPpglKtWOM0+8om3PU>oD1`+_Z}g=n;$g%D&K2roZrYa*JpJgRQ;Q%G#`6LGNj)f)hL^?qpx5ZLX%Sc5*Vg*B3f#h&TR9$->cHo=fls&?WgrlRQx``^ZaGs*I>z>pA$9~c$>8T zkh`&RcgnP+T~k%Eo0X0^oG3m~Jn!&^Z;PyV-n!#y%wxP!$>QVr?F&}%%B)sCFT1nS z?7^S=I?2~%UpX2^1e`50keFoHVDVRj$-8r&kmP~ejXUpF9{(yD_Q1&JQoheRt}5ZT zFM|vwsioiDIoG~y=R@0nTSIFWW=ko47FEqXVCF6N;CF!9fkl?nbC>iiHF~kO_ol7; zQlD*yA}1>KTYpg2yZLjk7N=Uq`ME-(%#-$(^(Wt39KF?HiR|u}Hwjg8JAYlyXt*~o z+l}3D+qEKFey_^f{|q)ujU`Sx>`)1D@~OGB!CGeSkz~6oC-eBjQUm-gs7n7gQGdFTYyNSr2J6M-sYy9$U0B1{rM7MzF zdHbqWx408O869Ha^1M?naCdK(*d&3Pg9;NKOEOFR3R+pQC_L?;(c~?kw_N7?bmQi{ zH@2Efyvs$VX{jW)p5wb18-B>2b-vh-_P6C_xw@^p`?s7}eWB0k@rHF_+Sz;EUh2FF zTryz?cOP5r>lggZb;7$pgtxc+>g^2Q?N*jzX)Jg!r@p+8zv`Et^r?H+vXUYFJGNVF z-1>K_+M=)N8MoMaAHEgi_>!%#!OOnl<0nav6DAuoFT{B5%UaRVprHPqzrJdJ={i{_ zX<5EwrYX0gJpI`W|K2ILTxe3guwbIwtJ^m?rhIS~zHt4`h2b2o@b&MVCECj`GkYpW3#tV6$&{Y&Bx|lGb~4%Qhg`ROEa#tYlGCfAZW)uV@cX-{LGQbHC%(T3 zev-MQ_?F(pa{CVT*2TLbp3LWY`8k*6i|H$I`^~*)|90%((a7W~_EUB4w@LG+p2)Z_ zsQ;z6PJTn?M3rzO(KKe&o$upTepJ$p_y4eW-nPki{PLVQ-yWVIAX6eY@9Hkko12#z zcGEus529b+9x3!zpZt5NZjhAB~65sbv zq@r?<`@$Sb$#{9{|q+QC(nGWI{o0Iw6`qVw!L2%*flwK)AK(f z;g7F3?qmDG9Ppuc+0xwlNBsgvk~eSMHeFLBlHs)39-S}DoE-LR zKmNIFawKiX{Or(QdM6Go+4*#VyV{+dvAf;xs!x8WxlG3HdGU^~5>JBvg_TZNdFy)?H*+_284u;Xfu%V;`TNCA8G-YT_UDdlMAyPCId^_rN^P zuWL@LM2aru3B91fU}#gDdE^-1jesV{L(kW`JU`#Nc*>i!-%I8se-vpel(-?2$F4AM z3&SQa#c7sdMjz+o-41d}HsVN`utH{)*pt7$ZaoiUzq?PEA(OoFh2|#fC4MIb^QZG3 zSH9Pv%jVhTcJYMdrexNQ=l8D{)d^Y>XmGtt2PNun!PkUEPl$-PmSmO z*9vWEjSM{avo5&jqt}V@v}TV31|DT4THYz!s(*83-Ff70_O@ApYsHUPfT@{OM-4k@`^J(y(o^1bVXVx!Mz)*DGWZqswpnZ&cKehf+SYlTIXkcqdINwu7|PC$3)!R{EW}4iZs2Q>{|HgxX`30mMRJ_ z_Iu@QH$1sjMxf)#BK?5s=hsa|Hpgo1xj1)|(c2(#iTIrIWv5Lpv~J6tc|gmni1Te| zQl3xRjkt*KMw=Q|-Fd+O+;h*9HAbt%;|z>EzL-i1amqg7{nQ}n9#nmKdCSz#QlZ@a zGg^<`uVN0$-s`2k+|%rh2Va;#-FunmvY8WOOxDTC?zqEk%(t)kMlf&J=AWtCwR^0O z6&MFOHF=zDQ&af3+s2GPKTk8GeWkRuxUtXa<6Nfhx_| zw{CfD+&JaUt(_C}UQ0UzgHR_miMxp#1}pDWX|VpFCO#X&MLKd?ulZ*}cC8dy zxmhV&Qb@Uqky|)%iXNk>=H(;0ss{oNC#VQE&M8~Fa50PLG|yQsDUtz2((|soSd*OT zd~(8x``Ut^R{Yy)cT;SoG5?!nCJ%*lzWpT+WXgYCIlb(pid>1uGUZRt(=GoqaNRPS z)?;q7NHfTx$p4i4Wl^on5C6XTMQnOx#xDEQ;>(KCtEWREn@m=6R0O5mJAHU6_{dVf z$!+md10TgjNZoBadFG+i1!tK?r!{|eDz7~8){}Klu(9uxHxnmz@)U?3eE%}&^|Tc; z12TUwdiMNm=ZZ*R{<<=0gG+e0q=nYOcG0D~ZVR24ZJ!mUdp>W+&weL|1uKPGHf21H zTo{(|L^AQXQ*{{Mmf0pDi+Ua|p6Rh8!~g831$m6ex5jO|_+^K}BsHV_!r$9;%G%x^ zT)Fn`BBLe!lBspv!k0g-4*S-X`?$wTLd-g%DE>yRmaON#rCNoq9$yaf+%C9Q$UxI`VJ+RJ+K9O-9o% zZR%n7`Ea04bn={~yG?tPI`fsp3q^Kr<(<4k)WP`W`KlVRd(j-G(uJ)Gi3Nl8hHsC%ayFg(7OC4^)7sNLv1!S-;M*^KCw&xq zt2`@V!HS40D;Ug8j@_4OyB4l>(A@g%31*Ww-ZyG4-97p2WNv=vJi#e(_9s_7=szPk zlbMmzE_P?m+q{;`JSUA;y??STWrBJB%eR4hkA7^Kt=_{CU(76j#`u8Bui)?4c`d?j=JF4? zKkM(`8zrpTk#??P-GfvIW2v^=JK7!=SxFU6+`gr!SEa{EC2`vdyLtDca>BxkJiLzG z=4Mu~-JN$lYjV!+siKGV-p>pzlJ4I-YfEe4ncO`$9?txx_J@_LNLu!9p_ke;k3Bb2 z!)D%C{g$YTK4!1ZD`qx}pCc1t1?PQVs zRwnn^h{B5yQ77hwr1$ToKlG|qMMf- z7oB#xm`T`rYFb_y^SK9Fwtm+*9#y>g@KZH%=1;jLQdfg_anJmC>w(+B^41yeVv1Z1 zW@l%YSD(%|_<3YW_MwS4=I2LUFm%s4X~O$#@iFIw=PXs1RKA_+nJ)0ur-Ele`M)Vw z&5jn$`Ox_^Q|?qsSipzfW=6Gc)?D>dTvqBFPiT49qcpM4aGq^en9xa;uzryyGZv>O zA9wH5GJmjmr?tnevJY&wwW}j8Cgln`t!6pXThjaNK~K7^=W&x4&sq~cIZ3F^JfU;E zjIH?6!b+QCsimA7YBrVIdsS~ft+XIfI)SA;j$d|ldfP0Q;?)ypTfDo|Z*b&Ak!qyj z_Iqni!Z9(HERou5TXD$-A4N}u*8zR{dlKV=ce{c|BnafN?a z{xfj?3OXuf%=v&_vG3S<$#w->L@S2)TGtp<_ zH9PEHf34=TUt-c&AYh$Aj^_g<+86Uoo!~GS(@@s zVf8udq}dGYlEE)3p6-41L~C|PYMb<&?{Zh)J$$ip@!Y$Dj+vz*g{zL8i#*ZY!~DvB zsbyk+<|KCciq@n%&rOYwoVL3%pCe?#@)ah>f6lXryHl`}UEsO7`9sq-$yna0-~I2Z)w7ok4u|<1 zndOgYZ|9e^j+nV+yU?@e8iyt(#ponmO~`KDHDfAb%Cxv92$m+oEA&B2&tyhHHbUh%_G3|kZPiy3nG_gR&$ zpSL#r)~Pq&6Gb_03cdJM6vZ05ySwNJ-_(nlAD6gDJUPd1Da-4-EVH9w2M-Oh>BHR#We6aX+On=8$wah0TX}6eCHomZZT^_Mt zC}LAJo6i0 zc+edtffXSuSxW7F{+0eb`#bzk&CV-dPv5ov?WV8FcP;jQ#eA=??{6*s*0*cR<##1_ ztwMx1&G>gwnaSZDTlMuraoX3OeKgyr&(jpn6P|c7p?Xq1*VD5b1sC(D`WJIvc@neY z>=pI-kyl$b#d4+f%26#f7gul-o}N4Nc-GC! zZ_L(gihHYioPmdLkJQh$NmowBIhn38yzQPT5N~)ca#zBvXMcPZDt(t6J~?s5;*It- z;jXLi?J;}zo-JV65sQQOU(Y+VQ#W?a^GRl&QEBB`Jyj(yBd)E?xUpo-DPj9bN0~M? z6o}0Evv0xo)n@DR)ZKfQc)3Xh?AMfcyfyY_wcw{55aOv*&qN@jH4J*KJD;6Y>^6 zo$x$kwSDg8cR6;KMR&A1Pwe@0{P$s5ZCA5{u8J2NtFsltJ6P2#-v79KO;jVjO}2H@ z4fdvci!Uu|e)Cpoi_k{R)4WgK$$M>;Y7qQ3VfViLZ|-|D#cq5PGGveP_qr>RjhCLfxr6J8w&%r<*O}Jrj8we0q2s4z%#+DJTRPrey5axK=fIkT z{Da5*mv6PZv*%0`$7$ZDdkz$CzBK1NPos~Df`!n8n|J@6lwC2$yEtQ|az{d+(`~0e zm*g7KH^^p5Crj_FxzMXVr(EESc*co;p)y^UEGH%;F#arJS6fA&LAT-yU2T!m zT+6irrYNwz_|M?)v*c%N(kFA6 z7#?tKE!T=Us_khJI6=Ve#=Y9VnbV8bw7Er!h2C1&c4tE2?MpkKuC$Ugx2h@fRp~D9 z3z0bJvt70~@wJ_hZvMB91uf$03Cd0W+t-#(pLkwF?AZ?m1=&+`H(oZKuex;0OU3P* z3wO6x&Tp`Od~fG^3$K?GHIBLSuBxz2YFNB#OLeENOufb9ucBw~R|KDSGwPjmZ1+5d zeOGMs8s;uDd!S z;=IVhn=?{5PQ21=DZJnB#dzqk%C9G(ny<8lrseKQXWn0s$@t{q&*M7PSN#6|wMw}( zz4-g(IaOg@t3*5Z+*zh_LgCAo<&q)Ktv7j`H|5%Sf^qj_wch6zX|fdw+8$SX4;@+c z&`m^k@3ErHxZnooqG*ZZN{ifmf2W@C`|WP>;+9eClF4~)47RINHTKRFOYUZM>b@8; z$M98Vxtzg)yw~&Yge18ow;nS-zE|&~@L{3s!wZK4iyO|8%q4^Cf_8XiQ zy1}-o;f0{wOvpO?Qa6otflFR(cG%)Mdj>MOHiY0>T}6Fknd)VGFax48;6?YP5# zS4QyO{AUbB5{ByPa?5{)TDe%o@WFg9N5vFf?#WskPi-%J8F13#R{05W zW`^WBmwV>#?=sJyuGnv(Fl&CwgkqyZXTqEg`DkmL3;!7`{yppVbxB)}7g?Lm?f-Pv zYtEc^wze_z^)}u=rt{Lz z`5ik~^?dzS{aZ6OwZ+I39$5K&S=(j3+21Og9yT*K{;SozboWH-Jm=2><{igG`lHTe z*43NNex|%sr&!!+$=`=PjYpkVv&gL3XnWiK)MP7d9--y)ml{bQ+iubGT>i-MS?iz6 zndS<_D){D!s2N?`=9y6p|k`{A4(>e8h@Tw)>`-CwK?yz72U=&cD7eT1-q^NpzZ$2>%S`279U1 zSzYGF7PlpM{vG~xZI9W(iaDY}D-Nx9llMBbEmS@uC3+kg@ zyeaWL;K|~{&vN#<+>JGRxsPbfD!T2rQY0?z$o=ceKWE*)w3XdGa(VuQ-i=4+)eGO- zTV|XSOV*my z#dl5SukEYH$4)c7o$J!`^HbHsTHk^8Hoxod+iFp6?aDiCbJx|B$HGO&<1h%?yS2 zHtQ|FYd&34SMs@RwC!1qdC%UZYPIWr|76%xz#!^nT|HAz>em~SG{w`&5)8jWwQY}F z)IECSy4n2fj2VkgI8CZN@Fr`)^pI&!%~%rnVkeXxjo-RCp=Yhyi>FUE$dtaa)%qmo*EyZHDwI)M@X5q`vt<|m*{HI7y2b5NE9~|y+iJ5S zI_tzz0oeFN=|DnVsLiL; zPcG*t`wLk%7i;Du{^r`5opQ%pfsv&#a!O(2@rQv&O%j((RW@QWYo5b&_(JIF>bolx zJEiM54>IT59$&fasWnqez~<=Nk30jpwLVL~J799O&)(q9ahVx8iQXl4kJhMk^6bx= zrIs&IOF1`f(TTdH)HaJX$LYW%e}(6lmSucl-lvhcr8-*4+`_bjx6%T02&rN#69n5s|)>FFNMKV2DuXf$hX-(FC5lg{9B^#sH~MZm^1P6f;IBIaZz_;_Rc<4zUpn` z=|ai(^W)d%zd9DZTXNDTQNb7)wqqQGn)_#ePu^R(K?@qygS2n{DPQYe zoO4mHT=dND>2s>C&&)PkT{1Z)%E~WH_TYu5;d2sxUtjI?PHJ9m$dq+``@g0A*kAkM z`;nE)eQPd8Sl%r%<6UR`_uazPZ|}F;i|Fi0U+!D*yI6JKjm=Fr{(Y^>J*;*6o@>FI z!`Te4FXyjZztlcWzH55;#HDk;Jj(ntar=p%qHgb&e~{Haf2JTS@Y}|yuO^GFf3Nwa z9s9v$yOjI4iQ7sA-euYxzJ90r`jj8DICa+DdMWvK&Po=8J1YJ!vhQ#C&mf$!YkAAl z9s6~kt9Wfl`FOtmbl0c#opCbJYmI-qdrX~YbTpmO_-Xq3=W!x0b~@fKUe6yqZQX7; z=T&D-|0P5^s0fND)%FH$?_B#ZBKOdSm>IY8dG58}+Ggs@WNQ^JZf|AGutS!Ad|w#AC3%&6ll?%wnj3;X+}&sH@iLC@DtNpQRS-i{Z=-#3Pf-E)ha zCb>{|bB3E=^p#+jg6P||GoK`c)}<*=Wxup`*};hQGC}JSVy3EBo%n0ypa0aKx%>>H z{GMA!kKeWXsGg$8ee>pfwcReZ*6}#6sbI*y{s$M!Wl!~~#^y6P zn9K9mZ?#W5JYyz9J!+mF=mO|pyER}g+bYsJ&vBQ1AUmIgj!Wzmp- z>@i(zb<57rPJEtj$L$s^ziB4(O?S8Fj>8jPh0A5gzdHHK@XqhcQcor2%rrI$m@)r} zc>gxExuKiKD}r4$FnYSlO;h1~nb~WPwC?PzV3A+H)N8StdZ1EbvC+^wMgg&(Di#bf!_-Xl|Ole`fRdvSFnI}5+ z{JtFIJ^tZe$<4E8yw1JaWbjyU`D@=D&dhA(s)jqK)C(TXS}3xnb9c(Gxj$#Ua_IOy zOZBdVyruj-d9Rf!-zUa!clRzcO_VXzYFNN{dh#Ea$-fwHEuI+_r#9i(lczG~D%Em# zf;_d{3v}PTl~Uf2TdtsX|Kodi-3jZWo8CU2WV!fY#<`lq7v0zI^;ElQemb2)Xwy3# z`L^#zgT%R|rp|k4cFZC)F5-9a)qe-}1#bvv)|PzId*?}r#lpMO!=gJPmw2`vci?~b zdE@S{?*mLe9C)vBZxic5oubZn?BDy>D(!ZGF#P#wu1q>AuqUEdmgQTYFO)DuBHb}|YSa|&R@;_OI%m#O#OgfM!yYcbr!_9ofD}%pq_W&Qf7qcZB@flE)#XPtVroeu{fdpI*7GIGLqfLcbCnRvg42a zw|!1bt#14KXyuLNJHFUm)r$JO&2++Qmwh2??w58x^_QQx;-Zvl(fXT5I+W7njb)$P z$Y+TPI>|otI^n!h@~68`=z8ts%FS!CrPklEuk?R-<+5w{`KJfM+|z59UMbjnROX_* zPFK-!o$p@TeJ4e$%xg&AYjg9^=cPxEXCLykR?%8#*f?vqZ2S8_=bD8Z&bWJR&KJ_o zt1eX5I4tvL-(k@?t6W7E+?=J8$dG!;;-wsSJXR3oz8kX z>838r(%U+0mU0c>maW~=YkWfYNTCOl(e9LwFMnKFH8HiwB+WHla7Usxqf+nb&xQT| zYa_RB2^Ok6@gic|@pHy+|1(@)?Yr!7LC>V4#|%Hqh~<3ywmLg`hL=Iw&qCw*5942G zS}rqXyD7T%=-f4j-bkivrb2H+OU(MiSzCG z^`F;8KP*4|dw<70!{$SRcWeUAai2JIgZbkNd%3T_*8bM2;C}G^5I=inx!JX{4F{LG zNWJp)D(K)d^0t=qIQae?pY~+=-f2?vckWg?cT4iu`ai-Ib*JJtwoP48QGO_@Z1Lm! z;^$O%@3u1j#Ws{Y0U2; z$?@iC#Vw8#%JNg@3+~B%9N%eYvhU;d-mix%SH7A&Gfyq~fXd{p?jKgX(Kz6@XQh6o zwB6r-v7Ar3s%*K;ckMA3>P(m*Y1p{4z@G7C$oEHy&vw|}?rU0}F)eAW$fC-~4M)Qn z9ps6P28CXes+xBI{S`nzHOgN1Th^&RzF`TKdKe9U=nskgkDyKrN} z+{c;{>Xlqa%XjKHClpSMx6U?RdnP+CC3wpNjvu#bU#IlM5nfZd$uPBKuiz=L>wcw!%#{J1otHoj)H_vz0~a9SIH6#58Ucku9Y=D z^4PDC#rTPkaS>5(gFQy;Ao2yKnjNcg2h8-zJ|e zG-$i$TI1mMxc{N@0@2s|xc}}bt@Zl;wDpR!{JaP+=7a)q$=_E$UHs%y=dE~)U+1vt z+J~CTmzN#U;w)o7%e>&7w&ueZp+6oMuC&OOJ-_nde}<+NH365W>}y`)aoy#8m-RA+ z#|v0`{+YIZoc@n%yJv5kamL## z;=!Kw)$(4yg1<%m-SQ{?w?$@g#y;7P!M5ub=c|NUrCe7H%W3>O$fY5?iuvz(zA}`(?|Sl8zdN{MYw@Gnz-5u5pSLN^o^4~m@a@ZbE}>Ig zF^-0=x?7js@sqxM4@3S1#{lnzpc6=Rd-tTb5wzB-&LKvd;OPIPMI}tA zy;XbIm94%`cV29ldc1b+F|Q+)hLf+Xt13QQxvOG#{D$o*+uh?0yqVbF&zo6F0Y~hXJFowvyJvsHYcoTUNQ2H@y2l(WbZ0%P zaeNS4?y#@gQ#W$)-CdGijnDKfOcA$X4|AE{rVX?%`*JQFKw=g{>a8J zcDHlg0?SV~Q<#}E&d29X**N9X&x_BN{C&)0>Qj?t8mJe1PEV=2_N+n9I%Z9o(9^Yc z!OQ2mPB$`^xWIf|bfN63*So%MojPmkyoW6{pO!Osy)^CTxE&E`W7HR>+g9?hysGg> zc;8C1byY>Hvz5<3i?|f-R6aHEQ~~D~lZ(3poj2+me2XCs@m&=BV>b+kgAM za%|;#p3>m4SlQ;mx8q9_%d*ex5}kdzaOYxW=85y_xx(jZ#Gkz;KW;*5ixt4V5KCris*~YGNO}(SNGq=V)_rvbP zp5I>ISf;tmv*gURk8LM(C(e0LV*8&#>R0r`>u=tEsQ#Ay!@B+>|D*IH-m>z+S9F^F zAM5&`_I!NeWOPXpi^H7O=NCR7urH1lZ+Pe>&=o#scU}6az{5$K-?%K*jMCo!q%Q7H z;g6+{)UWcc5j&`|BfabCav$kR@iv})3!ck+eZ1YdWM}_xx5vSiOIo{Ds7z&ER{8bo zde^^eY9c@MAFUUWs&CdT+GRiOHMhUAq-=Mwa>}GLKkj(iOuoI~bJ?z&(yo%K9EaOt zp5J~MFFYgZRkC5wO7&X*9S0s}KHPAzC3K4kf5)G|#7x#z+2%ThZMjc2_!Kt3js7R` z53PFGImyXWw*B|jS617P+w*0ASoCsM;RIKXkjfaj zX6de9Y5RQ5uK7qrA7Q)KTOxK_kI()t=oil9Q*U1fv@t9_PTj`nbo)EY(987 z@8gAU=LMoOs(#EqH|_elos+Bg1h5(PJ*?l||2)RLy-Qr53eMImywezS zcYaUlZZ*5q!!44A3yyuWTOA!0e)O&Dy6xv4nWk{7+xy5ngf18uE(;km&A9?;=TI&zQ5FNt)EHe z{nBk!8^4IAM{M|!`bgTcw0dpa-G>o}_FU*m-TdA0?F+3~i%)lrJ+4eH%lOzCaC_NL zai05!-u54w%X@X*v)wn9AIrQu#_`W-@9qcZ-!wmtza@Qa`#iZHxl7O6?w#6xTQ$4m zv~dr@isG{w?8hJBu2O&6QD2YGVNtvSlT zI@#jJ-5;yXtOTY=q)oFpuBtN0rl-2^>*8*Y^Yc{p@m~F!?JpRSW%$}hh=Dnk581POK6L;1 zENNcmjH9Ag4}D~A(>lQ@>u-N)YmMu|%(vPR6`6u(_w=lLXt+bTxj*r2zBkY7j4u|e z!(*;(J-_H5fBnH&`%L+E@r&E`t~T45nkOPU(P8=mmi~uH4hMPc+V*Yw!TX80EZJ%tbH3W>)UJ?pyO==zyT%5}6Hll-_&DoxvCn#Dx9&O9 z_dd}QT5EZW@5Jxp59hyK{bBN>5YFO<`=z7eG+8!BpIIZg>*0oq#~atXf0%#twr}J# zN3Bym_tmG>1=(hQx^(yPe7@wfdCZfpDV`Q4N4cD(#3UN9@Bu;6HuPT|DqCwfn^tdRJ9Qz88LqYO9g zJK?pv=5Bc!^lg&u>bKW+U2%SMZc^n;>EIuATc6lVZPCp?xK_R6%dtd;+;fptazBq| z|9HhO_3zw%p|lVFJ>G}&CL7(1J1^{}pTra5)$oM# zQ%mkPw)*{Ni1+#t{q6A&{>SodlTLoje;9h_!*QNZF)_DppSz*Z6j9)KP$A*l$#v=9 zT>djOEveA+jkV$bsC>l!#;vA}9HvQvvEgm1w;P*}pY5qvfAh-h>NcZZPuE-SFRpIP zZ4*nhm$$O|P<&f%>gVNe7ylNhh<|jgv-;6~{56|DG?Q#B=&s@j< z47S=|KYx4mx2MMPqrJ=gqjoZv*Dl@XU7jd)yx;t(Mc8p>b{4s+|mN zah*Ps1DB-4^vKy3w#VwW#u;^68?#JhIMNZ#BK7-^88g3A)AG~BPgg%$b#2x2+VhL| zN&aUz==o3oN9>|)|IV9lgmrt*&wX(7Jco%*PzcyEgU< zx|Y2Cyi0>iaJFUIgE^0OE}wRF`>qo~E5#;<+lT1Y*gvdwa;sdssj#Vw{p^phx}_hI z56)Vmk+0C?^MpZ}#eM$kIPnkS|G3mYct1-0x^H^r`rDb}*SW+j-Y;cLttnV_ygz}@ za{U4u&BytC+21z4it>FEbW|yClCgq{`EvI4mp`vJ+9tImc9qMmX^P9=c^zke^!~>B z!&XywUN!MJ;{QF#H7?rzXxAry@qb75>0ErPI^Qc&Z_2d3jIs#_tKNQn9Ut@ZS9A0^ zbvI=m$)4vEmaom;W99nl?=tOc_vap+^7rH0w{fOEySXhttENAxx>B5ztD2X+-uQEK z%n$y@x~xi_HpXQxsoUT5SF_4|k(u=*|Bw6%N0rsO-6j_b?8~>GVt*aK(mamkL*MdJ ziJhC%rYw6Y8^P1Jr}{eUqxCl@Km5khm*{#J_j z>z;`-BG=|9x3+AUY8&(Yue-n3$9~Cw=jIETSZjRMG}%5)ay7+f0=TlMV*5GG9Jb-HunDbzT#Quv5V@{ z1DHb z$q5VGQ+#jn_U$ub1y%GqmRL?qJ)rVU`O?~;O}mBX-n^{+$k^)k?p)PnH!m!BZ6LbxKvL2>~MJM-}j-)EB-UQzEXB;Z`Xls-8w}oljZe_kH=-JhhBX$ z&AjW8#&ag8Fi~l5{?}){T9zy1{CS_$=xteiPsxgZt>K0T?-Hz^U%xfaeENO4NB5ey z?-Z3z=-)f}-u{T4KffLDROk_~{_GK6X7p#Ck-vYk=chTJ`;+hAntI3LB=a%@R=va} z$_YG*`I$6HyRFRyoYc*0;I zw9`Tl##RTUGL2H6zPM4dN;j+yn1TU{hyEdDiE_z|-YqRF`&?K}&Y+ z4#wjvmP#CVe(S+k7gKzxvG4D35eAvZ^X$2-#mt7cGmrE`B21D|!tV)plf_nI6mk3V#Go;c@mpN43|^GVeKmM?z>xEWsRT`qax zrNiMnUludVd|k>t@zC=-7fxLKQCooA0v2{QL^vCa`kupQ4Bui3}0Wm z*}C!CDok?IGFnn*o9QCN_)L@4U-EcVxZ_I6cOHu~gBuUZuBv!@bHxfl&AfBe`)Eb=BBi5wX2$$Y>NLCdOZ$I z74JBHSdoQi;@j8$eb>s87Aap=NLt&id@_}b@$cjPimu+Qt1Zmi3?ltRn49(2%eL}) zvMc8-{$?p!CYt+v(Zox0d077(iwtzqI9a#z+v@G{X`RwFspSRB>osckX67z1Zk=T9 z{>hWMTCH5}`AhHFj-Rqrs>#}kY~ehJ@NqoXk|r_i<8?8;#S)xNqH=e@kc+N>vh zP?@$!T{80Av#|3vf&ovWT#_zTe{X5e=AEoRlczyL%izHCby<1GE=nC%>3Jn67gE=`-N za6=@;OPO`kO}{j{>Lbe*gSB&|#8@b$~#RN2$z)^Xr$2CvC7XR0!`gPn-TX zrSV_f9R7SSW}VcSV~5l&nhRwtUI%G7x7~hv>@cVB-)DJ$HGcLUGCskSo<8m4r{gU0 z%eRVii#~C$hbA>r4DJ#mzR2r)b9(MbjPFor_tg4 zER7d_b4A3?o9ctCEe$RuYeHr-E(_x!A$O%PNO`aAt?p^%8z(W`&i^Z#v)Xsftov2M@(ySvTY ztdcL^o0wkWS`optCT0?2jJ)IBRhB7{{!=b%IDcknmPo$R?^WF^d_>Gx?`v4k3T^rC zw{44WEq*P@+NkDxroP{HLv_-kZJ$-$dfv@)RdEwZF8ul{`1Tn+#R*DYZiYR{uU*>< z%vN0Ac(QPclR@Ko>HcD0wXd_{U6J%^gP)=9pO=(H7umGmIr?E^pLebHH9M|_6@wg-NsW=BDRAtDVV` zuVQKO#coOX#*8YK=~a(zNe3279oe{JyN~egFYDJHOs&Y#sa&-#vyRnCc=GNW&-W-k zu-2BI+H~!x53e`X^%vH&d*7fDKowO$M#2PdSPqX~(JqEu9}4F^+a=AhuExI9_=VZqe-jlZKAymIDS3l!YkAm_Vr%74jkP_p{0C>5 zx2u0v-S#Xz3muTT;=ZM<_Euw-H{`+WU@!uzGYYMcU(Jn zNV{G)m0j!G!wshv)NMU}_s6PB?@w*-Dwl446Mih|c|+l`+SmL?>NK0qU5oB5D^FrS zX_DVJxBt?<>K|u+r&d%SEML1+w?oG*tlHCp^M1kC^^t*x6U9y4Or_<{ud8uw_RiEz zzH&9aOa0NK_=oS@SFY#yaq@TckL-gNSGN7-Hkx9+>{*;8Lsk0Tn$sWCzb*Qh-ft>B zalt{AGLy+tsbw9r~s_<0_{lS*kv<_-Qcz1?HtUZmK3x1@Y6ZEutOEaYTliX`VAN49&h8RkodOxR^7aHuZylNvrO)F+RfnkXLXdW zW!tw2E7B!&#MkfmvaZ~kf4Z}v$&QCDXKjqVHvW0H?fA3!n)2hzYeHAsn%y&g?p-{! zsQh8)`DM1+W%oV!e(?5BZnEZo9X8!-Qfhhc#W(}WkMgJX?&AB}yyB*pT4-M{@uuCU&xudX|#s0-;4F zOC=0XoOtEG)w#MlU)bzq${m#xQ#%!8%D#yDRX;9NyVT8+Q>bk2Q0u zrFYL{dUfsdk#aGv_DahG$G3xb|bY{bW;-^!br`n`Uunx&L zDfClJbxC3LdiPlU`n}EK0ly6*NJf-mkkCEoqa!Ppe|B(v<*?wNE_y`Me*_mJuktec@8(bk)27$3m%`pG@j1 zpTBQ@8LkjmvcM)t{hTLDvW4x(8`p}G?wp%->>B^Q^U{lYRx$nQ|5p5}Hgmh#q?lbQ zub-Zl{LkPKv}e`hrz&BeZ+Hvs>3;gN+Hs;}apOO=#XB!Krdyxn=TN=5^T6AAUu}N% z9-Z^#nvmCPcUD99m}^o`wSm14=_;Qt^|s6wYy&wS3Ow z8^31trkV@)u9vZklX6QuD7RSd%N31H3Qno#xE?%K`E@z|OcBo}?F~N*H%tDy>=CXs zEs;SfbJM)EFq=}l=a(jV>Ur`>8t+z4dMs*wQuFuDoFb0%a*JjyQ@O8usCV(y86}A? zSi=q}rB9XgJa*ythH9Dmc^U-`Kif+5{Gv=B=Q2iRTwT;HeW$f|whDhxt>&?i-fMwU z+a2zt&tg%Ua9XL2Q6+v?_%zEG{#kvA8(og+^t=(AcrMF@f5)^m-JZw!3_)v(jHdM& zom%i@)dya+H`0q%xQ45lTiO`O`&Sja#i?ZkEIfW<`ASoj?iQW9ZGP;IQS%r+_;=bA zuRol<@P?;Nq0iE1j)&6cg#D;8H8c&i%6dEVT;OtXP2(%}>G#`j#fTaH=zDZR@>IKL zUVw~{rB7A)v%S_wUapFHH6b?ofZ!49$ij{*j0fcAdo5k~qbiqCsmnp+HvgAJ?5FrQ zh+fI~wRU^wJHf>ouLW*(ZtwY`F1Pjfw7{mN%?I3Ohh@sE$E{f%zQ^l6zscdXKQ5hj z$w*GEFyCx{s^(4Kyr$jn`}VOkABx&HJ3nvLLfOc=j^~p}ZH?ne7x%NS}S-k#7 z<+*j%>Nc&P)?Rt6yzy0S=6=q75_Ss(Cx^F6T~f8|jmSIsK4O;J+D9xGmTujoo>4o$ zWd4N`hH&=}+5uPNk7fOuduZ*9$)|5v2o;|$zHw1n_k5tXNy)G2hwK?5ZhGjL>P|0g z%`p6|=kNG7HoxzWeTog^l3Qnv+?)LS<>Mm5o&=d|=0{v|#UJU+(h*A&`EBLDN2Yn+ zjkmGsJ?oF$leti`BGHKV!716cGQr6|K1O+k2X4ISrMWH9>NIE*K&Ga#!)F7B-8K`v zx^&_0>8*?rf{rTl-74-n{jp@8ajezppbIrlx(h=-tGOp`Wc>0c`}~oRHl>zH zW!t`0&34mU>?v_y{69nH`=)uU`N9>ik6(^@F-=_OQ`C!Vt9GAoz17UT*zCe_`6EY) zulx(FyLx}izWu*_{`k&5l9RISqE2JC=f)NA|~c zYnR>5=B-Z6HlJ>M^uVN4dxQ9ds{WYoqK{XK6&Z=y@Gu$wob_jVhw-VIt?{YsS%nv~ z_wL%X>ZJA|YtebP%nz+eSz%j$|R`~4&XaSPp^q@}yeh1k=MsaUXvv)e!P$u4mZ zIKQWXpS_{>@5_Y-;fJOq7%aD`zNBoZ()@k4gsrQ`v{e^vPI;U^)!}dX&VQ>;fx(fy zyE_xC0vAMfZkh4))!g1FemZytnE6fp1zHIv{wDn0!i_`6^`-0lv2RTgQJhMM7Ah{=TPHN$uiFZO? zEpy_rtdUvR^FaRJRtAGLU5CFrp9wpWCVy_Oim`)Bc#xvSb7sck8^2~LHoBftyY|_5 z^5mmY+cyVub#m>_Q*Em%KB}&=U8*}(`P+#lXA1Hgr|?*Ps;yitpDL)>uUfXwrSHDx z`TT!-qoc(FqC6xU?X{jW2nH{0K0WzcrI{RK0@w2$N7G&%+3M$(u_e_>Hgft-+aF7_ z!#aI>`JUXdly&&B)>1cJXVrywJs;j)mb@y70iMbqlKMTjRuj7o>C^pL?W8j`8d9wU(ht_4gYDMH1~h z{xf`ir5f~GY~{M8p<6=lY}hs9V`J+J!+T3|&9mKQ549aXCutYMAGLL(@)Y$MJCA*{ z-S(fM{B@ASv>ScGH4~4l^WJhZDda2D;#(f;BBrkSa&*Ve`zCy<1z`eD@;dWj3wSfeG40{!|H0 zUjDs2%v-)29^a-S@%N?lo$m@&=|4j(%|g5G1x(nO-RH~@J@@Au_RC$N&n%Uv#tTkT z|18eXclz!2+PbW@z>K<@v#|zt6!mDm* zdMD~dq$}2av%h6`V`-Z8qR;Nx`Gx8?-#NQ&Y?NegIjS}&G8S$X0{rHXu%-L-Gu4exrLS}FBb7_JD9E?~tIon5GnoYCZU298H#RR zS2F6FXg-aDf7&@tSzhfU+wF4RixeGOoU*X)1#{!2g%L*#*Ju_^a$9aaweUX!qsrF> z(@w@`Tc2dCm>N)iLjA%;)$6}(Oft0g;(%%{kP9&=i?KJZ1xuAP(K zsd!FIw2Ql@W%288)=t-=Bf+M3x8A*aY6*vk+wS=djt`zKcA2irEFODAe)^A(H+~1N zUA9foQ{>L!?b?j8zyEr!Tqb=}wd9jKYmnpIJ=MWcjIkR_B2)eKd0TH4NWbo?bV?OE zxw-QAj2XvIX-@JH3j1`Ok>Q5JgA13B=W29#Z08h7d@`j#*ly?RkjbjkauWo_W^xHU zNHBV`+}3?>^oGkJr=lce+?ATAS#PTTt8I7g?Ofh76Ah$Ka_qbRI9e>2V~*FQqQ|U` z2YX7N-&-HjaHSM&a-@upcn5pwKV}bI^C8@RYp@S4)Z$)9v4}y zbAh|u$bFl;5ubryg~%h8%Wev{HZHR{5WPOHR!enS_VcNYsvU;~uQU{}mIg1^G>Vxd z_-y();X5ay+>3TIC1?G*a$4DlZ7N&xgx(c5c&wQNW|*~Y%XoTcL5gva@%xu9pO$Pe zDO_n6^!MTS{+-`M@AIgh`MX$`H*{fNSl`8&9#2o6Jie@&(Kpsz?A6Ab27!v{VF%T( z{MHTLJV{gcY3ssi9>?!b!+kuTJNlQ8oo?>X=3t?cC(QG4BloRqt1(6b+_La#v)(r z@!qok`-1aNzhwM-^?Ygkjy9IIRAcs(fMX)@v*+D=wpw@htr(-z`AT~(=El`I7|)sb zI_$+3e}ns)7u>FUv2kiE&1wC0>2L3Z-I76mM!i>x-@5j8-9B;A^w{6G^9?;^%*^D4UjcTHsS&_=fRCmsYZ-Z~-wi1qZmm}KSrt>r-rdTvW6vn*UP&4;J<#J3M_Re!UhfA~x^ z2|T=|&v`jZt=7S&mmw#!9zITG6}_$+QMOX-Y|TacDUaOZ&K|J$`tmaIi{i#^-WjQ> z){X(pa^*5bnVX{8J1-tMJb7pM`=qrhIpLiL?;h^m(-p9@thZ~9g0|*EcU#_4E5i+2 zHP7aKZ1|+K!}Uy7vs`NUJnq&W+4fA8R%My0uo>HVdM>W>YCcx?{nDabJGD7?9BzMG zerMvzkmr-wi(^7psKn%*Ir{0lXwmX=iMxkDb?uozPqiD)>s}Ub_4s{bsZ{le{|tIY zYa$X#~H# zu~&&PPnh`eGn0q>(&)*5>p zqt+K@Ka<_4&C@?asG2X^$K}$=sezKItN}8H-&b8PYki#37q9cF{JPI;v(AtyUQRbv zHOkEH?g+}1u}*ASQQ&cir@%Hd@A+Ig4c)cJ9PY@@e`>kn$&OD~)|_LS`m;mgbk$$& zuHq{fRa|xSmTnhXp&MbIwxOx7^7g@gk0rfwAOn-jx zz~iUKw58APxb|-Gmdj73wC4!Q-#x#qI(+lgLp3K)C!arhr7Mbe>ht|qe8kLrO*X4J z1b?r;wLa*F^#`Nc!ne1c-JKPh`$Xf<_t5*z_ROZS&VkKA(|t4|SomtKC%=6kpH?IF zgQMiH*|kXB5J~xhDf)@8-^Lx&7Fu!Wbn$G?)~T7r-bw2Z=r?TJReeirn~}xOnHLME zevw?i*hc%qFJ2?I#s^L*EFK;Y-G5yD&%jdQcHe*JP0^K%i(>XTbI*GaUb*On5{tCb z-HD&I`R;A~bTwUT(}iCWP6lBvQhHqzk8SLqkt;Fb>+!5NCbKo(J`a4FvWxfL*Qn#Z zjf!?zLjKN|`@OD+8y;(zpv>r?ceQ1=vg@;mdc9M+zxk*5Ye(!lwmUmn^HVCbvdS;6 z_9JqdZTIdjiu^9;ptNW8@&610id|yiv-3C^MIKCk9rf_TrWJ33XL&ta-e0HSoSUV* zWk>Qp=PB+A+v{pqKi+?9{kP8M!_VG0R?39?EG=6z^Ayjo(xdTz7wpfN@#Tb`K$h0z zWg!wvZi(N&GwX-?AuI!6JvL*ynO1zy4o^#omG0-67mvt zD)B$|$7U|y@mWk~`bqU?wtxHV=N4P#O*+Xf>F95eck`Twtk&Gt{yCpw?#v7jXT0%2 zC8>(*)t0&TC%B%cpEz9NJL!1e*AJ$vudEI{o0VCi@>S?Nw)fPT3@$r-K5NPws)tcE&I~s`}drA)QW^$?}euo7`~6NR9P2g_;s(t zgp00v50*?8uR1hI;_3AI84KeXSo1=@ueMryWbz5I$b$+K`kLkS7k*v!VaZLN&gmy_ zaY!WI`Kx_?uDg1{&fMIG#Zp!)V{bD2XJD6+FUt0C`?g&v-@?-4K(JKt?hE}{?f!lK z=BERv8TRj4{7iKH(#)6H0(zfhCdJO5wD0(z?5?e;%vB+GZWdj-rtxU%4DqDJ%*#Aq z)ou)byR^Ex_1@`?SMq`^EoApd!w66BFa&7R@o^W;`_U z)}EEVC-1!PsSMQJv-;_S=^C6W)1Fjc`F7n&Lg*34ZOhyTUvIw-Je(~uVK;jiL;WiM zy?xInoZ9y8yiSwC%F`Pj7T&(qmo1jzcIv=s>)eq3qJ5RgFTXC^^QLc-&TjJ$j9=wX ztvXxFl4Nn@iJ6}Zc7=KqTS=oOFm+rewPowHSN@y?ki>Dxyk9~{XULgp*!+aOEsQU&aU7xoL|2*pKDj+ z%I9uP7H^;5xtGc3|6%<)&F+#_Ypqh9()q7157JtE=8WXq11xHWbEbV;=J7qjUFp^| z=C-)T;@7XEHDk(6!d~67o@k};Nj_hB_3v4Io(j{Pg?&G5u34~Aa)p!E(M?4T4BMA) z_2%7Rv}UrRqQ~97uYL#Sv`ccYe!9O|^Xr!thdLDm{WghfPjXJ+_u4hBNc6LG6F>8< zwyp=KW%pdnam{_HIk(HgB<4_DhvTy9IXtSpZ`?oWAFJLJTl+Dtt{ASW}K&U$u&~War>FSx6@ZH`#UMQ zDz9d-WP<3G!U@)ow`Q)<+GreUa9h%P$&|bswd{MnJ{+q{DmRedJAI?Y8*R%#zF@9c z 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%0Dkd}u;pfBc~> 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 z zImZ^{-7?(qeZ`G;cYc2`Yv3+>ywrC4nuQm?t-BZUd2-aTE~jrTpYpnN7CJ<~V~bfK z_oXR4uVEMe{?-Fb3rf|@i^>Zx*Nc38IO*=`BEyZV_D=GMyST}1HUrxPQROGc1HUd@ zUTMrFxbyg_8;|W~tor@bJ-LAK?x)t{j)9(<5$9eyi~ermDV}vIu*F={cT+`bT0``y z<4jJ@ZU&xT)D}&9<@8L|U9}-peUkLORVR(7Rm^N^i9L`k-TC@QsP^sMtqI;KQy8NR zd!(MMjN{A@&$v(aQtg+9g5dFDksR3> zd6MZTPo95#Z?(S;Q`nB*5iAd8N(d~z(V*Q`(I%dHdBv8lmUD`gGpDTSJ}vX*(Sp76 zs%OOAOuxbLbCcc6{|r(KZI8?gX65lZ5nas3zT?}{t_O=GTXN2S^jqd$3h<#Lr@L_=>> zEU;JK=OY_3Dm3JH6aXWWJ&(Elt{o|68mEFpG4)$7qFIiuzoff<)GkJpg z%nNdyUsg)7b2=@ZkAp@bHWZ=kJm?I`iy0}J9S!S zJ0>k@xcT*bV$kg)azRHgdNY(U_Q=Osh4$+yMe;c0$s3-(|0~RR`8 zPZi&vZ7$xe>vlxwW_#tIu?a*s)Kf1$vbuEWMsMR=1qc4rwTXUslJ%u)%Gctd*QjeGqu>A zcr#Tey9;&-p9)pkwDVl_FRlrZCt_SC^8U73^&n~CmT*NsZIb{YNwWvyR_r}kC?aW?%dY(G)=IwcSGH8OWwX?lX8B(=jiy^v7qU$?aEh^c2B!e7xH^{ z@y^|kF9eomcdvLqFYvjyK$_*f!>!EQY&BnOII>8T=j_Q$^K{9VKZ9qo?pc|ulU}5d zDf#cct+>bul^wseO*SomuafF0Q&Uhq>)g{N6K*ED1zei5QbNOzrTxO+%wu|K*n@PgBHpD+y{SJ-TJ4GPg(e z^NBa^YqgD?HKv!}$=QgiZCVnlLRs-36IU%f1)g zJilV0!Ru#2Wx414>tlY0+z-6%xbe2b1@YuO>O5B25c>PL`m*YfPT7s|I_zn-e(%^XUz&Q%QdGR`5##Nq!+U+2?p_c&=>O5c zCjHi|&<)P)m;WlGWgzhH$1<6*=~yBGNCO2$F*$_^`30^-Knu} zf3SD|-HjQ)mN7rJuK)Gr^|DzJVn*V{9~h50T?u5~t!yo7z@BFNvbk#V?N*&t@mf~t z8yD=KJ@am-jvt4_Ig1rHzcDQ=?sKa+>z-ebu43HOb0dve!i4Y1t5+Q&F^SQN@iI-- z#eR{J*HhNmU0D6yox5vQ%#!`KPy8Od4czjdL2F8@?o+QGkN927Cws2$da^IWLCUi5 z)0f1#TTU$7k#Xl|htmgD?cU?I{7c zlp_D<$x}+wy0!~Z&saEDJ zjofck9<)g=Ps+0~G5fg0VAHC3Dn*vRg5Ej{uReA(MP8?);(S4t+AIr?(!^tRaf?5G zU6MXm*|75DGa>)GhgRC%U3ruBWVcEVV`(U}YR6-_E$ z?H?Mi-w9qE892N00pEh;R58b*Bf{ePoQh@ZRlc6jslL2;){_&{&h6kSdeG_E z?9PS4UtW|*IhO0d46kFh=73T zjr%3vPrmY8_3VL@%cgz z@@%0-?n0x3S;@6WDvLZPRX+(@dd4HA#k;YABXRzJhR~qpCEl}K`d5g~h&nk@xGBh| z_Su(jE1q^bhRv+li1#rS%QPyIDz-`4E@8@RCZn&;J? z?qgSe?|j3)*7e&I>Bg?0GKLv-wdZOxS9#{C2YxXh>U-$Cq znhKWWIt%uDnJWD}%blw@h5Gx2RP_ zE2ZV|j9;}`thaMl)`#m26wvW;Q2=TuG{ z6ixHBOWDZy$jEKU^bpA;yM0sMO~_6*e|z!v@h3WdMn456Pq%#C9OTCAadWb@pHJ#0 zx9Z?Dx28lL57~v5%;nkvZ9Q!jovDdC86W(bm+dk^EN_~_f(eIQeoiweGJcU|wqufb zG0#isO@Df~TUdNqan0X!(j{~2*iTPN<$IM+MS3quX)W&2Kl|P{gSq9Ri%k5Ci8gzW z`tvHM|L}PEWocWblt_tF*Cp8(r_X6AtFUmF?sYau-sqGv@kQn)UzN;#s>zeT`zsj8 z)~;HoJuS*Gy=ZdHr2GRcd}hA{?_Az9^N3bi$COE2eQUH9PRs6Iv3^R;#pP#~6!;k) zSoyH`q2Qhqg*}THoBXSmTsVF0nVEyRs4TzjtAkT@?>HMCO#OQ^ud9~-$F-bI_7i6$ zCGJ+xcb*@g7429m!z+A7vgyfYo`0rWQWH#rTpxL+IfSoSQhPrqc-hb980}o{_j3xb zgnC=bg-p^kV`pGVzIbwVVOyq)J9GX$i&xo;^j@$S%5TZ*yfCTx^n^ZfTmNfQr7D`; z-pv+Ckx6;}Iw&W1sfy&kPb-eOuUPKQQz5W3aN;E6^Y)h}PhwoTBmy`>e5r(GgBW0$nsvgc=o^epMQc5#xw>W+iIf-F@-ww&B!d2d09 z+|+Yd8?#)REZzssQsWR8T-|4T@;`%AU(&X1n>+=04(rZz^Rs2&>TXi*ThyPMsq?6e zV_|%T^E-dX_u(n`e5w`i2!0dp^G^Q4v^-Gc@${-U6-BE3hHD}u^8Pb;$uY&aGCd6W z^DJ;$LB;JKAxDXbT@m#OLTswa4kbAS4K?W?Gduj;O66`bcPSa_G4tWkRt{rOpl z^pg&bzGqzXt5)vZ9#Sa1^JjNM$~nu|K3jL~sFV}$m@*-;?ast`j}~X7O%v*QbGvFs zjPQA{nkCy*CZ7{soaU&!LSf>h?i&}b>qt6pSKJpCXZiKp3caK}=JV6aZh2T}S%-8e zPcoK0GBa)s!@U&B}%Kktt-#v zCD&`&F4I^2HZ5+3-If0gCIyR(7BCg>Uh$uSD^oG1TC~geV(iK(>)(gSIlQUubyF2` z$zR(Tv;36WlP25Ry)VCqpEmJUX|=hq<7NYQ6Fkng-Ld6g%GoKoPEW#pLytyKZSshw2WCZKKPxvA{oQd#~Dva38wWzWRjI$AE{_T!zqPl%Ae z$a$GIvq_=_KiMTL{)NUISm!c1#v~%&$dcXX*9G6x0giGtOLRC@=J3?qd=jFsU?j8r zY@gSh=dUzBx~Tdtc`LLndXAXLbQkTD3?6sG49eXsS>{>((O_b$_;e!0$V+_H{M~P| zGMrPrS`sXC^p*QBE$mV%e!4nY^6vZa+#KJ79EnM>W~~p3Zuz%=3P2Y&QkZ0!zn&HD{M2YFU(G^A>*F%@R^{Rao10XP%%|_*6X|!n5;|>Do4l31O68J&?*jfa zXnnplm&xbzvZSCBMNIC!`<`E$do(R*ZtkUlXbOSS^PgO+F||4ysF>PZ?k90cHS+lmNxqNQS;v{*rYx6mY>Hl?*12AF_TOJ zb4BdV>YkH{c{t7KlSw7xey(|!j>Q|QOm&#B?T!31)|kzk#SK>Yp4ljNL*PN_^Vh+r zvst2Vr=6I=AhWIbbyvGd(DEejY?Gd!mo$?WzY}ad`93W7AxBSu!R>>(|EfYW-Z}8} z91YJ`{VlbT<)X^{ml_4({L(UM8_Uy9JAJ;h>xj;~gqR#ANrz_+)uGx)CtdCN_{s3I zqRrcHe==p4RE9oqo3P{1v1o~7RZ`tmOBZ|QORd!L2)E3yv)jt0oHOm-BQr;-bF$nr zn?7!~-Fwz+(vr$ZZZY}F^1}ZN*Veq2OzJ%od{=8v@AS_*w9n^f`ENP!bm64fbJFZA z4_oa5f;O(mTRe5%xBKpO*O-|0sxS!G`eEQ&In?85uUso;OG49}sa4Rr(^YgCm zn)Bz9H%IUmhNQeF<)&sEVkVwYjCf#HJk{dQ%4CO0E9W+A+M86ovNgW7Sa{3xf`H%R z65P$llivplmovA_GgFFVVS zZDq|T#920+JC^6`S`cSBHF;aHPJ_PgG28zP#~LTQn&14&qEh?x@0-+}%vXXR?r`63 zxVq=~?&|FfpIx_h-~8G3`WgF=ehb;1tMivLO7z@j>iy$YH9zp}TfbYZGsDk*HZ0_t zKO^ykt;3RtrxPExOy!zvY}D9O7?!hV$J3hyH!3+JZvP0IxS-F(n1yHQhZNbfhBs0S zPtE9hD(Wq~h)samH)M-%0zq}?iFGuP+w-y6~4@vd7WQPlcB!xpPcZ>HoWZ`iEC zIU?94r#%zy zro4UoW%<&TO0Ho^UI}tXepQEcwt6*xD`n_0nZ0X%eAdLo^Cu!JV%V6!u6m|=U@`BU zF43eTIWx7)zR0!Tzqc;h!AU&ymWWu+x8>V^S^l;;Cvvudnp|wsW@i@PkZNA z6+B^!*S@&$JP*~%;|o_l)1E4tTk>P+PP2SP*EH5SJUm~IW@Y{hvQAQ3&#xl*-T%i` zONn`YjOQNgc=EfyYNO1~KC?(CoxK~cRLzPx`!2{+?B8AfX(cbdx$vKPQ};P-ma3p~ z9`9!!ZS(p=tD{%NikHT0VhWvo*|u)V^9d*U=jaKroGk45r!=pz@KA&&SA2%@Grc?f zNtvxPH#J@~unWt7`YzMwpU>`sNt!Y9EKGgZIZQv_Z)qVo=L3gr)}q~lYLQ1a*%axt z7}OXB_StGlf9YAR=aaLkpjz<0((3M)a-UhFPs^K}b7TC^P_}sAt|KWw=Llc7d9>9l z+_)%AVaFaRQmUn7+b#uH%e$BJXNtyC%UiLwkm8Dmm+|K9p!ZogB{CwIg&D=ct(NqUjKR=Ldlq*@K*U3V7b-#fO#E@_UT zt)s}zAb-`{k_knI7uGM+5L6L3Qf_mZwHg6}x649Oj@|ry|DlgcGMC6xQ{`7plFRP&>kR>vJQ$@#k!VhM< zd0&=_Bw0JRXrKGDk@x;AM^54QCsk_B3b0&SyJYhAn~&$XaXxcn=k|J_6|;WYh3GpB zyH6CHur&GOs{Gb1$=ywkV((6`v@ zyrMid-d`muDGY5qo{F`NYY`T}+3X+|1?f9<}v*CsW6^ zSi1Q^AAf#SfTP68U%`HdOl_=J&$jdlc75h{%F+24e{$@!`BfW~Btm25<@L%1k5)b@ z(g+X>Si|ppZx=sjma+7T2c4Z6lj|H`#}^)!+`Tx=MD5Fq${%;^O=2eAxV2R+E-x{QoPpg*z`8GdH=%2=cauOyUI0nmO;#dWBv=jEO%B3(3u?Lw=uV0L#Aj+ z`LFA*zod%$ntZV<^86f;tyMec_DNnK>zA|515-FQhKIx&4&jGEsC-dVE?Go~7+87=gDHYbc!DjB`_thbXd4A_fPK({i z@coaLOXv4A&qJGf)Mr>RUz)Y*MJrFvQ_tIWRo5nTbzkrgQS|BEu%~h=*WAZbO+^fH zw)d$;N?x{}d4JB8r)CrOC7H36^Zi^{B(Ndnrl9)7bJd?;hM$_fV|^}1*Wy(Vf646l zvZNxeV$bq9Y zZ4q2DL3q!bNdCJ)mdCVIwzwL`+Mn^v{n%&V@H)8TUUbLf&U4-Zst2{$SBh*r&JoJ- z=4nKyY8?Azw#_9Xb5A`>iQki5EOPUFxnoZi*Yp!X^Qv7=B`2ASJ+@e?$Rs{xqtl&D zCGq~p<|S(^G4VMi&9(3E$#pX>?7GpHZNxM~O=LpqWVr-+z1kPE?!A0_X5)h2yUW+q zq^*(gY|ndATCT!!A|?OZD(h_bim*qO2MjHBmUe`HQ(FA$?Owr{YuY-T&njIzKArpI z?&Ps_a`h2rgF7v6U1dUNDkWyA_O$Aq?bvwo`@+T3`;D_c7&TVOeHA)vejzJ0S=dnf zNt4H&BQgnrGSbT$7dt$SH(d0^rqndywnMq`wz74M>>{hB4;5|Pv?6dz-~7PH+CcS{ zi)L%bMD4#76)DKHf%$Y`kJM_@J#7jb&&>$8ZsO_rCI4|Pr(|4$szs$m%sl=dL3T5R zVw7!!G@0MEE9|SDA2&CfGvQsvvOt4P>>ksf2S_ZG+p?}nMKQ%Ld0s?`#FsCtxmhxW z>oYuVe{#v2lf&}$`-*#u6tV!eC&dn@mEnM9gYFIp%mFfUNNp;r6w`A_+Y`s)J1oB!~B zxO!!Ox$dcXnirOCxH4B^s*t(sjUxrc*VPtYG@Wg0bT8NLVa#G4n}qI_vpOuN9pCt7nRy*X?@wMI=TW@~JQw(-TbjZahW7Qfm2@?%WY?VT;MYfjlE zzmL#(n_BqP=?tUgfxPzXrVE#67yD-GZdv6b*t7283AI%m7e%)nV|dbX-u~aJ&xXal zrBV~jo1XY7-HAM_y7CIcodu8F|GoV3eboyo&wuBhhR(8|Y{TUKY4xt!ligyIPceC( z?i7EYw)je}**%-EZNEbnd^-JDrRsOM%!gM2!EJwiMb^AIvG!?X?u@qwkDuH5g1xFO zBYN=!&Zp6~nG;nuG+bw3J;!N#eEHrO@6bIrg_KKAvM*TY?X@Q7yK6>Q;!U?tjxm33 zt~NYy#_n>C^OFa9^-=4Uo^0BZ(wbw&Zuu)@n@-M+cZ$c8*u72(ZuRy~ns?;0meFw; zXa1(tsk5IlZw(FSYWr z1eV)n!Evx($a}8(#YL-c)8*S5}$-?xHlKcGRg4n{|8+etz0uKi64x&4QYa!@5lp zMO(8@I2H)0&DPbeXl`3CM_V1P1#I*BuPuiN(nI>I4UVUpS`d6~e)|*}~l)rOpiOwGFmG&KL z=5noG@N~lHlEw-)P3xY)|D`(s&~7-xt&FzYEQdobr&@c>Q(R1nH7CnN|z+ zYn!)Bd$E?`IoHkuVJ99hWl7iJV7Ih<@9X55tYjAcZu?S;6FYw%RG0ZCGNHk7@=Vdb z&!5)&Tw1#&vCW7xhv&;#+r&y0!AYT;KRx;Et5p;_bMMAmTRiXZ#>yYN^}hY{Q@^zC z%&_g#7sz(J(_VdPpJ~UVPSfs44jJ~~IXorn*lJ7~Yr8YSTk$OdM(qa+L>>5oqyB*D0@Tdrppth zC1z;r-<3VSwCKD2X19GEn-zBSsJXpVK5#(&_WZTsACA9`{8)bYQ(JAB_g2Fn zIUD~jw_~rkbY5zCYe)Hksb-1Jat#IAk$>cW+y1z8JIAVbj?Ws&wW$-Bw||t|yJGEw z=N!)ii%u4c+}+~4Y(HDnBc3`@^{z#i?3|~)x;nx7RFH!sR}o8hu)FFmpEV0Sw>j>; z+9vY&{@z;sNAGW3cKxWd=AXFPBDpX{p5}(i2aPf5o%M<9#WS}R#k~BrU~bauoYn35 zbqxvOho9N8f1JlvRI*TNW3=^*Vc!M?dcuONE3Zr?+Ryw>qS6pExbLhqL2B+XKEk;ip3u zJ$Q4qZ^>;1t=S$uO@*JCssfTUe;@C1wRy1d;l8GI$Md8@Di>(=AE3jTag)Syb=%!(i_5}& zdp|QA=dqTLnmAdU-+adFJw^>D=Lp%pGGLG|Y>@3vY4&~PDSxEk^*mph?Wc_YozskZ z;8ETq#G&)!p0!|*POr|AeU62Fb3Inww|JnLQ}XNAg-OdUO3NO$)Z*i-zVe1;Ut+J* zW`^V1iis!X+Gd>Bv}{P+&Gy!(&3uO@Pr>Ht`BQ`stTsF-y6tnlO!q;qy>|Kaj=t(@ zEQV_j9xT%^Jb!ZTRfEQvJ&aSIF!Lx&9Qe;5wP~Zz!lX{&9Pb_NlK1=*T?*VqSKalV z5&Gn?$8pm&nMQdk9<3f42W1{P|9$#J#!Sv=bspweB@!#Tm|Vdss?*SDIb4=T1jGV9&`V5Pw~paj@Zkzn$s7Jk9AK-{-wEr*&cNGwyma`UTdD7xBQfvC4V2@xZGXZm+6*b@tN_!x1-t&Dj!{~8qKGP z^a$0ZnjD*cCduxiu(43=B+qVC znD*2=6~`CIO-(ryFLdm*NMVl^Uj~`*3bv+C#zEvl2G%Y@=pO|KwjY@z6)@^r!AVtLwLH<&DrO zlZsnw^lonu+l@mjU7tBv_eb4tj@~{^Lieq1O78-m&z?IHjH?F zvVWKT+T52_FRU6o7duVP?eJre_W1XGYr!tRg;LfhSvuAnSUoMzlYN=C*YU8OJ2vuX zOzdc$aPg!VU-7-2SwTCB<@%FXSsgE2`lnN}!T8R1X50RsuY=cZW+^ys9BubZr-Ns) zO-cUJLW3WR^xxe5>}T`id+pkbb#4+r3%`6>n;lyum@9uX)w89USDS(H{lr<1r%LAq zWzJt4&^kfsxP-ENWrg~kD=$k$s=FLEi^fc`kZ%p?ocNA2y7jSi)3(C5UsrOSE|zR@ zpL)=K_k-rwaf`z&g;mNjjd)zcOiy$#GrnySHD5=dYe(I@jB~c_dsVj>`7ybFo>X!2 z*!{Ipm#yiM{t`=t&am^z>OgbN9k&0BtHsqa#`qPkFdL-zSK zfh$fIZMkrAckinGR;(}I*}jUDz3{HjEd0}_$P-$%Y+9?dj~EI+*{*f2$gXX^%*Ivk zI=MI6{OmneH@DTSWsPfL&ZdWIaw$3X75s&Ff^O?fIF`J<*FkwgfPna=r73Jd4L^HA zYF-%_ztKFE+G`N}eWuDJi{OfC$1{%u^Jj6dlKE@igVUe^gGi^32Dj zr&-Q@wMpLVFFTKG_pvh-(jh6cs&6{}XV86II#uFrK*jOBhB59trf!e%REaKYSfD4- z?_V`{UOJOeT};gqKG)DbiFE=oGb9^SJ%YcxuUM@!GiY}-^Se3!wy+-3m>R2GDP5SO zVcYA`m!xWQsb%}wPge@xhcE{2xn>dbpTRJw<5uQR^^)Z8bIO(+dQxP_vPx93jgeVW z_N>d94+}a)=9JkyTK9KOyK4d0#$$zjwkyT1xlfGHyJK!s7iyNl_0hZN)MihKlroL8 z@*&5Qv?4{9I^=n{unRI-{R>U~^5ZRIZK$3;!9uu3$1) z(DO5g{iD_QZz9({u8A>n{W-ERc@Ed6nwj$p!(5r4gxXAd@0ELDg874;2V?#|{;R=k zs%UV^W2WCfvx#%A)jlbo=<(`ztoQS$687y|OZ*w-OQ$QZP+l5vWzD2VqLE7j7H&HJ zr*`Gqld0w*^He`?IQ*l?!sJ??f>A^hf0!++x7*Xrag6)kFXEr( zeBo-AC-Nwb%A#w$M!sNHq7`giJ{=JRD|n%@;4FkP6NDza&!PQBI&tuuGbxBA!1 z7$!vBejmHwk>RBFy;6G{9{%xM1%i}m^++a{+9?e$4{C)M~^0$)z8CWfUL_T=&Zp(b8HBozBt=XT^ zS{HP@C;i9Xx|qHN6T7||%-?-2O5*BLt&5)Gb=nn0S5vch-%yHhE9>M4bBwqD4HzUo&GHPhE4nU zU7t;!#ifdq(vr@+JuNfOxBB9_h3$(^`^NtKq9hqzYPrhz@}At^F@GFCy4>??5C4Ou^a_wdQnk;`4CEp{)LY&{vM=g}Q>6!7)pM(oox$>jxzTGz&?a&c3eNUR_H9-cZT0cHCOLUH;nc zSn*?Jw~nNrn(5QCzqH-?!lON2S5^tnVL1GpeaBi|xo^G}Yc@_(Wz>kiaQ({DJMps; zER)sGie8*?nzen+ylLtCGNoqUy1gZ1UefAi(965C*S+MoBYf_dnv*PVbX7=Y~rQBNbxS_!6dSvpWiG@oK7gnrO`OL&2SrqVi@_etq>Y9&xR?AG$ z+UHsMrZS>u-d>ZZvVqr}E3Rt<35j_Ibchrczsfojw9|cOuZN-jdyB{Ab=KkL`KxZ; zjz5{3Uf6l4x9c!_dGWkM>!M%rODDhOHYhygvLxZV+P=%oGZGA^{9Jj`>u$f+Ho3i$ zQC`Q+_zSUpN@1CL!n#k~w(xy$%-#C6O_w~Lw4aKZWS5dt#QAki=#_QmnoSo{t5P1% z+VzQJiQ$ZmTODSGFMK~SZq~A8I~Sa(oON-!(v`B)BI4WKPu^}%zVbV5-L1GoyR!Dp zd*+%Mkw04?Df8p{QmCGf!3m$ngI{7TTy?xbxhSprKsouBT zinFe}J&9_`6>Rck4Du*CuKqH7ZE5#Lsaw&0%FWrz9KWltamQ)i{+6)RQPs~fvCq$X zR?V)>H#fMo3ZoXTgrdeWp{KPOqwTzFbc`N_lBsyw-^W!%sBHm=}#WzNFB;`_I?*SLAD zw~Ll>i$vF#I)7A5z#^q<1eVgdYek(-iNt@=RT33%>GiGeuK4TrbUge*a z{}~bz(^p+sI_rAh^Oc$ZEUkLfINn{hJkk}OfBHsYRM|eYrbBOYncjLlW{WtTuJZM0 zrR=u#-`qmB?#Ml3nN#|0b>QnwQ#x4>xAHhMdD{J4lYV$Z&>l0BzMNZ|ZL@1My2!|E>2u^q-+|(V6SE{ef5Z1dD83=-sf<$@@gv!#h=B+h#wSD<80- z&zxT(andQar=pK9S1dXCyECNWlw(?6Vc3?vd7u5a@tBGTx1OGU{@l)o4ohvCYIePg z)j6n{Q8neCdc1AU>6)ec%N5?#`sQWL)9hUwvU!5_60b{E3mD}k9_{h6m(W}AFGTN; zp^(@Kd9VHQUAMiPf}SjzV1Lapr$4KGg6~PwoqLKkmOiQKoBn8bViD_^$7h3V4js2{ z-@aGs>=C0q*R4w43p{K{Q!o7TXwNQw!PzsGOgd`z6Oh#UdT$i zpRsuAVN#zETJ$|K+pu-3t-j;+{o9nMN$)Y5!047^{_t(!E2}lL{C;ikrXY_PvPJw&$*dAMzG{URK|IYhk``Bfa2Uz1q!R(J2*Q${Dh ze=A$N@bHcqFRsl!IW5_9_41W3Z}q-CQ`E6&;?=T$AB!g~mOZgNW7cEqUaKb@ixXl_ z?q>Y?p!)hu_s8A8O*>-jf}E6#_s9#fNC4ZcIkP(!5FUW1TIln>cE%%sN&$sYP-fQsNS{A12 zv@nwWl>N%@>+&D*cb1&gy(LywIwx_lGVhk}>tyP}ZPY|}%~H$um*zb6x1al}jl0;= zN437|CKsumbUOMyrOfVbRe1V`$A^V}{5relOUcngn@xA%0A7pDBuW{v}@BP$`t*Vk& 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

Yw(#@7_NRp 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 z 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 wS`~)33UiWg%vzeFv?R<|Cn;e@XD8$AmCE-o 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%0D3V(jRvHrolTgy6i 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 z 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


CSmy+5!!F??ND5Vw8mHkB94vjxvzTiW*H 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ʀ^;JrP`*y5v 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

Wxscp{?wndOmgP!^)a94%wK8x{mh8 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
    ckc*s^jSVTbzAt4hqamYx3`zJMpU@g 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

    C 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�Ywl^t^u{eKy-qnu92RFwUowZ#odQ6h*E%Ozr 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

    4q9CcZ5DnL2-Z;PH)L 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 z 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 z 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

    jh-y~u6y@InE7<+ zFE7qs^mN|S{fDKm<#*a_)oClmXNt~9)fJEEKf{`m6)%!gW1jh+f#cXj>Dbs4yO+;l zeEQ^b*JHgs<&PpuIn`4%3pJ(1E17Kg46M6ui9GvmIJc_s#yjCCf%!_`-mH1r5jyo> z(EfYhzOVUVcoVA1 zb*lo@*NI9bvZ8$lx>E zw>KW5(E%5qe7L)2|E=_XP)_C3U)i+L_<96M7>xI5AT)R#^Nr~p{NS*5N`|#&y zoBkv}cE6Ilr0?$H9Xq;wW*mvGx&EIa{no0?f1KC9dS}Xq?9Jq##l_n5*7Z26f7w_0 zr6uQ=+*o|PSjEC@m7!t$6f*kZ!fd5C|UyDVh8pn$=FRl4z^vAvWQS@2MlI~hH?|jRBnYSgi z+ykTc@%>2WS&TGviLQxo0RGk@j3tu3>b zp2~d2aW01Ggv`_88yj9_iCGIcLe|+VZhn1mZLGCp7k6}|zT7?2PY35Y zUy*lReNX&jUF))n&PUsv?XI5g3=s;yHG5Li_kgu$zNX866h87RbhmV-g7B-vDR+)F zu*#Hh-|u?<{A1qc@|Cw8msV8iZ{B&=WaEe6o&>H}@BiqRuFINUwe(2g`k98e-uAgw z-0o`^y%bYpvH8N5AL%;`UBXQ5)k9gB%B$vAT?}hUTGtb+c`kfs=hD~vEM^_jHTU1w zckk{K>3NR~Qe15--c>VS-oMp2WZJ9CL0#Ye8GU<}BPl(1Pr2RJjjO#EW`@^i@7v3( z<+A9mU{OrjG3%}~ALEa#)pxugWIcm@X5r4XK#4@5U;W=Y9{06v>Y8$|<5EyS)TS-Q zH)cHB{wXeEX;9sbVk_e}>NWW>@Vr&xac6R+ zwT!-`xL(BSx#k@zp(Cl9UJ}SXKl}JVxP*-UnuaP zh5fxi;k?Jn+fApkw{DH@t>UhJUB0tTwy{ycxO)5J*uQ(*rZ1F8yX<`1YsbWv^t9`* zC-xM&EcfF&Q5c%`?u*TD?+^F(7S`IW=Dy>s_vpgxwp;7wa!q~Tx8UpA*W9ab2nHmo z96#}HX7Ksox3MO(x3=;8GCh0wMEx}>m{|z-z;fb z{QFMTMVU}b?eB zIguqv%)m-Od%@)|JJ;x`Y%ym)$z|r^sk-;`o!?=--)8G^x49q=!e|}wG z^FmI1^X@sfH+c$k9Ddra^8Mwlt)*+V&byb*x}xl=!llP{ach5(#bf(R8!DblMk@QS zQd@W4;zRwRYV}F??jPy;ExEm8UeFG^Rn_6S#fghEl&pQ_y(XWEkyM@hOvAm@HrqJz zx=F@X4wI8<6?!2}mrwk>(Z1;8{r*EM*LQ4Ixp3>Xpif{!*FAUpJ>S2rS!H##yh`ej z$xGSkN8g$snq@k#=brR+yDQrRr|+r=Y47q$ZT!!WQuVukY31Fu{hi{0l{u=p4)-h~ z%=F9}U%n47om=d%o#}GWtkiuo5|y^Itm&z)4vl4ccir!@3;(K<`Bk6HKFc|~&zoU) z?@G{et&*SRB1_cmGkf?W&mV;rQ+T43lJipJG|R^GVapZWXH5pN z>k^Zj_OI&Hb7J@QNp>;w{j;9y+Z3u!TeV#`S7f6G z(<761!{$2=e*b5f7|vxpZOysR#j=9C^OtAtYU%zvyDoKt``l*hZIiE5UG-j@bl$^l z!&RjjCXu&3$;|ltI#O&_-}X$Ad6t{6F6@c&ov~QHemx7ne^z|HVfJ##b_O&Gwge=8L|n`rG?+ z%Z@!}n@*a)Ulei9CEeoq&wruUeh44gChn7~_k~k;+cDYH$*kU!1G0bB{Mxs)=-NeP zkB_aq2On>L8s&IM_^RYtuYfxb759E*y}JC?vfkb)<*q!A%*OhK&3CR{oBUyW$S$@= zC%t1%wX7-FX&3ao$v^ouD9f0|3GLf@l;B6(L{C z&OG&=HxsMg+EgdM4v!aFdHhaF(86h0r|GxBg_0rOx%3I`ZawlJz7$JBo zCNpa7xs~N|k52A5-n8cC3;%~P{Q|GveYL9XTDHY#%YNak<^I2U+fud}?|XiW$&K@v ze^JG1@$A*Ff);rzs|fP$3sGlSUiN*>TBF#Itn+qL6Q4zk*_F>?WWFNx)?_{7kLgFv zHhBH2+|09P<4nhpDgDmZB^MR7l%^aqn%8mgl8vF*?%dLqKkA;&)3t4w@=oWb{UP?? z`B^1J6`v1Zx4&UD<0TcKA2O!?(~8EoTY!+kF9?Ao+talt6O{j zq?b+1lsv?+^wjq6^BLyn@O|C;sMb2>L+=&u>Lo1u`rP`SNq20xXz@>Y-XHnrF`L)R z)rFj!k$89A7vnu5rGKl#HhwttS~K1DOp~$gfkUbL_xbzGvwT-|-SwmU!++~P+>iKo zc9KRZBU9U~XEzV_JiouU$gFDLa-RFQH$@38^Pgp~punoJ>&8d9)uk(L9pqiM=ziMV ze`OO-bNu)>wP)Ru(wXO1-i~#<6cwT4#rM)?0o%D7zh>>0+s?LJTIGdkVvCOP1h(rh zx6OaBzP)j6p2Fql!ahpn88c6wdal~O|I?badH;?(G~B!!IrGWgR*(M-PiOx7zVqwS zx(B{XZs|z1e_OFBa$Q3H)Rfp$GapZ=`nopy_3Rtdyw|#MgnIl86A3)OerxKF^r(!5 z+0(ZFeblVXIa~7AFRm*)cW>Rl`F9bc^c2;LZBNf{ReQfNT5ON?1781QyJV02le+dW zHtUqrb*a!xBA*v1x3{*H8@yY>$L9Dp^s7Cmee1Q`0kb~c4-A^!ckG#^<*AAD`19-b zU7er2^zWi)vTpZ&6{H4j-jWw`Xy23473aH3^m*gf&6{flY8TFc z^82+MuavuNrEr9${69m*m$lX1`7(~8YwFA{&bw!+;LPO78E<8F;=y;cC;E8iF&-dcm&x?k|-r*Cw!R@t$LMg}KG9d2i00XfKW4 zu(eZ6PS1@$zJZtB@0QZ#3CD$EytogABumR z(0G9#--G8zO}pr{ZnV$gegr>Uws-mIx^4Xh7h=ypSu%n7^g73LoB_4w%t22j zexF~c^(oAf+d{#rM=0X9*P+VDBj-F)^7dL^4_x~r-|w19+xCyIV`6R|nU}F+YkTJQ zB&&p?QbGuO3O{@$<6P}n#pea_c4 z=07fGmM>c0ZX^1z)-w0uuIXn!>V#=*zOQsr&0K~l)SQKQRjVJ))qd1|BvwnF z&Hdrya@`%3VXrj8j2=%qkSi;a{y}D*_WB>?Y%4!3_T2Gdd0&loVrA}{Gp{pKYuRoJ zPU*kb_D|%*t#Fyo^LKYWpPLc9cWZ5TkIKzUXZEw~DgN;4`q3)3ZoB43vy;EoI-STb z+3mpjdBXZr?s0s49x~yz5B@X!Q2)2Tc3o6&^&|Dxwuwb7lkRd)-1tD@Q+okV#Dipo z&p|)B-G7)rtd)Cx)kmTb{MS{n-Y|48zYlwG{~*k1sr$-e%)%e#~Da zs>b3+{Yv-p(o*f{m)~xcp2=zp=v7YH%wV+Q_;&x`xX`E@UH{&wru_T7Ov@mA>)H5T zc@dNKoLSrI*gt%0oAhFq$v)4Wp++VXTe%{StMoA*Us`0fz29VpO|snb52qvh-1cnO zF3jFDxUgRnX$-8@# zd**EMZ`ZcXVu@4PvT1j1)_v}Bl?RoHpXW4GF#HPlU6LI&|43xXe+Isoih0Kmho{zD z-7(APV#_hU0~{>RC7<{F)h<7He-r=P(iMm7)L)iGneAWb;(PS%lItIqlnWmDF~ub3 z@Y4ed6X$ubgx;+_yq~8|J*#}v$p^Yl_dfevo~gL`Qlf5p{zSzyt>RBumWLm6l99P? zZ~OFAd&=Ctuvh;XLVieoEcW{-x@>-8d2u#_^4n|ka+lsR`p>YYf1dHQ;Cb#(JwNt8 z@>~1y{Be)zRXj%fHm}f%wB08Z?V|t5=@L)D&WAfr1YX+n@av4e+5GMAOp}cx&K#03 zpHyIB^DAkWJx7Jp=c5;IAAF!Mn|b!{GPS?=7QGd@u%uEbonfA&pF}}jT#;+;i7oj> zGC^18?(b9jc)zhGmA~zuM$GGL7j);ahqgTnR=xUkxwVidqg~mVZRTRX9z5GM|7P>I z=nvsb*#l6Pav&Pf`#L?=v>o+#L~F-KCGAy4#h{15Mkf9`Q# z{A2o|bIb4S)7(mrqncj)UHrXanz7(#ZF38r!nTvIBUbtqZ2F#;b|>m`k^U{~hwg`X z#ZH>WGygdD>-XV+8A1L6F|llWwih4X?a(#jM&&Wa1pWnUd(~q<*dN|49nV;kpY1RI z;#Y6i&so>{UMt;+d~+sE?Cw4>_8;y}%Ww40O#N`aduzSm=><{QXI0PeD@?oRmMqdy z^}(X}c>V6%qW9`f>}TIHzr#-Fqxc`4Uir95rw@m1^tArr_QBO`&b#NQcilL{azkLB zn?wQIt(SoTOIPpRHRVd&@@*CV2k-I!V14|b;fLox-inTFJJyf$W(vLhHE(%M@EdXK z=+og-8AE3n-kf&u1Y_6Nb-!KzZmG{)-ySdd#lB=Z_Few6z?=6? zQI8e=n0(OB>_czMFd6@bzHvf@a|HsXbm$xlwvQD~Kp&Y!qFWO)D){NMF zw^@%&TG7H|Fv(ENF;&ff%CmPPVJ44v|l*i&qd$0|R*HUC!ivHoaH#i?_b-iK_M^>Xdkle#JXrq38X zIVTyMkr9w?stVs&74=80_P<&C;Pv#))3S5J-8OY9Z`yNrYtgh<4dOXM zOAo)*owJe4-TAStcf=1~sUPhR^4k|**s@+U`gnnftzX#W-*#?XkJFAZZYb*VlVGZ} z)!x+eTq;Y?Y~SH|vlcJ-khc1_QARxf`a0PczufkI_;=_G{d~@Uy-Ee&HuI z^I}$oFZ*Or`0PIeXPst^!jJ4n`-P7FcKKs$r@r@kNr&J3mG`5U9=d&x(b|At@l15H zhBTjp1A~O<=WV+`c0UqZt#gb2Q1|bhduDoedh{~8&RKQpIKz5|Nrji!W;*LF?*QvW(FK6R0Um|z@Bk_hU*7|}!3!~RfU34O)>r-;WCP78U*zbDpXS6cbeDroG>v38>9Nn2H&pW!4avN8 z$a$XOv&|cgraW8Id%km)|8ebVd)6B3zZ>@PMZ65(HRWYC>)UV3GbOfd)88ojPIvCa zFx{VbZZH_9%*(td@VEO<@&o-_tKEKxKECUGc>1pS9XY*M%3iP76J~si-#Dkpb7Rbz znl|R74;+>;0=sXSAN7}bS-+`l<%i(M=8Z}p)t24rj;JvD9W>kg^2RwEwpVvXY&tCO zn!JUTfsf&~_#yeWdV#n5WbVJZXYeC`>FezQH+~BJs9it#?X4uWnw^Ogn^n5ZCwWc1 z<*D$5Csk|ek|jHHy1K%A_xi{FU2Uh8A;+}+!}2#@Y7F%nAD)$ZbSu~Wka^#`UvmQ(YmncB3_E?Fqr!j@Am>ehdT{{IYVfBEdi|M>slyR~n2y|u&2$Lg8S<|!YjNU43l z{n_uehm#u*C^vqX-)Lu5llbFw!F+Zb?c${`r)^tXyyD(HgKb?RW%qOwC1nqCE#}&7 z`9kFLs(`6iV%Pqde(LF(iC@B|{!aUoe7#OP!^*w+O!Suy>M$nSDDq3UB2gLF1m9%UvzudqTQAHIq%HoZa!=!aAAec zs#6EAGsrNXI8>7DwCY>7bEs6!601M|8Mdxlyx?^`hfVg9ds$*t%GT$X-#??5<}qEb zTW0@j38TqdQu-E4#_%mZXtn>%_QGYn@sG<7HmkRpTDN%U?y+S)bc^?qXtLIfC7y~b zd7lIQ&wt7byWPC_;rSkW0h8JHC4Sh4Z0VJgnIyZUU@lw_IEq~neGbYaNyx19#e&F*Wp4-yX6$?*oaN4!TCDfc_vAe{r z;|u=y{kUHL;q?Kj?FV^{jvwB&^?iHF#AO$^vi$w}#l7t0+hcW+A@ysH-?da=IM5wu zwCU3RjQEx)x4FL!Gt2%dUO75<=f}Lxg)@TRZ1>td_wcFH&ChCQq@_+wQP3`ZlDfe^utA%1si&sv>t`7YFZ^NKzGFwNoAiZ) z3p%f+PH=OW!gr*;tb69IvU!i9cRcQMS6I+4ZTUd+?X13Q+1hPg(KBzj?~weLqj&i7 z>+m%XyPkOp<)&#m9rK(hoDr)2l-a(rw{CUuqg$Rg&bBG%YNl^UKXH6o^aS>gJl|Ju z&^h?$v)=hB{Cc4$>s1#p^GkPT7U3uea`LaJ$GF5_sTO)vOCUGG|@55qrn&ybgn> z(1#Oy`>Ol2=6+dQxOZyJr9zn`CIRKXrF+>d|7b2ysm#+?Gq-V9Da@H?8raZ~AX9Sp z&ZXtI^4=*n-Sz45@HnEt#J}?2);NnNTRSrEXY@VhN$Co>ap(9P;X6T+K7o>PM<;p2 z?4K$9man=el&9^Hid^o&9-Wm(Zu71&RU46t~cfCL?cVx|tD|1)fu$ABWD@5$Gx7n=k zlg{w;>+HyAIPkoWoq_MZSLgGco_eaG9t)uUJrXH&Mc-NfyotBr&uhiYU-e*peND7HWaqYRDaN~1ismi-d_Z}_ic-s4?;^JRcpFo@qVD4~->$`yx?R1Ap0WaW zHTcSwMSSf4&k)Km<8!6X?`OL^Bpn#EG#DcaimU^?j6_;h57<2YeDdE^`5Q(1vnO#H z&RvvhV`lvGO54+%cVZribDyRh(P?1V`Kq9PuHn?jJ3W1R)_vN<s0+A7{D)cy;;6Fr03 zUBZUv>sjlboHwCDSIZbY)5;|8aXest8Fz)vBbEH_$S?O)3%lU2wG5u%QR9hTo@*?kn+9Tek$dh-U>7Q!0 ze6-4HgW|rf=woFDKQlK-+%jOAd|%>y=>E+v+dV$T@ar?WXf0QHJn8D1u-j+2y!8%o z+_@31QrviJW=UG>c1{tG6lLRWDk*>TGgZYQnKF-^Qx-vUYO<^J~6MGCjL( z%6Hc5-zVlDV7Hk#Z>pG*(1~5Gw>{)pMfuKd;*Z+AJX)LIP$koA`8wpl?QH)wEpe*FSGlQX&$n@GoT$A_l&AZ2Pl~4cI$K}Cb8RkN*6G@NW_B?2)O&@w zHQ4w`&VQPrQdgdS`NN}i%JPdP_0#6uS+Moi&0?EMCtCw8_sg7p@pEmK{CqOC|K0Vg zJ6~vJpI$9JdwZ=LzvAMM1C>k-KOQd)x?&n}ZpXFT$wnqjmTw~)d#}qpDf#}Nf$O5R zf^2?%qU@8vwFjQhNO!l6^slL^zH%^3m7_;Z`nHziIreqcp&98ry$iFx8?4FlI6j5# zLKV+1##=Ks@4XQu)35t8pzg!3tILAYdN*#*lw4Y`W8LTRGi>4Hz&QtPF0LusF`>0Z zorSsY%gH~-yX_)*n(L?CjjiXq>Q~w#>Ro-+x-U{>@|MSHYYp#A%Kpz_m%aL?YN5$T zj;0R_Enhbt7nRbE$$ZVjJ9lRKB*&9)C%z2J-Llc<+iBAmI!D-9Jt7%p3WGeCcY8|a zaUHqLq{lO74qs#4ys4fWt}K^bQf_?g`?j|mJg56St~egGY1&!cmA6(c&WK=v~kyYno@i$EeMt zF~(lntA!4?XvpN*hncC;DeDnPw@S)}gw)^Ztf z$$RsDd|6#C7<)%#^W3-JALwMtR7lt#{b#wZ!+L|ybgwIKk6t=#a;od})+frA!8b15 ziLO6#QcrQm9VXEOFBbor9N?UzbIsfG!Oxo=M(=*^=fAde`+cUBK9wyGjJG+htN1nR zb$6L=j)li5v-3|^8~tZkt<2iK@axL7J1xH77Rb3A@$PF0OTH5ybN57U&Ub&|cWw$v z>-N6=w@9e+LFj>77nUT5DmS@?q}MXNnD{|1j+`6fUuNCg??_c*dr!`I* z7d!RtOuGB=SNQZA``tUURa{+k9;Y2@R`_*&MMds4Q&)TQW$w=R_B$_`lQ~c2@5_ic zf$CC)NlUNv$j;S1Sf6R}?!nbbS57oevc2t8D!27rS$JpG>gS@IchY;V_t#wvh~Cq0 zBx08|r801T`-Sl4*~h6Nhy(E61@NH;9mxbD?gsHJl#7+jr8;Xmbz4J@G>}qFA*h(e6 zcxk_5c}Dz!KGUvpGD*8BFD$xpyZcG8w)MN84i3v%s{22zcsTE^|MUXMzYG#b^SMf= zR8Ia=zwTMlT(zIMKg1qhe!Q)@`o!u#EosqWH zGce9+&GETsJd|Gs#uQOzU8`Em!|}= zc4<5nGDzzElyjch_N?E;pKEm1N^Uojy=3vQKfzXWlSxOvpo4j-?zP!GA6GZp+zfHv zo*rtq@9S1q&2_1tjGB95XQsY=w0UdHE00MIJ0<1KFW7MPN9B*k5d0eaNLv|vt^44+ zZdd)`2|MTQwO`AVeL}Sd0Zzcaxi;1QJ6Sfp71UB9Id`Ie|@oNiZFMhXz&j)y37ppGlRhGDa z{OtR;(Q(XzH(w?AsxeHEnCa*7@@UGPXxo#OHPcgV+|3GFcYl1L?SHUbaBiGN;w;mO z^Jl#NEVn&cUXWaP{)P8hxv-4chdkxp=Rf22cqgIBFQLN!=+|}2$Go;mWjkGCC(WN* z_?geTD(u^I&00Bg7R{c|6X*1MEnaiWu~KN&>82+?TlZ@J_7-&vJ^lA;dGhC7!UadN zzSwjhd80g0aaNqClA*$R(OZA4GK5`bpV_W;=+4`;{K<0nmhJq{AQh=}$8<$cg8Ux$ ztP3BQtzVjZ?Bo`4o#1(KC}IQR}0HjEWdse{UKVj z@w}+!y62aIR-g8C=`+mvnVF_|wb^;=ws-mQOEYdUecEWGlk@ub^@+uw`n@{8oS3_3 z_tbNSd&9f7^GO$bpX@APeEjrf*EfU6(gnD4DZA^1IE;UQjSUoJ@O;wYec$QAFu#ixfSZ(Nb?2c%Hg#0f1xl*-Duf9o5-Nq%lQ#C5+=5tG=saZ{1iv#ko3^3o+{Tb!$VpY^)L zzP)&tm3zw5rVoeKMEnT*rXKO6bNl?j>wmQ0e~?l4n)LT|T-7|*nn#oKr@kq=7&b>H0cqb_f|ynIfYbN2p9^aeyne*hQOMUIKo{zIuAB{M)<--%Rgoot} zdm5~+Zhm^>2qTwutE~UE&8G9EZ@XQRS!B#p_k2!&)ZslJOUk|M&KBI@zS6gKs@H|4 zXX{P&rR&;km+zXla_+U+>m4?`r6sJ8);Y8;%g*|O$=@^WD)aa5?mx9>+T)`}r`4xT z_m!|euvq0v@awQi4vVg(*O*D4wXl4beR%EMf-mvLtLs&&0v@c1ja+W=qN?%7)E04PTXAmsqUS{NJFMp4nMe5V^k5*B~?x#&uE1kR`C+}DAo0?p$ySaO`RvSGt zm6`J^X-B;1hrL>NCSCk)9nNqy{C{3t(pFFgGcZ5XZF2XbG#4fnN3Y8@IU+~*JJCO z{zaD`h0Ro9eB9}69<$v!=08LCp8R?vtu?QoPMjq2pP{wl?)oFA1x*TkJ~>YPdAhmh zSEy|Lqc>b@^KmZ}0KR+4p%i_rqnW{sKEQ?_YWK^*@8?62lWG z6;R!ILW3T@sDMxEZ5$P%Y6Pr`^ua}Q{^2hPfdx46!$7goz5S#esK$8Jq`0K9q z99?CRk$vJ8%5(Sa34dY}`{>Wdpps3ik7;{Im9)yK_n^!XX*5_imXm(NUW4FbEyiOTiG^+~}O;j+L9{6-~Wnxd4#q+&& z>NCLdr;k{btWv%XQ@)ak%V_=tu6^lIK&EW zpL_PYz1POvyqF}XrJV|*kNZEYH+7UXSG*CV=3Sa>q1r#=rpSqhmEz|$7QDBfyzu;` z^-c;#63cc3?rxRke;Ca1p#7;q`xH%OTi&RSm_^qXGH*T>{)Bb@Hch3^k0+cuwUFx* z$2o_!f?T_rE($h&x2@ZEWuMyxro>3M@PZTetulKL&sb{PyZ4Q1NS@Pv%d?i-bPmaz zc7}2__B)2py8EPeae{s2ABTiGQDzsr3+h5zO$^r4FYj3ObVIS|`AHMs2-Qq9dpxhe zf3Mx02A-s#b4xZ(-DOtI?-RNrcj-=sC4qA`vhY8W+bXTl`KL3bm9M%g@RaqWBTJe0 z@UVSgX4+}->q@zFV&_sP?hT5P{&$bB^~^12pD%sKyW{%Pn*R)9Ek;WdE0@Id6{b!i>RL)XRdfmJBzOACymKGM=exk_aetw#P^kvg2-zT+jJTXam z+Q%-+?Wdx!t>UCZH1o&xW)Z)7v(8rPdDpIBo1ApQJdg2H#WAfp4`SQyD{|CD8d-I@ zYDlX4MNE?QJmK^?C?UP)y4%CuWU763$sak7VnXLxiZM|y`{QIyp(&LntwT9&5ImIE1ZmgTAtU&*2hFrPCz4oG-Wa?HQr{{{qFVck8jwtzX7dNXNpXUNd6fr zso!jOoZY%v+wftV71wIpH>-Dwh3d|qVe~}sZREL49#PYm?9XJMssHYgJHI}f zt+w2#eVX#c0`UyXuWL@MPe@NGzqR`Gi9644t@f-))>)GNW6HY+T~DWJy2d??+#L9x zbC1WxD+>d6Rwev;ws77zizs)Yyj%X$&zZ~p{1p~_cTdN;ln4A%IiAS-ToFn*zR&5b z(vudo9a)dpZP9f6s=sc<>0ORb-b>2c`}qgH4_&@1;AxoQys|%c(yy)FGV!z)ThNmE zQ>C{WXiRxpmvFXK@>Ol!)WcezCoY|6eZR6geEGX`T&3#wZ!P*9<|J`vp2*a&;^tR% zTkia95LXaW^{#5XEO%w${48xZzDs`M@|s^)JfAE(Vac@T1-G~NTw1N6a9Hwy%rx8D zOoJeYHX{y6hR^TaExA%9k3|;tbO~)>JRrX-$gRlHzHG+FH62M@b>HRVqXLfR+04Ac zz^>@8AlLlbuSfZvTaAHC|GUc@-k2tZBr&ryuVy^?ZTZuiHT#u|8IQ|cntR*r!*Z5~ zQwxvpHS;(bs_}>I=f;n=i=UQnn&5HZyiah`+tj+q zn28OQBCU-Hvv-v|nz2pvoRj<0R?c$*$@7DKG#;z}=saz{mFxEO%&^mQ66Q!1IB*N> zS@rpRlx~4wk%Z@tL^o%-D@TH)b&j0yk2}IO^@4%qp_RW+_w)qUS854)a7A;KmHubo zs#%yVxatYhDR=e8%OV@y_n7~3VzSb-uskoh+^BD{7Q3I-r5TT>JbKJh^0@a{t03=0 zm5xW@VXiV8Vu~Gmui9*=n#b`rh^a-gyp7?(^NnAYlxQ~fTiqNg_Kks=H$6&cQ<|!Sr=)n5GKJO`t|EF zkDU?+4?OSEVOq^Rjq6~?LD`SDCe*A_o-iqVLiGNvyqy-T2M$PY?g`wn%;5LN)B06O zatk|D^o;f!zV1r4`y=zD`Mk)I75V1bS`!bb^)7sT=aQa-h4S`mv%+PMJ8eAmR+4>! z!KuQoDIS&+dRi^)qtarhpDyZhdg|~`%e~ZIYlEcx(MxN>RrQwIESjnEWX>11`P`##X5V5LAn_%xYGnaQWt9Sc5xPxr*?j(1Vvy;CX|^vs{GzH%koeRIW& zhx(ZMrutW}=43csn-!XNdqcv5$)9?{US^nlRju9UnZUKeGEKe9QOjg`PRg9b4u#zB zOT^jjQi|A|k2Dn7P5Ci*o5XDuftsxr5_Vt1d{*B{=$zVojDMk?@vI4(L~iTcoIIyt z$D>)77W%%4u{aR0e696a>sxm%c$RG0v@7s!L2kjl>7Js<^&GyI2 z#~Zd6ywJ_&YRz1?Y;tBmtw_)FTl-#qNPqM4K|lLZnX-A3TRKHj%U1l&UN_z4!?T_x zCzSadv}KYd*55FaXRmP9m{igBQRw&LAK5?UReK-nx({wzxn>)J!iD)w(f_oy;Flc;&oCczbcIWKI_m8jf~tI z3)SD1t`eWMZfm`Ppte@y#4qcw8Ayf+>n%Omw3sXKlh=QSy62~^pEZ=2`R`Yr|A}ku zo|j9WR975o4{mb}F!XDBeac^rDSTb@)?{bC6={)Ai)Kpb9Dd(*q01$3=bg9q)v~Ww zmAu`(bJCPot8Y$jHd%gV#-zpXcG~c-6}o%lw!vpT(K&nzF0WU)ctl}MU&!Mkv17HX z=j_?JJ@cfB0Kem{xmtC%cWJt=YumHyONOB!qkrIi)2K&Z?zkM;@OqMUSnS7%xp!~w z;65l@7IkMO`fbYr|qE9TK8HT zpPXm?3fs(?uY?re>P)CzQeYR;$6Io#e{?ViQ{Q-9hif^rQuH-NhdpvogYs#uCxi2>ctl2hM z??<&y-xY&tvVSk|zxG_=o3Wjr?}2>2vdC-SGE9Reb;Sm`_^%Nsj@7Q5^mD_aIq5QnUzbPS zx?{|FuArLV>!P;yo#)@yzO%Vyvudeb?j3dcbF0s1{5d{HCSlgqZI{>SKk+U!Y!!H3 zAzQn$>6FKvnQrgDHM|a3wPJTnf5y$;)O6j&Gezbu-?6$N+UsY`q-vhD^-Fui^`9Iu zvf3!Sa@~fP*X@El=NUQ5zFHbR_h<8LueZH@r;L`IkS;3{H`!Mbw#0a~DEl++E1_Xm z)MmYY@{r-+*Zi#1I}2spwT*iBq_6z8^rYI~N20m5m#+U&QH!|abcU_)bNPzAQuAr% z5dmVy9j{#TJ*2vM%c7ujk6YCnG&jCVRB)Vn&+!iXhyJR278z@kTJ~+Vy;u}(cdCL;a(TN z&+WTqnd^Cb&dWUgnr=<0i)O7hO~u!@CY-F>CiHe%_c;7SF!Gi@^YPI^>=@5wfpwj^Eb7vdwwCIXn9`nwp|}}HXK)}*L(AD z1Ea#PtFrz__-0JZn_kRUR1x+0_jlv=7f0 za(e5!_{GX67rVkcFUMzzeV3l7&N{m-=Y#*&fT<5R^rr2dZf}3*g`@1N-etR&9Q&8$ zvu4enb;Uofm3P_r^8Bitn5-%wu!iGr_SqxPMSjY<>-xR2;B;Ma>%`9bN7}uCCoah+ z1phwsDNDOIA=0Jh_uM@-E9d!E-hH-yg~z?-Kcx6=|ydczOPw`Gq#AyPoZ{ z+b-xAH0`@>#skeI6EAM>F6B*A@AsJ*D&#b2rey+aYFrj`z|Kh;dgW6eSUzB4k2=`) z=+?2b@8Sav2Gy6%DSjVwWS_;J$pIyOrGgu72&l)%ZT-As&fnEq>%&U^M$NGkUU@~m z`iI>GvmL#C9I}Pi7D?^@mV4;Vn`sIm0_I^NxBjgzV?WifjOo~7>GrkJ-t}8u-o$Ka zU-!&zF8k8T`uOFV+r?Mue!g|lxyF4>_er~p*5dI2b*Xk!=O&l0%DTQfmGySi`n!1# zTVt9elF~y?uq*s}zH|9u-nDx)6gfXl3jFw4=GS%68kbeKVs4eH2Ch82vcED_rPy}w z(JPaZ{1!K4etgMv#oANvW@Md9@|CNvfA;RKUFNW^_<-Hk*5cK7?%&%Z&am#_r+rrG zTWjv=ZOOb+US7+0<5E-CF8#Z)&Z7M{_bfGL{A?h5K1*Ty%txP9{io?{ZoUzk9c!17 z6sa<~O33d+W$=s4Nq2s3JaLL=(mYAYjuY&cKdg~0yZih*Q&+Tj8rQdHA@#aepU=53 zO*^%1nu1GOy864G&*!T)?}<~8OSpALT$ZcqSx0Wk3q3K*X94Da)?S&vaLp?H?6fVi zx5T(#sI}`V8qR633M^lK`();Gw;L*ne)Z?HWS#!q(~Qi0m=g9tulW30hwG=dy_KHZ z@%ErHqyO4ut0{@C#o>#H_t zpPnN)hmC!imd3P)k-7Oww-yu#H)wZ;t(DBqHn?+P=Hik{okgYnKdx*msLj@kT<0=> z*Y+~SP1Zu%ZjZfpeJYR6y>Zv?&7ZBoRqrF#Ee{fyVD_=mTU4vd>laJFlg}=TQcIl` zekv7Co>en@(;CUh8HpPwZn;`kEwR{W_lchtotrQGy3%+_qoMwu?C!-=R zHVa+UcH7Oobz1I4Jx`WWlaJLV!D}A5vKo2yEh!TXd-X{r;oM`Ee;+hoep&JKx^6;P z-y_~bp@-UJ`s=1nKBi$ScVxS8P`vQnEpge#d3A>KpZiSu;wN6x^V?EEh9P_Yw2;p| z6L!zhzk9Cuoo3>k&LH!t`|=)dzqY7yYgXUo>(89ZZi<ro;A;UcBW6U>LQDC*LflL+f(6Ez8|!-fi+a zmUYW$MbOcXCkY`FG+Wzlc56OZB^)L8&F4kRgJXOWjh_|2e_Jh>QEuq`cil&3ffKRa z2fr@&=eu^;`0Ueo@?9GmwD_~tjA{9bW# z^)%h(hxKnIrdvCBUhP-D!gc@E%TsU4HcrpZTFvAuc`W9!E&G+w7mKnt8MvRgp~5Hr zVQF->&3TD?_X;emcRJ5A42X)pbI>~K_Nk+D7%rJxEWV|scl4O}jqSZ_pB>s8&8x)o zR%x29*|VQEzXO=_R33c!ZZfTW(v4SY_sqj2ex9?f)w=p@u5Rb&9F_FQAChu==3JVl zX}YoQ?93TcW0p+HKlxmC)g5k~H=RZIJmrgg3T}K|X1n-yY+~-*ZF&K}whBagZG2O? zudL{jkd;ssBVAG&s52N zySAOH9$nd{sV%U}P2i!E_=6ReYO|l6w7qmFx9m;emge(bvkjK0ec50ae<%3LuM3lp zaweUXBiC>16|`9IT-@=5e{J}@(yhHuGA2x%lg~VVsoCTB znR!QB${A*gPvB>$lJZ!mVr05(u|WQGv#0JcpJ$!Cs`lh`$pMKp)})9dEsOr#?%(UR ztLbFUW$r2N?a#Q}%!|9u?MT`*QS$GTx#G5lul+Nnp7Kl!pHSJc{9Ma1zxO$Pb6?x% z@VQps&ES-kb4gX0+;}4S#+6+$=7xu*@3sz>iq&dP%@y%8nHsy!&)n4n_)ylWEIB_?k;b67#<^Yx|bz4<1)~YaOG*9Z4>R5e!k-}nq>2dfC$z_ie1c)-(4Hli+NL)dsgtJeO+$EN5`?pwDXXf;e+#&NuO-m?|nb=SY$zh!Q;C0uYJXP(U5Co(DX z4vUJOeYtJ7%Z5!qr_1k_cp26<(QHA_rHGRvjm(NKf}8C)bEcMtbBe!DEz9J(xxum{4DIq%7h0RZ@W@HL}eOxuQYjYC|b5WsPAssoRYPYc5?nJve=wgn<+nRQD``F-Fe}Q zLsw<Ivi^HG*L9*qSaU)DzN(0Q-p z(RXvP!_kHP@&@wP=Bs>s5N*OH+uWLytNvki!OM?Xlih{m*A(gTeX?5lU;_Kgm`^Ki z-sW)ARNAvocG5}ZV(GjSN#-Rd-iIxmcFQ}g?Uv$R&O61E{FiTyzB1|BHI-SuRmWi;vk{FAL`7WIuEN{6P3`wz=9_(TU~0jq#qdysLv;;$H{$`PpV$2kx46 zjQ2YGsW3@FzSBQKPu~}fzqe(AW1@_&Ok{d5gOl-vU-O?v&cCtj=fi!Ob7o4k-@C6? z+n(r~@%Q1E3zJI1FP~d5`R5ApCoW&VERQ&>5>^zKC$MF{w)Pj3yH2&-haXCZ?vGcQ zxYIc~^V^CV-|AIc*Jv(^a#!;F&!8**?3Up%SMBYKM3zikzUmJ!Felu4b=Jk`8_i2IgY#Wac5HiY@nF`S{a1~b*{nA< zIs7!^PH}(y(xih+PAC0m$e)zn_sIEE`@i>bT6r@pUKL;eK2PQ9yFII0D?%6DW=U_8 zd_BKvy2}Ta^6%UB-`+0dSDwPCDRDfx>&4fKw|9>iyEq%Q|8%qbb+y)#wf)RH;XJQN zH%i+3r*OUaNWm-y(?{(HlDSE@SXkI z!v2U^S6%<^>Xb2K+HO;IH9Fz@_h--UIZ76PHi)0{`|*ae>1kh0^RyG=G9LGrm`i+N zkTJAdwCZ$jecsv9oQqb1yF8}%?t3=V zd-uT&M~)D|9l;*$)*D%VWpVJmrORKWP`!2cHPB_EC*FL$yLR3WW+v8JQ z5$q~v7Qci8@96HaUaz}2Q_W^i^pD=^Il&j&)lQ~dE!`@g*>(L?(8C#gJ(}y+WlOaj z@}AOXG4tHjh~IqosNK61$`$iQjk!QeacQOEXuRGXM_s0TSe*t9Z5b@?eBeCJxi`t^~vTtKia}(P7@IEJj7JR zU+h2S&4S@|P!G+mKf}*Ew|8tccLX$D}eH9{go^ zAK<=JueWU0l5Cz%p(&Hjtmm@dJL{6S**3%0mMN3pZFo|3d6Vi+k1k!?mi;z|p2SRi z+9P!HnCJNf?YMLQP92M#uH7Q|fHjWui``VW=YD&qEHPZH;`5*3wMa6%Ri`S#JW#4?8C#8EtWsS$J+P%JU+doX) z-4mlzT)D8YQSkxaOj+#(^Pb6XF`JyP!6|X1aKn?TIp3Gs$zNS7q#N{ENi}Dq4D;KV z^P;6UUWAw`ZT_(0cK)i{Tl_BWyZQFEC9{nDxn)=_vu(>R=koYx>vS+$H`+3;bB`;xQg*XhZnG^rGjF@~6l2%VoeWPx zv`yCt+CJI#=Hk@j_a%dGw#H22OxQU~dRz1&@xKyIb?<+Q3bA!;+`dJ)reROS$-r6j z%IxA=vwOWm1SN9RIHi`KRbL6Z{d=~=(O;F~3q80vtv~Mh9kQ~1dGvYNy?2}IuN%2J z+Wmd0dNKX#n|1Rn;!k^gH)s(!wR8Eo89RN>3skH-ezW7TEp)i-Y(q(xY*0x6W}d zUV8fk?~x1dKV2!>_uxN+*V+54O+2NX?&dx0d!{TglR-h``RgBHxo?|pd+O|qKB-`N zS7yGp`BJmbzE_gB^~RO-=*8aLyxZ>hR=xg*Z_|(Ds?A>hTI|ByWkJ_@>U_!r@64O= zr#i^hmS?Wp$5d9qZK5^1(|e@aJ-0Mv+T2{)v*FxzndUdHuC>eWIIpYidi2OVO(K=| z)Bbh#=SAxeS1p~pZRwNQ6$`Ud?<7xWvHCn~d&#<_yEomm-5OISotVbjDHnKB-R9c1 z{iQCqit*pyS z;eDQeYKwbDeod%`SM;RkqKm9D;%;e|&#La3a7K*Der>|pN7~um3(hMo5?4+(D>ttR z$uH~XX!<(W;P%>cZ)6{Qs#x{;Z-3;i4>#++%0E>o@cgIv{&lEC_DZ9v*V>--KYAUq zLu%SwW}U*hn-|M;dc6K(diuwt=dmBzR+~>+n=dK9yOJ-k_;uH|>jH;d{7aNGIE}RR z>kh4du_>c!di%S4)7;XeokoJ`S;@E3pUBsg*xkpcXFOP~i z-mpNM<6!9@_hs6p?8@^(m07BIq~5Gqxy-#PsWFxHk!8T&4<27v{d(V1QY-fM+17oY zsWH>HH9TGX`0~be@?Ia>kK|VS)&{;){S<0*P-vUvm2&3WmoKgVQT=f5nl-!DO#gki zTXx;kvid!m)mnwueCFqdMY#%P)hT@3wlnS5x#@+{w?(WImGvTIa`U6sigiD_FW~km zCfd7T9pkL~))C1++%1^@XfMCKPcFVSHr=yzS#Pk>vP+@u-zR*tZ(kbQ?{an1b|b|u z1BZ$1@y9Q7;#7#&u&D`d8skxJ3A8|5>e+dICFnr3EJRk@?dBlb@VKlcvlXxk!NZS|-iD@8Yx zZ`x6RY%l3;*|`4f+T%?eH_y-J{Q4x}pXlVj-HF-ew;t}O{wQ4cRk-!UuYV=;3_iBa z%}x9MtM`f6p_}$sJ00%bZR-2^WnJ0f$7;Q+b2eRmH0j1_hNl-2JHPzN*m7&9UxDAT zPjM=1HLiSluV#DGMaM3|*8b3v*^km&gvuv<5A=u>VCA|SQNZy<^z4s*$Lspj&o#XY z>k5~*Ntm?co5Yf>KLQ_~ws|FW^vbDZ=^2uK63KJ;gTqDr-x|p*uP?c{^J9KX=~=Oi zlIitZ_pDh|(ayU0U*)Q4R$+U&RqtLscBA>JSVGa9s_$omcYVxn{bOG@?Uq{8n~y6V zDR4c$e7FB)U`*CO&5t(SGP6pyO)xW)jDG%C<44&a&u2TY{$23#+c%GL-re0Lzplo* z-ShU1QmlAcnwK2lx}InGmEU2d)7y0y?C>b%?p_($7CI~Vbd`M8&5JfR7gm~0(@~lJ zqx`vj%ysKIftz}kY~@b<&HL`PTbd60xyS3OlW%R?qiC3$cI8!g{jyiJ8LcS3XD98GiJsieWgUtY^5(<$%lMhFadj zs`owb_4Q}f>h4)A^>zB(1LZNH+WRF`tTZ=&6x|$q*eIV(PSk(r*R>DZx6bKN@4P?d zZhiNxsoUnOEnI%v^oY(;1_^fC1FH-w&L5FlwRg>~%*<~=B5zP9t`dzBqK=N+ny-E%~zG5X!Q!lPB9ZPSdHGEhEM@`Y_{&_~t(42_e_brLeK)UVoZv#x4>{?cqom2XCKEu+H{T_1W^ z*w|f+j$-=6bn3j~fyAD$vi1k>1z(4EOg!4&7nHo)@ClQ3xK~Z^gB2G;PJFT{n6}+J z)5^}`#J{(`54L>_+qlg3%7s-2n_h3TZC`H@|JvPV(r%%pk|y!f4}9yFF~98Bn%voX zbWMzq$CJkwu7pX2O?P+D?N$ojZ)d|X^#H{8xMG^(k{_TZ>A#hqP|zx*o{ArFzRmF~_|1J;$#zwtLlWoAlC! zL#>!u<7U3*eZ_dEy9d6$@2cImaD@s-eiB2+r^~JqPxJ`+YW3 zzpr^}os}sevv2RRAAR3FrM|c8EH!lfbe_q$4J)3R%;J{6>Qq$=M1{^NzK z)B4b?#S5Og3EiF3BhTeJ>-OzfZ`nI5et0}^Zag0L#)i?4HrrR0d0$T!FWY+Y(=o}8bIR;HzM4*19Xjjk zbg7U>-xT&-`f}IYP3-V_t+X@VGEZ`9o|`%y_KWonFxwpC)m~A)y^=G?ijDdDwXI)j zrH=iRT(@qPXP2R1(+^Abwb>a}aSgfNw%vc%naMfaKajspThr^rR_V>^!5bzW^T^G+ zD-~~EWWvs~y3f4o@vp8++jq?O+7h;Tcck8phq2QO4!%5I9G<^y;x)A$myQ%wE{(Hc z^3Q3$|1z?wcVT;gZ}^)}%{k@0YY$qi@O!a$>V%tHXO{fd-*|TEq)##P?Ver{>*+gw zp*rMy)w#JVjiG}rj`yFMro7@-jKF%? zEnW9_eHJh}VQafLJK9Gx!F5ZgbmvK-6Mq({6!2AXtz8)xm1SOdTX)f#42E#~BlU-t z&)g>FmbTtvNBvvxsU6mg!soiT2-vn~<Mc z)W%A|8;|V2x$iB#CT1t_;ofYyMTf+8?C8&s{x0P3qJDQo)co${)#hE&#wsljXW2he z__U<@+nSTP;-UO2B4W2#&lZmMzVZE6XwkWPL7R_#$L7r1`}d8|tH8+U?utAAp7uN0 z+WPvh@myQ6*ssZWm20}ug5xnVC1GnO+D%Vhemo^_&$Z9~)3-ck|MPvt9_L5DYdy?n zCNA+g~$TN4!bDt_N+|yk}2ac5Bin-F;rG`iyB&kw%5z2?q`=dG=K%mWtaYdfW9K9MYE-4t4Uqbls*08dc{rcXhizau&qc5d+hh{GSY}662=f2E8 zG5pc>J+@0KN`BNmg>BJ`2J*EmEh}eJGBa---iPZKibRmD=@ok z;YV(!Z<`u8ScWuOR%e~M9rWR# z{mnS7Ne|{vd#We1frsJEUG~C|mr=JSt%`lo*?Z>F-Q$IYIZ?WZ+ps1y}gg@)~& z^<>Mnj2EG&-YH-H71lR(#mn1KmTR6BJeamah_U^=3Qxh}OIyFl%6<5e;kY(Ze)CD4 z{=AC{JO?KCOnk+b>2*?M-LaR&*;VW2@-5cg*(93V=6u+L-EZ#xxl#Lfv}LIE-MV9Y zC9`4EiL&&|vYo4L_1_A(dBg3VOV$#OySqMKTao>}&}^abt=sLBG^WPYInCjFyuZpj zQtZhkOHbVz@xNXW2L_rF`WJ>NdrCRv&NKf~IX8Y#Y|#pN>M6FnwNHvD!; zY0W#hc}}bR`j@d~J0H%?d-U+D=ejF5=NO+h;@!k}g~=-USDmTdHSZfDpW#m&tA{J#Upiou}MX_j=SBBSJp{8mS0_*>-Fqj^u=6} zj78F!0?o=PPutkczPvxnWi)%olgGZ1(z**Xf-|*BeWTA`;ofvYS%q1y?$hsnukEYv z|Iqi@UTb&E;po~=ldL~2;lFa-xZu~U8@^1Q&yL*Gndnw?cKQ9wrW-RKoVHxc`fb7e zSC80@zW(a>+FkVSL{QO9iSKo)mrTBHogL5`nOd}n@lST&{=fNAGflJSdOeDj_Puaq zO?a`Mfx9ek^!!8r1UBsI`WAUFC&@d-?PuWbPt_sQf3;-TUCz~vynATNi6S;D?c@bt zOjl3Z)^hXCj(;*cFRxwP7P)gq?#%L(26vzDrr9C;E^e9T+S&KQsrA;)dkzoeml_|A z07tUGZt`2EB?zvo9ind+e# z<#W$)a+I>w^<(!kXWe@2yK_gv;^bosSXsWlK?cL{x#kXH?isJ9uZ0OjtQ#bLahvchTf7$Hm(}H>*<=jzLSyD3V zeCw8H8C%}-sqUY&!ex>DBiqw*SF-~@mMyxKyS?pU#~o>p6Wym6B#s$g|8;#<#r{V! zR=5dWV*7MwLY0u+hbK*Zj_mAxn)`+9bR1V!w7vTs zv|Fn8@7t4;K6((^F;R^+m>S&WLR)JihSzy7f*U zwzWU}&%n=H_1h)aiBm0Q+6^Ao1WujhSANMI?)u!%^YT)KlgPD&5zjN86dW>FGkx-~ zQ$c3pN!dPE@3lYn2XWfIiE5dsb$qIW|8!;Hi>|4u>I*Nf?pyjc?744uSl?&A%c`4Q zr@U|Ddl8Azhd7X71T4SifMYXn6Df{>Xk&(-)@s zLK(+S-8qvwDcUDj<6ry7e{({YUfiSkV6Nnw(ss|#of9AAu2ib8fA;13s^(4M_ctt6 zyS7U%IsehguO3e?oe5UnsN~+ct*83&-jMEtyY_9Y5W8Y~q2gqjhNpv7Q}&8IJGNi@ z%HDk7megtXyHlDhZOe`2X18IkV`x<5~U-V<~kt)62JQp(yy|qr5OB%RjzMucp&m`sQJE7GgZzkT1 zs@Uw;W-=?DUqW!UK-;SYeC^j3_8*h_-v0H)*3XIgD|Et{-0yQJCfNov^cfyF?(f_a z7PkA*Ow--luIbHXJQ1P0phruQ`K!w3(9-J5tSgE|W?!>;yx{!On8ex>#ji?ktv@O+ z9rt6Fq)GMM*)wWqxUk(x__OxQ*HwZq_8ENK-{lgguuoik@`gU`3QrEh*Z)i#Ggs_A zwwiU{UvsbvtF@MliO4FMgJM%qb9C-x0U;Kt@q(sHs5~L_Md!SJT0zu z4_$#;f1>m|}QPw`IO_-#ev{MoOn>L*9-Q~Ver zr@3p_o-5a+cd7+M1%96v_{ZVf7v+V2RteQSTouM!_1^zS=h9n^i9Et?cEKEnIGf(; zSwHw3vL<(r<3itDv)L<-J8$)a(`;MzZYenbdyYoxYprz_?7P1Fu~?Je z@t;AWbbgoB?H}v@eX;3#a3V@?4Lb|pVcXT+yRL*~+dp3RZV%D=)R-E#^@otags`y=Zmfr2SvR3lZ+eEY=8Es*oc_uvohl42R67qkrZdi(_obDJpRJnbMe0u z{~5&Xw133K3%!iv6~ATjjlVX1^(hv`tMWPB@-w%exqW9@t=%`q&uK5UR?ocorX*k1 zN>1&*Xvy3981D#WUfU(n4pYr0Z|R>RWY_#r^mf**W37*NOb_WkSY8!za~EgOdm(ma znU9l?*L1xoiNE=<#?REAC1d)u_*+qOFUwCfrtFZJF8Jl{_T@GY`sQlSx$@=rd9I9d z!F#VJNGvXzcI=_ir;V?h|7aQh>UteBTVS%sSN)c#`yG4uKV0|vF}Hlxy8RDX_Rq3) zcjyk8#`!iiGLofFWDf6%7=1Sh6`rf-1#7}S96!8QJM<&};n(p-pTl+vpMQ4O?DXt1 z^%9=_ zZu)P#8jTO%kFG7M=I^>MuJqyR+^)Q>+a`M(|NPzjs)8@3p=)>>4o*p@AOB4YxgIjvwal-1Yv={*TI zVF}+E{+v3V%^r0)G`I->__Z5>(kz5J$Ad0G~w=#;Lt0~$5y;K zaM=39CeFUMm)lzI~75n(R2~t8c&bztxqyr`DUZ{*h4bG&a4S zGY7WRmuCh@JfCOLFI-{f&tEagpXEpMp=ey-)_mqD)b=`O4kHe`8Ur%wfy))>6hHj6@ph9)i`cTYc(7wWzS?0 zjfsXGC;dOpbldM_4Wv{;x zeDJ=QjrE#}mizjxTkZMdy>kA^y$(FrufnV^=qWQZmBDD)*_lZTCYkr-)^L9~w)j5- z%da2Xm;IQ0{6B+m&RZMf$2S&l{g}Gy#earOtB6*~hD6D<`@1sD-aeME5YSTXT&m@J z>^rO2&1dnVTeaVd{h06G{fKW{jc@Tc!<<=NM^n&qBXTUl(1HVTeFDgy%{kwC2%lg9|`wU;+ zTHmtl!}qQlyKkNOwJS5`tFoz_b^#UHAVeyp$K z|Dk;3mw9t(ua@+UV^dAG3*J4ub#C<8+@m5X?}8juLj)TqIW3KJcF+E+apU=08L7&VA;)U4)t>3}bqPxaQA!%)U}`eesXrkM|#*KO(K2t>3v{ zqV#p-GMDLr(XpDje^!QQcAw{K(rnr!Zo!hrQLrSu_mAhEi(lircC}4j_G8we53hDL zsZ9S>(`GH%em6Yuk4gh)+;Qctp**f0E8UhYSXq7D{e}3U`VM(6Jv+%C*^j~&Kc4;i z^m(3){LDx4TRc+Q9>pst2s=I4q-ilZfkBLOyRzj^_haI_*pGDop5JN5x$7f;b9&MF z700tzaOc{wrYCYVxIJv-Jgj)jsHK73TXXU4AC9^<%;ihsPp;3}sJgD7VV23Znb8f8 z!V~xF6nH-1t2nFspW&cALyh8;%>NAXc08}QS6!WZS-PGl=GEt@&PNPvGuhlY&b>W8 z`M6*9q&dpsspU5=X0A^Ae#HL9<;ZLQcwd^$->hQQ-m`or%RS9%aiv#E+#6?kJW+6! zJb3GD?+tYojpL_(z1yzZ-zn^L@sE8)-tzrsXET={IInv6NqcCcTjZwY4MqkPkM_IP zC(D*Q{h0pIJn+N(H`^cUTKn&5_KxmU`dEA?+UHwP!8ak+6T33b)K|}8Si83)ZN1Qs ztG^|)C;z)5HvK;XpH1PC7xxsbKF7qoDmpGX-+3R;>4LaBb0@82J+-ZDgUY+}rt74o zHBOa0+jc|NY*x9={%;u{{QGSRe|ts$F}ZHy>nA2DB6X_3B$sdsGf!RzJW<(1veAVU0Rg-X0iIaSBE}S z%bLG=zPkRPy{Wu3ukcYRlXW?7n{M2HRdiByVY059^t)7Vt7!b!^=#hdUBwrk_t$aQ$ca*74(a zb@Fe8iemQ<$JWiNznNEKYa@8Pyl;fpEegHrex65Oq5DEgUCH6}O8F@wE|Uyd z)e{PpHaySx`pwqfDd&P9Ye;+qa3ctdiwY)4SGcnVBR#KeJ9)>#w($^Mm+0Z2@ zKDqi^{}zwaWfwOdvGq7tRh6{#y83S&`&-p+2N(q#PjVSfbYcnIv#05nM9;K&ao2M8 zS(pY%d+Nr-_}1_Uo40~U?^ADFT{CZ$P=8~Z8(e)`Q;`z2!MG@!3XqbG}QbC#f(g&Z(*n z*)DdPeSUVS)=@2owL{I;S+Xui?2$kVw`3k;4hhdsKTZ!TdMZuDz+dRF~yJ-6Q4C#(Zx6OEt?JKDbRZHc4oTR&|fv za-DIVxixD>l8}=`!ldfz-@&_>9M$LSoU=uX{oD?Q{o6(D=QyqMOuBSZ@#c&ftQ~yq z^NK^0r)6@?OAmU^p5Y_x^twWrp?Xy<*TaSJ)sL%PduN`ZKr(j zmb1vj&gWNtUtV(~nqga*fVZ}1XI$X!2CM3zztbK$eEZLkH1QzA;x^`DxjR97XS9WQ zindSl7I@CGy=vi&?!c+M*Ys4}dLM=KnZz#Sd{gV|$8%IH;;Pe;g>JzMzna|EHHkYf za)PDJvRFa)(0ZT#s%aYkj_d5c{#H=aI$}Fd@#R}!U#@ZY~w&#?8zv54FkE&raYksTF#_rq2dAfdY)LL(! z;&^YfC8-tPIyT%?C@O4V(>l9z&#sBdpC0Kf*cr+0{664B>h>^xt(p#zL?ef{{lNiw z*_pokmL0QQOEZ>kr2rff8^&oJC=v)iA;-*5k^ezjMh9+o+IpDqNooa_iw}9Tqe)T@l&6A|&e%pOQFL0WVr%tp(56?>5qftKk3nm=;$gjEdb6SV| zJ;ejTx9yg#soWsayY`rn%}lR8?-Kj9>Cu_*^NnX*OLDmLLSpW{uV#woSs!01&R8d> zc;k29)vRx#H?us`YtLr?UbMeNu1Hho*$$5|%cnhOZr)@1#Gb!2WJ9ax1mB%?wYRy2 z&J^F?ruF63v3RQpDYekpkNbn)M;&@Ob;FA%J0=BdAK_wR^8EYwUek#d7lBDBmRfh1 zU;92VXyasF&a=9wvhr1y$o|WVBIN>~AL>8QyK(y25>2!AGZU@1oRWIX8o@t9r$XZU z*X4ej4=u~L&zNMx@?8B+D5vU2(?_S7PO}7@;wav(p1isu;c>)#+8MhpW8e#pMQuuyHuI<42Uy1!WQ>MnKH zHJQn{v%o&;>-^SDi>9{SO6V&H?YFdBw5RFPlU1{qO>|$ z(I+)hC*9q%lkI|e?X6Gq`!{gcN(xRl{9sWj&V5M*1F^v~ZVw zv9)uV+LG4TyUJbhdQSKE@P7CBH&rIy=HrrSM}Jrc_A^}Vo@gAkrc;2AjVUE{_NBd2 zn>Pnc-M@B=W#+M$Cs}y8Pi$Iw?);Qv{&z)ge%dG@B(Gn1&bul^>nzLsq#YgWKK{N} z>G&cmduCqUS%q!Ac`AMK(=%UL^JPgDteE%u*Ok>PgSQ8*KGzr-!QgqKpfV=-&8+YV zOuHxcMKCtc5A^Bdp5B>0O_Woq=EeR>|Alr_tFDHrhvqIhVzl#}w%6B$m0PwNFZT1x z`X%~a>{Zy2ixZD2+iK17SvpHKX4l5Bnu2}Dw!TlyoUuoG+a#{VbN<#oW~bGru&>Q}0R7IyS&`JE_TVXF2urR+2x%cbZo7guucty;NSKCN;4?b}adikO=` z<)-?kH1?Ql>Q7UZR_Q%oc&93Di*CO6X_4^BITdX}4vU#DNQFKQtp2#;#SZ(TFzqdA z=aTdm2k&&`oEPx>qDax~C0h^noZ7Flw|)PHC0BA)cFYU;v?)zt*|k^IvvPcOm++`g zR2N!zcgN4kvPVO2FI)5O{?{MEr>4xk)^Yly{&W`Acx!J_A;pLLwmy*;5z_WlD!+A6 z(o=}}vvTsB>pNU|!VA5ZozLmJ#Q!CKHp{F}>pO2L^o6yqZ93#98~>i|o%ZRo8K>5& zJ~_SQvad>Ix5veQA3XctrxbQ=U*N0$ZBx@K$#w<(ysJDH8)7yd?%ypQb9qa6;$4t;b9^+`xs=XhYHey-#rLq%y% z)dtzKksoy8Z&iuzpIR(6@wAIo*TsEX0!3CiZ4&&fRoMJG{;oun(8|W{+8}$~()!A} zZuyExTpTEAjWC z%=$|^YNe!ojbrAW6F5JyMTn2_ef-qIyg*K;+)~>&s?|Z;bA47%nV24Vrt8F+KyC%C z$1+X!YlDSi5OdvYCrvYO@Y!I-ZiFW=Q& z2(###u=>R9gX`;=rvxqKR$X~KT2OO$f76#3=cl`h9&<&{n}4a}@st>eohM>e=2Hb?eUOLW}juz9--G z^0&qFo7#)Ny7)3lbI#p=?<^ijrWg0{B<;4%evtaUb!+mX*SGW*vV2Ug@@71*++>^m zO8V-WPn|*O>m~_F?@g95RNIKihv?-~QwIx5Hbm z{L%aHBkpX`$K1c46F0tn8L#@|_R(;wYYXjG*VnnvdAoChj9fL>&XI^~C^f$MF?~w;4F(0n{t$(Dt_l%v_5z&Z;Zk6jz`d%)X z8hZDhO3vSRG4lRd{lV9kbQb4p_4H_OR|#L-^=QwmspgT{`oS{loZ+pZVqdJH`z20l z88(%K@dddm+f-e*Uz?qE;+W@=o@fTP2lWkW!mg(8o_$73kX^O-^sF;irJ|3Q3h5Ns zf6%G;x%toP2gdP2s(y3kny+_$TVSK@@3A!{ZpZaExz{`*Z$9hYbTqta`Gu?6y}8mQ zVw*ZnNN;{0qT0H4$>)uej^`}-dsX7)*JZl9O;*Yju1?-4skYzfjKyc8BfhVbUm4u7 zZC*63Ir^=x@#(^Hg{h5dKK~iCxKD0WaMQoDdw)k(0C#=_?(viM%ET4 zgC&!9e7C=}Q`YN!rTw0ZZrTeypDIS5FHneKQJ-X6?BjAL>}i+PLPe#(CWm*tG1(!R zHdn15CvTln&&~JcWuo_lq>zj|{4-BH+&5KkX>{btDU0P=tG%^X-f`vKESB^1#`F9I ztIY-cxmV?eD!;GU%bW3|DrCzQyK{+JZ3Z>hZC{=2QssLvO?ac~{QZ}2waj)%b?aLF z?8NEq_T?MprbtIL>WEJC|CoRNVfZ`U&21AoxQv#R{L$Jo?Vf{Mi=kWcGxdj8f(ltq zJn9O|QLzX-_b`aNQr7Iay6UC^TkGnOZ7&3Qx|TP#o)13nwZr6XPvR_2!7?`W^0hHZ zc1e4}&N1cw?2tFi-?P>B>ZX%9i4mu^*?qKW4tABh!F2NTiM35Pj?1=cbU97Z*{E^D zTtT<}*I%u-iK2UsZ3}#!;M!yT`2BqUM5h^#QYJZ^;TG6ov;Nx3wSSVXc^p}CZqtN_ zo(5wd^JA7O9TqGre#TFpANVqI*MwO2jlPZDv2iE2nPUJb72z#pNkc z^FC~uBYoxiP&da&h^7z_XOU)7-j8=s%)^yuBSvF6F8j_vEd{tTJ_ z==Ili>QP1d6U8FmsRqj|=Q-o__=ottMMh^t7n=QND0yO#^X|Lcl{S@v6^uVEW#-KC zm=-Meyr8OuYlrf@{|t{kPx%*33Al0lbom6mPp8}5e(#^2rRp$wNub~CvgbBmzpU0| z?Bcy1!&E3?>-ny3$|NU;(+?PoFE3b{xHM@ITkZ~J9)GQhqh1>tXO>O3IN)^S&#Q<9 zp`06wPu`pP_I2>#JlRVE;qvza+#4m7sE-d9ZCLYkE{P@SnGGDitFR99er+G9H$E}-&_1Uz^FU3UCZd) zT$$?NgHv|fyq+2Hd2-K+7n-k)rYBAN!NF#gFh46x@j}|0-qr&__jlj1pTAaNQmE?2 zY4;BvSL#?a{jJu<9lUdom@9N89o=}*d$+OS9rmoN!52=RJJPU)aY=Wklck$%^vY%8 zf1mTzy*O6)*46e*hJg1u`3cg}wP#(QO$*D|^u+uW4)BPxTNj32d#75QnPoX~bAdE_hW+2FzU&3>&Pr<}%+dV%eRY7x%#fYwZy7u| zl@l$B=kK!36nj-OQ^i%iPN`I0Gw{CLR^NQ_Q#r>^`Uq6jiCmkToV3|lAth!d`?A_q zZzj&3x!|lw;bsq`%GBU1|4do7-WL?Bo70TWHtY`zL8~fR>-$Vny3dL(1ZA@-c zDgW|q<N=Bo0%o$|9&r?<)f@}-5-o|a20JAbM<(DtP2ueRY<*EE$TIs0jD z?*qE8H{MvG7d_48pF#cHWF0T&@ZT=%s*`OkgTHSKP1`HbRx(BJk*Aiw+U9#-y?z!h zUin1p#GRGjk0*xasqG4>sJU8xP$@)SyZ-CySruERwoN_DsXv3&Eq_YwP3h}*u2$;H zPK;82c&Eplb>qty+SYFiPxwsSsCCD}rlI=LB+FR=<$QDd;}7k4+BNycR$+&%oW?17 z@Azlzcv{P`%)4;Uq)F*od?6o0MIJePV%p2VzW>^kT?=#~c#l7Q-gWem+Qlplwc3yQ zQGS8oz;q>C)JA| z$Q@s+5kAu;MPlQeIiH;ux9~sJykoSaWQpO%_~{u5J9Yj_e^}|+cj(BaC7Dg$+LO+? z6?}R#X{MrSs*v z+|HHGYg$fAx8GU3;LBU@tuv-5Yj2S~eXMq+lhp#JJ#Cf&wpnYAC-gZp&z>45Q1iyE z(4%2F$Eu~fPCZtZU2)p2=c3x5rlrPLs)EjnWQwKaPtRlHGpN;EVxaJ#p~3K+n`Vq$ zYvII~M-{@-6f_PT(5m`p^6=D2y$>Pl?(R6LB6qK8ma|02OtUSs%X&{wJZLwi@95$H zrgnDg6R#bowBB01W99F?NBO7dtlJ~;x%pZ*gIQ#!me|F<=C0(bLM>84XG>6W(pk6bv_b$fYS^u*>%le0GJU3?c{ak@Y= z^+@27R|giSKYQ(WUEutt&hp7-S8g{gxA}cZKgm-2n15E;iDx{Ea$0?l?iPIObMH-< zYvVS92a~VOZEy>9+!~;@&5`%ce+Dn7Nt-%u@?HGC<4Mq@+Y(yE+bt4jx%aC~pOT)T zveM%GQr`(YlII!HC0^gCy3`{xwWguC=Zo#jdx@XAHgZWnEnxq&aEdnX8ncOq=I@;q zCfdfaP@!_?r_+zEcl{2!!{Kt~!fqMH!*aZ)jdvJ*dcK@9_DKj8<#=9rtXAVGL%M3G zTF;YohUd!6zb;EFZc<^iThrcowYEU@QJ~k_23W?nYEjh!#zZ9 zH$OY?>%xconSN|OQhw;V=Y>4ICy8zGsvG#@3M|%_>z*j?xwdL)>tfCAH_eK#9l5Yj zT=S%|jbFE9#<2r;7@Jjc7jgRhKeMVZXeLPy6eg{sa4zkGuLyT$R}OK7Pl~ zKk=eZZ-i&;OMg;Ryewm%(sk8{wQszCwrFkaZ3w%U z-h(He+j<_9;lH-;$%p)d_3i&;w)gQWAG$W}Mb+B?@4}v1*3$4O+dW#!8~QYu8q5@q zWq)1MeTYx!S&0QsiyG^DGF`hqVJ!{%m#qBD2cTUv>x#ni9x?Y}t=GdI9 zN3!cv!ZfWEQ_@s-J(;z#JikzzZKsNX&6V%vACC$an(-H8^9Nmb$?<8O&1_wpy{gx0 zaur|5LVx#_sZU()#3dY;*NL0|IB;(2S|!F1?Rm|zT64k$Vpi;%cgvNh&PQ&l~g+neOanR%ziWQCig-_bh(?yY=?1;$``JycHz!n97%I z-hS)M(W1py(zf?xYTP^Sy5?)jyxc3>9>p7M;@|VtN88abjNrUSy%|ww&Tfk=72c-Nto7lHzsR;*mRtLL&t93k zwCcJe@6=^8m7|?b-H=RRGtksqye)B?h-K>OR*Gjj9wdt*yw8y8@WQSx>dhnr7 z#bJDtvvpV5gn%da;f)S`su}WZ?9VN&6IfSopJ5kwIx~%;nK~Q^S^egOfEVj(t6DB+N#=3m9olx z{I*LhLb)4!GbOG}seNR-XkW|yTj$evx!huwStaMOO#0?K@$=`{{OzWOhumClwdk$U zj+24sF24+2dxv3O_0Oz#-svmk+P3#>yEit>YF@LWFSc2}+BR#?_DzUY{ zEGi-0_{DCk)BA{t5zkz8f{RwXe;?C(zIXA|o{3LZZRfgU{y1dmM=v(DfYZkP6ND#h zoxc50@U(T$m-=h;f11mBZevcz*+R`Q^~t-t4(<3@V&oNe&T-2VYA!>_B+cb%jIHVI0*8cpCx{Iq><<&QZxZ{I1~`1;c66_=ydo-KT|;+@DY z!+?ktET3ncy}rkpwI_8+X@Aqx8Q*1(7KWEkzV*sDcJFBm8%Lo6@$0XBryaT!*x|TbvvT{NQ;*jMTYYr>4pr@CtuO?`Uf z`-+4RnUtv$Wj5-ropqFH^9epr^=YeT>8#h}uP@%}csN>qZ~uoCZ*ty0*%jJoerICC z;;B)qD?Vm^=jk`QIYai1f4yUz)q1VmkZJSWmtD!Zcrn}9IbG`XqUF<;l)Uabuzzoc zx$2SQ-`nRNXP9+n&$X0U?=&Vk`I#5oU|N+GHOt$GQ*b`-iF4ZhlCzGzdv~}+XX;kH zipfW|EjgZ>6Xvi(dP2gxqbYhz*Tu!G@pvj;e!}qn>u|kU$6n{25iqHI-dCQq=H;}c z*E$pDiCZYYn_u-oy=!&cwtlC%nnkY{PJjB+xbnhl??U}kPVOwX&GxyUsjzO}Diz-5 znA#}+T+n0;pE;z_QS0n0kK@)lVaCL3#Z=)Jh<#x?8nDz~6DPXnb7 z2?SnPkiOm5<(5u_#uNAb?{n?GF6F(!HL>N!!4sCUuE|a{v+rJK*%113w#>O_BU`gu$Ij`0S#-`}f=-PYe{#&Z)vI$R z)~pP&y^~P7LVs(TIa}GDwByY4?oIW3obxU(%w~esuj=c1_C~F4R}CG#G`5#l^O!9& z(=Sx8*^&3fk;iMj)Rd%G+=g!>uWdK`&Jks~-LfW^Sz_g^jE847x_KVsGs~6$@pFvNNIfjWnh+Q{0%Hxt@bgQ)g9k!M2;fg^# z9KRSFI9Dc4RMgg4%owd8+`l%RYqPJ}7wM#X2M)!oW;nwpxs&;IsIo`$)UKTqWuEu7 zd|$eIhvS|tIU&tkJs+*=ZcrB7GeddZ#Xqa3?aj(tdg!f`*>`TngA-PqV@SMEb>+jo z+ov@ugZXCOp7!APHNAyvIvSjLT04#vPtaQb?dX|}g1oEWosd5HAWYwIxnG#eeP3V8 z_45l2&zx#`I^A}!)~dUXHpe^?Q;p{2@L!gFH9Kbct)nNVGZygq#~)hra`Vm8D${!w z&d%4IlWVtV$35Mv(;h!dUMkVKL7Iz`d)}ABrWd)Dk8hPNTlbFbmC~fhcYZhg&Mou3 zyUMIGMQ6L=RLRHeO}4eGHP1bHbwGvb>5XN6j1!Bm-&$^$vrzd^>m4@^nL1O3sj4%M z&r1mqX}+~S^IqT%!Mi@K?g8OzwKDxY;|p)B__oPi&yk1opv5sQ)os1+*e4pzG?QH* z_xIn_m8+vYvn%ow+6AW`Vk(|r)us~k%6GqC44=JJ@$!>uGu|{R1w0e2eZ!#B@JTCR zx5rOUhT^xL5-uvM(-MmKtgAwClOP5t7L-UuB0(lHk94Xg!zMVIhYn{cC+D zuKWD#lz^P&<6O5j8%?I2IisvS-?X5-I5cIST;leInVbv@3QwM2YaS&iePN5vx=9by zBD+@W$uM87n_6@}u<4xTTCv|~MVnT3%vqcCSnPyC(_^NJgU);2op-X;cGE5jatS=s z-SD)MeQWHt%Ws8l-kjL{v(ojeiN>sJ4jUNcC3y}j)QO(gjE}%EBa%57)x1C9B z(h0|SW9J2aQx={UuH9X9e4(hyk##pyV)7p^ugacX+PgNbV0T?Y^rWp*R*6lF&ENq^NZLR#e(PZ+)SL&vstM%fHl_qZ8k!N=0+pf0hOBR}McPub6y34;d!L#~N z{9B1>(l**MEfb3S05tVW&ggO7SUcCQFNtx)1I)-m2TUM&MNX)HveZ>ANE$M>4m74+vV@> z63e<5DD|E>WO4l0riv$Do%{O8-j^CpNm%9L|EcY7 zvCrfnk36x55$$e&ZwY@t|07u4De>gr+l(`v*LelMdGk(Xo4I%1`N^LxBpK?xPI@j{ z=Mm#^Qb8fle$Sm9%zw1Rb=6+Cs*34(n=8v2cFleJq)S<*M>*2USkIe3zv|4?ch53K zB0Uu2Jc3VrUoqvzOt~+WDXmKOR)0U$B?kLGn=vhtyY5Y?pLNK!va{OmEAR45o2=+~ zdx90$g^gP->%O1&>#c->PwkZbEON^>`$h)^?ex=Cvq&gwd)Twd{dd#(dHn0w8Y)k_ z_2%!qK$*qT4RP`>!`JDXe2_RS^_E#+(S9xC%lB5^^Og+ly^&mbl6m4$apz2ht-q6Y zYc2Yjdd_C!sd+!YtTr#(?4EI*k6%Wcd1B<-$HBR&-*{DAo`o5n*66pC{Wozj5}gQuTUq$#<+XT{>1h?QxcT!yB_{udkb8d3EOADQ_7Kj3dJ@ zWWE)XyPw?`u=4lu-}}APujc24F4)$Xq-C{&F?8>%yql9I`v+y;=e+A{F#oi*n+N-< z_51g#lPQD)d3$=InNd~YovPqxyFT19Ouy>8 z`?$a)vos0a7h2CIuH&xNs?g~^rEd8tTK&1LpLP1J%~R%X(G&E26|9+^s~uyyqIPY| zL55kyS!)XlCW<7?khDp^wEpEi-W|K0iz`b%rz`2mq;1XJBbuponni5sVdvA#2mXCr zGdDslYOz`Iwe7c@ZmyeCa(q%Kd&!x)B>$Kzv*KD;o-W)a5G1T{!q)3oxMTjJ8xG3b zo0O+o{+vC@Zp+5#7;PnMdCizjg2zSYtWt~7@XXU)-}dFpPV=(qIu~|5eVqEt?AN!o z9t&Nz2`u5g&U5-o=zV^_m8oiT3z-BpPFt<>ko>wb{qhZC&+MXB_j^H>i7}IAr{^e2 ztmT>eIXbq|DpE)zW|x6<=jsa?JfZsQC!gjzI6t{4`oguo$$E2orj=jw6zM4BX8SqY z?#oM)+n=>nZ@0SI@8+=jo2_o^E8=ru(yb#GJ-QCgnVJ^Adwx{b$!*SsQf&&oXRLb4 z&+>i2Ifi6cQAYrab0Px z=yfqXZHpD_x?L}yXR%!oQ@s>!9U=E@>9!B8y>p5kRX(09y+FN3>cEG)$2)4$ zi@qC0n9g1EDwJh8Z$qtn-p%(>A6{;{B_e;j+S~5#B$?;8O_sfR6C!){qS@*-M}^&G zFKI9u1X&z7W;|9Vbbwo8~fc`hvKw!ib`XQ%ET~%>8Wb^06m%i*won*0TP516k z-xqoXg++7u%_-fsymUpJ^NM?H(-=1%xFwQoQ&k;qU(8}QYvK;`7oqc~|9kny@O8`` z`43a?9u&BuZg%i`MeNVi6E7#;Tehp&|MFt1o~Tc;dmN0EQ~umI$Zl)>*;6h3tw`Ul z+i{mC*>r~f+4gg3ocpCMy82R)+=qqco}M7XBX!_H=?bxH)-z1D2pXIc3v9Rj&%j@G zVb`u!W%0U<+jE}Q#V)^aE#JA~ywlVBQ*$$<%AHbAe4770ZByRY)wiAHeq3FkGIeHy zir~w)p{BA~)w6?qk{otEmN&l=<|8(J*P_#9s#?n#AFEp^{|r^FJu%g{MDOII%WLk+ z8vE@D@UZTTt7}?&b4~6_x3-+zp1g2Lp6dRrbK5UI+MaM$Ab5wsUCwVS-=##{@tA&+ zqod~B3FqcHg3Z4Iube%3^6u=aC2{gwo&L#P3kor0n`UCXDL>F;9a zoxN|m3i9szgcmvZE} z2;Mzww^2uG>dTqs3>z(u-OsPux+eD4%V|Y7Pp@F_I68Ot4u|Tb%?meO;!-^@WA=+q zyW|rE{tHB%eBF+!m+Z|seUtH3*1CDi_`>vWye?lU|E+fJk$QzQg+BXh)o4lPxj@;zH_~jGIPGK(f{F*uY4swwXw8FMDKv7-M&L})VD>H-#Y!wy{TyJ z#Ccx>UTqINu6lNZ;7OKxn;EPj^6|mGDm_chZeF?-TY2eZX?@miuN9i&tgg{}C;M;R zTA0WrvE*m;xtJ3cZwg<>+?&2SI{uwh^&{tor#qGJ%U{}lyv2LNE~{qC0>ep#6JJ;d z74?*-x>~N~+9z{mapSwSNAyisyY?(<3f+8xCuMTL?ab@zD{b$-InT3h&k?&9%*))J zYG1Fpn4?>=I=q`>lKq(w_4usywo9)*IsfF?vZTcVCmbxk%5Cl6-uou^O?D610gq|IrmQ1XY zNoHC+>)Bg;Gwpcc3$1%oGt;YF_&#}R=B#>meA?BPr3)8@r%u}>6}$Pw zCuIZWX_5-RK8LSMHO}0q6w~Qf_de(GI%}@8yZb6qep@Y{A(0zYsqp*i3>~MN-TA7w z{5GvgpI6BeLvEbjl`rYQsN%pf9X=SX;<5U_|2b~<@ZztuPv2c zeIVz}8d;n5Q{|ld>gBdh)cKV+S?+FhSkIk3J9HlB&+vS}_$$csbmA#5jT_smW8G{w z=5Cu`_HFW+H(Jr2dT(>*Rl9|H#;i7WpEuWWUDD~J)7G!Do4V}wlF!R^+E<9)xXF>i z{XAMi@``xp?1i@empV0Flr>JA-@9>(!=+c|3s$WQPnY~6xy+k;?<$Y{2<_t5B8xW? zSAK0>HdpaB@2@oHe(m`)_?<(ZPfTcXZF5mGJd*NxmTuv;iAmSIJ)ZowU8Kpwv}Mix z=c0>s-)^zWy!>=#D*t@d#}0he&Hqdr7wr+B&Q|SqFC{0{pUXYw>W#Ig%tm+bKGJx5 zGEFZ2p4_6zZ*-+D#F~BgYUQ~#<%y9HvxUO(^Ujfn10te=^D`%%opg%v#QCUM^>&d* zX7%nn@#OgQ7l#&2^7cIz?Y-fZ8^`gx$Fmld>r@o|yT>w3TrPQ^cX1oDe8F8;} zWlFhpym_~zI_zy<|HJ)1T>VzAF>+tY!p$;=@7~nQ-u!Q+J(n*1`pI%>Q21`k+m>Hz zz1}AD9bFQ1Ut9F}^f{k@hTLkpBc5w_$!Y2JyXsxpuI(|;Z+~6=T{&0J|GoOP<0`jIZXJ2c@@Y@bjbdp# z@BV0U*V!sV^MPPT>UEobE~{dKKn<IEy!YL4IE`bcg``SM$@>^L^<{+%~{t$W2Y zqtKXlk=0Xg**nMlxhJyc>gjtG?U7+xcAwlr`j^>iY3nn;+;)B9y{LOXg%_yYS>|Q` z@YaUH=2zKgO)tFp$}d^*>ao}F+;#JEb(bW{)N3##|DAaLc}VJ>9T(L+Yy8(ayw{f3 zvM$r=v-PX`&oD9KDb7}G7~{*>^ky6Jho{*mT@JW>WV)(n8^^gQ zx9^V|-~R~pt{18({qi_xvdwgJ=}9`wTg;!v<{#eApOqH=(RAP9T#iPz3x7_Wv+Ap2 zJh*bMr^c%oMX@iI+xK62`^2nw`N=fV6O+ts7JirAanyB9g>>l0+ASNmcg878H48NN zSwG)zdM(>{d#8<~?7cm+mrZP(=F@t&v9IuTWcl=Kzij88+{_|gz|{P`tt$P}(vYGX zR}UT6e8_8b`OvH>R=$56drxod^|*8V_t|;(gYR5VUitFk@s+EOY&)!2GLN>(*Wp3>3w=ZX(=NnV-<^6l>nWy&pZ(f)m@bN!G&!5{_K9f`sz2o@TwWs5`*DWplcG`Qz0@ukk z(zD+${FN+IzWU^YwaWgwD}QVcVbZXBrF)QF<%8#!wIVAIMroW}c{`KJ4?F3N8^tq}6tEWG0F@vQZ=yY~v3duFa&%k!(g`BCkx zNhTLJbmm^kSD0V-Y}K7VZaa2vwMv_qbhBIamiwL7UowrC7Jc~7aL_mDm!v7L+t;^i z-+uUfg6~;?zw@h`U;a(K82QKc1Alw&%%%Hgt~)2kyGeE(|MseOE6-Q&LXzX6wIx2j z+^73vem?KEsU`v5T!JR9`#k-xt&FJ%K3rBc;nG&yNaeWr2&NX>Z?rL0>0# z@w8hP7kPI|pK_JZxqt6hu&I1&ocNVzZJ&d-PV(+yYJ8%=_NvHAF0;BSdu80AC4IRj z8Y{@YkzD>C1}xu^VnsOkNV?cZOUt+=N8 zJnc@3icEj;ovWP7u6(^}F8tHL_27;9RnD*Mwl=j)TXXSbPFvP}p)boKg}9Ta^sFg3 zD4??4L25&ZFaM+P-nuI$d*wV5CbG|ZGC^`v(Vi0K{&m@FH*CCUvh&!2S)TLWSo}S_ zf$Mbi+eZ>lH)Kb2y}Vddv*WyU|Bkh_+c$@`)P1U*JbTZ~GekG$;kpW%>aq3+Q= zom(Fr)OPJmFw02o!PP}Y^U4b%Y0pXHwR^k&sw)vDN1e4rZb;5sigi&_-gqw zjQiC+;q8XA?Y|1y&$ct%tTI9R<2ie&L&2-AE$ej5$y(m5wt1uX@6JLQp(oaAVu61= z>KCrLy}DN^vv7&EvDhI)nS`(MbM4L_sd~0N;e4^mWOw5S&hi@4SE@pdmt}2^ozc2~ z+HCX6a|ZI)MO*Ubt-17FUPs*E?pelL$_dL{0{=Mgs}9{*bsQ=e<1@UTrbs+V zDOr7Op1|cdZ;#wl*f~)=?dhi{FRbP3mwJ}3bl6pJ>C0>*#&antETUgmKKDXY-g%E%)=o(j*GWf#@joewOD4SF+sO2F~cxvS=sDDPbI;qKf&VV}I44SG4b zrFhStum8B_ZrGzo;RZTw<_eoO#w5&-(s{0}7~Y|{OWsSTBtJV4 zYWbr0y6LKAH}x{Ji=M81yQ}Ho{?aDSOuMk}c30g4ujhX87joD({X-U$bZO1hLo$5@ z{0qOXnl3fv`UIb8+no9K@G(fP>8`co-l@86lF%egrhwdZqgD5gweG!p zZF8ZCufjAnmCqM>V|Pb9ZsNXLx?|?-!~(kq#~t|n*M@$0-n?EVHGP76MjyB02}a`! z^M0;<8+5_nrZ+V$a`ID&W0$OwZ?!#|J7MaRb?34?OT9D19vxzCnV-B_L7nB-_oHF+ z-+sGZ=8DTmGD`=UG7y(*t|ws+m!ZyD1h)Krri3pe~{5X=uMy#6bUchkL- zmRl#@@=hz>su;&1w{QR7tW7!Y%PR7&MSs6)s_W&pBlJM!6GgM<3R->IPWQqm*lh5g zs?M`!&jz`vrhC_}y=5_r*~0Yz*A2re;n!bQN9ngMoza;-!_Dx{m*?v*P0n7S@lEWM z_^hXj+lzO(NgGtjXKlII{rlnKR~|w4Z2lf>O0n%H| zIaAxd{&9FscxC2-tnPf(tGjb0g;w==cs%KkI(vFnn8!_(skgObZuV+jIh?=J=(tc@ zqS72o`$M*`{8@jLUHZ=uu;Yr}f{9CmmRWe`1{GiV)wd_yw)SzX{+pnq%YE|nluvE^ z%$%#fz^)~9_j2>=h>y$P%*+}b7tHp`qepX!9 zFaP0P7=8HZty?BV)6|%x-}Rlbc>O-|+OmsJwr<iBZU(tmT_L|DtbW!@m`TU_*NT4u$^CI51|>@psoP`5q5 zVC_P7Tc1>m!^!I=*_z!^z5DcMn@H}anr7YkyNqveZG5y_w%W1zw_k3wn3AZWOYbz5 z4-!>hWx_Sr+dkWw%DeUGnommV?;dZH)M5A{o4xY`+uDb|}95=swu@~x3dfUe3YYa*Tc(L?>sY4TsSNTD@-Gg3XL7g7*R48v0@J#vkT;coUdKh8 z=*v_(-u=gY+3gqW7rmSnz5DP?kKWEmzDm~W$r0CXom;u|WqvA4c-Y1>k`K2f&zN{# z_l?z;mr>tt)pl;0bc<8QpYzV*M@IjzKeRDjF^5_ zy=aQKRDFl;+eMqp^p*=P$#Ui|Tkv9{KhK6c7Dpmdtn132U)!p)MK|Eo{M4R3!TeLF z8XV|At4wbSm``s7(KZIcj({9FEazps1zllZWAvh?lO+h$jb^=STV zWWRoCY4;I%9^SQQe*Il@ZF<>7wk`ASIh4xl-AO+GM?D{fJfWL ze4fIUd)G6Ka*Yfk1HS&O?ti6qZTi9=?uUg>+RpyF@|w?asfC9dFC<+3{a)zD^CMx} z%rEk7GPquT&(Ghu#QEjlhcE6sMut}@-FYQ+_r7;=X2C|K(@(bXL{}BQ4p|_JCv=B1*_kL-*#y4G$<;CkW|H)68 zoqc51+b0?qHhmB%-hG+*-ijCX0&GkA+1mp3^i|GJRg@Aa$C4hy<) z;-lK$N7>mkmtA?sB0gcx?(JO1H~7_Cow)SHHa~8ve$w@t&a?!d-6uG#o4ekc#B&(G zx;826>AT0mOhTd3Q|9gY&mdaOH~HcEwpsh;o0MWAlB=Sf|)QC{{+ z-(Zp(ucS`dPotFw!(@#oUMXGIeMHJ^?xMqaCfdCp?rw}-sdkOC|N5-wNB4Z^(|z}N zhk?WKliX@IzJHwDc-=zuc(8cbrfnx>OFmp#nZ0xI!`HILhbQ~XeEWDJ)QsVjguz#q zu7!F_3kwTUwzX7dD^x_(^b0fJzWpoMMsrDao!-a0(_87 zUa#AE^46VV1-0|O1@Z)++&L+@srXK4X40f*`kOMRXDMWUH;kW=yqn+e>cZ;uCH5W9 zKDe6kQ&a*9t?`mMH@}IA(%%j>n^0u73eMH!1+g_!_1F_2`7i>sIONy+&e3CbcOpl|8@0w%zMtscdz~)g@xH zOqXmg_V9KR^t;0FB|qxU#Xq_q*>3wxlJ!2&`OM>API=)Rq4{@@e_b82*faLT^uY5e zRo8p%AM$)W-ePj{pX}|-`FVzG1R``ScZD6)`^5NtD#Lm9dCij}>bJzd`Oom^{LRxr zTet527&m$StvgZ2i)KxmbtZSo{T+$1ZJei`Gt6PKbzIl~Epz*&Kk}%7w_5Ay! z^{0LwwES{hWmc&%SH9?*+~-A#zDsJZCzR~Sd%C+TRq?}Q<-Ue8c3JHu*S>oHb^mL3 z#Amw_YeZt6Kx+)&oP;pn{??KRz0&8bSXC3QKXJ7WxT->TgbM>kdYQNXK{w|RscJA~`QvUbWwA(B8UuKZ`qR>;me!)M!8ky}^ z?6_lVqCWg*ICj^_LS^ovYkT;v`wHhpN*R1|Q#ov)!EsmKfg^#z^myF0%f%6&ju%h8 zygzk*qn*)*`R!lNbJhgS$`{CrzV_R@V&8eusfUieyXZgZICI|J$Ey>1n7f|;3H|W3 zPA0;$etFjY^r;btZFltR-S*>1zFRyeEce*nMZHz8?)#PO+O|t!ce?ftxn|K9^Eqv# zAN*(N+$VQ^kN4yC66ZNDxlhi|-x(_L_Jk1A?!Jm!2O12jzGdIKoO$xasVu&4mg}4D z8T@Gca64qnNA>n~d3uVMzq;;;wm!YQn!(6hJGx0E|74iv)(uDAovl_s(to@9=sdIh zAFd_Q-nq)|Mkf+3zYSFC_nWv~SjA_t%I1wa5)+DVi+;B6HnEqkNQ++W`FPT~Gdq84 ziyfaa^QT|+wb;3L&&}8_@Y?LN_%xj@Mdqh!|L$08x7=;_^GUmna*sRjy7DDoMz%BqGw6yYz)~frO1$kM| zewLkA{AAmelM2E=XMNEXeh}9B+v-owmj4WG$9MTA-QqUewQ2hWiT$^po&0nu`BQ@a znJ2={Gk*O!rS(Jk@$@%8KU{uv_xq7}=|94kY>LxapL~pX@jYwfE$&DeiFZliJYprG z4DaF?a}p-DJbiDcKh}iFi`2+gF6>?@`D9C%XwR`Fd7(AGp2!)0UDqX8s`cs0#V>|a=IcHx+Nbkz zO`XI?zV+E3>Yj)B$_MQHdv|s0F87L6w-;9)$T7RL>b`+WLOBDUlKRzkrAI!>ACVWo zbJJ?UH0u|M$tIKZ>aVW)d$4&+$|oa!+1kek_Vd+=RWu)v+P3tg6~Ew3U(*l$UROwHgc2)o<&p%1%&*KoPJfy@9kcH-M_Q;*}Sr2`tWC;$cMhortg-o zdL=luJ0>MN*8Xh1{##x>Za2pK8O&Q4C$JgWT7R4RqxiSm59{C$*H*5nIA`m93@daTS_l?rR~o9aB_Ln z9&r;+xIKHWlzxgZNa(OsjK59lXnGqL`Xid-zC$N z(9l!-K4x>P<+b9)8!t=jj(k`0%covqd2M;z^?ia~+r=$wgzKGs_phs#B=9|7{$-Q}FMSLy}Evx+1KbLLHonQhaa7bln%M zldRZ&@V-#`kJ|i)_S#3LZ~AF&C9+G?sF?-&%0uz?}n|c|JcY+@2}=w9fkPq<>m95?9`u z`u9ia?R@A`z3Eb9eTLihZ5?adQUrEuKDPGrP~Lb@^j-a?`#t{|()F1uijT|_`EmOJ z_t|W(tLubv^^clc+26`nbn9pSzPgRkiMiw8>*fOt>E?d3f|~XoS#WFbIqgUL56=F) zG{S7-!wQqzI}^PnO)cJE|7{&&R49BbCE?_5g$)G@y%~4QDt?^S`MaRTp%n>!-!-8-j-2X5D%J}C`o{g>PzFi+G&miK-0K8A|(2jdhz%)BjWbcTwp~8&lTfN6rR) zdVKI-%C$Px_R!Do?uCYhxK3-x*lCpHT_`!&AWd} ztCv^If4u!jrH!`S_H50|svCaWeDEw=XJ1;dxZ|Ysb`8y~Q+f|P%)XfR!MFcdeM{8z zL(UJfy}9R#ee*P#FLWbwb=Gx{*6YU8p1<49Ab0w_q`ZB_J^P;dyi$*k=05(*^*+Sc zu~fpemaA;mp^wYBo>lxg8YeSJ`bhwXMZf~Cl@H`Q=Wo&PaqlqEzAta>spD3CR&|-j z5*Ld|^+tzKhQi$v2bh_+3N6;W=VKW=+5Mu_wEZ9ENB(eKSh4Q+V;SL!*N4rWOg~gM zUOBbmsg%c)f3Fqz%-$)?F?YM&{_*gUdZB%4Kl**I*IE2{9`a%C*26Bp;?}QqxnATn zSIR|O?J0BNxo5o7lzT$&-z<;0vXAfIS>spt#6H}cyJ~$${*xK^b-Ii7=4+hdo*~=z zWO~-|iSu|8`YZNl`rit7`@3|FiFWs2WlyQMt$QZi&HQC?#LtuUsrJqtNedoN+I!M+ zjitKevQDp0b`yWtKGtvg9yR@sVmz-2uTX3lubpIGol1sO*4brQK}JR$dJSpOkuv&1 z(|#_AVKNH&WPVTf;#YqD?0OM9<3Ie@^d8L*n3#Um_%H+FL*`i0MzL~LTsI=UBzVo=krz}}*&wt5rFYOy_vX{lw@bCC= zt$z{sdiGv_t4Eo}p5JCK-pjR*k)QJp`{{FqS3Ye$7yZX^;}7-~S-bwtT##j__F;XO z_=(LIzr0?*mAm(*`dOXBd7_oa_}uO=XrK5eo>4EnPpc+$>xc3K{v6o?75nbai;ljl z_fcs=N8pl*`PDkEUMnq<4sHm~WLLia_5RK0-)4W1UHbfZzF7A5T{YV-O}o;Q)oZ)v z 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�-CHlG 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

    FA+YVzH`a;S&vway*WHpq@(OO8LBU| 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

    WVY06|KeTQ`8vYCSI+&w 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

    Us=@O%BQuVwenK1to4 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

  1. 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∋%n>L$0V&c0Kd_%WzrBM`T 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%0A&_2TnwlAeT--dLr{BTwxd85@| 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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.
  2. 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%0A`8~Y;SPnEOGeLeT^ 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

    M1CS|8p> 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

_y03ovABJ{BkJ6)^h=Mg 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%0D=B~E%} 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%0AsE>rJgt^!;dxM9a$JMWJ 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߆Ww}KGT{u@ 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%0A*w)h3++dr?bKap}kx@nSs>w1f>-lKljw@rp} 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 kZ&c&GfSQ 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ν_uOoukAGcE>zliXWO>E1Dc;D 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