diff options
| author | gorbachev <tpp+github@iki.fi> | 2020-09-01 00:23:29 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-31 21:23:29 -0700 | 
| commit | 4286b81af016c2a566c06675dd5123fa83b74033 (patch) | |
| tree | 5059b2c96d94997df87236451e19c223f0d723d1 | |
| parent | fa740c12861f77b1381fa2ee282fd57080c70502 (diff) | |
| download | firmware-4286b81af016c2a566c06675dd5123fa83b74033.tar.gz firmware-4286b81af016c2a566c06675dd5123fa83b74033.tar.bz2 firmware-4286b81af016c2a566c06675dd5123fa83b74033.zip | |
[Keymap] add dmqdesign/spin:gorbachev (#9919)
* Add keymap for DQM Design Spin macropad
* changes from code review
* state -> layer_state
* Formatting fixes
* Formatting fixes
* Formatting fixes
* Formatting fixes
* Formatting fixes
4 files changed, 282 insertions, 0 deletions
| diff --git a/keyboards/dmqdesign/spin/keymaps/gorbachev/config.h b/keyboards/dmqdesign/spin/keymaps/gorbachev/config.h new file mode 100644 index 000000000..10201015e --- /dev/null +++ b/keyboards/dmqdesign/spin/keymaps/gorbachev/config.h @@ -0,0 +1,25 @@ +/* Copyright 2019-2020 DMQ Design + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#define RGBLIGHT_ANIMATIONS  +#define RGBLIGHT_HUE_STEP 8 + +// Use one or the other, determines the orientation of +// the OLED display +// #define RIGHT_HAND +#define LEFT_HAND diff --git a/keyboards/dmqdesign/spin/keymaps/gorbachev/keymap.c b/keyboards/dmqdesign/spin/keymaps/gorbachev/keymap.c new file mode 100644 index 000000000..b9ad17386 --- /dev/null +++ b/keyboards/dmqdesign/spin/keymaps/gorbachev/keymap.c @@ -0,0 +1,247 @@ +/* Copyright 2019-2020 DMQ Design + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +#include QMK_KEYBOARD_H + +enum layers { +    _NUMPAD, +    _RGB, +    _MACRO +}; + +enum custom_keycodes { +    HELLO_WORLD = SAFE_RANGE, +}; + +//The below layers are intentionally empty in order to give a good starting point for how to configure multiple layers. +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +    [_NUMPAD] = LAYOUT(/* Base */ +                KC_7, KC_8, KC_9, TO(_NUMPAD), +                KC_4, KC_5, KC_6, TO(_RGB), +                KC_1, KC_2, KC_3, TO(_MACRO), +                KC_0, KC_DOT, KC_ENTER +                ), + +    [_RGB] = LAYOUT(/* Base */ +                RGB_HUI,  RGB_SAI, RGB_VAI, KC_TRNS, +                RGB_HUD,  RGB_SAD, RGB_VAD, KC_TRNS, +                KC_NO,    KC_NO,   KC_NO,   KC_TRNS, +                RGB_RMOD, RGB_TOG, RGB_MOD +                ), + +    [_MACRO] = LAYOUT(/* Base */ +                HELLO_WORLD, KC_NO, KC_NO, KC_TRNS, +                KC_NO, KC_NO, KC_NO, KC_TRNS, +                KC_NO, KC_NO, KC_NO, KC_TRNS, +                KC_NO, KC_NO, KC_NO +                ) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { +    switch (keycode) { +        case HELLO_WORLD: +            if (record->event.pressed) { +                SEND_STRING("Hello, world!"); +            } +            break; +    } + +    return true; +}; + +void encoder_update_user(uint8_t index, bool clockwise) { +    if (index == 0) { /* First encoder */ +        switch (get_highest_layer(layer_state)) {     //break each encoder update into a switch statement for the current layer +            case _NUMPAD: +                if (clockwise) { +                    tap_code(KC_DOWN); +                } else { +                    tap_code(KC_UP); +                } +                break; +            case _RGB: +                if (clockwise) { +                    rgblight_increase_hue(); +                } else { +                    rgblight_decrease_hue(); +                } +                break; +            case _MACRO: +                if (clockwise) { +                    break; +                } else { +                    break; +                } +                break; +        } +    } else if (index == 1) { /* Second encoder */ +        switch (get_highest_layer(layer_state)) { +            case _NUMPAD: +                if (clockwise) { +                    tap_code(KC_PGDN); +                } else { +                    tap_code(KC_PGUP); +                } +                break; +            case _RGB: +                if (clockwise) { +                    rgblight_increase_sat(); +                } else { +                    rgblight_decrease_sat(); +                } +                break; +            case _MACRO: +                if (clockwise) { +                    break; +                } else { +                    break; +                } +                break; +        } +    } else if (index == 2) { /* Third encoder */ +        switch (get_highest_layer(layer_state)) { +            case _NUMPAD: +                if (clockwise) { +                    tap_code(KC_VOLU); +                } else { +                    tap_code(KC_VOLD); +                } +                break; +            case _RGB: +                if (clockwise) { +                    rgblight_increase_val(); +                } else { +                    rgblight_decrease_val(); +                } +                break; +            case _MACRO: +                if (clockwise) { +                    break; +                } else { +                    break; +                } +                break; +        } +    } +} + +layer_state_t layer_state_set_user(layer_state_t state) { //This will run every time the layer is updated +    switch (get_highest_layer(state)) { +        case _NUMPAD: +            setrgb(RGB_WHITE, &led[0]); //Set the top LED to white for the bottom layer +            setrgb(0, 0, 0, &led[1]); +            setrgb(0, 0, 0, &led[2]); +            break; +        case _RGB: +            setrgb(0, 0, 0, &led[0]); //Set the middle LED to white for the middle layer +            setrgb(RGB_WHITE, &led[1]); +            setrgb(0, 0, 0, &led[2]); +            break; +        case _MACRO: +            setrgb(0, 0, 0, &led[0]); +            setrgb(0, 0, 0, &led[1]); +            setrgb(RGB_WHITE, &led[2]); //Set the bottom LED to white for the top layer +            break; +    } +    rgblight_set(); +    return state; +} + +#ifdef OLED_DRIVER_ENABLE + +static const char *ANIMATION_NAMES[] = { +	"unknown", +	"static", +	"breathing I", +	"breathing II", +	"breathing III", +	"breathing IV", +	"rainbow mood I", +	"rainbow mood II", +	"rainbow mood III", +	"rainbow swirl I", +	"rainbow swirl II", +	"rainbow swirl III", +	"rainbow swirl IV", +	"rainbow swirl V", +	"rainbow swirl VI", +	"snake I", +	"snake II", +	"snake III", +	"snake IV", +	"snake V", +	"snake VI", +	"knight I", +	"knight II", +	"knight III", +	"christmas", +	"static gradient I", +	"static gradient II", +	"static gradient III", +	"static gradient IV", +	"static gradient V", +	"static gradient VI", +	"static gradient VII", +	"static gradient VIII", +	"static gradient IX", +	"static gradient X", +	"rgb test", +	"alternating", +	"twinkle I", +	"twinkle II", +	"twinkle III", +	"twinkle IV", +	"twinkle V", +	"twinkle VI" +}; + +void rgblight_get_mode_name(uint8_t mode, size_t bufsize, char *buf) { +    snprintf(buf, bufsize, "%-25s", ANIMATION_NAMES[mode]); +} + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { +#ifdef LEFT_HAND +    return OLED_ROTATION_180; +#else +    return OLED_ROTATION_0; +#endif +} + +void oled_task_user(void) { +    // Host Keyboard Layer Status +    oled_write_P(PSTR("Layer: "), false); + +    switch (get_highest_layer(layer_state)) { +        case _NUMPAD: +            oled_write_P(PSTR("Numpad\n"), false); +            break; +        case _RGB: +            oled_write_P(PSTR("RGB\n"), false); +            break; +        case _MACRO: +            oled_write_P(PSTR("Macro\n"), false); +            break; +        default: +            // Or use the write_ln shortcut over adding '\n' to the end of your string +            oled_write_ln_P(PSTR("Undefined"), false); +    } + +    static char rgb_mode_name[30]; +    rgblight_get_mode_name(rgblight_get_mode(), sizeof(rgb_mode_name), rgb_mode_name); + +    oled_write_P(PSTR("Mode: "), false); +    oled_write_ln(rgb_mode_name, false); +} +#endif diff --git a/keyboards/dmqdesign/spin/keymaps/gorbachev/readme.md b/keyboards/dmqdesign/spin/keymaps/gorbachev/readme.md new file mode 100644 index 000000000..451dae7ef --- /dev/null +++ b/keyboards/dmqdesign/spin/keymaps/gorbachev/readme.md @@ -0,0 +1,7 @@ +# Keymap for Spin + +* Encoder button push changes layers +* First layer is a number pad +* Second layer is RGB control layer +* Third layer is macro layer +* OLED support diff --git a/keyboards/dmqdesign/spin/keymaps/gorbachev/rules.mk b/keyboards/dmqdesign/spin/keymaps/gorbachev/rules.mk new file mode 100644 index 000000000..553adac19 --- /dev/null +++ b/keyboards/dmqdesign/spin/keymaps/gorbachev/rules.mk @@ -0,0 +1,3 @@ +OLED_DRIVER_ENABLE = yes +MOUSEKEY_ENABLE    = no +MIDI_ENABLE        = no | 
