From df8a538489414b1f0c0cdcb786a76cca763ae37a Mon Sep 17 00:00:00 2001 From: Stephen J Bush <2041619+muppetjones@users.noreply.github.com> Date: Wed, 3 Aug 2022 12:23:17 -0500 Subject: Userspace: muppetjones (#1) (#13461) * Userspace: muppetjones (#1) Add and update lily58 to work with userspace Add and update kyria keymap to work with userspace Add and update planck keymap with userspace Add etchamouse code and docs to userpace Add userspace Update mouse encoder for smoother movement. Encoder + mouse Added casemodes by andrewjrae * Rollback lily58 state reader and add missing GPL * Apply suggestions from code review Co-authored-by: Drashna Jaelre Co-authored-by: Joel Challis * fix lily58 keymap * Updates to user and lily for muppetjones. Updated parameters for etchamouse for smoother mouse movement. Updated lily keymap and userspace to actually work together. * Update keyboards/lily58/keymaps/muppetjones/config.h Co-authored-by: Drashna Jaelre * Updated keymaps and userspace * Little more cleanup. * Update keyboards/lily58/keymaps/muppetjones/rules.mk Co-authored-by: Ryan * Rollback accidental libchibios update * Apply suggestions from code review Co-authored-by: Drashna Jaelre * Update kyria keymap * Move kyria keymap to splitkb/kyria * Update planck keymap * Remove all changes to keyboards/lily58/lib/layer_state_reader.c * Update lily58 keymap * Recommended change * Update keymap readme * Update kyria keymap and userspace * Apply suggestions from code review Co-authored-by: Drashna Jaelre * Renamed users/muppetjones/README.md to lc * Update keyboards/lily58/keymaps/muppetjones/config.h Co-authored-by: Drashna Jaelre Co-authored-by: Drashna Jaelre Co-authored-by: Joel Challis Co-authored-by: Ryan --- keyboards/lily58/keymaps/muppetjones/README.md | 13 + keyboards/lily58/keymaps/muppetjones/config.h | 44 +++ .../keymaps/muppetjones/features/bongo_cat.c | 127 +++++++ .../keymaps/muppetjones/features/bongo_cat.h | 14 + keyboards/lily58/keymaps/muppetjones/keymap.c | 240 ++++++++++++ keyboards/lily58/keymaps/muppetjones/rules.mk | 17 + keyboards/planck/keymaps/muppetjones/.clang-format | 26 ++ keyboards/planck/keymaps/muppetjones/config.h | 56 +++ keyboards/planck/keymaps/muppetjones/keymap.c | 403 +++++++++++++++++++++ keyboards/planck/keymaps/muppetjones/readme.md | 2 + keyboards/planck/keymaps/muppetjones/rules.mk | 5 + .../kyria/keymaps/muppetjones/.clang-format | 26 ++ .../splitkb/kyria/keymaps/muppetjones/README.md | 11 + .../splitkb/kyria/keymaps/muppetjones/config.h | 60 +++ .../splitkb/kyria/keymaps/muppetjones/keymap.c | 276 ++++++++++++++ .../splitkb/kyria/keymaps/muppetjones/rules.mk | 11 + 16 files changed, 1331 insertions(+) create mode 100644 keyboards/lily58/keymaps/muppetjones/README.md create mode 100644 keyboards/lily58/keymaps/muppetjones/config.h create mode 100644 keyboards/lily58/keymaps/muppetjones/features/bongo_cat.c create mode 100644 keyboards/lily58/keymaps/muppetjones/features/bongo_cat.h create mode 100644 keyboards/lily58/keymaps/muppetjones/keymap.c create mode 100644 keyboards/lily58/keymaps/muppetjones/rules.mk create mode 100644 keyboards/planck/keymaps/muppetjones/.clang-format create mode 100644 keyboards/planck/keymaps/muppetjones/config.h create mode 100644 keyboards/planck/keymaps/muppetjones/keymap.c create mode 100644 keyboards/planck/keymaps/muppetjones/readme.md create mode 100644 keyboards/planck/keymaps/muppetjones/rules.mk create mode 100644 keyboards/splitkb/kyria/keymaps/muppetjones/.clang-format create mode 100644 keyboards/splitkb/kyria/keymaps/muppetjones/README.md create mode 100644 keyboards/splitkb/kyria/keymaps/muppetjones/config.h create mode 100644 keyboards/splitkb/kyria/keymaps/muppetjones/keymap.c create mode 100644 keyboards/splitkb/kyria/keymaps/muppetjones/rules.mk (limited to 'keyboards') diff --git a/keyboards/lily58/keymaps/muppetjones/README.md b/keyboards/lily58/keymaps/muppetjones/README.md new file mode 100644 index 0000000000..38cea9cfc2 --- /dev/null +++ b/keyboards/lily58/keymaps/muppetjones/README.md @@ -0,0 +1,13 @@ +# Lily58 + +```shell +qmk compile -kb lily58/rev1 -km muppetjones +``` + +``` +qmk flash -kb lily58/rev1 -km muppetjones -bl avrdude-split-left +``` + +``` +qmk flash -kb lily58/rev1 -km muppetjones -bl avrdude-split-right +``` diff --git a/keyboards/lily58/keymaps/muppetjones/config.h b/keyboards/lily58/keymaps/muppetjones/config.h new file mode 100644 index 0000000000..bee5ee45da --- /dev/null +++ b/keyboards/lily58/keymaps/muppetjones/config.h @@ -0,0 +1,44 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +/* Select hand configuration */ + +// 1 minute +#ifdef OLED_ENABLE +# define OLED_TIMEOUT 60000 +#endif + + +// Change "hold" time (default is 200 ms) +#define TAPPING_TERM 200 + +// Prevent normal rollover on alphas from accidentally triggering mods. +#define IGNORE_MOD_TAP_INTERRUPT + +// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. +#define TAPPING_FORCE_HOLD + +#undef RGBLED_NUM + +// Allows to use either side as the master. Look at the documentation for info: +// https://docs.qmk.fm/#/config_options?id=setting-handedness +#define EE_HANDS diff --git a/keyboards/lily58/keymaps/muppetjones/features/bongo_cat.c b/keyboards/lily58/keymaps/muppetjones/features/bongo_cat.c new file mode 100644 index 0000000000..23f6493efc --- /dev/null +++ b/keyboards/lily58/keymaps/muppetjones/features/bongo_cat.c @@ -0,0 +1,127 @@ +/** + * BONGO CAT! + +WPM-responsive animation of bongo cat! + +Source: + https://github.com/qmk/qmk_firmware/blob/master/keyboards/kyria/keymaps/j-inc/keymap.c +*/ + +#include QMK_KEYBOARD_H + +#ifdef OLED_ENABLE + +# define IDLE_FRAMES 5 +# define IDLE_SPEED 30 // below this wpm value your animation will idle + +// #define PREP_FRAMES 1 // uncomment if >1 + +# define TAP_FRAMES 2 +# define TAP_SPEED 40 // above this wpm value typing animation to triggere + +# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms +// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing +# define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024 + +uint32_t anim_timer = 0; +uint32_t anim_sleep = 0; +uint8_t current_idle_frame = 0; +// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1 +uint8_t current_tap_frame = 0; + +/* Animation */ + +static const char PROGMEM ANIM_IDLE[IDLE_FRAMES][ANIM_SIZE] = { + // clang-format off + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,64,64,64,64,32,32,32,32,16,8,4,2,2,4,24,96,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,194,1,1,2,2,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,96,0,129,130,130,132,8,16,32,64,128,0,0,0,0,128,128,128,128,64,64,64,64,32, + 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,25,6,0,0,0,0,0,0,0,24,24,24,27,3,0,64,160,34,36,20,18,18,18,11,8,8,8,8,5,5,9,9,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,8,4,2,2,2,4,56,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,226,1,1,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,64,64, + 32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + // clang-format on +}; + +// Prep animation +static const char PROGMEM ANIM_PREP[][ANIM_SIZE] = { + // clang-format off + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,195,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + // clang-format on +}; + +// Typing animation +static const char PROGMEM ANIM_TAP[TAP_FRAMES][ANIM_SIZE] = { + // clang-format off + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,248,248,248,248,0,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,1,2,4,8,16,32,67,135,7,1,0,184,188,190,159, + 95,95,79,76,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,67,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,61,124,252,252,252,252,252,60,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,64,64,32, + 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,0,0,0,1,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,122,122,121,121,121,121,57,49,2,2,4,4,8,8,8,136,136,135,128, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + // clang-format on +}; + +/* Functions */ + + +void animation_phase(uint8_t wpm) { + // NOTE: Optimized the conditional. We don't need to recheck each. + // NOTE: Move this and the animation outside of the function. + + if (IDLE_SPEED >= wpm) { + current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; + oled_write_raw_P(ANIM_IDLE[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE); + } else if (TAP_SPEED > wpm) { + oled_write_raw_P(ANIM_PREP[0], ANIM_SIZE); + } else { + current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; + oled_write_raw_P(ANIM_TAP[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE); + } +} + +// Images credit j-inc(/James Incandenza) and pixelbenny. Credit to obosob for initial animation approach. +void render_bongo_cat(void) { + const uint8_t curr_wpm = get_current_wpm(); + + if (curr_wpm > 000) { + oled_on(); + anim_sleep = timer_read32(); + } else if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { + oled_off(); + return; + } + + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(curr_wpm); + } +} + +#endif diff --git a/keyboards/lily58/keymaps/muppetjones/features/bongo_cat.h b/keyboards/lily58/keymaps/muppetjones/features/bongo_cat.h new file mode 100644 index 0000000000..1025ccfa1b --- /dev/null +++ b/keyboards/lily58/keymaps/muppetjones/features/bongo_cat.h @@ -0,0 +1,14 @@ +/** + * BONGO CAT! + +WPM-responsive animation of bongo cat! + +Source: + https://github.com/qmk/qmk_firmware/blob/master/keyboards/kyria/keymaps/j-inc/keymap.c +*/ + +#pragma once + +const char *wpm_state(void); +void animation_phase(uint8_t wpm); +void render_bongo_cat(void); diff --git a/keyboards/lily58/keymaps/muppetjones/keymap.c b/keyboards/lily58/keymaps/muppetjones/keymap.c new file mode 100644 index 0000000000..6e02482289 --- /dev/null +++ b/keyboards/lily58/keymaps/muppetjones/keymap.c @@ -0,0 +1,240 @@ +/* Copyright 2020 Stephen J. Bush + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H +#include "muppetjones.h" +#include "features/bongo_cat.h" +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +/* + * qmk compile -kb lily58/rev1 -km muppetjones + */ + +// GACS (Lower) +#define HR_LBRC LCTL_T(KC_LBRC) +#define HR_RBRC LSFT_T(KC_RBRC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + +/* Colemak DH + * ,-----------------------------------------. ,-----------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BADJ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | F | P | B | | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | A | R | S | T | G |-------. ,-------| M | N | E | I | O | ' | + * |------+------+------+------+------+------| Raise | | Lower |------+------+------+------+------+------| + * |LShift| Z | X | C | D | V |-------| |-------| K | H | , | . | / |Enter | + * `-----------------------------------------/ / \ \-----------------------------------------' + * | Alt | LGUI |LOWER | /Space / \Space \ |RAISE | Ctrl | RGUI | + * | | | |/ / \ \ | | | | + * `----------------------------' '------''--------------------' + */ +[_CLMK_DH] = LAYOUT_wrapper( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_CAPS, __BLANK____________________________________, KC_BSPC, + KC_CAPS, __COLEMAK_MOD_DH_L1________________________, __COLEMAK_MOD_DH_R1_W_QUOT_________________, KC_BSPC, + HY_ESC, __COLEMAK_MOD_DH_L2_W_GACS_________________, __COLEMAK_MOD_DH_R2_W_SCAG_________________, KC_QUOT, + TD_LAYR, __COLEMAK_MOD_DH_L3_W_SFTV_________________, KC_CAPS, KC_TAB, __COLEMAK_MOD_DH_R3________________________, KC_SFTENT, + XXXXXXX, XXXXXXX, HY_ESC, LOW_ENT, NAV_SPC, HY_BSPC, XXXXXXX, XXXXXXX +), + +/* QWERTY + * ,-----------------------------------------. ,-----------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI | + * | | | |/ / \ \ | | | | + * `----------------------------' '------''--------------------' + */ +[_QWERTY] = LAYOUT_wrapper( + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __QWERTY_L1________________________________, __QWERTY_R1________________________________, _______, + _______, __QWERTY_L2________________________________, __QWERTY_R2________________________________, _______, + _______, __QWERTY_L3________________________________, _______, _______, __QWERTY_R3________________________________, _______, + _______, _______, _______, _______, _______, _______, _______, _______ +), +[_MOUSE] = LAYOUT_wrapper( + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __BLANK____________________________________, _______, _______, __BLANK____________________________________, _______, + KC_BTN1, __BLANK____________________________________, _______, KC_BTN2 +), + +/* LOWER + * ,-----------------------------------------. ,-----------------------------------------. + * | ` | | Mute | Vol- | Vol+ | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ~ | | | ` | | ( | | ) | 7 | 8 | 9 | \ | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | GUI | ALT | _ | - | { |-------. ,-------| } | 4 | 5 | 6 | * | ` | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * | | | | + | = | [ |-------| |-------| ] | 1 | 2 | 3 | | |Enter | + * `-----------------------------------------/ / \ \-----------------------------------------' + * | | |LOWER | / / \ \ | 0 | . | = | + * | | | |/ / \ \ | | | | + * `----------------------------' '------''--------------------' + */ +[_LOWER] = LAYOUT_wrapper( + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __SYMBOLS_L1_______________________________, __NUMPAD_R1________________________________, _______, + _______, __SYMBOLS_L2_______________________________, __NUMPAD_R2________________________________, KC_COMM, + _______, __SYMBOLS_L3_______________________________, _______, _______, __NUMPAD_R3________________________________, KC_DOT, + _______, _______, _______, _______, KC_SPC, KC_0, KC_DOT, _______ +), +/* RAISE + * ,-----------------------------------------. ,-----------------------------------------. + * | |MS_A_0|MS_A_1|MS_A_2| | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | |MS_W_U| | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | GUI | ALT | CTL | SFT |MS_W_D|-------. ,-------| | Left | Down | Up |Right | | + * |------+------+------+------+------+------|MS_W_L | |MS_W_R |------+------+------+------+------+------| + * | | MS_L | MS_D | MS_U | MS_R | |-------| |-------| |MS_W_L|MS_W_D|MS_W_U|MS_W_R| | + * `-----------------------------------------/ / \ \-----------------------------------------' + * | | | MS_2 | / MS_1 / \ \ |RAISE | | | + * | | | |/ / \ \ | | | | + * `----------------------------' '------''--------------------' + // */ + +[_RAISE] = LAYOUT_wrapper( + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __SYMBOLS_L1_______________________________, __NAV_R1___________________________________, _______, + _______, __SYMBOLS_L2_______________________________, __NAV_R2___________________________________, _______, + _______, __SYMBOLS_L3_______________________________, _______, _______, __NAV_R3___________________________________, _______, + _______, _______, _______, _______, _______, _______, _______, _______ +), +[_NAV] = LAYOUT_wrapper( + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __VIM_L1___________________________________, __NAV_R1___________________________________, _______, + _______, __BLANK_W_GACS_____________________________, __NAV_R2___________________________________, _______, + _______, __BLANK____________________________________, _______, _______, __NAV_R3___________________________________, _______, + _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* ADJUST + * ,-----------------------------------------. ,-----------------------------------------. + * | | Reset| | | | | | Reset| | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | |-------. ,-------| | |RGB ON| HUE+ | SAT+ | VAL+ | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * | | | | | | |-------| |-------| | | MODE | HUE- | SAT- | VAL- | + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI | + * | | | |/ / \ \ | | | | + * `----------------------------' '------''--------------------' + */ +[_ADJUST] = LAYOUT_wrapper( + _______, __BLANK____________________________________, _______, CLMK_DH, QWERTY, _______, _______, _______, + RESET, __ADJUST_L1________________________________, __MEDIA_R1_________________________________, _______, + _______, __ADJUST_L2________________________________, __MEDIA_R2_________________________________, _______, + _______, __ADJUST_L3________________________________, _______, _______, __MEDIA_R3_________________________________, _______, + _______, _______, _______, _______, _______, _______, _______, _______ +) + + // clang-format on +}; + +// SSD1306 OLED update loop, make sure to enable OLED_DRIVER_ENABLE=yes in rules.mk +#ifdef OLED_ENABLE + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (!is_keyboard_master()) return OLED_ROTATION_180; // flips the display 180 degrees if offhand + return rotation; +} + +// When you add source files to SRC in rules.mk, you can use functions. +const char *read_layer_state_user(void); +void set_keylog(uint16_t keycode, keyrecord_t *record); +const char *read_keylog(void); +const char *read_keylogs(void); + +char layer_state_str[24]; + +const char *read_layer_state_user(void) { + // NOTE; + switch (get_highest_layer(layer_state)) { + case _CLMK_DH: + return "Layer: Colemak"; + break; + case _QWERTY: + return "Layer: QWERTY "; + break; + case _MOUSE: + return "Layer: Mouse "; + break; + case _LOWER: + return "Layer: Lower "; + break; + case _RAISE: + return "Layer: Raise "; + break; + case _NAV: + return "Layer: Nav "; + break; + case _ADJUST: + return "Layer: Adjust "; + break; + default: + break; + } + + char *layer_state_str = "Layer: Und- "; + layer_state_str[10] = '0' + layer_state % 10; + return layer_state_str; +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + // If you want to change the display of OLED, you need to change here + oled_write_ln(read_layer_state_user(), false); + oled_write_ln(read_keylog(), false); + oled_write_ln(read_keylogs(), false); + } else { + render_bongo_cat(); + oled_set_cursor(0, 6); + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), ' '), false); + } + return false; +} +#endif // OLED_DRIVER_ENABLE + +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { +#ifdef OLED_ENABLE + set_keylog(keycode, record); +#endif + // set_timelog(); + } + + // Regular user keycode case statement + switch (keycode) { + default: + return true; + } + + return true; +} diff --git a/keyboards/lily58/keymaps/muppetjones/rules.mk b/keyboards/lily58/keymaps/muppetjones/rules.mk new file mode 100644 index 0000000000..1323bea893 --- /dev/null +++ b/keyboards/lily58/keymaps/muppetjones/rules.mk @@ -0,0 +1,17 @@ +OLED_ENABLE= yes # OLED display +WPM_ENABLE = yes +TAP_DANCE_ENABLE = yes +COMBO_ENABLE = yes +EXTRAKEY_ENABLE = yes + +# If you want to change the display of OLED, you need to change here +# SRC += ./lib/rgb_state_reader.c +SRC += ./lib/layer_state_reader.c +SRC += ./lib/logo_reader.c +SRC += ./lib/keylogger.c +SRC += ./features/bongo_cat.c + +# Reduce firmware size +# https://thomasbaart.nl/2018/12/01/reducing-firmware-size-in-qmk/ +# also requires in config.h +LTO_ENABLE = yes diff --git a/keyboards/planck/keymaps/muppetjones/.clang-format b/keyboards/planck/keymaps/muppetjones/.clang-format new file mode 100644 index 0000000000..df3dbd17b4 --- /dev/null +++ b/keyboards/planck/keymaps/muppetjones/.clang-format @@ -0,0 +1,26 @@ +--- +BasedOnStyle: Google +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: 'true' +AlignConsecutiveDeclarations: 'true' +AlignOperands: 'true' +AllowAllParametersOfDeclarationOnNextLine: 'false' +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'false' +BinPackArguments: 'true' +BinPackParameters: 'true' +ColumnLimit: '160' +IndentCaseLabels: 'true' +IndentPPDirectives: AfterHash +IndentWidth: '4' +MaxEmptyLinesToKeep: '1' +PointerAlignment: Right +SortIncludes: 'false' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: 'false' +TabWidth: '4' +UseTab: Never + +... diff --git a/keyboards/planck/keymaps/muppetjones/config.h b/keyboards/planck/keymaps/muppetjones/config.h new file mode 100644 index 0000000000..1046d21499 --- /dev/null +++ b/keyboards/planck/keymaps/muppetjones/config.h @@ -0,0 +1,56 @@ + /* Copyright 2020 Stephen Bush + * + * 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. + */ +#pragma once + +#ifdef AUDIO_ENABLE +# define STARTUP_SONG SONG(PLANCK_SOUND) +// #define STARTUP_SONG SONG(NO_SOUND) + +# define DEFAULT_LAYER_SONGS \ + { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) } +#endif + +/* + * MIDI options + */ + +/* 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 + +/* + * Other options + */ + +// Enable lighting layers +#define RGBLIGHT_LAYERS +#define RGBLIGHT_SLEEP + +// Change "hold" time (default is 200 ms) +#define TAPPING_TERM 200 + +// Prevent normal rollover on alphas from accidentally triggering mods. +#define IGNORE_MOD_TAP_INTERRUPT + +// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. +#define TAPPING_FORCE_HOLD diff --git a/keyboards/planck/keymaps/muppetjones/keymap.c b/keyboards/planck/keymaps/muppetjones/keymap.c new file mode 100644 index 0000000000..518ab43233 --- /dev/null +++ b/keyboards/planck/keymaps/muppetjones/keymap.c @@ -0,0 +1,403 @@ +/* Copyright 2020 Stephen Bush + * + * 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 . + */ + +/* + * qmk compile -kb planck/rev6 -km muppetjones + */ + +#include QMK_KEYBOARD_H +#include "muse.h" +#include "muppetjones.h" + +#define LAYOUT_planck_wrapper(...) LAYOUT_planck_grid(__VA_ARGS__) + +/* Extend layers from muppetjones.h + _CLMK_DH = 0, + _QWERTY + _MOUSE, + _LOWER, + _RAISE, + _NAV, + _ADJUST, + */ +enum planck_layers { + _PLOVER = _ADJUST + 1, +}; + +enum planck_keycodes { + PLOVER = SAFE_RANGE, + BACKLIT, + EXT_PLV, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + +/* Colemak DH II + * ,-----------------------------------------------------------------------------------. + * | Q | W | F | P | B | Del | Bksp | J | L | U | Y | ; | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | A | R | S | T | G | | " | M | N | E | I | O | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Z | X | C | D | V SFT| Enter| Tab | K | H | , | . | / | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt |HY_ESC|Lower | Space |Raise |HY_ESC| Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_CLMK_DH] = LAYOUT_planck_wrapper( + __COLEMAK_MOD_DH_L1________________________, KC_DEL, KC_BSPC, __COLEMAK_MOD_DH_R1_W_QUOT_________________, + __COLEMAK_MOD_DH_L2_W_GACS_________________, CAPSWRD, KC_QUOT, __COLEMAK_MOD_DH_R2_W_SCAG_________________, + __COLEMAK_MOD_DH_L3_W_SFTV_________________, KC_ENT, KC_TAB, __COLEMAK_MOD_DH_R3________________________, + TD_LAYR, XXXXXXX, XXXXXXX, HY_ESC, LOW_ENT, KC_BSPC, KC_BSPC, RAI_SPC, HY_ESC, KC_BSPC, XXXXXXX, XXXXXXX +), + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_planck_wrapper( + __QWERTY_L1________________________________, _______, _______, __QWERTY_R1________________________________, + __QWERTY_L2________________________________, _______, _______, __QWERTY_R2________________________________, + __QWERTY_L3________________________________, _______, _______, __QWERTY_R3________________________________, + __BLANK____________________________________, _______, _______, __BLANK____________________________________ +), + +/* MOUSE + * No encoders. Just an empty layer. + */ +[_MOUSE] = LAYOUT_planck_wrapper( + __BLANK____________________________________, _______, _______, __BLANK____________________________________, + __BLANK____________________________________, _______, _______, __BLANK____________________________________, + __BLANK____________________________________, _______, _______, __BLANK____________________________________, + __BLANK____________________________________, _______, _______, __BLANK____________________________________ +), + +// /* Colemak DH +// * ,-----------------------------------------------------------------------------------. +// * | Tab | Q | W | F | P | B | J | L | U | Y | ; | Bksp | +// * |------+------+------+------+------+------+------+------+------+------+------+------| +// * | Esc | A | R | S | T | G | M | N | E | I | O | " | +// * |------+------+------+------+------+------+------+------+------+------+------+------| +// * | Shift| Z | X | C | D | V | K | H | , | . | / |Enter | +// * |------+------+------+------+------+------+------+------+------+------+------+------| +// * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | +// * `-----------------------------------------------------------------------------------' +// */ +// [_CLMK_DH] = LAYOUT_planck_grid( +// KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, +// HY_ESC, HOME_A, HOME_R, HOME_S, HOME_T, KC_G, KC_M, HOME_N, HOME_E, HOME_I, HOME_O, KC_QUOT, +// KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT, +// KC_LCTL, NUMPD, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX +// ), +/* Lower (numpad, symbols) + * ,-----------------------------------------------------------------------------------. + * | | | ( | ) | ~ | | | | 7 & | 8 * | 9 ( | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | { | } | ` | | | - _ | 4 $ | 5 % | 6 ^ | * | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | [ | ] | | | | = + | 1 ! | 2 @ | 3 # | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | Space | | 0 | . | | | + * `-----------------------------------------------------------------------------------' + * 21.02.22: Removed F keys. + * 21.03.28: Completely revamped to contain 10-key numpad and symbols. + */ +[_LOWER] = LAYOUT_planck_wrapper( + __SYMBOLS_L1_______________________________, _______, _______, __NUMPAD_R1________________________________, + __SYMBOLS_L2_______________________________, _______, _______, __NUMPAD_R2________________________________, + __SYMBOLS_L3_______________________________, _______, _______, __NUMPAD_R3________________________________, + _______, _______, _______, _______, _______, _______, _______, __NUMPAD_R4________________________________ +), + +/* Raise +* ,-----------------------------------------------------------------------------------. +* | ` | | | | | | | Pg Up| HOME | | END | | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | GUI | ALT | CTL | SFT | | | | Pg Dn| LEFT | DOWN | UP |RIGHT | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | | | | | | | | | | | | | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | | | | | | | | Next | Vol- | Vol+ | Play | +* `-----------------------------------------------------------------------------------' +* 21.02.22: Removed F keys and replaced with useful programming keys. +*/ +[_RAISE] = LAYOUT_planck_wrapper( + XXXXXXX, XXXXXXX, KC_LPRN, KC_RPRN, XXXXXXX, _______, _______, __NAV_R1___________________________________, + KC_LGUI, KC_LALT, HR_LBRC, HR_RBRC, KC_MINS, _______, _______, __NAV_R2___________________________________, + XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_EQL, _______, _______, __NAV_R3___________________________________, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Nav + * Available in raise. + */ +[_NAV] = LAYOUT_planck_wrapper( + __BLANK____________________________________, _______, _______, __BLANK____________________________________, + __BLANK____________________________________, _______, _______, __BLANK____________________________________, + __BLANK____________________________________, _______, _______, __BLANK____________________________________, + __BLANK____________________________________, _______, _______, __BLANK____________________________________ +), + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = LAYOUT_planck_grid( + KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , + XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX +), + +/* Adjust (Lower + Raise) + * v------------------------RGB CONTROL--------------------v + * ,-----------------------------------------------------------------------------------. + * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | |Brite |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|CLMKII|Plover| | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|ClmkDH| | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_planck_wrapper( + __ADJUST_L1________________________________, MUV_IN, PLOVER, __MEDIA_R1_________________________________, + __ADJUST_L2________________________________, MUV_DE, CLMK_DH, __MEDIA_R2_________________________________, + __ADJUST_L3________________________________, MU_MOD, QWERTY, __MEDIA_R3_________________________________, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX +) + +/* + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' +[_ADJUST] = LAYOUT_planck_grid( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + + */ + // clang-format on +}; + +#ifdef AUDIO_ENABLE +float plover_song[][2] = SONG(PLOVER_SOUND); +float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); +#endif + +#define LIGHT_GOLDEN 30, 255, 100 +#define LIGHT_MAGENTA 213, 255, 100 +#define LIGHT_AZURE 148, 255, 100 + +// Define light layers +// -- e.g., light up LEDS 3-6 with RED when the numpd layer is active +const rgblight_segment_t PROGMEM rgb_clmk_dh[] = RGBLIGHT_LAYER_SEGMENTS({0, 9, HSV_RED}); +const rgblight_segment_t PROGMEM rgb_lower[] = RGBLIGHT_LAYER_SEGMENTS({0, 9, LIGHT_GOLDEN}); +const rgblight_segment_t PROGMEM rgb_raise[] = RGBLIGHT_LAYER_SEGMENTS({0, 9, LIGHT_MAGENTA}); +const rgblight_segment_t PROGMEM rgb_numpd[] = RGBLIGHT_LAYER_SEGMENTS({0, 9, LIGHT_AZURE}); + +const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(rgb_clmk_dh, rgb_lower, rgb_raise, rgb_numpd); + +void keyboard_post_init_user(void) { + rgblight_layers = rgb_layers; // Enable the LED layers +} + +layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(1, layer_state_cmp(state, _LOWER)); + rgblight_set_layer_state(2, layer_state_cmp(state, _RAISE)); + return state; +} + +bool process_record_keymap(uint16_t keycode, keyrecord_t* record) { + switch (keycode) { + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); +#ifdef BACKLIGHT_ENABLE + backlight_step(); +#endif +#ifdef KEYBOARD_planck_rev5 + writePinLow(E6); +#endif + } else { + unregister_code(KC_RSFT); +#ifdef KEYBOARD_planck_rev5 + writePinHigh(E6); +#endif + } + return false; + break; + case PLOVER: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(plover_song); +#endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(plover_gb_song); +#endif + layer_off(_PLOVER); + } + return false; + break; + } + + return true; +} + +bool muse_mode = false; +uint8_t last_muse_note = 0; +uint16_t muse_counter = 0; +uint8_t muse_offset = 70; +uint16_t muse_tempo = 50; + +bool encoder_update(bool clockwise) { + if (muse_mode) { + if (IS_LAYER_ON(_RAISE)) { + if (clockwise) { + muse_offset++; + } else { + muse_offset--; + } + } else { + if (clockwise) { + muse_tempo += 1; + } else { + muse_tempo -= 1; + } + } + } else { + if (clockwise) { +#ifdef MOUSEKEY_ENABLE + tap_code(KC_MS_WH_DOWN); +#else + tap_code(KC_PGDN); +#endif + } else { +#ifdef MOUSEKEY_ENABLE + tap_code(KC_MS_WH_UP); +#else + tap_code(KC_PGUP); +#endif + } + } + return true; +} + +void dip_switch_update_user(uint8_t index, bool active) { + switch (index) { + case 0: { +#ifdef AUDIO_ENABLE + static bool play_sound = false; +#endif + if (active) { +#ifdef AUDIO_ENABLE + if (play_sound) { + PLAY_SONG(plover_song); + } +#endif + layer_on(_ADJUST); + } else { +#ifdef AUDIO_ENABLE + if (play_sound) { + PLAY_SONG(plover_gb_song); + } +#endif + layer_off(_ADJUST); + } +#ifdef AUDIO_ENABLE + play_sound = true; +#endif + break; + } + case 1: + if (active) { + muse_mode = true; + } else { + muse_mode = false; + } + } +} + +void matrix_scan_user(void) { +#ifdef AUDIO_ENABLE + if (muse_mode) { + if (muse_counter == 0) { + uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()]; + if (muse_note != last_muse_note) { + stop_note(compute_freq_for_midi_note(last_muse_note)); + play_note(compute_freq_for_midi_note(muse_note), 0xF); + last_muse_note = muse_note; + } + } + muse_counter = (muse_counter + 1) % muse_tempo; + } else { + if (muse_counter) { + stop_all_notes(); + muse_counter = 0; + } + } +#endif +} + +bool music_mask_user(uint16_t keycode) { + switch (keycode) { + case RAISE: + case LOWER: + return false; + default: + return true; + } +} diff --git a/keyboards/planck/keymaps/muppetjones/readme.md b/keyboards/planck/keymaps/muppetjones/readme.md new file mode 100644 index 0000000000..de9680b498 --- /dev/null +++ b/keyboards/planck/keymaps/muppetjones/readme.md @@ -0,0 +1,2 @@ +# The Default Planck Layout + diff --git a/keyboards/planck/keymaps/muppetjones/rules.mk b/keyboards/planck/keymaps/muppetjones/rules.mk new file mode 100644 index 0000000000..1db412715d --- /dev/null +++ b/keyboards/planck/keymaps/muppetjones/rules.mk @@ -0,0 +1,5 @@ +SRC += muse.c + +MOUSEKEY_ENABLE = yes +TAP_DANCE_ENABLE = yes +COMBO_ENABLE = yes diff --git a/keyboards/splitkb/kyria/keymaps/muppetjones/.clang-format b/keyboards/splitkb/kyria/keymaps/muppetjones/.clang-format new file mode 100644 index 0000000000..df3dbd17b4 --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/muppetjones/.clang-format @@ -0,0 +1,26 @@ +--- +BasedOnStyle: Google +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: 'true' +AlignConsecutiveDeclarations: 'true' +AlignOperands: 'true' +AllowAllParametersOfDeclarationOnNextLine: 'false' +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'false' +BinPackArguments: 'true' +BinPackParameters: 'true' +ColumnLimit: '160' +IndentCaseLabels: 'true' +IndentPPDirectives: AfterHash +IndentWidth: '4' +MaxEmptyLinesToKeep: '1' +PointerAlignment: Right +SortIncludes: 'false' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: 'false' +TabWidth: '4' +UseTab: Never + +... diff --git a/keyboards/splitkb/kyria/keymaps/muppetjones/README.md b/keyboards/splitkb/kyria/keymaps/muppetjones/README.md new file mode 100644 index 0000000000..20fdd47025 --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/muppetjones/README.md @@ -0,0 +1,11 @@ +# Kyria + +## Compile + +```shell +make splitkb/kyria/rev1:muppetjones:avrdude-split-left +``` + +```shell +make splitkb/kyria/rev1:muppetjones:avrdude-split-right +``` diff --git a/keyboards/splitkb/kyria/keymaps/muppetjones/config.h b/keyboards/splitkb/kyria/keymaps/muppetjones/config.h new file mode 100644 index 0000000000..92d495be4a --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/muppetjones/config.h @@ -0,0 +1,60 @@ +/* Copyright 2020 Stephen Bush + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#ifdef OLED_ENABLE +# define OLED_DISPLAY_128X64 +#endif + +// If you are using an Elite C rev3 on the slave side, uncomment the lines below: +// #define SPLIT_USB_DETECT +// #define NO_USB_STARTUP_CHECK + +// EC11K encoders have a different resolution than other EC11 encoders. +// When using the default resolution of 4, if you notice your encoder skipping +// every other tick, lower the resolution to 2. +#define ENCODER_RESOLUTION 2 +#define ENCODER_DIRECTION_FLIP + +// The Leader key allows to flexibly assign macros to key sequences. +#define LEADER_PER_KEY_TIMING +#define LEADER_TIMEOUT 350 + +// Change "hold" time (default is 200 ms) +// -- used for tap dance and other tap mods +// -- defined in user namespace +// #define TAPPING_TERM 200 + +// Prevent normal rollover on alphas from accidentally triggering mods. +#define IGNORE_MOD_TAP_INTERRUPT + +// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. +#define TAPPING_FORCE_HOLD + +// Reduce firmware size +// https://thomasbaart.nl/2018/12/01/reducing-firmware-size-in-qmk/ +// also requires EXTRAFLAGS in config.h +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + +// Allows to use either side as the master. Look at the documentation for info: +// https://docs.qmk.fm/#/config_options?id=setting-handedness +#define EE_HANDS + +// Allows media codes to properly register in macros and rotary encoder code +#define TAP_CODE_DELAY 10 +#define COMBO_TERM 40 diff --git a/keyboards/splitkb/kyria/keymaps/muppetjones/keymap.c b/keyboards/splitkb/kyria/keymaps/muppetjones/keymap.c new file mode 100644 index 0000000000..ca4a306341 --- /dev/null +++ b/keyboards/splitkb/kyria/keymaps/muppetjones/keymap.c @@ -0,0 +1,276 @@ +/* Copyright 2020 Stephen J. Bush + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H +#include "muppetjones.h" +#include "rgblight.h" + +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +/* Layers from muppetjones.h + _CLMK_DH = 0, + _MOUSE, + _LOWER, + _RAISE, + _NAV, + _ADJUST, + */ + +/* + * Custom Keys + */ + +#ifdef ENCODER_ENABLE +bool encoder_update_standard(uint8_t index, bool clockwise); +#endif + +/* + * LAYERS + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off +/* + * Base Layer: Colemak DH + * + * ,-------------------------------------------. ,-------------------------------------------. + * |CAPSWORD| Q | W | F | P | B | | J | L | U | Y | ; : | | \ | + * |--------+------+------+------+------+------| |------+------+------+------+------+--------| + * |ESC/HYPR| A | R | S | T | G | | M | N | E | I | O | ' " | + * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------| + * | LShift | Z | X | C | D | V |LShift|Leader| | Del | Tab | K | H | , < | . > | / ? | Sft/Ent| + * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------' + * | MUTE | Del | Enter| Space| Enter| | Bspc | Space| Hyper| Tab | AltGr| + * | | | Alt | Lower| Raise| | | Nav | Esc | Raise| | + * `----------------------------------' `----------------------------------' + */ +[_CLMK_DH] = LAYOUT_wrapper( + CAPSWRD, __COLEMAK_MOD_DH_L1________________________, __COLEMAK_MOD_DH_R1_W_QUOT_________________, KC_BSLS, + HY_ESC, __COLEMAK_MOD_DH_L2_W_GACS_________________, __COLEMAK_MOD_DH_R2_W_SCAG_________________, KC_QUOT, + TD_LAYR, __COLEMAK_MOD_DH_L3________________________, KC_LSFT, KC_LEAD, KC_DEL, KC_TAB, __COLEMAK_MOD_DH_R3________________________, KC_SFTENT, + KC_MUTE, KC_DEL, HY_ESC, LOW_BSP, RAI_ENT, KC_BSPC, NAV_SPC, HY_ESC, RAI_TAB, KC_RALT +), +[_QWERTY] = LAYOUT_wrapper( + _______, __QWERTY_L1________________________________, __QWERTY_R1________________________________, _______, + _______, __QWERTY_L2________________________________, __QWERTY_R2________________________________, _______, + _______, __QWERTY_L3________________________________, _______, _______, _______, _______, __QWERTY_R3________________________________, _______, + __BLANK____________________________________, __BLANK____________________________________ +), +[_MOUSE] = LAYOUT_wrapper( + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __BLANK____________________________________, __BLANK____________________________________, _______, + _______, __BLANK____________________________________, _______, _______, _______, _______, __BLANK____________________________________, _______, + KC_BTN1, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2 +), +/* + * Lower Layer: Numpad and some symbols + * + * ,-------------------------------------------. ,-------------------------------------------. + * | | ~ | ` | ( | ) | xxxx | | / ? | 7 & | 8 * | 9 ( | - _ |