[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
This commit is contained in:
		
							parent
							
								
									fa740c1286
								
							
						
					
					
						commit
						4286b81af0
					
				
					 4 changed files with 282 additions and 0 deletions
				
			
		
							
								
								
									
										25
									
								
								keyboards/dmqdesign/spin/keymaps/gorbachev/config.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								keyboards/dmqdesign/spin/keymaps/gorbachev/config.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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
 | 
				
			||||||
							
								
								
									
										247
									
								
								keyboards/dmqdesign/spin/keymaps/gorbachev/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								keyboards/dmqdesign/spin/keymaps/gorbachev/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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
 | 
				
			||||||
							
								
								
									
										7
									
								
								keyboards/dmqdesign/spin/keymaps/gorbachev/readme.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								keyboards/dmqdesign/spin/keymaps/gorbachev/readme.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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
 | 
				
			||||||
							
								
								
									
										3
									
								
								keyboards/dmqdesign/spin/keymaps/gorbachev/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								keyboards/dmqdesign/spin/keymaps/gorbachev/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					OLED_DRIVER_ENABLE = yes
 | 
				
			||||||
 | 
					MOUSEKEY_ENABLE    = no
 | 
				
			||||||
 | 
					MIDI_ENABLE        = no
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue