From f006ebebbd0d4f9c3e57e299fc5e3e0326560702 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Sun, 14 May 2017 16:07:44 -0400 Subject: [PATCH 01/24] Initial push of my keymap --- keyboards/s60_x/keymaps/bluebear/Makefile | 18 +++ keyboards/s60_x/keymaps/bluebear/config.h | 122 ++++++++++++++++ keyboards/s60_x/keymaps/bluebear/keymap.c | 154 +++++++++++++++++++++ keyboards/s60_x/keymaps/bluebear/readme.md | 25 ++++ 4 files changed, 319 insertions(+) create mode 100644 keyboards/s60_x/keymaps/bluebear/Makefile create mode 100644 keyboards/s60_x/keymaps/bluebear/config.h create mode 100644 keyboards/s60_x/keymaps/bluebear/keymap.c create mode 100644 keyboards/s60_x/keymaps/bluebear/readme.md diff --git a/keyboards/s60_x/keymaps/bluebear/Makefile b/keyboards/s60_x/keymaps/bluebear/Makefile new file mode 100644 index 0000000000..dfefad39da --- /dev/null +++ b/keyboards/s60_x/keymaps/bluebear/Makefile @@ -0,0 +1,18 @@ +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # 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 +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +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. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +TAP_DANCE_ENABLE = no # Enable tap dancing keys + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/s60_x/keymaps/bluebear/config.h b/keyboards/s60_x/keymaps/bluebear/config.h new file mode 100644 index 0000000000..2cf96383c1 --- /dev/null +++ b/keyboards/s60_x/keymaps/bluebear/config.h @@ -0,0 +1,122 @@ +/* +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 0x0003 +#define MANUFACTURER Sentraq +#define PRODUCT S60-RGB +#define DESCRIPTION QMK keyboard firmware for Sentraq S60-RGB + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +// ROWS: Top to bottom, COLS: Left to right + +#define MATRIX_ROW_PINS { B5, B4, D7, D6, D4 } +#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, B6, C6, C7, F1, F0, E6, B3, B2, B1, B0 } +#define UNUSED_PINS + +#define BACKLIGHT_PIN B7 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* 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)) \ +) + +/* Backlight configuration + */ +#define BACKLIGHT_LEVELS 3 + +/* Underlight configuration + */ + +#define RGB_DI_PIN F6 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 10 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * 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 + +// For Tap Dancing + +#define TAPPING_TOGGLE 1 +#define TAPPING_TERM 300 + +/* + * 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 + +#endif diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c new file mode 100644 index 0000000000..3861ad04f0 --- /dev/null +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -0,0 +1,154 @@ +#include "s60_x.h" + +// Keyboard Layers + +enum keyboard_layers { + BASE = 0, //Base Layer + ARROW, //Arrow/FN Layer + MOUSE, //Mouse Layer + MIDI, //Midi Layer +}; + +// Midi Chord Keycodes + +enum midi_chord_keycodes { + + //Major Chords + + MI_CH_C = SAFE_RANGE, + MI_CH_Cs, + MI_CH_Db = MI_CH_Cs, + MI_CH_D, + MI_CH_Ds, + MI_CH_Eb = MI_CH_Ds, + MI_CH_E, + MI_CH_F, + MI_CH_Fs, + MI_CH_Gb = MI_CH_Fs, + MI_CH_G, + MI_CH_Gs, + MI_CH_Ab = MI_CH_Gs, + MI_CH_A, + MI_CH_As, + MI_CH_Bb = MI_CH_As, + MI_CH_B, + + //Minor Chords + + MI_CH_Cm, + MI_CH_Csm, + MI_CH_Dbm = MI_CH_Csm, + MI_CH_Dm, + MI_CH_Dsm, + MI_CH_Ebm = MI_CH_Dsm, + MI_CH_Em, + MI_CH_Fm, + MI_CH_Fsm, + MI_CH_Gbm = MI_CH_Fsm, + MI_CH_Gm, + MI_CH_Gsm, + MI_CH_Abm = MI_CH_Gsm, + MI_CH_Am, + MI_CH_Asm, + MI_CH_Bbm = MI_CH_Asm, + MI_CH_Bm, +}; + +//Keymaps + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* 0: Custom Dvorak/HHKBish Base Layer + + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ [ │ ] │ \ │ ` │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ TAB │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │BSPC │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │CT/ES│ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │▒▒▒▒▒│CT/EN│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │LSPO │▒▒▒▒▒│ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │▒▒▒▒▒│RSPC │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │MO(2)│L_GUI│L_ALT│█████│█████│█████│SPFN1│█████│█████│█████│AG/AP│R_GUI│CT|S │CT|AL│█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + + [BASE] = KEYMAP( + 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_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC, \ + CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_NO, MT(MOD_RCTL, KC_ENT), \ + KC_LSPO, KC_NO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_NO, KC_RSPC, KC_NO, \ + MO(2), KC_LGUI, KC_LALT, LT(1, KC_SPACE), ALGR_T(KC_APP), KC_RGUI, OSM(MOD_LCTL | MOD_LSFT), OSM(MOD_LCTL | MOD_LALT) + ), + + /* 1: Arrow/Missing Keys Layer + + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │TG(3)│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │CAPS │ │ │ │ │ │ │PGUP │ UP │HOME │ END │ │ INS │ DEL │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │ │LEFT │DOWN │RIGHT│ │ │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ │ │ │ │ │SPACE│PGDN │PSCR │SLCK │PAUSE│▒▒▒▒▒│ │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + + [ARROW] = KEYMAP( + TG(3), 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_NO, \ + KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_HOME, KC_END, KC_NO, KC_INS, KC_DEL, \ + KC_TRNS, 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_TRNS, \ + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_TRNS, KC_NO, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + /* 2: Mouse Keys Layer + + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │RESET│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ │ │ │ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │ │BTN1 │MS_UP│BTN2 │WH_UP│ │ │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │ │ │ │ │MS_LT│MS_DN│MS_RT│WH_DN│BTN3 │▒▒▒▒▒│ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│ PWR │█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + + [MOUSE] = KEYMAP( + + 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_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_UP, KC_BTN2, KC_WH_U, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_WH_D, KC_BTN3, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_TRNS, KC_NO, KC_NO, KC_POWER, KC_NO, KC_NO, KC_NO, KC_NO + ), + + /* 3: Midi Layer + + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │TG(0)│ Cmaj│ Gmaj│ Dmaj│ Amaj│ Emaj│ Bmaj│Gbmaj│Dbmaj│Abmaj│Ebmaj│Bbmaj│ Fmaj│ │ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ C# │ D# │ │ F# │ G# │ A# │ │ C# │ D# │ │ │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │OCT- │ C │ D │ E │ F │ G │ A │ B │ C │ D │ E │ F │▒▒▒▒▒│OCT+ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ Am │▒▒▒▒▒│ Em │ Bm │ F#m │ C#m │ G#m │ D#m │ Bbm │ Fm │ Cm │ Gm │▒▒▒▒▒│ Dm │▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│A-OFF│█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + + [MIDI] = KEYMAP( + TO(0), MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Gb, MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, KC_NO, KC_NO, \ + KC_NO, KC_NO, MI_Cs, MI_Ds, KC_NO, MI_Fs, MI_Gs, MI_As, KC_NO, MI_Cs_1, MI_Ds_1, KC_NO, KC_NO, KC_NO, \ + MI_OCTD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, KC_NO, MI_OCTU, \ + MI_CH_Am, KC_NO, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm, MI_CH_Csm, MI_CH_Gsm, MI_CH_Dsm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, KC_NO, MI_CH_Dm, KC_NO, \ + KC_NO, KC_NO, KC_NO, MI_ALLOFF, KC_NO, KC_NO, KC_NO, KC_NO + ), + +}; diff --git a/keyboards/s60_x/keymaps/bluebear/readme.md b/keyboards/s60_x/keymaps/bluebear/readme.md new file mode 100644 index 0000000000..579683abcb --- /dev/null +++ b/keyboards/s60_x/keymaps/bluebear/readme.md @@ -0,0 +1,25 @@ +## Bluebear’s custom S60X layout + +Custom keyboard layout for my S60X, my first ever custom mechanical keyboard kit. + +This layout was inspired in part by the HHKB line of keyboards and a quest to find the perfect ergonomic, logical layout for what I do. If you like this layout, please feel free to use it, modify it and share it. + +## Base Layer + +-Hold left control key for LCTL, and tap it for ESC +-Hold enter key for RCTL and tap for ENT +-Hold the space key to momentarily switch to [ARROW] layer +-Left bottom key acts as momentary switch to the [MOUSE] layer +-Hold right alt key for AltGr and tap for APP(which I have mapped to Compose in OS) +-Hold left shift key for LSFT and tap for ( (Space Cadet style) +-Hold right shift key for RSFT and tap for ) (Space Cadet style) +-Tap key on bottom row, second from the right (where APP usually is) to get CTL-Shift (one shot modifier - next key pressed will be modified by ctl-shift) +-Tap key on bottom right to get CTL-Alt (one shot modifier - next key pressed will be modified by ctl-alt) + +## Mouse Layer + +-Hitting the escape key in this layer will give RESET, which puts the controller into dfu mode for flashing firmware onto it +-Hitting the space key in this layer is like hitting power button on computer + + + From ee0b34feaf99debbc47fe736001181dffa3cd6b1 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Sun, 14 May 2017 20:07:35 -0400 Subject: [PATCH 02/24] Started working on custom midi chord function --- keyboards/s60_x/keymaps/bluebear/keymap.c | 68 +++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 3861ad04f0..f963043c19 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -11,6 +11,13 @@ enum keyboard_layers { // Midi Chord Keycodes +bool midi_chord(uint8_t mode, uint16_t root); + +enum midi_chord_modes { + major = 0, + minor, +}; + enum midi_chord_keycodes { //Major Chords @@ -152,3 +159,64 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; + +// Midi Chord Function + +bool midi_chord(uint8_t mode, uint16_t root) { + switch (mode) { + case 0: + uint8_t channel = midi_config.channel; + uint8_t tone = root - MIDI_TONE_MIN; + uint8_t velocity = compute_velocity(midi_config.velocity); + if (record->event.pressed) { + uint8_t root_note = midi_compute_note(root); + uint8_t major_third = midi_compute_note(root) + 4; + uint8_t fifth = midi_compute_note(root) + 7; + midi_send_noteon(&midi_device, channel, root_note, velocity); + midi_send_noteon(&midi_device, channel, major_third, velocity); + midi_send_noteon(&midi_device, channel, fifth, velocity); + tone_status[tone] = root_note; + } + else { + uint8_t root_note = tone_status[tone]; + uint8_t major_third = root_note + 4; + uint8_t fifth = root_note + 7; + if (root_note != MIDI_INVALID_NOTE) + { + midi_send_noteoff(&midi_device, channel, root_note, velocity); + midi_send_noteoff(&midi_device, channel, major_third, velocity); + midi_send_noteoff(&midi_device, channel, fifth, velocity); + } + tone_status[tone] = MIDI_INVALID_NOTE; + } + return false; + case 1: + uint8_t channel = midi_config.channel; + uint8_t tone = root - MIDI_TONE_MIN; + uint8_t velocity = compute_velocity(midi_config.velocity); + if (record->event.pressed) { + uint8_t root_note = midi_compute_note(root); + uint8_t minor_third = midi_compute_note(root) + 3; + uint8_t fifth = midi_compute_note(root) + 7; + midi_send_noteon(&midi_device, channel, root_note, velocity); + midi_send_noteon(&midi_device, channel, major_third, velocity); + midi_send_noteon(&midi_device, channel, fifth, velocity); + tone_status[tone] = root_note; + } + else { + uint8_t root_note = tone_status[tone]; + uint8_t minor_third = root_note + 3; + uint8_t fifth = root_note + 7; + if (root_note != MIDI_INVALID_NOTE) + { + midi_send_noteoff(&midi_device, channel, root_note, velocity); + midi_send_noteoff(&midi_device, channel, minor_third, velocity); + midi_send_noteoff(&midi_device, channel, fifth, velocity); + } + tone_status[tone] = MIDI_INVALID_NOTE; + } + return false; + }; + return true; +}; + From 814b570ba1f2f9a12996c50844b7c8861ec1e919 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 15 May 2017 22:56:33 -0400 Subject: [PATCH 03/24] Working on keymap.c file... --- keyboards/s60_x/keymaps/bluebear/keymap.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index f963043c19..124c482b2c 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -9,15 +9,16 @@ enum keyboard_layers { MIDI, //Midi Layer }; -// Midi Chord Keycodes +// Midi Chord Keycodes +/* bool midi_chord(uint8_t mode, uint16_t root); enum midi_chord_modes { major = 0, minor, }; - +*/ enum midi_chord_keycodes { //Major Chords @@ -160,6 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; +/* // Midi Chord Function bool midi_chord(uint8_t mode, uint16_t root) { @@ -199,7 +201,7 @@ bool midi_chord(uint8_t mode, uint16_t root) { uint8_t minor_third = midi_compute_note(root) + 3; uint8_t fifth = midi_compute_note(root) + 7; midi_send_noteon(&midi_device, channel, root_note, velocity); - midi_send_noteon(&midi_device, channel, major_third, velocity); + midi_send_noteon(&midi_device, channel, minor_third, velocity); midi_send_noteon(&midi_device, channel, fifth, velocity); tone_status[tone] = root_note; } @@ -219,4 +221,4 @@ bool midi_chord(uint8_t mode, uint16_t root) { }; return true; }; - +*/ From 26c6f6a85c9c16a3be27e6c61609b3da99ec3f73 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Tue, 16 May 2017 22:08:45 -0400 Subject: [PATCH 04/24] Added Space Cadet Rollover Disable to config.h --- keyboards/s60_x/keymaps/bluebear/config.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/keyboards/s60_x/keymaps/bluebear/config.h b/keyboards/s60_x/keymaps/bluebear/config.h index 2cf96383c1..94438bdc9f 100644 --- a/keyboards/s60_x/keymaps/bluebear/config.h +++ b/keyboards/s60_x/keymaps/bluebear/config.h @@ -119,4 +119,7 @@ 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 2 +// Space Cadet Rollover - if set, allows to tap opposite shift key to cancel erroneous press +#define DISABLE_SPACE_CADET_ROLLOVER + #endif From b766407cbe07e78f5cf5ce2ec77694541d598e0e Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Sun, 21 May 2017 08:40:42 -0400 Subject: [PATCH 05/24] Continuing work on keymap.c --- keyboards/s60_x/keymaps/bluebear/keymap.c | 450 ++++++++++++++++++++-- 1 file changed, 416 insertions(+), 34 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 124c482b2c..0b3b8b65b9 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -4,62 +4,140 @@ enum keyboard_layers { BASE = 0, //Base Layer - ARROW, //Arrow/FN Layer + ARROWFN, //Arrow/FN Layer MOUSE, //Mouse Layer MIDI, //Midi Layer + MORSE, //Morse Code Layer }; +// Midi Chords -// Midi Chord Keycodes -/* -bool midi_chord(uint8_t mode, uint16_t root); - -enum midi_chord_modes { +enum midi_chord_modes { //ACTION_FUNCTION id major = 0, minor, }; -*/ + +enum midi_chord_root { //ACTION_FUNCTION opt + C = 0, + Cs, + Db = Cs, + D, + Ds, + Eb = Ds, + E, + F, + Fs, + Gb = Fs, + G, + Gs, + Ab = Gs, + A, + As, + Bb = As, + B, +}; + enum midi_chord_keycodes { //Major Chords - MI_CH_C = SAFE_RANGE, - MI_CH_Cs, + MI_CH_C = ACTION_FUNCTION(0, 0), + MI_CH_Cs = ACTION_FUNCTION(0, 1), MI_CH_Db = MI_CH_Cs, - MI_CH_D, - MI_CH_Ds, + MI_CH_D = ACTION_FUNCTION(0, 2), + MI_CH_Ds = ACTION_FUNCTION(0, 3), MI_CH_Eb = MI_CH_Ds, - MI_CH_E, - MI_CH_F, - MI_CH_Fs, + MI_CH_E = ACTION_FUNCTION(0, 4), + MI_CH_F = ACTION_FUNCTION(0, 5), + MI_CH_Fs = ACTION_FUNCTION(0, 6), MI_CH_Gb = MI_CH_Fs, - MI_CH_G, - MI_CH_Gs, + MI_CH_G = ACTION_FUNCTION(0, 7), + MI_CH_Gs = ACTION_FUNCTION(0, 8), MI_CH_Ab = MI_CH_Gs, - MI_CH_A, - MI_CH_As, + MI_CH_A = ACTION_FUNCTION(0, 9), + MI_CH_As = ACTION_FUNCTION(0, 10), MI_CH_Bb = MI_CH_As, - MI_CH_B, + MI_CH_B = ACTION_FUNCTION(0, 11), //Minor Chords - MI_CH_Cm, - MI_CH_Csm, + MI_CH_Cm = ACTION_FUNCTION(1, 0), + MI_CH_Csm = ACTION_FUNCTION(1, 1), MI_CH_Dbm = MI_CH_Csm, - MI_CH_Dm, - MI_CH_Dsm, + MI_CH_Dm = ACTION_FUNCTION(1, 2), + MI_CH_Dsm = ACTION_FUNCTION(1, 3), MI_CH_Ebm = MI_CH_Dsm, - MI_CH_Em, - MI_CH_Fm, - MI_CH_Fsm, + MI_CH_Em = ACTION_FUNCTION(1, 4), + MI_CH_Fm = ACTION_FUNCTION(1, 5), + MI_CH_Fsm = ACTION_FUNCTION(1, 6), MI_CH_Gbm = MI_CH_Fsm, - MI_CH_Gm, - MI_CH_Gsm, + MI_CH_Gm = ACTION_FUNCTION(1, 7), + MI_CH_Gsm= ACTION_FUNCTION(1, 8), MI_CH_Abm = MI_CH_Gsm, - MI_CH_Am, - MI_CH_Asm, + MI_CH_Am = ACTION_FUNCTION(1, 9), + MI_CH_Asm = ACTION_FUNCTION(1, 10), MI_CH_Bbm = MI_CH_Asm, - MI_CH_Bm, + MI_CH_Bm = ACTION_FUNCTION(1, 11), +}; + +//Morse Code Macro Keys + +enum morse_macros { + MC_0 = M(0), + MC_1 = M(1), + MC_2 = M(2), + MC_3 = M(3), + MC_4 = M(4), + MC_5 = M(5), + MC_6 = M(6), + MC_7 = M(7), + MC_8 = M(8), + MC_9 = M(9), + MC_A = M(10), + MC_B = M(11), + MC_C = M(12), + MC_D = M(13), + MC_E = M(14), + MC_F = M(15), + MC_G = M(16), + MC_H = M(17), + MC_I = M(18), + MC_J = M(19), + MC_K = M(20), + MC_L = M(21), + MC_M = M(22), + MC_N = M(23), + MC_O = M(24), + MC_P = M(25), + MC_Q = M(26), + MC_R = M(27), + MC_S = M(28), + MC_T = M(29), + MC_U = M(30), + MC_V = M(31), + MC_W = M(32), + MC_X = M(33), + MC_Y = M(34), + MC_Z = M(35), + MC_DOT = M(36), + MC_COMM = M(37), + MC_QUES = M(38), + MC_APOS = M(39), + MC_EXCL = M(40), + MC_SLSH = M(41), + MC_PARO = M(42), + MC_PARC = M(43), + MC_AMP = M(44), + MC_COL = M(45), + MC_SCLN = M(46), + MC_EQL = M(47), + MC_PLUS = M(48), + MC_MINS = M(49), + MC_QUOT = M(50), + MC_DOLR = M(51), + MC_AT = M(52), + MC_UNDS = M(53), + MC_SPACE = M(54), }; //Keymaps @@ -89,7 +167,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MO(2), KC_LGUI, KC_LALT, LT(1, KC_SPACE), ALGR_T(KC_APP), KC_RGUI, OSM(MOD_LCTL | MOD_LSFT), OSM(MOD_LCTL | MOD_LALT) ), - /* 1: Arrow/Missing Keys Layer + /* 1: Arrow/FN Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │TG(3)│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ │ @@ -104,7 +182,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - [ARROW] = KEYMAP( + [ARROWFN] = KEYMAP( TG(3), 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_NO, \ KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_HOME, KC_END, KC_NO, KC_INS, KC_DEL, \ KC_TRNS, 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_TRNS, \ @@ -159,12 +237,316 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_NO, KC_NO, KC_NO, MI_ALLOFF, KC_NO, KC_NO, KC_NO, KC_NO ), + /* 4: Morse Code Layer + + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ │ │ │ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │BSPC │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │▒▒▒▒▒│ENTER│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │SHIFT│▒▒▒▒▒│ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │▒▒▒▒▒│SHIFT│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│SPACE│█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + + [MORSE] = KEYMAP( + KC_NO, MC_1, MC_2, MC_3, MC_4, MC_5, MC_6, MC_7, MC_8, MC_9, MC_0, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, MC_APOS, MC_COMM, MC_DOT, MC_P, MC_Y, MC_F, MC_G, MC_C, MC_R, MC_L, MC_SLSH, MC_EQL, KC_BSPC, \ + KC_NO, MC_A, MC_O, MC_E, MC_U, MC_I, MC_D, MC_H, MC_T, MC_N, MC_S, MC_MINS, KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, MC_SCLN, MC_Q, MC_J, MC_K, MC_X, MC_B, MC_M, MC_W, MC_V, MC_Z, KC_NO, KC_RSFT, KC_NO, \ + KC_NO, KC_NO, KC_NO, MC_SPACE, KC_NO, KC_NO, KC_NO, KC_NO + ), + +}; + +// Morse Code Macros + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: //Number 0 + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //----- + } + break; + case 1: //Number 1 + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.---- + } + break; + case 2: //Number 2 + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //..--- + } + break; + case 3: // Number 3 + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //...-- + } + break; + case 4: //Number 4 + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //....- + } + break; + case 5: //Number 5 + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //..... + } + break; + case 6: //Number 6 + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-.... + } + break; + case 7: //Number 7 + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //--... + } + break; + case 8: //Number 8 + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //---.. + } + break; + case 9: //Number 9 + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(DOT), T(SPACE), END); //----. + } + break; + case 10: //Letter A + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(SPACE), END); //.- + } + break; + case 11: //Letter B + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-... + } + break; + case 12: //Letter C + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-. + } + break; + case 13: //Letter D + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(DOT), T(SPACE), END); //-.. + } + break; + case 14: //Letter E + if (record->event.pressed) { + return MACRO(T(DOT), T(SPACE), END); //. + } + break; + case 15: //Letter F + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //..-. + } + break; + case 16: //Letter G + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(DOT), T(SPACE), END); //--. + } + break; + case 17: //Letter H + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.... + } + break; + case 18: //Letter I + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(SPACE), END); //.. + } + break; + case 19: //Letter J + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.--- + } + break; + case 20: //Letter K + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.- + } + break; + case 21: //Letter L + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(SPACE), END); //.-.. + } + break; + case 22: //Letter M + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(SPACE), END); //-- + } + break; + case 23: //Letter N + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(SPACE), END); //-. + } + break; + case 24: //Letter O + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(MINS), T(SPACE), END); //--- + } + break; + case 25: //Letter P + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //.--. + } + break; + case 26: //Letter Q + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //--.- + } + break; + case 27: //Letter R + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-. + } + break; + case 28: //Letter S + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(DOT), T(SPACE), END); //... + } + break; + case 29: //Letter T + if (record->event.pressed) { + return MACRO(T(MINS), T(SPACE), END); //- + } + break; + case 30: //Letter U + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(MINS), T(SPACE), END); //..- + } + break; + case 31: //Letter V + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...- + } + break; + case 32: //Letter W + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(MINS), T(SPACE), END); //.-- + } + break; + case 33: //Letter X + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-..- + } + break; + case 34: //Letter Y + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-- + } + break; + case 35: //Letter Z + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //--.. + } + break; + case 36: //Punctuation . + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(SPACE), END); //.-.-.- + } + break; + case 37: //Punctuation , + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //--..-- + } + break; + case 38: //Punctuation ? + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //..--.. + } + break; + case 39: //Punctuation ' + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-....- + } + break; + case 40: //Punctuation ! + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-.-- + } + break; + case 41: //Punctuation / + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-..-. + } + break; + case 42: //Punctuation ( + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-.--. + } + break; + case 43: //Punctuation ) + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- + } + break; + case 44: //Punctuation & + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.-... + } + break; + case 45: //Punctuation : + if (record->event.pressed) { + return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //---... + } + break; + case 46: //Punctuation ; + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-.-. + } + break; + case 47: //Punctuation = + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-...- + } + break; + case 48: //Punctuation + + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.-. + } + break; + case 49: //Punctuation - + if (record->event.pressed) { + return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-....- + } + break; + case 50: //Punctuation " + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-..-. + } + break; + case 51: //Punctuation $ + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-..- + } + break; + case 52: //Punctuation @ + if (record->event.pressed) { + return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.--.-. + } + break; + case 53: //Punctuation _ + if (record->event.pressed) { + return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.- + case 54: //Morse Space + if (record->event.pressed) { + return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse + } + break; + } + return MACRO_NONE; }; /* // Midi Chord Function -bool midi_chord(uint8_t mode, uint16_t root) { switch (mode) { case 0: uint8_t channel = midi_config.channel; From 06433eb1a0563fe8c17bdd31c42d5f6b94a6e508 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Sun, 21 May 2017 22:37:20 -0400 Subject: [PATCH 06/24] More work on keymap.c and config.h --- keyboards/s60_x/keymaps/bluebear/config.h | 5 +- keyboards/s60_x/keymaps/bluebear/keymap.c | 296 ++++++++++++++-------- 2 files changed, 197 insertions(+), 104 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/config.h b/keyboards/s60_x/keymaps/bluebear/config.h index 94438bdc9f..5c0d08833f 100644 --- a/keyboards/s60_x/keymaps/bluebear/config.h +++ b/keyboards/s60_x/keymaps/bluebear/config.h @@ -121,5 +121,8 @@ along with this program. If not, see . // Space Cadet Rollover - if set, allows to tap opposite shift key to cancel erroneous press #define DISABLE_SPACE_CADET_ROLLOVER - + +// Prevent stuck modifiers +#define PREVENT_STUCK_MODIFIERS + #endif diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 0b3b8b65b9..d383d2e284 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -3,7 +3,7 @@ // Keyboard Layers enum keyboard_layers { - BASE = 0, //Base Layer + BASE, //Base Layer ARROWFN, //Arrow/FN Layer MOUSE, //Mouse Layer MIDI, //Midi Layer @@ -13,12 +13,12 @@ enum keyboard_layers { // Midi Chords enum midi_chord_modes { //ACTION_FUNCTION id - major = 0, + major, minor, }; enum midi_chord_root { //ACTION_FUNCTION opt - C = 0, + C, Cs, Db = Cs, D, @@ -41,43 +41,43 @@ enum midi_chord_keycodes { //Major Chords - MI_CH_C = ACTION_FUNCTION(0, 0), - MI_CH_Cs = ACTION_FUNCTION(0, 1), + MI_CH_C = ACTION_FUNCTION_OPT(major,C), + MI_CH_Cs = ACTION_FUNCTION_OPT(major,Cs), MI_CH_Db = MI_CH_Cs, - MI_CH_D = ACTION_FUNCTION(0, 2), - MI_CH_Ds = ACTION_FUNCTION(0, 3), + MI_CH_D = ACTION_FUNCTION_OPT(major,D), + MI_CH_Ds = ACTION_FUNCTION_OPT(major,Ds), MI_CH_Eb = MI_CH_Ds, - MI_CH_E = ACTION_FUNCTION(0, 4), - MI_CH_F = ACTION_FUNCTION(0, 5), - MI_CH_Fs = ACTION_FUNCTION(0, 6), + MI_CH_E = ACTION_FUNCTION_OPT(major,E), + MI_CH_F = ACTION_FUNCTION_OPT(major,F), + MI_CH_Fs = ACTION_FUNCTION_OPT(major,Fs), MI_CH_Gb = MI_CH_Fs, - MI_CH_G = ACTION_FUNCTION(0, 7), - MI_CH_Gs = ACTION_FUNCTION(0, 8), + MI_CH_G = ACTION_FUNCTION_OPT(major,G), + MI_CH_Gs = ACTION_FUNCTION_OPT(major,Gs), MI_CH_Ab = MI_CH_Gs, - MI_CH_A = ACTION_FUNCTION(0, 9), - MI_CH_As = ACTION_FUNCTION(0, 10), + MI_CH_A = ACTION_FUNCTION_OPT(major,A), + MI_CH_As = ACTION_FUNCTION_OPT(major,As), MI_CH_Bb = MI_CH_As, - MI_CH_B = ACTION_FUNCTION(0, 11), + MI_CH_B = ACTION_FUNCTION_OPT(major,B), //Minor Chords - MI_CH_Cm = ACTION_FUNCTION(1, 0), - MI_CH_Csm = ACTION_FUNCTION(1, 1), + MI_CH_Cm = ACTION_FUNCTION_OPT(minor,C), + MI_CH_Csm = ACTION_FUNCTION_OPT(minor,Cs), MI_CH_Dbm = MI_CH_Csm, - MI_CH_Dm = ACTION_FUNCTION(1, 2), - MI_CH_Dsm = ACTION_FUNCTION(1, 3), + MI_CH_Dm = ACTION_FUNCTION_OPT(minor,D), + MI_CH_Dsm = ACTION_FUNCTION_OPT(minor,Ds), MI_CH_Ebm = MI_CH_Dsm, - MI_CH_Em = ACTION_FUNCTION(1, 4), - MI_CH_Fm = ACTION_FUNCTION(1, 5), - MI_CH_Fsm = ACTION_FUNCTION(1, 6), + MI_CH_Em = ACTION_FUNCTION_OPT(minor,E), + MI_CH_Fm = ACTION_FUNCTION_OPT(minor,F), + MI_CH_Fsm = ACTION_FUNCTION_OPT(minor,Fs), MI_CH_Gbm = MI_CH_Fsm, - MI_CH_Gm = ACTION_FUNCTION(1, 7), - MI_CH_Gsm= ACTION_FUNCTION(1, 8), + MI_CH_Gm = ACTION_FUNCTION_OPT(minor,G), + MI_CH_Gsm= ACTION_FUNCTION_OPT(minor,Gs), MI_CH_Abm = MI_CH_Gsm, - MI_CH_Am = ACTION_FUNCTION(1, 9), - MI_CH_Asm = ACTION_FUNCTION(1, 10), + MI_CH_Am = ACTION_FUNCTION_OPT(minor,A), + MI_CH_Asm = ACTION_FUNCTION_OPT(minor,As), MI_CH_Bbm = MI_CH_Asm, - MI_CH_Bm = ACTION_FUNCTION(1, 11), + MI_CH_Bm = ACTION_FUNCTION_OPT(minor,B), }; //Morse Code Macro Keys @@ -166,11 +166,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSPO, KC_NO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_NO, KC_RSPC, KC_NO, \ MO(2), KC_LGUI, KC_LALT, LT(1, KC_SPACE), ALGR_T(KC_APP), KC_RGUI, OSM(MOD_LCTL | MOD_LSFT), OSM(MOD_LCTL | MOD_LALT) ), - + /* 1: Arrow/FN Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ - │TG(3)│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ │ + │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │TO(3)│TO(4)│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │CAPS │ │ │ │ │ │ │PGUP │ UP │HOME │ END │ │ INS │ DEL │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ @@ -183,17 +183,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [ARROWFN] = KEYMAP( - TG(3), 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_NO, \ - KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_HOME, KC_END, KC_NO, KC_INS, KC_DEL, \ - KC_TRNS, 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_TRNS, \ - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_TRNS, KC_NO, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS - ), + 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, TO(3), TO(4), \ + KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_HOME, KC_END, KC_NO, KC_INS, KC_DEL, \ + KC_TRNS, 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_TRNS, \ + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_TRNS, KC_NO, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), /* 2: Mouse Keys Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ - │RESET│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ │ │ │ │ + │RESET│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ │ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ │ │ │ │ │ │ │BTN1 │MS_UP│BTN2 │WH_UP│ │ │ │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ @@ -217,7 +217,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 3: Midi Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ - │TG(0)│ Cmaj│ Gmaj│ Dmaj│ Amaj│ Emaj│ Bmaj│Gbmaj│Dbmaj│Abmaj│Ebmaj│Bbmaj│ Fmaj│ │ │ + │TO(0)│ Cmaj│ Gmaj│ Dmaj│ Amaj│ Emaj│ Bmaj│Gbmaj│Dbmaj│Abmaj│Ebmaj│Bbmaj│ Fmaj│ │ │ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ │ │ C# │ D# │ │ F# │ G# │ A# │ │ C# │ D# │ │ │ │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ @@ -240,7 +240,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 4: Morse Code Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ - │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ │ │ │ │ + │TO(0)│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ │ │ │ │ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │BSPC │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ @@ -253,19 +253,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [MORSE] = KEYMAP( - KC_NO, MC_1, MC_2, MC_3, MC_4, MC_5, MC_6, MC_7, MC_8, MC_9, MC_0, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_NO, MC_APOS, MC_COMM, MC_DOT, MC_P, MC_Y, MC_F, MC_G, MC_C, MC_R, MC_L, MC_SLSH, MC_EQL, KC_BSPC, \ - KC_NO, MC_A, MC_O, MC_E, MC_U, MC_I, MC_D, MC_H, MC_T, MC_N, MC_S, MC_MINS, KC_NO, KC_ENT, \ - KC_LSFT, KC_NO, MC_SCLN, MC_Q, MC_J, MC_K, MC_X, MC_B, MC_M, MC_W, MC_V, MC_Z, KC_NO, KC_RSFT, KC_NO, \ - KC_NO, KC_NO, KC_NO, MC_SPACE, KC_NO, KC_NO, KC_NO, KC_NO - ), + TO(0), MC_1, MC_2, MC_3, MC_4, MC_5, MC_6, MC_7, MC_8, MC_9, MC_0, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_TAB, MC_APOS, MC_COMM, MC_DOT, MC_P, MC_Y, MC_F, MC_G, MC_C, MC_R, MC_L, MC_SLSH, MC_EQL, KC_BSPC, \ + KC_NO, MC_A, MC_O, MC_E, MC_U, MC_I, MC_D, MC_H, MC_T, MC_N, MC_S, MC_MINS, KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, MC_SCLN, MC_Q, MC_J, MC_K, MC_X, MC_B, MC_M, MC_W, MC_V, MC_Z, KC_NO, KC_RSFT, KC_NO, \ + KC_NO, KC_NO, KC_NO, MC_SPACE, KC_NO, KC_NO, KC_NO, KC_NO + ), }; // Morse Code Macros -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case 0: //Number 0 if (record->event.pressed) { @@ -319,131 +318,209 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case 10: //Letter A if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(MINS), T(SPACE), END); //.- } break; case 11: //Letter B if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-... } break; case 12: //Letter C if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-. } break; case 13: //Letter D if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(DOT), T(DOT), T(SPACE), END); //-.. } break; case 14: //Letter E if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(SPACE), END); //. } break; case 15: //Letter F if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //..-. } break; case 16: //Letter G if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(MINS), T(DOT), T(SPACE), END); //--. } break; case 17: //Letter H - if (record->event.pressed) { - return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.... + if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); } + return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.... + } break; case 18: //Letter I if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(DOT), T(SPACE), END); //.. } break; case 19: //Letter J if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.--- } break; case 20: //Letter K if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.- } break; case 21: //Letter L if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(SPACE), END); //.-.. } break; case 22: //Letter M if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(MINS), T(SPACE), END); //-- } break; case 23: //Letter N if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(DOT), T(SPACE), END); //-. } break; case 24: //Letter O if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(MINS), T(MINS), T(SPACE), END); //--- } break; case 25: //Letter P if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //.--. } break; case 26: //Letter Q if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //--.- } break; case 27: //Letter R if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-. } break; case 28: //Letter S if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(DOT), T(DOT), T(SPACE), END); //... } break; case 29: //Letter T if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(SPACE), END); //- } break; case 30: //Letter U if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(DOT), T(MINS), T(SPACE), END); //..- } break; case 31: //Letter V if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...- } break; case 32: //Letter W if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(MINS), T(MINS), T(SPACE), END); //.-- } break; case 33: //Letter X if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-..- } break; case 34: //Letter Y if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-- } break; case 35: //Letter Z if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //--.. } break; @@ -535,6 +612,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case 53: //Punctuation _ if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.- + } + break; case 54: //Morse Space if (record->event.pressed) { return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse @@ -547,60 +626,71 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) /* // Midi Chord Function - switch (mode) { - case 0: - uint8_t channel = midi_config.channel; - uint8_t tone = root - MIDI_TONE_MIN; - uint8_t velocity = compute_velocity(midi_config.velocity); - if (record->event.pressed) { - uint8_t root_note = midi_compute_note(root); - uint8_t major_third = midi_compute_note(root) + 4; - uint8_t fifth = midi_compute_note(root) + 7; - midi_send_noteon(&midi_device, channel, root_note, velocity); - midi_send_noteon(&midi_device, channel, major_third, velocity); - midi_send_noteon(&midi_device, channel, fifth, velocity); - tone_status[tone] = root_note; - } - else { - uint8_t root_note = tone_status[tone]; - uint8_t major_third = root_note + 4; - uint8_t fifth = root_note + 7; - if (root_note != MIDI_INVALID_NOTE) - { - midi_send_noteoff(&midi_device, channel, root_note, velocity); - midi_send_noteoff(&midi_device, channel, major_third, velocity); - midi_send_noteoff(&midi_device, channel, fifth, velocity); - } - tone_status[tone] = MIDI_INVALID_NOTE; - } - return false; - case 1: - uint8_t channel = midi_config.channel; - uint8_t tone = root - MIDI_TONE_MIN; - uint8_t velocity = compute_velocity(midi_config.velocity); - if (record->event.pressed) { - uint8_t root_note = midi_compute_note(root); - uint8_t minor_third = midi_compute_note(root) + 3; - uint8_t fifth = midi_compute_note(root) + 7; - midi_send_noteon(&midi_device, channel, root_note, velocity); - midi_send_noteon(&midi_device, channel, minor_third, velocity); - midi_send_noteon(&midi_device, channel, fifth, velocity); - tone_status[tone] = root_note; - } - else { - uint8_t root_note = tone_status[tone]; - uint8_t minor_third = root_note + 3; - uint8_t fifth = root_note + 7; - if (root_note != MIDI_INVALID_NOTE) - { - midi_send_noteoff(&midi_device, channel, root_note, velocity); - midi_send_noteoff(&midi_device, channel, minor_third, velocity); - midi_send_noteoff(&midi_device, channel, fifth, velocity); - } - tone_status[tone] = MIDI_INVALID_NOTE; - } - return false; - }; - return true; +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { +uint16_t root_note; +uint8_t channel = midi_config.channel; +uint8_t velocity = compute_velocity(midi_config.velocity); +switch (opt) { +case 0: //Root note C +root_note = MI_C; +case 1: //Root note C#/Db +root_note = MI_Cs; +case 2: // Root note D +root_note = MI_D; +case 3: // Root note D#/Eb +root_note = MI_Ds; +case 4: // Root note E +root_note = MI_E; +case 5: // Root note F +root_note = MI_F; +case 6: // Root note F#/Gb +root_note = MI_Fs; +case 7: // Root note G +root_note = MI_G; +case 8: // Root note G#/Ab +root_note = MI_Gs; +case 9: // Root note A +root_note = MI_A; +case 10: // Root note A#/Bb +root_note = MI_As; +case 11: // Root note B +root_note = MI_B; +switch (id) { +uint8_t tone = root_note - MIDI_TONE_MIN; +uint8_t root = midi_compute_note(root_note); +uint8_t major_third = midi_compute_note(root_note) + 4; +uint8_t minor_third = midi_compute_note(root_note) + 3; +uint8_t fifth = midi_compute_note(root_note) + 7; +case 0: //Major chord +if (record->event.pressed) { +midi_send_noteon(&midi_device, channel, root, velocity); +midi_send_noteon(&midi_device, channel, major_third, velocity); +midi_send_noteon(&midi_device, channel, fifth, velocity); +tone_status[tone] = root; +} +else { +uint8_t root = tone_status[tone]; +if (root != MIDI_INVALID_NOTE) +{ +midi_send_noteoff(&midi_device, channel, root, velocity); +} +tone_status[tone] = MIDI_INVALID_NOTE; +} +case 1: //Minor chord +if (record->event.pressed) { +midi_send_noteon(&midi_device, channel, root_note, velocity); +midi_send_noteon(&midi_device, channel, minor_third, velocity); +midi_send_noteon(&midi_device, channel, fifth, velocity); +} +else { +uint8_t root = tone_status[tone]; +if (root != MIDI_INVALID_NOTE) +{ +midi_send_noteoff(&midi_device, channel, root, velocity); +} +tone_status[tone] = MIDI_INVALID_NOTE; +} +} +} }; */ From 4d783d0e69444a660c53c95e83bf6ca011bc6c8e Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 22 May 2017 23:30:25 -0400 Subject: [PATCH 07/24] More work on my keymap.c and added .png images of my different layers. --- .../bluebear/S60X-Bluebear-ARROWFN-Layer.png | Bin 0 -> 17938 bytes .../bluebear/S60X-Bluebear-BASE-Layer.png | Bin 0 -> 28068 bytes .../bluebear/S60X-Bluebear-MIDI-Layer.png | Bin 0 -> 21329 bytes .../bluebear/S60X-Bluebear-MORSE-Layer.png | Bin 0 -> 14330 bytes .../bluebear/S60X-Bluebear-MOUSE-Layer.png | Bin 0 -> 16119 bytes keyboards/s60_x/keymaps/bluebear/keymap.c | 219 ++++++++++-------- 6 files changed, 120 insertions(+), 99 deletions(-) create mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-ARROWFN-Layer.png create mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-BASE-Layer.png create mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI-Layer.png create mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MORSE-Layer.png create mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MOUSE-Layer.png diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-ARROWFN-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-ARROWFN-Layer.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c6df504412616e24c67efae9d5b18e5097d222 GIT binary patch literal 17938 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 Xy^PQ2Z&xxfFfe$!`njxgN@xNAP|x$i literal 0 HcmV?d00001 diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-BASE-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-BASE-Layer.png new file mode 100644 index 0000000000000000000000000000000000000000..e77287a0f145f18a6ce5425cfbfc60d470c0092b GIT binary patch literal 28068 zcmeAS@N?(olHy`uVBq!ia0y~yV76mmU{vB@V_;yga9|f?U{GN2ba4!+nDb_DbpFcGMP8^CY0!|%WbL{K?-8$MWZeD%oSG=dE z=Zl}8pRX4c5m~TjkIdAmQ(GVk7pXjb`cy+h;{Zr@>Xa!hx0=s`nNz27#ydjH;<(s- z=~58Lyr{zubLWeTh;YPf!lY(5H8I8PsVM9|4$}7VgBe7kLpvxguC92!e_h?a4^u%d z;!tdvuujR|UY^GeYWMWEgY6JkJo;qt1Hy8OkzKOW!U>dq`D=atmm z*H(Ido?4uyre;T9Ut4>7`y>~4cV$!4sc~Hn`db%FkGkNk`(mlsmmu!)&zDSp#Kdpm z_|M1H@V5N$hxbbx4{-4>{qgjVRU%RC| zr%h{HvP4Cq*KJMg?rCw8ob^Ax_R_EFjPtL$*d6!DLI30HRqfN)9Xvj3QqzAH)<^cI z-wDYjSe>q)cE9yM3+o~^Q&CM#O#`Xk6DLjx#GN=dY2rl2#TPq5sx%q*UTKQUa)dea z&Oz_*50Z^%CPW)t$(*nv?oH#S=e7ZR0`yMJ`|fbI``qFF+=Br(eAH(6sHv!`np!VN z+bsF=<;$Q%v)L18&U{%ick-l335%wOT!vn{Z)YOAnTb(YOtlSW_ z_Qa`ES!QdiFL-OcaMhPwAig)HA@0j0#;Tq3!l$#yr$1a+vao&1!sUfOG^4K+eJC{R zsQ&(L>ZTvPvk&B$ZNG8j%Ov)yi{5Mqz3ZM{%{{pMhb8~Rhs#X6=4aP`@bvc=k9%^> z!{0x@Jo$2W+?Pe-dtazZfweugisP~4vHLQK2h4@LVBKR?ogWfBY+rV~{h!_R>frGN z0}lO)aMN$S(&iuj{eJ)W`u=~WRo~zB+SUGgu<^K@b5zuiU-5FJ6}Z|NH&%)9LYI?=FgdEqeNMVUCA%jm!Ioi61g|hbJZ~%GG>u zJaYW_;}a8=chvp0S{Jjk$+r5Nf|eH7$B!R3+{`&unK`R%v3q~gogIZ2On40q4G%Rp z$;GYT|IdnzSBjm&@uB=;OnacV~y<9oP3&UteA2zIyfQq1Z29R;^m) zv_5WcOLd9s-k8!l4P{Vl%+1P~eYVYAzE*VAV5FWm~WUq;D^TmuKGmX;|3?wE@pU%Gc;))viZ!a$&ulsNN{Z8`xvn?$w z3+4Y+UD39+mF48*{9*t9`G1b}ljp_FT6XaMefj17^WEa&iKFW~Lh? z9%8Ba|M&Z$+AnLaZ_B;Cq2_1NL%phM-RNyR)@5%5-YwcbUHhE*i>33X_h?Ag-0R=V zu4q@TaN&2^p1(Qy3Y9EcliCtaX~eU9-6i{-?SALo{l8h8{mo6j#sB{m{^#5F{jJL~ zSFB!rc$R7QhYyGOA2+hg9Vk9;+a4ZYD>`%L%pL##{hstd3l+A*0RLc*VY~~KU8()_4fULb?bh;R6jGv zQuuhkym*}U-aRJ1hZpzTbxoNfvL=4NoWK3wEuZ4d^X?q@e!srod%E7k<@4)=-Yrhw z`{?oGk4MGhIm$2Ie*O8p{qZ@L#VxyE+-+ZEzk1iIIJV}4s^2f{%-Wmca_hn4p0?w) z)!!W6X)_o8I^X=^L;}d;kK{fa|8%@5@wQOwnWx_m-CxcA>Ylt_=!cJAzlz2c?3Mn# za{0VN`)YqL$drn!d@8!F`t`j-G1uSsl5BPYmZBtsjIUG1_quu zd-iDh{MxqV^QyQkEiJvSdtWxuiQ99dZpCb!`(CdLS47XZtG%$?Uw+Bbr3<%g5jk)F zf6u45qeqWcJelaeAXAD@&Zfh)Ta2^((rSKF-^0`6>o}VaHl)w54eKgSy7RGl-`cpv zZoP*(h1FYjzj!-!@?_@8Csppa`mf)detuE;`+J9McP)zh`|GQ7UERI{@x6Ov41Y|S zGUdU%>UWJNQw}YkU)Lq9?x$d35s{^z`TfV4Dg%c7vM;;89R2(8J^!MHCxRTWO0Bgf zwcVIsteUB@<^T5?ItSI&)Z8i#e$9JxZ*TSEPft%@*fRV6uJ~OgoU@ia?AG6RV1{Ax zf=sDzZ*RA^%hyF{>ih1l^rZaIQc0=im4J?w+2Umo8l@IB)xXf&Y9vzUTi|Jo@_g`~AlU8kxWC%DuBAuww0( zRoAEKMhgfFH``W!TM)m$&Z6pzMp9DJgz3|lZ<*fn;^EV$Pg`frk^-gr(D3lXw{J)9 z=$;qHZ~H~yUgdLHaB;iN>4!zaE?K|H3-S{lNLn>^kpxw%XSf-F1km&7To+F#YMNsfW1Nl_!6H zclUOkhr5Rd$E3-V3m+b0b#Zrpd{jLCNWcBRjz(toN3YlK4?Fd`*Zf|=uIqtc6a}kt z61uy)7iOB9Z)xY3Z|m>x|5STp#@_1hN|u(Av%cMTeo*%QUatLj_fY+r7Y?t^zrW9- z{GE)6?_u-%HO&_;1n|h&NPPYJ)vNkshg{smi4*mH`c~J~*|G7-Xn<0|&CTh_Cnu?b zQ^Eh=`~P?U{QR7|{NnA?qRstlG$d;dHNQL3>ihlSk69i+D!(yIatCGmH8qzw-ZpFe z`ON?Q(Cc-#1FmXtoD`@@$>}&}_U*F2eXsfb8sS;X5}%)&%fZEUXhq=S4e96QT3TBl z-m89pRDFKUqB+x-W!~7B%>L}`YTW9n0)6dV#-9Ibruq%I`to5-6$}_`VTv)EHjc&hnD=H-|P07YahMAquB{X#E zr8uKS?bn~2ocy-k^mLP4T-s*I;AK97?-nf&4-6D!VrFgy6~|1>%z;5cN_SlI_1WYt z_q4FhpH_GL`P=kr`Hvu}RKILUp%m)_qW>;vsMKJ1cx=(uNxW4UQrS((|N zzkgfj|Gp%ef8+lDf8T#Rne1Nxic42l&hksAvwwek>*4F$dNARDyL>In=9_PX;$|&N zyt*pXqV(02zhzNTQop{x?`LFYpk{M_&kMnt6qohMdCW{q8`927$yk^1h;_5xum5j5Y0{*Y*nc-=?{9efbyBAD zX>h~f>Yi{{SJq=alFCl)Z_F*;(Yeqx;_1NtwU>^uK?dB>1%1|D87T$5TrJ zYzo$k|N3#i(Yi`P;6<(VyZ^1~*ZjB=KfGLa%&zzuPulr;y@`k09L9O_4f95|6O}+tFCHWSV*LwpC|fm(empv zjnf5$gp}?q)_$dW`T53qaYl=BKK%UY-~3^A{4cZWm)Xq+8yF9k8~xa@@ujOis1<2d z5xF*OrC#RU$o0bNeh0F)a(#c%RizuhFQ!X=`L)a13JMNgtD8z)_kMeGQ~Azf?L8?j zCm($Nc_{wC>vgxIcx-v>a&oFJdYgP%G@S?5{A(yWnEw1v-C8y|HhD8Ma9a>rHt68< zAG18})V6<~@c8y-_B!iJ;@rpB9(-K5SKvXZbu+*8Y)DhgRlmv;+>$)SGXMV{Q!akj z3QJzw^Znd8pOTkeD{p_ebB4p8hlRi=0$I|I~ToIJrMq_{aa}J@-G9E>2bW*JyZzybRUC4!o~7Z?@SwDM@`IpX$7*Hy?B-8;k9C!&aLua!Mr%9^IQg^w9%4PqI)8Vb`Gec4%oT;q=DAorafxMqu{4`Gr~ZDq zM|amfxD+W-18QRl8ox_6eY1w|$}E!=ti)MU?}_lpni`1h}%{dxTF{f9sP z+2NowSKyA;dVkKt`|UekO?!~MHR|GWfBA>4*H>>e^*#LV?(V|-wcih3zb>A9tmoj# z$?CC(KyANfHr}T7>-FF5esA~Y?(XZVd!$aBJlVK>`SJqwy?f+pJ~+0&J@n`2=h#E9 zZ*9$=|l`g)%^7J^ToKGl1u`fIPt`fb%` zXPfhfhK7PGmiXGQqTBNBYC(K1uhM^DJ)+|xCez~=KuJ=lt z3kV1_zpukI`vbK}-l*Zz9B{KuEe{@}_d#bxD#<|l$bR2Js1ZeMSz5dGoi{(5^* z*#!3N-unM_Dk>^B^5geZ2p&9m@Kkl|?lN9bDCU?+>xgj&1qU0ZoDg`r*W_)QN5!j^ z%Qs|S*UPNhxH-<%)%C--Z^uqdRDSsOZSVh|^Zz>*7H<3ms(x;4Nc?eq|36mW%LyAJ z3VwV@ocnEqi>>TSRE*Y>VjwMyn$;HCo)ls!Khg!Km9^%&D(GwmTI(6@SK3S_LLUHx~KF{Bna#Cm|$nnSfWSxC{ zc=}|m+cs@7I&$n-(yJ>gPgQ5mVvCQDUlX%ah>?*IlqxSSc8@)@x-t9ux`+RMzb~Kp zJ-n=J+u`Q{Wo6qw#TgnJR(w1vUij@z;rdYLZ>v0d?AW7UUtfdj*GYn^&HR(x74q*Y_{h9F{6N_=`ThO<@@kVgSBI@V z)GKWsbIkj)Nl18j^50)y!5x|JxAxcDCnY7lk&cM03VhG|=4iM0!{^VR3&oY+t5lz+ zAK%w4uAlVu)KtBT?Y%!Q&;O_LN5I^6FG$DNsBJlt$9kog@43FS__;yhBbP6)u5v$o z_^{&b*6RWyB1=G-?8BEYN0xd|Uyy0u+|Tpe)<|K;d{D3Y2Xz@hK7cE#a|_ScUQi< zbf}g4?e^}jt_M$_F5Pqe)Ku-cb)FL@PF%R<`b1@SnQsy?`)Y2co;&&K_I7=}xIHg| zYHv8y*4qC1`nr97{lCZ^ljA@@Lrbe^*RPMcg+@nn`}_OLSQIdXtrpea|HmjPDQU|0Nn6FOUzdJ(;3(1S_UFgr{vBm+ zrNs2(bdJWc*uMI@`~F`(?eKLiN0ScDGR=-z#eX)8@I} zYD3xED4RbY4xg$%di;3uw>LL8MCfQ}Xf&KmIdojUehnz#LFs5?&CjA6Ic7TX`((VQ z>y>iqM{axjCF}RMf?HcMH{8rQRQu)IBwjXow)uXh-*%P0Ub0(dZCw71z1827Zfr;d zb!>MOK3;NT@zDp5@0?EC{P6Ae`)>dL{S}mv>G|=aB0@(DlrEhkBPHeP{}lfC@#De6 zcKK;Z?>pjZEoy(2Xs+X1wmdv8P7YLfS5#L&Uf3?@6c;z|Q`~gD*h8R#S6*J8N6Lhw z{^#lVB{LSh3|!yU#bxvF$Kw~5m-DOn&FRn%U$>)Wy3Xygs;#xvI}#7G$yk^9?C8H2 zx9Q*mWrZInTCB~?_C9F_4@q70W|I)ObKcwS&c)TYoBUro@&8HxEb#E*GE2}vS5DyX z=JWUVRtJWMtM55+HgRiIqS@@*cW;1)n?Q{)?>PONOiX+4Z01j0Y`Q*=+s?GxHell; zzKr+0LUKiOTIY3%ZeN^M_`BKP&5do-rcDW3qguspM}FMAY14#>6ED6ywoH8Q3y?wG zai6M8WyAS9tomdU7rU?P8yQ>Xa8`6qm2%t!3%=KR4z{ch$4AKf1N6v~0a=x0s@eipxuu zIa8*zOqd`59^b3^&3OSV5k!om*iO6Si}yL`4=R-@x=N)vb>dF9HL1~YxWJ(dqW zoML3@yXVU!;i{F$KHo8W`n!Ybs;aCPFJ3&<8meGrbt^M4MBW)y)rIaY$@khg^jW1o-|JPgmvHHh3>-R@qTwMI|Fu%RV>(H>U zwuT0VH@CK)PMj%U|Hts%&gXI=;o;gZpRS4P4cr>nYgzqGXI|~M$d=aDgO@K0E4%l( zczJbwiaXvffBeVC#}A)BZ=WzhKt)Am!KO_?nd_r}Z%98suj0kR_JS`j0-x@6Sz8}o z_4L`Zq%SWnzPP$t+^tWh^Ua%_=^rKu?!6yhey5NfB%h7&}as9X>yGmah)ch!z{%I1U?VhBhqz~_Qzkl@V z>S|E!+;Yv+UtjX#ZvNA!PJMW_dVSK74#Bxm`jXYVm6K0AP)-cIW!2{B=*ahfI%8hP zo%64+eP41k$?^O=+o|7n6+UM3Q4==HyTjpoc|+l2w42 z-k5Z>OYQW%&FTEt*2S(~6Yk{16j%SZwEef=T&va>FEXkP!Y`hVln)CHT^PPT&g=Wa z)%*5?La?igD`QsMrAt9Se*D6^7-fnw*ykGlm z>4O7|Z*Fd8H_y8x5U0HN_0=D?H7_rzu8G{d%(s2*sdrQ7&gHGIuYdCNsiKC4M+JYG z>)sT{^_`J%aq~cfi)_47Et}KNbCth*Ww)o`ArmMrJtwQ}oHCu~#owKK(#}eqnPGT% z=^mF_%S*Dg5kWysUteEOesyK#x8Jj7r%#_cHSyDvlb|uBz2EP>E;vzs*vQ+<%OL3p zN6n9i?H5dV-|zh{=j7xhAR*DQ{a)4Shd(i+$F&bNQx(WHY-tlSs2 z=f{6}d71t4a{uk@AHVf2oN_Sz$A^bEwqy#wdi}ca$A`rB{C-|G=CHL7r~dQTcY{Wh z8y7maKY9^Zc>Lw-o9+95-+d2q-SheNaTRO9L(YuR+j0W$oxXhe^20x?qh&+CzPhDIsZMmEEPhY<-ZvW>4Gbj~( ze051j5Uzo4)c_Aq9=<#F2q9-1EKA*D= z%8B{91~i!ywmz=6qk{u9czgV4xA@fWlU_1AzpskjS0l;R%=q-_(?fG3)=%53q^vw~ z^5n}YH>XaW>cu|)#0ihz>2b++zg{Sdh>2;vF3tAM%FdoRV@AjC_xs~t+Lc`W9?tyt z*Vn`S_Wv~Qc;@TRe6_4xK5l=V>}<2#B8%_ac2<@J1PGiub?VLe-8DarUcG+(_Vk~p z`t_X)7AQ=aHtp7YVR7+x&~R>i?boS?19f|!zpkvT{P6wz`wy?#+1brGi*)BcTNv}9 zv%mlNmdwi&X3gq4bm&l8^ZA#TmkUZrXzcNH-Jh7cXmi}{?fLEn1qN}|Z%s4RW>;Nb zy=99?_O&&R2?+{(G8PN=O!twOhz-=A`6puiv%SyG&+iA#AxC~YH`jV9pIu>L;f)Q6 z&4+7QSy>Gvc=#ssU)?k3>XL2S#Ny(hSzBs`ef_=y`MrDYRXpZhUhM{=mhPSNHL)Q{n^K)<%{9szKYnRmXb8}x`knobMsi~=%Fnc!l?6Yl8o}@_duwA)& z_2&Hh8(!z!+?2}Kyhez}?rincY15MK?ker*=s2*a@^j3iJ6yBRw$=Z6EI-4tSgnm$ z8Z_GrY1*FsYX2hjQ}W(f-?g-~K!btT)iIE2n z5_0bD5}i7A>WR~*LH)pGJ~J1U?7c9#xgWL`VAkuyxAS(NRo&~d==ryRFVjn7pQ;Am z{qpYcuU}PrJ|2_idw$Q%{QNwdN~3>2j@vKVw@hoTFczyiXF(o@YxvN*N?kIUF zBv<<-@XTE6?as*>sUJLjd|Uzo1lssyyLzR~A5C-S%Zldt=sSoimJy!lO09jUqtyT7w9(s>cO zo?Bcm;nkIu9NgT_5fKugidIBiJo(0kM6YUDyBdk)<9)8{q-pt~X8CoS}gz1q&!%=q{B_u~tl+u!t?o1fRy(mHgcQ&>wc>K`udu^`)JeldsWy`+83$j6m{J zk553-1DZF#!wWL+D%d>86gp&HyuA6KyHm_oP&*%_3_87j@$}t<4-*B#b3voJNYm$E zip(WyRE~s#24^QRBDKGUu<;j8zXqi}@SJ@6*PzSZ(+pESOx&Q6E9=~RPysyHjfjA! z^Wx6ieCEk9n_VD(&D&Q$^4Nrf?uQm_Ddk}XPmHuq?}3efGwi){{`I4y-4S~#HWr9q z^NvMQ9AEK}^`TtsLsezOi17E%Rsa8f-&p^@?xEhA>AT`K^Y#gE-QSh z8qZZl>WH10YaPDBJ^ae)1Op4#QvLFF%&2ZWSM~PRR_@*9@5SC7tXlb2^)xI21@MCg zGdaF55dR(E22PpNt1HjWwHAksO5S<=c$UErkB-%5+v22^F3NpLl0U@(Zfh6Guiv%H z>d5iq+~o;-uY8}B$|G5$qSJLMc}4s5>C>kd@L%hWLrS_qr@f~czS;I*bNTzYm+Lr` zxK>}~+I;iQyJOR8dA@#{^!BzYNIhajNziHUWgzvFCr)gHbR!-%EA3KS;zUMy z@@bnkM5tDQx*<>Vwxsgx*8L%4TO~4c=1haxXFdG=%cIYv85pxLL> zD?NgOgnZN{pYBye?Ge9ljgof0+w2eS$SMnGTAw^|qTynOOIFq@Z%nnfjM^Z*S)HgY z9EysHK1*{|G&MOD6%`|Pm#xL7!5FGx$+BgKQjBi)d#apGHkvtSS-{of6Oh&sfkWY~ zEYu~77B6n)-feX8;zi%C%71?@-y1rhyrKKg|-kwT}`hPZiMH-Myh`HLm zW$n3LZ1Y{a#SUheC~0bPW@cs{Dlgutl$n_c>eye**z$hg=@TaoJUG}aC@$Xq9yZ zbya9bU!PlQsw##3=Q zj)GqmWo2gj{(g&o$an6>{(AdOn>Wv0R}PtEb=U7inpx^T;htTZclxK@u0IVg4>q$; zoH~_t^;It4%O2JnqrfYk%KT@wx3fQb^k~k$$o>C*Ws8W3ag`UiB_=AKNi*(~vAmRW zS6nZKWAaHCOoQWgm8|@C@c7LmHSh23<*}W6Bx~!T95Zw28Zo_?8&Cc@xAQ5gtGoZ$ zwcW+fk8j`ace~TfUA|1>Mk>oYYPN(thxMZmiF)|^=ZAkddE&%@mBGtf)|Y$Fu_`_F za^9M0W-icCp{mZdxGzedE(Xn&tPyEG*dDiNAtEnzpJ?B5@cECAk0tEuZ2tWDBOoNy z)Y8Hd5*D`2^HhR?$?u4)EUj%hH!r>VY_;o8+i_60)VBItNw(ovF1ymwQUj@836l(g z9JAS5cyG<)op?0q;3QRVgPa=%6_u5VH#Q_j>?+aJ5$nDb$JWefTlFQQ>DAYwZ*s3+ z{0=SCpIG85|Lx69VSc+GpqAtVp}2L|+7Gw$Z@<2(@UB~*%*rj{&bimtL@N89{qo7G z{GE)N@2r*s2OL<~*^^IA(R4bmS$MVKf!F-gz0Y^ebv;rO7BaV$b$(M5Q%hT0((P@z z8zOW-Yg5#GW;E>BVez~8Sg-W;H6g{)JAeJEI&$R5jq~cSPCW3jF=-COwQN1>+8 z*H2xYod7r>E<`FDc&kb?bE9=r&pFvXW>}%zS=! z_HY}o^oE3kOnd%(I(^A3Bih`>dz#L{IhMt9^z7~I?k!Xg`2=?OQ!Zh@@>SQZ-|uPG z3|_Wl&UEcB3wiWnL)VwSzLt1pMc|6ntA*dKoIbt3pTDcS`|bACt5yj}ORuiko8sK| zc8}cNRo7#-8{V~@FB+Pjcrg9K0!NGLZ#kQ_Z8I;aNbs<^xVql#{`K*=yt0YOmZM6? zj~{>Bt-r4z1JsHJb=(*k8A0O>3o@nj;`jC3xDnCP)~2MR!&6vTxTEH0(PT9(eSPz%i=a&jJ;jie6V4zbvbAtM8Y6};a=VE+>BX|?_5jT zm~gO(6*SuL>&wgLmzS3>UbN^?qGa#$y}g+>*Y}q0+k<6HB2`UIP07SW_Bt1KR!NQm}y=6b;uA?w1M zudh8_7OFq7WNCPAuI{^Cul1hpjrsUjHQN5w-FEkWxz_F5&Hd)tXkH1{U%xth{iChd zdFf0JE_mFx%99S6m*4V*K>b-|M2ke#>~rVSFT@w{Ndr@7dJOAKl~Zg*#-?-#O@Li zR`=Utf9>w)$iPxDu^J_1<-%uYW~yobzUVH0)BnZpt({)p-gCuv8pg%N@!g*$!Nb-* z`L^^wJp+RaiHn0`Vt5u`yz!)xk&#hDOKa2p_>hn%A8uW}diBG%Z|}Axy%MZRJ3sI4 zle1c%3bwDi_qh1ak3vQDuSH5{A1E`&?mezTa z-!Tb09#m~>(e1Cg)`T7fo@9z2~Gas}@>S&j!SJl=luNPf74H`sw`t<3y+o`Fk zA3lE$zIQtG_0i&*E1xDET)O&o>DO1Gpfy+d`+hF_bny7?+tQVlmEUeJUApwc*RP@b z;x=8JdvN*A+r9fE^7k+=*tP3cV&1h&*;`Dm_hK1jkgZy?`}yWYuXJ>N%&{)#J9zNm zja{YMTH4wZr%!L6F+-xA|6*HmWpwtUV?Oh2B!7Q+9=+($d{OepG~nhd;iw)Vt!#MR&vUcX!P8wr$>- zcev)}@#E|}ckbM9GsnZvukB#MhIo!62?n6n4`|ry)6>%*j|ltUn0^tG;(uA&we!m# zyRk7DG}+tI+Imynk+yJQ4;B`ulz)ZQk7#`q4<@$p1Kp@Cwk}=;h`9?hXzNO-)S( z+1GU1Z5>usoiw`m=9FE|583(6?EJf0uCG0v_F>}n(=*RcQuUs~Z)a+1I>WZw?9ib@ z51v17_nfTuvAjm*Th`m+ol7mV58v5_(mj70ziIoG*SvSEuIJjs`(X}M{153lm~g;b ze{aiz1qwZKwo=Re=Wo+r3`t}rKT23dMMWiy(|oqeY)jpI6S@v;>FutS*PpIQZIX@v z_eNBi!QB(@y!CzON@sHiD?Qu1=+&E|gYK72a_;Q7m?)kQzA^v)zC8cqJa%7%c)?vN z&@9U8%Jt9I)jad64spFSac5p}vVIaM<~bAr;D9L zO$-N{Jh(jxA6`(B=dsgcp@DN1Q$H9=@VvOV*j@O`BtKu@qtkSwOCqnqR@}ETf`@$2Kdh9;f{`sPR`C7b8nkP=!ng+trinj^KpoYne*3D z_pI&g+06H?>ffGvpnUnxHtW}KCLK(_y)8FlU(L>S>$m3IG6iS+kR{*_mrZ|Nm_MyYamJf0^QEX9VMXKq1?P2-$gY z&1}4fZf;JWT{}1W`8>8}M$jyple6>N?Q{ReKK_|~`17PmlR%Ar&|2oL*W;R(W$vi? zX_SU4=`2Kyn`s-soQl?z$eseM| zG0a+)h&sFR<;~5@4=Y!PuXl@$m7S&++tn$oeoOxJ$&-yIQ-rX1&bIoSOKxs%_xh_9 z?=lS}HWWN`dh+a+nTbI;bV-}g()#P{$-W%q*bcgvkG=bdYRer6`~>Z@Fb}kQQ^Uf3}y6Pv*uG@7#+oLf3<)6>2sb%GZ7opP9MxaBlkR=Q;nfHb%_)6Pu8r;N|7@=DWDK_~8r_v&uLJ2ZpY$t~cMsMMW+5 zY||;e{cg?XEuaGL&*%C7U21Ak$i_H1d!gk!uj=g)utWh-b( zB=?rdl4Z*lZP>8k=7Zv2UowCE`gKeG^!fA04>U5jV#!7*ZJ7f*OY3g_*m?GBWAv>3 zX8U9%Bwh$C!D!1s(#TR?yN3@So;ZL0_{QYp51v0~_q}XT`6=bk$NqZIwh}&BD;9ly z{g|CaOHbbSgR~loE7rcgzTWw=$&VjD6wJ-V&1UnSJbBVUf@j6*)tl|}udWJ3sa_M! zW*erS5_xzu1+@fy_p*4g`fUM{cQxo7Lo{mXlH zX66j*a=onV?6>W^jvhN^RvDL*qmy=K24nZprdO}BjvPO3trHAQ8uvd|zFxasKtOzC`jyxjlxbkJOq?`$(peKpkLxhQ`9;dcJyH#atdCaVt}I%H7) zucm$RB&qYZx203Gt0a4V#DqYx+dZ^-`?II_PEJ;DU0?0} zEZ{F&`OAvN#z-O_j49zcg4f3Lq-W*WBo>cdG5xrx6) z6|8;XBbV)K%f0O)BP0EUbG#2eKQU4H$FJAx--b(0>^*eIspjw3>lQ^%Ja!{SPcC-H zt$TJAY<^;%_M&rl#cKNGY`e~!@tJWpZOQWGlgpC8JM3=0xnU*_mU{Ch=gs~7@jIH0 zzrDZT|K?53^4E7SAsk$F@$}uj9=~7RS$nX(L{^toJ~T7ec?s$e<{~3-t=ew|-=7E? zD(g4}sh3|lAg}CE(mD*T*;gPh-MP@c!e=_`{AcTI+;;Kt^Yb4$dXzJs-!}7xz(sFf z&=4SW!1Pe)UXROGuMxwSJB2+xJv(}OTvAe&d?>v*xub()P4xCY)cum{Ub)V?W@%~~ zdjG-XNt2isUp%qb?yifQ8(WW?a!_!vprmA{sCF1fyt*xDEvt{3u$H#=%cTrRqqGlK z#Vz@1^;)V%OIv$m#zm!;mX?C^{^FD2>vF_EQ)P$|#4TG)9=^UVcC%KLQ&<*XeDP(&F2p!!^qsT5`a2OeD=o>jc&!=R%&(vKVAqaM zts;vSFAj`+8KrJ^2{BIHy1GiR(Bz#ac*Jw_Irxa@M2XEed(NEkS#FxMqomBmrRDPR z&6_tvmQWTP`}g87ro@~m?=DgXdS3Y`oneMM|Z*RX+Sh8$c(&=fsYxQ=k-rD3h z+dTi+JlpCP@mPL|npxjBMd(EAD$#7?m1gtz_Xmw)ot~!a4Bne_uIiTPtJ2k{8=2Wb z3%8ls`7~Znoj8%v-`{_ZZS}Rf`zI%>gVr6(*ZpveT;Epp^~FVI+o~@IWXta~PE>Y( zbYh~i-o^IwcE58bKlPt)7klEjFaLT_5B=YtpWkk$pPSQoFyX-c|NqK=*S_ETT@Exx zI_3KOe_zyn=2&bzx#@VXbo>54PxZaNCmya|&DeZUp`?2Kbn)j?m+0E6>ijrz|A`ooXM{o7YchOLQ6{9nF4Zg0WMOR5>S&hk#${QUa$>&j|s$Ljh5 z!_6{$eR-3Tk_sLl<9*orUWdo-++N6-s6qNUnK>4POk1~ZwJ3bV^6bpa=8g`I2puui zy|Z3tUVUA<`t-xY?SdjADkb_`;^Ml+bPpx>+p^6*%QpLL+s5SMNoQx7o~kxo7akcY z8CUx?v`515km{a8hYl5deHHq<_WHV5=lA#aPUW?W-k#?g5;EoQw`XT(U)-GTZ}b1p z=WoB$&dzE*+AXgAwDj2-$vdUjV^^$Mv*mtxTwI^^`#r+0uC89+AFc&;$FDYz`tg13>8}3%wF z)6dC(l13GayrkOs+*;!;rOehTCj?~d>+Zb#RR7~4JCCeYi0As~i3`iB{4CDTwQdJ( zz6Nasl+^dVyrKMk+?RKErQH?_y7$YKa;`tNHyp7%O7G#;+TUeIjvv4MeztkO+_v1? z%W^(!yqN=92K?>)eg4^J+a^p9h=J@T*irD1NlQyB!9XG)Dryxdv?~67z5ek^u>Z~c z|KGOnKYBZV|JoXPvw*0mt_v3e65Id0dV91|HPhRlliLoow;_A|-nJJnGAgR7l=SrY zR8>{^&Vp9JIbAl9u`FUKzh7HE*)8+s{a#7PpzOt0o05~0LH>_e8y2xPOhrY-qQ=2g z$6im54>TN-nyR{L^=d=VaLDy@&@RZ2bBo+R2<~;vJwJQlTImRXfB%s1aO>E*&`?nu zTidB$c8P{_+cmTEAA8(y-}mwH@xy7GceYGlcGutKvV{Wc))z??5U&@oe+&kw#*Gg17e4WU%#oOWK256a#x;!f@ zD`>>Ig;Q8&*20fFg>o}bJ(Id}`t)hVzvkQD95~?6ZthuFXxQVHJoz~*3yX!!<7lKY zRk64q=MFjFom0&#YqjO(eSXkxji&`2?Ot)b$4$&1WF34y+28Kq)z#sKpe1Ji|NYi` zxHMBrNLbjg>PtpTdwcTrb+LL6ukQH1E`EQX?`$(gE2~?nd(`~qa6sz5-a*w1lOG&tJj8uJQle%~wQlS# zk>cm)N+aGqJ3G7Z%?-mdvrM_U#dHELolY>g(SI4FzhBNaW>Fk(9`FBu?{>d`@cMOk z@$++<@4tRNZ-4msarWc=^6pVlQax_Ur%s)k@_kpSbZktFPKtk4cxCO6hwY&KPSbQE zo6g0Fda(aD&LSi+bkr!k8nHEN z>fxoz*0&a%+qZXyO{LMdx3{mq+LV57PA7C&cAxj9o1KLlH*TC^n9Qal#=UCwYC(DV z_ZxgR-|W#0UIr>mA1=&0w-=NvDn2BfnQt$z?mw^PYL;tKlG3|9pZ)F>9+%xw@o~|l zIOjH=gU5QM3*X){-ShL=?4UPc?^ktxd33b<CW%6)}NlPzu14iT}Ma9hI;8WMWBL%gOBgn-SYcy3nu;9 z`~6$S95jzdyX((2QCr~|M5PN0$4Et!`=ZG(S*e<#1bwwCX- z4|LC~_`b~_9`0BiA3lesTRi%WnJn z>JM|bU*F&NJGb-g43W3{bV8XgoFmv0R8$E6&$pE+JlMp_!OtIl%lmR(+@&9l>~aFv z>SHgqZ@*g>J^B7;!L8Hd_4Utbdq!7zMSOVar=_K3kalK9-p{h_54W4Fi`l8P=fm9A z_FY@=zdqJ0?NpbsarNGqt*~xd)mHIy+E0(YZSG%|d1FW6;=_3-*CpNGSF1Pq6xx7T zOx&FCQ{2t{%MNC3wTh|Qu-c;VQOn=yHKFaOqj4vn9<5xu$Kb~VKC}@~P)jf2gQ6_j za4D#{d+>p?7204WsKwZPu)PFrWOL~>aY6QG{+DROpx(OrN_=ecm(a#c!Oc}3yCu$O z1FT#3bXZ8#c(kL9#%5It7Sht;?OP72Lry6v+;vIU_F5ct+MYwdB@5Ms>!0ntWpw`W zo=de8jDB1JxB1w@R&PDYb^q6m9fgmrOc{{JL!DJohl;~L$E`j4*TeI1}rp9L9k4N0g zweS4c=s8*KV1fZ?kLIjpiQnJdl`u--sHv#|t!Uo!``zwu`;8@dK;s`785)ZgFaG%X zy!~zY->~+_(Ev`{rhYl;>F=tHKQuerAx6J-tGAkfJh^v*(GTdrVZp9L+wHDZe6p$e zQIKa{ZGO3r=0q2UM~b|_+%^; z?kqO^^I!qeZtA!=U3fsm#l@{yxv~&!!4Ah{})kOYPx6d-d1sE)ru9;$ix0wH&-vMlzTq)UF(#C>PALFKY#x83;%KLxRiNf zO^pqxM!#|;L_|!??Dm4?{`1?`uV4Rnb$$#sctCwv0KYM+5I`zP~ z@>9y2+uP5-3*ZFTJStgBjAu3k<2`RQrJqfYfVrwwMGone&P z^&x2m3x8?xety22h#n=f9h(ymv#F@5S;an#mal%Z@i-_BGiJ3NIpP9ZfcfIW!W%mZ zmE|g*2p&0l^rrL|P>C0SZSbni>%$|qci#^xN`vQRK&Kb2pSCw@*7L%+mvJ7FHIQOR z;zrIkHSIf>l65cMQMsMAIq}VnjXR2-f}GhRckuY>)80GWlYbm^L^`F&c2Cr7h#`VC z-`?HLzF&Idz_DKG*|vAqEgw$GYrn_tHrsG+PYQgK*^8%jak(===Gtw!5`0&z#>mKM!qlm$|F6dQ?zY^S z_ioZPUE6Cix3}k)SN-o4R+ovJzNP1CmTOqpw98xW1bwh9dcv^}Wl<4`Cu3Q(Bvv{C zbQl15RgdcW@aSiibHaDAuLbv!7rXZ>85;{jj(l=Sf-ap~n_PVG`HPE-Pn$rM)ME2=b2?+`|mcG7r(OVEPj>VBFEhs4H;p=&lf7 z7dN-0qg|qhu6y!_t&L)xe6r=#DX%I`2KWj+amC!lg`m+J*YU+dS_Q zcqf^Xsi~;iWKKCbxg)FwGktu^_~+Tz%N0LA*LpESWM7@^!3>k6cXxK8ue5`XD9P0X z1qBJn%Ie1K*xlLJS0*I@YLiTuAn@?@^|{bRdcL!I_a3~b&@$oMq4Of{KV}}fmylnw z$GpV;%31INy_0Lpyq7Iq3JOTK#TQ>HCZ0Tb^3e5-)}DTTd7G*yLiF|>I6vk8q4Of& z*s2#l-n%gS!^5MzG2fLKWK$sv@Y3=(m~$vDx%|QS>HZJKt$PpN%ZSf^Ay*T%Yfh<~ z8`~N1_QY5wNPB$wI^OBEeH|z(@2WP{|F26)Pq+Ts+tJ~WlA=<5*tfb_!08sZeegeS z``{bWZ+L5~oWGxrtgf*5&v?0+onJ{?n>%c^=&WTsS)k)lb&DT7eE6r`4m85`^?Ll` z4I2V>G|v+e6FZb+20Bm6caFGT%!zvikDQO5)D3>%uXQI6*MX}OIKN$ zdAZ+Qp?&va53USeKBw;Wg-dN6dmqZ}b>vWd+d5yf4-#H4V)6}sY`D2=?adp~@9s*s z2waN$G4l}z*yp|HzP4?6kZd6F;mzjrW|22vUS57U!GJ@4%e$Oyct?OT<*hHClg-@r zEvMtvt5*poQid596hOt{UgcYxcULt}D1Lqp)XnGM;c+P_Fj(d@Q|YYX&6O)x-q@7d zt#|s?o=RiT-uyeACt6>epRzgq{G*%c^Ian%By4PLL3>@6ELpN;$GP77;%9YtFaCS( zXWKvUDz+YZd%3#0Iu1@wM<*vHEp6@FTlkE6`{O?IUVOap_#gjU4}`_U+E$0Jzx951 z*;}cq@9%U&l}p_>=ic2V8W>E1;>s%G$$I=x!aQ$I!Si)*c%71xk~Y-+t(r1@`r)jtpshjw>#Lv3 z316N0ukgRk?VM}eMKgb|@%GLYyq{5Lyq+`i2{*RMVO{5;Qn z`7R$6Qhi>&d*>DtBLg~oEkZ}^MvfV1`#x7Ile*uW4^j6nK5t$B?~F_B@_%hR@<5Z( zCQ>0`VT+b8XXlr*Inc%{onRob$I5V4!mIUN7w>bl{SsLGUwliae^k`02jczf_y3d1 z%*=FDy;O4I+k=D5f8M0qAHKZY|DeQS(12F{eY+z^kA6H2nuC3FbMvJ4tL=|)1??_- z>y((NSX5m6@uIu@PZ9eYu?vs1&(L}J@ZpA=Ie)%fUhco}`fFAF@YGb*PoF;h$TU26 zbZ_*`d(^#;bHs%|&iy6*XxGHKb9A1!Ntne@0VPDt0**8Vv+Ge5sQZhgDk z;>NJmtp^hvs;hUOpIbKHuI!D(l`PXIMV4OP-UlU|{r&liii-thWqVz_#T0FAW#`VF zJL&YZ5-ZRYLd?!0R=?%KSzD$0Q%Y&P^lGT(*^!lzYD%Ycfx6ZZ2pB z!fD|F?e%+_K=bN7z3Y2TqUfT$tMdwJaDYL=TZYsC!qK|*vxLX-SAfD z#pAc*-S3At*@$*rygy-=-H})SS#uvP z^{-i@V@9XN~f*v&z_kHqX3s7PFvgFaHr>AFF zm%rOGH|6nE-2ijFxIHK2H$Qxsn6WkL;8VX{kDSk_{rdg8@WTT~6&00)e}8@&NbqE2 zWt*}3BT-SUZZ=A1bny|YNQtGnCK#->NwJP))kJ>gB|?Oo;X<9K*^ zAHKS}x}&ShslNXIj$0>8v#&ikH`ltU=*R7K`#)W~eqGtlF7A_+IylY#`T03<`)$_G zcM5B_r=OQIF)?W{eE(|YnmAPGS{QdFU zb@rL(?7AfKJYwaOzJd~PVvnMwlMc z*~Bfb_u=~mt*Ku9ZQct5SXy)b|2S?xVa}YM!|nW!LEBm+l7E0UugO}MJ$T%2FJ{wY z@$10%FJC;0CiRAIbGUor%$YA1e($DRYkpKr6LxlX{-Ylkwpz4mubi}5&I3?5{r>*G z*|6={F*g@i*N>m)_^C@tNd?5l_TIS@^RFgQLnI?R`|jW#e7{@w? zo%6f*ZF{|bPuXtS#Kgo&*DVEYJS2mYl9TuL6<@l0SJ$H^Cfr@(b6wnzu8YtNEhsI0 zdb|6(ITnRY^_^#4SQXgcTR80pG%&0_{=B~bU+dl7<&Wo<-#hqX`+^fsiyT|GZQ0_W zH@*7q%X#zU`n`74{k7_GQ#Q-L$8$^~#c1Y(hFfpTY-)ZOXr%o9cwByAh!$wA=fAgF zX`3apwo2vi`N;O~@B4c8k_YKk&L##14J%e?94y>f@o~|EB6U@}BRNVsIz9!veY3N* zm6VizWPW#fbZ>8UQ>EKt!Q0#O+fSxA1qTb)?{jf;j}$j= zd~QEUTuh8>-{z>b$@ktpU(d%UZ};Y6<#P+Zc7FMJmwpKx=GA=deCA(#fV$n=w{Ii1 zWC(($H2%Hn%Z_t%V=F2ux^Vsa@%yiy{R?=nU-yywpWW3%hnyT$LEEEq%pPA`8{N^< z!;*YH|Gj}!?}poND?UBpytY2Rf6kma3nrX>S>m)Z1k^}u;yVc{Q|ABw^St8Ai;35p zWwUrMPLHp9S$IAzK3@LW`T6Jne=@83&(6-SdiVLtvgR3gK^qUFx97E-_THvaVa zGwb&DLYa0@Pmz~bQD2`wf8S3vdwm-l8D3uA0;{XAP^KB{PExK_sJC% z68CGr%ZlklG^|^E>Qq^2DUtl*#ft;y=2|ZdTP-Lm+A3>Z#-VrH zOH(?Tr~b!b`3VyyDE!bfHy1ZFG_-rIcSTC6`C!AJKQ;Yd)zsBLPq)7Nz3}m|-j2S$ zX(jWQALdQ^cIo!*?lWh6GPXv!xVb5*s=6BV@gFa&c)$1if&h&Vx3bqiytlXd&z?z> zgfv9BK!>Y<22Qu<$?~u<&ze1Z;+#1=Gkw}-%#ir^l=I|yP*^Z}eAzu~K{_AT9&kty_+TM85E$>X8dB;k}Rp;E( z)76E9g>Bhp%+9Es>!&_x(xeMluc}tg6*_p>r(3gep1APWxk;zalqRoIG-oPq7LuQo zdn-lRJZ-!5kt+&M*ROMRb#1y`r51e8d%E7mt8#~$XG#P!S?a63vOYRx=G$W-PI)ZP z*i`LQZf}9v`tZxk%ad|%KP=#gyK6o3)4iR=?ecHuDa4#PGDGM@rD5QG&1GkD%$Erj zDI1tKJ(8S1lkcS1jGQY1XYr9hYo6NaxyN&0}a`_F4IY`Y#`Uwdqq zp^XjCTtD@bSHE{YV_o;_-P^aVe#;MUPCu{laVF=cRxXhxCwQ9_I5sYrq12MpwIi>k zz5Q_7=8u>C=i7<$%ofUsH4i;EL_6s@hJKg>FD=8TVwRSAc!t?h}kXF*&4#dM=uzI-V;xcWQ1 z+0YcWEugVUWT&G5i=voFa7%!X;Pqb6R@lzYPJ@{~FW$cWdV}qFp$1C3;-JkjiJ+jM z1BEhSYokfVNkv?anQOHO{_D1hqZ3038tZ_0`pgJr#z1GL}roX56>?xiR_p zg0R(!(@zIRMZMa-?zqb|Nhm<*i;B`a&m$uKzP`gqoSgI z{FFKV@IWJTLJ#QFjN<3#M9+NwUb$@N#4}MobNtlx;`g1o-n-wf(#3@(@BY5t-R19--rm|;_u6Vg(GI)o;D$uqGgUjk<-)wY zyernNbIZ%q+yCak0fr| z9gSri3uh>;lLpn}GrUpiadn9!mJ?Fa)zs~{#dIF5uQ~a&$WbU`^UVc8EB{>U-EX(^ zV8VfEy3wFxIBlxGoq7L@NwfX+=DT_B5fL}ec-Qo}DR0Za&o}vG%d%x^2RA`Z9q{n? zcXxGVl}Mg&GG#~o|9uI^`r_R?w&e5r&62%tH{O=nRDNQ4 zeSN*VpWnGHo*ujxInXl>sPsdry1=-zkdCQ zK69+F?2NjvsqWB-dcc<6pjg0}a7NtreR% zaiWK(r)06rd~TOdd{7&OZvS2N_IV zlmjLxfeOSUO-Wq>U7Amhh3vX`^JeFfBQF1TE}z+Q`K3!xkkGDOyPVWNO3KK%q07U|>$o&XQBN=LRzCNKZ#_$1TYC0A4hRT%@U^~Xt@o>4C4yRp zjRO1|le}VMWub?Wthkz$lAiuq-(wO}`Sn^QI%| z6%`UzbNkMpTV{0P>$h)C%P(`@6W3EyiB8xQ_{ezoT@KTKpXdL706GF*gp2jn>(|Rm zZ~wcscf$sQD_5_wez89|=|@YDkHQh>o*7A7qd={g$jHul^W+)cjwWy+%5Ir{M@dJo*0p!0Dhcy;K#C9E7OCk&5)7B_^1hWdK4 zPR?mO>DGDvO_}l)&;}ANZtjV*XLtA8{mO{i{&xM{-?#7oYctKh_Tex?&sSuJOhW2S zGyeVi_wqjfp^Hjyg)_own;qYg^(ZgA|v zy?cCnZhY0$^; z!at?&*xA`PR(;Kqu_$o(uy_5_+O@CG%ruVJmLqxS@L^ClezALh)5hnrp4YYgC6iB_ zIdf#8bNhwMmz(e0iE(jvPrkUw6;z6)r!PNWRj58CiAhl|>By8FJ1lG}J{)*%##Fd! z!2$-UUbgr9|J#A4K0$jOJ9>J)SRD8A@>*~)1GHyze%-H=ufN@i_4o8-JYE>FH7nF1 zF33mlI`8*n!4CGTSFc9wtuhtUkLyu(?`tr8w*9U(@}L9jYw3Jx^J)4|+!FFUru|qG zx!LW*2a)52HOxWL(cL?XpEqrM&a9Z4ntJeI!3Sn>$zHdE{|%3U&a$63ukYQvyc=)J z-rU(4Eb!#j>(_$v^7g8tKATw8q*d)U-|h`~1Ui3UcbTq4b=~Tgu+^e>-W@BH`S#{! zb6Xo*|I3ZHw)orqWC87BJScHEzy5dho-dcYSFB$T>U+mky;QZ^`N-m2^TqSW?(C@) zPE1Vv@$tAk>;3+;HAm8)o|>wmr+4hb2ZOvjI~prLKl>P`uBO&x*!J&V-HE3~CZ?u| z*Vo0aShcF@@I#06bagH+t__)&)#iVFs4{5OK-kz*pfMwPFw ze;bFWQ9l(P-n#GPmO?~^J=nzh;_X{e8ISztzEe+&wrtt*;r{I$vlSs){ZCVjBxlW@ z{qz0o*|S-TZoDmPX>CQxM^ivOWDlD=`Q?u-_|~pn8@K#;)@4xL{q*$o#j96y7Zw)Y z*q$$M_xDS%j9raH{{Fw)5^DFIdS>^&ncwcf`}+UYJpBCr8XpU-=4NDMIFy!}78Mu& z1TE`On0`8O^UVaKnLiTNg=pEna$OkkV~u#Zlct)$BSkl#&feame}8|sy;l3^2&aju zDeIFf2M#dI@l&_xdpw`L(08}~^ILw&$;yisE!y*LviWu9uaiIx!5#A54mKaIsr}6U z&I2DJ;Fx!RR*tm!EpbqTSH-&~DLFaOZ1!Hc6Bn6wu%DVXP3*+eqV=bDvRlqRs}`~R zX3nums@}_%G~l3?c~Xmpo5^Yva_}w`IE* z%sX}~43V?g6c`F@PM(a{p`Zav6B(HF?%7EeVB_(-|ZsB~P3@=@=g`Uw_hn{q<^{<=0E>SJ>JdLwKZX`s;cUrj&(`Sh~fq`vu9f#XRDvjEkEW{v!|E+$c@is!3zTtetvqY zp`~?bSLy2?;SAq#HIa_0%Qa51h7{FDr(kqTf3ja-F3r->kDY(N`n|1&2p4D>;*Rq7 z^RCxQz5R8pS6Wb3R(1lcAn7^I{5`Y&ZCqxiW{Qzyh?eN7)2IKgJ0EXZ^ApsqY)k3% zhjd?;r#`S>ez|kW5|xtDQs0xm;CaKbMUIn`a}h6#l$T+nK>tjU;A38I?tXk)r2wu3 zdSB+0A4%H+4qu<>N5vl>xgMM$)MF?jD$1$%-A{D7UhJ$*@!w?l*t4>-j;Y=*zh8TN zf2QV@73$6qr6!B$&y!M&k3kUH1B# z%Y1sJFJFDv(Yss!iQ9ubkacfwnSw4VX}VY_%hYG3ftxz^>&QbOX|4>!Kw|NmZg znB}ybty{PLcs4u#!j&s3J7tnCUAfW%IuCm5)~%1TI`-@|ysT*65%BEHOyhu+Ar{r& z)~t9v_a)eFv0%UXcCsHf-HVYw?cJpr{QOwSR_mn4pIYxo%$L4A?FXpVxL@~MH!Caa z!`JKa?JTCIra!*j&aZv9UjJs^y*-_vU0C7kVkXweA9-?Ws`ihE?ecrxy^r7(+$s1A z)CBAi@6uEb@KH2B!CQD|#W&l9N^Sy$wK1JeADM zrrp`$3G$kc7}RSuj(HWk5{+ga@vZTjXTv$w%XGEz+wAM>Kuw(#BSkYavESd`PTu1a zG->|){vSUoiXc8W5ear%FvBTtg7o8JsJ616Evp6*)6^`qZh8Yr~TN z|NHym-MeF3v#)O`c^M?Z!&dY4YWSq-`Bpz)tzMsCAhDt1W73tYSD~J1fqKR<&*u#9 zMdA7H-sR2kQ3EXwJ2%I2bJvd_75%3(`sHk${QUSrw5C3JI@>QqOSGt{=);SP%20=i zfTKjw{6uf(ZpErc&H^lsU}QLX!I5?ajwTT5n9wdH4`y*RDLBb_)j)(fnm8&oJ}N>v zN>2=DpPiAsF@nv?%1T9_2V#t)K+BDil9B^S8+p!D{`v9Ia`jcM%0{S`CWRx%vbH|@ z`1ttzvonp;&&hNjHM(%^np)*Tgn~s|w|@P3RqlGcw|Dokq>VfgYs0o|-|ijf0CP`A z=cRl1_*P%#0%^WzcK&- literal 0 HcmV?d00001 diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI-Layer.png new file mode 100644 index 0000000000000000000000000000000000000000..c8df0a9e9e7c0ae12beeb972a4c3ad0adec9c420 GIT binary patch literal 21329 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 Q^B5%M>FVdQ&MBb@0BD~e00000 literal 0 HcmV?d00001 diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MOUSE-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MOUSE-Layer.png new file mode 100644 index 0000000000000000000000000000000000000000..c74348389d9dd947bd86552851dca0c7dbb271d3 GIT binary patch literal 16119 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 Q5{e)>Pgg&ebxsLQ0D~h&O#lD@ literal 0 HcmV?d00001 diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index d383d2e284..32a65a5937 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -121,23 +121,12 @@ enum morse_macros { MC_Z = M(35), MC_DOT = M(36), MC_COMM = M(37), - MC_QUES = M(38), - MC_APOS = M(39), - MC_EXCL = M(40), - MC_SLSH = M(41), - MC_PARO = M(42), - MC_PARC = M(43), - MC_AMP = M(44), - MC_COL = M(45), - MC_SCLN = M(46), - MC_EQL = M(47), - MC_PLUS = M(48), - MC_MINS = M(49), - MC_QUOT = M(50), - MC_DOLR = M(51), - MC_AT = M(52), - MC_UNDS = M(53), - MC_SPACE = M(54), + MC_APOS = M(38), + MC_SLSH = M(39), + MC_SCLN = M(40), + MC_EQL = M(41), + MC_MINS = M(42), + MC_SPACE = M(43), }; //Keymaps @@ -183,11 +172,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [ARROWFN] = KEYMAP( - 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, TO(3), TO(4), \ + 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, TO(3), TO(4), \ KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_HOME, KC_END, KC_NO, KC_INS, KC_DEL, \ - KC_TRNS, 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_TRNS, \ - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_TRNS, KC_NO, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + 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_TRNS, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS ), /* 2: Mouse Keys Layer @@ -266,54 +255,102 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { - case 0: //Number 0 + case 0: //Number 0-) if (record->event.pressed) { - return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //----- + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- + } + else { + return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //----- + } } break; - case 1: //Number 1 + case 1: //Number 1-! if (record->event.pressed) { - return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.---- + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-.-- + } + else { + return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.---- + } } break; - case 2: //Number 2 + case 2: //Number 2-@ if (record->event.pressed) { - return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //..--- + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.--.-. + } + else { + return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //..--- + } } break; case 3: // Number 3 if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //...-- } break; - case 4: //Number 4 + case 4: //Number 4-$ if (record->event.pressed) { - return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //....- + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-..- + } + else { + return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //....- + } } break; case 5: //Number 5 if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //..... } break; case 6: //Number 6 if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-.... } break; - case 7: //Number 7 + case 7: //Number 7-& if (record->event.pressed) { - return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //--... + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.-... + } + else { + return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //--... + } } break; case 8: //Number 8 if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //---.. } break; - case 9: //Number 9 + case 9: //Number 9-( if (record->event.pressed) { - return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(DOT), T(SPACE), END); //----. + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-.--. + } + else { + return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(DOT), T(SPACE), END); //----. + } } break; case 10: //Letter A @@ -526,96 +563,80 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 36: //Punctuation . if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(SPACE), END); //.-.-.- } break; case 37: //Punctuation , if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //--..-- } break; - case 38: //Punctuation ? + case 38: //Punctuation '-" if (record->event.pressed) { - return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //..--.. + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-..-. + } + else { + return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-....- + } } break; - case 39: //Punctuation ' + case 39: //Punctuation /-? if (record->event.pressed) { - return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-....- + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //..--.. + } + else { + return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-..-. + } } break; - case 40: //Punctuation ! + case 40: //Punctuation ;-: if (record->event.pressed) { - return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-.-- + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //---... + } + else { + return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-.-. + } } break; - case 41: //Punctuation / + case 41: //Punctuation =-+ if (record->event.pressed) { - return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-..-. + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.-. + } + else { + return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-...- + } } break; - case 42: //Punctuation ( + case 42: //Punctuation --_ if (record->event.pressed) { - return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-.--. + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.- + } + else { + return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-....- + } } break; - case 43: //Punctuation ) - if (record->event.pressed) { - return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- - } - break; - case 44: //Punctuation & - if (record->event.pressed) { - return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.-... - } - break; - case 45: //Punctuation : - if (record->event.pressed) { - return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //---... - } - break; - case 46: //Punctuation ; - if (record->event.pressed) { - return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-.-. - } - break; - case 47: //Punctuation = - if (record->event.pressed) { - return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-...- - } - break; - case 48: //Punctuation + - if (record->event.pressed) { - return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.-. - } - break; - case 49: //Punctuation - - if (record->event.pressed) { - return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-....- - } - break; - case 50: //Punctuation " - if (record->event.pressed) { - return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-..-. - } - break; - case 51: //Punctuation $ - if (record->event.pressed) { - return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-..- - } - break; - case 52: //Punctuation @ - if (record->event.pressed) { - return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.--.-. - } - break; - case 53: //Punctuation _ - if (record->event.pressed) { - return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.- - } - break; - case 54: //Morse Space + case 43: //Morse Space if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + } return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse } break; From 1a0dfbbc96b32aeae27ace398282c18227fc4b4e Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Wed, 24 May 2017 21:15:41 -0400 Subject: [PATCH 08/24] More updates to keymap.c - still errors with midi when trying to compile --- keyboards/s60_x/keymaps/bluebear/keymap.c | 132 ++++++++++------------ 1 file changed, 61 insertions(+), 71 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 32a65a5937..dfb0b966a3 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -161,9 +161,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │TO(3)│TO(4)│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ - │CAPS │ │ │ │ │ │ │PGUP │ UP │HOME │ END │ │ INS │ DEL │█████│ + │ │ │ │ │ │ │ │PGUP │ UP │ │ │ │ INS │ DEL │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ - │ │ │ │ │ │ │ │LEFT │DOWN │RIGHT│ │ │▒▒▒▒▒│ │█████│ + │CAPS │HOME │ │ END │ │ │ │LEFT │DOWN │RIGHT│ │ │▒▒▒▒▒│ │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ │▒▒▒▒▒│ │ │ │ │ │SPACE│PGDN │PSCR │SLCK │PAUSE│▒▒▒▒▒│ │▒▒▒▒▒│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ @@ -173,8 +173,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [ARROWFN] = KEYMAP( 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, TO(3), TO(4), \ - KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_HOME, KC_END, KC_NO, KC_INS, KC_DEL, \ - 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_TRNS, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_NO, KC_NO, KC_NO, KC_INS, KC_DEL, \ + KC_CAPS, KC_HOME, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_TRNS, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_NO, \ KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS ), @@ -644,74 +644,64 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; }; -/* // Midi Chord Function void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { -uint16_t root_note; -uint8_t channel = midi_config.channel; -uint8_t velocity = compute_velocity(midi_config.velocity); -switch (opt) { -case 0: //Root note C -root_note = MI_C; -case 1: //Root note C#/Db -root_note = MI_Cs; -case 2: // Root note D -root_note = MI_D; -case 3: // Root note D#/Eb -root_note = MI_Ds; -case 4: // Root note E -root_note = MI_E; -case 5: // Root note F -root_note = MI_F; -case 6: // Root note F#/Gb -root_note = MI_Fs; -case 7: // Root note G -root_note = MI_G; -case 8: // Root note G#/Ab -root_note = MI_Gs; -case 9: // Root note A -root_note = MI_A; -case 10: // Root note A#/Bb -root_note = MI_As; -case 11: // Root note B -root_note = MI_B; -switch (id) { -uint8_t tone = root_note - MIDI_TONE_MIN; -uint8_t root = midi_compute_note(root_note); -uint8_t major_third = midi_compute_note(root_note) + 4; -uint8_t minor_third = midi_compute_note(root_note) + 3; -uint8_t fifth = midi_compute_note(root_note) + 7; -case 0: //Major chord -if (record->event.pressed) { -midi_send_noteon(&midi_device, channel, root, velocity); -midi_send_noteon(&midi_device, channel, major_third, velocity); -midi_send_noteon(&midi_device, channel, fifth, velocity); -tone_status[tone] = root; + uint16_t root_note; + uint8_t channel = midi_config.channel; + uint8_t velocity = compute_velocity(midi_config.velocity); + switch (opt) { + case 0: //Root note C + root_note = MI_C; + case 1: //Root note C#/Db + root_note = MI_Cs; + case 2: // Root note D + root_note = MI_D; + case 3: // Root note D#/Eb + root_note = MI_Ds; + case 4: // Root note E + root_note = MI_E; + case 5: // Root note F + root_note = MI_F; + case 6: // Root note F#/Gb + root_note = MI_Fs; + case 7: // Root note G + root_note = MI_G; + case 8: // Root note G#/Ab + root_note = MI_Gs; + case 9: // Root note A + root_note = MI_A; + case 10: // Root note A#/Bb + root_note = MI_As; + case 11: // Root note B + root_note = MI_B; + switch (id) { + uint8_t root = midi_compute_note(root_note); + uint8_t major_third = midi_compute_note(root_note) + 4; + uint8_t minor_third = midi_compute_note(root_note) + 3; + uint8_t fifth = midi_compute_note(root_note) + 7; + case 0: //Major chord + if (record->event.pressed) { + midi_send_noteon(&midi_device, channel, root, velocity); + midi_send_noteon(&midi_device, channel, major_third, velocity); + midi_send_noteon(&midi_device, channel, fifth, velocity); + } + else { + midi_send_noteoff(&midi_device, channel, root, velocity); + midi_send_noteoff(&midi_device, channel, major_third, velocity); + midi_send_noteoff(&midi_device, channel, fifth, velocity); + } + case 1: //Minor chord + if (record->event.pressed) { + midi_send_noteon(&midi_device, channel, root_note, velocity); + midi_send_noteon(&midi_device, channel, minor_third, velocity); + midi_send_noteon(&midi_device, channel, fifth, velocity); + } + else { + midi_send_noteoff(&midi_device, channel, root, velocity); + midi_send_noteoff(&midi_device, channel, minor_third, velocity); + midi_send_noteoff(&midi_device, channel, fifth, velocity); + } + } + } } -else { -uint8_t root = tone_status[tone]; -if (root != MIDI_INVALID_NOTE) -{ -midi_send_noteoff(&midi_device, channel, root, velocity); -} -tone_status[tone] = MIDI_INVALID_NOTE; -} -case 1: //Minor chord -if (record->event.pressed) { -midi_send_noteon(&midi_device, channel, root_note, velocity); -midi_send_noteon(&midi_device, channel, minor_third, velocity); -midi_send_noteon(&midi_device, channel, fifth, velocity); -} -else { -uint8_t root = tone_status[tone]; -if (root != MIDI_INVALID_NOTE) -{ -midi_send_noteoff(&midi_device, channel, root, velocity); -} -tone_status[tone] = MIDI_INVALID_NOTE; -} -} -} -}; -*/ From b4b06f81b5024bb5963753edfc07f9e2e0054cfd Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Thu, 25 May 2017 23:03:33 -0400 Subject: [PATCH 09/24] More changes to keymap.c to try and get midi chords to work --- keyboards/s60_x/keymaps/bluebear/keymap.c | 160 ++++++++++++---------- 1 file changed, 86 insertions(+), 74 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index dfb0b966a3..2dc7500cdd 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -258,7 +258,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 0: //Number 0-) if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- } else { @@ -269,7 +269,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 1: //Number 1-! if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-.-- } else { @@ -280,7 +280,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 2: //Number 2-@ if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.--.-. } else { @@ -291,7 +291,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 3: // Number 3 if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //...-- } @@ -299,7 +299,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 4: //Number 4-$ if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-..- } else { @@ -310,7 +310,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 5: //Number 5 if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //..... } @@ -318,7 +318,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 6: //Number 6 if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-.... } @@ -326,7 +326,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 7: //Number 7-& if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.-... } else { @@ -337,7 +337,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 8: //Number 8 if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //---.. } @@ -345,7 +345,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 9: //Number 9-( if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-.--. } else { @@ -356,7 +356,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 10: //Letter A if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(MINS), T(SPACE), END); //.- } @@ -364,7 +364,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 11: //Letter B if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-... } @@ -372,7 +372,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 12: //Letter C if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-. } @@ -380,7 +380,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 13: //Letter D if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(DOT), T(DOT), T(SPACE), END); //-.. } @@ -388,7 +388,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 14: //Letter E if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(SPACE), END); //. } @@ -396,7 +396,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 15: //Letter F if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //..-. } @@ -404,7 +404,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 16: //Letter G if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(MINS), T(DOT), T(SPACE), END); //--. } @@ -412,7 +412,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 17: //Letter H if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.... } @@ -420,7 +420,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 18: //Letter I if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(DOT), T(SPACE), END); //.. } @@ -428,7 +428,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 19: //Letter J if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.--- } @@ -436,7 +436,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 20: //Letter K if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.- } @@ -444,7 +444,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 21: //Letter L if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(SPACE), END); //.-.. } @@ -452,7 +452,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 22: //Letter M if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(MINS), T(SPACE), END); //-- } @@ -460,7 +460,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 23: //Letter N if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(DOT), T(SPACE), END); //-. } @@ -468,7 +468,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 24: //Letter O if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(MINS), T(MINS), T(SPACE), END); //--- } @@ -476,7 +476,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 25: //Letter P if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //.--. } @@ -484,7 +484,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 26: //Letter Q if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //--.- } @@ -492,7 +492,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 27: //Letter R if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-. } @@ -500,7 +500,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 28: //Letter S if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(SPACE), END); //... } @@ -508,7 +508,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 29: //Letter T if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(SPACE), END); //- } @@ -516,7 +516,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 30: //Letter U if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(DOT), T(MINS), T(SPACE), END); //..- } @@ -524,7 +524,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 31: //Letter V if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...- } @@ -532,7 +532,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 32: //Letter W if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(MINS), T(MINS), T(SPACE), END); //.-- } @@ -540,7 +540,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 33: //Letter X if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-..- } @@ -548,7 +548,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 34: //Letter Y if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-- } @@ -556,7 +556,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 35: //Letter Z if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //--.. } @@ -564,7 +564,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 36: //Punctuation . if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(SPACE), END); //.-.-.- } @@ -572,7 +572,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 37: //Punctuation , if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //--..-- } @@ -580,7 +580,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 38: //Punctuation '-" if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-..-. } else { @@ -591,7 +591,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 39: //Punctuation /-? if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //..--.. } else { @@ -602,7 +602,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 40: //Punctuation ;-: if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //---... } else { @@ -613,7 +613,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 41: //Punctuation =-+ if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.-. } else { @@ -624,7 +624,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 42: //Punctuation --_ if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.- } else { @@ -635,7 +635,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case 43: //Morse Space if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); + clear_mods(); } return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse } @@ -647,61 +647,73 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // Midi Chord Function void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - uint16_t root_note; - uint8_t channel = midi_config.channel; - uint8_t velocity = compute_velocity(midi_config.velocity); + uint16_t root_note = MIDI_INVALID_NOTE; switch (opt) { case 0: //Root note C root_note = MI_C; + break; case 1: //Root note C#/Db root_note = MI_Cs; + break; case 2: // Root note D root_note = MI_D; + break; case 3: // Root note D#/Eb root_note = MI_Ds; + break; case 4: // Root note E root_note = MI_E; + break; case 5: // Root note F root_note = MI_F; + break; case 6: // Root note F#/Gb root_note = MI_Fs; + break; case 7: // Root note G root_note = MI_G; + break; case 8: // Root note G#/Ab root_note = MI_Gs; + break; case 9: // Root note A root_note = MI_A; + break; case 10: // Root note A#/Bb root_note = MI_As; + break; case 11: // Root note B root_note = MI_B; - switch (id) { - uint8_t root = midi_compute_note(root_note); - uint8_t major_third = midi_compute_note(root_note) + 4; - uint8_t minor_third = midi_compute_note(root_note) + 3; - uint8_t fifth = midi_compute_note(root_note) + 7; - case 0: //Major chord - if (record->event.pressed) { - midi_send_noteon(&midi_device, channel, root, velocity); - midi_send_noteon(&midi_device, channel, major_third, velocity); - midi_send_noteon(&midi_device, channel, fifth, velocity); - } - else { - midi_send_noteoff(&midi_device, channel, root, velocity); - midi_send_noteoff(&midi_device, channel, major_third, velocity); - midi_send_noteoff(&midi_device, channel, fifth, velocity); - } - case 1: //Minor chord - if (record->event.pressed) { - midi_send_noteon(&midi_device, channel, root_note, velocity); - midi_send_noteon(&midi_device, channel, minor_third, velocity); - midi_send_noteon(&midi_device, channel, fifth, velocity); - } - else { - midi_send_noteoff(&midi_device, channel, root, velocity); - midi_send_noteoff(&midi_device, channel, minor_third, velocity); - midi_send_noteoff(&midi_device, channel, fifth, velocity); - } + break; + } + // uint8_t root = midi_compute_note(root_note); + uint8_t major_third = root_note + 4; + uint8_t minor_third = root_note + 3; + uint8_t fifth = root_note + 7; + switch (id) { + case 0: //Major chord + if (record->event.pressed) { + register_code16(root_note); + register_code16(major_third); + register_code16(fifth); } + else { + unregister_code16(root_note); + unregister_code16(major_third); + unregister_code16(fifth); + } + break; + case 1: //Minor chord + if (record->event.pressed) { + register_code16(root_note); + register_code16(minor_third); + register_code16(fifth); + } + else { + unregister_code16(root_note); + unregister_code16(minor_third); + unregister_code16(fifth); + } + break; } } From 6b1f707ce9431abfff6e6f8aa5730c77578fbc08 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Fri, 26 May 2017 09:54:40 -0400 Subject: [PATCH 10/24] Still working on these MIDI CHORDS! --- keyboards/s60_x/keymaps/bluebear/Makefile | 4 +-- keyboards/s60_x/keymaps/bluebear/keymap.c | 33 +++++++---------------- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/Makefile b/keyboards/s60_x/keymaps/bluebear/Makefile index dfefad39da..a444eeb7f4 100644 --- a/keyboards/s60_x/keymaps/bluebear/Makefile +++ b/keyboards/s60_x/keymaps/bluebear/Makefile @@ -1,8 +1,8 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # 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 +CONSOLE_ENABLE = yes # 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 = yes # MIDI controls diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 2dc7500cdd..0047a87d31 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -184,7 +184,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │RESET│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ │ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ - │ │ │ │ │ │ │ │BTN1 │MS_UP│BTN2 │WH_UP│ │ │ │█████│ + │DEBUG│ │ │ │ │ │ │BTN1 │MS_UP│BTN2 │WH_UP│ │ │ │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ │ │ │ │ │ │ │MS_LT│MS_DN│MS_RT│WH_DN│BTN3 │▒▒▒▒▒│ │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ @@ -197,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [MOUSE] = KEYMAP( 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_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_UP, KC_BTN2, KC_WH_U, KC_NO, KC_NO, KC_NO, \ + DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_UP, KC_BTN2, KC_WH_U, KC_NO, KC_NO, KC_NO, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_WH_D, KC_BTN3, KC_NO, KC_NO, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_TRNS, KC_NO, KC_NO, KC_POWER, KC_NO, KC_NO, KC_NO, KC_NO @@ -646,7 +646,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // Midi Chord Function -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { +void action_function_opt(keyrecord_t *record, uint8_t id, uint8_t opt) { uint16_t root_note = MIDI_INVALID_NOTE; switch (opt) { case 0: //Root note C @@ -686,34 +686,19 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { root_note = MI_B; break; } - // uint8_t root = midi_compute_note(root_note); uint8_t major_third = root_note + 4; uint8_t minor_third = root_note + 3; uint8_t fifth = root_note + 7; switch (id) { case 0: //Major chord - if (record->event.pressed) { - register_code16(root_note); - register_code16(major_third); - register_code16(fifth); - } - else { - unregister_code16(root_note); - unregister_code16(major_third); - unregister_code16(fifth); - } + process_midi(root_note, record); + process_midi(major_third, record); + process_midi(fifth, record); break; case 1: //Minor chord - if (record->event.pressed) { - register_code16(root_note); - register_code16(minor_third); - register_code16(fifth); - } - else { - unregister_code16(root_note); - unregister_code16(minor_third); - unregister_code16(fifth); - } + process_midi(root_note, record); + process_midi(minor_third, record); + process_midi(fifth, record); break; } } From a5846757359a27f9e5ed67cfe96f1d92e72b1b4b Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Sun, 28 May 2017 08:14:17 -0400 Subject: [PATCH 11/24] Midi Chord Function is now working! But some chords lag... --- keyboards/s60_x/keymaps/bluebear/Makefile | 4 +- keyboards/s60_x/keymaps/bluebear/keymap.c | 174 ++++++++++++++++------ 2 files changed, 128 insertions(+), 50 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/Makefile b/keyboards/s60_x/keymaps/bluebear/Makefile index a444eeb7f4..dfefad39da 100644 --- a/keyboards/s60_x/keymaps/bluebear/Makefile +++ b/keyboards/s60_x/keymaps/bluebear/Makefile @@ -1,8 +1,8 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = no # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration +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 = yes # MIDI controls diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 0047a87d31..3be39c3fa2 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -37,47 +37,90 @@ enum midi_chord_root { //ACTION_FUNCTION opt B, }; -enum midi_chord_keycodes { +enum midi_chord_id { //ACTION_FUNCTION Progmem Id //Major Chords - MI_CH_C = ACTION_FUNCTION_OPT(major,C), - MI_CH_Cs = ACTION_FUNCTION_OPT(major,Cs), - MI_CH_Db = MI_CH_Cs, - MI_CH_D = ACTION_FUNCTION_OPT(major,D), - MI_CH_Ds = ACTION_FUNCTION_OPT(major,Ds), - MI_CH_Eb = MI_CH_Ds, - MI_CH_E = ACTION_FUNCTION_OPT(major,E), - MI_CH_F = ACTION_FUNCTION_OPT(major,F), - MI_CH_Fs = ACTION_FUNCTION_OPT(major,Fs), - MI_CH_Gb = MI_CH_Fs, - MI_CH_G = ACTION_FUNCTION_OPT(major,G), - MI_CH_Gs = ACTION_FUNCTION_OPT(major,Gs), - MI_CH_Ab = MI_CH_Gs, - MI_CH_A = ACTION_FUNCTION_OPT(major,A), - MI_CH_As = ACTION_FUNCTION_OPT(major,As), - MI_CH_Bb = MI_CH_As, - MI_CH_B = ACTION_FUNCTION_OPT(major,B), + CMajor, + CsMajor, + DbMajor = CsMajor, + DMajor, + DsMajor, + EbMajor = DsMajor, + EMajor, + FMajor, + FsMajor, + GbMajor = FsMajor, + GMajor, + GsMajor, + AbMajor = GsMajor, + AMajor, + AsMajor, + BbMajor = AsMajor, + BMajor, //Minor Chords - MI_CH_Cm = ACTION_FUNCTION_OPT(minor,C), - MI_CH_Csm = ACTION_FUNCTION_OPT(minor,Cs), + CMinor, + CsMinor, + DbMinor = CsMinor, + DMinor, + DsMinor, + EbMinor = DsMinor, + EMinor, + FMinor, + FsMinor, + GbMinor = FsMinor, + GMinor, + GsMinor, + AbMinor = GsMinor, + AMinor, + AsMinor, + BbMinor = AsMinor, + BMinor, +}; + +enum midi_chord_keycodes { //Midi Chocd Keycodes + + //Major Chord Keycodes + + MI_CH_C = F(CMajor), + MI_CH_Cs = F(CsMajor), + MI_CH_Db = MI_CH_Cs, + MI_CH_D = F(DMajor), + MI_CH_Ds = F(DsMajor), + MI_CH_Eb = MI_CH_Ds, + MI_CH_E = F(EMajor), + MI_CH_F = F(FMajor), + MI_CH_Fs = F(FsMajor), + MI_CH_Gb = MI_CH_Fs, + MI_CH_G = F(GMajor), + MI_CH_Gs = F(GsMajor), + MI_CH_Ab = MI_CH_Gs, + MI_CH_A = F(AMajor), + MI_CH_As = F(AsMajor), + MI_CH_Bb = MI_CH_As, + MI_CH_B = F(BMajor), + + //Minor Chord Keycodes + + MI_CH_Cm = F(CMinor), + MI_CH_Csm = F(CsMinor), MI_CH_Dbm = MI_CH_Csm, - MI_CH_Dm = ACTION_FUNCTION_OPT(minor,D), - MI_CH_Dsm = ACTION_FUNCTION_OPT(minor,Ds), + MI_CH_Dm = F(DMinor), + MI_CH_Dsm = F(DsMinor), MI_CH_Ebm = MI_CH_Dsm, - MI_CH_Em = ACTION_FUNCTION_OPT(minor,E), - MI_CH_Fm = ACTION_FUNCTION_OPT(minor,F), - MI_CH_Fsm = ACTION_FUNCTION_OPT(minor,Fs), + MI_CH_Em = F(EMinor), + MI_CH_Fm = F(FMinor), + MI_CH_Fsm = F(FsMinor), MI_CH_Gbm = MI_CH_Fsm, - MI_CH_Gm = ACTION_FUNCTION_OPT(minor,G), - MI_CH_Gsm= ACTION_FUNCTION_OPT(minor,Gs), + MI_CH_Gm = F(GMinor), + MI_CH_Gsm = F(GsMinor), MI_CH_Abm = MI_CH_Gsm, - MI_CH_Am = ACTION_FUNCTION_OPT(minor,A), - MI_CH_Asm = ACTION_FUNCTION_OPT(minor,As), + MI_CH_Am = F(AMinor), + MI_CH_Asm = F(AsMinor), MI_CH_Bbm = MI_CH_Asm, - MI_CH_Bm = ACTION_FUNCTION_OPT(minor,B), + MI_CH_Bm = F(BMinor), }; //Morse Code Macro Keys @@ -646,56 +689,91 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // Midi Chord Function -void action_function_opt(keyrecord_t *record, uint8_t id, uint8_t opt) { +const uint16_t PROGMEM fn_actions[] = { + + //Major Chords + + [CMajor] = ACTION_FUNCTION_OPT(major, C), + [CsMajor] = ACTION_FUNCTION_OPT(major, Cs), + [DMajor] = ACTION_FUNCTION_OPT(major, D), + [DsMajor] = ACTION_FUNCTION_OPT(major, Ds), + [EMajor] = ACTION_FUNCTION_OPT(major, E), + [FMajor] = ACTION_FUNCTION_OPT(major, F), + [FsMajor] = ACTION_FUNCTION_OPT(major, Fs), + [GMajor] = ACTION_FUNCTION_OPT(major, G), + [GsMajor] = ACTION_FUNCTION_OPT(major, Gs), + [AMajor] = ACTION_FUNCTION_OPT(major, A), + [AsMajor] = ACTION_FUNCTION_OPT(major, As), + [BMajor] = ACTION_FUNCTION_OPT(major, B), + + //Minor Chords + + [CMinor] = ACTION_FUNCTION_OPT(minor, C), + [CsMinor] = ACTION_FUNCTION_OPT(minor, Cs), + [DMinor] = ACTION_FUNCTION_OPT(minor, D), + [DsMinor] = ACTION_FUNCTION_OPT(minor, Ds), + [EMinor] = ACTION_FUNCTION_OPT(minor, E), + [FMinor] = ACTION_FUNCTION_OPT(minor, F), + [FsMinor] = ACTION_FUNCTION_OPT(minor, Fs), + [GMinor] = ACTION_FUNCTION_OPT(minor, G), + [GsMinor] = ACTION_FUNCTION_OPT(minor, Gs), + [AMinor] = ACTION_FUNCTION_OPT(minor, A), + [AsMinor] = ACTION_FUNCTION_OPT(minor, As), + [BMinor] = ACTION_FUNCTION_OPT(minor, B), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { uint16_t root_note = MIDI_INVALID_NOTE; switch (opt) { - case 0: //Root note C + case C: //Root note C root_note = MI_C; break; - case 1: //Root note C#/Db + case Cs: //Root note C#/Db root_note = MI_Cs; break; - case 2: // Root note D + case D: // Root note D root_note = MI_D; break; - case 3: // Root note D#/Eb + case Ds: // Root note D#/Eb root_note = MI_Ds; break; - case 4: // Root note E + case E: // Root note E root_note = MI_E; break; - case 5: // Root note F + case F: // Root note F root_note = MI_F; break; - case 6: // Root note F#/Gb + case Fs: // Root note F#/Gb root_note = MI_Fs; break; - case 7: // Root note G + case G: // Root note G root_note = MI_G; break; - case 8: // Root note G#/Ab + case Gs: // Root note G#/Ab root_note = MI_Gs; break; - case 9: // Root note A + case A: // Root note A root_note = MI_A; break; - case 10: // Root note A#/Bb + case As: // Root note A#/Bb root_note = MI_As; break; - case 11: // Root note B + case B: // Root note B root_note = MI_B; break; } - uint8_t major_third = root_note + 4; - uint8_t minor_third = root_note + 3; - uint8_t fifth = root_note + 7; + uint16_t major_third = root_note + 4; + uint16_t minor_third = root_note + 3; + uint16_t fifth = root_note + 7; switch (id) { - case 0: //Major chord + case major: //Major chord + dprintf("Root Note:%d - Major Third:%d - Fifth:%d\n", root_note, major_third, fifth); process_midi(root_note, record); process_midi(major_third, record); process_midi(fifth, record); break; - case 1: //Minor chord + case minor: //Minor chord + dprintf("Root Note:%d - Minor Third:%d - Fifth:%d\n", root_note, minor_third, fifth); process_midi(root_note, record); process_midi(minor_third, record); process_midi(fifth, record); From 4c48c29c0e65f66f95290a6f056d0af5b3cc5ab0 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 29 May 2017 22:09:06 -0400 Subject: [PATCH 12/24] Added MIDI_CHORD layer and other little fixes. Updated readme.md --- .../bluebear/S60X-Bluebear-ARROWFN-Layer.png | Bin 17938 -> 18499 bytes .../bluebear/S60X-Bluebear-MIDI-Layer.png | Bin 21329 -> 0 bytes .../bluebear/S60X-Bluebear-MOUSE-Layer.png | Bin 16119 -> 16499 bytes keyboards/s60_x/keymaps/bluebear/keymap.c | 195 +++++++++++++++--- keyboards/s60_x/keymaps/bluebear/readme.md | 60 +++++- 5 files changed, 226 insertions(+), 29 deletions(-) delete mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI-Layer.png diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-ARROWFN-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-ARROWFN-Layer.png index a7c6df504412616e24c67efae9d5b18e5097d222..1f659d184d9816a81983cf34436995d000dab4fe 100644 GIT binary patch literal 18499 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 literal 17938 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 Xy^PQ2Z&xxfFfe$!`njxgN@xNAP|x$i diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI-Layer.png deleted file mode 100644 index c8df0a9e9e7c0ae12beeb972a4c3ad0adec9c420..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21329 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 Q5{e)>Pgg&ebxsLQ0D~h&O#lD@ diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 3be39c3fa2..44ebb5aada 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -3,11 +3,12 @@ // Keyboard Layers enum keyboard_layers { - BASE, //Base Layer - ARROWFN, //Arrow/FN Layer - MOUSE, //Mouse Layer - MIDI, //Midi Layer - MORSE, //Morse Code Layer + BASE, //Base Layer + ARROWFN, //Arrow/FN Layer + MOUSE, //Mouse Layer + MIDI_BASE, //Midi Layer + MIDI_CHORDS, //Midi Chord Layer + MORSE, //Morse Code Layer }; // Midi Chords @@ -15,6 +16,8 @@ enum keyboard_layers { enum midi_chord_modes { //ACTION_FUNCTION id major, minor, + dom_seventh, + dim_seventh, }; enum midi_chord_root { //ACTION_FUNCTION opt @@ -78,6 +81,46 @@ enum midi_chord_id { //ACTION_FUNCTION Progmem Id AsMinor, BbMinor = AsMinor, BMinor, + + //Dominant Seventh Chords + + CDom7, + CsDom7, + DbDom7 = CsDom7, + DDom7, + DsDom7, + EbDom7 = DsDom7, + EDom7, + FDom7, + FsDom7, + GbDom7 = FsDom7, + GDom7, + GsDom7, + AbDom7 = GsDom7, + ADom7, + AsDom7, + BbDom7 = AsDom7, + BDom7, + + //Diminished Seventh Chords + + CDim7, + CsDim7, + DbDim7 = CsDim7, + DDim7, + DsDim7, + EbDim7 = DsDim7, + EDim7, + FDim7, + FsDim7, + GbDim7 = FsDim7, + GDim7, + GsDim7, + AbDim7 = GsDim7, + ADim7, + AsDim7, + BbDim7 = AsDim7, + BDim7, }; enum midi_chord_keycodes { //Midi Chocd Keycodes @@ -121,6 +164,46 @@ enum midi_chord_keycodes { //Midi Chocd Keycodes MI_CH_Asm = F(AsMinor), MI_CH_Bbm = MI_CH_Asm, MI_CH_Bm = F(BMinor), + + //Dominant Seventh Keycodes + + MI_CH_CDom7 = F(CDom7), + MI_CH_CsDom7 = F(CsDom7), + MI_CH_DbDom7 = MI_CH_CsDom7, + MI_CH_DDom7 = F(DDom7), + MI_CH_DsDom7 = F(DsDom7), + MI_CH_EbDom7 = MI_CH_DsDom7, + MI_CH_EDom7 = F(EDom7), + MI_CH_FDom7 = F(FDom7), + MI_CH_FsDom7 = F(FsDom7), + MI_CH_GbDom7 = MI_CH_FsDom7, + MI_CH_GDom7 = F(GDom7), + MI_CH_GsDom7 = F(GsDom7), + MI_CH_AbDom7 = MI_CH_GsDom7, + MI_CH_ADom7 = F(ADom7), + MI_CH_AsDom7 = F(AsDom7), + MI_CH_BbDom7 = MI_CH_AsDom7, + MI_CH_BDom7 = F(BDom7), + + //Diminished Seventh Keycodes + + MI_CH_CDim7 = F(CDim7), + MI_CH_CsDim7 = F(CsDim7), + MI_CH_DbDim7 = MI_CH_CsDim7, + MI_CH_DDim7 = F(DDim7), + MI_CH_DsDim7 = F(DsDim7), + MI_CH_EbDim7 = MI_CH_DsDim7, + MI_CH_EDim7 = F(EDim7), + MI_CH_FDim7 = F(FDim7), + MI_CH_FsDim7 = F(FsDim7), + MI_CH_GbDim7 = MI_CH_FsDim7, + MI_CH_GDim7 = F(GDim7), + MI_CH_GsDim7 = F(GsDim7), + MI_CH_AbDim7 = MI_CH_GsDim7, + MI_CH_ADim7 = F(ADim7), + MI_CH_AsDim7 = F(AsDim7), + MI_CH_BbDim7 = MI_CH_AsDim7, + MI_CH_BDim7 = F(BDim7), }; //Morse Code Macro Keys @@ -202,7 +285,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 1: Arrow/FN Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ - │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │TO(3)│TO(4)│ + │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │TO(3)│TO(5)│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ │ │ │ │ │ │ │PGUP │ UP │ │ │ │ INS │ DEL │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ @@ -215,7 +298,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [ARROWFN] = KEYMAP( - 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, TO(3), TO(4), \ + 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, TO(3), TO(5), \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_NO, KC_NO, KC_NO, KC_INS, KC_DEL, \ KC_CAPS, KC_HOME, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_TRNS, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_NO, \ @@ -225,7 +308,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 2: Mouse Keys Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ - │RESET│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ │ + │RESET│ F13 │ F14 │ F15 │ F16 │ F17 │ F18 │ F19 │ F20 │ F21 │ F22 │ F23 │ F24 │ │ │ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │DEBUG│ │ │ │ │ │ │BTN1 │MS_UP│BTN2 │WH_UP│ │ │ │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ @@ -239,37 +322,60 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [MOUSE] = KEYMAP( - 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_NO, KC_NO, \ + RESET, 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_NO, KC_NO, \ DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_UP, KC_BTN2, KC_WH_U, KC_NO, KC_NO, KC_NO, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_WH_D, KC_BTN3, KC_NO, KC_NO, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_TRNS, KC_NO, KC_NO, KC_POWER, KC_NO, KC_NO, KC_NO, KC_NO ), - /* 3: Midi Layer + /* 3: Midi Base Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ - │TO(0)│ Cmaj│ Gmaj│ Dmaj│ Amaj│ Emaj│ Bmaj│Gbmaj│Dbmaj│Abmaj│Ebmaj│Bbmaj│ Fmaj│ │ │ + │TO(0)│ Cmaj│ Gmaj│ Dmaj│ Amaj│ Emaj│ Bmaj│Gbmaj│Dbmaj│Abmaj│Ebmaj│Bbmaj│ Fmaj│ │TO(4)│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ - │ │ │ C# │ D# │ │ F# │ G# │ A# │ │ C# │ D# │ │ │ │█████│ + │OCT+ │ │ C# │ D# │ │ F# │ G# │ A# │ │ C# │ D# │ │ │ │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ - │OCT- │ C │ D │ E │ F │ G │ A │ B │ C │ D │ E │ F │▒▒▒▒▒│OCT+ │█████│ + │OCT- │ C │ D │ E │ F │ G │ A │ B │ C │ D │ E │ F │▒▒▒▒▒│ │█████│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ - │ Am │▒▒▒▒▒│ Em │ Bm │ F#m │ C#m │ G#m │ D#m │ Bbm │ Fm │ Cm │ Gm │▒▒▒▒▒│ Dm │▒▒▒▒▒│ + │ Cm │▒▒▒▒▒│ Gm │ Dm │ Am │ Em │ Bm │ Gbm │ Dbm │ Abm │ Ebm │ Bbm │▒▒▒▒▒│ Fm │▒▒▒▒▒│ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ │ │ │█████│█████│█████│A-OFF│█████│█████│█████│ │ │ │ │█████│ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ */ - [MIDI] = KEYMAP( - TO(0), MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Gb, MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, KC_NO, KC_NO, \ - KC_NO, KC_NO, MI_Cs, MI_Ds, KC_NO, MI_Fs, MI_Gs, MI_As, KC_NO, MI_Cs_1, MI_Ds_1, KC_NO, KC_NO, KC_NO, \ - MI_OCTD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, KC_NO, MI_OCTU, \ - MI_CH_Am, KC_NO, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm, MI_CH_Csm, MI_CH_Gsm, MI_CH_Dsm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, KC_NO, MI_CH_Dm, KC_NO, \ - KC_NO, KC_NO, KC_NO, MI_ALLOFF, KC_NO, KC_NO, KC_NO, KC_NO - ), + [MIDI_BASE] = KEYMAP( + TO(0), MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Gb, MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, KC_NO, TO(4), \ + MI_OCTU, KC_NO, MI_Cs, MI_Ds, KC_NO, MI_Fs, MI_Gs, MI_As, KC_NO, MI_Cs_1, MI_Ds_1, KC_NO, KC_NO, KC_NO, \ + MI_OCTD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, KC_NO, KC_NO, \ + MI_CH_Cm, KC_NO, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Gbm, MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, KC_NO, MI_CH_Fm, KC_NO, \ + KC_NO, KC_NO, KC_NO, MI_ALLOFF, KC_NO, KC_NO, KC_NO, KC_NO + ), - /* 4: Morse Code Layer + /* 4: Midi Chord Layer + + ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ + │TO(0)│ Cmaj│ Gmaj│ Dmaj│ Amaj│ Emaj│ Bmaj│Gbmaj│Dbmaj│Abmaj│Ebmaj│Bbmaj│ Fmaj│TO(3)│ │ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │OCT+ │ Cm │ Gm │ Dm │ Am │ Em │ Bbm │ Gbm │ Dbm │ Abm │ Ebm │ Bbm │ Fm │ │█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │OCT- │Cdom7│Gdom7│Ddom7│Adom7│Edom7│Bdom7│Gbdo7│Dbdo7│Abdo7│Ebdo7│Bbdo7│▒▒▒▒▒│Fdom7│█████│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │Cdim7│▒▒▒▒▒│Gdim7│Ddim7│Adim7│Edim7│Bdim7│Gbdi7│Dbdi7│Abdi7│Ebdi7│Bbdi7│▒▒▒▒▒│Fdim7│▒▒▒▒▒│ + ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ + │ │ │ │█████│█████│█████│A-OFF│█████│█████│█████│ │ │ │ │█████│ + └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ + */ + + [MIDI_CHORDS] = KEYMAP( + TO(0), MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Gb, MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, TO(3), KC_NO, \ + MI_OCTU, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bbm, MI_CH_Gbm, MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, KC_NO, \ + MI_OCTD, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_GbDom7, MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, KC_NO, MI_CH_FDom7, \ + MI_CH_CDim7, KC_NO, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_GbDim7, MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, KC_NO, MI_CH_FDim7, KC_NO, \ + KC_NO, KC_NO, KC_NO, MI_ALLOFF, KC_NO, KC_NO, KC_NO, KC_NO + ), + + /* 5: Morse Code Layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │TO(0)│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ │ │ │ │ @@ -720,6 +826,36 @@ const uint16_t PROGMEM fn_actions[] = { [AMinor] = ACTION_FUNCTION_OPT(minor, A), [AsMinor] = ACTION_FUNCTION_OPT(minor, As), [BMinor] = ACTION_FUNCTION_OPT(minor, B), + + //Dominant 7th + + [CDom7] = ACTION_FUNCTION_OPT(dom_seventh, C), + [CsDom7] = ACTION_FUNCTION_OPT(dom_seventh, Cs), + [DDom7] = ACTION_FUNCTION_OPT(dom_seventh, D), + [DsDom7] = ACTION_FUNCTION_OPT(dom_seventh, Ds), + [EDom7] = ACTION_FUNCTION_OPT(dom_seventh, E), + [FDom7] = ACTION_FUNCTION_OPT(dom_seventh, F), + [FsDom7] = ACTION_FUNCTION_OPT(dom_seventh, Fs), + [GDom7] = ACTION_FUNCTION_OPT(dom_seventh, G), + [GsDom7] = ACTION_FUNCTION_OPT(dom_seventh, Gs), + [ADom7] = ACTION_FUNCTION_OPT(dom_seventh, A), + [AsDom7] = ACTION_FUNCTION_OPT(dom_seventh, As), + [BDom7] = ACTION_FUNCTION_OPT(dom_seventh, B), + + //Diminished 7th + + [CDim7] = ACTION_FUNCTION_OPT(dim_seventh, C), + [CsDim7] = ACTION_FUNCTION_OPT(dim_seventh, Cs), + [DDim7] = ACTION_FUNCTION_OPT(dim_seventh, D), + [DsDim7] = ACTION_FUNCTION_OPT(dim_seventh, Ds), + [EDim7] = ACTION_FUNCTION_OPT(dim_seventh, E), + [FDim7] = ACTION_FUNCTION_OPT(dim_seventh, F), + [FsDim7] = ACTION_FUNCTION_OPT(dim_seventh, Fs), + [GDim7] = ACTION_FUNCTION_OPT(dim_seventh, G), + [GsDim7] = ACTION_FUNCTION_OPT(dim_seventh, Gs), + [ADim7] = ACTION_FUNCTION_OPT(dim_seventh, A), + [AsDim7] = ACTION_FUNCTION_OPT(dim_seventh, As), + [BDim7] = ACTION_FUNCTION_OPT(dim_seventh, B), }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -764,19 +900,30 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } uint16_t major_third = root_note + 4; uint16_t minor_third = root_note + 3; + //uint16_t flat_fifth = root_note + 6; uint16_t fifth = root_note + 7; + uint16_t minor_seventh = root_note + 10; + uint16_t diminished_seventh = root_note -3; switch (id) { case major: //Major chord - dprintf("Root Note:%d - Major Third:%d - Fifth:%d\n", root_note, major_third, fifth); process_midi(root_note, record); process_midi(major_third, record); process_midi(fifth, record); break; case minor: //Minor chord - dprintf("Root Note:%d - Minor Third:%d - Fifth:%d\n", root_note, minor_third, fifth); process_midi(root_note, record); process_midi(minor_third, record); process_midi(fifth, record); break; + case dom_seventh: //Dominant Seventh chord + process_midi(root_note, record); + process_midi(major_third, record); + process_midi(minor_seventh, record); + break; + case dim_seventh: //Diminished Seventh Chord + process_midi(root_note, record); + process_midi(minor_third, record); + process_midi(diminished_seventh, record); + break; } } diff --git a/keyboards/s60_x/keymaps/bluebear/readme.md b/keyboards/s60_x/keymaps/bluebear/readme.md index 579683abcb..9a70cde96a 100644 --- a/keyboards/s60_x/keymaps/bluebear/readme.md +++ b/keyboards/s60_x/keymaps/bluebear/readme.md @@ -1,25 +1,75 @@ -## Bluebear’s custom S60X layout +# Bluebear’s custom S60X layout Custom keyboard layout for my S60X, my first ever custom mechanical keyboard kit. This layout was inspired in part by the HHKB line of keyboards and a quest to find the perfect ergonomic, logical layout for what I do. If you like this layout, please feel free to use it, modify it and share it. -## Base Layer +## BASE Layer +![BASE Layer](S60X-Bluebear-BASE-Layer.png) + +-Dvorak keyboard layout -Hold left control key for LCTL, and tap it for ESC -Hold enter key for RCTL and tap for ENT --Hold the space key to momentarily switch to [ARROW] layer --Left bottom key acts as momentary switch to the [MOUSE] layer +-Hold the space key to momentarily switch to ARROWFN layer +-Left bottom key acts as momentary switch to the MOUSE layer -Hold right alt key for AltGr and tap for APP(which I have mapped to Compose in OS) -Hold left shift key for LSFT and tap for ( (Space Cadet style) -Hold right shift key for RSFT and tap for ) (Space Cadet style) -Tap key on bottom row, second from the right (where APP usually is) to get CTL-Shift (one shot modifier - next key pressed will be modified by ctl-shift) -Tap key on bottom right to get CTL-Alt (one shot modifier - next key pressed will be modified by ctl-alt) -## Mouse Layer +## ARROWFN Layer +![ARROWFN Layer](S60X-Bluebear-ARROWFN-Layer.png) + +-Number row becomes F1 to F12 +-C, T, H, N keys become Up, Down, Left, Right +-Access to various other keys normally found on a full sized keyboard +-Top right button toggles MORSE layer +-Second from right, top row, toggles MIDI_BASE layer + +## MOUSE Layer + +![MOUSE Layer](S60X-Bluebear-MOUSE-Layer.png) + +-Move the mouse with mouse keys -Hitting the escape key in this layer will give RESET, which puts the controller into dfu mode for flashing firmware onto it -Hitting the space key in this layer is like hitting power button on computer +-Hitting the tab button toggles caps lock +-Number row becomes F13 to F24 + +## MIDI_BASE Layer + +![MIDI_BASE Layer](S60X-Bluebear-MIDI_BASE-Layer.png) + +This layer was inspired by the Satan Midi layout (https://github.com/qmk/qmk_firmware/tree/master/keyboards/satan/keymaps/midi) and gives access to basic MIDI notes. What I added were two layers of MIDI chords (major and minor triads) arranged in a circle of fifths pattern. Thanks to @fredizzimo for helping me with the code for these chords. + +-Top right button toggles MORSE_CHORDS layer +-Escape brings you back to the BASE layer + +## MIDI_CHORDS Layer + +![MIDI_CHORDS Layer](S60X-Bluebear-MIDI_CHORDS-Layer.png) + +After figuring out how to code my MIDI chord function, I decided to dedicate a full layer to these chords. This chord layout was inspired by the Stradella Base system (https://en.wikipedia.org/wiki/Stradella_bass_system) found on accordions. This layer is a tool for musical composition and songwriting. + +-Second from right, top row, toggles MIDI_BASE layer +-Escape brings you back to the BASE layer + +## MORSE LAYER + +![MORSE Layer](S60X-Bluebear-MORSE-Layer.png) + +This layer is really just for fun, and because I am a ham radio operator and morse code enthusiast. Hitting the alphanumerical keys in this layer will send a series of dits (.) and dahs (-) representing that character in morse code. + +-Escape brings you back to the BASE layer + +### THIS IS STILL A WORK IN PROGRESS + +This keyboard layout is still a work in progress and there are a couple of kinks left to iron out. But it is still very usable and the midi and morse code layers are lots of fun to use. Please feel free to use, share and improve all, or part of this layout. + + From 1ef911d150e361668be72e0082ade728a199e889 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 29 May 2017 22:11:48 -0400 Subject: [PATCH 13/24] Added a few images --- .../bluebear/120-button_Stradella_chart.svg | 5190 +++++++++++++++++ .../S60X-Bluebear-MIDI_BASE-Layer.png | Bin 0 -> 22521 bytes .../S60X-Bluebear-MIDI_CHORD-Layer.png | Bin 0 -> 23687 bytes 3 files changed, 5190 insertions(+) create mode 100644 keyboards/s60_x/keymaps/bluebear/120-button_Stradella_chart.svg create mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI_BASE-Layer.png create mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI_CHORD-Layer.png diff --git a/keyboards/s60_x/keymaps/bluebear/120-button_Stradella_chart.svg b/keyboards/s60_x/keymaps/bluebear/120-button_Stradella_chart.svg new file mode 100644 index 0000000000..bd878faa1f --- /dev/null +++ b/keyboards/s60_x/keymaps/bluebear/120-button_Stradella_chart.svg @@ -0,0 +1,5190 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI_BASE-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI_BASE-Layer.png new file mode 100644 index 0000000000000000000000000000000000000000..58ad1605f0324229ff9ba3c84ac5350bb61df90b GIT binary patch literal 22521 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 literal 0 HcmV?d00001 From cd4ccee703770bf5dce977f539e53f30e139313d Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 29 May 2017 22:13:52 -0400 Subject: [PATCH 14/24] Corrected typo in readme.md --- keyboards/s60_x/keymaps/bluebear/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/readme.md b/keyboards/s60_x/keymaps/bluebear/readme.md index 9a70cde96a..50af6d835c 100644 --- a/keyboards/s60_x/keymaps/bluebear/readme.md +++ b/keyboards/s60_x/keymaps/bluebear/readme.md @@ -48,9 +48,9 @@ This layer was inspired by the Satan Midi layout (https://github.com/qmk/qmk_fir -Top right button toggles MORSE_CHORDS layer -Escape brings you back to the BASE layer -## MIDI_CHORDS Layer +## MIDI_CHORD Layer -![MIDI_CHORDS Layer](S60X-Bluebear-MIDI_CHORDS-Layer.png) +![MIDI_CHORD Layer](S60X-Bluebear-MIDI_CHORDS-Layer.png) After figuring out how to code my MIDI chord function, I decided to dedicate a full layer to these chords. This chord layout was inspired by the Stradella Base system (https://en.wikipedia.org/wiki/Stradella_bass_system) found on accordions. This layer is a tool for musical composition and songwriting. From 06684555d21059e55a549fc6c24936920e35f965 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 29 May 2017 22:16:17 -0400 Subject: [PATCH 15/24] Another typo... --- keyboards/s60_x/keymaps/bluebear/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/s60_x/keymaps/bluebear/readme.md b/keyboards/s60_x/keymaps/bluebear/readme.md index 50af6d835c..6f54d4d580 100644 --- a/keyboards/s60_x/keymaps/bluebear/readme.md +++ b/keyboards/s60_x/keymaps/bluebear/readme.md @@ -50,7 +50,7 @@ This layer was inspired by the Satan Midi layout (https://github.com/qmk/qmk_fir ## MIDI_CHORD Layer -![MIDI_CHORD Layer](S60X-Bluebear-MIDI_CHORDS-Layer.png) +![MIDI_CHORD Layer](S60X-Bluebear-MIDI_CHORD-Layer.png) After figuring out how to code my MIDI chord function, I decided to dedicate a full layer to these chords. This chord layout was inspired by the Stradella Base system (https://en.wikipedia.org/wiki/Stradella_bass_system) found on accordions. This layer is a tool for musical composition and songwriting. From fbaf964a854a8fc754871730deb219ab48fd6937 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Tue, 30 May 2017 21:27:00 -0400 Subject: [PATCH 16/24] Improvements to Midi and keymap --- keyboards/s60_x/keymaps/bluebear/keymap.c | 114 +++++++++++----------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 44ebb5aada..87a792a015 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -13,14 +13,14 @@ enum keyboard_layers { // Midi Chords -enum midi_chord_modes { //ACTION_FUNCTION id +enum midi_chord_modes { //ACTION_FUNCTION opt major, minor, dom_seventh, dim_seventh, }; -enum midi_chord_root { //ACTION_FUNCTION opt +enum midi_chord_root { //ACTION_FUNCTION id C, Cs, Db = Cs, @@ -301,8 +301,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, TO(3), TO(5), \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_NO, KC_NO, KC_NO, KC_INS, KC_DEL, \ KC_CAPS, KC_HOME, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_TRNS, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_TRNS, KC_NO, \ + KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), /* 2: Mouse Keys Layer @@ -324,9 +324,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RESET, 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_NO, KC_NO, \ DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_UP, KC_BTN2, KC_WH_U, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_WH_D, KC_BTN3, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_TRNS, KC_NO, KC_NO, KC_POWER, KC_NO, KC_NO, KC_NO, KC_NO + KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_WH_D, KC_BTN3, KC_NO, KC_TRNS, \ + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_POWER, KC_TRNS, KC_TRNS, KC_NO, KC_NO ), /* 3: Midi Base Layer @@ -799,68 +799,68 @@ const uint16_t PROGMEM fn_actions[] = { //Major Chords - [CMajor] = ACTION_FUNCTION_OPT(major, C), - [CsMajor] = ACTION_FUNCTION_OPT(major, Cs), - [DMajor] = ACTION_FUNCTION_OPT(major, D), - [DsMajor] = ACTION_FUNCTION_OPT(major, Ds), - [EMajor] = ACTION_FUNCTION_OPT(major, E), - [FMajor] = ACTION_FUNCTION_OPT(major, F), - [FsMajor] = ACTION_FUNCTION_OPT(major, Fs), - [GMajor] = ACTION_FUNCTION_OPT(major, G), - [GsMajor] = ACTION_FUNCTION_OPT(major, Gs), - [AMajor] = ACTION_FUNCTION_OPT(major, A), - [AsMajor] = ACTION_FUNCTION_OPT(major, As), - [BMajor] = ACTION_FUNCTION_OPT(major, B), + [CMajor] = ACTION_FUNCTION_OPT(C, major), + [CsMajor] = ACTION_FUNCTION_OPT(Cs, major), + [DMajor] = ACTION_FUNCTION_OPT(D, major), + [DsMajor] = ACTION_FUNCTION_OPT(Ds, major), + [EMajor] = ACTION_FUNCTION_OPT(E, major), + [FMajor] = ACTION_FUNCTION_OPT(F, major), + [FsMajor] = ACTION_FUNCTION_OPT(Fs, major), + [GMajor] = ACTION_FUNCTION_OPT(G, major), + [GsMajor] = ACTION_FUNCTION_OPT(Gs, major), + [AMajor] = ACTION_FUNCTION_OPT(A, major), + [AsMajor] = ACTION_FUNCTION_OPT(As, major), + [BMajor] = ACTION_FUNCTION_OPT(B, major), //Minor Chords - [CMinor] = ACTION_FUNCTION_OPT(minor, C), - [CsMinor] = ACTION_FUNCTION_OPT(minor, Cs), - [DMinor] = ACTION_FUNCTION_OPT(minor, D), - [DsMinor] = ACTION_FUNCTION_OPT(minor, Ds), - [EMinor] = ACTION_FUNCTION_OPT(minor, E), - [FMinor] = ACTION_FUNCTION_OPT(minor, F), - [FsMinor] = ACTION_FUNCTION_OPT(minor, Fs), - [GMinor] = ACTION_FUNCTION_OPT(minor, G), - [GsMinor] = ACTION_FUNCTION_OPT(minor, Gs), - [AMinor] = ACTION_FUNCTION_OPT(minor, A), - [AsMinor] = ACTION_FUNCTION_OPT(minor, As), - [BMinor] = ACTION_FUNCTION_OPT(minor, B), + [CMinor] = ACTION_FUNCTION_OPT(C, minor), + [CsMinor] = ACTION_FUNCTION_OPT(Cs, minor), + [DMinor] = ACTION_FUNCTION_OPT(D, minor), + [DsMinor] = ACTION_FUNCTION_OPT(Ds, minor), + [EMinor] = ACTION_FUNCTION_OPT(E, minor), + [FMinor] = ACTION_FUNCTION_OPT(F, minor), + [FsMinor] = ACTION_FUNCTION_OPT(Fs, minor), + [GMinor] = ACTION_FUNCTION_OPT(G, minor), + [GsMinor] = ACTION_FUNCTION_OPT(Gs, minor), + [AMinor] = ACTION_FUNCTION_OPT(A, minor), + [AsMinor] = ACTION_FUNCTION_OPT(As, minor), + [BMinor] = ACTION_FUNCTION_OPT(B, minor), //Dominant 7th - [CDom7] = ACTION_FUNCTION_OPT(dom_seventh, C), - [CsDom7] = ACTION_FUNCTION_OPT(dom_seventh, Cs), - [DDom7] = ACTION_FUNCTION_OPT(dom_seventh, D), - [DsDom7] = ACTION_FUNCTION_OPT(dom_seventh, Ds), - [EDom7] = ACTION_FUNCTION_OPT(dom_seventh, E), - [FDom7] = ACTION_FUNCTION_OPT(dom_seventh, F), - [FsDom7] = ACTION_FUNCTION_OPT(dom_seventh, Fs), - [GDom7] = ACTION_FUNCTION_OPT(dom_seventh, G), - [GsDom7] = ACTION_FUNCTION_OPT(dom_seventh, Gs), - [ADom7] = ACTION_FUNCTION_OPT(dom_seventh, A), - [AsDom7] = ACTION_FUNCTION_OPT(dom_seventh, As), - [BDom7] = ACTION_FUNCTION_OPT(dom_seventh, B), + [CDom7] = ACTION_FUNCTION_OPT(C, dom_seventh), + [CsDom7] = ACTION_FUNCTION_OPT(Cs, dom_seventh), + [DDom7] = ACTION_FUNCTION_OPT(D, dom_seventh), + [DsDom7] = ACTION_FUNCTION_OPT(Ds, dom_seventh), + [EDom7] = ACTION_FUNCTION_OPT(E, dom_seventh), + [FDom7] = ACTION_FUNCTION_OPT(F, dom_seventh), + [FsDom7] = ACTION_FUNCTION_OPT(Fs, dom_seventh), + [GDom7] = ACTION_FUNCTION_OPT(G, dom_seventh), + [GsDom7] = ACTION_FUNCTION_OPT(Gs, dom_seventh), + [ADom7] = ACTION_FUNCTION_OPT(A, dom_seventh), + [AsDom7] = ACTION_FUNCTION_OPT(As, dom_seventh), + [BDom7] = ACTION_FUNCTION_OPT(B, dom_seventh), //Diminished 7th - [CDim7] = ACTION_FUNCTION_OPT(dim_seventh, C), - [CsDim7] = ACTION_FUNCTION_OPT(dim_seventh, Cs), - [DDim7] = ACTION_FUNCTION_OPT(dim_seventh, D), - [DsDim7] = ACTION_FUNCTION_OPT(dim_seventh, Ds), - [EDim7] = ACTION_FUNCTION_OPT(dim_seventh, E), - [FDim7] = ACTION_FUNCTION_OPT(dim_seventh, F), - [FsDim7] = ACTION_FUNCTION_OPT(dim_seventh, Fs), - [GDim7] = ACTION_FUNCTION_OPT(dim_seventh, G), - [GsDim7] = ACTION_FUNCTION_OPT(dim_seventh, Gs), - [ADim7] = ACTION_FUNCTION_OPT(dim_seventh, A), - [AsDim7] = ACTION_FUNCTION_OPT(dim_seventh, As), - [BDim7] = ACTION_FUNCTION_OPT(dim_seventh, B), + [CDim7] = ACTION_FUNCTION_OPT(C, dim_seventh), + [CsDim7] = ACTION_FUNCTION_OPT(Cs, dim_seventh), + [DDim7] = ACTION_FUNCTION_OPT(D, dim_seventh), + [DsDim7] = ACTION_FUNCTION_OPT(Ds, dim_seventh), + [EDim7] = ACTION_FUNCTION_OPT(E, dim_seventh), + [FDim7] = ACTION_FUNCTION_OPT(F, dim_seventh), + [FsDim7] = ACTION_FUNCTION_OPT(Fs, dim_seventh), + [GDim7] = ACTION_FUNCTION_OPT(G, dim_seventh), + [GsDim7] = ACTION_FUNCTION_OPT(Gs, dim_seventh), + [ADim7] = ACTION_FUNCTION_OPT(A, dim_seventh), + [AsDim7] = ACTION_FUNCTION_OPT(As, dim_seventh), + [BDim7] = ACTION_FUNCTION_OPT(B, dim_seventh), }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { uint16_t root_note = MIDI_INVALID_NOTE; - switch (opt) { + switch (id) { case C: //Root note C root_note = MI_C; break; @@ -904,7 +904,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { uint16_t fifth = root_note + 7; uint16_t minor_seventh = root_note + 10; uint16_t diminished_seventh = root_note -3; - switch (id) { + switch (opt) { case major: //Major chord process_midi(root_note, record); process_midi(major_third, record); From 9cfa37bb3dba3a93edb47c0b08075aa05ea6b492 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Fri, 2 Jun 2017 22:57:57 -0400 Subject: [PATCH 17/24] Improvements and corrections to morse code macros layer --- keyboards/s60_x/keymaps/bluebear/keymap.c | 88 +++++++++++------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 87a792a015..c4baadfc6e 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -406,7 +406,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case 0: //Number 0-) if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- } @@ -417,7 +417,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 1: //Number 1-! if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-.-- } @@ -428,7 +428,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 2: //Number 2-@ if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.--.-. } @@ -439,7 +439,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 3: // Number 3 if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //...-- @@ -447,7 +447,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 4: //Number 4-$ if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-..- } @@ -458,7 +458,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 5: //Number 5 if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //..... @@ -466,7 +466,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 6: //Number 6 if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-.... @@ -474,7 +474,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 7: //Number 7-& if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.-... } @@ -485,7 +485,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 8: //Number 8 if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //---.. @@ -493,7 +493,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 9: //Number 9-( if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-.--. } @@ -504,7 +504,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 10: //Letter A if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(MINS), T(SPACE), END); //.- @@ -512,7 +512,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 11: //Letter B if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-... @@ -520,7 +520,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 12: //Letter C if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-. @@ -528,7 +528,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 13: //Letter D if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(DOT), T(DOT), T(SPACE), END); //-.. @@ -536,7 +536,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 14: //Letter E if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(SPACE), END); //. @@ -544,7 +544,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 15: //Letter F if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //..-. @@ -552,7 +552,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 16: //Letter G if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(MINS), T(DOT), T(SPACE), END); //--. @@ -560,7 +560,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 17: //Letter H if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.... @@ -568,7 +568,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 18: //Letter I if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(DOT), T(SPACE), END); //.. @@ -576,7 +576,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 19: //Letter J if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.--- @@ -584,7 +584,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 20: //Letter K if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.- @@ -592,7 +592,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 21: //Letter L if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(SPACE), END); //.-.. @@ -600,7 +600,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 22: //Letter M if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(MINS), T(SPACE), END); //-- @@ -608,7 +608,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 23: //Letter N if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(DOT), T(SPACE), END); //-. @@ -616,7 +616,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 24: //Letter O if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(MINS), T(MINS), T(SPACE), END); //--- @@ -624,7 +624,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 25: //Letter P if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //.--. @@ -632,7 +632,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 26: //Letter Q if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //--.- @@ -640,7 +640,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 27: //Letter R if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-. @@ -648,7 +648,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 28: //Letter S if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(SPACE), END); //... @@ -656,7 +656,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 29: //Letter T if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(SPACE), END); //- @@ -664,7 +664,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 30: //Letter U if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(DOT), T(MINS), T(SPACE), END); //..- @@ -672,7 +672,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 31: //Letter V if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...- @@ -680,7 +680,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 32: //Letter W if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(MINS), T(MINS), T(SPACE), END); //.-- @@ -688,7 +688,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 33: //Letter X if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-..- @@ -696,7 +696,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 34: //Letter Y if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-- @@ -704,7 +704,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 35: //Letter Z if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //--.. @@ -712,7 +712,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 36: //Punctuation . if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(SPACE), END); //.-.-.- @@ -720,7 +720,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 37: //Punctuation , if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //--..-- @@ -728,7 +728,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 38: //Punctuation '-" if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-..-. } @@ -739,7 +739,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 39: //Punctuation /-? if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //..--.. } @@ -750,7 +750,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 40: //Punctuation ;-: if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //---... } @@ -761,7 +761,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 41: //Punctuation =-+ if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.-. } @@ -772,7 +772,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 42: //Punctuation --_ if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.- } @@ -783,7 +783,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 43: //Morse Space if (record->event.pressed) { - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || MOD_BIT(KC_RSFT)) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); } return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse From 1b8ed53f21702d279dc5b5bffc2d0213943a22ad Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 5 Jun 2017 22:17:35 -0400 Subject: [PATCH 18/24] Added a couple of custom keys and updated layer image --- .../bluebear/S60X-Bluebear-MOUSE-Layer.png | Bin 16499 -> 18972 bytes keyboards/s60_x/keymaps/bluebear/keymap.c | 43 +++++++++++++++--- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MOUSE-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MOUSE-Layer.png index 4e92a60c761c8401b667a5a8e8ac591a9b85d4ab..f37249b8114e3520ef699850116c47dac65e3e52 100644 GIT binary patch literal 18972 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 literal 16499 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.pressed) { - if (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { clear_mods(); return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- } @@ -791,7 +801,26 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; } return MACRO_NONE; -}; +} + +// Custom Keys + +bool process_record_user (uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + case MAGSYS: //Magic SysRq function - Toggles key on and off depending on state of LALT key + if (record->event.pressed) { + if (keyboard_report->mods & (MOD_BIT(KC_LALT))) { + unregister_code(KC_PSCR); + unregister_code(KC_LALT); + } else { + register_code(KC_LALT); + register_code(KC_PSCR); + } + } + break; + } + return true; +} // Midi Chord Function From 8f80f35186353801b960d536339b70f43f484c46 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Wed, 7 Jun 2017 22:01:28 -0400 Subject: [PATCH 19/24] Working on Morse Code Macros --- keyboards/s60_x/keymaps/bluebear/keymap.c | 33 ++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 22356db2b3..1ecddb8d5b 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -407,21 +407,36 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -// Macros +// Custom Function - Check if shift is pressed + +bool check_shift(void); + +bool check_shift() { + if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT))) { + return KC_LSHIFT; + } + if (keyboard_report->mods & (MOD_BIT(KC_RSHIFT))) { + return KC_RSHIFT; + } + else { + return false; + } +} + +// Morse Code Macros const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + uint16_t is_shift = check_shift(); switch(id) { - - // Morse Code Macros - case 0: //Number 0-) if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- - } + if (is_shift == false) { + return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //----- + } else { - return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //----- + unregister_mods(MOD_BIT(is_shift)); + return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- + register_code(is_shift); } } break; From 7146dfea6e564660e525c5c8280d5c73a73697f3 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Wed, 7 Jun 2017 23:57:14 -0400 Subject: [PATCH 20/24] =?UTF-8?q?Created=20special=20shift=20keys=20for=20?= =?UTF-8?q?Morse=20layer=20that=20change=20variable=20value,=20enabling=20?= =?UTF-8?q?to=20send=20=E2=80=9Cshifted=E2=80=9D=20special=20morse=20code?= =?UTF-8?q?=20characters.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/s60_x/keymaps/bluebear/keymap.c | 172 ++++------------------ 1 file changed, 29 insertions(+), 143 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 1ecddb8d5b..878a54e285 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -258,7 +258,9 @@ enum morse_macros { // Custom Keys enum custom_keys { - MAGSYS, // Magic SysRq key - Sends Alt-PSCR + MAGSYS = SAFE_RANGE, // Magic SysRq key - Sends Alt-PSCR + MC_LSFT, + MC_RSFT, TFS = LCTL(LALT(KC_DEL)), // Three Finger Salute - Sends Ctl-Alt-Del }; @@ -401,49 +403,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TO(0), MC_1, MC_2, MC_3, MC_4, MC_5, MC_6, MC_7, MC_8, MC_9, MC_0, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_TAB, MC_APOS, MC_COMM, MC_DOT, MC_P, MC_Y, MC_F, MC_G, MC_C, MC_R, MC_L, MC_SLSH, MC_EQL, KC_BSPC, \ KC_NO, MC_A, MC_O, MC_E, MC_U, MC_I, MC_D, MC_H, MC_T, MC_N, MC_S, MC_MINS, KC_NO, KC_ENT, \ - KC_LSFT, KC_NO, MC_SCLN, MC_Q, MC_J, MC_K, MC_X, MC_B, MC_M, MC_W, MC_V, MC_Z, KC_NO, KC_RSFT, KC_NO, \ + MC_LSFT, KC_NO, MC_SCLN, MC_Q, MC_J, MC_K, MC_X, MC_B, MC_M, MC_W, MC_V, MC_Z, KC_NO, MC_RSFT, KC_NO, \ KC_NO, KC_NO, KC_NO, MC_SPACE, KC_NO, KC_NO, KC_NO, KC_NO ), }; -// Custom Function - Check if shift is pressed - -bool check_shift(void); - -bool check_shift() { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT))) { - return KC_LSHIFT; - } - if (keyboard_report->mods & (MOD_BIT(KC_RSHIFT))) { - return KC_RSHIFT; - } - else { - return false; - } -} - // Morse Code Macros +int mc_shift_on = false; + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - uint16_t is_shift = check_shift(); switch(id) { case 0: //Number 0-) if (record->event.pressed) { - if (is_shift == false) { - return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //----- - } - else { - unregister_mods(MOD_BIT(is_shift)); + if (mc_shift_on == true) { return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.- - register_code(is_shift); + } + else { + return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //----- } } break; case 1: //Number 1-! if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-.-- } else { @@ -453,8 +437,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 2: //Number 2-@ if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.--.-. } else { @@ -464,16 +447,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 3: // Number 3 if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //...-- } break; case 4: //Number 4-$ if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-..- } else { @@ -483,24 +462,17 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 5: //Number 5 if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //..... } break; case 6: //Number 6 if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-.... } break; case 7: //Number 7-& if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.-... } else { @@ -510,16 +482,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 8: //Number 8 if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //---.. } break; case 9: //Number 9-( if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-.--. } else { @@ -529,232 +497,149 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 10: //Letter A if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(MINS), T(SPACE), END); //.- } break; case 11: //Letter B if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-... } break; case 12: //Letter C if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-. } break; case 13: //Letter D if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(DOT), T(DOT), T(SPACE), END); //-.. } break; case 14: //Letter E if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(SPACE), END); //. } break; case 15: //Letter F if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //..-. } break; case 16: //Letter G if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(MINS), T(DOT), T(SPACE), END); //--. } break; case 17: //Letter H if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.... } break; case 18: //Letter I if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(DOT), T(SPACE), END); //.. } break; case 19: //Letter J if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.--- } break; case 20: //Letter K if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.- } break; case 21: //Letter L if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(SPACE), END); //.-.. } break; case 22: //Letter M if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(MINS), T(SPACE), END); //-- } break; case 23: //Letter N if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(DOT), T(SPACE), END); //-. } break; case 24: //Letter O if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(MINS), T(MINS), T(SPACE), END); //--- } break; case 25: //Letter P if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //.--. } break; case 26: //Letter Q if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //--.- } break; case 27: //Letter R if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-. } break; case 28: //Letter S if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(DOT), T(DOT), T(SPACE), END); //... } break; case 29: //Letter T if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(SPACE), END); //- } break; case 30: //Letter U if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(DOT), T(MINS), T(SPACE), END); //..- } break; case 31: //Letter V if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...- } break; case 32: //Letter W if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(MINS), T(MINS), T(SPACE), END); //.-- } break; case 33: //Letter X if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-..- } break; case 34: //Letter Y if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { } return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-- } break; case 35: //Letter Z if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //--.. } break; case 36: //Punctuation . if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(SPACE), END); //.-.-.- } break; case 37: //Punctuation , if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //--..-- } break; case 38: //Punctuation '-" if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-..-. } else { @@ -764,8 +649,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 39: //Punctuation /-? if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //..--.. } else { @@ -775,8 +659,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 40: //Punctuation ;-: if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //---... } else { @@ -786,8 +669,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 41: //Punctuation =-+ if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.-. } else { @@ -797,8 +679,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 42: //Punctuation --_ if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); + if (mc_shift_on == true) { return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.- } else { @@ -808,9 +689,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { break; case 43: //Morse Space if (record->event.pressed) { - if (keyboard_report->mods & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { - clear_mods(); - } return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse } break; @@ -833,6 +711,14 @@ bool process_record_user (uint16_t keycode, keyrecord_t *record) { } } break; + case MC_LSFT ... MC_RSFT: + if (record->event.pressed) { + mc_shift_on = true; + } + else { + mc_shift_on = false; + } + break; } return true; } From 54d48140cd4e0f03876b336c170a15076e123c69 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Sun, 11 Jun 2017 16:00:40 -0400 Subject: [PATCH 21/24] -MIDI Chords now using process_record_user instead of F(n) keys -Morse Code shift keys implemented --- keyboards/s60_x/keymaps/bluebear/keymap.c | 508 ++++++++-------------- 1 file changed, 172 insertions(+), 336 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index 878a54e285..cfd8d4b556 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -11,202 +11,7 @@ enum keyboard_layers { MORSE, //Morse Code Layer }; -// Midi Chords - -enum midi_chord_modes { //ACTION_FUNCTION opt - major, - minor, - dom_seventh, - dim_seventh, -}; - -enum midi_chord_root { //ACTION_FUNCTION id - C, - Cs, - Db = Cs, - D, - Ds, - Eb = Ds, - E, - F, - Fs, - Gb = Fs, - G, - Gs, - Ab = Gs, - A, - As, - Bb = As, - B, -}; - -enum midi_chord_id { //ACTION_FUNCTION Progmem Id - - //Major Chords - - CMajor, - CsMajor, - DbMajor = CsMajor, - DMajor, - DsMajor, - EbMajor = DsMajor, - EMajor, - FMajor, - FsMajor, - GbMajor = FsMajor, - GMajor, - GsMajor, - AbMajor = GsMajor, - AMajor, - AsMajor, - BbMajor = AsMajor, - BMajor, - - //Minor Chords - - CMinor, - CsMinor, - DbMinor = CsMinor, - DMinor, - DsMinor, - EbMinor = DsMinor, - EMinor, - FMinor, - FsMinor, - GbMinor = FsMinor, - GMinor, - GsMinor, - AbMinor = GsMinor, - AMinor, - AsMinor, - BbMinor = AsMinor, - BMinor, - - //Dominant Seventh Chords - - CDom7, - CsDom7, - DbDom7 = CsDom7, - DDom7, - DsDom7, - EbDom7 = DsDom7, - EDom7, - FDom7, - FsDom7, - GbDom7 = FsDom7, - GDom7, - GsDom7, - AbDom7 = GsDom7, - ADom7, - AsDom7, - BbDom7 = AsDom7, - BDom7, - - //Diminished Seventh Chords - - CDim7, - CsDim7, - DbDim7 = CsDim7, - DDim7, - DsDim7, - EbDim7 = DsDim7, - EDim7, - FDim7, - FsDim7, - GbDim7 = FsDim7, - GDim7, - GsDim7, - AbDim7 = GsDim7, - ADim7, - AsDim7, - BbDim7 = AsDim7, - BDim7, -}; - -enum midi_chord_keycodes { //Midi Chocd Keycodes - - //Major Chord Keycodes - - MI_CH_C = F(CMajor), - MI_CH_Cs = F(CsMajor), - MI_CH_Db = MI_CH_Cs, - MI_CH_D = F(DMajor), - MI_CH_Ds = F(DsMajor), - MI_CH_Eb = MI_CH_Ds, - MI_CH_E = F(EMajor), - MI_CH_F = F(FMajor), - MI_CH_Fs = F(FsMajor), - MI_CH_Gb = MI_CH_Fs, - MI_CH_G = F(GMajor), - MI_CH_Gs = F(GsMajor), - MI_CH_Ab = MI_CH_Gs, - MI_CH_A = F(AMajor), - MI_CH_As = F(AsMajor), - MI_CH_Bb = MI_CH_As, - MI_CH_B = F(BMajor), - - //Minor Chord Keycodes - - MI_CH_Cm = F(CMinor), - MI_CH_Csm = F(CsMinor), - MI_CH_Dbm = MI_CH_Csm, - MI_CH_Dm = F(DMinor), - MI_CH_Dsm = F(DsMinor), - MI_CH_Ebm = MI_CH_Dsm, - MI_CH_Em = F(EMinor), - MI_CH_Fm = F(FMinor), - MI_CH_Fsm = F(FsMinor), - MI_CH_Gbm = MI_CH_Fsm, - MI_CH_Gm = F(GMinor), - MI_CH_Gsm = F(GsMinor), - MI_CH_Abm = MI_CH_Gsm, - MI_CH_Am = F(AMinor), - MI_CH_Asm = F(AsMinor), - MI_CH_Bbm = MI_CH_Asm, - MI_CH_Bm = F(BMinor), - - //Dominant Seventh Keycodes - - MI_CH_CDom7 = F(CDom7), - MI_CH_CsDom7 = F(CsDom7), - MI_CH_DbDom7 = MI_CH_CsDom7, - MI_CH_DDom7 = F(DDom7), - MI_CH_DsDom7 = F(DsDom7), - MI_CH_EbDom7 = MI_CH_DsDom7, - MI_CH_EDom7 = F(EDom7), - MI_CH_FDom7 = F(FDom7), - MI_CH_FsDom7 = F(FsDom7), - MI_CH_GbDom7 = MI_CH_FsDom7, - MI_CH_GDom7 = F(GDom7), - MI_CH_GsDom7 = F(GsDom7), - MI_CH_AbDom7 = MI_CH_GsDom7, - MI_CH_ADom7 = F(ADom7), - MI_CH_AsDom7 = F(AsDom7), - MI_CH_BbDom7 = MI_CH_AsDom7, - MI_CH_BDom7 = F(BDom7), - - //Diminished Seventh Keycodes - - MI_CH_CDim7 = F(CDim7), - MI_CH_CsDim7 = F(CsDim7), - MI_CH_DbDim7 = MI_CH_CsDim7, - MI_CH_DDim7 = F(DDim7), - MI_CH_DsDim7 = F(DsDim7), - MI_CH_EbDim7 = MI_CH_DsDim7, - MI_CH_EDim7 = F(EDim7), - MI_CH_FDim7 = F(FDim7), - MI_CH_FsDim7 = F(FsDim7), - MI_CH_GbDim7 = MI_CH_FsDim7, - MI_CH_GDim7 = F(GDim7), - MI_CH_GsDim7 = F(GsDim7), - MI_CH_AbDim7 = MI_CH_GsDim7, - MI_CH_ADim7 = F(ADim7), - MI_CH_AsDim7 = F(AsDim7), - MI_CH_BbDim7 = MI_CH_AsDim7, - MI_CH_BDim7 = F(BDim7), -}; - -//Morse Code Macro Keys +// Morse Code Macro Keys enum morse_macros { MC_0 = M(0), @@ -258,10 +63,94 @@ enum morse_macros { // Custom Keys enum custom_keys { + + // Miscellaneous Keycodes + + TFS = LCTL(LALT(KC_DEL)), // Three Finger Salute - Sends Ctl-Alt-Del MAGSYS = SAFE_RANGE, // Magic SysRq key - Sends Alt-PSCR - MC_LSFT, - MC_RSFT, - TFS = LCTL(LALT(KC_DEL)), // Three Finger Salute - Sends Ctl-Alt-Del + MC_LSFT, // Morse Code Left Shift + MC_RSFT, // Morse Code Right Shift + + // MIDI Chord Keycodes - Major + + MI_CH_C, + MI_CH_Cs, + MI_CH_Db = MI_CH_Cs, + MI_CH_D, + MI_CH_Ds, + MI_CH_Eb = MI_CH_Ds, + MI_CH_E, + MI_CH_F, + MI_CH_Fs, + MI_CH_Gb = MI_CH_Fs, + MI_CH_G , + MI_CH_Gs, + MI_CH_Ab = MI_CH_Gs, + MI_CH_A, + MI_CH_As, + MI_CH_Bb = MI_CH_As, + MI_CH_B, + + // MIDI Chord Keycodes Minor + + MI_CH_Cm, + MI_CH_Csm, + MI_CH_Dbm = MI_CH_Csm, + MI_CH_Dm, + MI_CH_Dsm, + MI_CH_Ebm = MI_CH_Dsm, + MI_CH_Em, + MI_CH_Fm, + MI_CH_Fsm, + MI_CH_Gbm = MI_CH_Fsm, + MI_CH_Gm, + MI_CH_Gsm, + MI_CH_Abm = MI_CH_Gsm, + MI_CH_Am, + MI_CH_Asm, + MI_CH_Bbm = MI_CH_Asm, + MI_CH_Bm, + + //MIDI Chord Keycodes Dominant Seventh + + MI_CH_CDom7, + MI_CH_CsDom7, + MI_CH_DbDom7 = MI_CH_CsDom7, + MI_CH_DDom7, + MI_CH_DsDom7, + MI_CH_EbDom7 = MI_CH_DsDom7, + MI_CH_EDom7, + MI_CH_FDom7, + MI_CH_FsDom7, + MI_CH_GbDom7 = MI_CH_FsDom7, + MI_CH_GDom7, + MI_CH_GsDom7, + MI_CH_AbDom7 = MI_CH_GsDom7, + MI_CH_ADom7, + MI_CH_AsDom7, + MI_CH_BbDom7 = MI_CH_AsDom7, + MI_CH_BDom7, + + // MIDI Chord Keycodes Diminished Seventh + + MI_CH_CDim7, + MI_CH_CsDim7, + MI_CH_DbDim7 = MI_CH_CsDim7, + MI_CH_DDim7, + MI_CH_DsDim7, + MI_CH_EbDim7 = MI_CH_DsDim7, + MI_CH_EDim7, + MI_CH_FDim7, + MI_CH_FsDim7, + MI_CH_GbDim7 = MI_CH_FsDim7, + MI_CH_GDim7, + MI_CH_GsDim7, + MI_CH_AbDim7 = MI_CH_GsDim7, + MI_CH_ADim7, + MI_CH_AsDim7, + MI_CH_BbDim7 = MI_CH_AsDim7, + MI_CH_BDim7, + }; //Keymaps @@ -378,7 +267,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [MIDI_CHORDS] = KEYMAP( TO(0), MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Gb, MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, TO(3), KC_NO, \ - MI_OCTU, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bbm, MI_CH_Gbm, MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, KC_NO, \ + MI_OCTU, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Gbm, MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, KC_NO, \ MI_OCTD, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_GbDom7, MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, KC_NO, MI_CH_FDom7, \ MI_CH_CDim7, KC_NO, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_GbDim7, MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, KC_NO, MI_CH_FDim7, KC_NO, \ KC_NO, KC_NO, KC_NO, MI_ALLOFF, KC_NO, KC_NO, KC_NO, KC_NO @@ -411,10 +300,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Morse Code Macros -int mc_shift_on = false; +int mc_shift_on = false; // Variable that defines whether MC_LSFT or MC_RSFT are pressed const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch(id) { + case 0: //Number 0-) if (record->event.pressed) { if (mc_shift_on == true) { @@ -425,6 +316,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 1: //Number 1-! if (record->event.pressed) { if (mc_shift_on == true) { @@ -435,6 +327,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 2: //Number 2-@ if (record->event.pressed) { if (mc_shift_on == true) { @@ -445,11 +338,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 3: // Number 3 if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //...-- } break; + case 4: //Number 4-$ if (record->event.pressed) { if (mc_shift_on == true) { @@ -460,16 +355,19 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 5: //Number 5 if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //..... } break; + case 6: //Number 6 if (record->event.pressed) { return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-.... } break; + case 7: //Number 7-& if (record->event.pressed) { if (mc_shift_on == true) { @@ -480,11 +378,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 8: //Number 8 if (record->event.pressed) { return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //---.. } break; + case 9: //Number 9-( if (record->event.pressed) { if (mc_shift_on == true) { @@ -495,126 +395,151 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 10: //Letter A if (record->event.pressed) { return MACRO(T(DOT), T(MINS), T(SPACE), END); //.- } break; + case 11: //Letter B if (record->event.pressed) { return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-... } break; + case 12: //Letter C if (record->event.pressed) { return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-. } break; + case 13: //Letter D if (record->event.pressed) { return MACRO(T(MINS), T(DOT), T(DOT), T(SPACE), END); //-.. } break; + case 14: //Letter E if (record->event.pressed) { return MACRO(T(DOT), T(SPACE), END); //. } break; + case 15: //Letter F if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //..-. } break; + case 16: //Letter G if (record->event.pressed) { return MACRO(T(MINS), T(MINS), T(DOT), T(SPACE), END); //--. } break; + case 17: //Letter H if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.... } break; + case 18: //Letter I if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(SPACE), END); //.. } break; + case 19: //Letter J if (record->event.pressed) { return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.--- } break; + case 20: //Letter K if (record->event.pressed) { return MACRO(T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.- } break; + case 21: //Letter L if (record->event.pressed) { return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(SPACE), END); //.-.. } break; + case 22: //Letter M if (record->event.pressed) { return MACRO(T(MINS), T(MINS), T(SPACE), END); //-- } break; + case 23: //Letter N if (record->event.pressed) { return MACRO(T(MINS), T(DOT), T(SPACE), END); //-. } break; + case 24: //Letter O if (record->event.pressed) { return MACRO(T(MINS), T(MINS), T(MINS), T(SPACE), END); //--- } break; + case 25: //Letter P if (record->event.pressed) { return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //.--. } break; + case 26: //Letter Q if (record->event.pressed) { return MACRO(T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //--.- } break; + case 27: //Letter R if (record->event.pressed) { return MACRO(T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-. } break; + case 28: //Letter S if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(DOT), T(SPACE), END); //... } break; + case 29: //Letter T if (record->event.pressed) { return MACRO(T(MINS), T(SPACE), END); //- } break; + case 30: //Letter U if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(MINS), T(SPACE), END); //..- } break; + case 31: //Letter V if (record->event.pressed) { return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...- } break; + case 32: //Letter W if (record->event.pressed) { return MACRO(T(DOT), T(MINS), T(MINS), T(SPACE), END); //.-- } break; + case 33: //Letter X if (record->event.pressed) { return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-..- } break; + case 34: //Letter Y if (record->event.pressed) { if (mc_shift_on == true) { @@ -622,21 +547,25 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-- } break; + case 35: //Letter Z if (record->event.pressed) { return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //--.. } break; + case 36: //Punctuation . if (record->event.pressed) { return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(SPACE), END); //.-.-.- } break; + case 37: //Punctuation , if (record->event.pressed) { return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //--..-- } break; + case 38: //Punctuation '-" if (record->event.pressed) { if (mc_shift_on == true) { @@ -647,6 +576,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 39: //Punctuation /-? if (record->event.pressed) { if (mc_shift_on == true) { @@ -657,6 +587,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 40: //Punctuation ;-: if (record->event.pressed) { if (mc_shift_on == true) { @@ -667,6 +598,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 41: //Punctuation =-+ if (record->event.pressed) { if (mc_shift_on == true) { @@ -677,6 +609,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 42: //Punctuation --_ if (record->event.pressed) { if (mc_shift_on == true) { @@ -687,6 +620,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; + case 43: //Morse Space if (record->event.pressed) { return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse @@ -699,7 +633,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // Custom Keys bool process_record_user (uint16_t keycode, keyrecord_t *record) { + + uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord + switch(keycode) { + + // Miscellaneous Keycodes + case MAGSYS: //Magic SysRq function - Toggles key on and off depending on state of LALT key if (record->event.pressed) { if (keyboard_report->mods & (MOD_BIT(KC_LALT))) { @@ -711,6 +651,7 @@ bool process_record_user (uint16_t keycode, keyrecord_t *record) { } } break; + case MC_LSFT ... MC_RSFT: if (record->event.pressed) { mc_shift_on = true; @@ -719,141 +660,36 @@ bool process_record_user (uint16_t keycode, keyrecord_t *record) { mc_shift_on = false; } break; + + // MIDI Chord Keycodes + + case MI_CH_C ... MI_CH_B: // Major Chords + root_note = keycode - MI_CH_C + MI_C; + process_midi(root_note, record); + process_midi(root_note + 4, record); // Major Third Note + process_midi(root_note + 7, record); // Fifth Note + break; + + case MI_CH_Cm ... MI_CH_Bm: // Minor Chord + root_note = keycode - MI_CH_Cm + MI_C; + process_midi(root_note, record); + process_midi(root_note + 3, record); // Minor Third Note + process_midi(root_note + 7, record); // Fifth Note + break; + + case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord + root_note = keycode - MI_CH_CDom7 + MI_C; + process_midi(root_note, record); + process_midi(root_note + 4, record); // Major Third Note + process_midi(root_note + 10, record); // Minor Seventh Note + break; + + case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord + root_note = keycode - MI_CH_CDim7 + MI_C; + process_midi(root_note, record); + process_midi(root_note + 3, record); // Minor Third Note + process_midi(root_note - 3, record); // Diminished 7th Note + break; } return true; } - -// Midi Chord Function - -const uint16_t PROGMEM fn_actions[] = { - - //Major Chords - - [CMajor] = ACTION_FUNCTION_OPT(C, major), - [CsMajor] = ACTION_FUNCTION_OPT(Cs, major), - [DMajor] = ACTION_FUNCTION_OPT(D, major), - [DsMajor] = ACTION_FUNCTION_OPT(Ds, major), - [EMajor] = ACTION_FUNCTION_OPT(E, major), - [FMajor] = ACTION_FUNCTION_OPT(F, major), - [FsMajor] = ACTION_FUNCTION_OPT(Fs, major), - [GMajor] = ACTION_FUNCTION_OPT(G, major), - [GsMajor] = ACTION_FUNCTION_OPT(Gs, major), - [AMajor] = ACTION_FUNCTION_OPT(A, major), - [AsMajor] = ACTION_FUNCTION_OPT(As, major), - [BMajor] = ACTION_FUNCTION_OPT(B, major), - - //Minor Chords - - [CMinor] = ACTION_FUNCTION_OPT(C, minor), - [CsMinor] = ACTION_FUNCTION_OPT(Cs, minor), - [DMinor] = ACTION_FUNCTION_OPT(D, minor), - [DsMinor] = ACTION_FUNCTION_OPT(Ds, minor), - [EMinor] = ACTION_FUNCTION_OPT(E, minor), - [FMinor] = ACTION_FUNCTION_OPT(F, minor), - [FsMinor] = ACTION_FUNCTION_OPT(Fs, minor), - [GMinor] = ACTION_FUNCTION_OPT(G, minor), - [GsMinor] = ACTION_FUNCTION_OPT(Gs, minor), - [AMinor] = ACTION_FUNCTION_OPT(A, minor), - [AsMinor] = ACTION_FUNCTION_OPT(As, minor), - [BMinor] = ACTION_FUNCTION_OPT(B, minor), - - //Dominant 7th - - [CDom7] = ACTION_FUNCTION_OPT(C, dom_seventh), - [CsDom7] = ACTION_FUNCTION_OPT(Cs, dom_seventh), - [DDom7] = ACTION_FUNCTION_OPT(D, dom_seventh), - [DsDom7] = ACTION_FUNCTION_OPT(Ds, dom_seventh), - [EDom7] = ACTION_FUNCTION_OPT(E, dom_seventh), - [FDom7] = ACTION_FUNCTION_OPT(F, dom_seventh), - [FsDom7] = ACTION_FUNCTION_OPT(Fs, dom_seventh), - [GDom7] = ACTION_FUNCTION_OPT(G, dom_seventh), - [GsDom7] = ACTION_FUNCTION_OPT(Gs, dom_seventh), - [ADom7] = ACTION_FUNCTION_OPT(A, dom_seventh), - [AsDom7] = ACTION_FUNCTION_OPT(As, dom_seventh), - [BDom7] = ACTION_FUNCTION_OPT(B, dom_seventh), - - //Diminished 7th - - [CDim7] = ACTION_FUNCTION_OPT(C, dim_seventh), - [CsDim7] = ACTION_FUNCTION_OPT(Cs, dim_seventh), - [DDim7] = ACTION_FUNCTION_OPT(D, dim_seventh), - [DsDim7] = ACTION_FUNCTION_OPT(Ds, dim_seventh), - [EDim7] = ACTION_FUNCTION_OPT(E, dim_seventh), - [FDim7] = ACTION_FUNCTION_OPT(F, dim_seventh), - [FsDim7] = ACTION_FUNCTION_OPT(Fs, dim_seventh), - [GDim7] = ACTION_FUNCTION_OPT(G, dim_seventh), - [GsDim7] = ACTION_FUNCTION_OPT(Gs, dim_seventh), - [ADim7] = ACTION_FUNCTION_OPT(A, dim_seventh), - [AsDim7] = ACTION_FUNCTION_OPT(As, dim_seventh), - [BDim7] = ACTION_FUNCTION_OPT(B, dim_seventh), -}; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - uint16_t root_note = MIDI_INVALID_NOTE; - switch (id) { - case C: //Root note C - root_note = MI_C; - break; - case Cs: //Root note C#/Db - root_note = MI_Cs; - break; - case D: // Root note D - root_note = MI_D; - break; - case Ds: // Root note D#/Eb - root_note = MI_Ds; - break; - case E: // Root note E - root_note = MI_E; - break; - case F: // Root note F - root_note = MI_F; - break; - case Fs: // Root note F#/Gb - root_note = MI_Fs; - break; - case G: // Root note G - root_note = MI_G; - break; - case Gs: // Root note G#/Ab - root_note = MI_Gs; - break; - case A: // Root note A - root_note = MI_A; - break; - case As: // Root note A#/Bb - root_note = MI_As; - break; - case B: // Root note B - root_note = MI_B; - break; - } - uint16_t major_third = root_note + 4; - uint16_t minor_third = root_note + 3; - //uint16_t flat_fifth = root_note + 6; - uint16_t fifth = root_note + 7; - uint16_t minor_seventh = root_note + 10; - uint16_t diminished_seventh = root_note -3; - switch (opt) { - case major: //Major chord - process_midi(root_note, record); - process_midi(major_third, record); - process_midi(fifth, record); - break; - case minor: //Minor chord - process_midi(root_note, record); - process_midi(minor_third, record); - process_midi(fifth, record); - break; - case dom_seventh: //Dominant Seventh chord - process_midi(root_note, record); - process_midi(major_third, record); - process_midi(minor_seventh, record); - break; - case dim_seventh: //Diminished Seventh Chord - process_midi(root_note, record); - process_midi(minor_third, record); - process_midi(diminished_seventh, record); - break; - } -} From 78a4cfd453ddd66d2dc3f8c06827e89ec015cdc0 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 12 Jun 2017 20:13:17 -0400 Subject: [PATCH 22/24] Modifications to readme.md and deletion of keyboard layout images --- .../bluebear/120-button_Stradella_chart.svg | 5190 ----------------- .../bluebear/S60X-Bluebear-ARROWFN-Layer.png | Bin 18499 -> 0 bytes .../bluebear/S60X-Bluebear-BASE-Layer.png | Bin 28068 -> 0 bytes .../S60X-Bluebear-MIDI_BASE-Layer.png | Bin 22521 -> 0 bytes .../S60X-Bluebear-MIDI_CHORD-Layer.png | Bin 23687 -> 0 bytes .../bluebear/S60X-Bluebear-MORSE-Layer.png | Bin 14330 -> 0 bytes .../bluebear/S60X-Bluebear-MOUSE-Layer.png | Bin 18972 -> 0 bytes keyboards/s60_x/keymaps/bluebear/readme.md | 40 +- 8 files changed, 16 insertions(+), 5214 deletions(-) delete mode 100644 keyboards/s60_x/keymaps/bluebear/120-button_Stradella_chart.svg delete mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-ARROWFN-Layer.png delete mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-BASE-Layer.png delete mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI_BASE-Layer.png delete mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI_CHORD-Layer.png delete mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MORSE-Layer.png delete mode 100644 keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MOUSE-Layer.png diff --git a/keyboards/s60_x/keymaps/bluebear/120-button_Stradella_chart.svg b/keyboards/s60_x/keymaps/bluebear/120-button_Stradella_chart.svg deleted file mode 100644 index bd878faa1f..0000000000 --- a/keyboards/s60_x/keymaps/bluebear/120-button_Stradella_chart.svg +++ /dev/null @@ -1,5190 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-ARROWFN-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-ARROWFN-Layer.png deleted file mode 100644 index 1f659d184d9816a81983cf34436995d000dab4fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18499 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 diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-BASE-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-BASE-Layer.png deleted file mode 100644 index e77287a0f145f18a6ce5425cfbfc60d470c0092b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28068 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 diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI_BASE-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MIDI_BASE-Layer.png deleted file mode 100644 index 58ad1605f0324229ff9ba3c84ac5350bb61df90b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22521 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 diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MORSE-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MORSE-Layer.png deleted file mode 100644 index 0e72d103263d0b2aa83a06682ca5e11dec96bc78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14330 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 Q^B5%M>FVdQ&MBb@0BD~e00000 diff --git a/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MOUSE-Layer.png b/keyboards/s60_x/keymaps/bluebear/S60X-Bluebear-MOUSE-Layer.png deleted file mode 100644 index f37249b8114e3520ef699850116c47dac65e3e52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18972 zcmeAS@N?(olHy`uVBq!ia0y~yV76mmU{vB@V_;yga9|f?U{GN2ba4!+nDcgTeMoTl zqHpKxdo$L0v2uDkEOF)jy8W7zRqpbyTfgSU7TjJL8m%HAy5;K3ZTZ=A{pJ>4@S9uK zW;S0Gt#;WH=cvp%e~b3=8{h=}?1rKP32SFc{Zd)2B{4jhUt0!|!?MnSQ$cSFO& zw_CrtR?o}JyYcGPtFfl0rWu);jd%0Z!D?CrG&3_Z9esUySFK*XTS`hQDfZ~{UAuOz zUb)iqtE>uCO?~0dPpKi{;pJcF-TStE)-0*3$+Jq#{gx>WQybpEPUT35^4po-nPSFO_8@B_+gk`j}Ls=jdekuz8y2WM484TPoW zcz#2de_fqjP*9M7n3$TXrlzKbhQ@;FDi^%zBQmUM&5$?^1VM)_e86FI@Et7fk>4`xU?bezEy~{?tg6MBS(_T>gqRZOM)L zLUkT1T`n%J3G?Uk?~UW1eRkO|mp+l%XW90~`RjWwm>z@VHdl>`pL>5u^t#F1*>WIx z;)@%L94~8cU-(aTV@B0evzW@e#Xl`~WHR=+DfhT3>xi9hV9wea6&MntA`-S*bm`Ki za^G(zZM@*kAYOIRJD0!eVt3q^MdEv%j-GyhR9#2s%;VLzve9|YuV+tQ@aJ|+!vCa& z0snIKqUsGf!?)dew(-xGdFn4#ewDMW5=l)>EwGv!AmXYq$4~v#sZ(q@ufGJ{Z;ksB zbh{aB<_p*L0UxENK6<>;CZ_JEnWDG<{ZE&_bbWvHI8&gzySsJHpM8oOqSnSW`|1}i z5Z~+45cfrhvFf5X%L~z%I7V%|uljeFRqd4Q`8B;p-_F(5b(R081QAiupE5ZxS6^uZ zYhmpd@8<93-^RnA>-vjdg(e1k3EKMO%icR54%Y1X`X=Oz{|tkyqt7l;weC71`f1jpTd^{??^!qHcTq(Q%e~L@W%O7t(Z|Cgf)b!=^)M?Y& z%0?_*%cAK9N0-0*TY2MW zj?BC`5!N^HJ=)dp4s&}aPgt;5_T$Cv$!D7{7SwFHQ2M+7O!+|pOTJqj8-E;_V(_9C zq`cRynKdphQ0ncY;Gm$U_4|IUx}Upi*RFyW7ZksI`EuZ4!GZ+~7>b{r5!AYI_+!u% zY1M}>m(M?Tu$jHJMoFsg`cm)d0)m2#uH9maN=i)sKk5H(`t_^o?HPJ8r6V(G!kIlP5PH%3e`l zZB)toOlS4DkLxZXPCas98ddfVeK`Du@Tmp^~>(XyQHrCnpy(dS{`-rO`^V*l#fx3cTCeX`bS zAsgCXf1Q2*4;v_a!t-zL@tb4OsOmlK!I4hkjI6AtlPQN*g|1%mJxGKVlyEOzoR(!`qu308!|7e?fG)ad);d_-&rlEr|UZhip1=zku1MgnI2HV`!wG_O+Wv3 z%GXJMD-KVd4)ye*J&!K$Ef>5OZOq%f+@I;2ep}wB8+8Z!cNVXC{Vme|TGG)+8X|kA zwfsN1zux0JXUIp%9H%{Zmn~k*Y+e5D$fKj(tz6#<_IP=DZAdvOR8n5f|I;w#!>*~j zc3HW&y0W%jf4lvD-}U%<+0xR|iqB`wo0ZyYD_^hO{->;KHbg z^m4CW%#MaFTTJd$KA-F1<8x&9`+eOrW=O0AnVw)GwK4a$SryQP1RbP8X*af8Ek zXJE~rpLQ&!duwLq-`vAiJngD?;1k<>AD*ZlhNtrFe|)6u*>3EYxG0!hsF*)5JNo(Y z?+c&pt<2l5f8S0xTmIrB_3!SyFYOkIf$GnkTU$<+{=Br*dxlBoq=18Reb;B_?|b>N zJ}<{?_LVqMQPI5r&e!hT(K%~*srjy&q9S8yX{qDX!*T0kcem|+w~PCJ?f1F&=Un+V z%Oq1sFLoD;>(0Of%1TO0zGvm+xP*sKfBk8qvipa{@_#+J*3X+Kx98(A>4;4!ocsR& z`(1bY{m$od*FWFCxY&KEWoy2He*Cj&vGohBPCrxq{IShkU$W2KMMY$9id=eN&PI#Bpp0bU_0_I+`MMkHB|~n%e%LPWmY1h@ z>-O!5vuAh9|Nn9PQuWNUX=`G4i}AHHo0^&$NcH~sJpaE=Yj|d+=DWS$-GA_Td&7)bD?@(zgX!JBuWd8s_SLRY^XPUBd^=?^LUhm z((%MoOE#XU(2xrMcIWx7yX?zYT-pof3?0NT2@oxIhKPNpd+|!Hs7%0Me^ytwU z=J|4q7A*p$xc&e5C*NY9v(KiDC(hQ^_Q!)}euLUyB`->>W}Hp4kl_OrNsht6!qfEQ z`%X?)e|+5j-^TcO*+A>|moHz|{Vg#N+_UfRw`iL$7o0mfIu0D>x9`c{|2M2^{jpr%1}O*^zn=5iCVS3qwNQmiGvziunPT&uHF5;#^Uxn?N2@Sp1t?Xh5q!9 zi5p(JBGvf%mfh#?$IWW=e0;n@*H*`l$87J5rDk6iP3O4K9jD}=U)9-Aa`gFT-^=W} zHV|1=CKTC_qtBm2Z!SD;aen<57eAikT}K0N>@ZwawieJAhzpC5L6e$3#r_wSaS^8K36;r~zWpMNB* zba2`93Yb&C`WL=X4f&{9rF$~@rR9gDM-AV9CZ`=*u>7#^OcSx?^~ST;|7Z!=@KRL{ z*_93&Rh*$UKKz-#r%qcVpS|~9`i4iv&sz#Y{#2>?mvV1Rxa@870@PxHHo_VMz6h=Q z;o{!&Hate}f8xIl-RF;dOfIOoy|<>{pM!07+#^T*s!p(TK-NGi+2rqs>W-=gn*U%I z=LxAf)_?iI>-p-R5A!;i-1s8I4{p{$txyoz+oEYF{^{9QZTo%TrlxDXNM z5Rue$qc(GH}*>et9`BS_kS$!{!MQF|0mToPDa?2YT0GW^}Gv@ zyJojYw(R4@43il)iZbeDXOcd0;_$!7zE?l1YyN$@{PM7#om4LysA2Ga`|}Mr1Nh(f z^WPsIT*A@+^yz=wmG0l~x#n$uf2&%)ZkJE{^=Z;1DsqT}-nG5{?7&&VC{a>(RiGzZp?7zj6{~tTz z=pX;O6(u*ka)zX2_TS=Sx+>oj;#mTG$kvS2^O^d-z5H?;^Ff$NP4xKMJ?+OvcD!KfC=GBw&qR zF?lihDo!>~wg9Cga5`WA;A7H9P-;j3bK#bA$*pe?oqt;Ye%t@M+a10Z84H}+f7bP~ z_CE3Xj~*q(?5zs@>M6&u{4(e2tFMYtGx_?2Ph1fncW!!Wwq>6s=c)Z?L-#(Z(6U{- ze@2UTbdA29*=$}&UuKp6w&f@FwY8hirhT@&0qPdLfE5O9ek9Ch3y-_L;N{fY z0skjOnCvZ*Ubp96<$QK+yQx#BYUt{=Ud?h144fDcu{LbVv}t@h?qlf?abVY$l*E+k2a{)2Cxet(o~B2`#$nd$23uKgBBea7xr zlb`A9h;i>#X^Ja?ma=^P<1E za?DlV{I%RZH>&nJ07~ zWoka?fZ5-z{JHnXjkjeYA|eMeOm>|Up2EBM;){)vm%M$Dg9z+Wi4&l1ti8Rwrl#g9 z?$ZulUR}pMC)V=3MCsT&>OXod@oVdkoO^pDtM!;2Re7i(y1 zH(!3)vPeU*`|?Yd$jF-wxqH9Qak+VH0!jy0e6LgQ!k&jKMCASVui3G~;)(i__eUbu zhOIw1t&ry>w6ulxsuUWO>7=M-e6S=~uN%-8(knsQUrW ziItcp2yFV1VItMi-mYw8BO|QlbHJJ3wnf>!k0;V=@x>K(8$h+Es@fMWTm4?Q=I8V4 z_uWrkzI^%WZE+X6;|@MjRr)gNwD%OlkgY$y{CiVi@!{w5`OeEPFWj`L$RkL{E(uc5 zIGy)id{IG9kI(+khvwJ2)~(a?nQImLirEhoX8M8)r^m!C>RBjoboq4qKM(mMb{0LI zuq2}9NDDY%TIWr7TYT`;RPB#f!{c|_zB@Hld#T-nCE|NsJ_rd`oqVc#N`fo2X4R@y zpvI5JsowBLv%EVUEiEiZjvrUHwUu4Fc5UAG`}=CGORQvj+?3DFv$cMZ{5@{l?Y9xz z^JID0m?ur1yfOd2ot+?f*d$z_BGW{w=GV*R2D8tudtFpi^x>rX{2lY2&z?Oy(P*ZC zv~>559Tq8RX^VF5y!qBJulCHn`SyQ4I7{%bWo(Vw^Z(!PfGG#BYgS#udf|^S#s!QNz&h6U-Q^k+~c!QR#yIa*8Kj1H#av|yxDksfkyNC z;4h29H&k?T?0xb{D3zyG%PurD)WgT8Ws$~(mn9c6O!AH#IkMyK|2sR214LNU&(Ayh zg)X`t|GAku{)V>Y_Hso~rq$FJHP8bN}Annx946bEDR7yDzoi z`s?4eZOc#3oH?`N+068U7Z(&`_SeaF8U3(w)vsdhp5Af6TTegmSip)$m%rQEUA%a4 zUD9F=E-Ndmf`^A#xBvd0_y6DT_Y1FP+1hP8{IDRlue0;u)6>&qZ%au_quBia%X0g~ z!)?43U$2I5Og}FNvj18xZ$?Ij#HCvoPuu_d$Uoz3n$6!Ym$Af+hI|-d26cZbrc9Z#VEJ@3p)3z@v{|Ig;vG4GA*XP2vBcz%9ftq^mp!Yk#xS= z)h|`^^Xc?F{r`2}@0QOn%bis)S?QC+CCF$bD5b3Ag`_s;RX=iWZem@za%DzFhC^&aYtAHS<)V7`0OMajqQS-tzqNYU!;lS6|nD>4AR<>P#+c&rSzkhvBnDSXP>T~J8Kb1X_ z#%yojf`Wf_`1)hl)pZ2%?Dq<}Q=@bQuBmTlXd7GK=4Z%@eL ziwBZ6CfwUo+0oZ`Z1?+p+^#!6-ffdM&vS8dVgmIK=gsT8cI}$u_DU)9XA|NUa&-4M zuw;Xpa)JxOUsPtA%&MDXQFti#_uB2>zimF5a%flS>jx!PvGGQkX0z|+ZO^{0_vOo% z2d~%fKPFp#=itvrHHx;jviWD*cT+$m7R=KG!E8{6~c*Mw=Oot^b`n}7cP zzh)w?j;^k)+4GBviV7YaV6>R)w`JS5q~G7(dieUvmdsvWn9TQ5v}?l;4v!6>?wk-~ zRqMR)`^@{^z02G4`JAeDvq9 z7mNEROqqVlWlgWY9sr9OT76eBOaMuY2Ezx?~E_ea;o?*1ifQ(j)a z`|q5I6C2;W$tfu-+vPXcXr_-`{ru&p=d8al2Q=36qQvS>;c?l#_j`9fpI2>=cgG?m zJe+@*zuIKZw9S&Tva%UDIY&07o}MswuI&r6XA|O5J{YEa6f6izk%KgiM62Rz_lvtN zzL@aq%S(&0H#4%U-Qqn+zr=z#` z>yNab(e?JvyFV}0;0jw4@v!XHyhR!}b`&ZL2@CIi=lmWtbefWydN9Et;nWn(h|Oue zucugG4F+gmn6c_2YKB=fonyt*t9S4Ao;!DL!RJRcC!dP0`RuCyF%cMF@EO(sLl5frd%w%|xGg^Jzje~hY>S*58yL02)(Bi%y=oPgprD{d z-5-lNe(KwDZ@00_RWy7SO^G{b75_y@9<`*?($qW{9$$O((c+GJg;>;a>B4>9J}<2#xF&8< zk79R!!(^q;pvneRNPkWG7&u|}?C$XR+R%vgmo5d}seZpVBRkuOY(292qG&$8Y(o=0)FHrc9lBFm3ZsnVgBxWPoIJ z@4}wM16}^9sj6Py-ihFOK9Nn(-lv7zy(V37l?oonf()uG3SVJ3#gHfCqhhmh#D>&X zaIXn5!Kic()cQAQGQEM;I~D(E)}~|EB)I0_GL+d!*1a9uL3y_aRG%O^prG!e>z>|+ zD@5iu+W9u}Q;@93EPo6(_UVnY_ z#9tj})0*SfyE{5M2J|YTb~9hNLON1qyJcsa=eHe9NYIv5663>$?8cg!nt#w9Sdv)`MCuJO*;Pe>C>k_ ze!X5FTK>Vs)06Ym>C?9F%7cQ0%HG^?)Ne!@s_pJLp77ab%J<(to^t#2%h`5q+GJ!g z*H5F%spiPbl0|FQGs& zv(0jwE@mv5?r;G*3d^wfh3k>z4V86ow_g7fUt=RXLtI>Z^Oqh0@PLn1!pECiGK2TO z?w7T03tsNGa^L%V7NxI5`sD5H9taEWJ<MsL%ld_+dfmP@iZF`FSFPj)wVnTcx|Cs3@$cvJ-?nvCRlBra z^MP9bANO|L;E1fr%E|)u7ya#ivhcMtKR-YJxUj!X-|Uzk?Kx#YCy*cqpvJM#1M zbM`wgm(Q!>lImsS7Sm~1RH0|LbLY-g{CNvNgLJn*5%l0Z^JahhzanXyZT>D&z{ZeFMOT+?cbk=?ed2b3>;Qpef0PH{q{u~ z1r{>kI$B6bKwiH8%a@WZ+qQwa0+Wt(cl1s;ntrH-^TnGtUv@oi-upa@@CQ=j9fer+Zx84g842C5 z`OJH6o^AJWxoV!SqQ?i`qj$2sK;v&h`buU_V)LIoNtt6^zV80Hf4}$t-~HNqQAEwJ z!;hTxw=NXl>vCW|ds^2b1zlZU$l8jCeKk98o2?D&Zfj$^Ui<3x>xDSFwTm2c#9}nCsVG`}^C$yzP%~=kGr{ zN!5Ep(NnMO8_LVezjNKrc(gq(3p}d4pa0CP*|P=Z<@=W`QMvx#?t9+p6DJ(X z%FL{+tz(xzn&G2%JsC8dp{lC-;^oVO>tc7`xwh=c5toqA(1%Alg*&>snik!$*m^w2 zZ1Lj7%)Pz65!-SkH*MYwny2x6pNauYYvWUH<6Y@_U^-c7R$b2fwnJ zxCVZBGTC2AQSsng{w4YkA3j7)nD3d5T?0S-c-;T^qPzUt?Q2&eH5K1}fA)IM9vc-k zwWNQ4ex5jgzP$R(_xtto7cXAC@cQeGz18L-u8!W`+?zISN-&TxNIfO8CUP?yUpr`R z%XAe`7SXjkQjS?3Bz)vlB34vj+mD#NRiagU<&4wMx%m6{-`*DR=RwoL1F!@J9=xls zSR1=rOxi4`Al9z@os5YT@4i2uyswwa*Zoiw(~V+rm7M!{akTv9`R_k+^7Fe_R9GBC zbYNfoRC=VG^YQ2J`~UlHZcbNLQ)651H@E2aweS4}FE1@!#lJ`co}3nl?{zsKANTv) z+rv$)+%eP3-{0%y6jpn%-2U&%*SprN(E&}728jIZ@_&Ec*Vnh=_uK6o3mzU)d>ec} z*}h(uoh_U17imQ7tuoz~ceiV%ar&-2rfa>bg+Jw5YyVklbK6pESKd)I z@6DAQv)y;|uCI#)W!UTS^>3wSC!AN5{B?h6*3tC0x3>QMC-H0EyJL?YOQN~*_2Paz zr>H1U$MM7F`G0x37J*i-9GhjD{o!@||66Yl^P5QZzUH>9*4OT0n(KG{{SGZPwX_Sl zwepAW$JNSj-@RM<{hrT!K|w)mfA%(u%0o-iuV24@z3}>LbD!^q=M#ATz7LxE=Kbu$m?%+;=Sd0$WVx9eX3j?Uwn^?@K=3w{zR`r%x3P4Fx|xKkr^w_pjl2-ClchQ&UA{WoEW!#*G^{%GuvJ za65t(R9^ho3;k=6{m2^LxB+#E7l`lesMzp>MGztSw0`}vWop~a``Ek1pL^?px`|51 zY&QS!VC&}J3tb5K^M3Z>Hr|MhNv;+w#C7ebQqq~tSx1+@ubhuEVbLX@2l6y% zFfgk!c5jvGi#<*+9d5;cKK}F3XEs6p#BTrh=lR;1=hy$UEU}W+($;QQIr<1x@q@Kg zJbn7~VA^KZx#1eJ9_ypG^X2B|234Olh<9~$1ucY7QdTys{+1&mF5Z9Y-zkH5m!3+o zML)iLYPbKxs2#peW|BxZXu%?AoRjs|>%HIaHM=c7xO{$H*ZY0H*U6ijng&&AcFC|` z+IQjJy?2Fu`+mQ(zEgbO_Q%EkI+opc_2y33`CR(vQVeev^iiEnOfl-uvId-_uE z>0ZyTcE4c1w6EyH1IP8nOD|@8I3}I%@m%$EO=)TA!wURZ@K0fXoDDvdVlLzSSs#jnCEo6Yl*491$K26`RU}H09`7X~V zPdhD(pMhFZpn0DyahuMBS6A;|o$>82pS-DnZoA5d&pII=SFT!BR2w+mZ~5!*_Qr;W zhH>xZxi-KWLjjjxe?D)2y#C+wdbZx{KR-WDG@Ctf&YT|5d`Dztq($woEnnj9fkp+~ zVyZ0Soxi_&@#4U_xz-yiK0XSZ=|Ay#cZcbDC(-%)-hb?b76rGV^9$?0^RvP$uN9#6 zkHR5w)!*I}{#AdRU;q2|f{#*fe?G3^eG?iQ+Uh&oY^PrQt`g44YQ9oae~Q%Z>#+E& z$wN=%7TFVrO%I2W514ZEX9k1qb^ zdwpROWcXs`4;kw+p7e8b0&DN@EqrxFQ^vmT&T@4nQ0@TDJb^N#(xZpD^O(bGa?GSp zojUcP#41!?K(f$ku7Qamm=#NNnA@b(M9+qHWv6+WF<(TwPoJ{arw2 zfO5yh?zn~TTx(`OZxEe->Xg@%Y10m&^ip3oBwGi3T)AeAOJ${{mzP%vQvY=Oc7%IC zYmvVz?K@lS(9JJtyGK+$Qu0lwM;OWkvP)V-O%sQheB}bPl578Igu6SXPU_v_D^`Z|AmH zP^{avbZ5Y!q>T!emXaq=o?P|5+uqa5>rkJp^$S%_)G>r5|82xYM1E|C4u*UVozIZC z`R0P_uLA=D8c;j@%@;FT?&d9@&T;{tuZi3|Vdl)vLx-HMe$TfM5ff7~HWmgA^`D%q{!-Nf)k!HID!)~K+<5z~ zhK5GN#SE8-2nk8m9=GKE)8DLGy?Wx@xx9Ph*8lp)%f2_R|IM46knnKO!g$Dt3TU0Z zQpDa97oOcj8dwqjKVj0OM;lYtMs4L{Yj*tlSDKHlnbFeHQf~g27pigy>sxqw8;zbK zkE!enkzj!@z^}GhoA>_S-c|1(7u?ugzW)03oiA0zkahF=&-|4A@nO3(i~hksj$E3W znj3C6zwYfts3{U$6X#<4EA77GQtaQ$N z7N3E=1j;+wc605|mQS3T)v(0i}mH*wCe7xY*70s*P?@BNCn|tWv4kh698Jz z0`5OTh9xJR?q1Qp;ix*=y#H1GrKzv4tzE^x=M6T)xBXZXvr{O(_UqKwyA~}{S`)K# z()w#0pjlN=@goG;OQ1SkJdi)J`~33xbzGZozS*UxuFgKc=2K_%$Dfb7^$pU`$@t8( zk>up${BgbhZ@5Mm)9$-{pjq(*15k$i{q1e>?s!Od=iAM6(0pR`yPfRp{Bj|+PATwS zFp4jZKP*Uib!Fv?ckhmUeSN*~dTjZ^wQJ9=J#c2ey*#LS3tB;2|L^ns83u_=B2V2s zL6eK?Vs86c_$(9#ZYVrtQ~ z!yJEb4ZLvqa`WZo{-7oHhmZA2$KL)@Wh*5m6|;Ty`t{!h z^!)fyp`xm~Gw$Ha=ma(Yc|Dhx`!8O;oW1({yH>ZwAm1mN&E8n|x5{F!UrAZnqgL^_ z4-qxR1#fN``ph!n%+1YR<=@4FEs5;pHAx+K0L&F{ptICzd?I8f@?Q4bD~zH-g^3r z=f43)dlUl*p%A+y1J&#`98l(fCy`8Y3YrP$?VV0&tLzG z*t%DpWl8mMQYoVwMUnKH+;Y6v)@&9hcI|M3R3j!+|yCT5m{6B zY4ZFB6W!$;9UUF_>x;yKhA;pBzQ0>x%WD z*^I{MgD20NIbwX?rrEij@8Penuh+fK*EO6wckYkB@9X=Ic8fa)io7VXirH0ia_io8 z>-un7rlh3w;qCVOyY%As)ksd9IB^|lRSjrB>(b@Rpw&y;fB!>_1isyMF1YjMn>R<6 zcuroR!L?}7qB~vw&d$u;=M}J|M}bX0)|b)%9NCpm{y0cFWY_p_xt_* zFJ5H4_*(Vm-rn1#e;riS^z`_;7J=H;pqx@tV)Aa^@4P2ZpKioyOMr)`CuruiH0 zqsOvX^6Vw>P*X@q2xwVaY;5deGXovFd+_0JMD?i{3$9ZZTz~!X`u=~RUk`GpVoMI; zHK5ftA3hYcw6{AizPO__WFG?f%@o-@k8L`~Lk!_?oj7cAiSu%CKFJihq7ez5cYV4YbfsqpNAg42kWz zy}iBbeplbV_WiqyyZhriJB!!7wuY=9!|f0w#6qluZ74+!t@& z9O2gA^I+Hh?YXt}{a6-+t;XTLRgW%Txzf_p!z01NcI4QxU9~$Lu`RojEs4H=|MI0v zO>5TZNbs=v%rs)nzP6_E@WX)GNiNvRwF^g&i-X37w_m;l8Zz*iZI*i>H>CnwMqczo zL|pvwtE;P(g>G(2wCUYa%u>MMg$8=PB=d3~oc#YS|s{lRZ4sI6dTk zdHx)$Qm*6u^50)_PJ``i*a}*d>0-MlRV(4>@wCkg*R0|3TV8xa>FwLMCr+GjNJ&vi zN=n*L^)>6t_3Qk*dVjQm+qpB3Z+o-$M@UG>1C%*Hi<%z>T3T8)RZUAFty@q#Q|Xa$ z#4@I^8ZB+@z^EuL@TyuRB?HK$3-h_h4o8=7+9dS!=~E3&&A__{g;iBmHT3nr@3@cD zR$U~%x8n!Tw3Q8F@{ocR8evp;E-&j;akmCL|tw zq|A@rH;AY?u>q|Y$PuQ$NN#ah4cjjh10k7~)>cJh<%rv(DWU7CzJr zuG6KG=c>Q(g{rwLYTz@@r?%dv2ud=E< z8Q?u(aYg6k1wKE)ll#i5s;;FE9VUbNehQ#U2Hf}KR)O^W{vJA(V<6ok@JKr*_|C&w zhjI+051((l?_YWuy!%@5>!y^%L`5Aj?k`n)j|U(6_U`WLUv_Mh_EvxYR$V#qW`Y@q zVv0q9?@rF^B5BPxCF;!nMAiIw$ae6zBE#X-+uL$IJUtW5X7D<3NE*fj=N&R_y_sNE zbGq$*cmMYO&D(C~Y=~N`p{2#ewI)p4%iG&_*SESi#c1>5>d;j8V)m3NEl-}Lq$#^> zcH~gpcgXaqT1@Z^-n7H^H$VJ79@*Yn`H$)HV)y<<;EW>NwTOk)Z@F-4YAW-;ey4~T z&-H)l=<6SUc(^?}Gy+R1%DTwI(z^ujN;b6H#YB)0j^Hv78!-;IsQ7NxJIy!ve? z1~ep2!_>V@B_Vb8Lz&Ke(=olQVTx*c02z#Grvtk{=T1XU;io{5#OUY|rM}d@!d+M_R{@C;GslV>vBlW*!MI zL6b*~haVnj;S>(JukTdTnB8R!j*H}!n+YEiZ!n3Or73UO?8xMO|Iy_eH#*+l-kyAM zk!yem>)Eqs4QBdu^!B>O#K;&K8(+M0hsQPW!-Ho2M;8`42Z(_8@qMYXt*WZJaQQOx z-njnB>i(b&gO88(dU$v^)YRBqx_tTKty{0Y?f(DgxxKQPS=iS?g`&fzM`hP(o?+W; zxG87D4}%;=Zt2Z}w{9vlx-P!B!?65aOh{OmQ=rHUAGI~n+xh&K3;Qh>etms?`^}uT zMH-+rnxO5`8eL6CyTu>B+x`C7%HZV%pPqQ$sr`QU#mkqDetvv>G8PQWFLz$M7M62= zpX|z&EA#eOUtZ=58vlIt*x^YVt{^zQcKNQauB)#uTDb6F>CS!oOip^|iGX@ArP6FnxOa+1cjcCh4xaqgrZe$KIC5@2iRYYN+rDryo-{ zJi5GnhKY%Z!|JO}fg+&gn(KDIJM`}E?unBpGq1kdwPlORl4Z*dWo>l|6oFOJzspNX zK=VA#zwWmDV8WT0@}DXzD>L7`dGp1aHzjjlr5VkPxgB5ekX1!R<-ufsyMt4;!xvnB zX^?x%q@=XeF)(kAR=U~jix)389y{iy6TOY+=FOV~ZCH#vfn55#fY~*$;Kc>S3=^p< zSFbt-is(dcVmWX3dkxm1*kq6WvjyTG%zDHJDT5--B5EYIHMI8L4kI2%##96HLW<(2e>4|o_1RV;vbHB3sUF|r`TfD1`Ye~ zsQS9_%I5)>~@vnXTprr($vBcUcr6e;aWoZ2jtv=o6^)`sg z&pz7*SpjyH{m6VrZP3ua*51~&ixx3~2K#e!*S_NWw*+PA|BTy*^k#5EJmm|nH`?kq z32t~492wbp=~5760G5>%+V=a!C$bGRFED-j;w4L5O4;j!po6db?#=6%(fi;$qz0NY z8(cZ@{!dX}a8&)u2eEAd$s5!c1vKAOXqoU3QeK%Sn%zk>%RBVQ_>@78`9tA})@Rrh zTX^KxX}$whi<=+vZ7viRn;+PgxSMl+$DKq_li~-s>N({*gSUJ}@9YgfdW?8(`~Glw z!UwAP54VG}Qr@AQ9fx!7q+IDb?=W9SFbm!y6llDsu9OCL!o)+6YT=lJf%LnZAF4kZ zO7(7t&{=hQW$)1>$D$&mNs}js-WL}HHUEl=j5Y_J%n@)p;qh=*k?=arGay}mHwOj; zJh%_uowqkm{*v$Qw9Ss|uP*R69aD>M62wfEI;agQ%mwwpF@4vdXG3vS&RDZvZ6 zw)wpK#i0lJa7^SBgEBp^pXtNj%?~-9Nae-KRjZtC9PJk09TgQ7a$gd16cEQpb6s8C z9Tgvw!Xsj1@7~YK$_lx!2$wT8HC?fK^=)A>F)^{SkB^S7TeeIM=`f!(v^y4b-cep&SS>pz#M+b{Cg$dgmn~xx*N=OXm66fGyZdW=Z0y~6-QxOX tp`oFT(8GyRo`7_(yL|iK|N8&(Lh+t=rb%i3W?*1o@O1TaS?83{1ORk(P1FDY diff --git a/keyboards/s60_x/keymaps/bluebear/readme.md b/keyboards/s60_x/keymaps/bluebear/readme.md index 6f54d4d580..66c270ff3f 100644 --- a/keyboards/s60_x/keymaps/bluebear/readme.md +++ b/keyboards/s60_x/keymaps/bluebear/readme.md @@ -4,9 +4,7 @@ Custom keyboard layout for my S60X, my first ever custom mechanical keyboard kit This layout was inspired in part by the HHKB line of keyboards and a quest to find the perfect ergonomic, logical layout for what I do. If you like this layout, please feel free to use it, modify it and share it. -## BASE Layer - -![BASE Layer](S60X-Bluebear-BASE-Layer.png) +## [BASE Layer](http://www.keyboard-layout-editor.com/##@_name=S60X - Bluebear - BASE layer&author=Ante Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true%3B&@_c=%23ff7a00&fa@:0&:0&:0&:0&:0&:0&:0&:0&:0&:0&:9%3B%3B&=Esc%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A<%2F%2Fi>&_c=%23cccccc%3B&=!%0A1&=%2F@%0A2&=%23%0A3&=$%0A4&=%25%0A5&=^%0A6&=%2F&%0A7&=*%0A8&=(%0A9&=)%0A0&={%0A[&=}%0A]&=|%0A\&=~%0A`%3B&@_w:1.5%3B&=Tab&=”%0A’&=<%0A,&=>%0A.&=P&=Y&=F&=G&=C&=R&=L&=%3F%0A%2F%2F&=+%0A%2F=&_w:1.5%3B&=Backspace%3B&@_w:1.75%3B&=Ctrl (hold)%0AEsc (tap)&=A&=O&=E&=U&=I&=D&=H&=T&=N&=S&=%2F_%0A-&_w:2.25%3B&=Enter (tap)%0ACtrl (hold)%3B&@_w:2.25%3B&=Shift (hold)%0A( (tap)&=%2F:%0A%2F%3B&=Q&=J&=K&=X&=B&=M&=W&=V&=Z&_w:2.75%3B&=Shift (hold)%0A) (tap)%3B&@_w:1.25%3B&=Mouse Layer (hold)&_w:1.25%3B&=Win&_w:1.25%3B&=Alt&_a:5&w:6.25%3B&=Space (tap)%0AArrowFN Layer (hold)&_a:4&w:1.25%3B&=AltGr(h)%0AComp (t)&_w:1.25%3B&=Win&_w:1.25%3B&=Ctrl + Shift (oneshot)&_w:1.25%3B&=Ctrl + Alt (oneshot)) -Dvorak keyboard layout -Hold left control key for LCTL, and tap it for ESC @@ -19,49 +17,43 @@ This layout was inspired in part by the HHKB line of keyboards and a quest to fi -Tap key on bottom row, second from the right (where APP usually is) to get CTL-Shift (one shot modifier - next key pressed will be modified by ctl-shift) -Tap key on bottom right to get CTL-Alt (one shot modifier - next key pressed will be modified by ctl-alt) -## ARROWFN Layer - -![ARROWFN Layer](S60X-Bluebear-ARROWFN-Layer.png) +## [ARROWFN Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20ARROWFN%20Layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true%3B&@_c=%23ff6b00&fa@:0&:0&:0&:0&:0&:0&:0&:0&:0&:0&:9%3B%3B&=Esc%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class%2F=%27kb%20kb-logo-commodore%27%3E%3C%2F%2Fi%3E&_c=%23cccccc%3B&=F1&=F2&=F3&=F4&=F5&=F6&=F7&=F8&=F9&=F0&=F11&=F12&=To%20MIDI%20Layer&=To%20MORSE%20Layer%3B&@_a:7&w:1.5%3B&=&=&=&=&=&=&=&_a:4%3B&=PgUp&=%3Ci%20class%2F=%27kb%20kb-Arrows-Up%27%3E%3C%2F%2Fi%3E&_a:7%3B&=&=&=&_a:4%3B&=Ins&_w:1.5%3B&=Delete%3B&@_w:1.75%3B&=Caps%20Lock&=Home&_a:7%3B&=&_a:4%3B&=End&_a:7%3B&=&=&=&_a:4%3B&=%3Ci%20class%2F=%27kb%20kb-Arrows-Left%27%3E%3C%2F%2Fi%3E&=%3Ci%20class%2F=%27kb%20kb-Arrows-Down%27%3E%3C%2F%2Fi%3E&=%3Ci%20class%2F=%27kb%20kb-Arrows-Right%27%3E%3C%2F%2Fi%3E&_a:7%3B&=&=&_a:4&w:2.25%3B&=Enter%3B&@_a:7&w:2.25%3B&=&=&=&=&=&=&_a:4%3B&=Space&=PgDn&=Print%20Screen&=Scroll%20Lock&=Pause&_a:7&w:2.75%3B&=%3B&@_w:1.25%3B&=&_w:1.25%3B&=&_w:1.25%3B&=&_w:6.25%3B&=&_w:1.25%3B&=&_w:1.25%3B&=&_w:1.25%3B&=&_w:1.25%3B&=) -Number row becomes F1 to F12 --C, T, H, N keys become Up, Down, Left, Right --Access to various other keys normally found on a full sized keyboard +-C, T, H, N keys become Up, Down, Left, Right (equivalent to IJKL on QWERTY keyboard) +-Access to various other keys normally found on a full sized keyboard (INS, DEL, PSCR, SLCK, PAUSE, PGUP, PGDN, HOME, END) -Top right button toggles MORSE layer -Second from right, top row, toggles MIDI_BASE layer +-Holding Space-B lets you send Space repeatedly +-Hitting the LCTL button in this layer toggles caps lock -## MOUSE Layer - -![MOUSE Layer](S60X-Bluebear-MOUSE-Layer.png) +## [MOUSE Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20MOUSE%20Layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true;&@_c=#ff7f08&fa@:0&:0&:0&:0&:0&:0&:0&:0&:0&:0&:9;;&=Reset%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E&_c=#cccccc;&=F13&=F14&=F15&=F16&=F17&=F18&=F19&=F20&=F21&=F22&=F23&=F24&_a:7;&=&=;&@_a:4&w:1.5;&=Debug&_a:7;&=&=&=&=&=&=&_a:4;&=Mouse%20Button%201&_f:3;&=Mouse%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Up%27%3E%3C//i%3E&=Mouse%20Button%202&_f:3;&=Mouse%20Wheel%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Up%27%3E%3C//i%3E&_a:7;&=&=&_w:1.5;&=;&@_a:4&w:1.75;&=Ctl+%0ADel%0A%0A%0A%0A%0AAlt+&_a:7;&=&=&=&=&=&=&_a:4&f:3;&=Mouse%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Left%27%3E%3C//i%3E&_f:3;&=Mouse%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Down%27%3E%3C//i%3E&_f:3;&=Mouse%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Right%27%3E%3C//i%3E&_f:3;&=Mouse%20Wheel%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Down%27%3E%3C//i%3E&=Mouse%20Button%203&_a:7&w:2.25;&=;&@_a:4&w:2.25;&=Magic%0AToggle%0A%0A%0A%0A%0ASysRq&_a:7;&=&=&=&=&=&=&=&=&=&=&_w:2.75;&=;&@_w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_a:5&w:6.25;&=Power&_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=) -Move the mouse with mouse keys -Hitting the escape key in this layer will give RESET, which puts the controller into dfu mode for flashing firmware onto it +-If Debug is enabled, hitting the TAB key in this layer activates debugging to the console when listening with hid-listen +-TFS button (Three Finger Salute) sends Ctl-Alt-Del +-MAGSYS toggles the Magic SysRq key (works only in Linux) -Hitting the space key in this layer is like hitting power button on computer --Hitting the tab button toggles caps lock -Number row becomes F13 to F24 -## MIDI_BASE Layer +## [MIDI_BASE Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20MIDI%20BASE%20Layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true;&@_c=#ff8300&a:5&fa@:9;;&=%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E%0ABASE%0A%0A%0ALayer&_c=#cccccc&a:4&f:3;&=%F0%9F%8E%B6%0ACmaj&_f:3;&=%F0%9F%8E%B6%0AGmaj&_f:3;&=%F0%9F%8E%B6%0ADmaj&_f:3;&=%F0%9F%8E%B6%0AAmaj&_f:3;&=%F0%9F%8E%B6%0AEmaj&_f:3;&=%F0%9F%8E%B6%0ABmaj&_f:3;&=%F0%9F%8E%B6%0AF#maj%0A%0A%0A%0A%0AGbmaj//&_f:3;&=%F0%9F%8E%B6%0AC#maj%0A%0A%0A%0A%0ADbmaj//&_f:3;&=%F0%9F%8E%B6%0AG#maj%0A%0A%0A%0A%0AAbmaj&_f:3;&=%F0%9F%8E%B6%0AD#maj%0A%0A%0A%0A%0AEbmaj//&_f:3;&=%F0%9F%8E%B6%0AA#maj%0A%0A%0A%0A%0ABbmaj//&_f:3;&=%F0%9F%8E%B6%0AFmaj&_a:7;&=&_a:4&f:3;&=To%0AChord%0A%0A%0A%0A%0AMidi;&@_f:3&w:1.5;&=Octave%20Up&_a:7;&=&_a:4&f:3;&=%E2%99%A9%0AC#//Db&_f:3;&=%E2%99%A9%0AD#//Eb&_a:7;&=&_a:4&f:3;&=%E2%99%A9%0AF#//Gb&_f:3;&=%E2%99%A9%0AG#//Ab&_f:3;&=%E2%99%A9%0AA#//Bb&_a:7;&=&_a:4&f:3;&=%E2%99%A9%0AD1b%0A%0A%0A%0A%0AC1#//&_f:3;&=%E2%99%A9%0AE1b%0A%0A%0A%0A%0AD1#//&_a:7;&=&=&_w:1.5;&=;&@_a:4&f:3&w:1.75;&=Octave%20Down&_f:3;&=%E2%99%A9%0AC&_f:3;&=%E2%99%A9%0AD&_f:3;&=%E2%99%A9%0AE&_f:3;&=%E2%99%A9%0AF&_f:3;&=%E2%99%A9%0AG&_f:3;&=%E2%99%A9%0AA&_f:3;&=%E2%99%A9%0AB&_f:3;&=%E2%99%A9%0AC1&_f:3;&=%E2%99%A9%0AD1&_f:3;&=%E2%99%A9%0AE1&_f:3;&=%E2%99%A9%0AF1&_a:7&w:2.25;&=;&@_a:4&f:3&w:2.25;&=%F0%9F%8E%B6%0ACm&_f:3;&=%F0%9F%8E%B6%0AGm&_f:3;&=%F0%9F%8E%B6%0ADm&_f:3;&=%F0%9F%8E%B6%0AAm&_f:3;&=%F0%9F%8E%B6%0AEm&_f:3;&=%F0%9F%8E%B6%0ABm&_f:3;&=%F0%9F%8E%B6%0AF#m%0A%0A%0A%0A%0AGbm//&_f:3;&=%F0%9F%8E%B6%0AC#m%0A%0A%0A%0A%0ADbm//&_f:3;&=%F0%9F%8E%B6%0AG#m%0A%0A%0A%0A%0AAbm//&_f:3;&=%F0%9F%8E%B6%0AD#m%0A%0A%0A%0A%0AEbm&_f:3;&=%F0%9F%8E%B6%0AA#m%0A%0A%0A%0A%0ABbm//&_f:3&w:2.75;&=%F0%9F%8E%B6%0AFm;&@_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_a:5&f:3&w:6.25;&=All%20notes%20off&_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=) -![MIDI_BASE Layer](S60X-Bluebear-MIDI_BASE-Layer.png) - -This layer was inspired by the Satan Midi layout (https://github.com/qmk/qmk_firmware/tree/master/keyboards/satan/keymaps/midi) and gives access to basic MIDI notes. What I added were two layers of MIDI chords (major and minor triads) arranged in a circle of fifths pattern. Thanks to @fredizzimo for helping me with the code for these chords. +This layer was inspired by the [Satan Midi layout](https://github.com/qmk/qmk_firmware/tree/master/keyboards/satan/keymaps/midi) and gives access to basic MIDI notes. What I added were two layers of MIDI chords (major and minor triads) arranged in a circle of fifths pattern. Thanks to @fredizzimo for helping me with the code for these. -Top right button toggles MORSE_CHORDS layer -Escape brings you back to the BASE layer -## MIDI_CHORD Layer +## [MIDI_CHORD Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20MIDI%20CHORD%20Layer&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true&pcb:false;&@_c=#ff8300&a:5&fa@:9;;&=%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E%0ABASE%0A%0A%0ALayer&_c=#cccccc&a:4&f:3;&=%F0%9F%8E%B6%0ACmaj&_f:3;&=%F0%9F%8E%B6%0AGmaj&_f:3;&=%F0%9F%8E%B6%0ADmaj&_f:3;&=%F0%9F%8E%B6%0AAmaj&_f:3;&=%F0%9F%8E%B6%0AEmaj&_f:3;&=%F0%9F%8E%B6%0ABmaj&_f:3;&=%F0%9F%8E%B6%0AF#maj%0A%0A%0A%0A%0AGbmaj//&_f:3;&=%F0%9F%8E%B6%0AC#maj%0A%0A%0A%0A%0ADbmaj//&_f:3;&=%F0%9F%8E%B6%0AG#maj%0A%0A%0A%0A%0AAbmaj&_f:3;&=%F0%9F%8E%B6%0AD#maj%0A%0A%0A%0A%0AEbmaj//&_f:3;&=%F0%9F%8E%B6%0AA#maj%0A%0A%0A%0A%0ABbmaj//&_f:3;&=%F0%9F%8E%B6%0AFmaj&_f:3;&=To%20Midi%20Base&_a:7;&=;&@_a:4&f:3&w:1.5;&=Octave%20Up&_f:3;&=%F0%9F%8E%B6%0ACm&_f:3;&=%F0%9F%8E%B6%0AGm&_f:3;&=%F0%9F%8E%B6%0ADm&_f:3;&=%F0%9F%8E%B6%0AAm&_f:3;&=%F0%9F%8E%B6%0AEm&_f:3;&=%F0%9F%8E%B6%0ABm&_f:3;&=%F0%9F%8E%B6%0AF#m%0A%0A%0A%0A%0AGbm//&_f:3;&=%F0%9F%8E%B6%0AC#m%0A%0A%0A%0A%0ADbm//&_f:3;&=%F0%9F%8E%B6%0AG#m%0A%0A%0A%0A%0AAbm//&_f:3;&=%F0%9F%8E%B6%0AD#m%0A%0A%0A%0A%0AEbm//&_f:3;&=%F0%9F%8E%B6%0AA#m%0A%0A%0A%0A%0ABbm//&_f:3;&=%F0%9F%8E%B6%0AFm&_a:7&w:1.5;&=;&@_a:4&f:3&w:1.75;&=Octave%20Down&_f:3;&=%F0%9F%8E%B6%0AC7&_f:3;&=%F0%9F%8E%B6%0AG7&_f:3;&=%F0%9F%8E%B6%0AD7&_f:3;&=%F0%9F%8E%B6%0AA7&_f:3;&=%F0%9F%8E%B6%0AE7&_f:3;&=%F0%9F%8E%B6%0AB7&_f:3;&=%F0%9F%8E%B6%0AF#7%0A%0A%0A%0A%0AGb7//&_f:3;&=%F0%9F%8E%B6%0AC#7%0A%0A%0A%0A%0ADb7//&_f:3;&=%F0%9F%8E%B6%0AG#7%0A%0A%0A%0A%0AAb7//&_f:3;&=%F0%9F%8E%B6%0AD#7%0A%0A%0A%0A%0AEb7//&_f:3;&=%F0%9F%8E%B6%0AA#7%0A%0A%0A%0A%0ABb7//&_f:3&w:2.25;&=%F0%9F%8E%B6%0AF7;&@_f:3&w:2.25;&=%F0%9F%8E%B6%0ACdim7&_f:3;&=%F0%9F%8E%B6%0AGdim7&_f:3;&=%F0%9F%8E%B6%0ADdim7&_f:3;&=%F0%9F%8E%B6%0AAdim7&_f:3;&=%F0%9F%8E%B6%0AEdim7&_f:3;&=%F0%9F%8E%B6%0ABdim7&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0AGb&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0ADb&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0AAb&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0AEb&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0ABb&_f:3&w:2.75;&=%F0%9F%8E%B6%0AFdim7;&@_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_a:5&f:3&w:6.25;&=All%20notes%20off&_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=) -![MIDI_CHORD Layer](S60X-Bluebear-MIDI_CHORD-Layer.png) - -After figuring out how to code my MIDI chord function, I decided to dedicate a full layer to these chords. This chord layout was inspired by the Stradella Base system (https://en.wikipedia.org/wiki/Stradella_bass_system) found on accordions. This layer is a tool for musical composition and songwriting. +After figuring out how to code my MIDI chord function, I decided to dedicate a full layer to these chords. This chord layout was inspired by the [Stradella Base system](https://en.wikipedia.org/wiki/Stradella_bass_system) found on accordions. This layer is a tool for musical composition and songwriting. Originally, I had written the chord functions using the F(n) functions, but finally ended up using process_record_user and custom keycodes. I think this was a more efficient and elegant way of coding these. -Second from right, top row, toggles MIDI_BASE layer -Escape brings you back to the BASE layer -## MORSE LAYER +## [MORSE LAYER](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20MORSE%20Layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true;&@_c=#ff8a00&a:5&fa@:9;;&=%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E%0ABASE%0A%0A%0ALayer&_c=#cccccc&a:4&fa@:5&:5;;&=-.-.--%0A.----&=.--.-.%0A..---&=%0A...--&=...-..-%0A....-&=%0A.....&=%0A-....&=.-...%0A--...&=%0A---..&=-.--.%0A----.&=-.--.-%0A-----&_a:7;&=&=&=&=;&@_w:1.5;&=&_a:4;&=.-..-.%0A.----.&=%0A--..--&=%0A.-.-.-&=.--.&=-.--&=..-.&=--.&=-.-.&=.-.&=.-..&=..--..%0A-..-.&=.-.-.%0A-...-&_f:3&w:1.5;&=Backspace;&@_a:7&w:1.75;&=&_a:4&f:3;&=.-&_f:3;&=---&_f:3;&=.&_f:3&n:true;&=..-&_f:3;&=..&_f:3;&=-..&_f:3&n:true;&=....&_f:3;&=-&_f:3;&=-.&_f:3;&=...&_f:3;&=..--.-%0A-....-&_f:3&w:2.25;&=Enter;&@_f:3&w:2.25;&=Shift&_f:3;&=---...%0A-.-.-.&_f:3;&=--.-&_f:3;&=.---&_f:3;&=-.-&_f:3;&=-..-&_f:3;&=-...&_f:3;&=--&_f:3;&=.--&_f:3;&=...-&_f:3;&=--..&_f:3&w:2.75;&=Shift;&@_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_a:5&f:3&w:6.25;&=Space%20(%5C%20)&_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=) -![MORSE Layer](S60X-Bluebear-MORSE-Layer.png) - -This layer is really just for fun, and because I am a ham radio operator and morse code enthusiast. Hitting the alphanumerical keys in this layer will send a series of dits (.) and dahs (-) representing that character in morse code. +This layer is really just for fun, and because I am a ham radio operator and morse code enthusiast. Hitting the alphanumerical keys in this layer will send a series of dits (.) and dahs (-) representing that character in morse code. This is all done through M(n). There are also a couple of characters that are sent through a shifted key on a regular layout, like @ or !. The same applies on this layer. And because I type using the Dvorak layout, this layer is also arranged in this manner. -Escape brings you back to the BASE layer From 3ee346c07ba60589162c83408e46b28d25b7bf83 Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 12 Jun 2017 20:20:28 -0400 Subject: [PATCH 23/24] Mods to readme.md --- keyboards/s60_x/keymaps/bluebear/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/s60_x/keymaps/bluebear/readme.md b/keyboards/s60_x/keymaps/bluebear/readme.md index 66c270ff3f..153a825990 100644 --- a/keyboards/s60_x/keymaps/bluebear/readme.md +++ b/keyboards/s60_x/keymaps/bluebear/readme.md @@ -4,7 +4,7 @@ Custom keyboard layout for my S60X, my first ever custom mechanical keyboard kit This layout was inspired in part by the HHKB line of keyboards and a quest to find the perfect ergonomic, logical layout for what I do. If you like this layout, please feel free to use it, modify it and share it. -## [BASE Layer](http://www.keyboard-layout-editor.com/##@_name=S60X - Bluebear - BASE layer&author=Ante Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true%3B&@_c=%23ff7a00&fa@:0&:0&:0&:0&:0&:0&:0&:0&:0&:0&:9%3B%3B&=Esc%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A<%2F%2Fi>&_c=%23cccccc%3B&=!%0A1&=%2F@%0A2&=%23%0A3&=$%0A4&=%25%0A5&=^%0A6&=%2F&%0A7&=*%0A8&=(%0A9&=)%0A0&={%0A[&=}%0A]&=|%0A\&=~%0A`%3B&@_w:1.5%3B&=Tab&=”%0A’&=<%0A,&=>%0A.&=P&=Y&=F&=G&=C&=R&=L&=%3F%0A%2F%2F&=+%0A%2F=&_w:1.5%3B&=Backspace%3B&@_w:1.75%3B&=Ctrl (hold)%0AEsc (tap)&=A&=O&=E&=U&=I&=D&=H&=T&=N&=S&=%2F_%0A-&_w:2.25%3B&=Enter (tap)%0ACtrl (hold)%3B&@_w:2.25%3B&=Shift (hold)%0A( (tap)&=%2F:%0A%2F%3B&=Q&=J&=K&=X&=B&=M&=W&=V&=Z&_w:2.75%3B&=Shift (hold)%0A) (tap)%3B&@_w:1.25%3B&=Mouse Layer (hold)&_w:1.25%3B&=Win&_w:1.25%3B&=Alt&_a:5&w:6.25%3B&=Space (tap)%0AArrowFN Layer (hold)&_a:4&w:1.25%3B&=AltGr(h)%0AComp (t)&_w:1.25%3B&=Win&_w:1.25%3B&=Ctrl + Shift (oneshot)&_w:1.25%3B&=Ctrl + Alt (oneshot)) +## [BASE Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20BASE%20layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true;&@_c=#ff7a00&fa@:0&:0&:0&:0&:0&:0&:0&:0&:0&:0&:9;;&=Esc%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E&_c=#cccccc;&=!%0A1&=/@%0A2&=#%0A3&=$%0A4&=%25%0A5&=%5E%0A6&=/&%0A7&=*%0A8&=(%0A9&=)%0A0&=%7B%0A%5B&=%7D%0A%5D&=%7C%0A%5C&=~%0A%60;&@_w:1.5;&=Tab&=%22%0A%27&=%3C%0A,&=%3E%0A.&=P&=Y&=F&=G&=C&=R&=L&=?%0A//&=+%0A/=&_w:1.5;&=Backspace;&@_w:1.75;&=Ctrl%20(hold)%0AEsc%20%20(tap)&=A&=O&=E&=U&=I&=D&=H&=T&=N&=S&=/_%0A-&_w:2.25;&=Enter%20(tap)%0ACtrl%20(hold);&@_w:2.25;&=Shift%20(hold)%0A(%20(tap)&=/:%0A/;&=Q&=J&=K&=X&=B&=M&=W&=V&=Z&_w:2.75;&=Shift%20(hold)%0A)%20(tap);&@_w:1.25;&=Mouse%20Layer%20(hold)&_w:1.25;&=Win&_w:1.25;&=Alt&_a:5&w:6.25;&=Space%20(tap)%0AArrowFN%20Layer%20(hold)&_a:4&w:1.25;&=AltGr(h)%0AComp%20(t)&_w:1.25;&=Win&_w:1.25;&=Ctrl%20+%20Shift%20(oneshot)&_w:1.25;&=Ctrl%20+%20Alt%20(oneshot)) -Dvorak keyboard layout -Hold left control key for LCTL, and tap it for ESC From f37daa53430bafb3abb00efd60d6a684b82ad99a Mon Sep 17 00:00:00 2001 From: Ante Laurijssen Date: Mon, 12 Jun 2017 20:24:56 -0400 Subject: [PATCH 24/24] Properly formatted unordered lists in readme.md --- keyboards/s60_x/keymaps/bluebear/readme.md | 58 +++++++++++----------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/keyboards/s60_x/keymaps/bluebear/readme.md b/keyboards/s60_x/keymaps/bluebear/readme.md index 153a825990..d2cf6a4c58 100644 --- a/keyboards/s60_x/keymaps/bluebear/readme.md +++ b/keyboards/s60_x/keymaps/bluebear/readme.md @@ -6,56 +6,56 @@ This layout was inspired in part by the HHKB line of keyboards and a quest to fi ## [BASE Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20BASE%20layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true;&@_c=#ff7a00&fa@:0&:0&:0&:0&:0&:0&:0&:0&:0&:0&:9;;&=Esc%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E&_c=#cccccc;&=!%0A1&=/@%0A2&=#%0A3&=$%0A4&=%25%0A5&=%5E%0A6&=/&%0A7&=*%0A8&=(%0A9&=)%0A0&=%7B%0A%5B&=%7D%0A%5D&=%7C%0A%5C&=~%0A%60;&@_w:1.5;&=Tab&=%22%0A%27&=%3C%0A,&=%3E%0A.&=P&=Y&=F&=G&=C&=R&=L&=?%0A//&=+%0A/=&_w:1.5;&=Backspace;&@_w:1.75;&=Ctrl%20(hold)%0AEsc%20%20(tap)&=A&=O&=E&=U&=I&=D&=H&=T&=N&=S&=/_%0A-&_w:2.25;&=Enter%20(tap)%0ACtrl%20(hold);&@_w:2.25;&=Shift%20(hold)%0A(%20(tap)&=/:%0A/;&=Q&=J&=K&=X&=B&=M&=W&=V&=Z&_w:2.75;&=Shift%20(hold)%0A)%20(tap);&@_w:1.25;&=Mouse%20Layer%20(hold)&_w:1.25;&=Win&_w:1.25;&=Alt&_a:5&w:6.25;&=Space%20(tap)%0AArrowFN%20Layer%20(hold)&_a:4&w:1.25;&=AltGr(h)%0AComp%20(t)&_w:1.25;&=Win&_w:1.25;&=Ctrl%20+%20Shift%20(oneshot)&_w:1.25;&=Ctrl%20+%20Alt%20(oneshot)) --Dvorak keyboard layout --Hold left control key for LCTL, and tap it for ESC --Hold enter key for RCTL and tap for ENT --Hold the space key to momentarily switch to ARROWFN layer --Left bottom key acts as momentary switch to the MOUSE layer --Hold right alt key for AltGr and tap for APP(which I have mapped to Compose in OS) --Hold left shift key for LSFT and tap for ( (Space Cadet style) --Hold right shift key for RSFT and tap for ) (Space Cadet style) --Tap key on bottom row, second from the right (where APP usually is) to get CTL-Shift (one shot modifier - next key pressed will be modified by ctl-shift) --Tap key on bottom right to get CTL-Alt (one shot modifier - next key pressed will be modified by ctl-alt) +- Dvorak keyboard layout +- Hold left control key for LCTL, and tap it for ESC +- Hold enter key for RCTL and tap for ENT +- Hold the space key to momentarily switch to ARROWFN layer +- Left bottom key acts as momentary switch to the MOUSE layer +- Hold right alt key for AltGr and tap for APP(which I have mapped to Compose in OS) +- Hold left shift key for LSFT and tap for ( (Space Cadet style) +- Hold right shift key for RSFT and tap for ) (Space Cadet style) +- Tap key on bottom row, second from the right (where APP usually is) to get CTL-Shift (one shot modifier - next key pressed will be modified by ctl-shift) +- Tap key on bottom right to get CTL-Alt (one shot modifier - next key pressed will be modified by ctl-alt) ## [ARROWFN Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20ARROWFN%20Layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true%3B&@_c=%23ff6b00&fa@:0&:0&:0&:0&:0&:0&:0&:0&:0&:0&:9%3B%3B&=Esc%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class%2F=%27kb%20kb-logo-commodore%27%3E%3C%2F%2Fi%3E&_c=%23cccccc%3B&=F1&=F2&=F3&=F4&=F5&=F6&=F7&=F8&=F9&=F0&=F11&=F12&=To%20MIDI%20Layer&=To%20MORSE%20Layer%3B&@_a:7&w:1.5%3B&=&=&=&=&=&=&=&_a:4%3B&=PgUp&=%3Ci%20class%2F=%27kb%20kb-Arrows-Up%27%3E%3C%2F%2Fi%3E&_a:7%3B&=&=&=&_a:4%3B&=Ins&_w:1.5%3B&=Delete%3B&@_w:1.75%3B&=Caps%20Lock&=Home&_a:7%3B&=&_a:4%3B&=End&_a:7%3B&=&=&=&_a:4%3B&=%3Ci%20class%2F=%27kb%20kb-Arrows-Left%27%3E%3C%2F%2Fi%3E&=%3Ci%20class%2F=%27kb%20kb-Arrows-Down%27%3E%3C%2F%2Fi%3E&=%3Ci%20class%2F=%27kb%20kb-Arrows-Right%27%3E%3C%2F%2Fi%3E&_a:7%3B&=&=&_a:4&w:2.25%3B&=Enter%3B&@_a:7&w:2.25%3B&=&=&=&=&=&=&_a:4%3B&=Space&=PgDn&=Print%20Screen&=Scroll%20Lock&=Pause&_a:7&w:2.75%3B&=%3B&@_w:1.25%3B&=&_w:1.25%3B&=&_w:1.25%3B&=&_w:6.25%3B&=&_w:1.25%3B&=&_w:1.25%3B&=&_w:1.25%3B&=&_w:1.25%3B&=) --Number row becomes F1 to F12 --C, T, H, N keys become Up, Down, Left, Right (equivalent to IJKL on QWERTY keyboard) --Access to various other keys normally found on a full sized keyboard (INS, DEL, PSCR, SLCK, PAUSE, PGUP, PGDN, HOME, END) --Top right button toggles MORSE layer --Second from right, top row, toggles MIDI_BASE layer --Holding Space-B lets you send Space repeatedly --Hitting the LCTL button in this layer toggles caps lock +- Number row becomes F1 to F12 +- C, T, H, N keys become Up, Down, Left, Right (equivalent to IJKL on QWERTY keyboard) +- Access to various other keys normally found on a full sized keyboard (INS, DEL, PSCR, SLCK, PAUSE, PGUP, PGDN, HOME, END) +- Top right button toggles MORSE layer +- Second from right, top row, toggles MIDI_BASE layer +- Holding Space-B lets you send Space repeatedly +- Hitting the LCTL button in this layer toggles caps lock ## [MOUSE Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20MOUSE%20Layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true;&@_c=#ff7f08&fa@:0&:0&:0&:0&:0&:0&:0&:0&:0&:0&:9;;&=Reset%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E&_c=#cccccc;&=F13&=F14&=F15&=F16&=F17&=F18&=F19&=F20&=F21&=F22&=F23&=F24&_a:7;&=&=;&@_a:4&w:1.5;&=Debug&_a:7;&=&=&=&=&=&=&_a:4;&=Mouse%20Button%201&_f:3;&=Mouse%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Up%27%3E%3C//i%3E&=Mouse%20Button%202&_f:3;&=Mouse%20Wheel%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Up%27%3E%3C//i%3E&_a:7;&=&=&_w:1.5;&=;&@_a:4&w:1.75;&=Ctl+%0ADel%0A%0A%0A%0A%0AAlt+&_a:7;&=&=&=&=&=&=&_a:4&f:3;&=Mouse%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Left%27%3E%3C//i%3E&_f:3;&=Mouse%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Down%27%3E%3C//i%3E&_f:3;&=Mouse%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Right%27%3E%3C//i%3E&_f:3;&=Mouse%20Wheel%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%3Ci%20class/=%27kb%20kb-Arrows-Down%27%3E%3C//i%3E&=Mouse%20Button%203&_a:7&w:2.25;&=;&@_a:4&w:2.25;&=Magic%0AToggle%0A%0A%0A%0A%0ASysRq&_a:7;&=&=&=&=&=&=&=&=&=&=&_w:2.75;&=;&@_w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_a:5&w:6.25;&=Power&_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=) --Move the mouse with mouse keys --Hitting the escape key in this layer will give RESET, which puts the controller into dfu mode for flashing firmware onto it --If Debug is enabled, hitting the TAB key in this layer activates debugging to the console when listening with hid-listen --TFS button (Three Finger Salute) sends Ctl-Alt-Del --MAGSYS toggles the Magic SysRq key (works only in Linux) --Hitting the space key in this layer is like hitting power button on computer --Number row becomes F13 to F24 +- Move the mouse with mouse keys +- Hitting the escape key in this layer will give RESET, which puts the controller into dfu mode for flashing firmware onto it +- If Debug is enabled, hitting the TAB key in this layer activates debugging to the console when listening with hid-listen +- TFS button (Three Finger Salute) sends Ctl-Alt-Del +- MAGSYS toggles the Magic SysRq key (works only in Linux) +- Hitting the space key in this layer is like hitting power button on computer +- Number row becomes F13 to F24 ## [MIDI_BASE Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20MIDI%20BASE%20Layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true;&@_c=#ff8300&a:5&fa@:9;;&=%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E%0ABASE%0A%0A%0ALayer&_c=#cccccc&a:4&f:3;&=%F0%9F%8E%B6%0ACmaj&_f:3;&=%F0%9F%8E%B6%0AGmaj&_f:3;&=%F0%9F%8E%B6%0ADmaj&_f:3;&=%F0%9F%8E%B6%0AAmaj&_f:3;&=%F0%9F%8E%B6%0AEmaj&_f:3;&=%F0%9F%8E%B6%0ABmaj&_f:3;&=%F0%9F%8E%B6%0AF#maj%0A%0A%0A%0A%0AGbmaj//&_f:3;&=%F0%9F%8E%B6%0AC#maj%0A%0A%0A%0A%0ADbmaj//&_f:3;&=%F0%9F%8E%B6%0AG#maj%0A%0A%0A%0A%0AAbmaj&_f:3;&=%F0%9F%8E%B6%0AD#maj%0A%0A%0A%0A%0AEbmaj//&_f:3;&=%F0%9F%8E%B6%0AA#maj%0A%0A%0A%0A%0ABbmaj//&_f:3;&=%F0%9F%8E%B6%0AFmaj&_a:7;&=&_a:4&f:3;&=To%0AChord%0A%0A%0A%0A%0AMidi;&@_f:3&w:1.5;&=Octave%20Up&_a:7;&=&_a:4&f:3;&=%E2%99%A9%0AC#//Db&_f:3;&=%E2%99%A9%0AD#//Eb&_a:7;&=&_a:4&f:3;&=%E2%99%A9%0AF#//Gb&_f:3;&=%E2%99%A9%0AG#//Ab&_f:3;&=%E2%99%A9%0AA#//Bb&_a:7;&=&_a:4&f:3;&=%E2%99%A9%0AD1b%0A%0A%0A%0A%0AC1#//&_f:3;&=%E2%99%A9%0AE1b%0A%0A%0A%0A%0AD1#//&_a:7;&=&=&_w:1.5;&=;&@_a:4&f:3&w:1.75;&=Octave%20Down&_f:3;&=%E2%99%A9%0AC&_f:3;&=%E2%99%A9%0AD&_f:3;&=%E2%99%A9%0AE&_f:3;&=%E2%99%A9%0AF&_f:3;&=%E2%99%A9%0AG&_f:3;&=%E2%99%A9%0AA&_f:3;&=%E2%99%A9%0AB&_f:3;&=%E2%99%A9%0AC1&_f:3;&=%E2%99%A9%0AD1&_f:3;&=%E2%99%A9%0AE1&_f:3;&=%E2%99%A9%0AF1&_a:7&w:2.25;&=;&@_a:4&f:3&w:2.25;&=%F0%9F%8E%B6%0ACm&_f:3;&=%F0%9F%8E%B6%0AGm&_f:3;&=%F0%9F%8E%B6%0ADm&_f:3;&=%F0%9F%8E%B6%0AAm&_f:3;&=%F0%9F%8E%B6%0AEm&_f:3;&=%F0%9F%8E%B6%0ABm&_f:3;&=%F0%9F%8E%B6%0AF#m%0A%0A%0A%0A%0AGbm//&_f:3;&=%F0%9F%8E%B6%0AC#m%0A%0A%0A%0A%0ADbm//&_f:3;&=%F0%9F%8E%B6%0AG#m%0A%0A%0A%0A%0AAbm//&_f:3;&=%F0%9F%8E%B6%0AD#m%0A%0A%0A%0A%0AEbm&_f:3;&=%F0%9F%8E%B6%0AA#m%0A%0A%0A%0A%0ABbm//&_f:3&w:2.75;&=%F0%9F%8E%B6%0AFm;&@_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_a:5&f:3&w:6.25;&=All%20notes%20off&_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=) This layer was inspired by the [Satan Midi layout](https://github.com/qmk/qmk_firmware/tree/master/keyboards/satan/keymaps/midi) and gives access to basic MIDI notes. What I added were two layers of MIDI chords (major and minor triads) arranged in a circle of fifths pattern. Thanks to @fredizzimo for helping me with the code for these. --Top right button toggles MORSE_CHORDS layer --Escape brings you back to the BASE layer +- Top right button toggles MORSE_CHORDS layer +- Escape brings you back to the BASE layer ## [MIDI_CHORD Layer](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20MIDI%20CHORD%20Layer&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true&pcb:false;&@_c=#ff8300&a:5&fa@:9;;&=%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E%0ABASE%0A%0A%0ALayer&_c=#cccccc&a:4&f:3;&=%F0%9F%8E%B6%0ACmaj&_f:3;&=%F0%9F%8E%B6%0AGmaj&_f:3;&=%F0%9F%8E%B6%0ADmaj&_f:3;&=%F0%9F%8E%B6%0AAmaj&_f:3;&=%F0%9F%8E%B6%0AEmaj&_f:3;&=%F0%9F%8E%B6%0ABmaj&_f:3;&=%F0%9F%8E%B6%0AF#maj%0A%0A%0A%0A%0AGbmaj//&_f:3;&=%F0%9F%8E%B6%0AC#maj%0A%0A%0A%0A%0ADbmaj//&_f:3;&=%F0%9F%8E%B6%0AG#maj%0A%0A%0A%0A%0AAbmaj&_f:3;&=%F0%9F%8E%B6%0AD#maj%0A%0A%0A%0A%0AEbmaj//&_f:3;&=%F0%9F%8E%B6%0AA#maj%0A%0A%0A%0A%0ABbmaj//&_f:3;&=%F0%9F%8E%B6%0AFmaj&_f:3;&=To%20Midi%20Base&_a:7;&=;&@_a:4&f:3&w:1.5;&=Octave%20Up&_f:3;&=%F0%9F%8E%B6%0ACm&_f:3;&=%F0%9F%8E%B6%0AGm&_f:3;&=%F0%9F%8E%B6%0ADm&_f:3;&=%F0%9F%8E%B6%0AAm&_f:3;&=%F0%9F%8E%B6%0AEm&_f:3;&=%F0%9F%8E%B6%0ABm&_f:3;&=%F0%9F%8E%B6%0AF#m%0A%0A%0A%0A%0AGbm//&_f:3;&=%F0%9F%8E%B6%0AC#m%0A%0A%0A%0A%0ADbm//&_f:3;&=%F0%9F%8E%B6%0AG#m%0A%0A%0A%0A%0AAbm//&_f:3;&=%F0%9F%8E%B6%0AD#m%0A%0A%0A%0A%0AEbm//&_f:3;&=%F0%9F%8E%B6%0AA#m%0A%0A%0A%0A%0ABbm//&_f:3;&=%F0%9F%8E%B6%0AFm&_a:7&w:1.5;&=;&@_a:4&f:3&w:1.75;&=Octave%20Down&_f:3;&=%F0%9F%8E%B6%0AC7&_f:3;&=%F0%9F%8E%B6%0AG7&_f:3;&=%F0%9F%8E%B6%0AD7&_f:3;&=%F0%9F%8E%B6%0AA7&_f:3;&=%F0%9F%8E%B6%0AE7&_f:3;&=%F0%9F%8E%B6%0AB7&_f:3;&=%F0%9F%8E%B6%0AF#7%0A%0A%0A%0A%0AGb7//&_f:3;&=%F0%9F%8E%B6%0AC#7%0A%0A%0A%0A%0ADb7//&_f:3;&=%F0%9F%8E%B6%0AG#7%0A%0A%0A%0A%0AAb7//&_f:3;&=%F0%9F%8E%B6%0AD#7%0A%0A%0A%0A%0AEb7//&_f:3;&=%F0%9F%8E%B6%0AA#7%0A%0A%0A%0A%0ABb7//&_f:3&w:2.25;&=%F0%9F%8E%B6%0AF7;&@_f:3&w:2.25;&=%F0%9F%8E%B6%0ACdim7&_f:3;&=%F0%9F%8E%B6%0AGdim7&_f:3;&=%F0%9F%8E%B6%0ADdim7&_f:3;&=%F0%9F%8E%B6%0AAdim7&_f:3;&=%F0%9F%8E%B6%0AEdim7&_f:3;&=%F0%9F%8E%B6%0ABdim7&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0AGb&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0ADb&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0AAb&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0AEb&_f:3;&=%F0%9F%8E%B6%0Adim7%0A%0A%0A%0A%0ABb&_f:3&w:2.75;&=%F0%9F%8E%B6%0AFdim7;&@_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_a:5&f:3&w:6.25;&=All%20notes%20off&_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=) After figuring out how to code my MIDI chord function, I decided to dedicate a full layer to these chords. This chord layout was inspired by the [Stradella Base system](https://en.wikipedia.org/wiki/Stradella_bass_system) found on accordions. This layer is a tool for musical composition and songwriting. Originally, I had written the chord functions using the F(n) functions, but finally ended up using process_record_user and custom keycodes. I think this was a more efficient and elegant way of coding these. --Second from right, top row, toggles MIDI_BASE layer --Escape brings you back to the BASE layer +- Second from right, top row, toggles MIDI_BASE layer +- Escape brings you back to the BASE layer ## [MORSE LAYER](http://www.keyboard-layout-editor.com/##@_name=S60X%20-%20Bluebear%20-%20MORSE%20Layer&author=Ante%20Laurijssen&switchMount=cherry&switchBrand=outemu&switchType=PG150Q01-1&plate:true;&@_c=#ff8a00&a:5&fa@:9;;&=%3Ci%20class/=%27kb%20kb-logo-commodore%27%3E%3C//i%3E%0ABASE%0A%0A%0ALayer&_c=#cccccc&a:4&fa@:5&:5;;&=-.-.--%0A.----&=.--.-.%0A..---&=%0A...--&=...-..-%0A....-&=%0A.....&=%0A-....&=.-...%0A--...&=%0A---..&=-.--.%0A----.&=-.--.-%0A-----&_a:7;&=&=&=&=;&@_w:1.5;&=&_a:4;&=.-..-.%0A.----.&=%0A--..--&=%0A.-.-.-&=.--.&=-.--&=..-.&=--.&=-.-.&=.-.&=.-..&=..--..%0A-..-.&=.-.-.%0A-...-&_f:3&w:1.5;&=Backspace;&@_a:7&w:1.75;&=&_a:4&f:3;&=.-&_f:3;&=---&_f:3;&=.&_f:3&n:true;&=..-&_f:3;&=..&_f:3;&=-..&_f:3&n:true;&=....&_f:3;&=-&_f:3;&=-.&_f:3;&=...&_f:3;&=..--.-%0A-....-&_f:3&w:2.25;&=Enter;&@_f:3&w:2.25;&=Shift&_f:3;&=---...%0A-.-.-.&_f:3;&=--.-&_f:3;&=.---&_f:3;&=-.-&_f:3;&=-..-&_f:3;&=-...&_f:3;&=--&_f:3;&=.--&_f:3;&=...-&_f:3;&=--..&_f:3&w:2.75;&=Shift;&@_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_a:5&f:3&w:6.25;&=Space%20(%5C%20)&_a:7&w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=) This layer is really just for fun, and because I am a ham radio operator and morse code enthusiast. Hitting the alphanumerical keys in this layer will send a series of dits (.) and dahs (-) representing that character in morse code. This is all done through M(n). There are also a couple of characters that are sent through a shifted key on a regular layout, like @ or !. The same applies on this layer. And because I type using the Dvorak layout, this layer is also arranged in this manner. --Escape brings you back to the BASE layer +- Escape brings you back to the BASE layer ### THIS IS STILL A WORK IN PROGRESS