~ruther/qmk_firmware

a2cec0594b15dc667adf7f1b0e35cb698dc1758d — Drashna Jaelre 6 years ago 6d73fe1
[Keymap] Update to Drashna Keymaps (#5594)

* Start to standardize macro timer

* Update Fractal layout

Specifically, limit the RGB Lighting, since it's too many for the power, and only have the KITT annimation on the front

* Update Iris keymap to use I2C for transport

* Remove TAP_CODE_DELAY from keyboard in favor of global setting

* Remove Woodpad

Since it\'s no longer in my possession

* Only enable LTO on AVR boards

* Run matrix_scans while doing startup light

* Run matrix_scan to get split keyboard code synced properly

* Fix rgb mode

* Remove custom debouncing settings

* Make RGB Light Startup Animation optional

* Fix opt def

* Remove extra tap code delay value

* Fix references to keebio boards

* Add support for LP Iris keyboard

* Add backlight code

* Make startup animation optional

* Update gitlab ci script

* Remove port declaration

* Revert avrgcc changes to gitlab ci file

* Don't re-set mods

* Remove MACRO_TIMER define

* Add custom name for crkbd

* Add name for Prime M pad

* Add names for ortho 4x12 boards

* Add some additional handling for rgb init

* Change thumb clusters on ergodox

* Switch Orthodox to I2C

* Fix Space in ergodox keymap

* Use OSL for ergodox layout

* Ugh, can't find a good layout

* Fix typo

* Fix up animation startup

* Cries in AVR

* Fix makefiles for ergodox ez boards

* Add support for "secret songs" in my userspace

* Reset debounce to 5ms for Ergodox EZ

* Fix gitlab CI yaml file

* More crying in AVR

* Cannot use rgb light and rgb matrix at the same time due to the WS2812 rgb matrix PR until the "Coexistance" PR is merged

* Update ODox for split common and i2c

* Add split config

* Impement Split code

* Add support for xscorpion OLED code

* Add OLED display config

* Fix OLED screen font

* Get OLED set up in vertical mode

* Remove old OLED code

* add per key support for crkbd

* Fix split changes

* RGB Tweeaks

* More OLED tweaks

* Fix rotation stuff

* Fix more OLED stuff

* Remove custom Debounce from Ergodox layout since it's no longer needed
38 files changed, 569 insertions(+), 300 deletions(-)

M keyboards/crkbd/keymaps/drashna/config.h
A keyboards/crkbd/keymaps/drashna/glcdfont.c
M keyboards/crkbd/keymaps/drashna/keymap.c
M keyboards/crkbd/keymaps/drashna/rules.mk
D keyboards/handwired/woodpad/keymaps/drashna/README.md
D keyboards/handwired/woodpad/keymaps/drashna/config.h
D keyboards/handwired/woodpad/keymaps/drashna/keymap.c
D keyboards/handwired/woodpad/keymaps/drashna/rules.mk
M keyboards/keebio/iris/keymaps/drashna/config.h
M keyboards/keebio/iris/keymaps/drashna/keymap.c
M keyboards/keebio/iris/keymaps/drashna/rules.mk
A keyboards/keebio/iris/keymaps/drashna_lp/config.h
A keyboards/keebio/iris/keymaps/drashna_lp/keymap.c
A keyboards/keebio/iris/keymaps/drashna_lp/rules.mk
M keyboards/keebio/iris/keymaps/drashna_old/config.h
M keyboards/orthodox/keymaps/drashna/config.h
M keyboards/orthodox/keymaps/drashna/keymap.c
M keyboards/orthodox/keymaps/drashna/rules.mk
M layouts/community/ergodox/drashna/config.h
M layouts/community/ergodox/drashna/keymap.c
M layouts/community/ergodox/drashna/rules.mk
M layouts/community/ergodox/drashna_glow/config.h
M layouts/community/ergodox/drashna_glow/rules.mk
M layouts/community/numpad_5x6/drashna/config.h
M layouts/community/numpad_5x6/drashna/rules.mk
M layouts/community/ortho_4x12/drashna/config.h
M layouts/community/ortho_4x12/drashna/keymap.c
M layouts/community/ortho_4x12/drashna/rules.mk
M layouts/community/ortho_5x12/drashna/config.h
A users/drashna/.gitignore
M users/drashna/.gitlab-ci.yml
M users/drashna/config.h
M users/drashna/drashna.c
M users/drashna/drashna.h
M users/drashna/process_records.c
M users/drashna/process_records.h
M users/drashna/rgb_stuff.c
M users/drashna/rules.mk
M keyboards/crkbd/keymaps/drashna/config.h => keyboards/crkbd/keymaps/drashna/config.h +10 -1
@@ 27,7 27,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
#define EE_HANDS

#define SSD1306OLED
// #define SSD1306OLED

#define USE_SERIAL_PD2



@@ 48,3 48,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define B6_AUDIO
// #define NO_MUSIC_MODE
#endif

#undef PRODUCT
#define PRODUCT Drashna Hacked Corne Keyboard

#define OLED_FONT_H "keyboards/crkbd/keymaps/drashna/glcdfont.c"
// #define OLED_FONT_WIDTH 5
// #define OLED_FONT_HEIGHT 7

#define TAPPING_TERM_PER_KEY

A keyboards/crkbd/keymaps/drashna/glcdfont.c => keyboards/crkbd/keymaps/drashna/glcdfont.c +240 -0
@@ 0,0 1,240 @@
#pragma once

#ifdef __AVR__
 #include <avr/io.h>
 #include <avr/pgmspace.h>
#elif defined(ESP8266)
 #include <pgmspace.h>
#else
 #define PROGMEM
#endif

// Helidox 8x6 font with QMK Firmware Logo
// Online editor: http://teripom.x0.com/

const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0,
0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0,
0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0,
0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0,
0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFE,
0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF,
0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F,
0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F,
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F,
0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C,
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x03, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
0x01, 0x03, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x03, 0x01,
0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x07, 0x07, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
0x07, 0x00, 0x00, 0x00, 0x01, 0x03,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x03, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

M keyboards/crkbd/keymaps/drashna/keymap.c => keyboards/crkbd/keymaps/drashna/keymap.c +123 -0
@@ 7,6 7,9 @@
#ifdef SSD1306OLED
  #include "ssd1306.h"
#endif
#ifdef OLED_DRIVER_ENABLE
  #include "oled_driver.h"
#endif

extern keymap_config_t keymap_config;
extern uint8_t is_master;


@@ 288,3 291,123 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
}

#endif


#ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
  if (is_master) {
    return OLED_ROTATION_270;
  } else {
    return rotation;
  }
}

void render_crkbd_logo(void) {
  static const char PROGMEM crkbd_logo[] = {
      0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
      0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
      0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
      0};
  oled_write_P(crkbd_logo, false);
}


void render_status(void) {

  oled_write_P(PSTR("Layer"), false);
  switch (biton32(layer_state)) {
    case 0:
      oled_write_P(PSTR("Base "), false);
      break;
    case _RAISE:
      oled_write_P(PSTR("Raise"), false);
      break;
    case _LOWER:
      oled_write_P(PSTR("Lower"), false);
      break;
    case _ADJUST:
      oled_write_P(PSTR("Adjst"), false);
      break;
    default:
      oled_write_P(PSTR("Unkn "), false);
      break;
  }
  oled_write_P(PSTR("Lyout"), false);
  switch (biton32(default_layer_state)) {
    case _QWERTY:
      oled_write_P(PSTR("QWRTY"), false);
      break;
    case _COLEMAK:
      oled_write_P(PSTR("COLMK"), false);
      break;
    case _DVORAK:
      oled_write_P(PSTR("DVRAK"), false);
      break;
    case _WORKMAN:
      oled_write_P(PSTR("WRKMN"), false);
      break;
    case _NORMAN:
      oled_write_P(PSTR("NORMN"), false);
      break;
    case _MALTRON:
      oled_write_P(PSTR("MLTRN"), false);
      break;
    case _EUCALYN:
      oled_write_P(PSTR("ECLYN"), false);
      break;
    case _CARPLAX:
      oled_write_P(PSTR("CRPLX"), false);
      break;
  }

  uint8_t modifiers = get_mods();
  uint8_t one_shot = get_oneshot_mods();

  oled_write_P(PSTR("Mods:"), false);
  oled_write_P( (modifiers & MOD_MASK_CTRL  || one_shot & MOD_MASK_CTRL ) ? PSTR(" CTL ") : PSTR("     "), false);
  oled_write_P( (modifiers & MOD_MASK_GUI   || one_shot & MOD_MASK_GUI  ) ? PSTR(" GUI ") : PSTR("     "), false);
  oled_write_P( (modifiers & MOD_MASK_ALT   || one_shot & MOD_MASK_ALT  ) ? PSTR(" ALT ") : PSTR("     "), false);
  oled_write_P( (modifiers & MOD_MASK_SHIFT || one_shot & MOD_MASK_SHIFT) ? PSTR(" SFT ") : PSTR("     "), false);


  oled_write_P(PSTR("BTMGK"), false);
  static const char PROGMEM mode_logo[4][4] = {
    {0x95,0x96,0x0a,0},
    {0xb5,0xb6,0x0a,0},
    {0x97,0x98,0x0a,0},
    {0xb7,0xb8,0x0a,0} };

  if (keymap_config.swap_lalt_lgui != false) {
    oled_write_P(mode_logo[0], false);
    oled_write_P(mode_logo[1], false);
  } else {
    oled_write_P(mode_logo[2], false);
    oled_write_P(mode_logo[3], false);
  }

  uint8_t led_usb_state = host_keyboard_leds();
  oled_write_P(PSTR("Lock:"), false);
  oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK)    ? PSTR(" NUM ") : PSTR("     "), false);
  oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK)   ? PSTR(" CAPS") : PSTR("     "), false);
  oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR(" SCRL") : PSTR("     "), false);
}


void oled_task_user(void) {
  if (is_master) {
    render_status();     // Renders the current keyboard state (layer, lock, caps, scroll, etc)
  } else {
    render_crkbd_logo();
    oled_scroll_left();  // Turns on scrolling
  }
}
#endif

uint16_t get_tapping_term(uint16_t keycode) {
  switch (keycode) {
    case ALT_T(KC_A):
      return TAPPING_TERM + 100;
    default:
      return TAPPING_TERM;
  }
}

M keyboards/crkbd/keymaps/drashna/rules.mk => keyboards/crkbd/keymaps/drashna/rules.mk +15 -22
@@ 3,31 3,24 @@
#   change to "no" to disable the options, or define them in the Makefile in
#   the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
CONSOLE_ENABLE = no         # Console for debug(+400)
COMMAND_ENABLE = no         # Commands for debug and configuration
NKRO_ENABLE = yes           # 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 = no            # 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 = yes       # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no      # Enable one-hand typing
BOOTMAGIC_ENABLE           = no  # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE            = no  # Mouse keys(+4700)
EXTRAKEY_ENABLE            = yes # Audio control and System control(+450)
CONSOLE_ENABLE             = no  # Console for debug(+400)
COMMAND_ENABLE             = no  # Commands for debug and configuration
NKRO_ENABLE                = yes # 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                = no  # 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            = yes # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE          = no  # Enable one-hand typing
RGBLIGHT_STARTUP_ANIMATION = yes

# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend

BOOTLOADER = qmk-dfu

# If you want to change the display of OLED, you need to change here
SRC +=  ./lib/glcdfont.c \
        ./lib/logo_reader.c \
        # ./lib/rgb_state_reader.c \
        # ./lib/keylogger.c \
        # ./lib/host_led_state_reader.c \
        # ./lib/mode_icon_reader.c \
        # ./lib/layer_state_reader.c \
        # ./lib/timelogger.c \
OLED_DRIVER_ENABLE = yes

D keyboards/handwired/woodpad/keymaps/drashna/README.md => keyboards/handwired/woodpad/keymaps/drashna/README.md +0 -25
@@ 1,25 0,0 @@
Overview
========

This is my personal Numpad (Woodpad) configuration, and my daily driver.

Most of the code resides in my userspace, rather than here, as I have multiple keyboards.

How to build 
------------
make handwired/woodpad:drashna:avrdude

Layers
------
* NUMLOCK: Num pad, locked to NUM LOCK enabled. 
* NAV: Navigation codes without needing to enable numlock. 
* DIABLO: This contains a Diablo 3 layout, that requires much less reaching or shifting. If Tap Dance is enabled, then it has a "spam" feature. See Userspace for details.
* MACROS: This layer contains a bunch of macros for spamming chat, with a toggle on what key to open up chat with. 
* MEDIA: Media and RGB commands

All layers have RGB specific indicators, so you can see what layer you're on by the underglow.

Woodpad Specific Code
---------------------

Aside from my userspace code, this includes LED indications for numlock and macro mode.  It also forces NUMLOCK to be enabled.

D keyboards/handwired/woodpad/keymaps/drashna/config.h => keyboards/handwired/woodpad/keymaps/drashna/config.h +0 -45
@@ 1,45 0,0 @@
/* Copyright 2017 REPLACE_WITH_YOUR_NAME
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef CONFIG_USER_H
#define CONFIG_USER_H

#include QMK_KEYBOARD_CONFIG_H

#if (defined(TAP_DANCE_ENABLE) && !defined(TAPPING_TERM))
#define TAPPING_TERM 200
#endif // TAP_DANCE_ENABLE


#define B5_AUDIO


#ifdef RGBLIGHT_ENABLE
#define RGB_DI_PIN D3
#define RGBLED_NUM 14     // Number of LEDs
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 12
#define RGBLIGHT_VAL_STEP 12
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 4
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#define RGBLIGHT_SLEEP
#endif // RGBLIGHT_ENABLE

#define FORCE_NKRO

#endif

D keyboards/handwired/woodpad/keymaps/drashna/keymap.c => keyboards/handwired/woodpad/keymaps/drashna/keymap.c +0 -95
@@ 1,95 0,0 @@
/* Copyright 2017 REPLACE_WITH_YOUR_NAME
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include QMK_KEYBOARD_H
#include "drashna.h"

 // Each layer gets a name for readability, which is then used in the keymap matrix below.
 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 // Layer names don't all need to be of the same length, obviously, and you can also skip them
 // entirely and just use numbers.

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMLOCK] = KEYMAP( /* Base */
    TG(_NAV), TG(_DIABLO), TG(_MACROS), KC_PSLS,\
    KC_P7,  KC_P8, KC_P9, KC_PAST,   \
    KC_P4,  KC_P5, KC_P6, KC_PMNS,   \
    KC_P1,  KC_P2, KC_P3, KC_PPLS,   \
    LT(_MEDIA,KC_P0), KC_PDOT, KC_COLN, KC_PENT   \
),
[_NAV] = KEYMAP( /* Base */
    _______, _______, _______, _______,\
    KC_HOME,  KC_UP, KC_PGUP, _______,   \
    KC_LEFT,  XXXXXXX, KC_RIGHT, _______,   \
    KC_END,  KC_DOWN, KC_PGDN, _______,   \
    KC_INS, KC_DEL, _______, _______   \
),
[_DIABLO] = KEYMAP( /* Base */
    KC_ESC, _______, XXXXXXX, _______,\
    KC_S, KC_I, KC_F, KC_M,   \
    KC_1, KC_2, KC_3, KC_4, \
    KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, \
    XXXXXXX, KC_DIABLO_CLEAR, KC_Q, SFT_T(KC_SPACE)  \
),

[_MACROS] = KEYMAP( /* Base */
    KC_OVERWATCH, XXXXXXX,      _______,      XXXXXXX,\
    KC_JUSTGAME,  XXXXXXX,      XXXXXXX,      KC_C9,   \
    XXXXXXX,      XXXXXXX,      KC_AIM,       KC_GGEZ,   \
    KC_SYMM,      KC_TORB,      XXXXXXX,      KC_GOODGAME,   \
    KC_SALT,      KC_MORESALT,  KC_SALTHARD,  KC_GLHF   \
),
[_MEDIA] = KEYMAP( /* Base */
    KC_RESET, KC_MUTE, KC_VOLD, KC_VOLU,\
    KC_MAKE, _______, RGB_HUI, RGB_HUD,   \
    KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT,   \
    RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI,   \
    _______, KC_RGB_T, RGB_SAD, RGB_VAD   \
),

};


void numlock_led_on(void) {
  PORTF |= (1 << 7);
}

void numlock_led_off(void) {
  PORTF &= ~(1 << 7);
}



void matrix_init_keymap(void) {
  // set Numlock LED to output and low
  DDRF |= (1 << 7);
  PORTF &= ~(1 << 7);
}

void matrix_scan_keymap(void) {
  numlock_led_off();
  if ((is_overwatch && biton32(layer_state) == _MACROS) || (biton32(layer_state) == _NUMLOCK)) {
    numlock_led_on();
  }

  // Run Diablo 3 macro checking code.
}

void led_set_keymap(uint8_t usb_led) {
  if (!(usb_led & (1<<USB_LED_NUM_LOCK))) {
    register_code(KC_NUMLOCK);
    unregister_code(KC_NUMLOCK);
  }
}

D keyboards/handwired/woodpad/keymaps/drashna/rules.mk => keyboards/handwired/woodpad/keymaps/drashna/rules.mk +0 -10
@@ 1,10 0,0 @@
TAP_DANCE_ENABLE  = yes
COMMAND_ENABLE    = no  # Commands for debug and configuration
RGBLIGHT_ENABLE   = yes
MIDI_ENABLE       = no
CONSOLE_ENABLE    = no
NKRO_ENABLE       = yes
MOUSEKEY_ENABLE   = no

EXTRAFLAGS        = -flto


M keyboards/keebio/iris/keymaps/drashna/config.h => keyboards/keebio/iris/keymaps/drashna/config.h +4 -4
@@ 19,8 19,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* Use I2C or Serial, not both */

#define USE_SERIAL
#undef USE_I2C
// #define USE_SERIAL
#define USE_I2C

/* Select hand configuration */



@@ 31,7 31,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
#undef RGBLED_NUM
#define RGBLED_NUM 18     // Number of LEDs

#define RGBLED_SPLIT { 9, 9 }
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 12
#define RGBLIGHT_VAL_STEP 12


@@ 55,7 55,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define QMK_SPEAKER C6

#undef PRODUCT
#ifdef KEYBOARD_iris_rev2
#ifdef KEYBOARD_keebio_iris_rev2
#define PRODUCT         Drashna Hacked Iris Rev.2
#endif


M keyboards/keebio/iris/keymaps/drashna/keymap.c => keyboards/keebio/iris/keymaps/drashna/keymap.c +11 -0
@@ 121,3 121,14 @@ void matrix_init_keymap(void) {
    writePinHigh(B0);
  #endif
}


void keyboard_post_init_keymap(void) {
#if BACKLIGHT_ENABLE
  backlight_enable();
  backlight_level(5);
  #ifdef BACKLIGHT_BREATHING
    breathing_enable();
  #endif
#endif
}

M keyboards/keebio/iris/keymaps/drashna/rules.mk => keyboards/keebio/iris/keymaps/drashna/rules.mk +3 -2
@@ 5,13 5,14 @@ CONSOLE_ENABLE    = no         # Console for debug(+400)
COMMAND_ENABLE    = no        # Commands for debug and configuration
TAP_DANCE_ENABLE  = no
RGBLIGHT_ENABLE   = yes
AUDIO_ENABLE      = yes
AUDIO_ENABLE      = no
NKRO_ENABLE       = yes
BACKLIGHT_ENABLE  = no
SWAP_HANDS_ENABLE = no

INDICATOR_LIGHTS  = yes
INDICATOR_LIGHTS  = no
MACROS_ENABLED    = no
RGBLIGHT_TWINKLE  = no
RGBLIGHT_STARTUP_ANIMATION = yes

BOOTLOADER        = qmk-dfu

A keyboards/keebio/iris/keymaps/drashna_lp/config.h => keyboards/keebio/iris/keymaps/drashna_lp/config.h +48 -0
@@ 0,0 1,48 @@
/*
Copyright 2017 Danny Nguyen <danny@keeb.io>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

/* Use I2C or Serial, not both */
#include "../drashna/config.h"

#ifdef RGBLIGHT_ENABLE
#undef RGBLED_NUM
#define RGBLED_NUM 16     // Number of LEDs
#undef RGBLED_SPLIT
#define RGBLED_SPLIT { 8, 8 }
#endif

#undef PRODUCT
#ifdef KEYBOARD_keebio_iris_rev2
#define PRODUCT         Drashna Hacked Iris LP Rev.2 (Backlit)
#endif

#undef SHFT_LED1
#define SHFT_LED1 5
#undef SHFT_LED2
#define SHFT_LED2 10

#undef CTRL_LED1
#define CTRL_LED1 6
#undef CTRL_LED2
#define CTRL_LED2 9

#undef ALT_LED1
#define ALT_LED1 7
#undef GUI_LED1
#define GUI_LED1 8

A keyboards/keebio/iris/keymaps/drashna_lp/keymap.c => keyboards/keebio/iris/keymaps/drashna_lp/keymap.c +1 -0
@@ 0,0 1,1 @@
// placeholder

A keyboards/keebio/iris/keymaps/drashna_lp/rules.mk => keyboards/keebio/iris/keymaps/drashna_lp/rules.mk +7 -0
@@ 0,0 1,7 @@
USER_NAME := drashna
SRC += ../drashna/keymap.c

include $(KEYBOARD_PATH_2)/keymaps/drashna/rules.mk

AUDIO_ENABLE      = no
BACKLIGHT_ENABLE  = yes

M keyboards/keebio/iris/keymaps/drashna_old/config.h => keyboards/keebio/iris/keymaps/drashna_old/config.h +3 -1
@@ 23,10 23,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
#undef RGBLED_NUM
#define RGBLED_NUM 16     // Number of LEDs
#undef RGBLED_SPLIT
#define RGBLED_SPLIT { 8, 8 }
#endif

#undef PRODUCT
#ifdef KEYBOARD_iris_rev2
#ifdef KEYBOARD_keebio_iris_rev2
#define PRODUCT         Drashna Hacked Iris Rev.2 (16 LED)
#endif


M keyboards/orthodox/keymaps/drashna/config.h => keyboards/orthodox/keymaps/drashna/config.h +3 -2
@@ 23,8 23,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* Use I2C or Serial, not both */

#define USE_SERIAL
#undef USE_I2C
// #define USE_SERIAL
#define USE_I2C

/* Select hand configuration */



@@ 41,6 41,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
#define RGB_DI_PIN D3
#define RGBLED_NUM 16     // Number of LEDs
#define RGBLED_SPLIT { 8, 8 }

#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 12

M keyboards/orthodox/keymaps/drashna/keymap.c => keyboards/orthodox/keymaps/drashna/keymap.c +1 -1
@@ 38,7 38,7 @@ uint8_t last_osm;
  ) \
  LAYOUT_wrapper( \
    KC_ESC,  K01,    K02,     K03,      K04,     K05,                                                             K06,     K07,     K08,     K09,     K0A,     KC_BSPC, \
    KC_TAB,  K11,    K12,     K13,      K14,     K15,              OS_LALT, OS_LGUI,   OS_RALT, OS_RGUI,          K16,     K17,     K18,     K19,     K1A,     KC_QUOT, \
    KC_TAB,  K11,    K12,     K13,      K14,     K15,              OS_LALT, OS_LGUI,   OS_RALT, RAISE,          K16,     K17,     K18,     K19,     K1A,     KC_QUOT, \
    KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     LOWER,   KC_SPACE,KC_BSPC,   KC_DEL,  KC_ENT,  RAISE,   K26,     K27,     K28,     K29,  CTL_T(K2A), KC_MRSF  \
  )
#define LAYOUT_orthodox_base_wrapper(...)       LAYOUT_orthodox_base(__VA_ARGS__)

M keyboards/orthodox/keymaps/drashna/rules.mk => keyboards/orthodox/keymaps/drashna/rules.mk +3 -1
@@ 5,11 5,13 @@ CONSOLE_ENABLE    = no         # Console for debug(+400)
COMMAND_ENABLE    = no        # Commands for debug and configuration
TAP_DANCE_ENABLE  = no
RGBLIGHT_ENABLE   = yes
AUDIO_ENABLE      = yes
AUDIO_ENABLE      = no
NKRO_ENABLE       = yes

INDICATOR_LIGHTS  = yes
MACROS_ENABLED    = no
RGBLIGHT_TWINKLE  = no
RGBLIGHT_STARTUP_ANIMATION = yes


BOOTLOADER        = qmk-dfu

M layouts/community/ergodox/drashna/config.h => layouts/community/ergodox/drashna/config.h +0 -1
@@ 14,4 14,3 @@
#define PRODUCT         DrashnaDox - Hacked ErgoDox EZ Shine

#undef DEBOUNCE
#define DEBOUNCE 5

M layouts/community/ergodox/drashna/keymap.c => layouts/community/ergodox/drashna/keymap.c +8 -8
@@ 44,10 44,10 @@ bool skip_leds = false;
      KC_TAB,  K01,    K02,     K03,      K04,     K05,     TG(_DIABLO),         TG(_DIABLO), K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \
      KC_C1R3, K11,    K12,     K13,      K14,     K15,                                       K16,     K17,     K18,     K19,     K1A,     KC_QUOT, \
      KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     TG(_GAMEPAD),       TG(_GAMEPAD), K26,     K27,     K28,     K29,  CTL_T(K2A), KC_MRSF, \
      KC_GRV,  OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC,                                            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, UC(0x2E2E), \
                                                  OS_LALT, OS_LGUI,                 OS_RGUI, CTL_T(KC_ESCAPE), \
                                                           KC_HOME,                 KC_PGUP, \
                             LT(_LOWER, KC_SPACE),KC_BSPC, KC_END,                  KC_PGDN, KC_DEL,  LT(_RAISE, KC_ENTER)                          \
      KC_GRV,  OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC,                                            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, UC(0x2E2E),        \
                                                  OS_LALT, OS_LGUI,                 OS_RGUI, CTL_T(KC_ESCAPE),                                      \
                                                           KC_APP,                  KC_MENU,                                                        \
                              KC_SPC, LT(_LOWER, KC_BSPC), OS_LWR,                  OS_RSE, LT(_RAISE, KC_DEL), KC_ENT                              \
    )

#define LAYOUT_ergodox_pretty_base_wrapper(...)       LAYOUT_ergodox_pretty_base(__VA_ARGS__)


@@ 270,8 270,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_LOWER] = LAYOUT_ergodox_pretty_wrapper(
             KC_F12,  _________________FUNC_LEFT_________________, _______,                 _______, _________________FUNC_RIGHT________________, KC_F11,
             KC_TILD, _________________LOWER_L1__________________, _______,                 _______, _________________LOWER_R1__________________, _______,
             _______, ___________________BLANK___________________,                                   _________________LOWER_R2__________________, KC_PIPE,
             KC_TILD, _________________LOWER_L1__________________, _______,                 _______, _________________LOWER_R1__________________, KC_PIPE,
             _______, ___________________BLANK___________________,                                   _________________LOWER_R2__________________, KC_DQUO,
             _______, ___________________BLANK___________________, _______,                 _______, _________________LOWER_R3__________________, KC_PSCR,
             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, KC_PAUS,
                                                          _______, _______,                 _______, _______,


@@ 281,8 281,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [_RAISE] = LAYOUT_ergodox_pretty_wrapper(
             KC_F12,  _________________FUNC_LEFT_________________, _______,                 _______, _________________FUNC_RIGHT________________, KC_F11,
             KC_GRV,  _________________RAISE_L1__________________, _______,                 _______, _________________RAISE_R1__________________, _______,
             _______, _________________RAISE_L2__________________,                                   _________________RAISE_R2__________________, KC_BSLS,
             KC_GRV,  _________________RAISE_L1__________________, _______,                 _______, _________________RAISE_R1__________________, KC_BSLS,
             _______, _________________RAISE_L2__________________,                                   _________________RAISE_R2__________________, KC_QUOT,
             _______, _________________RAISE_L3__________________, _______,                 _______, _________________RAISE_R3__________________, KC_PSCR,
             _______, _______, _______, _______, _______,                                                     KC_HOME, KC_PGDN, KC_PGUP, KC_END,  KC_SLCK,
                                                          _______, _______,                 _______, _______,

M layouts/community/ergodox/drashna/rules.mk => layouts/community/ergodox/drashna/rules.mk +3 -0
@@ 14,3 14,6 @@ UNICDOEMAP_ENABLE = no
MACROS_ENABLED    = no
RGBLIGHT_TWINKLE  = no
INDICATOR_LIGHTS  = no
RGBLIGHT_STARTUP_ANIMATION = yes

DEBOUNCE_TYPE     = eager_pk

M layouts/community/ergodox/drashna_glow/config.h => layouts/community/ergodox/drashna_glow/config.h +1 -7
@@ 5,17 5,11 @@
#undef PRODUCT
#define PRODUCT         DrashnaDox - Hacked ErgoDox EZ Glow

#undef DEBOUNCE
#define DEBOUNCE 5

#ifdef RGB_MATRIX_ENABLE
// #define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
// #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
// #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
#define RGB_DISABLE_WHEN_USB_SUSPENDED  true// turn off effects when suspended
// #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
// #define EECONFIG_RGB_MATRIX (uint32_t *)16
#endif

#undef DEBOUNCE
#define DEBOUNCE 1

M layouts/community/ergodox/drashna_glow/rules.mk => layouts/community/ergodox/drashna_glow/rules.mk +5 -2
@@ 1,7 1,10 @@
USER_NAME := drashna
SRC += ../drashna/keymap.c

-include $(LAYOUT_KEYMAP_PATH)/../drashna/rules.mk
CORRECTED_LAYOUT := $(LAYOUTS_REPO)/$(LAYOUT)/drashna

SRC += $(CORRECTED_LAYOUT)/keymap.c

-include $(CORRECTED_LAYOUT)/rules.mk

ifneq (,$(findstring ergodox_ez,$(KEYBOARD)))
  RGBLIGHT_ENABLE = no

M layouts/community/numpad_5x6/drashna/config.h => layouts/community/numpad_5x6/drashna/config.h +4 -2
@@ 14,5 14,7 @@
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#endif // RGBLIGHT_ENABLE


#define TAP_CODE_DELAY 10
#if defined(KEYBOARD_primekb_prime_m)
#undef PRODUCT
#define PRODUCT Drashna Hacked Prime_M Macro Pad
#endif

M layouts/community/numpad_5x6/drashna/rules.mk => layouts/community/numpad_5x6/drashna/rules.mk +1 -0
@@ 7,3 7,4 @@ INDICATOR_LIGHTS  = no
RGBLIGHT_TWINKLE  = yes
MACROS_ENABLED    = no
MAKE_BOOTLOADER   = yes
RGBLIGHT_STARTUP_ANIMATION = yes

M layouts/community/ortho_4x12/drashna/config.h => layouts/community/ortho_4x12/drashna/config.h +11 -2
@@ 36,6 36,17 @@
#endif // KEYBOARD_planck_light


#if defined(KEYBOARD_planck)
#undef PRODUCT
#if defined(KEYBOARD_planck_light)
#define PRODUCT Drashna Hacked RGB Beacon (Planck Light)
#elif defined(KEYBOARD_planck_rev6)
#define PRODUCT Drashna Hacked Planck Rev6
#elif defined(KEYBOARD_planck_EZ)
#define PRODUCT Drashna Hacked Planck EZ
#endif
#endif

/*
 * MIDI options
 */


@@ 59,5 70,3 @@

/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2

#define TAP_CODE_DELAY 10

M layouts/community/ortho_4x12/drashna/keymap.c => layouts/community/ortho_4x12/drashna/keymap.c +0 -2
@@ 139,10 139,8 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
        #ifdef BACKLIGHT_ENABLE
          backlight_step();
        #endif
        PORTE &= ~(1<<6);
      } else {
        unregister_code(KC_RSFT);
        PORTE |= (1<<6);
      }
      return false;
      break;

M layouts/community/ortho_4x12/drashna/rules.mk => layouts/community/ortho_4x12/drashna/rules.mk +7 -5
@@ 6,13 6,15 @@ COMMAND_ENABLE    = no        # Commands for debug and configuration
TAP_DANCE_ENABLE  = no
AUDIO_ENABLE      = yes
ifeq (,$(findstring planck/rev6,$(KEYBOARD))) # Make sure it's NOT the Planck Rev6
  RGBLIGHT_ENABLE   = yes
  INDICATOR_LIGHTS  = yes
  RGBLIGHT_TWINKLE  = yes
  RGBLIGHT_ENABLE             = yes
  INDICATOR_LIGHTS            = yes
  RGBLIGHT_TWINKLE            = yes
  RGBLIGHT_STARTUP_ANIMATION  = yes
endif
ifneq (,$(findstring planck/light,$(KEYBOARD))) # Make sure it IS the Planck Light
  RGB_MATRIX_ENABLE   = yes
  RGBLIGHT_ENABLE     = yes
  RGB_MATRIX_ENABLE           = yes
  RGBLIGHT_ENABLE             = no
  RGBLIGHT_STARTUP_ANIMATION  = no
endif

ifeq ($(strip $(PROTOCOL)), VUSB)

M layouts/community/ortho_5x12/drashna/config.h => layouts/community/ortho_5x12/drashna/config.h +6 -0
@@ 13,4 13,10 @@
  #define RGBLIGHT_SAT_STEP 8
  #undef RGBLIGHT_VAL_STEP
  #define RGBLIGHT_VAL_STEP 8
  #define RGBLIGHT_LIMIT_VAL 175
  #define RGBLIGHT_SLEEP

  #define RGBLIGHT_EFFECT_KNIGHT_OFFSET 3
  #define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 14

#endif

A users/drashna/.gitignore => users/drashna/.gitignore +3 -0
@@ 0,0 1,3 @@
secrets.c
secrets.h
drashna_song_list.h
\ No newline at end of file

M users/drashna/.gitlab-ci.yml => users/drashna/.gitlab-ci.yml +4 -26
@@ 3,7 3,7 @@ stages:
  - build
  - deploy

Tests:
Preliminary Test:
  stage: test
  variables:
    GIT_SUBMODULE_STRATEGY: recursive


@@ 12,12 12,12 @@ Tests:
  image: ubuntu:18.10
  before_script:
    - apt-get update -qy
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi git libnewlib-arm-none-eabi gcc-avr unzip wget zip
    - avr-gcc --version
    - uname -a
  script:
    - make test:all
    - make planck/rev6:default
    - make planck/rev6:default planck/rev5:default

QMK Firmware Defaults:
  stage: deploy


@@ 47,29 47,7 @@ Drashna Firmware:
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
    - avr-gcc --version
  script:
    - make iris/rev2:drashna iris/rev2:drashna_old ergodox_ez:drashna ergodox_ez:drashna_glow viterbi/rev1:drashna orthodox/rev1:drashna orthodox/rev3:drashna crkbd:drashna planck/light:drashna planck/rev6:drashna fractal:drashna
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
    paths:
      - ./*.hex
      - ./*.bin
    expire_in: 1 month

Firmware Deploy:
  stage: deploy
  dependencies:
    - Drashna Firmware
  variables:
    GIT_SUBMODULE_STRATEGY: recursive
  tags:
    - linux
  image: ubuntu:18.10
  before_script:
    - apt-get update -qy
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
    - avr-gcc --version
  script:
    - make iris/rev2:drashna:production iris/rev2:drashna_old:production ergodox_ez:drashna ergodox_ez:drashna_glow viterbi/rev1:drashna:production orthodox/rev1:drashna:production orthodox/rev3:drashna:production crkbd:drashna:production planck/light:drashna planck/rev6:drashna fractal:drashna:production
    - make keebio/iris/rev2:drashna keebio/iris/rev2:drashna_old ergodox_ez:drashna ergodox_ez:drashna_glow keebio/viterbi/rev1:drashna orthodox/rev1:drashna orthodox/rev3:drashna crkbd:drashna planck/light:drashna planck/rev6:drashna fractal:drashna primekb/prime_m:drashna -j16 --output-sync
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
    paths:

M users/drashna/config.h => users/drashna/config.h +1 -1
@@ 82,4 82,4 @@
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION

#define MACRO_TIMER 5
#define TAP_CODE_DELAY 5

M users/drashna/drashna.c => users/drashna/drashna.c +7 -11
@@ 38,9 38,9 @@ bool send_game_macro(const char *str, keyrecord_t *record, bool override) {
    }
    clear_keyboard();
    tap_code(keycode);
    wait_ms(50);
    send_string_with_delay(str, MACRO_TIMER);
    wait_ms(50);
    wait_ms(TAP_CODE_DELAY);
    send_string_with_delay(str, TAP_CODE_DELAY);
    wait_ms(TAP_CODE_DELAY);
    tap_code(KC_ENTER);
  }
  if (override) wait_ms(3000);


@@ 53,12 53,10 @@ bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed) {
      this_timer= timer_read();
  } else {
      if (timer_elapsed(this_timer) < TAPPING_TERM){
          register_code(code);
          unregister_code(code);
          tap_code(code);
      } else {
          register_code(mod_code);
          register_code(code);
          unregister_code(code);
          tap_code(code);
          unregister_code(mod_code);
      }
  }


@@ 70,12 68,10 @@ bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t thi
      this_timer= timer_read();
  } else {
      if (timer_elapsed(this_timer) < TAPPING_TERM){
          register_code(code);
          unregister_code(code);
          tap_code(code);
      } else {
          register_code(mod_code);
          register_code(code);
          unregister_code(code);
          tap_code(code);
          unregister_code(mod_code);
      }
  }

M users/drashna/drashna.h => users/drashna/drashna.h +5 -1
@@ 27,7 27,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
  #include "rgb_stuff.h"
#endif

#if defined(AUDIO_ENABLE) && __GNUC__ > 7
  #if __has_include("drashna_song_list.h")
    #include "drashna_song_list.h"
  #endif
#endif

/* Define layer names */
enum userspace_layers {

M users/drashna/process_records.c => users/drashna/process_records.c +9 -11
@@ 18,7 18,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {

  // If console is enabled, it will print the matrix position and status of each key pressed
#ifdef KEYLOGGER_ENABLE
  #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2)
  #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_keebio_iris_rev2)
    xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.row, record->event.key.col, record->event.pressed);
  #else
    xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);


@@ 37,31 37,29 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      uint8_t temp_mod = get_mods();
      uint8_t temp_osm = get_oneshot_mods();
      clear_mods(); clear_oneshot_mods();
      send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), MACRO_TIMER);
      send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), TAP_CODE_DELAY);
#ifndef MAKE_BOOTLOADER
      if ( ( temp_mod | temp_osm ) & MOD_MASK_SHIFT )
#endif
      {
        #if defined(__arm__)
          send_string_with_delay_P(PSTR(":dfu-util"), MACRO_TIMER);
          send_string_with_delay_P(PSTR(":dfu-util"), TAP_CODE_DELAY);
        #elif defined(BOOTLOADER_DFU)
          send_string_with_delay_P(PSTR(":dfu"), MACRO_TIMER);
          send_string_with_delay_P(PSTR(":dfu"), TAP_CODE_DELAY);
        #elif defined(BOOTLOADER_HALFKAY)
          send_string_with_delay_P(PSTR(":teensy"), MACRO_TIMER);
          send_string_with_delay_P(PSTR(":teensy"), TAP_CODE_DELAY);
        #elif defined(BOOTLOADER_CATERINA)
          send_string_with_delay_P(PSTR(":avrdude"), MACRO_TIMER);
          send_string_with_delay_P(PSTR(":avrdude"), TAP_CODE_DELAY);
        #endif // bootloader options
       }
      if ( ( temp_mod | temp_osm ) & MOD_MASK_CTRL) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), MACRO_TIMER); }
      send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), MACRO_TIMER);
      set_mods(temp_mod);
      set_oneshot_mods(temp_osm);
      if ( ( temp_mod | temp_osm ) & MOD_MASK_CTRL) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), TAP_CODE_DELAY); }
      send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY);
    }
    break;

  case VRSN: // Prints firmware version
    if (record->event.pressed) {
      send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), MACRO_TIMER);
      send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY);
    }
    break;


M users/drashna/process_records.h => users/drashna/process_records.h +2 -0
@@ 56,6 56,8 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
#define ADJUST MO(_ADJUST)
#define TG_MODS TG(_MODS)
#define TG_GAME TG(_GAMEPAD)
#define OS_LWR OSL(_LOWER)
#define OS_RSE OSL(_RAISE)

#define KC_SEC1 KC_SECRET_1
#define KC_SEC2 KC_SECRET_2

M users/drashna/rgb_stuff.c => users/drashna/rgb_stuff.c +14 -11
@@ 247,17 247,20 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {


void keyboard_post_init_rgb(void) {
#ifdef RGBLIGHT_ENABLE
	rgblight_enable_noeeprom();
	layer_state_set_user(layer_state);
  uint16_t old_hue = rgblight_config.hue;
	rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
	for (uint16_t i = 360; i > 0; i--) {
		rgblight_sethsv_noeeprom( ( i + old_hue) % 360, 255, 255);
    wait_ms(10);
	}
	layer_state_set_user(layer_state);
#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_STARTUP_ANIMATION)
  if (userspace_config.rgb_layer_change) { rgblight_enable_noeeprom(); }
	if (rgblight_config.enable) {
    layer_state_set_user(layer_state);
    uint16_t old_hue = rgblight_config.hue;
    rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
    for (uint16_t i = 360; i > 0; i--) {
      rgblight_sethsv_noeeprom( ( i + old_hue) % 360, 255, 255);
      matrix_scan();
      wait_ms(10);
    }
  }
#endif
  layer_state_set_user(layer_state);
}

void matrix_scan_rgb(void) {


@@ 278,7 281,7 @@ uint32_t layer_state_set_rgb(uint32_t state) {
    switch (biton32(state)) {
    case _MACROS:
      rgblight_sethsv_noeeprom_orange();
      userspace_config.is_overwatch ? rgblight_effect_snake(RGBLIGHT_MODE_SNAKE + 2) : rgblight_effect_snake(RGBLIGHT_MODE_SNAKE + 3);
      userspace_config.is_overwatch ? rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 2) : rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 3);
      break;
    case _MEDIA:
      rgblight_sethsv_noeeprom_chartreuse();

M users/drashna/rules.mk => users/drashna/rules.mk +6 -1
@@ 9,7 9,9 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
  SRC += tap_dances.c
endif

EXTRAFLAGS += -flto
ifeq ($(PLATFORM),AVR)
  EXTRAFLAGS += -flto
endif

ifeq ($(strip $(NO_SECRETS)), yes)
    OPT_DEFS += -DNO_SECRETS


@@ 26,6 28,9 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
  ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
    OPT_DEFS += -DRGBLIGHT_NOEEPROM
  endif
  ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
    OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
  endif
endif

ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)