[Keymap] Update/refactor userspace and add keymaps for rmeli (#18398)
Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Elliot Powell <johnp8727@gmail.com>
This commit is contained in:
		
							parent
							
								
									ddcb8dd7ca
								
							
						
					
					
						commit
						317b800bbb
					
				
					 18 changed files with 777 additions and 100 deletions
				
			
		
							
								
								
									
										45
									
								
								keyboards/preonic/keymaps/rmeli/config.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								keyboards/preonic/keymaps/rmeli/config.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
/* Copyright 2015-2021 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 <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifdef AUDIO_ENABLE
 | 
			
		||||
#    define STARTUP_SONG SONG(PREONIC_SOUND)
 | 
			
		||||
// #define STARTUP_SONG SONG(NO_SOUND)
 | 
			
		||||
 | 
			
		||||
#    define DEFAULT_LAYER_SONGS \
 | 
			
		||||
        { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define MUSIC_MASK (keycode != KC_NO)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * MIDI options
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* 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
 | 
			
		||||
							
								
								
									
										231
									
								
								keyboards/preonic/keymaps/rmeli/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								keyboards/preonic/keymaps/rmeli/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,231 @@
 | 
			
		|||
/* Copyright 2015-2021 Jack Humbert
 | 
			
		||||
 * Copyright 2022 Rocco Meli <@RMeli>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General 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
 | 
			
		||||
#include "muse.h"
 | 
			
		||||
 | 
			
		||||
#include "rmeli.h"
 | 
			
		||||
 | 
			
		||||
enum preonic_layers { _QWERTY, _COLEMAK, _LOWER, _RAISE, _ADJUST };
 | 
			
		||||
enum preonic_keycodes { QWERTY = SAFE_RANGE, COLEMAK, LOWER, RAISE, BACKLIT };
 | 
			
		||||
 | 
			
		||||
#define ____________________BOTTOM_L_x6_____________________ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC
 | 
			
		||||
#define ____________________BOTTOM_R_x6_____________________ KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
 | 
			
		||||
 | 
			
		||||
/* LAYOUT
 | 
			
		||||
 *
 | 
			
		||||
 * ,-----------------------------------------------------------.
 | 
			
		||||
 * |    |    |    |    |    |    |    |    |    |    |    |    |
 | 
			
		||||
 * |----+----+----+----+----+----+----+----+----+----+----+----|
 | 
			
		||||
 * |    |    |    |    |    |    |    |    |    |    |    |    |
 | 
			
		||||
 * |----+----+----+----+----+----+----+----+----+----+----+----|
 | 
			
		||||
 * |    |    |    |    |    |    |    |    |    |    |    |    |
 | 
			
		||||
 * |----+----+----+----+----+----+----+----+----+----+----+----|
 | 
			
		||||
 * |    |    |    |    |    |    |    |    |    |    |    |    |
 | 
			
		||||
 * |----+----+----+----+----+----+----+----+----+----+----+----|
 | 
			
		||||
 * |    |    |    |    |    |    |    |    |    |    |    |    |
 | 
			
		||||
 * `----+----+----+----+----+----+----+----+----+----+----+----'
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// Define wrapper for standard CRKB layout
 | 
			
		||||
#define LAYOUT_wrapper(...) LAYOUT_preonic_grid(__VA_ARGS__)
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
 | 
			
		||||
[_QWERTY] = LAYOUT_wrapper(
 | 
			
		||||
    ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________,
 | 
			
		||||
    ___________________QWERTY_L1_x6_____________________, ___________________QWERTY_R1_x6_____________________,
 | 
			
		||||
    ___________________QWERTY_L2_x6_____________________, ___________________QWERTY_R2_x6_____________________,
 | 
			
		||||
    ___________________QWERTY_L3_x6_____________________, ___________________QWERTY_R3_x6_____________________,
 | 
			
		||||
    ____________________BOTTOM_L_x6_____________________, ____________________BOTTOM_R_x6_____________________
 | 
			
		||||
),
 | 
			
		||||
 | 
			
		||||
[_COLEMAK] = LAYOUT_wrapper(
 | 
			
		||||
    ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________,
 | 
			
		||||
    ________________COLEMAK_MOD_DH_L1_x6________________, ________________COLEMAK_MOD_DH_R1_x6________________,
 | 
			
		||||
    ________________COLEMAK_MOD_DH_L2_x6________________, ________________COLEMAK_MOD_DH_R2_x6________________,
 | 
			
		||||
    ________________COLEMAK_MOD_DH_L3_x6________________, ________________COLEMAK_MOD_DH_R3_x6________________,
 | 
			
		||||
    ____________________BOTTOM_L_x6_____________________, ____________________BOTTOM_R_x6_____________________
 | 
			
		||||
),
 | 
			
		||||
 | 
			
		||||
[_LOWER] = LAYOUT_wrapper(
 | 
			
		||||
  ____________________FUNC_LEFT_x6____________________, ____________________FUNC_RIGHT_x6___________________,
 | 
			
		||||
  ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________,
 | 
			
		||||
  _______, ______________UNICODE_L2_x5________________, ________________NAV_R2_x5__________________, XXXXXXX,
 | 
			
		||||
  _______, ______________UNICODE_L3_x5________________, ________________NAV_R3_x5__________________, _______,
 | 
			
		||||
  ______________________BLANK_6x______________________, ______________________BLANK_6x______________________
 | 
			
		||||
),
 | 
			
		||||
 | 
			
		||||
[_RAISE] = LAYOUT_wrapper(
 | 
			
		||||
  ___________________NUMBER_LEFT_x6___________________, ___________________NUMBER_RIGHT_x6__________________,
 | 
			
		||||
  ___________________SYMBOL_LEFT_x6___________________, ___________________SYMBOL_RIGHT_x6__________________,
 | 
			
		||||
  _______, ____________NAV_VIM_x4____________, XXXXXXX, ____________________SYMBOL_R2_x6____________________,
 | 
			
		||||
  _______, _________________NONE_5x___________________, ____________________SYMBOL_R3_x6____________________,
 | 
			
		||||
  ______________________BLANK_6x______________________, ______________________BLANK_6x______________________
 | 
			
		||||
),
 | 
			
		||||
 | 
			
		||||
[_ADJUST] = LAYOUT_wrapper(
 | 
			
		||||
  QK_BOOT, _________________NONE_5x___________________, ______________________NONE_6x_______________________,
 | 
			
		||||
  XXXXXXX, MU_ON,   AU_ON,   MI_ON,   XXXXXXX, XXXXXXX, _______________CONFIG_R1_x5________________,  QWERTY,
 | 
			
		||||
  RESET,   MU_MOD,  AU_TOG,  MI_TOG,  XXXXXXX, XXXXXXX, _______________CONFIG_R2_x5________________, XXXXXXX,
 | 
			
		||||
  XXXXXXX, MU_OFF,  AU_OFF,  MI_OFF,  XXXXXXX, XXXXXXX, _______________CONFIG_R3_x5________________, COLEMAK,
 | 
			
		||||
  ______________________BLANK_6x______________________, ______________________BLANK_6x______________________
 | 
			
		||||
)
 | 
			
		||||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
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 COLEMAK:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                set_single_persistent_default_layer(_COLEMAK);
 | 
			
		||||
            }
 | 
			
		||||
            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 BACKLIT:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                register_code(KC_RSFT);
 | 
			
		||||
#ifdef BACKLIGHT_ENABLE
 | 
			
		||||
                backlight_step();
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
                rgblight_step();
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef __AVR__
 | 
			
		||||
                writePinLow(E6);
 | 
			
		||||
#endif
 | 
			
		||||
            } else {
 | 
			
		||||
                unregister_code(KC_RSFT);
 | 
			
		||||
#ifdef __AVR__
 | 
			
		||||
                writePinHigh(E6);
 | 
			
		||||
#endif
 | 
			
		||||
            }
 | 
			
		||||
            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     = 50;
 | 
			
		||||
 | 
			
		||||
bool encoder_update_user(uint8_t index, 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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool dip_switch_update_user(uint8_t index, bool active) {
 | 
			
		||||
    switch (index) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            if (active) {
 | 
			
		||||
                layer_on(_ADJUST);
 | 
			
		||||
            } else {
 | 
			
		||||
                layer_off(_ADJUST);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        case 1:
 | 
			
		||||
            if (active) {
 | 
			
		||||
                muse_mode = true;
 | 
			
		||||
            } else {
 | 
			
		||||
                muse_mode = false;
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
    } else {
 | 
			
		||||
        if (muse_counter) {
 | 
			
		||||
            stop_all_notes();
 | 
			
		||||
            muse_counter = 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool music_mask_user(uint16_t keycode) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case RAISE:
 | 
			
		||||
        case LOWER:
 | 
			
		||||
            return false;
 | 
			
		||||
        default:
 | 
			
		||||
            return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								keyboards/preonic/keymaps/rmeli/readme.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/preonic/keymaps/rmeli/readme.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
# The default Preonic layout - largely based on the Planck's
 | 
			
		||||
							
								
								
									
										12
									
								
								keyboards/preonic/keymaps/rmeli/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								keyboards/preonic/keymaps/rmeli/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
TAP_DANCE_ENABLE = yes
 | 
			
		||||
AUTO_SHIFT_ENABLE = no
 | 
			
		||||
 | 
			
		||||
MAGIC_ENABLE = yes
 | 
			
		||||
 | 
			
		||||
UNICODEMAP_ENABLE = yes
 | 
			
		||||
 | 
			
		||||
# Turn off rev3_drop options
 | 
			
		||||
RGBLIGHT_ENABLE = no
 | 
			
		||||
MOUSEKEY_ENABLE = no
 | 
			
		||||
 | 
			
		||||
SRC += muse.c
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue