summaryrefslogtreecommitdiff
path: root/users/drashna
diff options
context:
space:
mode:
Diffstat (limited to 'users/drashna')
-rw-r--r--users/drashna/.gitignore3
-rw-r--r--users/drashna/.gitlab-ci.yml24
-rw-r--r--users/drashna/audio_config.h33
-rw-r--r--users/drashna/autocorrect_data.h93
-rw-r--r--users/drashna/bootmagic_better.c56
-rw-r--r--users/drashna/callbacks.c292
-rw-r--r--users/drashna/callbacks.h26
-rw-r--r--users/drashna/callbacks.md71
-rw-r--r--users/drashna/config.h115
-rw-r--r--users/drashna/drashna.c319
-rw-r--r--users/drashna/drashna.h115
-rw-r--r--users/drashna/eeconfig_users.c53
-rw-r--r--users/drashna/eeconfig_users.h12
-rw-r--r--users/drashna/keyrecords/dynamic_macros.c283
-rw-r--r--users/drashna/keyrecords/dynamic_macros.h50
-rw-r--r--users/drashna/keyrecords/keycodes.md13
-rw-r--r--users/drashna/keyrecords/process_records.c200
-rw-r--r--users/drashna/keyrecords/process_records.h150
-rw-r--r--users/drashna/keyrecords/readme.md7
-rw-r--r--users/drashna/keyrecords/secrets.md122
-rw-r--r--users/drashna/keyrecords/tap_dance.md121
-rw-r--r--users/drashna/keyrecords/tap_dances.c67
-rw-r--r--users/drashna/keyrecords/tap_dances.h31
-rw-r--r--users/drashna/keyrecords/tapping.c66
-rw-r--r--users/drashna/keyrecords/unicode.c446
-rw-r--r--users/drashna/keyrecords/unicode.h21
-rw-r--r--users/drashna/keyrecords/unicode.md27
-rw-r--r--users/drashna/keyrecords/wrappers.h266
-rw-r--r--users/drashna/keyrecords/wrappers.md11
-rw-r--r--users/drashna/oled/drashna_font.h1060
-rw-r--r--users/drashna/oled/oled_assets.h207
-rw-r--r--users/drashna/oled/oled_config.h40
-rw-r--r--users/drashna/oled/oled_stuff.c830
-rw-r--r--users/drashna/oled/oled_stuff.h169
-rw-r--r--users/drashna/oled/readme.md42
-rw-r--r--users/drashna/oled/rules.mk12
-rw-r--r--users/drashna/pointing/pointing.c118
-rw-r--r--users/drashna/pointing/pointing.h11
-rw-r--r--users/drashna/pointing/pointing_config.h6
-rw-r--r--users/drashna/pointing/readme.md19
-rw-r--r--users/drashna/post_config.h143
-rw-r--r--users/drashna/readme.md17
-rw-r--r--users/drashna/rgb/readme.md52
-rw-r--r--users/drashna/rgb/rgb_matrix_config.h106
-rw-r--r--users/drashna/rgb/rgb_matrix_stuff.c190
-rw-r--r--users/drashna/rgb/rgb_matrix_stuff.h17
-rw-r--r--users/drashna/rgb/rgb_stuff.c165
-rw-r--r--users/drashna/rgb/rgb_stuff.h15
-rw-r--r--users/drashna/rgb/rgblight_config.h12
-rw-r--r--users/drashna/rgblight_breathe_table.h121
-rw-r--r--users/drashna/rules.mk136
-rw-r--r--users/drashna/split/readme.md29
-rw-r--r--users/drashna/split/split_config.h26
-rw-r--r--users/drashna/split/transport_sync.c201
-rw-r--r--users/drashna/split/transport_sync.h28
-rw-r--r--users/drashna/template.c57
-rw-r--r--users/drashna/template.h18
57 files changed, 0 insertions, 6940 deletions
diff --git a/users/drashna/.gitignore b/users/drashna/.gitignore
deleted file mode 100644
index f84d34d907..0000000000
--- a/users/drashna/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-secrets.c
-secrets.h
-drashna_song_list.h \ No newline at end of file
diff --git a/users/drashna/.gitlab-ci.yml b/users/drashna/.gitlab-ci.yml
deleted file mode 100644
index 71d216267f..0000000000
--- a/users/drashna/.gitlab-ci.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-stages:
- - test
-
-QMK Firmware:
- stage: test
- variables:
- GIT_SUBMODULE_STRATEGY: recursive
- tags:
- - linux
- image: qmkfm/base_container
- 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 git libnewlib-arm-none-eabi gcc-avr python3 unzip wget zip
- - avr-gcc --version
- - uname -a
- script:
- - make planck/rev6:default planck/rev5:default
- - make all:drashna -j2
- artifacts:
- name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
- paths:
- - ./*.hex
- - ./*.bin
- expire_in: 1 month
diff --git a/users/drashna/audio_config.h b/users/drashna/audio_config.h
deleted file mode 100644
index 21fe27ee6b..0000000000
--- a/users/drashna/audio_config.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define AUDIO_CLICKY
-#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
-
-#if __has_include("user_song_list.h")
-# include "user_song_list.h"
-#endif
-
-#ifdef USER_SONG_LIST
-# define STARTUP_SONG SONG(RICK_ROLL)
-# define GOODBYE_SONG SONG(SONIC_RING)
-# define DEFAULT_LAYER_SONGS \
- { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(OVERWATCH_THEME) }
-# define UNICODE_SONG_MAC SONG(MARIO_THEME)
-# define UNICODE_SONG_LNX SONG(MARIO_POWERUP)
-# define UNICODE_SONG_WIN SONG(MARIO_ONEUP)
-# define UNICODE_SONG_BSD SONG(RICK_ROLL)
-# define UNICODE_SONG_WINC SONG(RICK_ROLL)
-#else
-# define STARTUP_SONG SONG(STARTUP_SOUND)
-# define GOODBYE_SONG SONG(GOODBYE_SOUND)
-# define DEFAULT_LAYER_SONGS \
- { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(WORKMAN_SOUND) }
-# define UNICODE_SONG_MAC SONG(QWERTY_SOUND)
-# define UNICODE_SONG_LNX SONG(COLEMAK_SOUND)
-# define UNICODE_SONG_WIN SONG(DVORAK_SOUND)
-# define UNICODE_SONG_BSD SONG(WORKMAN_SOUND)
-# define UNICODE_SONG_WINC SONG(PLOVER_GOODBYE_SOUND)
-#endif
diff --git a/users/drashna/autocorrect_data.h b/users/drashna/autocorrect_data.h
deleted file mode 100644
index 52ed7fa9a7..0000000000
--- a/users/drashna/autocorrect_data.h
+++ /dev/null
@@ -1,93 +0,0 @@
-#if __has_include("../qmk_secrets/autocorrection_data.h")
-# pragma message "Loading custom library"
-# include "../qmk_secrets/autocorrection_data.h"
-# define AUTOCORRECTION_MIN_LENGTH AUTOCORRECT_MIN_LENGTH
-# define AUTOCORRECTION_MAX_LENGTH AUTOCORRECT_MAX_LENGTH
-
-#else
-// Generated code.
-
-// Autocorrection dictionary (70 entries):
-// :guage -> gauge
-// :the:the: -> the
-// :thier -> their
-// :ture -> true
-// accomodate -> accommodate
-// acommodate -> accommodate
-// aparent -> apparent
-// aparrent -> apparent
-// apparant -> apparent
-// apparrent -> apparent
-// aquire -> acquire
-// becuase -> because
-// cauhgt -> caught
-// cheif -> chief
-// choosen -> chosen
-// cieling -> ceiling
-// collegue -> colleague
-// concensus -> consensus
-// contians -> contains
-// cosnt -> const
-// dervied -> derived
-// fales -> false
-// fasle -> false
-// fitler -> filter
-// flase -> false
-// foward -> forward
-// frequecy -> frequency
-// gaurantee -> guarantee
-// guaratee -> guarantee
-// heigth -> height
-// heirarchy -> hierarchy
-// inclued -> include
-// interator -> iterator
-// intput -> input
-// invliad -> invalid
-// lenght -> length
-// liasion -> liaison
-// libary -> library
-// listner -> listener
-// looses: -> loses
-// looup -> lookup
-// manefist -> manifest
-// namesapce -> namespace
-// namespcae -> namespace
-// occassion -> occasion
-// occured -> occurred
-// ouptut -> output
-// ouput -> output
-// overide -> override
-// postion -> position
-// priviledge -> privilege
-// psuedo -> pseudo
-// recieve -> receive
-// refered -> referred
-// relevent -> relevant
-// repitition -> repetition
-// retrun -> return
-// retun -> return
-// reuslt -> result
-// reutrn -> return
-// saftey -> safety
-// seperate -> separate
-// singed -> signed
-// stirng -> string
-// strign -> string
-// swithc -> switch
-// swtich -> switch
-// thresold -> threshold
-// udpate -> update
-// widht -> width
-
-#define AUTOCORRECT_MIN_LENGTH 5 // ":ture"
-#define AUTOCORRECT_MAX_LENGTH 10 // "accomodate"
-
-#define DICTIONARY_SIZE 1104
-
-static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {108, 43, 0, 6, 71, 0, 7, 81, 0, 8, 199, 0, 9, 240, 1, 10, 250, 1, 11, 26, 2, 17, 53, 2, 18, 190, 2, 19, 202, 2, 21, 212, 2, 22, 20, 3, 23, 67, 3, 28, 16, 4, 0, 72, 50, 0, 22, 60, 0, 0, 11, 23, 44, 8, 11, 23, 44, 0, 132, 0, 8, 22, 18, 18, 15, 0, 132, 115, 101, 115, 0, 11, 23, 12, 26, 22, 0, 129, 99, 104, 0, 68, 94, 0, 8, 106, 0, 15, 174, 0, 21, 187, 0, 0, 12, 15, 25, 17, 12, 0, 131, 97, 108, 105, 100, 0, 74, 119, 0, 12, 129, 0, 21, 140, 0, 24, 165, 0, 0, 17, 12, 22, 0, 131, 103, 110, 101, 100, 0, 25, 21, 8, 7, 0, 131, 105, 118, 101, 100, 0, 72, 147, 0, 24, 156, 0, 0, 9, 8, 21, 0, 129, 114, 101, 100, 0, 6, 6, 18, 0, 129, 114, 101, 100, 0, 15, 6, 17, 12, 0, 129, 100, 101, 0, 18, 22, 8, 21, 11, 23, 0, 130, 104, 111,
- 108, 100, 0, 4, 26, 18, 9, 0, 131, 114, 119, 97, 114, 100, 0, 68, 233, 0, 6, 246, 0, 7, 4, 1, 8, 16, 1, 10, 52, 1, 15, 81, 1, 21, 90, 1, 22, 117, 1, 23, 144, 1, 24, 215, 1, 25, 228, 1, 0, 6, 19, 22, 8, 16, 4, 17, 0, 130, 97, 99, 101, 0, 19, 4, 22, 8, 16, 4, 17, 0, 131, 112, 97, 99, 101, 0, 12, 21, 8, 25, 18, 0, 130, 114, 105, 100, 101, 0, 23, 0, 68, 25, 1, 17, 36, 1, 0, 21, 4, 24, 10, 0, 130, 110, 116, 101, 101, 0, 4, 21, 24, 4, 10, 0, 135, 117, 97, 114, 97, 110, 116, 101, 101, 0, 68, 59, 1, 7, 69, 1, 0, 24, 10, 44, 0, 131, 97, 117, 103, 101, 0, 8, 15, 12, 25, 12, 21, 19, 0, 130, 103, 101, 0, 22, 4, 9, 0, 130, 108, 115, 101, 0, 76, 97, 1, 24, 109, 1, 0, 24, 20, 4, 0, 132, 99, 113, 117, 105, 114, 101, 0, 23, 44, 0,
- 130, 114, 117, 101, 0, 4, 0, 79, 126, 1, 24, 134, 1, 0, 9, 0, 131, 97, 108, 115, 101, 0, 6, 8, 5, 0, 131, 97, 117, 115, 101, 0, 4, 0, 71, 156, 1, 19, 193, 1, 21, 203, 1, 0, 18, 16, 0, 80, 166, 1, 18, 181, 1, 0, 18, 6, 4, 0, 135, 99, 111, 109, 109, 111, 100, 97, 116, 101, 0, 6, 6, 4, 0, 132, 109, 111, 100, 97, 116, 101, 0, 7, 24, 0, 132, 112, 100, 97, 116, 101, 0, 8, 19, 8, 22, 0, 132, 97, 114, 97, 116, 101, 0, 10, 8, 15, 15, 18, 6, 0, 130, 97, 103, 117, 101, 0, 8, 12, 6, 8, 21, 0, 131, 101, 105, 118, 101, 0, 12, 8, 11, 6, 0, 130, 105, 101, 102, 0, 17, 0, 76, 3, 2, 21, 16, 2, 0, 15, 8, 12, 6, 0, 133, 101, 105, 108, 105, 110, 103, 0, 12, 23, 22, 0, 131, 114, 105, 110, 103, 0, 70, 33, 2, 23, 44, 2, 0, 12, 23, 26, 22, 0, 131, 105,
- 116, 99, 104, 0, 10, 12, 8, 11, 0, 129, 104, 116, 0, 72, 69, 2, 10, 80, 2, 18, 89, 2, 21, 156, 2, 24, 167, 2, 0, 22, 18, 18, 11, 6, 0, 131, 115, 101, 110, 0, 12, 21, 23, 22, 0, 129, 110, 103, 0, 12, 0, 86, 98, 2, 23, 124, 2, 0, 68, 105, 2, 22, 114, 2, 0, 12, 15, 0, 131, 105, 115, 111, 110, 0, 4, 6, 6, 18, 0, 131, 105, 111, 110, 0, 76, 131, 2, 22, 146, 2, 0, 23, 12, 19, 8, 21, 0, 134, 101, 116, 105, 116, 105, 111, 110, 0, 18, 19, 0, 131, 105, 116, 105, 111, 110, 0, 23, 24, 8, 21, 0, 131, 116, 117, 114, 110, 0, 85, 174, 2, 23, 183, 2, 0, 23, 8, 21, 0, 130, 117, 114, 110, 0, 8, 21, 0, 128, 114, 110, 0, 7, 8, 24, 22, 19, 0, 131, 101, 117, 100, 111, 0, 24, 18, 18, 15, 0, 129, 107, 117, 112, 0, 72, 219, 2, 18, 3, 3, 0, 76, 229, 2, 15, 238,
- 2, 17, 248, 2, 0, 11, 23, 44, 0, 130, 101, 105, 114, 0, 23, 12, 9, 0, 131, 108, 116, 101, 114, 0, 23, 22, 12, 15, 0, 130, 101, 110, 101, 114, 0, 23, 4, 21, 8, 23, 17, 12, 0, 135, 116, 101, 114, 97, 116, 111, 114, 0, 72, 30, 3, 17, 38, 3, 24, 51, 3, 0, 15, 4, 9, 0, 129, 115, 101, 0, 4, 12, 23, 17, 18, 6, 0, 131, 97, 105, 110, 115, 0, 22, 17, 8, 6, 17, 18, 6, 0, 133, 115, 101, 110, 115, 117, 115, 0, 74, 86, 3, 11, 96, 3, 15, 118, 3, 17, 129, 3, 22, 218, 3, 24, 232, 3, 0, 11, 24, 4, 6, 0, 130, 103, 104, 116, 0, 71, 103, 3, 10, 110, 3, 0, 12, 26, 0, 129, 116, 104, 0, 17, 8, 15, 0, 129, 116, 104, 0, 22, 24, 8, 21, 0, 131, 115, 117, 108, 116, 0, 68, 139, 3, 8, 150, 3, 22, 210, 3, 0, 21, 4, 19, 19, 4, 0, 130, 101, 110, 116, 0, 85, 157,
- 3, 25, 200, 3, 0, 68, 164, 3, 21, 175, 3, 0, 19, 4, 0, 132, 112, 97, 114, 101, 110, 116, 0, 4, 19, 0, 68, 185, 3, 19, 193, 3, 0, 133, 112, 97, 114, 101, 110, 116, 0, 4, 0, 131, 101, 110, 116, 0, 8, 15, 8, 21, 0, 130, 97, 110, 116, 0, 18, 6, 0, 130, 110, 115, 116, 0, 12, 9, 8, 17, 4, 16, 0, 132, 105, 102, 101, 115, 116, 0, 83, 239, 3, 23, 6, 4, 0, 87, 246, 3, 24, 254, 3, 0, 17, 12, 0, 131, 112, 117, 116, 0, 18, 0, 130, 116, 112, 117, 116, 0, 19, 24, 18, 0, 131, 116, 112, 117, 116, 0, 70, 29, 4, 8, 41, 4, 11, 51, 4, 21, 69, 4, 0, 8, 24, 20, 8, 21, 9, 0, 129, 110, 99, 121, 0, 23, 9, 4, 22, 0, 130, 101, 116, 121, 0, 6, 21, 4, 21, 12, 8, 11, 0, 135, 105, 101, 114, 97, 114, 99, 104, 121, 0, 4, 5, 12, 15, 0, 130, 114, 97, 114, 121, 0};
-#endif
diff --git a/users/drashna/bootmagic_better.c b/users/drashna/bootmagic_better.c
deleted file mode 100644
index fa1078e37d..0000000000
--- a/users/drashna/bootmagic_better.c
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-#include "bootmagic_lite.h"
-
-void bootmagic_lite(void) {
- bool perform_reset = false;
- // We need multiple scans because debouncing can't be turned off.
- matrix_scan();
-#if defined(DEBOUNCE) && DEBOUNCE > 0
- wait_ms(DEBOUNCE * 2);
-#else
- wait_ms(30);
-#endif
- matrix_scan();
-
- // If the configured key (commonly Esc) is held down on power up,
- // reset the EEPROM valid state and jump to bootloader.
- // This isn't very generalized, but we need something that doesn't
- // rely on user's keymaps in firmware or EEPROM.
- uint8_t row = BOOTMAGIC_LITE_ROW, col = BOOTMAGIC_LITE_COLUMN;
-#if defined(BOOTMAGIC_LITE_EEPROM_ROW) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN)
- uint8_t row_e = BOOTMAGIC_LITE_EEPROM_ROW, col_e = BOOTMAGIC_LITE_EEPROM_COLUMN;
-#endif
-
-#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_LITE_ROW_RIGHT) && defined(BOOTMAGIC_LITE_COLUMN_RIGHT)
- if (!is_keyboard_left()) {
- row = BOOTMAGIC_LITE_ROW_RIGHT;
- col = BOOTMAGIC_LITE_COLUMN_RIGHT;
-# if defined(BOOTMAGIC_LITE_EEPROM_ROW) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN) && defined(BOOTMAGIC_LITE_EEPROM_ROW_RIGHT) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT)
- row_e = BOOTMAGIC_LITE_EEPROM_ROW_RIGHT;
- col_e = BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT;
-# endif
- }
-#endif
-
-#if defined(BOOTMAGIC_LITE_EEPROM_ROW) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN)
- if (matrix_get_row(row_e) & (1 << col_e)) {
- eeconfig_disable();
- perform_reset = true;
- }
-#endif
- if (matrix_get_row(row) & (1 << col)) {
- perform_reset = true;
- }
-#if defined(STM32F411xE) && !defined(CONVERTER_ENABLED)
- if (!readPin(A0)) {
- perform_reset = true;
- }
-#endif
-
- if (perform_reset) {
- bootloader_jump();
- }
-}
diff --git a/users/drashna/callbacks.c b/users/drashna/callbacks.c
deleted file mode 100644
index 2ace2ff9e6..0000000000
--- a/users/drashna/callbacks.c
+++ /dev/null
@@ -1,292 +0,0 @@
-// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-
-#ifdef CUSTOM_DYNAMIC_MACROS_ENABLE
-# include "keyrecords/dynamic_macros.h"
-#endif
-#ifdef I2C_SCANNER_ENABLE
-void housekeeping_task_i2c_scanner(void);
-void keyboard_post_init_i2c(void);
-#endif
-
-__attribute__((weak)) void keyboard_pre_init_keymap(void) {}
-void keyboard_pre_init_user(void) {
- eeconfig_read_user_config(&userspace_config.raw);
- if (!userspace_config.check) {
- eeconfig_init_user();
- }
- keyboard_pre_init_keymap();
-}
-// Add reconfigurable functions here, for keymap customization
-// This allows for a global, userspace functions, and continued
-// customization of the keymap. Use _keymap instead of _user
-// functions in the keymaps
-// Call user matrix init, set default RGB colors and then
-// call the keymap's init function
-
-#ifdef CUSTOM_QUANTUM_PAINTER_ENABLE
-void keyboard_post_init_qp(void);
-#endif
-
-#if defined(OS_DETECTION_ENABLE) && defined(DEFERRED_EXEC_ENABLE)
-uint32_t startup_exec(uint32_t trigger_time, void *cb_arg);
-#endif
-
-__attribute__((weak)) void keyboard_post_init_keymap(void) {}
-void keyboard_post_init_user(void) {
-#if defined(CUSTOM_RGBLIGHT)
- keyboard_post_init_rgb_light();
-#endif
-#if defined(CUSTOM_RGB_MATRIX)
- keyboard_post_init_rgb_matrix();
-#endif
-#if defined(SPLIT_KEYBOARD) && defined(SPLIT_TRANSACTION_IDS_USER)
- keyboard_post_init_transport_sync();
-#endif
-#ifdef I2C_SCANNER_ENABLE
- keyboard_post_init_i2c();
-#endif
-#ifdef CUSTOM_UNICODE_ENABLE
- keyboard_post_init_unicode();
-#endif
-
-#if defined(BOOTLOADER_CATERINA) && defined(__AVR__) && defined(__AVR_ATmega32U4__)
- DDRD &= ~(1 << 5);
- PORTD &= ~(1 << 5);
-
- DDRB &= ~(1 << 0);
- PORTB &= ~(1 << 0);
-#endif
-#ifdef CUSTOM_DYNAMIC_MACROS_ENABLE
- dynamic_macro_init();
-#endif
-#if defined(OS_DETECTION_ENABLE) && defined(DEFERRED_EXEC_ENABLE)
- defer_exec(100, startup_exec, NULL);
-#endif
-
- keyboard_post_init_keymap();
-}
-
-#ifdef RGB_MATRIX_ENABLE
-void rgb_matrix_update_pwm_buffers(void);
-#endif
-
-__attribute__((weak)) bool shutdown_keymap(bool jump_to_bootloader) {
- return true;
-}
-bool shutdown_user(bool jump_to_bootloader) {
- if (!shutdown_keymap(jump_to_bootloader)) {
- return false;
- }
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(1);
- rgblight_setrgb(rgblight_get_val(), 0x00, 0x00);
-#endif // RGBLIGHT_ENABLE
-#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all(rgb_matrix_get_val(), 0x00, 0x00);
- rgb_matrix_update_pwm_buffers();
-#endif // RGB_MATRIX_ENABLE
-#ifdef OLED_ENABLE
- oled_off();
-#endif
- return true;
-}
-
-__attribute__((weak)) void suspend_power_down_keymap(void) {}
-
-void suspend_power_down_user(void) {
- if (layer_state_is(_GAMEPAD)) {
- layer_off(_GAMEPAD);
- }
- if (layer_state_is(_DIABLO)) {
- layer_off(_DIABLO);
- }
- if (layer_state_is(_DIABLOII)) {
- layer_off(_DIABLOII);
- }
-#ifdef OLED_ENABLE
- oled_off();
-#endif
- suspend_power_down_keymap();
-}
-
-__attribute__((weak)) void suspend_wakeup_init_keymap(void) {}
-void suspend_wakeup_init_user(void) {
- suspend_wakeup_init_keymap();
-}
-
-// No global matrix scan code, so just run keymap's matrix
-// scan function
-__attribute__((weak)) void matrix_scan_keymap(void) {}
-void matrix_scan_user(void) {
- matrix_scan_keymap();
-}
-
-#ifdef AUDIO_ENABLE
-float doom_song[][2] = SONG(E1M1_DOOM);
-#endif
-
-// on layer change, no matter where the change was initiated
-// Then runs keymap's layer change check
-__attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) {
- return state;
-}
-layer_state_t layer_state_set_user(layer_state_t state) {
- state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
-#if defined(CUSTOM_POINTING_DEVICE)
- state = layer_state_set_pointing(state);
-#endif
-#if defined(CUSTOM_RGBLIGHT)
- state = layer_state_set_rgb_light(state);
-#endif // CUSTOM_RGBLIGHT
-#if defined(AUDIO_ENABLE)
- static bool is_gamepad_on = false;
- if (layer_state_cmp(state, _GAMEPAD) != is_gamepad_on) {
- static bool is_click_on = false;
- is_gamepad_on = layer_state_cmp(state, _GAMEPAD);
- if (is_gamepad_on) {
- is_click_on = is_clicky_on();
- if (is_click_on) {
- clicky_off();
- }
- PLAY_LOOP(doom_song);
- } else {
- if (is_click_on) {
- clicky_on();
- }
- stop_all_notes();
- }
- }
-#endif
- state = layer_state_set_keymap(state);
-
-#ifdef CONSOLE_ENABLE
- char layer_buffer[16 + 5];
- format_layer_bitmap_string(layer_buffer, state, default_layer_state);
- dprintf("layer state: %s\n", layer_buffer);
-#endif
-
- return state;
-}
-
-// Runs state check and changes underglow color and animation
-__attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) {
- return state;
-}
-
-#if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
-static float default_layer_songs[][MAX_LAYER][2] = DEFAULT_LAYER_SONGS;
-#endif
-
-layer_state_t default_layer_state_set_user(layer_state_t state) {
- if (!is_keyboard_master()) {
- return state;
- }
-
- state = default_layer_state_set_keymap(state);
-#if defined(CUSTOM_RGBLIGHT)
- state = default_layer_state_set_rgb_light(state);
-#endif
-
- static bool has_init_been_ran = false;
- // We don't want to run this the first time it's called, since it's read from eeeprom and called
- // as part of the startup process. But after that, it's okay.
- if (has_init_been_ran) {
-#if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
- if (get_highest_layer(state) < MAX_LAYER) {
- PLAY_SONG(default_layer_songs[get_highest_layer(state)]);
- }
-#endif
- eeconfig_update_default_layer(state);
- } else {
- has_init_been_ran = true;
- }
-
- return state;
-}
-
-__attribute__((weak)) void led_set_keymap(uint8_t usb_led) {}
-void led_set_user(uint8_t usb_led) {
- led_set_keymap(usb_led);
-}
-
-__attribute__((weak)) void eeconfig_init_keymap(void) {}
-void eeconfig_init_user(void) {
- userspace_config.raw = 0;
- userspace_config.rgb_layer_change = true;
- userspace_config.check = true;
-#if defined(OLED_ENABLE)
- userspace_config.oled_brightness = OLED_BRIGHTNESS;
-#else
- userspace_config.oled_brightness = 255;
-#endif
- eeconfig_update_user_config(&userspace_config.raw);
- eeconfig_init_keymap();
-}
-
-void eeconfig_init_user_datablock(void) {
-#if (EECONFIG_USER_DATA_SIZE) > 4
- uint8_t eeconfig_empty_temp[(EECONFIG_USER_DATA_SIZE)-4] = {0};
- eeconfig_update_user_data(eeconfig_empty_temp);
-#endif
-}
-
-#ifdef SPLIT_KEYBOARD
-__attribute__((weak)) void matrix_slave_scan_keymap(void) {}
-void matrix_slave_scan_user(void) {
-# if defined(AUDIO_ENABLE)
-# if !defined(NO_MUSIC_MODE)
- music_task();
-# endif
-# ifdef AUDIO_INIT_DELAY
- if (!is_keyboard_master()) {
- static bool delayed_tasks_run = false;
- static uint16_t delayed_task_timer = 0;
- if (!delayed_tasks_run) {
- if (!delayed_task_timer) {
- delayed_task_timer = timer_read();
- } else if (timer_elapsed(delayed_task_timer) > 300) {
- audio_startup();
- delayed_tasks_run = true;
- }
- }
- }
-# endif
-# endif
-# ifdef SEQUENCER_ENABLE
- sequencer_task();
-# endif
-# ifdef LED_MATRIX_ENABLE
- led_matrix_task();
-# endif
-# ifdef HAPTIC_ENABLE
- haptic_task();
-# endif
-
- matrix_slave_scan_keymap();
-}
-#endif
-
-__attribute__((weak)) void housekeeping_task_keymap(void) {}
-void housekeeping_task_user(void) {
-#ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code.
- run_diablo_macro_check();
-#endif // TAP_DANCE_ENABLE
-#if defined(CUSTOM_RGB_MATRIX)
- housekeeping_task_rgb_matrix();
-#endif
-#ifdef I2C_SCANNER_ENABLE
- housekeeping_task_i2c_scanner();
-#endif
-#ifdef CUSTOM_OLED_DRIVER
- housekeeping_task_oled();
-#endif
-#if defined(SPLIT_KEYBOARD) && defined(SPLIT_TRANSACTION_IDS_USER)
- housekeeping_task_transport_sync();
-#endif
-
- housekeeping_task_keymap();
-}
diff --git a/users/drashna/callbacks.h b/users/drashna/callbacks.h
deleted file mode 100644
index 77c0403f82..0000000000
--- a/users/drashna/callbacks.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include "quantum.h"
-
-void keyboard_post_init_keymap(void);
-void matrix_init_secret(void);
-bool shutdown_keymap(bool jump_to_bootloader);
-void suspend_power_down_keymap(void);
-void suspend_wakeup_init_keymap(void);
-void matrix_scan_keymap(void);
-void matrix_scan_secret(void);
-layer_state_t layer_state_set_keymap(layer_state_t state);
-layer_state_t default_layer_state_set_keymap(layer_state_t state);
-void led_set_keymap(uint8_t usb_led);
-void eeconfig_init_keymap(void);
-void housekeeping_task_keymap(void);
-
-#ifdef CUSTOM_UNICODE_ENABLE
-void keyboard_post_init_unicode(void);
-#endif
-#ifdef SPLIT_KEYBOARD
-void matrix_slave_scan_keymap(void);
-#endif
diff --git a/users/drashna/callbacks.md b/users/drashna/callbacks.md
deleted file mode 100644
index 8ef2707fc2..0000000000
--- a/users/drashna/callbacks.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# Custom Userspace Callback Functions
-
-Specifically QMK works by using customized callback functions for everything. This allows for multiple levels of customization.
-
-`matrix_scan` calls `matrix_scan_kb`, which calls `matrix_scan_user`.
-`process_record` calls a bunch of stuff, but eventually calls `process_record_kb` which calls `process_record_user`
-The same goes for `matrix_init`, `layer_state_set`, `led_set`, and a few other functions.
-
-All (most) `_user` functions are handled here, in the userspace instead. To allow keyboard specific configuration, I've created `_keymap` functions that can be called by the keymap.c files instead.
-
-This allows for keyboard specific configuration while maintaining the ability to customize the board.
-
-My [Ergodox EZ Keymap](https://github.com/qmk/qmk_firmware/blob/master/layouts/community/ergodox/drashna/keymap.c) is a good example of this, as it uses the LEDs as modifier indicators.
-
-You can see a list of these files in [callbacks.c](callbacks.c), or a shortend list here
-
-```c
-__attribute__((weak)) void keyboard_post_init_keymap(void) {}
-void keyboard_post_init_user(void) {
- keyboard_post_init_keymap();
-}
-
-__attribute__((weak)) void matrix_scan_keymap(void) {}
-void matrix_scan_user(void) {
- matrix_scan_keymap();
-}
-
-__attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (!process_record_keymap(keycode, record)) { return false; }
- return true;
-}
-
-__attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
-layer_state_t layer_state_set_user(layer_state_t state) {
- state = layer_state_set_keymap(state);
- return state;
-}
-
-__attribute__ ((weak)) void led_set_keymap(uint8_t usb_led) {}
-void led_set_user(uint8_t usb_led) {
- led_set_keymap(usb_led);
-}
-
-__attribute__ ((weak)) void suspend_power_down_keymap(void) {}
-void suspend_power_down_user(void) {
- suspend_power_down_keymap();
-}
-
-__attribute__ ((weak)) void suspend_wakeup_init_keymap(void) {}
-void suspend_wakeup_init_user(void) {
- suspend_wakeup_init_keymap();
-}
-
-
-__attribute__((weak)) bool shutdown_keymap(bool jump_to_bootloader) {
- return true;
-}
-bool shutdown_user(bool jump_to_bootloader) {
- if (!shutdown_keymap(jump_to_bootloader)) {
- return false;
- }
- return true;
-}
-
-__attribute__ ((weak)) void eeconfig_init_keymap(void) {}
-void eeconfig_init_user(void) {
- eeconfig_update_user(0);
- eeconfig_init_keymap();
-}
-```
diff --git a/users/drashna/config.h b/users/drashna/config.h
deleted file mode 100644
index ec9bbf1afb..0000000000
--- a/users/drashna/config.h
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#ifdef IS_COMMAND
-# undef IS_COMMAND
-#endif
-#define IS_COMMAND() (((get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT) == MOD_MASK_SHIFT)
-
-#if defined(SPLIT_KEYBOARD)
-# include "split/split_config.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-# include "rgb/rgblight_config.h"
-#endif // RGBLIGHT_ENABLE
-
-#ifdef RGB_MATRIX_ENABLE
-# include "rgb/rgb_matrix_config.h"
-#endif // RGB_MATRIX_ENABLE
-
-#ifdef OLED_ENABLE
-# include "oled/oled_config.h"
-#endif
-
-#ifdef POINTING_DEVICE_ENABLE
-# include "pointing/pointing_config.h"
-#endif // POINTING_DEVICE_ENABLE
-
-#ifdef AUDIO_ENABLE
-# include "audio_config.h"
-#endif // AUDIO_ENABLE
-
-#if defined(WPM_ENABLE)
-// # define WPM_LAUNCH_CONTROL
-// # define WPM_UNFILTERED
-# define WPM_ALLOW_COUNT_REGRESSION
-# define WPM_SAMPLE_SECONDS 10
-# define WPM_SAMPLE_PERIODS 50
-# define WPM_ESTIMATED_WORD_SIZE 5
-#endif
-
-#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE, UNICODE_MODE_MACOS
-
-#ifndef ONESHOT_TAP_TOGGLE
-# define ONESHOT_TAP_TOGGLE 2
-#endif // !ONESHOT_TAP_TOGGLE
-
-#ifndef ONESHOT_TIMEOUT
-# define ONESHOT_TIMEOUT 3000
-#endif // !ONESHOT_TIMEOUT
-
-#if defined(PER_KEY_TAPPING)
-# define PERMISSIVE_HOLD_PER_KEY
-# define QUICK_TAP_TERM_PER_KEY
-# define HOLD_ON_OTHER_KEY
-# define RETRO_TAPPING_PER_KEY
-# define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
-# define TAPPING_TERM_PER_KEY
-#else
-# undef PERMISSIVE_HOLD
-#endif
-
-#ifndef TAPPING_TOGGLE
-# define TAPPING_TOGGLE 1
-#endif
-
-#define TAP_CODE_DELAY 5
-
-/* Disable unused and unneeded features to reduce on firmware size */
-#ifdef LOCKING_SUPPORT_ENABLE
-# undef LOCKING_SUPPORT_ENABLE
-#endif
-#ifdef LOCKING_RESYNC_ENABLE
-# undef LOCKING_RESYNC_ENABLE
-#endif
-
-#ifdef CONVERT_TO_PROTON_C
-// pins that are available but not present on Pro Micro
-# define A3 PAL_LINE(GPIOA, 3)
-# define A4 PAL_LINE(GPIOA, 4)
-# define A5 PAL_LINE(GPIOA, 5)
-# define A6 PAL_LINE(GPIOA, 6)
-# define A7 PAL_LINE(GPIOA, 7)
-# define A8 PAL_LINE(GPIOA, 8)
-# define A13 PAL_LINE(GPIOA, 13)
-# define A14 PAL_LINE(GPIOA, 14)
-# define A15 PAL_LINE(GPIOA, 15)
-# define B10 PAL_LINE(GPIOB, 10)
-# define B11 PAL_LINE(GPIOB, 11)
-# define B12 PAL_LINE(GPIOB, 12)
-# define C13 PAL_LINE(GPIOC, 13)
-# define C14 PAL_LINE(GPIOC, 14)
-# define C15 PAL_LINE(GPIOC, 15)
-#endif
-
-#define ENABLE_COMPILE_KEYCODE
-
-#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
-
-/* --- PRINTF_BYTE_TO_BINARY macro's --- */
-#define PRINTF_BINARY_PATTERN_INT8 "%c%c%c%c%c%c%c%c"
-#define PRINTF_BYTE_TO_BINARY_INT8(i) (((i)&0x80ll) ? '1' : '0'), (((i)&0x40ll) ? '1' : '0'), (((i)&0x20ll) ? '1' : '0'), (((i)&0x10ll) ? '1' : '0'), (((i)&0x08ll) ? '1' : '0'), (((i)&0x04ll) ? '1' : '0'), (((i)&0x02ll) ? '1' : '0'), (((i)&0x01ll) ? '1' : '0')
-
-#define PRINTF_BINARY_PATTERN_INT16 PRINTF_BINARY_PATTERN_INT8 " " PRINTF_BINARY_PATTERN_INT8
-#define PRINTF_BYTE_TO_BINARY_INT16(i) PRINTF_BYTE_TO_BINARY_INT8((i) >> 8), PRINTF_BYTE_TO_BINARY_INT8(i)
-#define PRINTF_BINARY_PATTERN_INT32 PRINTF_BINARY_PATTERN_INT16 " " PRINTF_BINARY_PATTERN_INT16
-#define PRINTF_BYTE_TO_BINARY_INT32(i) PRINTF_BYTE_TO_BINARY_INT16((i) >> 16), PRINTF_BYTE_TO_BINARY_INT16(i)
-#define PRINTF_BINARY_PATTERN_INT64 PRINTF_BINARY_PATTERN_INT32 " " PRINTF_BINARY_PATTERN_INT32
-#define PRINTF_BYTE_TO_BINARY_INT64(i) PRINTF_BYTE_TO_BINARY_INT32((i) >> 32), PRINTF_BYTE_TO_BINARY_INT32(i)
-/* --- end macros --- */
-
-#ifndef EECONFIG_USER_DATA_SIZE
-# define EECONFIG_USER_DATA_SIZE 8
-#endif
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
deleted file mode 100644
index b8ccbb028c..0000000000
--- a/users/drashna/drashna.c
+++ /dev/null
@@ -1,319 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-#include <stdio.h>
-#include <ctype.h>
-
-userspace_config_t userspace_config;
-
-/**
- * @brief Handle registering a keycode, with optional modifer based on timed event
- *
- * @param code keycode to send to host
- * @param mod_code modifier to send with code, if held for tapping term or longer
- * @param pressed the press/release event (can use "record->event.pressed" for this)
- * @return true exits function
- * @return false exits function
- */
-bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed) {
- static uint16_t this_timer;
- mod_key_press(code, mod_code, pressed, this_timer);
- return false;
-}
-
-/**
- * @brief Handle registation of keycode, with optional modifier based on custom timer
- *
- * @param code keycode to send to host
- * @param mod_code modifier keycode to send with code, if held for tapping term or longer
- * @param pressed the press/release event
- * @param this_timer custom timer to use
- * @return true
- * @return false
- */
-bool mod_key_press(uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer) {
- if (pressed) {
- this_timer = timer_read();
- } else {
- if (timer_elapsed(this_timer) < TAPPING_TERM) {
- tap_code(code);
- } else {
- register_code(mod_code);
- tap_code(code);
- unregister_code(mod_code);
- }
- }
- return false;
-}
-
-/**
- * @brief Performs exact match for modifier values
- *
- * @param value the modifer varible (get_mods/get_oneshot_mods/get_weak_mods)
- * @param mask the modifier mask to check for
- * @return true Has the exact modifiers specifed
- * @return false Does not have the exact modifiers specified
- */
-bool hasAllBitsInMask(uint8_t value, uint8_t mask) {
- value &= 0xF;
- mask &= 0xF;
-
- return (value & mask) == mask;
-}
-
-/**
- * @brief Tap keycode, with no mods
- *
- * @param kc keycode to use
- */
-void tap_code16_nomods(uint16_t kc) {
- uint8_t temp_mod = get_mods();
- clear_mods();
- clear_oneshot_mods();
- tap_code16(kc);
- set_mods(temp_mod);
-}
-
-#ifdef I2C_SCANNER_ENABLE
-# include "i2c_master.h"
-# include "debug.h"
-
-# ifndef I2C_SCANNER_TIMEOUT
-# define I2C_SCANNER_TIMEOUT 50
-# endif
-
-i2c_status_t i2c_start_bodge(uint8_t address, uint16_t timeout) {
- i2c_start(address);
-
- // except on ChibiOS where the only way is do do "something"
- uint8_t data = 0;
- return i2c_readReg(address, 0, &data, sizeof(data), I2C_SCANNER_TIMEOUT);
-}
-
-# define i2c_start i2c_start_bodge
-
-void do_scan(void) {
- uint8_t nDevices = 0;
-
- dprintf("Scanning...\n");
-
- for (uint8_t address = 1; address < 127; address++) {
- // The i2c_scanner uses the return value of
- // i2c_start to see if a device did acknowledge to the address.
- i2c_status_t error = i2c_start(address << 1, I2C_SCANNER_TIMEOUT);
- if (error == I2C_STATUS_SUCCESS) {
- i2c_stop();
- xprintf(" I2C device found at address 0x%02X\n", I2C_SCANNER_TIMEOUT);
- nDevices++;
- } else {
- // dprintf(" Unknown error (%u) at address 0x%02X\n", error, address);
- }
- }
-
- if (nDevices == 0)
- xprintf("No I2C devices found\n");
- else
- xprintf("done\n");
-}
-
-uint16_t scan_timer = 0;
-
-void housekeeping_task_i2c_scanner(void) {
- if (timer_elapsed(scan_timer) > 5000) {
- do_scan();
- scan_timer = timer_read();
- }
-}
-
-void keyboard_post_init_i2c(void) {
- i2c_init();
- scan_timer = timer_read();
-}
-#endif
-
-#if defined(AUTOCORRECT_ENABLE)
-# if defined(AUDIO_ENABLE)
-# ifdef USER_SONG_LIST
-float autocorrect_song[][2] = SONG(MARIO_GAMEOVER);
-# else
-float autocorrect_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
-# endif
-# endif
-
-bool apply_autocorrect(uint8_t backspaces, const char* str, char *typo, char *correct) {
- if (layer_state_is(_GAMEPAD)) {
- return false;
- }
- // TO-DO use unicode stuff for this. Will probably have to reverse engineer
- // send string to get working properly, to send char string.
-
-# if defined(AUDIO_ENABLE)
- PLAY_SONG(autocorrect_song);
-# endif
- return true;
-}
-#endif
-
-#if defined(CAPS_WORD_ENABLE)
-bool caps_word_press_user(uint16_t keycode) {
- switch (keycode) {
- // Keycodes that continue Caps Word, with shift applied.
- case KC_MINS:
- if (!keymap_config.swap_lctl_lgui) {
- return true;
- }
- case KC_A ... KC_Z:
- add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
- return true;
-
- // Keycodes that continue Caps Word, without shifting.
- case KC_1 ... KC_0:
- case KC_BSPC:
- case KC_DEL:
- case KC_UNDS:
- return true;
-
- default:
- return false; // Deactivate Caps Word.
- }
-}
-
-# if !defined(NO_ACTION_ONESHOT)
-void oneshot_locked_mods_changed_user(uint8_t mods) {
- if (mods & MOD_MASK_SHIFT) {
- del_mods(MOD_MASK_SHIFT);
- set_oneshot_locked_mods(~MOD_MASK_SHIFT & get_oneshot_locked_mods());
- caps_word_on();
- }
-}
-# endif
-#endif
-
-void format_layer_bitmap_string(char *buffer, layer_state_t state, layer_state_t default_state) {
- for (int i = 0; i < 16; i++) {
- if (i == 0 || i == 4 || i == 8 || i == 12) {
- *buffer = ' ';
- ++buffer;
- }
-
- uint8_t layer = i;
- if ((default_state & ((layer_state_t)1 << layer)) != 0) {
- *buffer = 'D';
- } else if ((state & ((layer_state_t)1 << layer)) != 0) {
- *buffer = '1';
- } else {
- *buffer = '_';
- }
- ++buffer;
- }
- *buffer = 0;
-}
-
-#if defined(OS_DETECTION_ENABLE) && defined(DEFERRED_EXEC_ENABLE)
-os_variant_t os_type;
-
-uint32_t startup_exec(uint32_t trigger_time, void *cb_arg) {
- if (is_keyboard_master()) {
- os_type = detected_host_os();
- if (os_type) {
- bool is_mac = (os_type == OS_MACOS) || (os_type == OS_IOS);
- if (keymap_config.swap_lctl_lgui != is_mac) {
- keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = is_mac;
- eeconfig_update_keymap(keymap_config.raw);
- }
-# ifdef UNICODE_COMMON_ENABLE
- set_unicode_input_mode_soft(keymap_config.swap_lctl_lgui ? UNICODE_MODE_MACOS : UNICODE_MODE_WINCOMPOSE);
-# endif
- switch (os_type) {
- case OS_UNSURE:
- xprintf("unknown OS Detected\n");
- break;
- case OS_LINUX:
- xprintf("Linux Detected\n");
- break;
- case OS_WINDOWS:
- xprintf("Windows Detected\n");
- break;
-# if 0
- case OS_WINDOWS_UNSURE:
- xprintf("Windows? Detected\n");
- break;
-# endif
- case OS_MACOS:
- xprintf("MacOS Detected\n");
- break;
- case OS_IOS:
- xprintf("iOS Detected\n");
- break;
-# if 0
- case OS_PS5:
- xprintf("PlayStation 5 Detected\n");
- break;
- case OS_HANDHELD:
- xprintf("Nintend Switch/Quest 2 Detected\n");
- break;
-# endif
- }
- }
- }
-
- return os_type ? 0 : 500;
-}
-#endif
-
-static host_driver_t *host_driver = 0;
-static bool host_driver_disabled = false;
-
-void set_keyboard_lock(bool status) {
- if (!status && !host_get_driver()) {
- host_set_driver(host_driver);
- } else if (status && host_get_driver()) {
- host_driver = host_get_driver();
- clear_keyboard();
- host_set_driver(0);
- } else if (status) {
- clear_keyboard();
- }
-
- host_driver_disabled = status;
-}
-
-void toggle_keyboard_lock(void) {
- set_keyboard_lock(!host_driver_disabled);
-}
-
-bool get_keyboard_lock(void) {
- return host_driver_disabled;
-}
-
-const char *get_layer_name_string(layer_state_t state, bool alt_name) {
- switch (get_highest_layer(state)) {
- case _QWERTY:
- return alt_name ? "Num Pad" : "QWERTY";
- case _COLEMAK:
- return "Colemak";
- case _COLEMAK_DH:
- return "Colemak-DH";
- case _DVORAK:
- return "Dvorak";
- case _GAMEPAD:
- return "Gamepad";
- case _DIABLO:
- return "Diablo";
- case _DIABLOII:
- return "Diablo II";
- case _MOUSE:
- return alt_name ? "Macros" : "Mouse";
- case _MEDIA:
- return "Media";
- case _LOWER:
- return "Lower";
- case _RAISE:
- return "Raise";
- case _ADJUST:
- return "Adjust";
- default:
- return "Unknown";
- }
-}
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
deleted file mode 100644
index 49cdf6ca21..0000000000
--- a/users/drashna/drashna.h
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-#include QMK_KEYBOARD_H
-
-#include "eeconfig_users.h"
-#include "keyrecords/wrappers.h"
-#include "keyrecords/process_records.h"
-#include "callbacks.h"
-
-#ifdef TAP_DANCE_ENABLE
-# include "keyrecords/tap_dances.h"
-#endif // TAP_DANCE_ENABLE
-#if defined(RGBLIGHT_ENABLE)
-# include "rgb/rgb_stuff.h"
-#endif
-#if defined(RGB_MATRIX_ENABLE)
-# include "rgb/rgb_matrix_stuff.h"
-#endif
-#if defined(OLED_ENABLE)
-# include "oled/oled_stuff.h"
-#endif
-#ifdef SPLIT_KEYBOARD
-# include "split/transport_sync.h"
-#endif
-#ifdef POINTING_DEVICE_ENABLE
-# include "pointing/pointing.h"
-#endif
-#ifdef OS_DETECTION_ENABLE
-# include "os_detection.h"
-#endif
-#ifdef UNICODE_COMMON_ENABLE
-# include "keyrecords/unicode.h"
-#endif
-
-/* Define layer names */
-enum userspace_layers {
- _QWERTY = 0,
- _NUMLOCK = 0,
- FIRST_DEFAULT_LAYER = 0,
- _COLEMAK_DH,
- _COLEMAK,
- _DVORAK,
- LAST_DEFAULT_LAYER = _DVORAK,
- _GAMEPAD,
- _DIABLO,
- _DIABLOII,
- _MOUSE,
- _MEDIA,
- _LOWER,
- _RAISE,
- _ADJUST,
-};
-
-#define _MACROS _MOUSE
-#define _DEFAULT_LAYER_1 FIRST_DEFAULT_LAYER
-#define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 1)
-#define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 2)
-#define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 3)
-#if LAST_DEFAULT_LAYER > (FIRST_DEFAULT_LAYER + 3)
-# define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 4)
-# define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 5)
-# define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 6)
-# define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 7)
-# if LAST_DEFAULT_LAYER > (FIRST_DEFAULT_LAYER + 7)
-# define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 8)
-# define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 9)
-# define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 10)
-# define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 11)
-# endif
-#endif
-
-#define DEFAULT_LAYER_1_HSV HSV_CYAN
-#define DEFAULT_LAYER_2_HSV HSV_CHARTREUSE
-#define DEFAULT_LAYER_3_HSV HSV_MAGENTA
-#define DEFAULT_LAYER_4_HSV HSV_GOLDENROD
-
-#define DEFAULT_LAYER_1_RGB RGB_CYAN
-#define DEFAULT_LAYER_2_RGB RGB_CHARTREUSE
-#define DEFAULT_LAYER_3_RGB RGB_MAGENTA
-#define DEFAULT_LAYER_4_RGB RGB_GOLDENROD
-
-bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed);
-bool mod_key_press(uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
-bool hasAllBitsInMask(uint8_t value, uint8_t mask);
-void tap_code16_nomods(uint16_t kc);
-void format_layer_bitmap_string(char* buffer, layer_state_t state, layer_state_t default_state);
-
-// clang-format off
-typedef union {
- uint32_t raw;
- struct {
- bool rgb_layer_change :1;
- bool is_overwatch :1;
- bool nuke_switch :1;
- bool swapped_numbers :1;
- bool rgb_matrix_idle_anim :1;
- bool mouse_jiggler :1;
- uint8_t align_reserved :2;
- uint8_t oled_brightness :8;
- uint32_t reserved :15;
- bool check :1;
- };
-} userspace_config_t;
-// clang-format on
-
-_Static_assert(sizeof(userspace_config_t) == sizeof(uint32_t), "Userspace EECONFIG out of spec.");
-
-extern userspace_config_t userspace_config;
-
-void set_keyboard_lock(bool enable);
-bool get_keyboard_lock(void);
-void toggle_keyboard_lock(void);
-const char* get_layer_name_string(layer_state_t state, bool alt_name);
diff --git a/users/drashna/eeconfig_users.c b/users/drashna/eeconfig_users.c
deleted file mode 100644
index 8e0f1f10b6..0000000000
--- a/users/drashna/eeconfig_users.c
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "eeconfig_users.h"
-#include "eeprom.h"
-#include "eeconfig.h"
-#include <string.h>
-
-#if (TOTAL_EEPROM_BYTE_COUNT - 1) < EECONFIG_SIZE && !defined(KEYBOARD_input_club_ergodox_infinity)
-# error "More eeprom configured than is available."
-#endif
-#if (EECONFIG_USER_DATA_SIZE) != 0 && (EECONFIG_USER_DATA_SIZE) < 4
-# error "Not enough EEPROM configured for user config."
-#endif
-
-#if (EECONFIG_USER_DATA_SIZE) == 0
-# define EECONFIG_USER_TEMP EECONFIG_USER
-#else
-# define EECONFIG_USER_TEMP (uint32_t *)(EECONFIG_USER_DATABLOCK)
-#endif
-
-void eeconfig_read_user_config(uint32_t *data) {
-#if (EECONFIG_USER_DATA_SIZE) > 0
- if (!eeconfig_is_user_datablock_valid()) {
- memset(data, 0, 4);
- } else
-#endif
- eeprom_read_block(data, EECONFIG_USER_TEMP, 4);
-}
-
-void eeconfig_update_user_config(const uint32_t *data) {
- eeprom_update_block(data, EECONFIG_USER_TEMP, 4);
-#if (EECONFIG_USER_DATA_SIZE) > 0
- eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
-#endif
-}
-
-void eeconfig_read_user_data(void *data) {
-#if (EECONFIG_USER_DATA_SIZE) > 4
- if (eeconfig_is_user_datablock_valid()) {
- eeprom_read_block(data, EECONFIG_USER_DATABLOCK + 4, (EECONFIG_USER_DATA_SIZE)-4);
- } else {
- memset(data, 0, (EECONFIG_USER_DATA_SIZE));
- }
-#endif
-}
-
-void eeconfig_update_user_data(const void *data) {
-#if (EECONFIG_USER_DATA_SIZE) > 4
- eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
- eeprom_update_block(data, EECONFIG_USER_DATABLOCK + 4, (EECONFIG_USER_DATA_SIZE)-4);
-#endif
-}
diff --git a/users/drashna/eeconfig_users.h b/users/drashna/eeconfig_users.h
deleted file mode 100644
index c9b230df9c..0000000000
--- a/users/drashna/eeconfig_users.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include <stdint.h>
-
-void eeconfig_read_user_config(uint32_t *data);
-void eeconfig_update_user_config(const uint32_t *data);
-
-void eeconfig_read_user_data(void *data);
-void eeconfig_update_user_data(const void *data);
diff --git a/users/drashna/keyrecords/dynamic_macros.c b/users/drashna/keyrecords/dynamic_macros.c
deleted file mode 100644
index 43c2336cb6..0000000000
--- a/users/drashna/keyrecords/dynamic_macros.c
+++ /dev/null
@@ -1,283 +0,0 @@
-// Copyright 2016 Jack Humbert
-// Copyright 2019 Wojciech Siewierski < wojciech dot siewierski at onet dot pl >
-// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "keyrecords/dynamic_macros.h"
-#include "keyrecords/process_records.h"
-#include "wait.h"
-#include "debug.h"
-#include "eeprom.h"
-#include "eeconfig.h"
-#include <string.h>
-
-static uint8_t macro_id = 255;
-static uint8_t recording_state = STATE_NOT_RECORDING;
-
-#if EECONFIG_USER_DATA_SIZE < 4
-# error "EECONFIG_USER_DATA_SIZE not set. Don't step on others eeprom."
-#endif
-#ifndef DYNAMIC_MACRO_EEPROM_BLOCK0_ADDR
-# define DYNAMIC_MACRO_EEPROM_BLOCK0_ADDR (uint8_t*)(EECONFIG_USER_DATABLOCK + 4)
-#endif
-
-dynamic_macro_t dynamic_macros[DYNAMIC_MACRO_COUNT];
-_Static_assert((sizeof(dynamic_macros)) <= (EECONFIG_USER_DATA_SIZE - 4), "User Data Size must be large enough to host all macros");
-
-__attribute__((weak)) void dynamic_macro_record_start_user(void) {}
-
-__attribute__((weak)) void dynamic_macro_play_user(uint8_t macro_id) {}
-
-__attribute__((weak)) void dynamic_macro_record_key_user(uint8_t macro_id, keyrecord_t* record) {}
-
-__attribute__((weak)) void dynamic_macro_record_end_user(uint8_t macro_id) {}
-
-/**
- * @brief Gets the current macro ID
- *
- * @return uint8_t
- */
-uint8_t dynamic_macro_get_current_id(void) {
- return macro_id;
-}
-
-/**
- * @brief Gets the current recording state
- *
- * @return uint8_t
- */
-uint8_t dynamic_macro_get_recording_state(void) {
- return recording_state;
-}
-
-/**
- * Start recording of the dynamic macro.
- *
- * @param macro_id[in] The id of macro to be recorded
- */
-bool dynamic_macro_record_start(uint8_t macro_id) {
- if (macro_id >= (uint8_t)(DYNAMIC_MACRO_COUNT)) {
- return false;
- }
- dprintf("dynamic macro recording: started for slot %d\n", macro_id);
-
- dynamic_macro_record_start_user();
-
- clear_keyboard();
- layer_clear();
-
- dynamic_macros[macro_id].length = 0;
- return true;
-}
-
-/**
- * Play the dynamic macro.
- *
- * @param macro_id[in] The id of macro to be played
- */
-void dynamic_macro_play(uint8_t macro_id) {
- if (macro_id >= (uint8_t)(DYNAMIC_MACRO_COUNT)) {
- return;
- }
-
- dprintf("dynamic macro: slot %d playback, length %d\n", macro_id, dynamic_macros[macro_id].length);
-
- layer_state_t saved_layer_state = layer_state;
-
- clear_keyboard();
- layer_clear();
-
- for (uint8_t i = 0; i < dynamic_macros[macro_id].length; ++i) {
- process_record(&dynamic_macros[macro_id].events[i]);
- }
-
- clear_keyboard();
-
- layer_state_set(saved_layer_state);
-
- dynamic_macro_play_user(macro_id);
-}
-
-/**
- * Record a single key in a dynamic macro.
- *
- * @param macro_id[in] The start of the used macro buffer.
- * @param record[in] The current keypress.
- */
-void dynamic_macro_record_key(uint8_t macro_id, keyrecord_t* record) {
- dynamic_macro_t* macro = &dynamic_macros[macro_id];
- uint8_t length = macro->length;
-
- /* If we've just started recording, ignore all the key releases. */
- if (!record->event.pressed && length == 0) {
- dprintln("dynamic macro: ignoring a leading key-up event");
- return;
- }
-
- if (length < DYNAMIC_MACRO_SIZE) {
- macro->events[length] = *record;
- macro->length = ++length;
- } else {
- dynamic_macro_record_key_user(macro_id, record);
- }
-
- dprintf("dynamic macro: slot %d length: %d/%d\n", macro_id, length, DYNAMIC_MACRO_SIZE);
-}
-
-/**
- * End recording of the dynamic macro. Essentially just update the
- * pointer to the end of the macro.
- */
-void dynamic_macro_record_end(uint8_t macro_id) {
- if (macro_id >= (uint8_t)(DYNAMIC_MACRO_COUNT)) {
- return;
- }
- dynamic_macro_record_end_user(macro_id);
-
- dynamic_macro_t* macro = &dynamic_macros[macro_id];
- uint8_t length = macro->length;
-
- keyrecord_t* events_begin = &(macro->events[0]);
- keyrecord_t* events_pointer = &(macro->events[length - 1]);
-
- dprintf("dynamic_macro: macro length before trimming: %d\n", macro->length);
- while (events_pointer != events_begin && (events_pointer)->event.pressed) {
- dprintln("dynamic macro: trimming a trailing key-down event");
- --(macro->length);
- --events_pointer;
- }
-
- macro->checksum = dynamic_macro_calc_crc(macro);
- dynamic_macro_save_eeprom(macro_id);
-
- dprintf("dynamic macro: slot %d saved, length: %d\n", macro_id, length);
-}
-
-bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t* record) {
- if (STATE_NOT_RECORDING == recording_state) {
- /* Program key pressed to request programming mode */
- if (keycode == DYN_MACRO_PROG && record->event.pressed) {
- // dynamic_macro_led_blink();
-
- recording_state = STATE_RECORD_KEY_PRESSED;
- dprintf("dynamic macro: programming key pressed, waiting for macro slot selection. %d\n", recording_state);
-
- return false;
- }
- /* Macro key pressed to request macro playback */
- if (IS_DYN_KEYCODE(keycode) && record->event.pressed) {
- dynamic_macro_play(keycode - DYN_MACRO_KEY00);
-
- return false;
- }
-
- /* Non-dynamic macro key, process it elsewhere. */
- return true;
- } else if (STATE_RECORD_KEY_PRESSED == recording_state) {
- /* Program key pressed again before a macro selector key, cancel macro recording.
- Blink leds to indicate cancelation. */
- if (keycode == DYN_MACRO_PROG && record->event.pressed) {
- // dynamic_macro_led_blink();
-
- recording_state = STATE_NOT_RECORDING;
- dprintf("dynamic macro: programming key pressed, programming mode canceled. %d\n", recording_state);
-
- return false;
- } else if (IS_DYN_KEYCODE(keycode) && record->event.pressed) {
- macro_id = keycode - DYN_MACRO_KEY00;
-
- if (dynamic_macro_record_start(macro_id)) {
- /* Macro slot selected, enter recording state. */
- recording_state = STATE_CURRENTLY_RECORDING;
- } else {
- recording_state = STATE_NOT_RECORDING;
- }
-
- return false;
- }
- /* Ignore any non-macro key press while in RECORD_KEY_PRESSED state. */
- return false;
- } else if (STATE_CURRENTLY_RECORDING == recording_state) {
- /* Program key pressed to request end of macro recording. */
- if (keycode == DYN_MACRO_PROG && record->event.pressed) {
- dynamic_macro_record_end(macro_id);
- recording_state = STATE_NOT_RECORDING;
-
- return false;
- }
- /* Don't record other macro key presses. */
- else if (IS_DYN_KEYCODE(keycode) && record->event.pressed) {
- dprintln("dynamic macro: playback key ignored in programming mode.");
- return false;
- }
- /* Non-macro keypress that should be recorded */
- else {
- dynamic_macro_record_key(macro_id, record);
-
- /* Don't output recorded keypress. */
- return false;
- }
- }
-
- return true;
-}
-
-static inline uint16_t crc16_update(uint16_t crc, uint8_t a) {
- crc ^= a;
- for (uint8_t i = 0; i < 8; ++i) {
- if (crc & 1)
- crc = (crc >> 1) ^ 0xA001;
- else
- crc = (crc >> 1);
- }
- return crc;
-}
-
-uint16_t dynamic_macro_calc_crc(dynamic_macro_t* macro) {
- uint16_t crc = 0;
- uint8_t* data = (uint8_t*)macro;
-
- for (uint16_t i = 0; i < DYNAMIC_MACRO_CRC_LENGTH; ++i) {
- crc = crc16_update(crc, *(data++));
- }
- return crc;
-}
-
-inline void* dynamic_macro_eeprom_macro_addr(uint8_t macro_id) {
- return DYNAMIC_MACRO_EEPROM_BLOCK0_ADDR + sizeof(dynamic_macro_t) * macro_id;
-}
-
-void dynamic_macro_load_eeprom_all(void) {
- for (uint8_t i = 0; i < DYNAMIC_MACRO_COUNT; ++i) {
- dynamic_macro_load_eeprom(i);
- }
-}
-
-void dynamic_macro_load_eeprom(uint8_t macro_id) {
- dynamic_macro_t* dst = &dynamic_macros[macro_id];
-
- eeprom_read_block(dst, dynamic_macro_eeprom_macro_addr(macro_id), sizeof(dynamic_macro_t));
-
- /* Validate checksum, ifchecksum is NOT valid for macro, set its length to 0 to prevent its use. */
- if (dynamic_macro_calc_crc(dst) != dst->checksum) {
- dprintf("dynamic macro: slot %d not loaded, checksum mismatch\n", macro_id);
- dst->length = 0;
-
- return;
- }
-
- dprintf("dynamic macro: slot %d loaded from eeprom, checksum okay\n", macro_id);
-}
-
-void dynamic_macro_save_eeprom(uint8_t macro_id) {
- dynamic_macro_t* src = &dynamic_macros[macro_id];
-
- eeprom_update_block(src, dynamic_macro_eeprom_macro_addr(macro_id), sizeof(dynamic_macro_t));
- dprintf("dynamic macro: slot %d saved to eeprom\n", macro_id);
-}
-
-void dynamic_macro_init(void) {
- /* zero out macro blocks */
- memset(&dynamic_macros, 0, DYNAMIC_MACRO_COUNT * sizeof(dynamic_macro_t));
- dynamic_macro_load_eeprom_all();
-}
diff --git a/users/drashna/keyrecords/dynamic_macros.h b/users/drashna/keyrecords/dynamic_macros.h
deleted file mode 100644
index 5eefb9b268..0000000000
--- a/users/drashna/keyrecords/dynamic_macros.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2016 Jack Humbert
-// Copyright 2019 Wojciech Siewierski < wojciech dot siewierski at onet dot pl >
-// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include "action.h"
-#include "action_layer.h"
-
-#ifndef DYNAMIC_MACRO_COUNT
-# define DYNAMIC_MACRO_COUNT 8
-#endif
-
-#ifndef DYNAMIC_MACRO_SIZE
-# define DYNAMIC_MACRO_SIZE 64
-#endif
-
-enum dynamic_macro_recording_state {
- STATE_NOT_RECORDING,
- STATE_RECORD_KEY_PRESSED,
- STATE_CURRENTLY_RECORDING,
-};
-
-typedef struct {
- keyrecord_t events[DYNAMIC_MACRO_SIZE];
- uint8_t length;
- uint16_t checksum;
-} dynamic_macro_t;
-
-void dynamic_macro_init(void);
-bool dynamic_macro_record_start(uint8_t macro_id);
-void dynamic_macro_play(uint8_t macro_id);
-void dynamic_macro_record_key(uint8_t macro_id, keyrecord_t* record);
-void dynamic_macro_record_end(uint8_t macro_id);
-bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t* record);
-
-void dynamic_macro_record_start_user(void);
-void dynamic_macro_play_user(uint8_t macro_id);
-void dynamic_macro_record_key_user(uint8_t macro_id, keyrecord_t* record);
-void dynamic_macro_record_end_user(uint8_t macro_id);
-
-#define DYNAMIC_MACRO_CRC_LENGTH (sizeof(dynamic_macro_t) - sizeof(uint16_t))
-#define IS_DYN_KEYCODE(keycode) (keycode >= DYN_MACRO_KEY00 && keycode <= DYN_MACRO_KEY15)
-
-uint16_t dynamic_macro_calc_crc(dynamic_macro_t* macro);
-void dynamic_macro_load_eeprom_all(void);
-void dynamic_macro_load_eeprom(uint8_t macro_id);
-void dynamic_macro_save_eeprom(uint8_t macro_id);
-bool dynamic_macro_header_correct(void);
diff --git a/users/drashna/keyrecords/keycodes.md b/users/drashna/keyrecords/keycodes.md
deleted file mode 100644
index bb5b65a77c..0000000000
--- a/users/drashna/keyrecords/keycodes.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-# Custom Keycodes
-
-Keycodes are defined in the `process_record.h` file and need to be included in the keymap.c files, so that they can be used there.
-
-A bunch of macros are present and are only included on boards that are not the Ergodox EZ or Orthodox, as they are not needed for those boards.
-
-* `DEFAULT_LAYER_1` ... `DEFAULT_LAYER_4` - This sets layer 0-3 as the default layer, and writes that to eeprom, and plays a chime.
-* `VRSN`, outputs the keyboard, keymap, commit and date info. Eg:
- * `handwired/tractyl_manuform/5x6_right/f411/drashna @ 0.15.9-162-g087d08, Built on: 2021-12-19-21:10:26`
-* `KC_DIABLO_CLEAR` - clears the diablo tapdance status.
-* `KC_CCCV` - Copy on hold, paste on tap.
-* `KEYLOCK` - This unloads the host driver, and prevents any data from being sent to the host. Hitting it again loads the driver, back.
diff --git a/users/drashna/keyrecords/process_records.c b/users/drashna/keyrecords/process_records.c
deleted file mode 100644
index d8d45dcac9..0000000000
--- a/users/drashna/keyrecords/process_records.c
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-#include "version.h"
-#ifdef OS_DETECTION_ENABLE
-# include "os_detection.h"
-#endif
-#ifdef CUSTOM_DYNAMIC_MACROS_ENABLE
-# include "keyrecords/dynamic_macros.h"
-#endif
-
-uint16_t copy_paste_timer;
-// Defines actions tor my global custom keycodes. Defined in drashna.h file
-// Then runs the _keymap's record handier if not processed here
-
-/**
- * @brief Keycode handler for keymaps
- *
- * This handles the keycodes at the keymap level, useful for keyboard specific customization
- */
-__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-__attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-/**
- * @brief Main user keycode handler
- *
- * This handles all of the keycodes for the user, including calling feature handlers.
- *
- * @param keycode Keycode from matrix
- * @param record keyrecord_t data structure
- * @return true Continue processing keycode and send to host
- * @return false Stop process keycode and do not send to host
- */
-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
- uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %1d, time: %5u, int: %1d, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
-#endif // KEYLOGGER_ENABLE
-#if defined(OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
- process_record_user_oled(keycode, record);
-#endif // OLED
-
- if (!(process_record_keymap(keycode, record) && process_record_secrets(keycode, record)
-#ifdef CUSTOM_RGB_MATRIX
- && process_record_user_rgb_matrix(keycode, record)
-#endif
-#ifdef CUSTOM_RGBLIGHT
- && process_record_user_rgb_light(keycode, record)
-#endif
-#ifdef CUSTOM_UNICODE_ENABLE
- && process_record_unicode(keycode, record)
-#endif
-#if defined(CUSTOM_POINTING_DEVICE)
- && process_record_pointing(keycode, record)
-#endif
-#ifdef CUSTOM_DYNAMIC_MACROS_ENABLE
- && process_record_dynamic_macro(keycode, record)
-#endif
- && true)) {
- return false;
- }
-
- switch (keycode) {
- 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), TAP_CODE_DELAY);
- }
- break;
-
- case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them
-#ifdef TAP_DANCE_ENABLE
- if (record->event.pressed) {
- for (uint8_t index = 0; index < 4; index++) {
- diablo_timer[index].key_interval = 0;
- }
- }
-#endif // TAP_DANCE_ENABLE
- break;
-
- case KC_CCCV: // One key copy/paste
- if (record->event.pressed) {
- copy_paste_timer = timer_read();
- } else {
- if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
- tap_code16(LCTL(KC_C));
- } else { // Tap, paste
- tap_code16(LCTL(KC_V));
- }
- }
- break;
- case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
-#if defined(CUSTOM_RGBLIGHT) || defined(CUSTOM_RGB_MATRIX)
- if (record->event.pressed) {
- userspace_config.rgb_layer_change ^= 1;
- dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
- eeconfig_update_user_config(&userspace_config.raw);
- if (userspace_config.rgb_layer_change) {
-# if defined(CUSTOM_RGB_MATRIX)
- rgb_matrix_set_flags(LED_FLAG_UNDERGLOW | LED_FLAG_KEYLIGHT | LED_FLAG_INDICATOR);
-# if defined(CUSTOM_RGBLIGHT)
- rgblight_enable_noeeprom();
-# endif
-# endif
- layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
-# if defined(CUSTOM_RGB_MATRIX)
- } else {
- rgb_matrix_set_flags(LED_FLAG_ALL);
-# if defined(CUSTOM_RGBLIGHT)
- rgblight_disable_noeeprom();
-# endif
-# endif
- }
- }
-#endif // CUSTOM_RGBLIGHT
- break;
-
-#if defined(CUSTOM_RGBLIGHT) || defined(CUSTOM_RGB_MATRIX)
- case RGB_TOG:
- // Split keyboards need to trigger on key-up for edge-case issue
-# ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-# else
- if (!record->event.pressed) {
-# endif
-# if defined(CUSTOM_RGBLIGHT) && !defined(RGBLIGHT_DISABLE_KEYCODES)
- rgblight_toggle();
-# endif
-# if defined(CUSTOM_RGB_MATRIX) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
- rgb_matrix_toggle();
-# endif
- }
- return false;
- break;
- case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
- if (record->event.pressed) {
- bool is_eeprom_updated;
-# if defined(CUSTOM_RGBLIGHT) && !defined(RGBLIGHT_DISABLE_KEYCODES)
- // This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
- if (userspace_config.rgb_layer_change) {
- userspace_config.rgb_layer_change = false;
- dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
- is_eeprom_updated = true;
- }
-# endif
-# if defined(CUSTOM_RGB_MATRIX) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
- if (userspace_config.rgb_matrix_idle_anim) {
- userspace_config.rgb_matrix_idle_anim = false;
- dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
- is_eeprom_updated = true;
- }
-# endif
- if (is_eeprom_updated) {
- eeconfig_update_user_config(&userspace_config.raw);
- }
- }
- break;
-#endif
- case KEYLOCK:
- if (record->event.pressed) {
- toggle_keyboard_lock();
- }
- break;
-#if defined(OS_DETECTION_ENABLE) && defined(OS_DETECTION_DEBUG_ENABLE)
- case STORE_SETUPS:
- if (record->event.pressed) {
- store_setups_in_eeprom();
- }
- return false;
- case PRINT_SETUPS:
- if (record->event.pressed) {
- print_stored_setups();
- }
- return false;
-#endif
- }
- return true;
-}
-
-__attribute__((weak)) void post_process_record_keymap(uint16_t keycode, keyrecord_t *record) {}
-void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
-#if defined(OS_DETECTION_ENABLE) && defined(UNICODE_COMMON_ENABLE)
- switch (keycode) {
- case QK_MAGIC_SWAP_LCTL_LGUI:
- case QK_MAGIC_SWAP_RCTL_RGUI:
- case QK_MAGIC_SWAP_CTL_GUI:
- case QK_MAGIC_UNSWAP_LCTL_LGUI:
- case QK_MAGIC_UNSWAP_RCTL_RGUI:
- case QK_MAGIC_UNSWAP_CTL_GUI:
- case QK_MAGIC_TOGGLE_CTL_GUI:
- set_unicode_input_mode_soft(keymap_config.swap_lctl_lgui ? UNICODE_MODE_MACOS : UNICODE_MODE_WINCOMPOSE);
- break;
- }
-#endif
- post_process_record_keymap(keycode, record);
-}
diff --git a/users/drashna/keyrecords/process_records.h b/users/drashna/keyrecords/process_records.h
deleted file mode 100644
index 0137976580..0000000000
--- a/users/drashna/keyrecords/process_records.h
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-#include "drashna.h"
-
-enum userspace_custom_keycodes {
- VRSN = QK_USER, // Prints QMK Firmware and board info
- KC_DIABLO_CLEAR, // Clears all Diablo Timers
- KC_RGB_T, // Toggles RGB Layer Indication mode
- RGB_IDL, // RGB Idling animations
- KC_SECRET_1, // test1
- KC_SECRET_2, // test2
- KC_SECRET_3, // test3
- KC_SECRET_4, // test4
- KC_SECRET_5, // test5
- KC_CCCV, // Hold to copy, tap to paste
- KC_NUKE, // NUCLEAR LAUNCH DETECTED!!!
- UC_FLIP, // (ಠ痊ಠ)┻━┻
- UC_TABL, // ┬─┬ノ( º _ ºノ)
- UC_SHRG, // ¯\_(ツ)_/¯
- UC_DISA, // ಠ_ಠ
- UC_IRNY,
- UC_CLUE,
- KEYLOCK, // Locks keyboard by unmounting driver
- KC_NOMODE,
- KC_WIDE,
- KC_SCRIPT,
- KC_BLOCKS,
- KC_REGIONAL,
- KC_AUSSIE,
- KC_ZALGO,
- KC_SUPER,
- KC_COMIC,
- KC_ACCEL,
- OLED_LOCK,
- OLED_BRIGHTNESS_INC,
- OLED_BRIGHTNESS_DEC,
-
- STORE_SETUPS,
- PRINT_SETUPS,
-
- PD_JIGGLER,
-
- DYN_MACRO_PROG,
- DYN_MACRO_KEY00,
- DYN_MACRO_KEY01,
- DYN_MACRO_KEY02,
- DYN_MACRO_KEY03,
- DYN_MACRO_KEY04,
- DYN_MACRO_KEY05,
- DYN_MACRO_KEY06,
- DYN_MACRO_KEY07,
- DYN_MACRO_KEY08,
- DYN_MACRO_KEY09,
- DYN_MACRO_KEY10,
- DYN_MACRO_KEY11,
- DYN_MACRO_KEY12,
- DYN_MACRO_KEY13,
- DYN_MACRO_KEY14,
- DYN_MACRO_KEY15,
-
- USER_SAFE_RANGE,
-};
-
-bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
-void post_process_record_keymap(uint16_t keycode, keyrecord_t *record);
-#ifdef CUSTOM_UNICODE_ENABLE
-bool process_record_unicode(uint16_t keycode, keyrecord_t *record);
-#endif
-
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-#define ADJUST MO(_ADJUST)
-#define TG_MODS OS_TOGG
-#define TG_GAME TG(_GAMEPAD)
-#define TG_DBLO TG(_DIABLO)
-#define OS_LWR OSL(_LOWER)
-#define OS_RSE OSL(_RAISE)
-
-#define KC_SEC1 KC_SECRET_1
-#define KC_SEC2 KC_SECRET_2
-#define KC_SEC3 KC_SECRET_3
-#define KC_SEC4 KC_SECRET_4
-#define KC_SEC5 KC_SECRET_5
-
-#define KC_QWERTY DF(_QWERTY)
-#define KC_COLEMAK_DH DF(_COLEMAK_DH)
-#define KC_COLEMAK DF(_COLEMAK)
-#define KC_DVORAK DF(_DVORAK)
-
-#define QWERTY KC_QWERTY
-#define DVORAK KC_DVORAK
-#define COLEMAK KC_COLEMAK
-#define CLMKDH KC_COLEMAK_DH
-
-#ifdef SWAP_HANDS_ENABLE
-# define KC_C1R3 SH_T(KC_TAB)
-#elif defined(DRASHNA_LP)
-# define KC_C1R3 TG(_GAMEPAD)
-#else // SWAP_HANDS_ENABLE
-# define KC_C1R3 KC_TAB
-#endif // SWAP_HANDS_ENABLE
-
-#define BK_LWER LT(_LOWER, KC_BSPC)
-#define SP_LWER LT(_LOWER, KC_SPC)
-#define DL_RAIS LT(_RAISE, KC_DEL)
-#define ET_RAIS LT(_RAISE, KC_ENTER)
-
-/* OSM keycodes, to keep things clean and easy to change */
-#define KC_MLSF OSM(MOD_LSFT)
-#define KC_MRSF OSM(MOD_RSFT)
-
-#define OS_LGUI OSM(MOD_LGUI)
-#define OS_RGUI OSM(MOD_RGUI)
-#define OS_LSFT OSM(MOD_LSFT)
-#define OS_RSFT OSM(MOD_RSFT)
-#define OS_LCTL OSM(MOD_LCTL)
-#define OS_RCTL OSM(MOD_RCTL)
-#define OS_LALT OSM(MOD_LALT)
-#define OS_RALT OSM(MOD_RALT)
-#define OS_MEH OSM(MOD_MEH)
-#define OS_HYPR OSM(MOD_HYPR)
-
-#define ALT_APP ALT_T(KC_APP)
-
-#define MG_NKRO MAGIC_TOGGLE_NKRO
-
-#define AUTO_CTN QK_AUTOCORRECT_TOGGLE
-/*
-Custom Keycodes for Diablo 3 layer
-But since TD() doesn't work when tap dance is disabled
-We use custom codes here, so we can substitute the right stuff
-*/
-#ifdef TAP_DANCE_ENABLE
-# define KC_D3_1 TD(TD_D3_1)
-# define KC_D3_2 TD(TD_D3_2)
-# define KC_D3_3 TD(TD_D3_3)
-# define KC_D3_4 TD(TD_D3_4)
-#else // TAP_DANCE_ENABLE
-# define KC_D3_1 KC_1
-# define KC_D3_2 KC_2
-# define KC_D3_3 KC_3
-# define KC_D3_4 KC_4
-#endif // TAP_DANCE_ENABLE
-
-#define OL_LOCK OLED_LOCK
-#define OL_BINC OLED_BRIGHTNESS_INC
-#define OL_BDEC OLED_BRIGHTNESS_DEC
diff --git a/users/drashna/keyrecords/readme.md b/users/drashna/keyrecords/readme.md
deleted file mode 100644
index b89777db3d..0000000000
--- a/users/drashna/keyrecords/readme.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Keycode handling and interception
-
- * [Diablo Tap Dancing](tap_dance.md)
- * [Keymap Wrappers](wrappers.md)
- * [Secret Macros](secrets.md)
- * [Custom Keycodes](keycodes.md)
- * [Unicode Input](unicode.md)
diff --git a/users/drashna/keyrecords/secrets.md b/users/drashna/keyrecords/secrets.md
deleted file mode 100644
index 3c40fa41b3..0000000000
--- a/users/drashna/keyrecords/secrets.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# Secret Macros
-
-With help from gitter and Colinta, this adds the ability to add hidden macros from other users.
-
-First, I have several files that are hidden/excluded from Git/GitHub. These contain everything needed for the macros. To hide these files, open `.git/info/exclude` and add `secrets.c` and `secrets.h` to that file, below the comments.
-
-And this requires `KC_SECRET_1` through `KC_SECRET_5` to be added in your keycode enum (usually in your `<name>.h` file) the keycodes for the new macros.
-
-## Git Exclusion
-
-To prevent `git` from seeing, or committing the secret files, you can exclude them. What's the point of having secrets if they're posted on GitHub for everyone to see!?!
-
-You can do this with the `.git/info/exclude` file, so that it's only ignored locally. Unfortunately, that means it's not consistently handled on each system.
-
-However, if you create a `.gitignore` file in the same folder, you keep things consistent between every system that the code is checked out on.
-
-```c
-secrets.c
-secrets.h
-```
-
-## secrets.c
-
-Here is the magic. This handles including the "secrets", and adding the custom macros to send them.
-
-```c
-#include QMK_KEYBOARD_H
-
-#if (__has_include("secrets.h") && !defined(NO_SECRETS))
-#include "secrets.h"
-#else
-static const char * const secrets[] = {
- "test1",
- "test2",
- "test3",
- "test4",
- "test5"
-};
-#endif
-
-bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_SECRET_1 ... KC_SECRET_5: // Secrets! Externally defined strings, not stored in repo
- if (record->event.pressed) {
- clear_mods();
- clear_oneshot_mods();
- send_string_with_delay(secrets[keycode - KC_SECRET_1], MACRO_TIMER);
- }
- return false;
- break;
- }
- return true;
-}
-```
-
-## secrets.h
-
-Now, for the actual secrets! The file needs to look like
-
-```c
-static const char * secrets[] = {
- "secret1",
- "secret2",
- "secret3",
- "secret4",
- "secret5"
-};
-```
-
-Replacing the strings with the codes that you need.
-
-## Process Record
-
-In whichever file you have your `process_record_*` function in, you will want to add this to the top:
-
-```c
-__attribute__ ((weak))
-bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-```
-
-This is so that the function can be called here, and replaced in the `secrets.c` file, and so it won't error out if it doesn't exist.
-
-And then, in the `process_record_user` function, assuming you have `return process_record_keymap(keycode, record)` here, you'll want to replace the "final" return with the following. Otherwise, you want to replace the `return true;` with `return process_record_secrets(keycode, record);`
-
-```c
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- // your existing macro code here.
- return process_record_keymap(keycode, record) && process_record_secrets(keycode, record);
-}
-```
-
-## rules.mk
-
-Here, you want your `/users/<name>/rules.mk` file to "detect" the existence of the `secrets.c` file, and only add it if the file exists.
-
-Additionally, to ensure that it's not added or processed in any way, it checks to see if `NO_SECRETS` is set. This way, if you run `qmk compile -kb keyboard -km name -e NO_SECRETS=yes`, it will remove the feature altogether.
-
-```make
-ifneq ($(strip $(NO_SECRETS)), yes)
- ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
- SRC += secrets.c
- endif
-endif
-```
-
-Alternately, if you want to make sure that you can disable the function without messing with the file, you need to add this to your `/users/<name>/rules.mk`, so that it catches the flag:
-
-```make
-ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
- SRC += secrets.c
-endif
-
-ifeq ($(strip $(NO_SECRETS)), yes)
- OPT_DEFS += -DNO_SECRETS
-endif
-```
-
-## Extras
-
-Additionally, because this file isn't present in the repo at all, you could add additional functionality that nobody else will see.
diff --git a/users/drashna/keyrecords/tap_dance.md b/users/drashna/keyrecords/tap_dance.md
deleted file mode 100644
index 9dff96640f..0000000000
--- a/users/drashna/keyrecords/tap_dance.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# Diablo Tap Dances
-
-My [Tap Dance](tap_dances.c) file includes the tap dance declarations, and everything needed for them.
-
-To disable, add `CUSTOM_TAP_DANCE = no` to your `rules.mk`.
-
-This is used for making Diablo 3 much easier to plan, especially at high rift levels.
-
-This works by using Tap Dances. The taps don't actually "do anything". Instead, it sets up the interval for how often to send specific keypresses. As you can tell, this makes automating things very easy.
-
-For critics that think this is cheating, just search "[diablo 3 num lock auto cast](http://lmgtfy.com/?q=diablo+3+numlock+autocast)". This is just a simpler method, that doesn't require a numpad.
-
-
-## Custom Tap Dance Type
-The real fun here is that the tap dances use a custom defined Tap Dance type:
-
-```c
-#define ACTION_TAP_DANCE_DIABLO(index, keycode) { \
- .fn = { NULL, (void *)diablo_tapdance_master, NULL }, \
- .user_data = (void *)&((diable_keys_t) { index, keycode }), \
- }
-```
-This lets me set an index and keycode for the tap dance. This isn't the cool part yet, but this allows for the really cool stuff.
-
-The Index is needed because I don't know how to handle it otherwise.
-
-## The Actual Dances
-
-These are the custom defined dances that I'm using. It sets up everything for later, using the above custom dance type.
-
-```c
-//Tap Dance Definitions, sets the index and the keycode.
-tap_dance_action_t tap_dance_actions[] = {
- // tap once to disable, and more to enable timed micros
- [TD_D3_1] = ACTION_TAP_DANCE_DIABLO(0, KC_1),
- [TD_D3_2] = ACTION_TAP_DANCE_DIABLO(1, KC_2),
- [TD_D3_3] = ACTION_TAP_DANCE_DIABLO(2, KC_3),
- [TD_D3_4] = ACTION_TAP_DANCE_DIABLO(3, KC_4),
-};
-```
-
-## Custom Data Structures
-
-First, to get this all working, there are a couple of things that need to be set up. In a header file (or you could put it into the keymap), you need to create a couple of custom structures:
-
-```c
-typedef struct {
- uint16_t timer;
- uint8_t key_interval;
- uint8_t keycode;
-} diablo_timer_t;
-
-typedef struct {
- uint8_t index;
- uint8_t keycode;
-} diable_keys_t;
-```
-
-The first structure is for tracking each key that is being used. The second is to pass data from the Tap Dance action array to the actual function that we will need.
-
-
-## Custom Arrays
-
-To facilitate things, you will need a couple of arrays in your `c` file.
-
-```c
-//define diablo macro timer variables
-diablo_timer_t diablo_timer[4];
-
-// Set the default intervals. Always start with 0 so that it will disable on first hit.
-// Otherwise, you will need to hit a bunch of times, or hit the "clear" command
-uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
-```
-
-The first one (`diablo_timer`) is what keeps track of the timer used for the keys, the interval that it uses, and the actual keycode. This makes managing it a lot easier.
-
-The second array is a list of predefined intervals, in seconds. You can add more here, or remove entries. It doesn't matter how long the array is, as this is computed automatically.
-
-## The Magic - Part 1: Master function
-
-The first part of the magic here is the `diablo_tapdance_master` function. The Tap Dance feature calls this function, directly, and passes some data to the function. Namely, it passes the array of the index and the keycode (`diablo_keys_t` from above). This sets the keycode and the interval for the specific index of `diabolo_timer` based on the number of taps. If you hit it more than the number of items in the array, then it zeroes out the interval, disabling it.
-
-```c
-// Cycle through the times for the macro, starting at 0, for disabled.
-void diablo_tapdance_master(tap_dance_state_t *state, void *user_data) {
- diable_keys_t *diablo_keys = (diable_keys_t *)user_data;
- // Sets the keycode based on the index
- diablo_timer[diablo_keys->index].keycode = diablo_keys->keycode;
-
- // if the tapdance is hit more than the number of elemints in the array, reset
- if (state->count >= ARRAY_SIZE(diablo_times) ) {
- diablo_timer[diablo_keys->index].key_interval = 0;
- reset_tap_dance(state);
- } else { // else set the interval (tapdance count starts at 1, array starts at 0, so offset by one)
- diablo_timer[diablo_keys->index].key_interval = diablo_times[state->count - 1];
- }
-}
-```
-
-## The Magic - Part 2: The Coup de Grace
-
-The real core here is the `run_diablo_macro_check()` function. You need to call this from `matrix_scan_user`, as this handles the timer check.
-
-Specifically, it runs a check for each index of the timer. It checks to see if it's enabled, and if enough time has passed. If enough time has passed, it resets the timer, and will tap the keycode that you set for that index, but only if the Diablo layer is enabled.
-
-```c
-// Checks each of the 4 timers/keys to see if enough time has elapsed
-void run_diablo_macro_check(void) {
- for (uint8_t index = 0; index < NUM_OF_DIABLO_KEYS; index++) {
- // if key_interval is 0, it's disabled, so only run if it's set. If it's set, check the timer.
- if ( diablo_timer[index].key_interval && timer_elapsed( diablo_timer[index].timer ) > ( diablo_timer[index].key_interval * 1000 ) ) {
- // reset the timer, since enough time has passed
- diablo_timer[index].timer = timer_read();
- // send keycode ONLY if we're on the diablo layer.
- if (IS_LAYER_ON(_DIABLO)) {
- tap_code(diablo_timer[index].keycode);
- }
- }
- }
-}
-```
diff --git a/users/drashna/keyrecords/tap_dances.c b/users/drashna/keyrecords/tap_dances.c
deleted file mode 100644
index 87739c2a18..0000000000
--- a/users/drashna/keyrecords/tap_dances.c
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "tap_dances.h"
-
-#define NUM_OF_DIABLO_KEYS 4
-// define diablo macro timer variables
-diablo_timer_t diablo_timer[NUM_OF_DIABLO_KEYS];
-
-// Set the default intervals. Always start with 0 so that it will disable on first hit.
-// Otherwise, you will need to hit a bunch of times, or hit the "clear" command
-uint8_t diablo_times[] = {0, 1, 3, 5, 10, 30};
-
-/**
- * @brief Main function for handling diable related tap dances.
- *
- * @param state Main data struction contining information about events
- * @param user_data Local data for the dance. Allows customization to be passed on to function
- */
-void diablo_tapdance_master(tap_dance_state_t *state, void *user_data) {
- diable_keys_t *diablo_keys = (diable_keys_t *)user_data;
- // Sets the keycode based on the index
- diablo_timer[diablo_keys->index].keycode = diablo_keys->keycode;
-
- // if the tapdance is hit more than the number of elemints in the array, reset
- if (state->count >= ARRAY_SIZE(diablo_times)) {
- diablo_timer[diablo_keys->index].key_interval = 0;
- reset_tap_dance(state);
- } else { // else set the interval (tapdance count starts at 1, array starts at 0, so offset by one)
- diablo_timer[diablo_keys->index].key_interval = diablo_times[state->count - 1];
- }
-}
-
-// clang-format off
-// One function to rule them all!! Where the Magic Sauce lies
-#define ACTION_TAP_DANCE_DIABLO(index, keycode) { \
- .fn = { NULL, (void *)diablo_tapdance_master, NULL }, \
- .user_data = (void *)&((diable_keys_t) { index, keycode }), \
- }
-// clang-format on
-
-// Tap Dance Definitions, sets the index and the keycode.
-tap_dance_action_t tap_dance_actions[] = {
- // tap once to disable, and more to enable timed micros
- [TD_D3_1] = ACTION_TAP_DANCE_DIABLO(0, KC_1),
- [TD_D3_2] = ACTION_TAP_DANCE_DIABLO(1, KC_2),
- [TD_D3_3] = ACTION_TAP_DANCE_DIABLO(2, KC_3),
- [TD_D3_4] = ACTION_TAP_DANCE_DIABLO(3, KC_4),
-};
-
-/**
- * @brief Runs check to see if timer has elapsed for each dance, and sends keycodes, if it has.
- *
- */
-void run_diablo_macro_check(void) {
- for (uint8_t index = 0; index < NUM_OF_DIABLO_KEYS; index++) {
- // if key_interval is 0, it's disabled, so only run if it's set. If it's set, check the timer.
- if (diablo_timer[index].key_interval && timer_elapsed(diablo_timer[index].timer) > (diablo_timer[index].key_interval * 1000)) {
- // reset the timer, since enough time has passed
- diablo_timer[index].timer = timer_read();
- // send keycode ONLY if we're on the diablo layer.
- if (IS_LAYER_ON(_DIABLO)) {
- tap_code(diablo_timer[index].keycode);
- }
- }
- }
-}
diff --git a/users/drashna/keyrecords/tap_dances.h b/users/drashna/keyrecords/tap_dances.h
deleted file mode 100644
index 81d1f07fe0..0000000000
--- a/users/drashna/keyrecords/tap_dances.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-#include "drashna.h"
-
-// define diablo macro timer variables
-extern uint8_t diablo_times[];
-typedef struct {
- uint16_t timer;
- uint8_t key_interval;
- uint8_t keycode;
-} diablo_timer_t;
-
-typedef struct {
- uint8_t index;
- uint8_t keycode;
-} diable_keys_t;
-
-extern diablo_timer_t diablo_timer[];
-
-void run_diablo_macro_check(void);
-
-#ifdef TAP_DANCE_ENABLE
-enum {
- TD_D3_1 = 0,
- TD_D3_2,
- TD_D3_3,
- TD_D3_4,
-};
-#endif // TAP_DANCE_ENABLE
diff --git a/users/drashna/keyrecords/tapping.c b/users/drashna/keyrecords/tapping.c
deleted file mode 100644
index d4a0e16112..0000000000
--- a/users/drashna/keyrecords/tapping.c
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-
-#ifdef TAPPING_TERM_PER_KEY
-__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
-
- switch (keycode) {
- case BK_LWER:
- return TAPPING_TERM + 25;
- case QK_MOD_TAP ... QK_MOD_TAP_MAX:
- if (QK_MOD_TAP_GET_MODS(keycode) & MOD_LGUI) {
- return 300;
- }
- default:
- return TAPPING_TERM;
- }
-}
-#endif // TAPPING_TERM_PER_KEY
-
-#ifdef PERMISSIVE_HOLD_PER_KEY
-__attribute__((weak)) bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) {
- // Immediately select the hold action when another key is tapped:
- // return true;
- // Do not select the hold action when another key is tapped.
- // return false;
- switch (keycode) {
- default:
- return false;
- }
-}
-#endif // PERMISSIVE_HOLD_PER_KEY
-
-#ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
-__attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
- // Immediately select the hold action when another key is pressed.
- // return true;
- // Do not select the hold action when another key is pressed.
- // return false;
- switch (keycode) {
-// case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
-// return true;
- default:
- return false;
- }
-}
-#endif // HOLD_ON_OTHER_KEY_PRESS_PER_KEY
-
-#ifdef QUICK_TAP_TERM_PER_KEY
-__attribute__((weak)) uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- default:
- return QUICK_TAP_TERM;
- }
-}
-#endif // QUICK_TAP_TERM_PER_KEY
-
-#ifdef RETRO_TAPPING_PER_KEY
-__attribute__((weak)) bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- default:
- return false;
- }
-}
-#endif // RETRO_TAPPING_PER_KEY
diff --git a/users/drashna/keyrecords/unicode.c b/users/drashna/keyrecords/unicode.c
deleted file mode 100644
index a4687d3e59..0000000000
--- a/users/drashna/keyrecords/unicode.c
+++ /dev/null
@@ -1,446 +0,0 @@
-// Copyright 2020 @ridingqwerty
-// Copyright 2020 @tzarc
-// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-#include "unicode.h"
-#include "process_unicode_common.h"
-
-uint8_t unicode_typing_mode = UCTM_NO_MODE;
-const char unicode_mode_str[UNCODES_MODE_END][13] PROGMEM = {
- " Normal\0",
- " Wide\0",
- " Script\0",
- " Blocks\0",
- " Regional\0",
- " Aussie\0",
- " Zalgo\0",
- "Super Script\0",
- " Comic\0",
-};
-
-/**
- * @brief Registers the unicode keystrokes based on desired unicode
- *
- * @param glyph Unicode character, supports up to 0x1FFFF (or higher)
- */
-void tap_unicode_glyph_nomods(uint32_t glyph) {
- uint8_t temp_mod = get_mods();
- clear_mods();
- clear_oneshot_mods();
- register_unicode(glyph);
- set_mods(temp_mod);
-}
-
-typedef uint32_t (*translator_function_t)(bool is_shifted, uint32_t keycode);
-
-#define DEFINE_UNICODE_RANGE_TRANSLATOR(translator_name, lower_alpha, upper_alpha, zero_glyph, number_one, space_glyph) \
- static inline uint32_t translator_name(bool is_shifted, uint32_t keycode) { \
- switch (keycode) { \
- case KC_A ... KC_Z: \
- return (is_shifted ? upper_alpha : lower_alpha) + keycode - KC_A; \
- case KC_0: \
- return zero_glyph; \
- case KC_1 ... KC_9: \
- return (number_one + keycode - KC_1); \
- case KC_SPACE: \
- return space_glyph; \
- } \
- return keycode; \
- }
-
-#define DEFINE_UNICODE_LUT_TRANSLATOR(translator_name, ...) \
- static inline uint32_t translator_name(bool is_shifted, uint32_t keycode) { \
- static const uint32_t translation[] = {__VA_ARGS__}; \
- uint32_t ret = keycode; \
- if ((keycode - KC_A) < ARRAY_SIZE(translation)) { \
- ret = translation[keycode - KC_A]; \
- } \
- return ret; \
- }
-
-/**
- * @brief Handler function for outputting unicode.
- *
- * @param keycode Keycode from matrix.
- * @param record keyrecord_t data structure
- * @param translator translator lut for different unicode modes
- * @return true Continue processing matrix press, and send to host
- * @return false Replace keycode, and do not send to host
- */
-bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, translator_function_t translator) {
- uint8_t temp_mod = get_mods();
- uint8_t temp_osm = get_oneshot_mods();
- bool is_shifted = (temp_mod | temp_osm) & MOD_MASK_SHIFT;
- if (((temp_mod | temp_osm) & (MOD_MASK_CTRL | MOD_MASK_ALT | MOD_MASK_GUI)) == 0) {
- if (KC_A <= keycode && keycode <= KC_Z) {
- if (record->event.pressed) {
- tap_unicode_glyph_nomods(translator(is_shifted, keycode));
- }
- return false;
- } else if (KC_1 <= keycode && keycode <= KC_0) {
- if (is_shifted) { // skip shifted numbers, so that we can still use symbols etc.
- return process_record_keymap(keycode, record);
- }
- if (record->event.pressed) {
- register_unicode(translator(is_shifted, keycode));
- }
- return false;
- } else if (keycode == KC_SPACE) {
- if (record->event.pressed) {
- register_unicode(translator(is_shifted, keycode));
- }
- return false;
- }
- }
- return true;
-}
-
-DEFINE_UNICODE_RANGE_TRANSLATOR(unicode_range_translator_wide, 0xFF41, 0xFF21, 0xFF10, 0xFF11, 0x2003);
-DEFINE_UNICODE_RANGE_TRANSLATOR(unicode_range_translator_script, 0x1D4EA, 0x1D4D0, 0x1D7CE, 0x1D7C1, 0x2002);
-DEFINE_UNICODE_RANGE_TRANSLATOR(unicode_range_translator_boxes, 0x1F170, 0x1F170, '0', '1', 0x2002);
-DEFINE_UNICODE_RANGE_TRANSLATOR(unicode_range_translator_regional, 0x1F1E6, 0x1F1E6, '0', '1', 0x2003);
-
-// DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_normal,
-// 'a', // a
-// 'b', // b
-// 'c', // c
-// 'd', // d
-// 'e', // e
-// 'f', // f
-// 'g', // g
-// 'h', // h
-// 'i', // i
-// 'j', // j
-// 'k', // k
-// 'l', // l
-// 'm', // m
-// 'n', // n
-// 'o', // o
-// 'p', // p
-// 'q', // q
-// 'r', // r
-// 's', // s
-// 't', // t
-// 'u', // u
-// 'v', // v
-// 'w', // w
-// 'x', // x
-// 'y', // y
-// 'z', // z
-// '1', // 1
-// '2', // 2
-// '3', // 3
-// '4', // 4
-// '5', // 5
-// '6', // 6
-// '7', // 7
-// '8', // 8
-// '9', // 9
-// '0' // 0
-// );
-
-DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_aussie,
- 0x0250, // a
- 'q', // b
- 0x0254, // c
- 'p', // d
- 0x01DD, // e
- 0x025F, // f
- 0x0183, // g
- 0x0265, // h
- 0x1D09, // i
- 0x027E, // j
- 0x029E, // k
- 'l', // l
- 0x026F, // m
- 'u', // n
- 'o', // o
- 'd', // p
- 'b', // q
- 0x0279, // r
- 's', // s
- 0x0287, // t
- 'n', // u
- 0x028C, // v
- 0x028D, // w
- 0x2717, // x
- 0x028E, // y
- 'z', // z
- 0x0269, // 1
- 0x3139, // 2
- 0x0190, // 3
- 0x3123, // 4
- 0x03DB, // 5
- '9', // 6
- 0x3125, // 7
- '8', // 8
- '6', // 9
- '0' // 0
-);
-
-DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_super,
- 0x1D43, // a
- 0x1D47, // b
- 0x1D9C, // c
- 0x1D48, // d
- 0x1D49, // e
- 0x1DA0, // f
- 0x1D4D, // g
- 0x02B0, // h
- 0x2071, // i
- 0x02B2, // j
- 0x1D4F, // k
- 0x02E1, // l
- 0x1D50, // m
- 0x207F, // n
- 0x1D52, // o
- 0x1D56, // p
- 0x06F9, // q
- 0x02B3, // r
- 0x02E2, // s
- 0x1D57, // t
- 0x1D58, // u
- 0x1D5B, // v
- 0x02B7, // w
- 0x02E3, // x
- 0x02B8, // y
- 0x1DBB, // z
- 0x00B9, // 1
- 0x00B2, // 2
- 0x00B3, // 3
- 0x2074, // 4
- 0x2075, // 5
- 0x2076, // 6
- 0x2077, // 7
- 0x2078, // 8
- 0x2079, // 9
- 0x2070 // 0
-);
-
-DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_comic,
- 0x212B, // a
- 0x212C, // b
- 0x2102, // c
- 0x2145, // d
- 0x2107, // e
- 0x2132, // f
- 0x2141, // g
- 0x210D, // h
- 0x2148, // i
- 0x2111, // j
- 'k', // k
- 0x2143, // l
- 'm', // m
- 0x2115, // n
- 0x2134, // o
- 0x2119, // p
- 0x211A, // q
- 0x211B, // r
- 0x20B7, // s
- 0x20B8, // t
- 0x2127, // u
- 'v', // v
- 0x20A9, // w
- 'x', // x
- 0x213D, // y
- 'z', // z
- '1', // 1
- '2', // 2
- '3', // 3
- '4', // 4
- '5', // 5
- '6', // 6
- '7', // 7
- '8', // 8
- '9', // 9
- '0' // 0
-);
-
-bool process_record_aussie(uint16_t keycode, keyrecord_t *record) {
- bool is_shifted = (get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT;
- if ((KC_A <= keycode) && (keycode <= KC_0)) {
- if (record->event.pressed) {
- if (!process_record_glyph_replacement(keycode, record, unicode_lut_translator_aussie)) {
- tap_code16_nomods(KC_LEFT);
- return false;
- }
- }
- } else if (record->event.pressed && keycode == KC_SPACE) {
- tap_code16_nomods(KC_SPACE);
- tap_code16_nomods(KC_LEFT);
- return false;
- } else if (record->event.pressed && keycode == KC_ENTER) {
- tap_code16_nomods(KC_END);
- tap_code16_nomods(KC_ENTER);
- return false;
- } else if (record->event.pressed && keycode == KC_HOME) {
- tap_code16_nomods(KC_END);
- return false;
- } else if (record->event.pressed && keycode == KC_END) {
- tap_code16_nomods(KC_HOME);
- return false;
- } else if (record->event.pressed && keycode == KC_BSPC) {
- tap_code16_nomods(KC_DEL);
- return false;
- } else if (record->event.pressed && keycode == KC_DEL) {
- tap_code16_nomods(KC_BSPC);
- return false;
- } else if (record->event.pressed && keycode == KC_QUOT) {
- tap_unicode_glyph_nomods(is_shifted ? 0x201E : 0x201A);
- tap_code16_nomods(KC_LEFT);
- return false;
- } else if (record->event.pressed && keycode == KC_COMMA) {
- tap_unicode_glyph_nomods(is_shifted ? '<' : 0x2018);
- tap_code16_nomods(KC_LEFT);
- return false;
- } else if (record->event.pressed && keycode == KC_DOT) {
- tap_unicode_glyph_nomods(is_shifted ? '>' : 0x02D9);
- tap_code16_nomods(KC_LEFT);
- return false;
- } else if (record->event.pressed && keycode == KC_SLASH) {
- tap_unicode_glyph_nomods(is_shifted ? 0x00BF : '/');
- tap_code16_nomods(KC_LEFT);
- return false;
- }
- return true;
-}
-
-bool process_record_zalgo(uint16_t keycode, keyrecord_t *record) {
- if ((KC_A <= keycode) && (keycode <= KC_0)) {
- if (record->event.pressed) {
- tap_code16_nomods(keycode);
-
- int number = (rand() % (8 + 1 - 2)) + 2;
- for (int index = 0; index < number; index++) {
- uint16_t hex = (rand() % (0x036F + 1 - 0x0300)) + 0x0300;
- register_unicode(hex);
- }
-
- return false;
- }
- }
- return true;
-}
-
-/**
- * @brief Main handler for unicode input
- *
- * @param keycode Keycode from switch matrix
- * @param record keyrecord_t data struture
- * @return true Send keycode from matrix to host
- * @return false Stop processing and do not send to host
- */
-
-bool process_record_unicode(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
- if (record->event.pressed) {
- send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
- }
- break;
-
- case UC_TABL: // ┬─┬ノ( º _ ºノ)
- if (record->event.pressed) {
- send_unicode_string("┬─┬ノ( º _ ºノ)");
- }
- break;
-
- case UC_SHRG: // ¯\_(ツ)_/¯
- if (record->event.pressed) {
- send_unicode_string("¯\\_(ツ)_/¯");
- }
- break;
-
- case UC_DISA: // ಠ_ಠ
- if (record->event.pressed) {
- send_unicode_string("ಠ_ಠ");
- }
- break;
-
- case UC_IRNY: // ⸮
- if (record->event.pressed) {
- register_unicode(0x2E2E);
- }
- break;
- case UC_CLUE: // ‽
- if (record->event.pressed) {
- register_unicode(0x203D);
- }
- break;
- case KC_NOMODE ... KC_COMIC:
- if (record->event.pressed) {
- if (unicode_typing_mode != keycode - KC_NOMODE) {
- unicode_typing_mode = keycode - KC_NOMODE;
- } else {
- unicode_typing_mode = UCTM_NO_MODE;
- }
- }
- break;
- }
-
- if (((get_mods() | get_oneshot_mods()) & ~MOD_MASK_SHIFT) != 0) {
- return true;
- }
-
- if (IS_QK_MOD_TAP(keycode) && record->tap.count) {
- keycode = QK_MOD_TAP_GET_TAP_KEYCODE(keycode);
- }
- if (IS_QK_LAYER_TAP(keycode) && record->tap.count) {
- keycode = QK_LAYER_TAP_GET_TAP_KEYCODE(keycode);
- }
-
- if (unicode_typing_mode == UCTM_WIDE) {
- if (((KC_A <= keycode) && (keycode <= KC_0)) || keycode == KC_SPACE) {
- return process_record_glyph_replacement(keycode, record, unicode_range_translator_wide);
- }
- } else if (unicode_typing_mode == UCTM_SCRIPT) {
- if (((KC_A <= keycode) && (keycode <= KC_0)) || keycode == KC_SPACE) {
- return process_record_glyph_replacement(keycode, record, unicode_range_translator_script);
- }
- } else if (unicode_typing_mode == UCTM_BLOCKS) {
- if (((KC_A <= keycode) && (keycode <= KC_0)) || keycode == KC_SPACE) {
- return process_record_glyph_replacement(keycode, record, unicode_range_translator_boxes);
- }
- } else if (unicode_typing_mode == UCTM_REGIONAL) {
- if (((KC_A <= keycode) && (keycode <= KC_0)) || keycode == KC_SPACE) {
- if (!process_record_glyph_replacement(keycode, record, unicode_range_translator_regional)) {
- wait_us(500);
- tap_unicode_glyph_nomods(0x200C);
- return false;
- }
- }
- } else if (unicode_typing_mode == UCTM_SUPER) {
- if (((KC_A <= keycode) && (keycode <= KC_0))) {
- return process_record_glyph_replacement(keycode, record, unicode_lut_translator_super);
- }
- } else if (unicode_typing_mode == UCTM_COMIC) {
- if (((KC_A <= keycode) && (keycode <= KC_0))) {
- return process_record_glyph_replacement(keycode, record, unicode_lut_translator_comic);
- }
- } else if (unicode_typing_mode == UCTM_AUSSIE) {
- return process_record_aussie(keycode, record);
- } else if (unicode_typing_mode == UCTM_ZALGO) {
- return process_record_zalgo(keycode, record);
- }
- return true;
-}
-
-/**
- * @brief Initialize the default unicode mode on firmware startup
- *
- */
-void keyboard_post_init_unicode(void) {
- unicode_input_mode_init();
-}
-
-/**
- * @brief Set the unicode input mode without extra functionality
- *
- * @param input_mode
- */
-void set_unicode_input_mode_soft(uint8_t input_mode) {
- unicode_config.input_mode = input_mode;
- unicode_input_mode_set_kb(input_mode);
-}
diff --git a/users/drashna/keyrecords/unicode.h b/users/drashna/keyrecords/unicode.h
deleted file mode 100644
index fe95e78c3a..0000000000
--- a/users/drashna/keyrecords/unicode.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-enum unicode_typing_modes {
- UCTM_NO_MODE,
- UCTM_WIDE,
- UCTM_SCRIPT,
- UCTM_BLOCKS,
- UCTM_REGIONAL,
- UCTM_AUSSIE,
- UCTM_ZALGO,
- UCTM_SUPER,
- UCTM_COMIC,
- UNCODES_MODE_END,
-};
-
-extern uint8_t unicode_typing_mode;
-extern const PROGMEM char unicode_mode_str[UNCODES_MODE_END][13];
-void set_unicode_input_mode_soft(uint8_t input_mode);
diff --git a/users/drashna/keyrecords/unicode.md b/users/drashna/keyrecords/unicode.md
deleted file mode 100644
index 1b3f696a82..0000000000
--- a/users/drashna/keyrecords/unicode.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Custom Unicode
-
-To disable, add `CUSTOM_UNICODE_ENABLE = no` to the keymap's `rules.mk`.
-
-This disables all of the various implementations of unicode, enables the common unicode core, and allows usage.
-
-In addition to a number of unicode keycodes:
-
-* `UC_FLIP` - `(ノಠ痊ಠ)ノ彡┻━┻`
-* `UC_TABL` - `┬─┬ノ( º _ ºノ)`
-* `UC_SHRG` - `¯\_(ツ)_/¯`
-* `UC_DISA` - `ಠ_ಠ`
-* `UC_IRNY` - `⸮`
-* `UC_CLUE` - `‽`
-
-There are a number of unicode typing modes. This replaces the normal alpha keys with special unicodes.
-
-* `KC_WIDE` - this is wide mode
-* `KC_SCRIPT` - 𝓽𝓱𝓲𝓼 𝓲𝓼 𝓼𝓬𝓻𝓲𝓹𝓽 𝓶𝓸𝓭𝓮
-* `KC_BLOCKS` - 🆃🅷🅸🆂 🅸🆂 🅱🅻🅾🅲🅺 🅼🅾🅳🅴
-* `KC_REGIONAL` - 🇹‌‌🇭‌‌🇮‌‌🇸‌‌ ‌‌🇮‌‌🇸‌‌ ‌‌🇷‌‌🇪‌‌🇬‌‌🇮‌‌🇴‌‌🇳‌‌🇦‌‌🇱‌‌ ‌‌🇲‌‌🇴‌‌🇩‌‌🇪‌‌
-* `KC_AUSSIE` - ǝpoɯ ǝᴉssnɐ sᴉ sᴉɥʇ
-* `KC_ZALGO` - t̨͕͙̺͍͐̾ĥ̻ï̳̻̗̜͔ͦs͎̠͈͓͗̀ i̶̫ͭ̆s̛̫̻̜̝͑͡ z̩͈̠͗a͚̜̓͜l͈̟g͋͢͝ò͚ͥ͘͡͞ ḿ̴̡̻̼̔ͪò͔̭̿ͪ̍ḏ̻̊̄̈e̳͕̤ͣͯ
-* `KC_NOMODE` - this is the normal typing mode with no unicode glyphs
-
-
-Credit goes to ridingqwerty and tzarc for the unicode typing modes.
diff --git a/users/drashna/keyrecords/wrappers.h b/users/drashna/keyrecords/wrappers.h
deleted file mode 100644
index b298ef0628..0000000000
--- a/users/drashna/keyrecords/wrappers.h
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// Copyright 2020 @jola5
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-#include "drashna.h"
-/*
-Since our quirky block definitions are basically a list of comma separated
-arguments, we need a wrapper in order for these definitions to be
-expanded before being used as arguments to the LAYOUT_xxx macro.
-*/
-
-/*
-Blocks for each of the four major keyboard layouts
-Organized so we can quickly adapt and modify all of them
-at once, rather than for each keyboard, one at a time.
-And this allows for much cleaner blocks in the keymaps.
-For instance Tap/Hold for Control on all of the layouts
-
-NOTE: These are all the same length. If you do a search/replace
- then you need to add/remove underscores to keep the
- lengths consistent.
-*/
-// clang-format off
-#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
-#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
-#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
-#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT
-#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
-#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
-#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
-#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT
-#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-#define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B
-#define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G
-#define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V
-
-#define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
-#define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT
-#define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
-
-
-#define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
-#define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
-#define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
-
-#define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L
-#define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH
-#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z
-
-
-#define ________________DVORAK_AU_L1_______________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
-#define ________________DVORAK_AU_L2_______________ KC_O, KC_A, KC_E, KC_I, KC_U
-#define ________________DVORAK_AU_L3_______________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
-
-#define ________________DVORAK_AU_R1_______________ KC_F, KC_G, KC_C, KC_R, KC_L
-#define ________________DVORAK_AU_R2_______________ KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH
-#define ________________DVORAK_AU_R3_______________ KC_B, KC_M, KC_W, KC_V, KC_Z
-
-#define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B
-#define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G
-#define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V
-
-#define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
-#define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT
-#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K
-#define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G
-#define _________________NORMAN_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN
-#define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, KC_U, KC_QUOT
-#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B
-#define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F
-#define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J, KC_G, KC_COMM
-
-#define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L
-#define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R, KC_QUOT
-#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X
-
-
-#define _________________EUCALYN_L1________________ KC_Q, KC_W, KC_COMM, KC_DOT, KC_SCLN
-#define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U
-#define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_F
-
-#define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P
-#define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N, KC_QUOT
-#define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SLSH
-
-// Qwerty-like
-#define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W
-#define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
-#define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X
-
-#define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J
-#define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN, KC_QUOT
-#define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH
-
-// Colemak like
-#define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
-#define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
-#define _____________CARPLAX_QGMLWB_L3_____________ KC_Z, KC_X, KC_C, KC_F, KC_J
-
-#define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN
-#define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H, KC_QUOT
-#define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
-
-// colemak like, zxcv fixed
-#define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
-#define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
-#define _____________CARPLAX_QGMLWY_L3_____________ KC_Z, KC_X, KC_C, KC_V, KC_J
-
-#define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN
-#define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H, KC_QUOT
-#define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
-
-// teeheehee
-#define _____________CARPLAX_TNWCLR_L1_____________ KC_T, KC_N, KC_W, KC_C, KC_L
-#define _____________CARPLAX_TNWCLR_L2_____________ KC_S, KC_K, KC_J, KC_X, KC_G
-#define _____________CARPLAX_TNWCLR_L3_____________ KC_E, KC_O, KC_D, KC_I, KC_A
-
-#define _____________CARPLAX_TNWCLR_R1_____________ KC_R, KC_B, KC_F, KC_M, KC_H
-#define _____________CARPLAX_TNWCLR_R2_____________ KC_P, KC_Q, KC_Z, KC_V, KC_SCLN, KC_QUOT
-#define _____________CARPLAX_TNWCLR_R3_____________ KC_U, KC_Y, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define _________________WHITE_R1__________________ KC_V, KC_Y, KC_D, KC_COMM, KC_QUOT
-#define _________________WHITE_R2__________________ KC_A, KC_T, KC_H, KC_E, KC_B
-#define _________________WHITE_R3__________________ KC_P, KC_K, KC_G, KC_W, KC_Q
-
-#define _________________WHITE_L1__________________ KC_INT1, KC_J, KC_M, KC_L, KC_U
-#define _________________WHITE_L2__________________ KC_MINS, KC_C, KC_S, KC_N, KC_O, KC_I
-#define _________________WHITE_L3__________________ KC_X, KC_R, KC_F, KC_DOT, KC_Z
-
-
-#define _________________HALMAK_L1_________________ KC_W, KC_L, KC_R, KC_B, KC_Z
-#define _________________HALMAK_L2_________________ KC_S, KC_H, KC_N, KC_T, KC_COMM
-#define _________________HALMAK_L3_________________ KC_F, KC_M, KC_V, KC_V, KC_SLASH
-
-#define _________________HALMAK_R1_________________ KC_SCLN, KC_Q, KC_U, KC_D, KC_J
-#define _________________HALMAK_R2_________________ KC_DOT, KC_A, KC_E, KC_O, KC_I, KC_QUOTE
-#define _________________HALMAK_R3_________________ KC_G, KC_P, KC_X, KC_K, KC_Y
-
-
-#define __________________ISRT_L1__________________ KC_W, KC_C, KC_L, KC_M, KC_K
-#define __________________ISRT_L2__________________ KC_I, KC_S, KC_R, KC_T, KC_G
-#define __________________ISRT_L3__________________ KC_Q, KC_V, KC_W, KC_D, KC_J
-
-#define __________________ISRT_R1__________________ KC_Z, KC_F, KC_U, KC_COMM, KC_QUOTE
-#define __________________ISRT_R2__________________ KC_P, KC_N, KC_E, KC_A, KC_O, KC_SCLN
-#define __________________ISRT_R3__________________ KC_B, KC_H, KC_SLSH, KC_DOT, KC_X
-
-
-#define __________________SOUL_L1__________________ KC_Q, KC_W, KC_L, KC_D, KC_P
-#define __________________SOUL_L2__________________ KC_A, KC_S, KC_R, KC_T, KC_G
-#define __________________SOUL_L3__________________ KC_Z, KC_X, KC_C, KC_V, KC_J
-
-#define __________________SOUL_R1__________________ KC_K, KC_M, KC_U, KC_Y, KC_SCLN
-#define __________________SOUL_R2__________________ KC_F, KC_N, KC_E, KC_I, KC_O, KC_QUOTE
-#define __________________SOUL_R3__________________ KC_B, KC_H, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define __________________NIRO_L1__________________ KC_Q, KC_W, KC_U, KC_D, KC_P
-#define __________________NIRO_L2__________________ KC_A, KC_S, KC_E, KC_T, KC_G
-#define __________________NIRO_L3__________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define __________________NIRO_R1__________________ KC_J, KC_F, KC_Y, KC_L, KC_SCLN
-#define __________________NIRO_R2__________________ KC_H, KC_N, KC_I, KC_R, KC_O, KC_QUOTE
-#define __________________NIRO_R3__________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define _________________ASSET_L1__________________ KC_Q, KC_W, KC_J, KC_F, KC_G
-#define _________________ASSET_L2__________________ KC_A, KC_S, KC_E, KC_T, KC_D
-#define _________________ASSET_L3__________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________ASSET_R1__________________ KC_Y, KC_P, KC_U, KC_L, KC_SCLN
-#define _________________ASSET_R2__________________ KC_H, KC_N, KC_I, KC_O, KC_R, KC_QUOTE
-#define _________________ASSET_R3__________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define _________________MTGAP_L1__________________ KC_Y, KC_P, KC_O, KC_U, KC_J
-#define _________________MTGAP_L2__________________ KC_I, KC_N, KC_E, KC_A, KC_COMM
-#define _________________MTGAP_L3__________________ KC_Q, KC_Z, KC_SLSH, KC_DOT, KC_SCLN
-
-#define _________________MTGAP_R1__________________ KC_K, KC_D, KC_L, KC_C, KC_W
-#define _________________MTGAP_R2__________________ KC_M, KC_H, KC_T, KC_S, KC_R, KC_QUOTE
-#define _________________MTGAP_R3__________________ KC_B, KC_F, KC_G, KC_V, KC_X
-
-
-#define _________________MINIMAK_L1________________ KC_Q, KC_W, KC_D, KC_R, KC_K
-#define _________________MINIMAK_L2________________ KC_A, KC_S, KC_T, KC_F, KC_G
-#define _________________MINIMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _________________MINIMAK_R1________________ KC_Y, KC_U, KC_I, KC_O, KC_P
-#define _________________MINIMAK_R2________________ KC_H, KC_J, KC_E, KC_L, KC_SCLN, KC_QUOT
-#define _________________MINIMAK_R3________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define ________________MINIMAK_8_L1_______________ KC_Q, KC_W, KC_D, KC_R, KC_K
-#define ________________MINIMAK_8_L2_______________ KC_A, KC_S, KC_T, KC_F, KC_G
-#define ________________MINIMAK_8_L3_______________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define ________________MINIMAK_8_R1_______________ KC_Y, KC_U, KC_I, KC_L, KC_P
-#define ________________MINIMAK_8_R2_______________ KC_H, KC_N, KC_E, KC_O, KC_SCLN, KC_QUOT
-#define ________________MINIMAK_8_R3_______________ KC_J, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define _______________MINIMAK_12_L1_______________ KC_Q, KC_W, KC_D, KC_F, KC_K
-#define _______________MINIMAK_12_L2_______________ KC_A, KC_S, KC_T, KC_R, KC_G
-#define _______________MINIMAK_12_L3_______________ KC_Z, KC_X, KC_C, KC_V, KC_B
-
-#define _______________MINIMAK_12_R1_______________ KC_Y, KC_U, KC_I, KC_L, KC_SCLN
-#define _______________MINIMAK_12_R2_______________ KC_H, KC_N, KC_E, KC_O, KC_P, KC_QUOT
-#define _______________MINIMAK_12_R3_______________ KC_J, KC_M, KC_COMM, KC_DOT, KC_SLSH
-
-
-#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
-#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
-#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
-#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
-
-#define ___________________BLANK___________________ _______, _______, _______, _______, _______
-
-
-#define _________________LOWER_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
-#define _________________LOWER_L2__________________ _________________FUNC_LEFT_________________
-#define _________________LOWER_L3__________________ _________________FUNC_RIGHT________________
-
-#define _________________LOWER_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
-#define _________________LOWER_R2__________________ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
-#define _________________LOWER_R3__________________ _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-
-
-
-#define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________
-#define _________________RAISE_L2__________________ ___________________BLANK___________________
-#define _________________RAISE_L3__________________ ___________________BLANK___________________
-
-#define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________
-#define _________________RAISE_R2__________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC
-#define _________________RAISE_R3__________________ _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-
-
-
-#define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
-#define _________________ADJUST_L2_________________ MU_TOGG, CK_TOGG, AU_ON, AU_OFF, CG_NORM
-#define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
-
-#define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
-#define _________________ADJUST_R2_________________ CG_SWAP, QWERTY, CLMKDH, COLEMAK, DVORAK
-#define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
-
-// clang-format on
diff --git a/users/drashna/keyrecords/wrappers.md b/users/drashna/keyrecords/wrappers.md
deleted file mode 100644
index fd62ff1609..0000000000
--- a/users/drashna/keyrecords/wrappers.md
+++ /dev/null
@@ -1,11 +0,0 @@
-## Keyboard Layout Templates
-
-This borrows from @jola5's "Not quite neo" code. This allows me to maintain blocks of keymaps in the userspace, so that I can modify the userspace, and this is reflected in all of the keyboards that use it, at once.
-
-This makes adding tap/hold mods, or other special keycodes or functions to all keyboards super easy, as it's done to all of them at once.
-
-The caveat here is that the keymap needs a processor/wrapper, as it doesn't like the substitutions. However, this is as simple as just pushing it through a define. For instance:
-
-`#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)`
-
-Once that's been done and you've switched the keymaps to use the "wrapper", it will read the substitution blocks just fine.
diff --git a/users/drashna/oled/drashna_font.h b/users/drashna/oled/drashna_font.h
deleted file mode 100644
index cef1fc4969..0000000000
--- a/users/drashna/oled/drashna_font.h
+++ /dev/null
@@ -1,1060 +0,0 @@
-#pragma once
-
-// additional fonts from
-// https://github.com/datacute/TinyOLED-Fonts
-
-#include "progmem.h"
-
-// clang-format off
-static const unsigned char font[] PROGMEM = {
- 0x07, 0x08, 0x7F, 0x08, 0x07, 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,
-
-# if defined(OLED_FONT_5X5)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x06, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x28, 0x7c, 0x28, 0x7c, 0x28, 0x00,
- 0x5c, 0x54, 0xfe, 0x54, 0x74, 0x00,
- 0x44, 0x20, 0x10, 0x08, 0x44, 0x00,
- 0x28, 0x54, 0x54, 0x20, 0x50, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x38, 0x44, 0x00, 0x00, 0x00, 0x00,
- 0x44, 0x38, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x07, 0x02, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x60, 0x10, 0x0c, 0x00, 0x00, 0x00,
- 0x7c, 0x64, 0x54, 0x4c, 0x7c, 0x00,
- 0x48, 0x7c, 0x40, 0x00, 0x00, 0x00,
- 0x64, 0x54, 0x54, 0x54, 0x48, 0x00,
- 0x44, 0x54, 0x54, 0x54, 0x6c, 0x00,
- 0x3c, 0x20, 0x70, 0x20, 0x20, 0x00,
- 0x5c, 0x54, 0x54, 0x54, 0x24, 0x00,
- 0x7c, 0x54, 0x54, 0x54, 0x74, 0x00,
- 0x04, 0x04, 0x64, 0x14, 0x0c, 0x00,
- 0x7c, 0x54, 0x54, 0x54, 0x7c, 0x00,
- 0x5c, 0x54, 0x54, 0x54, 0x7c, 0x00,
- 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x28, 0x44, 0x00, 0x00, 0x00,
- 0x28, 0x28, 0x28, 0x28, 0x28, 0x00,
- 0x44, 0x28, 0x10, 0x00, 0x00, 0x00,
- 0x08, 0x04, 0x54, 0x08, 0x00, 0x00,
- 0x7c, 0x44, 0x54, 0x54, 0x5c, 0x00,
- 0x7c, 0x24, 0x24, 0x24, 0x7c, 0x00,
- 0x7c, 0x54, 0x54, 0x54, 0x6c, 0x00,
- 0x7c, 0x44, 0x44, 0x44, 0x44, 0x00,
- 0x7c, 0x44, 0x44, 0x44, 0x38, 0x00,
- 0x7c, 0x54, 0x54, 0x54, 0x44, 0x00,
- 0x7c, 0x14, 0x14, 0x14, 0x04, 0x00,
- 0x7c, 0x44, 0x44, 0x54, 0x74, 0x00,
- 0x7c, 0x10, 0x10, 0x10, 0x7c, 0x00,
- 0x44, 0x44, 0x7c, 0x44, 0x44, 0x00,
- 0x60, 0x40, 0x40, 0x44, 0x7c, 0x00,
- 0x7c, 0x10, 0x10, 0x28, 0x44, 0x00,
- 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00,
- 0x7c, 0x08, 0x10, 0x08, 0x7c, 0x00,
- 0x7c, 0x08, 0x10, 0x20, 0x7c, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
- 0x7c, 0x14, 0x14, 0x14, 0x08, 0x00,
- 0x3c, 0x24, 0x64, 0x24, 0x3c, 0x00,
- 0x7c, 0x14, 0x14, 0x14, 0x68, 0x00,
- 0x5c, 0x54, 0x54, 0x54, 0x74, 0x00,
- 0x04, 0x04, 0x7c, 0x04, 0x04, 0x00,
- 0x7c, 0x40, 0x40, 0x40, 0x7c, 0x00,
- 0x0c, 0x30, 0x40, 0x30, 0x0c, 0x00,
- 0x3c, 0x40, 0x30, 0x40, 0x3c, 0x00,
- 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
- 0x0c, 0x10, 0x60, 0x10, 0x0c, 0x00,
- 0x44, 0x64, 0x54, 0x4c, 0x44, 0x00,
- 0x7c, 0x44, 0x00, 0x00, 0x00, 0x00,
- 0x0c, 0x10, 0x60, 0x00, 0x00, 0x00,
- 0x44, 0x7c, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x7c, 0x24, 0x24, 0x24, 0x7c, 0x00,
- 0x7c, 0x54, 0x54, 0x54, 0x6c, 0x00,
- 0x7c, 0x44, 0x44, 0x44, 0x44, 0x00,
- 0x7c, 0x44, 0x44, 0x44, 0x38, 0x00,
- 0x7c, 0x54, 0x54, 0x54, 0x44, 0x00,
- 0x7c, 0x14, 0x14, 0x14, 0x04, 0x00,
- 0x7c, 0x44, 0x44, 0x54, 0x74, 0x00,
- 0x7c, 0x10, 0x10, 0x10, 0x7c, 0x00,
- 0x44, 0x44, 0x7c, 0x44, 0x44, 0x00,
- 0x60, 0x40, 0x40, 0x44, 0x7c, 0x00,
- 0x7c, 0x10, 0x10, 0x28, 0x44, 0x00,
- 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00,
- 0x7c, 0x08, 0x10, 0x08, 0x7c, 0x00,
- 0x7c, 0x08, 0x10, 0x20, 0x7c, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
- 0x7c, 0x14, 0x14, 0x14, 0x08, 0x00,
- 0x3c, 0x24, 0x64, 0x24, 0x3c, 0x00,
- 0x7c, 0x14, 0x14, 0x14, 0x68, 0x00,
- 0x5c, 0x54, 0x54, 0x54, 0x74, 0x00,
- 0x04, 0x04, 0x7c, 0x04, 0x04, 0x00,
- 0x7c, 0x40, 0x40, 0x40, 0x7c, 0x00,
- 0x0c, 0x30, 0x40, 0x30, 0x0c, 0x00,
- 0x3c, 0x40, 0x30, 0x40, 0x3c, 0x00,
- 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
- 0x0c, 0x10, 0x60, 0x10, 0x0c, 0x00,
- 0x44, 0x64, 0x54, 0x4c, 0x44, 0x00,
- 0x10, 0x7c, 0x44, 0x00, 0x00, 0x00,
- 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x44, 0x7c, 0x10, 0x00, 0x00, 0x00,
- 0x02, 0x01, 0x02, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# lif defined(OLED_FONT_AZTECH)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x0a, 0x1e, 0x0a, 0x1e, 0x00,
- 0x00, 0x0e, 0x2a, 0x6b, 0x2a, 0x3a,
- 0x00, 0x06, 0x06, 0x26, 0x18, 0x06,
- 0x38, 0x3e, 0x2a, 0x2a, 0x28, 0x38,
- 0x18, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3e, 0x22, 0x00, 0x00, 0x00,
- 0x00, 0x22, 0x3e, 0x00, 0x00, 0x00,
- 0x00, 0x0e, 0x0e, 0x0e, 0x04, 0x00,
- 0x00, 0x08, 0x1c, 0x08, 0x00, 0x00,
- 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x08, 0x08, 0x00, 0x00,
- 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x18, 0x06, 0x00, 0x00,
- 0x00, 0x3e, 0x22, 0x2a, 0x22, 0x3e,
- 0x02, 0x3e, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x28, 0x2a, 0x2a, 0x2e,
- 0x00, 0x22, 0x2a, 0x2e, 0x38, 0x00,
- 0x00, 0x0e, 0x08, 0x08, 0x3e, 0x08,
- 0x00, 0x2e, 0x2a, 0x2a, 0x28, 0x38,
- 0x00, 0x3e, 0x2a, 0x2a, 0x28, 0x38,
- 0x00, 0x06, 0x02, 0x02, 0x0a, 0x3e,
- 0x00, 0x38, 0x2e, 0x2a, 0x2e, 0x38,
- 0x00, 0x0e, 0x0a, 0x2a, 0x2a, 0x3e,
- 0x00, 0x28, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x28, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x14, 0x22, 0x00, 0x00,
- 0x00, 0x14, 0x14, 0x14, 0x14, 0x00,
- 0x00, 0x22, 0x14, 0x08, 0x00, 0x00,
- 0x00, 0x06, 0x02, 0x2a, 0x0a, 0x06,
- 0x00, 0x3e, 0x02, 0x3a, 0x2a, 0x0a,
- 0x22, 0x3e, 0x02, 0x0a, 0x0a, 0x3e,
- 0x00, 0x3e, 0x22, 0x2a, 0x2e, 0x38,
- 0x00, 0x3e, 0x22, 0x22, 0x20, 0x30,
- 0x00, 0x3e, 0x22, 0x22, 0x22, 0x3c,
- 0x00, 0x3e, 0x2a, 0x22, 0x20, 0x30,
- 0x00, 0x3e, 0x0a, 0x0a, 0x06, 0x02,
- 0x00, 0x3e, 0x22, 0x2a, 0x28, 0x38,
- 0x00, 0x3e, 0x08, 0x08, 0x08, 0x3e,
- 0x00, 0x22, 0x3e, 0x22, 0x00, 0x00,
- 0x00, 0x30, 0x20, 0x20, 0x22, 0x3e,
- 0x00, 0x3e, 0x08, 0x08, 0x0e, 0x38,
- 0x00, 0x3e, 0x20, 0x20, 0x20, 0x30,
- 0x00, 0x3e, 0x02, 0x3e, 0x20, 0x3e,
- 0x3e, 0x3e, 0x02, 0x3e, 0x20, 0x3e,
- 0x00, 0x3e, 0x22, 0x22, 0x22, 0x3e,
- 0x00, 0x3e, 0x02, 0x0a, 0x0a, 0x0e,
- 0x00, 0x3e, 0x22, 0x22, 0x22, 0x3e,
- 0x00, 0x3e, 0x02, 0x0a, 0x0e, 0x38,
- 0x00, 0x0e, 0x0a, 0x2a, 0x2a, 0x3a,
- 0x00, 0x06, 0x02, 0x3e, 0x02, 0x06,
- 0x00, 0x3e, 0x20, 0x20, 0x20, 0x3e,
- 0x00, 0x3e, 0x20, 0x20, 0x3e, 0x00,
- 0x00, 0x3e, 0x20, 0x3e, 0x02, 0x3e,
- 0x3e, 0x3a, 0x0e, 0x08, 0x0e, 0x3a,
- 0x00, 0x0e, 0x08, 0x08, 0x28, 0x3e,
- 0x00, 0x3a, 0x2a, 0x2a, 0x0a, 0x0e,
- 0x00, 0x3e, 0x22, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x0c, 0x30, 0x00, 0x00,
- 0x22, 0x3e, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x20, 0x20, 0x20, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x28, 0x28, 0x08, 0x38,
- 0x00, 0x3e, 0x20, 0x28, 0x28, 0x38,
- 0x00, 0x38, 0x28, 0x28, 0x20, 0x30,
- 0x00, 0x38, 0x28, 0x28, 0x20, 0x3e,
- 0x00, 0xf8, 0x88, 0x28, 0x28, 0x38,
- 0x00, 0xf8, 0x28, 0x28, 0x18, 0x08,
- 0x00, 0x38, 0x28, 0xa8, 0x88, 0xf8,
- 0x00, 0x3c, 0x08, 0x08, 0x08, 0x38,
- 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xfa, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3e, 0x08, 0x08, 0x38, 0x2c,
- 0x00, 0x3e, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x08, 0x38, 0x20, 0x38,
- 0x38, 0x38, 0x08, 0x38, 0x20, 0x38,
- 0x00, 0x38, 0x28, 0x28, 0x28, 0x38,
- 0x00, 0xf8, 0x08, 0x28, 0x28, 0x38,
- 0x00, 0x38, 0x28, 0x28, 0x08, 0xf8,
- 0x00, 0x38, 0x08, 0x08, 0x18, 0x08,
- 0x00, 0x38, 0x28, 0xa8, 0xa8, 0xe8,
- 0x00, 0x3e, 0x28, 0x28, 0x20, 0x30,
- 0x00, 0x38, 0x20, 0x20, 0x20, 0x38,
- 0x00, 0x38, 0x20, 0x38, 0x00, 0x00,
- 0x00, 0x38, 0x20, 0x38, 0x08, 0x38,
- 0x38, 0x28, 0x38, 0x10, 0x38, 0x28,
- 0x00, 0x38, 0x20, 0xa0, 0xa0, 0xf8,
- 0x00, 0xe8, 0xa8, 0xa8, 0x28, 0x38,
- 0x08, 0x3e, 0x22, 0x00, 0x00, 0x00,
- 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0x22, 0x3e, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_FONT_BMPLAIN)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
- 0x0a, 0x1f, 0x0a, 0x1f, 0x0a, 0x00,
- 0x2e, 0x2a, 0x6b, 0x2a, 0x3a, 0x00,
- 0x0e, 0x2a, 0x1e, 0x08, 0x3c, 0x2a,
- 0x3e, 0x2a, 0x2a, 0x22, 0x38, 0x08,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x1c, 0x22, 0x00, 0x00, 0x00, 0x00,
- 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00,
- 0x15, 0x0e, 0x04, 0x0e, 0x15, 0x00,
- 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
- 0x3e, 0x22, 0x2a, 0x22, 0x3e, 0x00,
- 0x04, 0x3e, 0x00, 0x00, 0x00, 0x00,
- 0x3a, 0x2a, 0x2a, 0x2a, 0x2e, 0x00,
- 0x2a, 0x2a, 0x2a, 0x2a, 0x3e, 0x00,
- 0x0e, 0x08, 0x08, 0x08, 0x3e, 0x00,
- 0x2e, 0x2a, 0x2a, 0x2a, 0x3a, 0x00,
- 0x3e, 0x2a, 0x2a, 0x2a, 0x3a, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x3e, 0x00,
- 0x3e, 0x2a, 0x2a, 0x2a, 0x3e, 0x00,
- 0x2e, 0x2a, 0x2a, 0x2a, 0x3e, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x14, 0x22, 0x00, 0x00, 0x00,
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
- 0x22, 0x14, 0x08, 0x00, 0x00, 0x00,
- 0x06, 0x02, 0x2a, 0x0a, 0x0e, 0x00,
- 0x3e, 0x02, 0x3a, 0x2a, 0x3e, 0x00,
- 0x3e, 0x12, 0x12, 0x12, 0x3e, 0x00,
- 0x3e, 0x2a, 0x2a, 0x2a, 0x36, 0x00,
- 0x3e, 0x22, 0x22, 0x22, 0x22, 0x00,
- 0x3e, 0x22, 0x22, 0x22, 0x1c, 0x00,
- 0x3e, 0x2a, 0x2a, 0x2a, 0x22, 0x00,
- 0x3e, 0x0a, 0x0a, 0x0a, 0x02, 0x00,
- 0x3e, 0x22, 0x2a, 0x2a, 0x3a, 0x00,
- 0x3e, 0x08, 0x08, 0x08, 0x3e, 0x00,
- 0x22, 0x3e, 0x22, 0x00, 0x00, 0x00,
- 0x38, 0x20, 0x20, 0x20, 0x3e, 0x00,
- 0x3e, 0x08, 0x08, 0x14, 0x22, 0x00,
- 0x3e, 0x20, 0x20, 0x20, 0x20, 0x00,
- 0x3e, 0x04, 0x38, 0x04, 0x3e, 0x00,
- 0x3e, 0x04, 0x08, 0x10, 0x3e, 0x00,
- 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x00,
- 0x3e, 0x0a, 0x0a, 0x0a, 0x0e, 0x00,
- 0x3e, 0x22, 0x72, 0x22, 0x3e, 0x00,
- 0x3e, 0x0a, 0x0a, 0x1a, 0x2e, 0x00,
- 0x2e, 0x2a, 0x2a, 0x2a, 0x3a, 0x00,
- 0x02, 0x02, 0x3e, 0x02, 0x02, 0x00,
- 0x1e, 0x20, 0x20, 0x20, 0x1e, 0x00,
- 0x0e, 0x10, 0x20, 0x10, 0x0e, 0x00,
- 0x3e, 0x10, 0x0e, 0x10, 0x3e, 0x00,
- 0x22, 0x14, 0x08, 0x14, 0x22, 0x00,
- 0x02, 0x04, 0x38, 0x04, 0x02, 0x00,
- 0x3a, 0x2a, 0x2a, 0x2a, 0x2e, 0x00,
- 0x3e, 0x22, 0x00, 0x00, 0x00, 0x00,
- 0x3f, 0x21, 0x3f, 0x00, 0x00, 0x00,
- 0x22, 0x3e, 0x00, 0x00, 0x00, 0x00,
- 0x0c, 0x1e, 0x3c, 0x1e, 0x0c, 0x00,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
- 0x1c, 0x3e, 0x3e, 0x3e, 0x1c, 0x00,
- 0x3c, 0x24, 0x24, 0x24, 0x3c, 0x20,
- 0x3e, 0x24, 0x24, 0x24, 0x3c, 0x00,
- 0x3c, 0x24, 0x24, 0x24, 0x24, 0x00,
- 0x3c, 0x24, 0x24, 0x24, 0x3e, 0x00,
- 0x3c, 0x24, 0x34, 0x2c, 0x24, 0x00,
- 0x08, 0x3e, 0x0a, 0x0a, 0x00, 0x00,
- 0x1c, 0x54, 0x54, 0x54, 0x7c, 0x00,
- 0x3e, 0x04, 0x04, 0x04, 0x3c, 0x00,
- 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0x08, 0x14, 0x22, 0x00, 0x00,
- 0x02, 0x3e, 0x00, 0x00, 0x00, 0x00,
- 0x3c, 0x04, 0x3c, 0x04, 0x3c, 0x00,
- 0x3c, 0x04, 0x04, 0x04, 0x3c, 0x00,
- 0x3c, 0x24, 0x24, 0x24, 0x3c, 0x00,
- 0x7c, 0x24, 0x24, 0x24, 0x3c, 0x00,
- 0x3c, 0x24, 0x24, 0x24, 0x7c, 0x00,
- 0x3c, 0x04, 0x04, 0x04, 0x00, 0x00,
- 0x24, 0x2c, 0x34, 0x24, 0x00, 0x00,
- 0x04, 0x3e, 0x24, 0x24, 0x00, 0x00,
- 0x3c, 0x20, 0x20, 0x20, 0x3c, 0x00,
- 0x0c, 0x10, 0x20, 0x10, 0x0c, 0x00,
- 0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x00,
- 0x24, 0x24, 0x18, 0x24, 0x24, 0x00,
- 0x1c, 0x50, 0x50, 0x50, 0x7c, 0x00,
- 0x24, 0x34, 0x2c, 0x24, 0x00, 0x00,
- 0x08, 0x3e, 0x22, 0x00, 0x00, 0x00,
- 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x00,
- 0x22, 0x3e, 0x08, 0x00, 0x00, 0x00,
- 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_FONT_CRACKERS)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x5E, 0x06, 0x06, 0x00, 0x00, 0x00,
- 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00,
- 0x20, 0x7C, 0x38, 0x38, 0x7C, 0x08,
- 0x48, 0xFE, 0x64, 0x64, 0x00, 0x00,
- 0x64, 0x60, 0x60, 0x18, 0x0C, 0x0C,
- 0x74, 0x4A, 0x4A, 0x7E, 0x48, 0x00,
- 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3C, 0x7E, 0x7E, 0x42, 0x00, 0x00,
- 0x42, 0x7E, 0x7E, 0x3C, 0x00, 0x00,
- 0x04, 0x0C, 0x04, 0x06, 0x0C, 0x04,
- 0x10, 0x3C, 0x3C, 0x3C, 0x10, 0x00,
- 0x00, 0x60, 0xE0, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x00, 0x00, 0x00,
- 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
- 0x60, 0x78, 0x78, 0x1E, 0x06, 0x00,
- 0x3C, 0x3C, 0x7E, 0x42, 0x7E, 0x7E,
- 0x04, 0x7E, 0x7E, 0x7E, 0x00, 0x00,
- 0x76, 0x7A, 0x7E, 0x7E, 0x4C, 0x00,
- 0x4A, 0x7E, 0x7E, 0x7C, 0x00, 0x00,
- 0x0E, 0x08, 0x7E, 0x7E, 0x7E, 0x00,
- 0x4E, 0x4E, 0x4E, 0x7A, 0x1A, 0x00,
- 0x3C, 0x7E, 0x7E, 0x4A, 0x7A, 0x00,
- 0x02, 0x02, 0x0A, 0x7E, 0x7E, 0x7E,
- 0x7E, 0x7E, 0x7E, 0x4A, 0x7E, 0x00,
- 0x0C, 0x4A, 0x7E, 0x7E, 0x3C, 0x00,
- 0x66, 0x66, 0x66, 0x00, 0x00, 0x00,
- 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x3C, 0x7E, 0x7E, 0x62, 0x00,
- 0x14, 0x14, 0x14, 0x00, 0x00, 0x00,
- 0x62, 0x7E, 0x7E, 0x3C, 0x08, 0x00,
- 0x02, 0x4A, 0x0E, 0x0E, 0x0C, 0x00,
- 0x3C, 0x7E, 0x7E, 0x4A, 0x72, 0x30,
- 0x7A, 0x4A, 0x7E, 0x7E, 0x7C, 0x00,
- 0x7E, 0x7E, 0x7E, 0x4A, 0x24, 0x00,
- 0x3C, 0x7E, 0x7E, 0x7E, 0x46, 0x00,
- 0x7E, 0x7E, 0x7E, 0x62, 0x3C, 0x00,
- 0x7E, 0x7E, 0x7E, 0x4A, 0x00, 0x00,
- 0x7E, 0x7E, 0x7E, 0x0A, 0x00, 0x00,
- 0x3C, 0x7E, 0x7E, 0x42, 0x62, 0x00,
- 0x7E, 0x7E, 0x7E, 0x18, 0x7E, 0x00,
- 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00,
- 0x40, 0x7E, 0x7E, 0x7E, 0x00, 0x00,
- 0x7E, 0x7E, 0x7E, 0x3C, 0x66, 0x00,
- 0x7E, 0x7E, 0x7E, 0x40, 0x00, 0x00,
- 0x7E, 0x3E, 0x3E, 0x7C, 0x3E, 0x3E,
- 0x7E, 0x3E, 0x7E, 0x7C, 0x7E, 0x00,
- 0x3C, 0x3C, 0x7E, 0x62, 0x7E, 0x7E,
- 0x7E, 0x7E, 0x7E, 0x22, 0x0C, 0x00,
- 0x3C, 0x7E, 0x7E, 0x62, 0x7E, 0x7C,
- 0x7E, 0x7E, 0x7E, 0x0A, 0x64, 0x00,
- 0x4C, 0x4E, 0x4E, 0x7A, 0x1A, 0x00,
- 0x02, 0x7E, 0x7E, 0x7E, 0x02, 0x00,
- 0x7E, 0x60, 0x7E, 0x7E, 0x7E, 0x00,
- 0x3E, 0x60, 0x7E, 0x7E, 0x3E, 0x00,
- 0x7E, 0x7C, 0x7C, 0x3E, 0x7C, 0x7C,
- 0x46, 0x7E, 0x08, 0x7E, 0x62, 0x62,
- 0x5E, 0x5E, 0x5E, 0x70, 0x3E, 0x00,
- 0x66, 0x7A, 0x7A, 0x5E, 0x66, 0x00,
- 0x7E, 0x7E, 0x7E, 0x42, 0x00, 0x00,
- 0x06, 0x1E, 0x1E, 0x78, 0x60, 0x00,
- 0x42, 0x7E, 0x7E, 0x7E, 0x00, 0x00,
- 0x0C, 0x06, 0x0C, 0x00, 0x00, 0x00,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
- 0x02, 0x06, 0x06, 0x04, 0x00, 0x00,
- 0x78, 0x24, 0x7C, 0x7C, 0x78, 0x00,
- 0x7C, 0x7C, 0x7C, 0x48, 0x20, 0x00,
- 0x18, 0x7C, 0x7C, 0x7C, 0x4C, 0x00,
- 0x20, 0x48, 0x7C, 0x7C, 0x7C, 0x00,
- 0x18, 0x7C, 0x7C, 0x74, 0x4C, 0x00,
- 0x78, 0x7C, 0x7C, 0x24, 0x00, 0x00,
- 0x18, 0x7C, 0x7C, 0x44, 0x74, 0x00,
- 0x7C, 0x7C, 0x7C, 0x08, 0x60, 0x00,
- 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x40, 0x7C, 0x7C, 0x7C, 0x00, 0x00,
- 0x7C, 0x7C, 0x7C, 0x20, 0x48, 0x00,
- 0x7C, 0x7C, 0x7C, 0x40, 0x00, 0x00,
- 0x7C, 0x3C, 0x3C, 0x78, 0x3C, 0x3C,
- 0x7C, 0x7C, 0x7C, 0x04, 0x78, 0x00,
- 0x18, 0x18, 0x7C, 0x44, 0x7C, 0x7C,
- 0x7C, 0x7C, 0x7C, 0x24, 0x08, 0x00,
- 0x18, 0x18, 0x7C, 0x44, 0x7C, 0x7C,
- 0x7C, 0x7C, 0x7C, 0x04, 0x00, 0x00,
- 0x5C, 0x7C, 0x7C, 0x74, 0x00, 0x00,
- 0x08, 0x7C, 0x7C, 0x7C, 0x48, 0x00,
- 0x7C, 0x60, 0x7C, 0x7C, 0x7C, 0x00,
- 0x3C, 0x60, 0x7C, 0x7C, 0x3C, 0x00,
- 0x7C, 0x78, 0x78, 0x3C, 0x78, 0x78,
- 0x4C, 0x3C, 0x3C, 0x78, 0x64, 0x00,
- 0x4C, 0x4C, 0x4C, 0x78, 0x3C, 0x00,
- 0x5C, 0x74, 0x44, 0x5C, 0x74, 0x00,
- 0x24, 0x7E, 0x42, 0x42, 0x00, 0x00,
- 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x42, 0x7E, 0x24, 0x00, 0x00, 0x00,
- 0x04, 0x06, 0x06, 0x02, 0x04, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_FONT_EIN)
- 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,
- 0x00, 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, 0x00, 0x7F, 0x00, 0x00, 0x00,
- 0x20, 0x40, 0x40, 0x3F, 0x00, 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,
- 0x01, 0x01, 0x7F, 0x01, 0x01, 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,
- 0x78, 0x14, 0x14, 0x78, 0x00, 0x00,
- 0x7C, 0x54, 0x54, 0x28, 0x00, 0x00,
- 0x38, 0x44, 0x44, 0x28, 0x00, 0x00,
- 0x7C, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x7C, 0x54, 0x54, 0x44, 0x00, 0x00,
- 0x7C, 0x14, 0x14, 0x04, 0x00, 0x00,
- 0x38, 0x44, 0x54, 0x34, 0x00, 0x00,
- 0x7C, 0x10, 0x10, 0x7C, 0x00, 0x00,
- 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x40, 0x40, 0x3C, 0x00, 0x00,
- 0x7C, 0x10, 0x28, 0x44, 0x00, 0x00,
- 0x7C, 0x40, 0x40, 0x40, 0x00, 0x00,
- 0x7C, 0x08, 0x70, 0x08, 0x7C, 0x00,
- 0x7C, 0x08, 0x10, 0x7C, 0x00, 0x00,
- 0x38, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x7C, 0x14, 0x14, 0x08, 0x00, 0x00,
- 0x38, 0x44, 0x24, 0x58, 0x00, 0x00,
- 0x7C, 0x14, 0x34, 0x48, 0x00, 0x00,
- 0x48, 0x54, 0x54, 0x24, 0x00, 0x00,
- 0x04, 0x7C, 0x04, 0x00, 0x00, 0x00,
- 0x3C, 0x40, 0x40, 0x3C, 0x00, 0x00,
- 0x3C, 0x40, 0x20, 0x1C, 0x00, 0x00,
- 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
- 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
- 0x0C, 0x10, 0x70, 0x10, 0x0C, 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,
-# elif defined(OLED_FONT_HISKYF21)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00,
- 0x28, 0x7C, 0x28, 0x7C, 0x28, 0x00,
- 0x48, 0x54, 0x54, 0xFE, 0x54, 0x54,
- 0x44, 0x20, 0x10, 0x08, 0x44, 0x00,
- 0x28, 0x54, 0x54, 0x54, 0x74, 0x10,
- 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x78, 0x84, 0x00, 0x00, 0x00, 0x00,
- 0x84, 0x78, 0x00, 0x00, 0x00, 0x00,
- 0x48, 0x30, 0x30, 0x48, 0x00, 0x00,
- 0x10, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x60, 0x10, 0x0C, 0x00, 0x00, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x44, 0x38,
- 0x08, 0x7C, 0x00, 0x00, 0x00, 0x00,
- 0x64, 0x54, 0x54, 0x54, 0x48, 0x00,
- 0x44, 0x54, 0x54, 0x54, 0x28, 0x00,
- 0x1C, 0x10, 0x10, 0x10, 0x7C, 0x00,
- 0x4C, 0x54, 0x54, 0x54, 0x24, 0x00,
- 0x38, 0x54, 0x54, 0x54, 0x54, 0x20,
- 0x44, 0x24, 0x14, 0x0C, 0x00, 0x00,
- 0x28, 0x54, 0x54, 0x54, 0x54, 0x28,
- 0x08, 0x54, 0x54, 0x54, 0x54, 0x38,
- 0x48, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x28, 0x44, 0x00, 0x00, 0x00,
- 0x28, 0x28, 0x28, 0x28, 0x00, 0x00,
- 0x44, 0x28, 0x10, 0x00, 0x00, 0x00,
- 0x04, 0x54, 0x14, 0x14, 0x08, 0x00,
- 0x38, 0x44, 0x5C, 0x54, 0x48, 0x00,
- 0x60, 0x18, 0x14, 0x14, 0x18, 0x60,
- 0x7C, 0x54, 0x54, 0x54, 0x58, 0x30,
- 0x38, 0x44, 0x44, 0x44, 0x40, 0x00,
- 0x7C, 0x44, 0x44, 0x44, 0x38, 0x00,
- 0x7C, 0x54, 0x54, 0x54, 0x54, 0x40,
- 0x7C, 0x14, 0x14, 0x14, 0x10, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x70, 0x10,
- 0x7C, 0x10, 0x10, 0x10, 0x10, 0x7C,
- 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x40, 0x40, 0x40, 0x40, 0x3C,
- 0x7C, 0x10, 0x10, 0x28, 0x44, 0x00,
- 0x7C, 0x40, 0x40, 0x40, 0x00, 0x00,
- 0x7C, 0x08, 0x10, 0x60, 0x10, 0x08,
- 0x7C, 0x08, 0x10, 0x20, 0x7C, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x44, 0x38,
- 0x7C, 0x24, 0x24, 0x24, 0x18, 0x00,
- 0x38, 0x44, 0x64, 0x44, 0x38, 0x00,
- 0x7C, 0x14, 0x14, 0x14, 0x68, 0x00,
- 0x48, 0x54, 0x54, 0x54, 0x54, 0x20,
- 0x04, 0x04, 0x7C, 0x04, 0x04, 0x00,
- 0x3C, 0x40, 0x40, 0x40, 0x3C, 0x00,
- 0x0C, 0x30, 0x40, 0x30, 0x0C, 0x00,
- 0x0C, 0x30, 0x40, 0x20, 0x1C, 0x20,
- 0x74, 0x2C, 0x10, 0x28, 0x44, 0x00,
- 0x04, 0x08, 0x70, 0x08, 0x04, 0x00,
- 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
- 0xFC, 0x84, 0x00, 0x00, 0x00, 0x00,
- 0x0C, 0x10, 0x60, 0x00, 0x00, 0x00,
- 0x84, 0xFC, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x41, 0x7F, 0x00, 0x00,
- 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
- 0x00, 0x7F, 0x41, 0x7F, 0x00, 0x00,
- 0x60, 0x18, 0x14, 0x14, 0x18, 0x60,
- 0x7C, 0x54, 0x54, 0x54, 0x58, 0x30,
- 0x38, 0x44, 0x44, 0x44, 0x40, 0x00,
- 0x7C, 0x44, 0x44, 0x44, 0x38, 0x00,
- 0x7C, 0x54, 0x54, 0x54, 0x54, 0x40,
- 0x7C, 0x14, 0x14, 0x14, 0x10, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x70, 0x10,
- 0x7C, 0x10, 0x10, 0x10, 0x10, 0x7C,
- 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x40, 0x40, 0x40, 0x40, 0x3C,
- 0x7C, 0x10, 0x10, 0x28, 0x44, 0x00,
- 0x7C, 0x40, 0x40, 0x40, 0x00, 0x00,
- 0x7C, 0x08, 0x10, 0x60, 0x10, 0x08,
- 0x7C, 0x08, 0x10, 0x20, 0x7C, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x44, 0x38,
- 0x7C, 0x24, 0x24, 0x24, 0x18, 0x00,
- 0x38, 0x44, 0x64, 0x44, 0x38, 0x00,
- 0x7C, 0x14, 0x14, 0x14, 0x68, 0x00,
- 0x48, 0x54, 0x54, 0x54, 0x54, 0x20,
- 0x04, 0x04, 0x7C, 0x04, 0x04, 0x00,
- 0x3C, 0x40, 0x40, 0x40, 0x3C, 0x00,
- 0x0C, 0x30, 0x40, 0x30, 0x0C, 0x00,
- 0x0C, 0x30, 0x40, 0x20, 0x1C, 0x20,
- 0x74, 0x2C, 0x10, 0x28, 0x44, 0x00,
- 0x04, 0x08, 0x70, 0x08, 0x04, 0x00,
- 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
- 0x00, 0x7F, 0x41, 0x7F, 0x00, 0x00,
- 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x41, 0x7F, 0x00, 0x00,
- 0x00, 0x7F, 0x41, 0x7F, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_FONT_SUPER_DIGG)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x58, 0x5C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
- 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
- 0x5C, 0xFE, 0x54, 0xFE, 0x74, 0x00,
- 0x03, 0x63, 0x38, 0x0C, 0x63, 0x60,
- 0x70, 0x5C, 0x54, 0x74, 0x7C, 0x50,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0x7C, 0x44, 0x00, 0x00, 0x00,
- 0x44, 0x7C, 0x70, 0x00, 0x00, 0x00,
- 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
- 0x10, 0x10, 0x70, 0x7C, 0x10, 0x00,
- 0x40, 0xC0, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
- 0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0x7C, 0x03, 0x00, 0x00, 0x00,
- 0x7C, 0x44, 0x44, 0x44, 0x7C, 0x1C,
- 0x04, 0x04, 0x7C, 0x1C, 0x00, 0x00,
- 0x74, 0x74, 0x54, 0x54, 0x5C, 0x00,
- 0x44, 0x54, 0x54, 0x54, 0x7C, 0x70,
- 0x1C, 0x10, 0x10, 0x7C, 0x7C, 0x00,
- 0x5C, 0x5C, 0x54, 0x54, 0x74, 0x00,
- 0x70, 0x7C, 0x54, 0x54, 0x74, 0x00,
- 0x04, 0x14, 0x14, 0x14, 0x7C, 0x70,
- 0x70, 0x5C, 0x54, 0x74, 0x7C, 0x00,
- 0x5C, 0x54, 0x54, 0x54, 0x7C, 0x1C,
- 0x50, 0x50, 0x00, 0x00, 0x00, 0x00,
- 0x50, 0xD0, 0x00, 0x00, 0x00, 0x00,
- 0x18, 0x18, 0x24, 0x42, 0x00, 0x00,
- 0x28, 0x28, 0x28, 0x28, 0x00, 0x00,
- 0x42, 0x24, 0x18, 0x18, 0x00, 0x00,
- 0x04, 0x14, 0x54, 0x54, 0x1C, 0x1C,
- 0xF8, 0x04, 0x74, 0x74, 0x54, 0x54,
- 0x70, 0x7C, 0x14, 0x14, 0x3C, 0x00,
- 0x7C, 0x74, 0x54, 0x54, 0x7C, 0x00,
- 0x70, 0x7C, 0x44, 0x44, 0x44, 0x44,
- 0x70, 0x7C, 0x44, 0x44, 0x48, 0x70,
- 0x70, 0x7C, 0x54, 0x54, 0x54, 0x44,
- 0x70, 0x7C, 0x14, 0x14, 0x14, 0x04,
- 0x70, 0x7C, 0x44, 0x44, 0x54, 0x74,
- 0x70, 0x7C, 0x10, 0x10, 0x7C, 0x00,
- 0x70, 0x7C, 0x00, 0x00, 0x00, 0x00,
- 0x60, 0x40, 0x40, 0x40, 0x7C, 0x70,
- 0x7C, 0x70, 0x10, 0x1C, 0x70, 0x00,
- 0x70, 0x7C, 0x40, 0x40, 0x40, 0x60,
- 0x70, 0x7C, 0x04, 0x04, 0x7C, 0x04,
- 0x70, 0x7C, 0x04, 0x04, 0x04, 0x7C,
- 0x70, 0x7C, 0x44, 0x44, 0x44, 0x7C,
- 0x70, 0x7C, 0x24, 0x24, 0x3C, 0x00,
- 0x7C, 0x44, 0x44, 0x44, 0x7C, 0x00,
- 0x7C, 0x74, 0x14, 0x14, 0x3C, 0x00,
- 0x5C, 0x5C, 0x54, 0x54, 0x74, 0x00,
- 0x04, 0x04, 0x7C, 0x74, 0x04, 0x00,
- 0x70, 0x7C, 0x40, 0x40, 0x40, 0x7C,
- 0x70, 0x7C, 0x40, 0x40, 0x20, 0x1C,
- 0x70, 0x7C, 0x40, 0x40, 0x7C, 0x40,
- 0x70, 0x7C, 0x10, 0x10, 0x3C, 0x00,
- 0x1C, 0x10, 0x70, 0x70, 0x1C, 0x00,
- 0x74, 0x74, 0x54, 0x54, 0x5C, 0x00,
- 0xF0, 0xFE, 0x82, 0x00, 0x00, 0x00,
- 0x03, 0x7C, 0x70, 0x00, 0x00, 0x00,
- 0x82, 0xFE, 0xF0, 0x00, 0x00, 0x00,
- 0x04, 0x02, 0x01, 0x06, 0x04, 0x00,
- 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0x7C, 0x14, 0x14, 0x3C, 0x00,
- 0x7C, 0x74, 0x54, 0x54, 0x7C, 0x00,
- 0x70, 0x7C, 0x44, 0x44, 0x44, 0x44,
- 0x70, 0x7C, 0x44, 0x44, 0x48, 0x70,
- 0x70, 0x7C, 0x54, 0x54, 0x54, 0x44,
- 0x70, 0x7C, 0x14, 0x14, 0x14, 0x04,
- 0x70, 0x7C, 0x44, 0x44, 0x54, 0x74,
- 0x70, 0x7C, 0x10, 0x10, 0x7C, 0x00,
- 0x70, 0x7C, 0x00, 0x00, 0x00, 0x00,
- 0x60, 0x40, 0x40, 0x40, 0x7C, 0x70,
- 0x7C, 0x70, 0x10, 0x1C, 0x70, 0x00,
- 0x70, 0x7C, 0x40, 0x40, 0x40, 0x60,
- 0x70, 0x7C, 0x04, 0x04, 0x7C, 0x04,
- 0x70, 0x7C, 0x04, 0x04, 0x04, 0x7C,
- 0x70, 0x7C, 0x44, 0x44, 0x44, 0x7C,
- 0x70, 0x7C, 0x24, 0x24, 0x3C, 0x00,
- 0x7C, 0x44, 0x44, 0x44, 0x7C, 0x00,
- 0x7C, 0x74, 0x14, 0x14, 0x3C, 0x00,
- 0x5C, 0x5C, 0x54, 0x54, 0x74, 0x00,
- 0x04, 0x04, 0x7C, 0x74, 0x04, 0x00,
- 0x70, 0x7C, 0x40, 0x40, 0x40, 0x7C,
- 0x70, 0x7C, 0x40, 0x40, 0x20, 0x1C,
- 0x70, 0x7C, 0x40, 0x40, 0x7C, 0x40,
- 0x70, 0x7C, 0x10, 0x10, 0x3C, 0x00,
- 0x1C, 0x10, 0x70, 0x70, 0x1C, 0x00,
- 0x74, 0x74, 0x54, 0x54, 0x5C, 0x00,
- 0x10, 0xFE, 0xC2, 0x00, 0x00, 0x00,
- 0x00, 0x44, 0x77, 0x00, 0x00, 0x00,
- 0xC2, 0xFE, 0x10, 0x00, 0x00, 0x00,
- 0x02, 0x01, 0x03, 0x04, 0x06, 0x02,
- 0x3C, 0x22, 0x21, 0x22, 0x3C, 0x00,
-#elif defined (OLED_FONT_ZXPIX)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
- 0x12, 0x3F, 0x12, 0x12, 0x3F, 0x12,
- 0x2E, 0x2A, 0x7F, 0x2A, 0x3A, 0x00,
- 0x23, 0x13, 0x08, 0x04, 0x32, 0x31,
- 0x10, 0x2A, 0x25, 0x2A, 0x10, 0x20,
- 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x1E, 0x21, 0x00, 0x00, 0x00, 0x00,
- 0x21, 0x1E, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x08,
- 0x08, 0x08, 0x3E, 0x08, 0x08, 0x08,
- 0x80, 0x60, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
- 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
- 0x1E, 0x31, 0x29, 0x25, 0x23, 0x1E,
- 0x22, 0x21, 0x3F, 0x20, 0x20, 0x20,
- 0x32, 0x29, 0x29, 0x29, 0x29, 0x26,
- 0x12, 0x21, 0x21, 0x25, 0x25, 0x1A,
- 0x18, 0x14, 0x12, 0x3F, 0x10, 0x10,
- 0x17, 0x25, 0x25, 0x25, 0x25, 0x19,
- 0x1E, 0x25, 0x25, 0x25, 0x25, 0x18,
- 0x01, 0x01, 0x31, 0x09, 0x05, 0x03,
- 0x1A, 0x25, 0x25, 0x25, 0x25, 0x1A,
- 0x06, 0x29, 0x29, 0x29, 0x29, 0x1E,
- 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x64, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x14, 0x22, 0x00, 0x00, 0x00,
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
- 0x22, 0x14, 0x08, 0x00, 0x00, 0x00,
- 0x02, 0x01, 0x01, 0x29, 0x05, 0x02,
- 0x1E, 0x21, 0x2D, 0x2B, 0x2D, 0x0E,
- 0x3E, 0x09, 0x09, 0x09, 0x09, 0x3E,
- 0x3F, 0x25, 0x25, 0x25, 0x25, 0x1A,
- 0x1E, 0x21, 0x21, 0x21, 0x21, 0x12,
- 0x3F, 0x21, 0x21, 0x21, 0x12, 0x0C,
- 0x3F, 0x25, 0x25, 0x25, 0x25, 0x21,
- 0x3F, 0x05, 0x05, 0x05, 0x05, 0x01,
- 0x1E, 0x21, 0x21, 0x21, 0x29, 0x1A,
- 0x3F, 0x04, 0x04, 0x04, 0x04, 0x3F,
- 0x21, 0x21, 0x3F, 0x21, 0x21, 0x21,
- 0x10, 0x20, 0x20, 0x20, 0x20, 0x1F,
- 0x3F, 0x04, 0x0C, 0x0A, 0x11, 0x20,
- 0x3F, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x3F, 0x02, 0x04, 0x04, 0x02, 0x3F,
- 0x3F, 0x02, 0x04, 0x08, 0x10, 0x3F,
- 0x1E, 0x21, 0x21, 0x21, 0x21, 0x1E,
- 0x3F, 0x09, 0x09, 0x09, 0x09, 0x06,
- 0x1E, 0x21, 0x29, 0x31, 0x21, 0x1E,
- 0x3F, 0x09, 0x09, 0x09, 0x19, 0x26,
- 0x12, 0x25, 0x25, 0x25, 0x25, 0x18,
- 0x01, 0x01, 0x01, 0x3F, 0x01, 0x01,
- 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F,
- 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F,
- 0x1F, 0x20, 0x10, 0x10, 0x20, 0x1F,
- 0x21, 0x12, 0x0C, 0x0C, 0x12, 0x21,
- 0x01, 0x02, 0x0C, 0x38, 0x04, 0x02,
- 0x21, 0x31, 0x29, 0x25, 0x23, 0x21,
- 0x3F, 0x21, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
- 0x21, 0x3F, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x02, 0x3F, 0x02, 0x04, 0x00,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
- 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x30, 0x2A, 0x2A, 0x3C, 0x00,
- 0x3F, 0x24, 0x24, 0x24, 0x18, 0x00,
- 0x0C, 0x14, 0x22, 0x22, 0x00, 0x00,
- 0x18, 0x24, 0x24, 0x24, 0x3F, 0x00,
- 0x1C, 0x2C, 0x2A, 0x2A, 0x24, 0x00,
- 0x3E, 0x05, 0x01, 0x00, 0x00, 0x00,
- 0x18, 0x28, 0xA4, 0xA4, 0x7C, 0x00,
- 0x3F, 0x04, 0x04, 0x0C, 0x30, 0x00,
- 0x24, 0x3D, 0x20, 0x00, 0x00, 0x00,
- 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
- 0x3F, 0x0C, 0x12, 0x20, 0x00, 0x00,
- 0x1F, 0x20, 0x20, 0x00, 0x00, 0x00,
- 0x3E, 0x02, 0x3C, 0x02, 0x3C, 0x00,
- 0x3E, 0x02, 0x02, 0x02, 0x3C, 0x00,
- 0x0C, 0x14, 0x22, 0x32, 0x0C, 0x00,
- 0xFC, 0x24, 0x24, 0x24, 0x18, 0x00,
- 0x18, 0x24, 0x24, 0x24, 0xFC, 0x80,
- 0x3C, 0x04, 0x02, 0x02, 0x00, 0x00,
- 0x24, 0x2C, 0x2A, 0x2A, 0x10, 0x00,
- 0x02, 0x1F, 0x22, 0x20, 0x00, 0x00,
- 0x1E, 0x20, 0x20, 0x20, 0x1E, 0x00,
- 0x06, 0x18, 0x20, 0x18, 0x06, 0x00,
- 0x1E, 0x30, 0x1C, 0x30, 0x0E, 0x00,
- 0x22, 0x14, 0x08, 0x14, 0x22, 0x00,
- 0x0C, 0x10, 0xA0, 0xA0, 0x7C, 0x00,
- 0x22, 0x32, 0x2A, 0x26, 0x22, 0x22,
- 0x0C, 0x3F, 0x21, 0x00, 0x00, 0x00,
- 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x21, 0x3F, 0x0C, 0x00, 0x00, 0x00,
- 0x02, 0x01, 0x02, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# else // default font
- 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, 0xA4, 0xA4, 0x9C, 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,
- 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
- 0x18, 0x24, 0x24, 0x18, 0xFC, 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,
-# endif
-
-// top Logo section
- 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, 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,
-
-// First icon section
- 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,
- 0x3E, 0x4A, 0x4F, 0x4A, 0x3E, 0x00,
- 0x18, 0x3C, 0x7C, 0x3A, 0x7D, 0x24,
- 0x14, 0x36, 0x00, 0x36, 0x77, 0x77,
-
-// middle logo section
- 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, 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,
-
-// second icon section
- 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, 0x44, 0x28, 0xFF, 0x5A, 0x24,
- 0xF0, 0xFE, 0xF1, 0x91, 0xF6, 0xF0,
- 0xF0, 0xFC, 0xF2, 0x92, 0xFC, 0xF0,
-
-// bottom logo section
- 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, 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,
-
-// third icon section
- 0x1F, 0x05, 0x00, 0x02, 0x1F, 0x00,
- 0x1F, 0x05, 0x00, 0x1D, 0x17, 0x00,
- 0x1F, 0x05, 0x00, 0x15, 0x1F, 0x00,
- 0x1F, 0x05, 0x00, 0x07, 0x1C, 0x00,
- 0x1F, 0x05, 0x00, 0x17, 0x1D, 0x00,
- 0x1F, 0x05, 0x00, 0x1F, 0x1D, 0x00,
- 0x1F, 0x05, 0x00, 0x01, 0x1F, 0x00,
- 0x1F, 0x05, 0x00, 0x1F, 0x1F, 0x00,
- 0x1F, 0x05, 0x00, 0x07, 0x1F, 0x00,
- 0x1F, 0x05, 0x00, 0x70, 0x77, 0x00,
- 0x1F, 0x05, 0x00, 0x00, 0x77, 0x00,
-
-// fourth icon section
- 0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F,
- 0x00, 0x14, 0x08, 0x14, 0x00, 0x00,
- 0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F,
- 0x00, 0x22, 0x1C, 0x41, 0x3E, 0x00,
- 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C,
- 0x06, 0x0C, 0x18, 0x30, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x06, 0x06, 0x0C,
- 0x18, 0x30, 0x66, 0x66, 0x66, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x0C, 0x7E,
- 0x7F, 0x7E, 0x0C, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x77, 0x77, 0x77, 0x00,
- 0x77, 0x77, 0x77, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xE7, 0xA5, 0xFF, 0x24,
- 0x24, 0xFF, 0xA5, 0xE7, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x22, 0xC9, 0xD1,
- 0xC9, 0x22, 0x1C, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x02, 0x38, 0xFC, 0xED,
- 0xFC, 0x38, 0x02, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x3E, 0x4A, 0x4F,
- 0x4A, 0x3E, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x60, 0x6A, 0x64,
- 0x6A, 0x60, 0x40, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x42, 0x69, 0x65, 0x65,
- 0x65, 0x69, 0x42, 0x04, 0x00, 0x00,
- 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00,
- 0x00, 0x00, 0x1C, 0x14, 0x1C, 0x08,
- 0x18, 0x08, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0xC8, 0xEE, 0xF9, 0x70,
- 0x1F, 0x05, 0x00, 0x10, 0x77, 0x40,
- 0x00, 0x06, 0x09, 0x59, 0x01, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
-// clang-format on
diff --git a/users/drashna/oled/oled_assets.h b/users/drashna/oled/oled_assets.h
deleted file mode 100644
index 36dfc7762c..0000000000
--- a/users/drashna/oled/oled_assets.h
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-// clang-format off
-
-static const char PROGMEM code_to_name[256] = {
-// 0 1 2 3 4 5 6 7 8 9 A B c D E F
- ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', // 0x
- 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', // 1x
- '3', '4', '5', '6', '7', '8', '9', '0', 20, 19, 27, 26, 22, '-', '=', '[', // 2x
- ']','\\', '#', ';','\'', '`', ',', '.', '/', 128,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA, // 3x
- 0xDB,0xDC,0xDD,0xDE,0XDF,0xFB, 'P', 'S', 19, ' ', 17, 30, 16, 16, 31, 26, // 4x
- 27, 25, 24, 'N', '/', '*', '-', '+', 23, '1', '2', '3', '4', '5', '6', '7', // 5x
- '8', '9', '0', '.','\\', 'A', 0, '=', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 6x
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 7x
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 8x
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 9x
- ' ', ' ', ' ', ' ', ' ', 0, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ax
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Bx
- ' ',0x9E,0x9E, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',0x9D,0x9D,0x9D,0x9D, // Cx
- 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D, // Dx
- 'C', 'S', 'A', 'G', 'C', 'S', 'A', 'G', ' ', ' ', ' ', ' ', ' ', 24, 26, 24, // Ex
- 25, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 24, 25, 27, 26, ' ', ' ', ' ' // Fx
-};
-
-static const char PROGMEM gmk_bad_logo[384] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, 0x38, 0x38, 0x38, 0x78, 0x70, 0xF0, 0xE0, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x00, 0x80, 0xE0, 0xF0, 0xF8, 0x78, 0x38, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x38, 0x38, 0xF8, 0xF0, 0xF0, 0xE0, 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, 0x80, 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xC1, 0x80, 0x00, 0x00, 0x38, 0x38, 0xB8, 0xB8, 0xF9, 0xF9, 0xF8, 0x38, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0x1F, 0x01, 0x3F, 0xFF, 0xFF, 0xF0, 0xFE, 0x7F, 0x0F, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x1E, 0x7F, 0xFF, 0xFF, 0xF3, 0xC1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x1C, 0x1C, 0x9C, 0xFF, 0xFF, 0xF3, 0xE1, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x0F, 0x07, 0x07, 0x8E, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x8F, 0x07, 0x07, 0x8E, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static const char PROGMEM hue_manitee_logo[384] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x90, 0x70, 0xE8, 0xA8, 0xE4, 0xC4, 0xC4, 0xA0, 0xE4, 0xB0, 0xDC, 0xE4, 0xFC, 0xFC, 0xFC, 0xFC, 0x3C, 0x3C, 0xFC, 0xF8, 0xF0, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 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, 0xF8, 0xF8, 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, 0xF0, 0xFC, 0xF6, 0xF7, 0xEF, 0xFF, 0x87, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x1F, 0x1F, 0x19, 0x15, 0xF7, 0x16, 0x1A, 0x1B, 0x16, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xC0, 0xC0, 0x00, 0x00, 0x03, 0x03, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30, 0x30, 0xCC, 0xCC, 0x03, 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, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 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
-};
-
-static const char PROGMEM corne_logo[384] = {
- 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, 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, 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
-};
-
-static const char PROGMEM loose_logo[384] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x02, 0xF9, 0x01, 0x01, 0x05, 0x09, 0x11, 0x22, 0x06, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x46, 0x46, 0x44, 0x44, 0x45, 0x44, 0x29, 0x28, 0x2A, 0x28, 0x11, 0x13, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0xE5, 0xE7, 0xE5, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xC7, 0x85, 0x07, 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xC7, 0x85, 0x07, 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0x07, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x80, 0x00, 0x1C, 0x3E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x14, 0x14, 0x14, 0x14, 0x14, 0x08, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xBE, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0xBD, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x8F, 0x9F, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xFC, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x20, 0x47, 0x48, 0x50, 0x40, 0x41, 0x42, 0x24, 0x30, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x31, 0x31, 0x11, 0x51, 0x11, 0x11, 0x4A, 0x0A, 0x2A, 0x0A, 0x44, 0x64, 0x50, 0x70, 0x50, 0x70, 0x50, 0x70, 0x50, 0x70, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x70, 0x50, 0x71, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x71, 0x50, 0x70, 0x50, 0x71, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x71, 0x50, 0x70, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x51, 0x70, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static const char PROGMEM skeeb_logo[384] = {
- 0xC0, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x01, 0xFF, 0xFF, 0x01, 0x01, 0xFF, 0xFF, 0x01, 0x01, 0xFF, 0xFF, 0x19, 0x19, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x01, 0x01, 0xFF, 0xFF, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x19, 0x19, 0xFF, 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0x01, 0x01, 0xF9, 0xF9, 0xF9, 0xF9, 0xFF, 0xFF, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xF9, 0xF9, 0xFF, 0xFF, 0x19, 0x19, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x67, 0x67, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0xC0, 0x00,
- 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0E, 0x0E, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x09, 0x09, 0x09, 0x09, 0xF9, 0xF9, 0x09, 0x09, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
- 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xFF, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x03, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x01, 0x02, 0xFC, 0xF8, 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, 0xFF, 0x00, 0x00
-};
-
-static const char PROGMEM qmk_logo[384] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xF0, 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0x3F, 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0xF0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 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, 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, 0x49, 0x49, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xDF, 0xBF, 0xBF, 0x00, 0xBF, 0xBF, 0xDF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x60, 0x60, 0xE0, 0xBF, 0x1F, 0x00, 0x7F, 0x7F, 0x07, 0x1E, 0x38, 0x1E, 0x07, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x0E, 0x1F, 0x3B, 0x71, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x0C, 0x0C, 0x0C, 0x00, 0x7E, 0x7E, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x7E, 0x7E, 0x03, 0x03, 0x7F, 0x7E, 0x00, 0x0F, 0x3E, 0x70, 0x3C, 0x06, 0x3C, 0x70, 0x3E, 0x0F, 0x00, 0x32, 0x7B, 0x49, 0x49, 0x3F, 0x7E, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00, 0x1E, 0x3F, 0x69, 0x69, 0x6F, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07, 0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x7E, 0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static const char PROGMEM qmk_large_logo[1024] = {
- 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, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 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, 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, 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, 0x03, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 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, 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, 0x81, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 0x81, 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, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x3f, 0x7f, 0x7e, 0xf8, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf8, 0x7e, 0x7f, 0x3f, 0x1f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 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, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 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
- };
-
-static const char PROGMEM header_image[128] = { 0x00, 0xC0, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0xC0 };
-static const char PROGMEM row_2_image[128] = { 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF };
-
-static const char PROGMEM display_border[3] = {0x0, 0xFF, 0x0};
-
-static const char PROGMEM footer_image[128] = { 0x00, 0x03, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x03 };
-
-static const char PROGMEM mouse_logo[3][2][16] = {
- { // mouse icon
- { 0x00, 0x00, 0x00, 0xFC, 0x02, 0x02, 0x02, 0x3A, 0x02, 0x02, 0x02, 0xFC, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x3F, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x60, 0x3F, 0x00, 0x00, 0x00 }
- },
- { // crosshair icon
- {0x80, 0xF0, 0x88, 0xE4, 0x92, 0x8A, 0xCA, 0x7F, 0xCA, 0x8A, 0x92, 0xE4, 0x88, 0xF0, 0x80, 0x00 },
- {0x00, 0x07, 0x08, 0x13, 0x24, 0x28, 0x29, 0x7F, 0x29, 0x28, 0x24, 0x13, 0x08, 0x07, 0x00, 0x00 }
- },
- { // dragscroll icon
- {0x00, 0x00, 0x70, 0x88, 0x9C, 0x02, 0x0F, 0x01, 0x0F, 0x02, 0x8C, 0x44, 0x38, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x02, 0x06, 0x0F, 0x1C, 0x3C, 0x7C, 0x3C, 0x1C, 0x0F, 0x06, 0x02, 0x00, 0x00, 0x00}
- }
-};
-
-
-// Images credit j-inc(/James Incandenza) and pixelbenny.
-// Credit to obosob for initial animation approach.
-// heavily modified by drashna because he's a glutton for punishment
-
-#define OLED_ANIM_SIZE 36
-#define OLED_ANIM_ROWS 4
-#define OLED_ANIM_MAX_FRAMES 3
-
-static const char PROGMEM animation[4][OLED_ANIM_MAX_FRAMES][OLED_ANIM_ROWS][OLED_ANIM_SIZE] = {
- { // sleep frames
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xa8, 0x48, 0xa8, 0x18, 0x08, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x80, 0x44, 0x84, 0x06, 0x05, 0x04, 0x80, 0x40, 0x20, 0x10, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x18, 0x04, 0x04, 0x02, 0x7a, 0x86, 0x01, 0x80, 0x80, 0x01, 0x03, 0x05, 0x07, 0x01, 0x00, 0x00, 0x80, 0x83, 0x45, 0xfa, 0x3c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x24, 0x28, 0x28, 0x29, 0x29, 0x29, 0x3a, 0x18, 0x1c, 0x39, 0x24, 0x24, 0x3a, 0x2d, 0x26, 0x31, 0x1f, 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, 0x22, 0x22, 0x3a, 0x2a, 0x26, 0x22, 0x80, 0xc0, 0x80, 0x00, 0x24, 0x34, 0x2c, 0xe4, 0x60, 0x10, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x38, 0x04, 0x02, 0x02, 0x01, 0x79, 0x87, 0x01, 0x80, 0x81, 0x83, 0x05, 0x05, 0x03, 0x01, 0x00, 0x00, 0x80, 0x43, 0x05, 0xfa, 0x3c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x24, 0x28, 0x28, 0x28, 0x29, 0x29, 0x3a, 0x18, 0x1c, 0x39, 0x24, 0x24, 0x3a, 0x2d, 0x26, 0x31, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00 }
- }
- },
- { // wake frames
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08, 0x10, 0x60, 0x80, 0x00, 0x80, 0x60, 0x10, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x40, 0x40, 0x5c, 0x00, 0x01, 0x41, 0x01, 0x00, 0x5c, 0x40, 0x40, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x80, 0xe1, 0x12, 0x0a, 0x06, 0x00, 0x80, 0x00, 0x06, 0x0a, 0x12, 0xe1, 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x11, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1c, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
- },
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08, 0x10, 0x60, 0x80, 0x00, 0x80, 0x60, 0x10, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x90, 0x12, 0x0a, 0x02, 0xf4, 0x09, 0x0d, 0xf1, 0x04, 0x02, 0x0a, 0x12, 0x90, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x80, 0xe1, 0x12, 0x0a, 0x06, 0x01, 0x81, 0x00, 0x06, 0x0a, 0x12, 0xe1, 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x11, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1c, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
- }
- },
- { // kaki frames
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0xfc, 0x84, 0x08, 0x08, 0x10, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x60, 0x80, 0x00, 0x00, 0x91, 0xa1, 0x80, 0x00, 0x00, 0x22, 0x84, 0x40, 0x50, 0x48, 0xc1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x41, 0x82, 0xe2, 0x12, 0x0a, 0x06, 0x00, 0x80, 0x88, 0x4f, 0x02, 0x22, 0xe2, 0x9f, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1a, 0x0a, 0x0a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 }
- },
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x06, 0x1a, 0x22, 0xc2, 0x04, 0x04, 0x04, 0x07, 0x00, 0xc0, 0x20, 0x10, 0x80, 0x80, 0x01, 0x01, 0x02, 0xfc, 0xfe, 0x02, 0x3c, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0d, 0x8d, 0x55, 0x50, 0x94, 0xf0, 0x10, 0x09, 0x08, 0x00, 0x80, 0x00, 0x06, 0x09, 0x1b, 0xee, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x19, 0x18, 0x1c, 0x14, 0x16, 0x15, 0x14, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
- },
- {
- { 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x01, 0x02, 0x04, 0x04, 0x03, 0x80, 0x40, 0x40, 0x20, 0x00, 0x01, 0x02, 0x8c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0d, 0x8d, 0x55, 0x50, 0x94, 0xf0, 0x10, 0x0a, 0x0e, 0x1d, 0x95, 0x24, 0x24, 0x27, 0x13, 0xe1, 0x01, 0x01, 0x01, 0x01, 0x02, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x19, 0x18, 0x1c, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
- }
- },
- { // rtogi frames
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x0f, 0x90, 0x10, 0x20, 0xf0, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x48, 0x47, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0xc7, 0xc4, 0x62, 0x23, 0x11, 0x3f, 0x00, 0x00, 0x00, 0x00 },
- { 0x80, 0x40, 0x20, 0x10, 0x88, 0xcc, 0x43, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0x80, 0x80, 0xc0, 0xe1, 0xfe, 0xb8, 0x88, 0x0c, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 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, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x1f, 0xa0, 0x20, 0x40, 0x80, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x48, 0x47, 0x88, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x28, 0x6b, 0x40, 0xa0, 0x99, 0x86, 0xff, 0x00, 0x00, 0x00, 0x00 },
- { 0x0f, 0x11, 0x22, 0x44, 0x48, 0x4c, 0x43, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0x80, 0x80, 0xc0, 0xe1, 0xfe, 0xb8, 0x88, 0x0c, 0x04, 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
- }
- }
-};
-
-static const char PROGMEM tri_layer_image[][3][24] = {
- { // base
- { 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E, 0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C, 0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }
- },
- { // raise
- { 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x88, 0x88, 0x55, 0x55, 0x23, 0x23, 0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47, 0x23, 0x23, 0x55, 0x55, 0x88, 0x88, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }
- },
- { // lower
- { 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2, 0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4, 0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }
- },
- { // adjust
- { 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0, 0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0, 0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6, 0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6, 0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }
- },
- { // blank
- { 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 },
- },
- { // better gamepad
- { 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0x70, 0xF0, 0xF0, 0xF0, 0xF0, 0x90, 0x90, 0xF0, 0xF0, 0xF0, 0xF0, 0x70, 0xE0, 0xE0, 0xC0, 0x00, 0x00, 0x00 },
- { 0x80, 0xF8, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xE6, 0xC3, 0xC3, 0xE6, 0xFF, 0xFF, 0xFE, 0xF7, 0xE3, 0xF6, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xF8, 0x80 },
- { 0x07, 0x0F, 0x0F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x0F, 0x0F, 0x07 }
- },
- { // mouse
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x20, 0x20, 0x20, 0xA0, 0x20, 0x20, 0x20, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
- }
-};
diff --git a/users/drashna/oled/oled_config.h b/users/drashna/oled/oled_config.h
deleted file mode 100644
index 427764c4a7..0000000000
--- a/users/drashna/oled/oled_config.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#ifndef OLED_UPDATE_INTERVAL
-# ifdef SPLIT_KEYBOARD
-# define OLED_UPDATE_INTERVAL 60
-# elif defined(OLED_DISPLAY_128X128)
-# define OLED_UPDATE_INTERVAL 30
-# else
-# define OLED_UPDATE_INTERVAL 15
-# endif
-#endif
-#define OLED_DISABLE_TIMEOUT
-#ifdef OLED_FONT_H
-# undef OLED_FONT_H
-#endif
-#define OLED_FONT_H "oled/drashna_font.h"
-#define OLED_FONT_END 255
-// # define OLED_FONT_5X5
-// # define OLED_FONT_AZTECH
-// # define OLED_FONT_BMPLAIN
-// # define OLED_FONT_CRACKERS
-#define OLED_FONT_DEAD_MEAL
-// # define OLED_FONT_EIN
-// # define OLED_FONT_HISKYF21
-// # define OLED_FONT_SQUASH
-// # define OLED_FONT_ZXPIX
-// # define OLED_FONT_SUPER_DIGG
-
-// # define OLED_LOGO_BEBOP
-// # define OLED_LOGO_CORNE
-// # define OLED_LOGO_GMK_BAD
-// # define OLED_LOGO_GOTHAM
-// # define OLED_LOGO_HUE_MANITEE
-// # define OLED_LOGO_LOOSE
-#define OLED_LOGO_SCIFI
-// # define OLED_LOGO_SETS3N
-// # define OLED_LOGO_SKEEB
diff --git a/users/drashna/oled/oled_stuff.c b/users/drashna/oled/oled_stuff.c
deleted file mode 100644
index d232e90fb2..0000000000
--- a/users/drashna/oled/oled_stuff.c
+++ /dev/null
@@ -1,830 +0,0 @@
-/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
- * Copyright 2021 John Ezra - wpm graph
- *
- * 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 "drashna.h"
-#include <ctype.h>
-#include <string.h>
-#include <stdio.h>
-#include "lib/lib8tion/lib8tion.h"
-#ifdef UNICODE_COMMON_ENABLE
-# include "process_unicode_common.h"
-# include "keyrecords/unicode.h"
-#endif
-#ifdef AUDIO_CLICKY
-# include "process_clicky.h"
-#endif
-
-#ifndef OLED_BRIGHTNESS_STEP
-# define OLED_BRIGHTNESS_STEP 32
-#endif
-
-bool is_oled_enabled = true, is_oled_locked = false, is_oled_force_off = false;
-
-uint32_t oled_timer = 0;
-char oled_keylog_str[OLED_KEYLOGGER_LENGTH + 1] = {0};
-
-deferred_token kittoken;
-
-extern uint8_t oled_buffer[OLED_MATRIX_SIZE];
-extern OLED_BLOCK_TYPE oled_dirty;
-
-void oled_pan_section(bool left, uint16_t y_start, uint16_t y_end, uint16_t x_start, uint16_t x_end) {
- uint16_t i = 0;
- for (uint16_t y = y_start; y < y_end; y++) {
- if (left) {
- for (uint16_t x = x_start; x < x_end - 1; x++) {
- i = y * OLED_DISPLAY_WIDTH + x;
- oled_buffer[i] = oled_buffer[i + 1];
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
- }
- } else {
- for (uint16_t x = x_end - 1; x > 0; x--) {
- i = y * OLED_DISPLAY_WIDTH + x;
- oled_buffer[i] = oled_buffer[i - 1];
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
- }
- }
- }
-}
-
-/**
- * @brief parses pressed keycodes and saves to buffer
- *
- * @param keycode Keycode pressed from switch matrix
- * @param record keyrecord_t data structure
- */
-void add_keylog(uint16_t keycode, keyrecord_t *record) {
- if (IS_QK_MOD_TAP(keycode)) {
- if (record->tap.count) {
- keycode = keycode_config(QK_MOD_TAP_GET_TAP_KEYCODE(keycode));
- } else {
- keycode = keycode_config(0xE0 + biton(QK_MOD_TAP_GET_MODS(keycode) & 0xF) + biton(QK_MOD_TAP_GET_MODS(keycode) & 0x10));
- }
- } else if (IS_QK_LAYER_TAP(keycode) && record->tap.count) {
- keycode = keycode_config(QK_LAYER_TAP_GET_TAP_KEYCODE(keycode));
- } else if (IS_QK_MODS(keycode)) {
- keycode = keycode_config(QK_MODS_GET_BASIC_KEYCODE(keycode));
- } else if (IS_QK_ONE_SHOT_MOD(keycode)) {
- keycode = keycode_config(0xE0 + biton(QK_ONE_SHOT_MOD_GET_MODS(keycode) & 0xF) + biton(QK_ONE_SHOT_MOD_GET_MODS(keycode) & 0x10));
- } else if (IS_QK_BASIC(keycode)) {
- keycode = keycode_config(keycode);
- }
-
- if ((keycode == KC_BSPC) && mod_config(get_mods() | get_oneshot_mods()) & MOD_MASK_CTRL) {
- memset(oled_keylog_str, ' ', OLED_KEYLOGGER_LENGTH);
- oled_keylog_str[OLED_KEYLOGGER_LENGTH] = 0x00;
- return;
- }
-
- if (keycode > ARRAY_SIZE(code_to_name)) {
- return;
- }
-
- memmove(oled_keylog_str, oled_keylog_str + 1, OLED_KEYLOGGER_LENGTH - 1);
- oled_keylog_str[(OLED_KEYLOGGER_LENGTH - 1)] = pgm_read_byte(&code_to_name[keycode]);
-}
-
-/**
- * @brief Keycode handler for oled display.
- *
- * This adds pressed keys to buffer, but also resets the oled timer
- *
- * @param keycode Keycode from matrix
- * @param record keyrecord data struture
- * @return true
- * @return false
- */
-bool process_record_user_oled(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- add_keylog(keycode, record);
- if (keycode == OLED_BRIGHTNESS_INC) {
- userspace_config.oled_brightness = qadd8(userspace_config.oled_brightness, OLED_BRIGHTNESS_STEP);
- oled_set_brightness(userspace_config.oled_brightness);
- eeconfig_update_user_config(&userspace_config.raw);
- } else if (keycode == OLED_BRIGHTNESS_DEC) {
- userspace_config.oled_brightness = qsub8(userspace_config.oled_brightness, OLED_BRIGHTNESS_STEP);
- oled_set_brightness(userspace_config.oled_brightness);
- eeconfig_update_user_config(&userspace_config.raw);
- } else if (keycode == OLED_LOCK) {
- is_oled_locked = !is_oled_locked;
- if (is_oled_locked) {
- oled_on();
- }
- }
- }
- return true;
-}
-
-/**
- * @brief Renders keylogger buffer to oled
- *
- */
-void render_keylogger_status(uint8_t col, uint8_t line) {
-#ifdef OLED_DISPLAY_VERBOSE
- oled_set_cursor(col, line);
-#endif
- oled_write_P(PSTR(OLED_RENDER_KEYLOGGER), false);
- oled_write(oled_keylog_str, false);
-#ifdef OLED_DISPLAY_VERBOSE
- oled_advance_page(true);
-#endif
-}
-
-/**
- * @brief Renders default layer state (aka layout) to oled
- *
- */
-void render_default_layer_state(uint8_t col, uint8_t line) {
-#ifdef OLED_DISPLAY_VERBOSE
- oled_set_cursor(col, line);
- oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false);
-
- static char layer_state_buffer[11] = {0};
- static layer_state_t old_state = 0;
-
- if (old_state != default_layer_state) {
- snprintf(layer_state_buffer, sizeof(layer_state_buffer), "%-10s", get_layer_name_string(default_layer_state, false));
- old_state = default_layer_state;
- }
- oled_write(layer_state_buffer, false);
- oled_advance_page(true);
-#else
- oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false);
- switch (get_highest_layer(default_layer_state)) {
- case _QWERTY:
- oled_write_P(PSTR(OLED_RENDER_LAYOUT_QWERTY), false);
- break;
- case _COLEMAK_DH:
- oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK_DH), false);
- break;
- case _COLEMAK:
- oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK), false);
- break;
- case _DVORAK:
- oled_write_P(PSTR(OLED_RENDER_LAYOUT_DVORAK), false);
- break;
- }
-#endif
-}
-
-/**
- * @brief Renders the active layers to the OLED
- *
- */
-void render_layer_state(uint8_t col, uint8_t line) {
-#ifdef OLED_DISPLAY_VERBOSE
- uint8_t layer_is[4] = {0, 4, 4, 4};
- if (layer_state_is(_ADJUST)) {
- layer_is[0] = 3;
- } else if (layer_state_is(_RAISE)) {
- layer_is[0] = 1;
- } else if (layer_state_is(_LOWER)) {
- layer_is[0] = 2;
- }
-
- if (layer_state_is(_MOUSE)) {
- layer_is[1] = 6;
- }
- if (layer_state_is(_GAMEPAD)) {
- layer_is[2] = 5;
- }
-
- oled_set_cursor(col, line);
- oled_write_raw_P(tri_layer_image[layer_is[0]][0], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 4, line);
- oled_write_raw_P(tri_layer_image[layer_is[1]][0], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 8, line);
- oled_write_raw_P(tri_layer_image[layer_is[2]][0], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 13, line);
- oled_write_P(PSTR("Diablo2"), layer_state_is(_DIABLOII));
- oled_advance_page(true);
-
- oled_set_cursor(col, line + 1);
- oled_write_raw_P(tri_layer_image[layer_is[0]][1], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 4, line + 1);
- oled_write_raw_P(tri_layer_image[layer_is[1]][1], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 8, line + 1);
- oled_write_raw_P(tri_layer_image[layer_is[2]][1], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 13, line + 1);
- oled_write_P(PSTR("Diablo3"), layer_state_is(_DIABLO));
- oled_advance_page(true);
-
- oled_set_cursor(col, line + 2);
- oled_write_raw_P(tri_layer_image[layer_is[0]][2], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 4, line + 2);
- oled_write_raw_P(tri_layer_image[layer_is[1]][2], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 8, line + 2);
- oled_write_raw_P(tri_layer_image[layer_is[2]][2], sizeof(tri_layer_image[0][0]));
- oled_set_cursor(col + 13, line + 2);
- oled_write_P(PSTR("Media"), layer_state_is(_MEDIA));
-#else
- oled_write_P(PSTR(OLED_RENDER_LAYER_NAME), false);
- oled_write_P(PSTR(OLED_RENDER_LAYER_LOWER), layer_state_is(_LOWER));
- oled_write_P(PSTR(OLED_RENDER_LAYER_RAISE), layer_state_is(_RAISE));
-#endif
- oled_advance_page(true);
-}
-
-/**
- * @brief Renders the current lock status to oled
- *
- * @param led_usb_state Current keyboard led state
- */
-void render_keylock_status(led_t led_usb_state, uint8_t col, uint8_t line) {
-#if defined(OLED_DISPLAY_VERBOSE)
- oled_set_cursor(col, line);
-#endif
-#ifdef CAPS_WORD_ENABLE
- led_usb_state.caps_lock |= is_caps_word_on();
-#endif
- oled_write_P(PSTR(OLED_RENDER_LOCK_NAME), false);
-#if !defined(OLED_DISPLAY_VERBOSE)
- oled_write_P(PSTR(" "), false);
-#endif
- oled_write_P(PSTR(OLED_RENDER_LOCK_NUML), led_usb_state.num_lock);
- oled_write_P(PSTR(" "), false);
- oled_write_P(PSTR(OLED_RENDER_LOCK_CAPS), led_usb_state.caps_lock);
-#if defined(OLED_DISPLAY_VERBOSE)
- oled_write_P(PSTR(" "), false);
- oled_write_P(PSTR(OLED_RENDER_LOCK_SCLK), led_usb_state.scroll_lock);
-#endif
-}
-
-/**
- * @brief Renders the matrix scan rate to the host system
- *
- */
-void render_matrix_scan_rate(uint8_t padding, uint8_t col, uint8_t line) {
-#ifdef DEBUG_MATRIX_SCAN_RATE
- oled_set_cursor(col, line);
- oled_write_P(PSTR("MS:"), false);
- if (padding) {
- for (uint8_t n = padding; n > 0; n--) {
- oled_write_P(PSTR(" "), false);
- }
- }
- oled_write(get_u16_str(get_matrix_scan_rate(), ' '), false);
-#endif
-}
-
-/**
- * @brief Renders the modifier state
- *
- * @param modifiers Modifiers to check against (real, weak, onesheot, etc;)
- */
-void render_mod_status(uint8_t modifiers, uint8_t col, uint8_t line) {
- static const char PROGMEM mod_status[5][3] = {{0xE8, 0xE9, 0}, {0xE4, 0xE5, 0}, {0xE6, 0xE7, 0}, {0xEA, 0xEB, 0}, {0xEC, 0xED, 0}};
-#if defined(OLED_DISPLAY_VERBOSE)
- oled_set_cursor(col, line);
-#endif
- bool is_caps = host_keyboard_led_state().caps_lock;
-#ifdef CAPS_WORD_ENABLE
- is_caps |= is_caps_word_on();
-#endif
- oled_write_P(PSTR(OLED_RENDER_MODS_NAME), false);
-#if defined(OLED_DISPLAY_VERBOSE)
- oled_write_P(mod_status[0], (modifiers & MOD_BIT(KC_LSFT)) || is_caps);
- oled_write_P(mod_status[!keymap_config.swap_lctl_lgui ? 3 : 4], (modifiers & MOD_BIT(KC_LGUI)));
- oled_write_P(mod_status[2], (modifiers & MOD_BIT(KC_LALT)));
- oled_write_P(mod_status[1], (modifiers & MOD_BIT(KC_LCTL)));
- oled_write_P(mod_status[1], (modifiers & MOD_BIT(KC_RCTL)));
- oled_write_P(mod_status[2], (modifiers & MOD_BIT(KC_RALT)));
- oled_write_P(mod_status[!keymap_config.swap_lctl_lgui ? 3 : 4], (modifiers & MOD_BIT(KC_RGUI)));
- oled_write_P(mod_status[0], (modifiers & MOD_BIT(KC_RSFT)) || is_caps);
-#else
- oled_write_P(mod_status[0], (modifiers & MOD_MASK_SHIFT) || is_caps);
- oled_write_P(mod_status[!keymap_config.swap_lctl_lgui ? 3 : 4], (modifiers & MOD_MASK_GUI));
- oled_write_P(PSTR(" "), false);
- oled_write_P(mod_status[2], (modifiers & MOD_MASK_ALT));
- oled_write_P(mod_status[1], (modifiers & MOD_MASK_CTRL));
-#endif
-}
-
-#ifdef SWAP_HANDS_ENABLE
-extern bool swap_hands;
-#endif
-
-void render_bootmagic_status(uint8_t col, uint8_t line) {
- /* Show Ctrl-Gui Swap options */
- static const char PROGMEM logo[][2][3] = {
- {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
- {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
- };
-
- bool is_bootmagic_on;
-#ifdef OLED_DISPLAY_VERBOSE
- oled_set_cursor(col, line);
- // oled_set_cursor(7, 3);
- is_bootmagic_on = !keymap_config.swap_lctl_lgui;
-#else
- is_bootmagic_on = keymap_config.swap_lctl_lgui;
-#endif
-
-#ifdef OLED_DISPLAY_VERBOSE
- if (keymap_config.swap_lctl_lgui)
-#else
- oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NAME), false);
- oled_write_P(PSTR(" "), false);
-#endif
- {
- oled_write_P(logo[1][0], is_bootmagic_on);
-#ifdef OLED_DISPLAY_VERBOSE
- } else {
-#endif
- oled_write_P(logo[0][0], !is_bootmagic_on);
- }
-#ifndef OLED_DISPLAY_VERBOSE
- oled_write_P(PSTR(" "), false);
- oled_write_P(logo[1][1], is_bootmagic_on);
- oled_write_P(logo[0][1], !is_bootmagic_on);
-#endif
- oled_write_P(PSTR(" "), false);
- oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro);
- oled_write_P(PSTR(" "), false);
-#if defined(AUTOCORRECT_ENABLE)
- oled_write_P(PSTR("CRCT"), autocorrect_is_enabled());
- oled_write_P(PSTR(" "), false);
-#else
- oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), keymap_config.no_gui);
-#endif
-#ifdef OLED_DISPLAY_VERBOSE
- oled_set_cursor(col, line + 1);
- if (keymap_config.swap_lctl_lgui) {
- oled_write_P(logo[1][1], is_bootmagic_on);
- } else {
- oled_write_P(logo[0][1], !is_bootmagic_on);
- }
-#endif
- oled_write_P(PSTR(" "), false);
- oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_ONESHOT), is_oneshot_enabled());
-#ifdef SWAP_HANDS_ENABLE
- oled_write_P(PSTR(" "), false);
- oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_SWAP), swap_hands);
- oled_write_P(PSTR(" "), false);
-#endif
-}
-
-void render_user_status(uint8_t col, uint8_t line) {
-#ifdef AUDIO_ENABLE
- bool is_audio_on = false, l_is_clicky_on = false;
-# ifdef SPLIT_KEYBOARD
-
- is_audio_on = user_state.audio_enable;
-# ifdef AUDIO_CLICKY
- l_is_clicky_on = user_state.audio_clicky_enable;
-# endif
-# else
- is_audio_on = is_audio_on();
-# ifdef AUDIO_CLICKY
- l_is_clicky_on = is_clicky_on();
-# endif
-# endif
-#endif
-#if defined(OLED_DISPLAY_VERBOSE)
- oled_set_cursor(col, line);
-#endif
- oled_write_P(PSTR(OLED_RENDER_USER_NAME), false);
-#if !defined(OLED_DISPLAY_VERBOSE)
- oled_write_P(PSTR(" "), false);
-#endif
-#if defined(RGB_MATRIX_ENABLE)
- oled_write_P(PSTR(OLED_RENDER_USER_ANIM), userspace_config.rgb_matrix_idle_anim);
-# if !defined(OLED_DISPLAY_VERBOSE)
- oled_write_P(PSTR(" "), false);
-# endif
-#elif defined(POINTING_DEVICE_ENABLE) && defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
- static const char PROGMEM mouse_lock[3] = {0xF2, 0xF3, 0};
- oled_write_P(mouse_lock, get_auto_mouse_toggle());
-#endif
-#ifdef AUDIO_ENABLE
- static const char PROGMEM audio_status[2][3] = {{0xE0, 0xE1, 0}, {0xE2, 0xE3, 0}};
- oled_write_P(audio_status[is_audio_on], false);
-
-# ifdef AUDIO_CLICKY
- static const char PROGMEM audio_clicky_status[2][3] = {{0xF4, 0xF5, 0}, {0xF6, 0xF7, 0}};
- oled_write_P(audio_clicky_status[l_is_clicky_on && is_audio_on], false);
-# if !defined(OLED_DISPLAY_VERBOSE)
- oled_write_P(PSTR(" "), false);
-# endif
-# endif
-#endif
-
- static const char PROGMEM rgb_layer_status[2][3] = {{0xEE, 0xEF, 0}, {0xF0, 0xF1, 0}};
- oled_write_P(rgb_layer_status[userspace_config.rgb_layer_change], false);
- static const char PROGMEM cat_mode[2][3] = {{0xF8, 0xF9, 0}, {0xF6, 0xF7, 0}};
- oled_write_P(cat_mode[0], get_keyboard_lock());
-#if defined(UNICODE_COMMON_ENABLE)
- static const char PROGMEM uc_mod_status[5][3] = {{0xEC, 0xED, 0}, {0x20, 0x20, 0}, {0x20, 0x20, 0}, {0x20, 0x20, 0}, {0xEA, 0xEB, 0}};
- oled_write_P(uc_mod_status[get_unicode_input_mode()], false);
-#endif
- if (userspace_config.nuke_switch) {
-#if !defined(OLED_DISPLAY_VERBOSE)
- oled_write_P(PSTR(" "), false);
-#endif
- static const char PROGMEM nukem_good[2] = {0xFA, 0};
- oled_write_P(nukem_good, false);
-#if !defined(OLED_DISPLAY_VERBOSE)
- oled_advance_page(true);
-#endif
- }
-#if defined(OLED_DISPLAY_VERBOSE)
- oled_advance_page(true);
-#endif
-}
-
-void render_rgb_hsv(uint8_t col, uint8_t line) {
- oled_set_cursor(col, line);
- oled_write_P(PSTR("HSV: "), false);
-#ifdef RGB_MATRIX_ENABLE
- oled_write(get_u8_str(rgb_matrix_get_hue(), ' '), false);
- oled_write_P(PSTR(", "), false);
- oled_write(get_u8_str(rgb_matrix_get_sat(), ' '), false);
- oled_write_P(PSTR(", "), false);
- oled_write(get_u8_str(rgb_matrix_get_val(), ' '), false);
-#elif RGBLIGHT_ENABLE
- if (is_rgblight_startup_running()) {
- oled_write_P(PSTR("Start Animation"), false);
- } else {
- oled_write(get_u8_str(rgblight_get_hue(), ' '), false);
- oled_write_P(PSTR(", "), false);
- oled_write(get_u8_str(rgblight_get_sat(), ' '), false);
- oled_write_P(PSTR(", "), false);
- oled_write(get_u8_str(rgblight_get_val(), ' '), false);
- }
-#endif
-}
-
-void render_rgb_mode(uint8_t col, uint8_t line) {
- oled_set_cursor(col, line);
- __attribute__((unused)) static uint8_t mode;
- bool need_update = false;
- static char buf[21] = {0};
-
-#ifdef RGB_MATRIX_ENABLE
- if (mode != rgb_matrix_get_mode()) {
- snprintf(buf, sizeof(buf), "%-20s", rgb_matrix_name(rgb_matrix_get_mode()));
- mode = rgb_matrix_get_mode();
- need_update = true;
- }
-#elif RGBLIGHT_ENABLE
- if (mode != rgblight_get_mode()) {
- snprintf(buf, sizeof(buf), "%-20s", rgblight_name(rgblight_get_mode()));
- mode = rgblight_get_mode();
- need_update = true;
- }
-#endif
- if (need_update) {
- for (uint8_t i = 1; i < sizeof(buf); ++i) {
- if (buf[i] == 0)
- break;
- else if (buf[i] == '_')
- buf[i] = ' ';
- else if (buf[i - 1] == ' ')
- buf[i] = toupper(buf[i]);
- else if (buf[i - 1] != ' ')
- buf[i] = tolower(buf[i]);
- }
- }
-
- oled_write(buf, false);
-}
-
-void render_wpm(uint8_t padding, uint8_t col, uint8_t line) {
-#ifdef WPM_ENABLE
- oled_set_cursor(col, line);
- oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false);
- if (padding) {
- for (uint8_t n = padding; n > 0; n--) {
- oled_write_P(PSTR(" "), false);
- }
- }
- oled_write(get_u8_str(get_current_wpm(), ' '), false);
-#endif
-}
-
-//============= USER CONFIG PARAMS ===============
-// wpm graph originally designed by john-ezra
-
-// for 128x128:
-// max_lines_graph = 54;
-// vertical_offset = 64;
-// for 128x64:
-// max_lines_graph = 64;
-// vertical_offset = 0;
-
-void render_wpm_graph(uint8_t max_lines_graph, uint8_t vertical_offset) {
-#ifdef WPM_ENABLE
- static uint16_t timer = 0;
- static uint8_t x = OLED_DISPLAY_HEIGHT - 1;
- uint8_t currwpm = get_current_wpm();
- float max_wpm = OLED_WPM_GRAPH_MAX_WPM;
-
- if (timer_elapsed(timer) > OLED_WPM_GRAPH_REFRESH_INTERVAL) { // check if it's been long enough before refreshing graph
- x = (max_lines_graph - 1) - ((currwpm / max_wpm) * (max_lines_graph - 1)); // main calculation to plot graph line
- for (uint8_t i = 0; i <= OLED_WPM_GRAPH_GRAPH_LINE_THICKNESS - 1; i++) { // first draw actual value line
- oled_write_pixel(3, x + i + vertical_offset, true);
- }
-# ifdef OLED_WPM_GRAPH_VERTICAL_LINE
- static uint8_t vert_count = 0;
- if (vert_count == OLED_WPM_GRAPH_VERTCAL_LINE_INTERVAL) {
- vert_count = 0;
- while (x <= (max_lines_graph - 1)) {
- oled_write_pixel(3, x + vertical_offset, true);
- x++;
- }
- } else {
- for (uint8_t i = (max_lines_graph - 1); i > x; i--) {
- if (i % OLED_WPM_GRAPH_AREA_FILL_INTERVAL == 0) {
- oled_write_pixel(3, i + vertical_offset, true);
- }
- }
- vert_count++;
- }
-# else
- for (int i = (max_lines_graph - 1); i > x; i--) {
- if (i % OLED_WPM_GRAPH_AREA_FILL_INTERVAL == 0) {
- oled_write_pixel(3, i + vertical_offset, true);
- }
- }
-# endif
-# include <math.h>
- uint8_t y_start = ceil(vertical_offset / 8);
- uint8_t y_length = y_start + ceil(max_lines_graph / 8);
- oled_pan_section(false, y_start, y_length, 3, 125); // then move the entire graph one pixel to the right
- timer = timer_read(); // refresh the timer for the next iteration
- }
-#endif
-}
-
-#if defined(POINTING_DEVICE_ENABLE)
-void render_pointing_dpi_status(uint16_t cpi, uint8_t padding, uint8_t col, uint8_t line) {
- oled_set_cursor(col, line);
- oled_write_P(PSTR("CPI:"), false);
- if (padding) {
- for (uint8_t n = padding - 1; n > 0; n--) {
- oled_write_P(PSTR(" "), false);
- }
- }
-
- oled_write(get_u16_str(cpi, ' '), false);
-}
-#endif
-
-// WPM-responsive animation stuff here
-#define OLED_SLEEP_FRAMES 2
-#define OLED_SLEEP_SPEED 10 // below this wpm value your animation will idle
-
-#define OLED_WAKE_FRAMES 2 // uncomment if >1
-#define OLED_WAKE_SPEED OLED_SLEEP_SPEED // below this wpm value your animation will idle
-
-#define OLED_KAKI_FRAMES 3
-#define OLED_KAKI_SPEED 40 // above this wpm value typing animation to triggere
-
-#define OLED_RTOGI_FRAMES 2
-// #define OLED_LTOGI_FRAMES 2
-
-// #define ANIM_FRAME_DURATION 500 // how long each frame lasts in ms
-// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing
-#if (OLED_SLEEP_FRAMES > OLED_ANIM_MAX_FRAMES) || (OLED_WAKE_FRAMES > OLED_ANIM_MAX_FRAMES) || (OLED_KAKI_FRAMES > OLED_ANIM_MAX_FRAMES) || (OLED_RTOGI_FRAMES > OLED_ANIM_MAX_FRAMES)
-# error frame size too large
-#endif
-
-static uint8_t animation_frame = 0;
-static uint8_t animation_type = 0;
-
-void render_kitty(uint8_t col, uint8_t line) {
- for (uint8_t i = 0; i < 4; i++) {
- oled_set_cursor(col, line + i);
- oled_write_raw_P(animation[animation_type][animation_frame][i], OLED_ANIM_SIZE);
- }
-}
-
-void render_unicode_mode(uint8_t col, uint8_t line) {
-#if defined(CUSTOM_UNICODE_ENABLE) && defined(UNICODE_COMMON_ENABLE)
- oled_set_cursor(col, line);
- oled_write_P(PSTR("Unicode:"), false);
- oled_write_P(unicode_mode_str[unicode_typing_mode], false);
-#endif
-}
-
-uint32_t kitty_animation_phases(uint32_t triger_time, void *cb_arg) {
- static uint32_t anim_frame_duration = 500;
-#if defined(POINTING_DEVICE_ENABLE) && defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
- if (get_auto_mouse_toggle()) {
- animation_frame = (animation_frame + 1) % OLED_RTOGI_FRAMES;
- animation_type = 3;
- anim_frame_duration = 300;
- } else
-#endif
- {
-#ifdef WPM_ENABLE
- if (get_current_wpm() <= OLED_SLEEP_SPEED) {
-#endif
- animation_frame = (animation_frame + 1) % OLED_SLEEP_FRAMES;
- animation_type = 0;
- anim_frame_duration = 500;
-#ifdef WPM_ENABLE
- } else if (get_current_wpm() > OLED_WAKE_SPEED) {
- animation_frame = (animation_frame + 1) % OLED_WAKE_FRAMES;
- animation_type = 1;
- anim_frame_duration = 800;
- } else if (get_current_wpm() >= OLED_KAKI_SPEED) {
- animation_frame = (animation_frame + 1) % OLED_KAKI_FRAMES;
- animation_type = 2;
- anim_frame_duration = 500;
- }
-#endif
- }
- return anim_frame_duration;
-}
-
-void render_mouse_mode(uint8_t col, uint8_t line) {
-#if (defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)) && defined(POINTING_DEVICE_ENABLE)
- // credit and thanks to jaspertandy on discord for these images
- uint8_t image_index = 0;
-# ifdef OLED_DISPLAY_TEST
- image_index = animation_frame;
-# else
- if (charybdis_get_pointer_sniping_enabled()) {
- image_index = 1;
- } else if (charybdis_get_pointer_dragscroll_enabled()) {
- image_index = 2;
- }
-# endif
-
- oled_set_cursor(col, line);
- oled_write_raw_P(mouse_logo[image_index][0], 16);
- oled_set_cursor(col, line + 1);
- oled_write_raw_P(mouse_logo[image_index][1], 16);
-#endif
-}
-
-void render_status_right(void) {
-#if defined(OLED_DISPLAY_VERBOSE)
- render_default_layer_state(1, 1);
-#else
- render_default_layer_state(0, 0);
-#endif
-
- /* Show Keyboard Layout */
- render_layer_state(1, 2);
- render_mod_status(get_mods() | get_oneshot_mods(), 1, 5);
-#if !defined(OLED_DISPLAY_VERBOSE) && defined(WPM_ENABLE) && !defined(STM32F303xC)
- render_wpm(2, 7, 1);
-#endif
- render_keylock_status(host_keyboard_led_state(), 1, 6);
-}
-
-void render_status_left(void) {
-#if defined(OLED_DISPLAY_VERBOSE)
- render_kitty(0, 1);
-
-# if defined(WPM_ENABLE)
- render_wpm(1, 7, 1);
-# elif defined(DEBUG_MATRIX_SCAN_RATE)
- render_matrix_scan_rate(1, 7, 1);
-# endif
-# if (defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)) && defined(POINTING_DEVICE_ENABLE)
- render_pointing_dpi_status(charybdis_get_pointer_sniping_enabled() ? charybdis_get_pointer_sniping_dpi() : charybdis_get_pointer_default_dpi(), 1, 7, 2);
- render_mouse_mode(17, 1);
-# elif defined(WPM_ENABLE) && defined(DEBUG_MATRIX_SCAN_RATE)
- render_matrix_scan_rate(1, 7, 2);
-# endif
- /* Show Keyboard Layout */
- render_bootmagic_status(7, 3);
- render_user_status(1, 5);
-
- render_keylogger_status(1, 6);
-#else
- render_default_layer_state(0, 0);
- /* Show Keyboard Layout */
- render_bootmagic_status(7, 3);
- render_user_status(1, 5);
-
- render_keylogger_status(1, 6);
-#endif
-}
-
-__attribute__((weak)) void oled_render_large_display(bool side) {
- if (side) {
- render_rgb_hsv(1, 7);
- render_rgb_mode(1, 8);
-
- render_wpm_graph(48, 72);
- } else {
- oled_advance_page(true);
- oled_advance_page(true);
-
- oled_set_cursor(0, 9);
- oled_write_raw_P(qmk_logo, 384); // is 3 rows of 128 pixels, so 384 bytes.
-
- render_unicode_mode(1, 14);
- }
-}
-
-__attribute__((weak)) void render_oled_title(bool side) {
- oled_write_P(side ? PSTR(" Left ") : PSTR(" Right "), true);
- // oled_write_P(PSTR( "1234567890123" "1234567890123"), true);
-}
-
-__attribute__((weak)) oled_rotation_t oled_init_keymap(oled_rotation_t rotation) {
- return rotation;
-}
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- if (is_keyboard_master()) {
- memset(oled_keylog_str, ' ', OLED_KEYLOGGER_LENGTH);
- }
-
- kittoken = defer_exec(3000, kitty_animation_phases, NULL);
-
- oled_clear();
- oled_render();
- return oled_init_keymap(rotation);
-}
-
-__attribute__((weak)) bool oled_task_keymap(void) {
- return true;
-}
-
-bool oled_task_user(void) {
-#ifndef OLED_DISPLAY_TEST
- if (!is_oled_enabled) {
- oled_off();
- return false;
- } else
-#endif
- {
- oled_on();
- }
-
- if (!oled_task_keymap()) {
- return false;
- }
-
-#if defined(OLED_DISPLAY_VERBOSE)
- oled_write_raw_P(header_image, sizeof(header_image));
- oled_set_cursor(4, 0);
- render_oled_title(is_keyboard_left());
-#endif
-
-#ifndef OLED_DISPLAY_TEST
- if (is_keyboard_left()) {
-#endif
- render_status_left();
-#if defined(OLED_DISPLAY_128X128)
- oled_render_large_display(true);
-#endif
-#ifndef OLED_DISPLAY_TEST
- } else {
- render_status_right();
-# if defined(OLED_DISPLAY_128X128)
- oled_render_large_display(false);
-# endif
- }
-#endif
-
-#if defined(OLED_DISPLAY_VERBOSE)
- uint8_t num_of_rows;
-# if defined(OLED_DISPLAY_128X128)
- num_of_rows = 15;
-# else
- num_of_rows = 7;
-# endif
- for (uint8_t i = 1; i < num_of_rows; i++) {
- oled_set_cursor(0, i);
- oled_write_raw_P(display_border, sizeof(display_border));
- oled_set_cursor(21, i);
- oled_write_raw_P(display_border, sizeof(display_border));
- }
-
- oled_set_cursor(0, num_of_rows);
- oled_write_raw_P(footer_image, sizeof(footer_image));
-#endif
-
- return false;
-}
-
-void housekeeping_task_oled(void) {
- is_oled_enabled = false;
- if ((is_oled_locked || (last_input_activity_elapsed() < 60000)) && !is_oled_force_off) {
- is_oled_enabled = true;
- }
- if (oled_get_brightness() != userspace_config.oled_brightness) {
- oled_set_brightness(userspace_config.oled_brightness);
- }
-}
diff --git a/users/drashna/oled/oled_stuff.h b/users/drashna/oled/oled_stuff.h
deleted file mode 100644
index 414720ff2a..0000000000
--- a/users/drashna/oled/oled_stuff.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
- *
- * 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
-
-#include "quantum.h"
-#include "oled_driver.h"
-#include "oled_assets.h"
-#ifdef DEFFERED_EXEC_ENABLE
-extern deferred_token kittoken;
-#endif
-
-void oled_driver_render_logo(void);
-bool process_record_user_oled(uint16_t keycode, keyrecord_t *record);
-oled_rotation_t oled_init_keymap(oled_rotation_t rotation);
-void oled_timer_reset(void);
-void render_keylogger_status(uint8_t col, uint8_t line);
-void render_default_layer_state(uint8_t col, uint8_t line);
-void render_layer_state(uint8_t col, uint8_t line);
-void render_keylock_status(led_t led_usb_state, uint8_t col, uint8_t line);
-void render_matrix_scan_rate(uint8_t padding, uint8_t col, uint8_t line);
-void render_mod_status(uint8_t modifiers, uint8_t col, uint8_t line);
-void render_bootmagic_status(uint8_t col, uint8_t line);
-void render_user_status(uint8_t col, uint8_t line);
-void oled_driver_render_logo(void);
-void render_wpm(uint8_t padding, uint8_t col, uint8_t line);
-void render_pointing_dpi_status(uint16_t cpi, uint8_t padding, uint8_t col, uint8_t line);
-void oled_driver_render_logo_left(void);
-void oled_driver_render_logo_right(void);
-void oled_render_large_display(bool side);
-void render_wpm_graph(uint8_t max_lines_graph, uint8_t vertical_offset);
-void render_kitty(uint8_t col, uint8_t line);
-void render_unicode_mode(uint8_t col, uint8_t line);
-void render_rgb_hsv(uint8_t col, uint8_t line);
-void render_mouse_mode(uint8_t col, uint8_t line);
-void housekeeping_task_oled(void);
-void render_oled_title(bool side);
-
-void oled_pan_section(bool left, uint16_t y_start, uint16_t y_end, uint16_t x_start, uint16_t x_end);
-
-#if defined(OLED_DISPLAY_128X128) || defined(OLED_DISPLAY_128X64)
-# define OLED_DISPLAY_VERBOSE
-
-# define OLED_RENDER_KEYLOGGER "Keylogger: "
-# ifndef OLED_KEYLOGGER_LENGTH
-# define OLED_KEYLOGGER_LENGTH 9
-# endif
-# define OLED_RENDER_LAYOUT_NAME "Layout: "
-# define OLED_RENDER_LAYOUT_QWERTY "Qwerty"
-# define OLED_RENDER_LAYOUT_COLEMAK_DH "Colemak DH"
-# define OLED_RENDER_LAYOUT_COLEMAK "Colemak"
-# define OLED_RENDER_LAYOUT_DVORAK "Dvorak"
-# define OLED_RENDER_LAYOUT_WORKMAN "Workman"
-# define OLED_RENDER_LAYOUT_NORMAN "Norman"
-# define OLED_RENDER_LAYOUT_MALTRON "Matron"
-# define OLED_RENDER_LAYOUT_EUCALYN "Eucalyn"
-# define OLED_RENDER_LAYOUT_CARPLAX "Carplax"
-
-# define OLED_RENDER_LAYER_NAME "Layer:"
-# define OLED_RENDER_LAYER_LOWER "Lower"
-# define OLED_RENDER_LAYER_RAISE "Raise"
-# define OLED_RENDER_LAYER_ADJUST "Adjust"
-# define OLED_RENDER_LAYER_MODS "Mods"
-
-# define OLED_RENDER_LOCK_NAME "Lock: "
-# define OLED_RENDER_LOCK_NUML "NUM"
-# define OLED_RENDER_LOCK_CAPS "CAPS"
-# define OLED_RENDER_LOCK_SCLK "SCLK"
-
-# define OLED_RENDER_MODS_NAME "Mods"
-# define OLED_RENDER_MODS_SFT "Sft"
-# define OLED_RENDER_MODS_CTL "Ctl"
-# define OLED_RENDER_MODS_ALT "Alt"
-# define OLED_RENDER_MODS_GUI "GUI"
-
-# define OLED_RENDER_BOOTMAGIC_NAME "Boot "
-# define OLED_RENDER_BOOTMAGIC_NKRO "NKRO"
-# define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
-# define OLED_RENDER_BOOTMAGIC_GRV "GRV"
-# define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT"
-# define OLED_RENDER_BOOTMAGIC_SWAP "SWAP"
-# define OLED_RENDER_BOOTMAGIC_CAPS "CAPS"
-
-# define OLED_RENDER_USER_NAME "USER:"
-# define OLED_RENDER_USER_ANIM "Anim"
-# define OLED_RENDER_USER_LAYR "Layr"
-# define OLED_RENDER_USER_NUKE "Nuke"
-
-# define OLED_RENDER_WPM_COUNTER "WPM: "
-#else
-# define OLED_RENDER_KEYLOGGER "KLogr"
-# ifndef OLED_KEYLOGGER_LENGTH
-# define OLED_KEYLOGGER_LENGTH 5
-# endif
-
-# define OLED_RENDER_LAYOUT_NAME "Lyout"
-# define OLED_RENDER_LAYOUT_QWERTY " QRTY"
-# define OLED_RENDER_LAYOUT_COLEMAK_DH " cmDH"
-# define OLED_RENDER_LAYOUT_COLEMAK " COLE"
-# define OLED_RENDER_LAYOUT_DVORAK " DVRK"
-# define OLED_RENDER_LAYOUT_WORKMAN " WKMN"
-# define OLED_RENDER_LAYOUT_NORMAN " NORM"
-# define OLED_RENDER_LAYOUT_MALTRON " MLTN"
-# define OLED_RENDER_LAYOUT_EUCALYN " ECLN"
-# define OLED_RENDER_LAYOUT_CARPLAX " CRPX"
-
-# define OLED_RENDER_LAYER_NAME "LAYER"
-# define OLED_RENDER_LAYER_LOWER "Lower"
-# define OLED_RENDER_LAYER_RAISE "Raise"
-# define OLED_RENDER_LAYER_ADJUST "Adjst"
-# define OLED_RENDER_LAYER_MODS " Mods"
-
-# define OLED_RENDER_LOCK_NAME "Lock:"
-# define OLED_RENDER_LOCK_NUML "NumL"
-# define OLED_RENDER_LOCK_CAPS "CapL"
-# define OLED_RENDER_LOCK_SCLK "ScrL"
-
-# define OLED_RENDER_MODS_NAME "Mods: "
-# define OLED_RENDER_MODS_SFT "Shft"
-# define OLED_RENDER_MODS_CTL "Ctrl"
-# define OLED_RENDER_MODS_ALT "Alt\n"
-# define OLED_RENDER_MODS_GUI "GUI\n"
-
-# define OLED_RENDER_BOOTMAGIC_NAME "BTMGK"
-# define OLED_RENDER_BOOTMAGIC_NKRO "NKRO"
-# define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
-# define OLED_RENDER_BOOTMAGIC_GRV "GRV"
-# define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT"
-# define OLED_RENDER_BOOTMAGIC_SWAP "SWAP"
-# define OLED_RENDER_BOOTMAGIC_CAPS "CAPS"
-
-# define OLED_RENDER_USER_NAME "USER:"
-# define OLED_RENDER_USER_ANIM "Anim"
-# define OLED_RENDER_USER_LAYR "Layr"
-# define OLED_RENDER_USER_NUKE "Nuke"
-
-# define OLED_RENDER_WPM_COUNTER "WPM: "
-#endif
-
-extern char oled_keylog_str[OLED_KEYLOGGER_LENGTH + 1];
-
-#ifndef OLED_WPM_GRAPH_MAX_WPM
-# define OLED_WPM_GRAPH_MAX_WPM 120
-#endif
-#ifndef OLED_WPM_GRAPH_REFRESH_INTERVAL
-# define OLED_WPM_GRAPH_REFRESH_INTERVAL 300
-#endif
-#ifndef OLED_WPM_GRAPH_AREA_FILL_INTERVAL
-# define OLED_WPM_GRAPH_AREA_FILL_INTERVAL 3
-#endif
-#ifndef OLED_WPM_GRAPH_VERTCAL_LINE_INTERVAL
-# define OLED_WPM_GRAPH_VERTCAL_LINE_INTERVAL 3
-#endif
-#ifndef OLED_WPM_GRAPH_GRAPH_LINE_THICKNESS
-# define OLED_WPM_GRAPH_GRAPH_LINE_THICKNESS 2
-#endif
diff --git a/users/drashna/oled/readme.md b/users/drashna/oled/readme.md
deleted file mode 100644
index dbb8187d49..0000000000
--- a/users/drashna/oled/readme.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# OLED Display
-
-To disable the pre genrated oled display, add `CUSTOM_OLED_DRIVER = no` to your `rules.mk`.
-
-<!-- to do: add all the stuff -->
-## OLED Font
-
-My font file has multiple fonts and multiple logs integrated into the one file. And it uses the full 255 possible characters.
-
-In addition to the default font and logos:
-
-```c
-# define OLED_FONT_5X5
-# define OLED_FONT_AZTECH
-# define OLED_FONT_BMPLAIN
-# define OLED_FONT_CRACKERS
-# define OLED_FONT_EIN
-# define OLED_FONT_HISKYF21
-# define OLED_FONT_SQUASH
-# define OLED_FONT_SUPER_DIGG
-# define OLED_FONT_ZXPIX
-```
-
-```c
-# define OLED_LOGO_CORNE
-# define OLED_LOGO_GMK_BAD
-# define OLED_LOGO_GOTHAM
-# define OLED_LOGO_HUE_MANITEE
-# define OLED_LOGO_LOOSE
-# define OLED_LOGO_SETS3N
-# define OLED_LOGO_SKEEB
-```
-
-Additionally, the font file allows for external oled font files, instead. This allows for additional files that cannot be hosted in the QMK Repo.
-
-## Display
-
-A picture is worth a thousand words. So here are two:
-
-![Right](https://i.imgur.com/4XFOVKBl.jpg)
-
-![Left](https://i.imgur.com/W5RX4pAl.jpg)
diff --git a/users/drashna/oled/rules.mk b/users/drashna/oled/rules.mk
deleted file mode 100644
index 95be67a9ef..0000000000
--- a/users/drashna/oled/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-
-CUSTOM_OLED_DRIVER ?= yes
-ifeq ($(strip $(OLED_ENABLE)), yes)
- ifeq ($(strip $(CUSTOM_OLED_DRIVER)), yes)
- OPT_DEFS += -DCUSTOM_OLED_DRIVER
- SRC += $(USER_PATH)/oled/oled_stuff.c
- endif
- ifeq ($(strip $(OLED_DISPLAY_TEST)), yes)
- OPT_DEFS += -DOLED_DISPLAY_TEST
- endif
-endif
-DEFERRED_EXEC_ENABLE = yes
diff --git a/users/drashna/pointing/pointing.c b/users/drashna/pointing/pointing.c
deleted file mode 100644
index 82cc5a3aa6..0000000000
--- a/users/drashna/pointing/pointing.c
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "pointing.h"
-#include "math.h"
-
-static uint16_t mouse_debounce_timer = 0;
-bool enable_acceleration = false;
-
-#ifdef TAPPING_TERM_PER_KEY
-# define TAP_CHECK get_tapping_term(KC_BTN1, NULL)
-#else
-# ifndef TAPPING_TERM
-# define TAPPING_TERM 200
-# endif
-# define TAP_CHECK TAPPING_TERM
-#endif
-
-__attribute__((weak)) void pointing_device_init_keymap(void) {}
-
-void pointing_device_init_user(void) {
- set_auto_mouse_layer(_MOUSE);
- set_auto_mouse_enable(true);
-
- pointing_device_init_keymap();
-}
-
-__attribute__((weak)) report_mouse_t pointing_device_task_keymap(report_mouse_t mouse_report) {
- return mouse_report;
-}
-
-report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
- mouse_xy_report_t x = mouse_report.x, y = mouse_report.y;
- mouse_report.x = 0;
- mouse_report.y = 0;
-
- if (x != 0 && y != 0 && (timer_elapsed(mouse_debounce_timer) > TAP_CHECK)) {
- if (enable_acceleration) {
- float magnitude = sqrtf( mouse_report.x * mouse_report.x + mouse_report.y * mouse_report.y );
- float adjusted_magnitude = powf(magnitude, 1.2f);
- x = (mouse_xy_report_t)(x * adjusted_magnitude);
- y = (mouse_xy_report_t)(y * adjusted_magnitude);
-// x = (mouse_xy_report_t)(x > 0 ? x * x / 16 + x : -x * x / 16 + x);
-// y = (mouse_xy_report_t)(y > 0 ? y * y / 16 + y : -y * y / 16 + y);
- }
- mouse_report.x = x;
- mouse_report.y = y;
- }
-
- return pointing_device_task_keymap(mouse_report);
-}
-
-bool process_record_pointing(uint16_t keycode, keyrecord_t* record) {
- switch (keycode) {
- case KC_ACCEL:
- enable_acceleration = record->event.pressed;
- break;
-#if defined(POINTING_DEVICE_MOUSE_JIGGLER_ENABLE)
- case PD_JIGGLER:
- if (record->event.pressed) {
- pointing_device_mouse_jiggler_toggle();
- }
-#endif
- default:
- mouse_debounce_timer = timer_read();
- break;
- }
- return true;
-}
-
-layer_state_t layer_state_set_pointing(layer_state_t state) {
- if (layer_state_cmp(state, _GAMEPAD) || layer_state_cmp(state, _DIABLO) || layer_state_cmp(state, _DIABLOII)) {
- state |= ((layer_state_t)1 << _MOUSE);
- set_auto_mouse_enable(false); // auto mouse can be disabled any time during run time
- } else {
- set_auto_mouse_enable(true);
- }
- return state;
-}
-
-#if defined(POINTING_DEVICE_MOUSE_JIGGLER_ENABLE)
-static uint16_t mouse_jiggler_timer;
-
-bool has_mouse_report_changed(report_mouse_t* new_report, report_mouse_t* old_report) {
- // Only report every 5 seconds.
- if (userspace_config.mouse_jiggler && timer_elapsed(mouse_jiggler_timer) > 5000) {
- mouse_jiggler_timer = timer_read();
- return true;
- }
- return memcmp(new_report, old_report, sizeof(report_mouse_t));
-}
-
-void pointing_device_mouse_jiggler_toggle(void) {
- mouse_jiggler_timer = timer_read();
- userspace_config.mouse_jiggler = !userspace_config.mouse_jiggler;
-}
-
-#endif
-
-#if defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
-__attribute__((weak)) bool is_mouse_record_keymap(uint16_t keycode, keyrecord_t *record) { return false; }
-
-bool is_mouse_record_user(uint16_t keycode, keyrecord_t* record) {
- if (is_mouse_record_keymap(keycode, record)) {
- return true;
- }
- switch (keycode) {
-# if defined(KEYBOARD_ploopy)
- case DPI_CONFIG:
-# elif (defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)) && !defined(NO_CHARYBDIS_KEYCODES) || (defined(KEYBOARD_bastardkb_dilemma) && !defined(NO_DILEMMA_KEYCODES))
- case QK_KB ... QK_KB_MAX:
-# endif
- case KC_ACCEL:
- return true;
- }
- return false;
-}
-#endif
diff --git a/users/drashna/pointing/pointing.h b/users/drashna/pointing/pointing.h
deleted file mode 100644
index c97ce5b2db..0000000000
--- a/users/drashna/pointing/pointing.h
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-
-void pointing_device_init_keymap(void);
-report_mouse_t pointing_device_task_keymap(report_mouse_t mouse_report);
-void matrix_scan_pointing(void);
-bool process_record_pointing(uint16_t keycode, keyrecord_t* record);
-layer_state_t layer_state_set_pointing(layer_state_t state);
-void pointing_device_mouse_jiggler_toggle(void);
diff --git a/users/drashna/pointing/pointing_config.h b/users/drashna/pointing/pointing_config.h
deleted file mode 100644
index 50c29ede85..0000000000
--- a/users/drashna/pointing/pointing_config.h
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define POINTING_DEVICE_MODES_ENABLE
diff --git a/users/drashna/pointing/readme.md b/users/drashna/pointing/readme.md
deleted file mode 100644
index 7770755050..0000000000
--- a/users/drashna/pointing/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# User Pointing Device customization
-
-To disable the customized pointing device code and implement it at the keymap, add `CUSTOM_POINTING_DEVICE = no` to your `rules.mk`.
-
-## Automatic Mouse Layer
-
-Movement on the optical sensor triggers a layer that has all of the mouse keys on that layer. After a set time, the layer will automatically turn itself off after 650ms.
-
-Also, using mousekeys will extend the amount of time that the layer will stay active.
-
-Additionally, layer keys for the mouse layer will lock the layer on.
-
-## Gaming
-
-When the gamepad or diablo layers are enabled, the mouse layer is locked on, as well.
-
-## Keycodes
-
-The only custom keycode for Pointing devices here is `KC_ACCEL`. This allow the mouse report to have an acceleration curve (exponential).
diff --git a/users/drashna/post_config.h b/users/drashna/post_config.h
deleted file mode 100644
index 5a2dfb6637..0000000000
--- a/users/drashna/post_config.h
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-// because layouts seem to not be respecting config.h order atm
-#ifdef RGBLIGHT_ENABLE
-# undef RGBLIGHT_EFFECT_BREATHING
-# undef RGBLIGHT_EFFECT_RAINBOW_MOOD
-# undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
-# undef RGBLIGHT_EFFECT_SNAKE
-# undef RGBLIGHT_EFFECT_KNIGHT
-# undef RGBLIGHT_EFFECT_CHRISTMAS
-# undef RGBLIGHT_EFFECT_STATIC_GRADIENT
-# undef RGBLIGHT_EFFECT_RGB_TEST
-# undef RGBLIGHT_EFFECT_ALTERNATING
-# undef RGBLIGHT_EFFECT_TWINKLE
-# if defined(__AVR__) && (!defined(__AVR_AT90USB1286__) && !defined(RGBLIGHT_ALL_ANIMATIONS))
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
-# else
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
-# if defined(RGBLIGHT_ALL_ANIMATIONS)
-# define RGBLIGHT_EFFECT_CHRISTMAS
-# define RGBLIGHT_EFFECT_STATIC_GRADIENT
-# define RGBLIGHT_EFFECT_RGB_TEST
-# define RGBLIGHT_EFFECT_ALTERNATING
-# endif
-# define RGBLIGHT_EFFECT_TWINKLE
-# endif
-#endif
-
-#ifdef RGB_MATRIX_ENABLE
-# ifndef RGB_MATRIX_REST_MODE
-# if defined(SPLIT_KEYBOARD) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_moonlander)
-# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# else
-# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN
-# endif
-# endif
-# undef RGB_MATRIX_DEFAULT_MODE
-# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_REST_MODE
-#endif
-
-#ifdef MOUSEKEY_ENABLE
-// mouse movement config
-# ifdef MK_3_SPEED
-# undef MK_3_SPEED
-# endif
-# define MK_KINETIC_SPEED
-# ifdef MK_KINETIC_SPEED
-# ifndef MOUSEKEY_DELAY
-# define MOUSEKEY_DELAY 8
-# endif
-# ifndef MOUSEKEY_INTERVAL
-# define MOUSEKEY_INTERVAL 20
-# endif
-# ifndef MOUSEKEY_MOVE_DELTA
-# define MOUSEKEY_MOVE_DELTA 25
-# endif
-# else
-# ifndef MOUSEKEY_DELAY
-# define MOUSEKEY_DELAY 300
-# endif
-# ifndef MOUSEKEY_INTERVAL
-# define MOUSEKEY_INTERVAL 50
-# endif
-# ifndef MOUSEKEY_MOVE_DELTA
-# define MOUSEKEY_MOVE_DELTA 5
-# endif
-# endif
-# ifndef MOUSEKEY_MAX_SPEED
-# define MOUSEKEY_MAX_SPEED 7
-# endif
-# ifndef MOUSEKEY_TIME_TO_MAX
-# define MOUSEKEY_TIME_TO_MAX 60
-# endif
-# ifndef MOUSEKEY_INITIAL_SPEED
-# define MOUSEKEY_INITIAL_SPEED 100
-# endif
-# ifndef MOUSEKEY_BASE_SPEED
-# define MOUSEKEY_BASE_SPEED 1000
-# endif
-# ifndef MOUSEKEY_DECELERATED_SPEED
-# define MOUSEKEY_DECELERATED_SPEED 400
-# endif
-# ifndef MOUSEKEY_ACCELERATED_SPEED
-# define MOUSEKEY_ACCELERATED_SPEED 3000
-# endif
-// mouse scroll config
-# ifndef MOUSEKEY_WHEEL_DELAY
-# define MOUSEKEY_WHEEL_DELAY 15
-# endif
-# ifndef MOUSEKEY_WHEEL_DELTA
-# define MOUSEKEY_WHEEL_DELTA 1
-# endif
-# ifndef MOUSEKEY_WHEEL_INTERVAL
-# define MOUSEKEY_WHEEL_INTERVAL 50
-# endif
-# ifndef MOUSEKEY_WHEEL_MAX_SPEED
-# define MOUSEKEY_WHEEL_MAX_SPEED 8
-# endif
-# ifndef MOUSEKEY_WHEEL_TIME_TO_MAX
-# define MOUSEKEY_WHEEL_TIME_TO_MAX 80
-# endif
-// mouse scroll kinetic config
-# ifndef MOUSEKEY_WHEEL_INITIAL_MOVEMENTS
-# define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 8
-# endif
-# ifndef MOUSEKEY_WHEEL_BASE_MOVEMENTS
-# define MOUSEKEY_WHEEL_BASE_MOVEMENTS 48
-# endif
-# ifndef MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS
-# define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48
-# endif
-# ifndef MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS
-# define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8
-# endif
-#endif // MOUSEKEY_ENABLE
-
-#define MOUSE_EXTENDED_REPORT
-
-#ifndef TAPPING_TERM
-# define TAPPING_TERM 175
-#endif
-
-#if (__has_include("../../../qmk_secrets/config.h") && !defined(NO_SECRETS))
-# include "../../../qmk_secrets/config.h"
-#endif
-
-#if defined(SPLIT_KEYBOARD) && defined(PROTOCOL_CHIBIOS) && !defined(USB_SUSPEND_WAKEUP_DELAY)
-# define USB_SUSPEND_WAKEUP_DELAY 500
-#endif
-
-#if defined(XAP_ENABLE) && !defined(__AVR__)
-# undef DYNAMIC_KEYMAP_LAYER_COUNT
-# define DYNAMIC_KEYMAP_LAYER_COUNT 12
-#endif
diff --git a/users/drashna/readme.md b/users/drashna/readme.md
deleted file mode 100644
index e52b67e835..0000000000
--- a/users/drashna/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Overview
-
-This is my personal userspace file. Most of my code exists here, as it's heavily shared.
-
-* [Callback (keymap+misc)](callbacks.md)
-* [Keycode Handling](keyrecords/readme.md)
- * [Autocorrection](keyrecords/autocorrection/readme.md)
- * [Cap Words](keyrecords/capwords.md)
- * [Diablo Tap Dancing](keyrecords/tap_dance.md)
- * [Keymap Wrappers](keyrecords/wrappers.md)
- * [Secret Macros](keyrecords/secrets.md)
- * [Custom Keycodes](keyrecords/keycodes.md)
- * [Unicode Input](keyrecords/unicode.md)
-* [OLED Display](oled/readme.md)
-* [Pointing Devices](pointing/readme.md)
-* [RGB Customization](rgb/readme.md)
-* [Split Transport](split/readme.md)
diff --git a/users/drashna/rgb/readme.md b/users/drashna/rgb/readme.md
deleted file mode 100644
index 4deaa0a463..0000000000
--- a/users/drashna/rgb/readme.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# RGB
-
-Custom RGB code can be disabled by setting `CUSTOM_RGBLIGHT = no` or `CUSTOM_RGB_MATRIX = no` in your `rules.mk`
-
-## RGB Light
-
-### Layer Indication Code
-
-At least for RGB Light, the `layer_state_set` function is used to detect the current highest layer, and change the underglow based on that layer.
-
-This works for both the regular layers, and for the default layers, too.
-
-I use the sethsv variants of the commands, so that different modes can be used, as well.
-
-RGB Matrix uses a custom, per board implementation, at the moment.
-
-### RGB Light Startup Animation
-
-On startup, if enabled, the board will cycle through the entire hue wheel, starting and ending on the default layer color.
-
-```c
-void keyboard_post_init_rgb(void) {
-#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 = 255; i > 0; i--) {
- rgblight_sethsv_noeeprom( ( i + old_hue) % 255, 255, 255);
- matrix_scan();
- wait_ms(10);
- }
- }
-#endif
- layer_state_set_user(layer_state);
-}
-```
-
-This could probably benefit from some cleanup and better handling.
-
-## RGB Matrix
-
-### Idle Animation
-
-This feature can be toggled with the `RGB_IDL` keycode.
-
-This sets the mode to the Heatmap Animation when typing, but will switch to the cycle in animations when idle.
-
-### Layer Indication
-
-This sets the modifier keys to indicate the current layer state, with the option to override the behavior.
diff --git a/users/drashna/rgb/rgb_matrix_config.h b/users/drashna/rgb/rgb_matrix_config.h
deleted file mode 100644
index bc2c04d981..0000000000
--- a/users/drashna/rgb/rgb_matrix_config.h
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#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_MATRIX_FRAMEBUFFER_EFFECTS
-#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
-
-#undef ENABLE_RGB_MATRIX_ALPHAS_MODS
-#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-#undef ENABLE_RGB_MATRIX_BREATHING
-#undef ENABLE_RGB_MATRIX_BAND_SAT
-#undef ENABLE_RGB_MATRIX_BAND_VAL
-#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-#undef ENABLE_RGB_MATRIX_CYCLE_ALL
-#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-#undef ENABLE_RGB_MATRIX_DUAL_BEACON
-#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
-#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-#undef ENABLE_RGB_MATRIX_RAINDROPS
-#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-#undef ENABLE_RGB_MATRIX_HUE_BREATHING
-#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
-#undef ENABLE_RGB_MATRIX_HUE_WAVE
-#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
-#undef ENABLE_RGB_MATRIX_PIXEL_FLOW
-#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
-#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
-#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
-// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
-#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
-#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-#undef ENABLE_RGB_MATRIX_SPLASH
-#undef ENABLE_RGB_MATRIX_MULTISPLASH
-#undef ENABLE_RGB_MATRIX_SOLID_SPLASH
-#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-
-#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-#if !defined(SPLIT_KEYBOARD) && !defined(KEYBOARD_ergodox_ez) && !defined(KEYBOARD_moonlander)
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-#endif
-#if defined(__arm__) || defined(__AVR_AT90USB1286__) || defined(KEYBOARD_launchpad)
-// RGB Matrix Animation modes. Explicitly enabled
-// For full list of effects, see:
-// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
-# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_BREATHING
-# define ENABLE_RGB_MATRIX_BAND_SAT
-# define ENABLE_RGB_MATRIX_BAND_VAL
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-# define ENABLE_RGB_MATRIX_CYCLE_ALL
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# define ENABLE_RGB_MATRIX_DUAL_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# define ENABLE_RGB_MATRIX_RAINDROPS
-# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# define ENABLE_RGB_MATRIX_HUE_BREATHING
-# define ENABLE_RGB_MATRIX_HUE_PENDULUM
-# define ENABLE_RGB_MATRIX_HUE_WAVE
-# define ENABLE_RGB_MATRIX_PIXEL_RAIN
-# define ENABLE_RGB_MATRIX_PIXEL_FLOW
-# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define ENABLE_RGB_MATRIX_SPLASH
-# define ENABLE_RGB_MATRIX_MULTISPLASH
-# define ENABLE_RGB_MATRIX_SOLID_SPLASH
-# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#endif // AVR
diff --git a/users/drashna/rgb/rgb_matrix_stuff.c b/users/drashna/rgb/rgb_matrix_stuff.c
deleted file mode 100644
index 588e51daf9..0000000000
--- a/users/drashna/rgb/rgb_matrix_stuff.c
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-#include "rgb_matrix.h"
-#include "lib/lib8tion/lib8tion.h"
-extern led_config_t g_led_config;
-
-static uint32_t hypno_timer;
-
-void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type, uint8_t led_min, uint8_t led_max) {
- HSV hsv = {hue, sat, val};
- if (hsv.v > rgb_matrix_get_val()) {
- hsv.v = rgb_matrix_get_val();
- }
-
- switch (mode) {
- case 1: // breathing
- {
- uint16_t time = scale16by8(g_rgb_timer, speed / 8);
- hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
- RGB rgb = hsv_to_rgb(hsv);
- for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
- RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b);
- }
- }
- break;
- }
- default: // Solid Color
- {
- RGB rgb = hsv_to_rgb(hsv);
- for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
- RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b);
- }
- }
- break;
- }
- }
-}
-
-void housekeeping_task_rgb_matrix(void) {
-#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
- if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && sync_timer_elapsed32(hypno_timer) > 15000) {
- rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
- }
-#endif
-}
-
-void keyboard_post_init_rgb_matrix(void) {
-#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
- if (userspace_config.rgb_matrix_idle_anim) {
- rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
- }
-#endif
- if (userspace_config.rgb_layer_change) {
- rgb_matrix_set_flags(LED_FLAG_UNDERGLOW | LED_FLAG_KEYLIGHT | LED_FLAG_INDICATOR);
- } else {
- rgb_matrix_set_flags(LED_FLAG_ALL);
- }
-}
-
-bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
-#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
- hypno_timer = sync_timer_read32();
- if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) {
- rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
- }
-#endif
- switch (keycode) {
- case RGB_IDL: // This allows me to use underglow as layer indication, or as normal
-#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
- if (record->event.pressed) {
- userspace_config.rgb_matrix_idle_anim ^= 1;
- dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
- eeconfig_update_user_config(&userspace_config.raw);
- if (userspace_config.rgb_matrix_idle_anim) {
- rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
- }
- }
-#endif
- break;
- }
- return true;
-}
-
-__attribute__((weak)) bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) {
- return true;
-}
-bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
- if (!rgb_matrix_indicators_advanced_keymap(led_min, led_max)) {
- return false;
- }
-
-#if defined(RGBLIGHT_ENABLE)
- if (!userspace_config.rgb_layer_change)
-#else
- if (userspace_config.rgb_layer_change)
-#endif
- {
- switch (get_highest_layer(layer_state & ~((layer_state_t)1 << _MOUSE))) {
- case _GAMEPAD:
- rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- case _DIABLO:
- rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed * 8, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- case _RAISE:
- rgb_matrix_layer_helper(HSV_YELLOW, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- case _LOWER:
- rgb_matrix_layer_helper(HSV_GREEN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- case _ADJUST:
- rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- default:
- if (layer_state_is(_MOUSE)) {
- rgb_matrix_layer_helper(HSV_PURPLE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- } else {
- switch (get_highest_layer(default_layer_state)) {
- case _DEFAULT_LAYER_1:
- rgb_matrix_layer_helper(DEFAULT_LAYER_1_HSV, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- case _DEFAULT_LAYER_2:
- rgb_matrix_layer_helper(DEFAULT_LAYER_2_HSV, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- case _DEFAULT_LAYER_3:
- rgb_matrix_layer_helper(DEFAULT_LAYER_3_HSV, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- case _DEFAULT_LAYER_4:
- rgb_matrix_layer_helper(DEFAULT_LAYER_4_HSV, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
- break;
- }
- }
- break;
- }
- }
- return false;
-}
-
-__attribute__((weak)) bool rgb_matrix_indicators_keymap(void) {
- return true;
-}
-bool rgb_matrix_indicators_user(void) {
- return rgb_matrix_indicators_keymap();
-}
-
-
-//----------------------------------------------------------
-// RGB Matrix naming
-#include <rgb_matrix.h>
-
-#if defined(RGB_MATRIX_EFFECT)
-# undef RGB_MATRIX_EFFECT
-#endif // defined(RGB_MATRIX_EFFECT)
-
-#define RGB_MATRIX_EFFECT(x) RGB_MATRIX_EFFECT_##x,
-enum {
- RGB_MATRIX_EFFECT_NONE,
-#include "rgb_matrix_effects.inc"
-#undef RGB_MATRIX_EFFECT
-#ifdef RGB_MATRIX_CUSTOM_KB
-# include "rgb_matrix_kb.inc"
-#endif
-#ifdef RGB_MATRIX_CUSTOM_USER
-# include "rgb_matrix_user.inc"
-#endif
-};
-
-#define RGB_MATRIX_EFFECT(x) \
- case RGB_MATRIX_EFFECT_##x: \
- return #x;
-const char* rgb_matrix_name(uint8_t effect) {
- switch (effect) {
- case RGB_MATRIX_EFFECT_NONE:
- return "NONE";
-#include "rgb_matrix_effects.inc"
-#undef RGB_MATRIX_EFFECT
-#ifdef RGB_MATRIX_CUSTOM_KB
-# include "rgb_matrix_kb.inc"
-#endif
-#ifdef RGB_MATRIX_CUSTOM_USER
-# include "rgb_matrix_user.inc"
-#endif
- default:
- return "UNKNOWN";
- }
-}
diff --git a/users/drashna/rgb/rgb_matrix_stuff.h b/users/drashna/rgb/rgb_matrix_stuff.h
deleted file mode 100644
index 80770bf40f..0000000000
--- a/users/drashna/rgb/rgb_matrix_stuff.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-#include "quantum.h"
-
-bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record);
-void keyboard_post_init_rgb_matrix(void);
-void housekeeping_task_rgb_matrix(void);
-
-void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
-void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type, uint8_t led_min, uint8_t led_max);
-
-bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max);
-bool rgb_matrix_indicators_keymap(void);
-
-const char* rgb_matrix_name(uint8_t effect);
diff --git a/users/drashna/rgb/rgb_stuff.c b/users/drashna/rgb/rgb_stuff.c
deleted file mode 100644
index cc85425aff..0000000000
--- a/users/drashna/rgb/rgb_stuff.c
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "drashna.h"
-#include "rgb_stuff.h"
-#include "eeprom.h"
-
-bool has_initialized;
-
-void rgblight_sethsv_default_helper(uint8_t index) {
- rgblight_sethsv_at(rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val(), index);
-}
-void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) {
- if (val > RGBLIGHT_LIMIT_VAL) {
- val = RGBLIGHT_LIMIT_VAL;
- }
- rgblight_sethsv_noeeprom(hue, sat, val);
- // wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly
- rgblight_mode_noeeprom(mode);
-}
-
-bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-#if defined(RGBLIGHT_STARTUP_ANIMATION)
-static bool is_enabled;
-static bool is_rgblight_startup;
-static HSV old_hsv;
-static uint8_t old_mode;
-deferred_token rgb_startup_token;
-
-uint32_t rgb_startup_animation(uint32_t triger_time, void *cb_arg) {
- if (is_rgblight_startup && is_keyboard_master()) {
- static uint8_t counter = 0;
- counter++;
- rgblight_sethsv_noeeprom((counter + old_hsv.h) % 255, 255, 255);
- if (counter >= 255) {
- is_rgblight_startup = false;
- if (userspace_config.rgb_layer_change) {
- layer_state_set_rgb_light(layer_state);
- } else {
- rgblight_set_hsv_and_mode(old_hsv.h, old_hsv.s, old_hsv.v, old_mode);
- }
- if (!is_enabled) {
- rgblight_disable_noeeprom();
- }
- }
- }
- return is_rgblight_startup ? 10 : 0;
-}
-#endif
-
-bool is_rgblight_startup_running(void) {
-#if defined(RGBLIGHT_STARTUP_ANIMATION)
- return is_rgblight_startup && is_keyboard_master();
-#else
- return false;
-#endif
-}
-
-
-void keyboard_post_init_rgb_light(void) {
-#if defined(RGBLIGHT_STARTUP_ANIMATION)
- is_enabled = rgblight_is_enabled();
- if (userspace_config.rgb_layer_change) {
- layer_state_set_rgb_light(layer_state);
- }
- old_hsv = rgblight_get_hsv();
- old_mode = rgblight_get_mode();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
- is_rgblight_startup = true;
- rgb_startup_token = defer_exec(300, rgb_startup_animation, NULL);
-#endif
- if (userspace_config.rgb_layer_change) {
- layer_state_set_rgb_light(layer_state);
- }
-}
-
-layer_state_t layer_state_set_rgb_light(layer_state_t state) {
-#ifdef RGBLIGHT_ENABLE
- if (userspace_config.rgb_layer_change) {
- switch (get_highest_layer(state & ~((layer_state_t)1 << _MOUSE))) {
- case _MEDIA:
- rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1);
- break;
- case _GAMEPAD:
- rgblight_set_hsv_and_mode(HSV_ORANGE, RGBLIGHT_MODE_SNAKE + 2);
- break;
- case _DIABLO:
- case _DIABLOII:
- rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_BREATHING + 3);
- break;
- case _RAISE:
- rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_BREATHING + 3);
- break;
- case _LOWER:
- rgblight_set_hsv_and_mode(HSV_GREEN, RGBLIGHT_MODE_BREATHING + 3);
- break;
- case _ADJUST:
- rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);
- break;
- default:
- if (layer_state_cmp(state, _MOUSE)) {
-# if defined(RGBLIGHT_EFFECT_TWINKLE)
- rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_TWINKLE + 5);
-# else
- rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3);
-# endif
- } else {
- default_layer_state_set_rgb_light(default_layer_state);
- }
- }
-#endif // RGBLIGHT_ENABLE
- }
- return state;
-}
-
-layer_state_t default_layer_state_set_rgb_light(layer_state_t state) {
- switch (get_highest_layer(state)) {
- case _DEFAULT_LAYER_1:
- rgblight_set_hsv_and_mode(DEFAULT_LAYER_1_HSV, RGBLIGHT_MODE_STATIC_LIGHT);
- break;
- case _DEFAULT_LAYER_2:
- rgblight_set_hsv_and_mode(DEFAULT_LAYER_2_HSV, RGBLIGHT_MODE_STATIC_LIGHT);
- break;
- case _DEFAULT_LAYER_3:
- rgblight_set_hsv_and_mode(DEFAULT_LAYER_3_HSV, RGBLIGHT_MODE_STATIC_LIGHT);
- break;
- case _DEFAULT_LAYER_4:
- rgblight_set_hsv_and_mode(DEFAULT_LAYER_4_HSV, RGBLIGHT_MODE_STATIC_LIGHT);
- break;
- }
- return state;
-}
-
-#define _RGBM_SINGLE_STATIC(sym) \
- case RGBLIGHT_MODE_##sym: \
- return #sym;
-#define _RGBM_SINGLE_DYNAMIC(sym) \
- case RGBLIGHT_MODE_##sym: \
- return #sym;
-#define _RGBM_MULTI_STATIC(sym) \
- case RGBLIGHT_MODE_##sym: \
- return #sym;
-#define _RGBM_MULTI_DYNAMIC(sym) \
- case RGBLIGHT_MODE_##sym: \
- return #sym;
-#define _RGBM_TMP_STATIC(sym, msym) \
- case RGBLIGHT_MODE_##sym: \
- return #msym;
-#define _RGBM_TMP_DYNAMIC(sym, msym) \
- case RGBLIGHT_MODE_##sym: \
- return #msym;
-
-
-const char* rgblight_name(uint8_t effect) {
- switch (effect) {
-#include "rgblight_modes.h"
- case 0:
- return "Off";
- default:
- return "UNKNOWN";
- }
-}
diff --git a/users/drashna/rgb/rgb_stuff.h b/users/drashna/rgb/rgb_stuff.h
deleted file mode 100644
index f76c591e03..0000000000
--- a/users/drashna/rgb/rgb_stuff.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-#include "quantum.h"
-
-bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record);
-void keyboard_post_init_rgb_light(void);
-void matrix_scan_rgb_light(void);
-layer_state_t layer_state_set_rgb_light(layer_state_t state);
-layer_state_t default_layer_state_set_rgb_light(layer_state_t state);
-void rgblight_sethsv_default_helper(uint8_t index);
-
-const char* rgblight_name(uint8_t effect);
-bool is_rgblight_startup_running(void);
diff --git a/users/drashna/rgb/rgblight_config.h b/users/drashna/rgb/rgblight_config.h
deleted file mode 100644
index d5a6917f1c..0000000000
--- a/users/drashna/rgb/rgblight_config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define RGBLIGHT_SLEEP
-#define RGBLIGHT_EFFECT_TWINKLE_LIFE 250
-#define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1 / 24
-
-#ifdef RGBLIGHT_DEFAULT_MODE
-# undef RGBLIGHT_DEFAULT_MODE
-#endif
diff --git a/users/drashna/rgblight_breathe_table.h b/users/drashna/rgblight_breathe_table.h
deleted file mode 100644
index d406395978..0000000000
--- a/users/drashna/rgblight_breathe_table.h
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#ifndef RGBLIGHT_EFFECT_BREATHE_TABLE
-#define RGBLIGHT_EFFECT_BREATHE_TABLE
-
-// clang-format off
-const uint8_t rgblight_effect_breathe_table[] PROGMEM = {
-/* #define RGBLIGHT_EFFECT_BREATHE_CENTER 0.00 */
-/* #define RGBLIGHT_EFFECT_BREATHE_MAX 255 */
-
- #if RGBLIGHT_BREATHE_TABLE_SIZE == 256
- 0x44, 0x45, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x4e,
- 0x4f, 0x51, 0x52, 0x54, 0x55, 0x57, 0x58, 0x5a,
- 0x5c, 0x5d, 0x5f, 0x60, 0x62, 0x64, 0x65, 0x67,
- 0x69, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x73, 0x75,
- 0x77, 0x79, 0x7b, 0x7c, 0x7e, 0x80, 0x82, 0x84,
- 0x86, 0x88, 0x8a, 0x8b, 0x8d, 0x8f, 0x91, 0x93,
- 0x95, 0x97, 0x99, 0x9b, 0x9d, 0x9f, 0xa1, 0xa3,
- 0xa5, 0xa7, 0xa9, 0xaa, 0xac, 0xae, 0xb0, 0xb2,
- 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xbf, 0xc1,
- 0xc3, 0xc5, 0xc7, 0xc9, 0xca, 0xcc, 0xce, 0xd0,
- 0xd1, 0xd3, 0xd5, 0xd6, 0xd8, 0xda, 0xdb, 0xdd,
- 0xde, 0xe0, 0xe1, 0xe3, 0xe4, 0xe5, 0xe7, 0xe8,
- 0xe9, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1,
- 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf8,
- 0xf9, 0xfa, 0xfa, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd,
- 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
- 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd,
- 0xfd, 0xfc, 0xfc, 0xfc, 0xfb, 0xfa, 0xfa, 0xf9,
- 0xf8, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
- 0xf1, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xeb, 0xe9,
- 0xe8, 0xe7, 0xe5, 0xe4, 0xe3, 0xe1, 0xe0, 0xde,
- 0xdd, 0xdb, 0xda, 0xd8, 0xd6, 0xd5, 0xd3, 0xd1,
- 0xd0, 0xce, 0xcc, 0xca, 0xc9, 0xc7, 0xc5, 0xc3,
- 0xc1, 0xbf, 0xbe, 0xbc, 0xba, 0xb8, 0xb6, 0xb4,
- 0xb2, 0xb0, 0xae, 0xac, 0xaa, 0xa9, 0xa7, 0xa5,
- 0xa3, 0xa1, 0x9f, 0x9d, 0x9b, 0x99, 0x97, 0x95,
- 0x93, 0x91, 0x8f, 0x8d, 0x8b, 0x8a, 0x88, 0x86,
- 0x84, 0x82, 0x80, 0x7e, 0x7c, 0x7b, 0x79, 0x77,
- 0x75, 0x73, 0x72, 0x70, 0x6e, 0x6c, 0x6a, 0x69,
- 0x67, 0x65, 0x64, 0x62, 0x60, 0x5f, 0x5d, 0x5c,
- 0x5a, 0x58, 0x57, 0x55, 0x54, 0x52, 0x51, 0x4f,
- 0x4e, 0x4c, 0x4b, 0x4a, 0x48, 0x47, 0x45, 0x44
- #endif /* 256 bytes table */
-
- #if RGBLIGHT_BREATHE_TABLE_SIZE == 128
- 0x44, 0x47, 0x4a, 0x4c,
- 0x4f, 0x52, 0x55, 0x58,
- 0x5c, 0x5f, 0x62, 0x65,
- 0x69, 0x6c, 0x70, 0x73,
- 0x77, 0x7b, 0x7e, 0x82,
- 0x86, 0x8a, 0x8d, 0x91,
- 0x95, 0x99, 0x9d, 0xa1,
- 0xa5, 0xa9, 0xac, 0xb0,
- 0xb4, 0xb8, 0xbc, 0xbf,
- 0xc3, 0xc7, 0xca, 0xce,
- 0xd1, 0xd5, 0xd8, 0xdb,
- 0xde, 0xe1, 0xe4, 0xe7,
- 0xe9, 0xec, 0xee, 0xf0,
- 0xf2, 0xf4, 0xf6, 0xf8,
- 0xf9, 0xfa, 0xfc, 0xfc,
- 0xfd, 0xfe, 0xfe, 0xfe,
- 0xfe, 0xfe, 0xfe, 0xfe,
- 0xfd, 0xfc, 0xfb, 0xfa,
- 0xf8, 0xf7, 0xf5, 0xf3,
- 0xf1, 0xef, 0xed, 0xeb,
- 0xe8, 0xe5, 0xe3, 0xe0,
- 0xdd, 0xda, 0xd6, 0xd3,
- 0xd0, 0xcc, 0xc9, 0xc5,
- 0xc1, 0xbe, 0xba, 0xb6,
- 0xb2, 0xae, 0xaa, 0xa7,
- 0xa3, 0x9f, 0x9b, 0x97,
- 0x93, 0x8f, 0x8b, 0x88,
- 0x84, 0x80, 0x7c, 0x79,
- 0x75, 0x72, 0x6e, 0x6a,
- 0x67, 0x64, 0x60, 0x5d,
- 0x5a, 0x57, 0x54, 0x51,
- 0x4e, 0x4b, 0x48, 0x45
- #endif /* 128 bytes table */
-
- #if RGBLIGHT_BREATHE_TABLE_SIZE == 64
- 0x44, 0x4a,
- 0x4f, 0x55,
- 0x5c, 0x62,
- 0x69, 0x70,
- 0x77, 0x7e,
- 0x86, 0x8d,
- 0x95, 0x9d,
- 0xa5, 0xac,
- 0xb4, 0xbc,
- 0xc3, 0xca,
- 0xd1, 0xd8,
- 0xde, 0xe4,
- 0xe9, 0xee,
- 0xf2, 0xf6,
- 0xf9, 0xfc,
- 0xfd, 0xfe,
- 0xfe, 0xfe,
- 0xfd, 0xfb,
- 0xf8, 0xf5,
- 0xf1, 0xed,
- 0xe8, 0xe3,
- 0xdd, 0xd6,
- 0xd0, 0xc9,
- 0xc1, 0xba,
- 0xb2, 0xaa,
- 0xa3, 0x9b,
- 0x93, 0x8b,
- 0x84, 0x7c,
- 0x75, 0x6e,
- 0x67, 0x60,
- 0x5a, 0x54,
- 0x4e, 0x48
- #endif /* 64 bytes table */
-};
-// clang-format on
-
-static const int table_scale = 256 / sizeof(rgblight_effect_breathe_table);
-
-#endif /* RGBLIGHT_EFFECT_BREATHE_TABLE */
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
deleted file mode 100644
index 6287d6e78c..0000000000
--- a/users/drashna/rules.mk
+++ /dev/null
@@ -1,136 +0,0 @@
-SRC += $(USER_PATH)/drashna.c \
- $(USER_PATH)/callbacks.c \
- $(USER_PATH)/keyrecords/process_records.c \
- $(USER_PATH)/keyrecords/tapping.c \
- $(USER_PATH)/eeconfig_users.c
-
-# TOP_SYMBOLS = yes
-
-DEBOUNCE_TYPE = asym_eager_defer_pk
-DEFERRED_EXEC_ENABLE = yes
-OS_DETECTION_ENABLE = yes
-
-ifeq ($(PLATFORM),CHIBIOS)
- # cortex-m4 has DSP+FPU support, so use hack to enable it for lib8tion
- ifeq ($(strip $(MCU)), cortex-m4)
- OPT_DEFS += -DFASTLED_TEENSY3
- endif
-else
- ifneq ($(strip $(LTO_SUPPORTED)), no)
- LTO_ENABLE = yes
- endif
- SPACE_CADET_ENABLE = no
- GRAVE_ESC_ENABLE = no
-endif
-# DEBUG_MATRIX_SCAN_RATE_ENABLE = api
-
--include $(USER_PATH)/../../../qmk_secrets/rules.mk
-
-ifeq ($(strip $(MAKE_BOOTLOADER)), yes)
- OPT_DEFS += -DMAKE_BOOTLOADER
-endif
-
-# At least until build.mk or the like drops, this is here to prevent
-# VUSB boards from enabling NKRO, as they do not support it. Ideally
-# this should be handled per keyboard, but until that happens ...
-ifeq ($(strip $(PROTOCOL)), VUSB)
- NKRO_ENABLE := no
-endif
-
-ifeq ($(strip $(PER_KEY_TAPPING)), yes)
- OPT_DEFS += -DPER_KEY_TAPPING
-endif
-
-CUSTOM_UNICODE_ENABLE ?= yes
-ifeq ($(strip $(CUSTOM_UNICODE_ENABLE)), yes)
- UNICODE_ENABLE := no
- UNICODEMAP_ENABLE := no
- UCIS_ENABLE := no
- UNICODE_COMMON := yes
- OPT_DEFS += -DCUSTOM_UNICODE_ENABLE
- SRC += $(USER_PATH)/keyrecords/unicode.c
-endif
-
-CUSTOM_TAP_DANCE ?= yes
-ifeq ($(strip $(CUSTOM_TAP_DANCE)), yes)
- ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
- SRC += $(USER_PATH)/keyrecords/tap_dances.c
- endif
-endif
-
-CUSTOM_RGBLIGHT ?= yes
-ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
- ifeq ($(strip $(CUSTOM_RGBLIGHT)), yes)
- SRC += $(USER_PATH)/rgb/rgb_stuff.c
- OPT_DEFS += -DCUSTOM_RGBLIGHT
- ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
- OPT_DEFS += -DRGBLIGHT_NOEEPROM
- endif
- ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
- OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
- endif
- endif
-endif
-
-CUSTOM_RGB_MATRIX ?= yes
-ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
- ifeq ($(strip $(CUSTOM_RGB_MATRIX)), yes)
- SRC += $(USER_PATH)/rgb/rgb_matrix_stuff.c
- OPT_DEFS += -DCUSTOM_RGB_MATRIX
- endif
-endif
-
-KEYLOGGER_ENABLE ?= no
-ifdef CONSOLE_ENABLE
- ifeq ($(strip $(KEYLOGGER_ENABLE)), yes)
- OPT_DEFS += -DKEYLOGGER_ENABLE
- endif
-endif
-
-ifeq ($(strip $(I2C_SCANNER_ENABLE)), yes)
- OPT_DEFS += -DI2C_SCANNER_ENABLE
- CONSOLE_ENABLE := yes
-endif
-
--include $(USER_PATH)/oled/rules.mk
-
-CUSTOM_POINTING_DEVICE ?= yes
-ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
- ifeq ($(strip $(CUSTOM_POINTING_DEVICE)), yes)
- SRC += $(USER_PATH)/pointing/pointing.c
- OPT_DEFS += -DCUSTOM_POINTING_DEVICE
- OPT_DEFS += -DPOINTING_DEVICE_AUTO_MOUSE_ENABLE
- endif
- POINTING_DEVICE_MOUSE_JIGGLER_ENABLE ?= yes
- ifeq ($(strip $(POINTING_DEVICE_MOUSE_JIGGLER_ENABLE)), yes)
- OPT_DEFS += -DPOINTING_DEVICE_MOUSE_JIGGLER_ENABLE
- endif
-endif
-
-CUSTOM_SPLIT_TRANSPORT_SYNC ?= yes
-ifeq ($(strip $(CUSTOM_SPLIT_TRANSPORT_SYNC)), yes)
- ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
- QUANTUM_LIB_SRC += $(USER_PATH)/split/transport_sync.c
- OPT_DEFS += -DCUSTOM_SPLIT_TRANSPORT_SYNC
- endif
-
-endif
-
-CUSTOM_BOOTMAGIC_ENABLE ?= yes
-ifeq ($(strip $(CUSTOM_BOOTMAGIC_ENABLE)), yes)
- ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes)
- SRC += bootmagic_better.c
- endif
-endif
-
-CUSTOM_DYNAMIC_MACROS_ENABLE ?= no
-ifeq ($(strip $(CUSTOM_DYNAMIC_MACROS_ENABLE)), yes)
- SRC += $(USER_PATH)/keyrecords/dynamic_macros.c
- OPT_DEFS += -DCUSTOM_DYNAMIC_MACROS_ENABLE
-endif
-
-ifeq ($(strip $(HARDWARE_DEBUG_ENABLE)), yes)
- LTO_ENABLE := no
- OPT := 0
- OPT_DEFS += -g
-endif
diff --git a/users/drashna/split/readme.md b/users/drashna/split/readme.md
deleted file mode 100644
index 5dad340122..0000000000
--- a/users/drashna/split/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Custom Split Transport
-
-To disable the customized split transport, add `CUSTOM_SPLIT_TRANSPORT_SYNC = no` to your `rules.mk`.
-
-This syncs a number of additional settings, such as the keymap_config (magic settings), user eeprom configs, and misc firmware settings.
-
-Additionally, this supports a watchdog timer reset for the secondary split side.
-
-## User State Config
-
-The User states that it sync are:
-
-* Audio Enable status
-* Audio Clicky states
-* Unicode mode
-* Pointing Device tap toggle status
-* Swap Hands status
-* Host Driver status
-
-## Userspace Config
-
-The userspace config states that are synced are:
-
-* RGB layer indication
-* "is overwatch" status
-* nuke switch
-* Swapped numbers
-* RGB Matrix idle animation
-* Autocorrect enable status
diff --git a/users/drashna/split/split_config.h b/users/drashna/split/split_config.h
deleted file mode 100644
index fd8bf95515..0000000000
--- a/users/drashna/split/split_config.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define SPLIT_TRANSPORT_MIRROR
-#define SPLIT_LAYER_STATE_ENABLE
-#define SPLIT_LED_STATE_ENABLE
-#define SPLIT_MODS_ENABLE
-#define SPLIT_WATCHDOG_ENABLE
-#define SPLIT_WPM_ENABLE
-#define SPLIT_ACTIVITY_ENABLE
-#define SPLIT_DETECTED_OS_ENABLE
-#define SPLIT_HAPTIC_ENABLE
-#ifdef SPLIT_OLED_ENABLE
-# undef SPLIT_OLED_ENABLE
-#endif
-#if defined(__AVR__) && !defined(SELECT_SOFT_SERIAL_SPEED)
-# define SELECT_SOFT_SERIAL_SPEED 1
-#endif
-#ifdef CUSTOM_SPLIT_TRANSPORT_SYNC
-# define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_STATE_SYNC, RPC_ID_USER_KEYMAP_SYNC, RPC_ID_USER_CONFIG_SYNC, RPC_ID_USER_PLACEHOLDER, RPC_ID_USER_OLED_KEYLOG_STR
-#endif
-
-#define CRC8_USE_TABLE
-#define CRC8_OPTIMIZE_SPEED
diff --git a/users/drashna/split/transport_sync.c b/users/drashna/split/transport_sync.c
deleted file mode 100644
index d5a1241586..0000000000
--- a/users/drashna/split/transport_sync.c
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "transport_sync.h"
-#include "transactions.h"
-#include <string.h>
-
-#ifdef UNICODE_COMMON_ENABLE
-# include "process_unicode_common.h"
-extern unicode_config_t unicode_config;
-# include "keyrecords/unicode.h"
-#endif
-#ifdef AUDIO_ENABLE
-# include "audio.h"
-extern audio_config_t audio_config;
-extern bool delayed_tasks_run;
-#endif
-#if defined(POINTING_DEVICE_ENABLE) && defined(KEYBOARD_handwired_tractyl_manuform)
-extern bool tap_toggling;
-#endif
-#ifdef SWAP_HANDS_ENABLE
-extern bool swap_hands;
-#endif
-
-extern userspace_config_t userspace_config;
-
-uint16_t transport_keymap_config = 0;
-uint32_t transport_userspace_config = 0, transport_user_state = 0;
-
-user_runtime_config_t user_state;
-
-void user_state_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
- if (initiator2target_buffer_size == sizeof(transport_user_state)) {
- memcpy(&transport_user_state, initiator2target_buffer, initiator2target_buffer_size);
- }
-}
-void user_keymap_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
- if (initiator2target_buffer_size == sizeof(transport_keymap_config)) {
- memcpy(&transport_keymap_config, initiator2target_buffer, initiator2target_buffer_size);
- }
-}
-void user_config_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
- if (initiator2target_buffer_size == sizeof(transport_userspace_config)) {
- memcpy(&transport_userspace_config, initiator2target_buffer, initiator2target_buffer_size);
- }
-}
-
-#ifdef CUSTOM_OLED_DRIVER
-# include "oled/oled_stuff.h"
-void keylogger_string_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
- if (initiator2target_buffer_size == (OLED_KEYLOGGER_LENGTH+1)) {
- memcpy(&oled_keylog_str, initiator2target_buffer, initiator2target_buffer_size);
- }
-}
-#endif
-
-void keyboard_post_init_transport_sync(void) {
- // Register keyboard state sync split transaction
- transaction_register_rpc(RPC_ID_USER_STATE_SYNC, user_state_sync);
- transaction_register_rpc(RPC_ID_USER_KEYMAP_SYNC, user_keymap_sync);
- transaction_register_rpc(RPC_ID_USER_CONFIG_SYNC, user_config_sync);
-#ifdef CUSTOM_OLED_DRIVER
- transaction_register_rpc(RPC_ID_USER_OLED_KEYLOG_STR, keylogger_string_sync);
-#endif
-}
-
-void user_transport_update(void) {
- if (is_keyboard_master()) {
- transport_keymap_config = keymap_config.raw;
- transport_userspace_config = userspace_config.raw;
-#ifdef AUDIO_ENABLE
- user_state.audio_enable = is_audio_on();
- user_state.audio_clicky_enable = is_clicky_on();
-#endif
-#if defined(POINTING_DEVICE_ENABLE) && defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
- user_state.tap_toggling = get_auto_mouse_toggle();
-#endif
-#ifdef UNICODE_COMMON_ENABLE
- user_state.unicode_mode = unicode_config.input_mode;
- user_state.unicode_typing_mode = unicode_typing_mode;
-#endif
-#ifdef SWAP_HANDS_ENABLE
- user_state.swap_hands = swap_hands;
-#endif
- user_state.host_driver_disabled = get_keyboard_lock();
-
- transport_user_state = user_state.raw;
- } else {
- keymap_config.raw = transport_keymap_config;
- userspace_config.raw = transport_userspace_config;
- user_state.raw = transport_user_state;
-#ifdef UNICODE_COMMON_ENABLE
- unicode_config.input_mode = user_state.unicode_mode;
- unicode_typing_mode = user_state.unicode_typing_mode;
-#endif
-#if defined(POINTING_DEVICE_ENABLE) && defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
- if (get_auto_mouse_toggle() != user_state.tap_toggling) {
- auto_mouse_toggle();
- }
-#endif
-#ifdef SWAP_HANDS_ENABLE
- swap_hands = user_state.swap_hands;
-#endif
- set_keyboard_lock(user_state.host_driver_disabled);
- }
-}
-
-void user_transport_sync(void) {
- if (is_keyboard_master()) {
- // Keep track of the last state, so that we can tell if we need to propagate to slave
- static uint16_t last_keymap = 0;
- static uint32_t last_config = 0, last_sync[4], last_user_state = 0;
- bool needs_sync = false;
-#ifdef CUSTOM_OLED_DRIVER
- static char keylog_temp[OLED_KEYLOGGER_LENGTH + 1] = {0};
-#endif
-
- // Check if the state values are different
- if (memcmp(&transport_user_state, &last_user_state, sizeof(transport_user_state))) {
- needs_sync = true;
- memcpy(&last_user_state, &transport_user_state, sizeof(transport_user_state));
- }
- // Send to slave every 500ms regardless of state change
- if (timer_elapsed32(last_sync[0]) > 250) {
- needs_sync = true;
- }
-
- // Perform the sync if requested
- if (needs_sync) {
- if (transaction_rpc_send(RPC_ID_USER_STATE_SYNC, sizeof(user_state), &user_state)) {
- last_sync[0] = timer_read32();
- }
- needs_sync = false;
- }
-
- // Check if the state values are different
- if (memcmp(&transport_keymap_config, &last_keymap, sizeof(transport_keymap_config))) {
- needs_sync = true;
- memcpy(&last_keymap, &transport_keymap_config, sizeof(transport_keymap_config));
- }
-
- // Send to slave every 500ms regardless of state change
- if (timer_elapsed32(last_sync[1]) > 250) {
- needs_sync = true;
- }
-
- // Perform the sync if requested
- if (needs_sync) {
- if (transaction_rpc_send(RPC_ID_USER_KEYMAP_SYNC, sizeof(transport_keymap_config), &transport_keymap_config)) {
- last_sync[1] = timer_read32();
- }
- needs_sync = false;
- }
-
- // Check if the state values are different
- if (memcmp(&user_state, &last_config, sizeof(transport_userspace_config))) {
- needs_sync = true;
- memcpy(&last_config, &user_state, sizeof(transport_userspace_config));
- }
-
- // Send to slave every 500ms regardless of state change
- if (timer_elapsed32(last_sync[2]) > 250) {
- needs_sync = true;
- }
-
- // Perform the sync if requested
- if (needs_sync) {
- if (transaction_rpc_send(RPC_ID_USER_CONFIG_SYNC, sizeof(transport_userspace_config), &transport_userspace_config)) {
- last_sync[2] = timer_read32();
- }
- needs_sync = false;
- }
-
-#ifdef CUSTOM_OLED_DRIVER
- // Check if the state values are different
- if (memcmp(&oled_keylog_str, &keylog_temp, OLED_KEYLOGGER_LENGTH + 1)) {
- needs_sync = true;
- memcpy(&keylog_temp, &oled_keylog_str, OLED_KEYLOGGER_LENGTH + 1);
- }
- if (timer_elapsed32(last_sync[3]) > 250) {
- needs_sync = true;
- }
-
- // Perform the sync if requested
- if (needs_sync) {
- if (transaction_rpc_send(RPC_ID_USER_OLED_KEYLOG_STR, OLED_KEYLOGGER_LENGTH + 1, &oled_keylog_str)) {
- last_sync[3] = timer_read32();
- }
- needs_sync = false;
- }
-#endif
- }
-}
-
-void housekeeping_task_transport_sync(void) {
- // Update kb_state so we can send to slave
- user_transport_update();
-
- // Data sync from master to slave
- user_transport_sync();
-}
diff --git a/users/drashna/split/transport_sync.h b/users/drashna/split/transport_sync.h
deleted file mode 100644
index d241e5446f..0000000000
--- a/users/drashna/split/transport_sync.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include "drashna.h"
-#ifdef OLED_ENABLE
-# include "oled/oled_stuff.h"
-#endif
-
-typedef union {
- uint32_t raw;
- struct {
- bool audio_enable :1;
- bool audio_clicky_enable :1;
- bool tap_toggling :1;
- uint8_t unicode_mode :3;
- bool swap_hands :1;
- bool host_driver_disabled :1;
- uint8_t unicode_typing_mode :3;
- bool is_oled_enabled :1;
- };
-} user_runtime_config_t;
-
-extern user_runtime_config_t user_state;
-
-void keyboard_post_init_transport_sync(void);
-void housekeeping_task_transport_sync(void);
diff --git a/users/drashna/template.c b/users/drashna/template.c
deleted file mode 100644
index 300cdbc934..0000000000
--- a/users/drashna/template.c
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "template.h"
-
-// Add reconfigurable functions here, for keymap customization
-// This allows for a global, userspace functions, and continued
-// customization of the keymap. Use _keymap instead of _user
-// functions in the keymaps
-__attribute__((weak)) void matrix_init_keymap(void) {}
-
-// Call user matrix init, then call the keymap's init function
-void matrix_init_user(void) { matrix_init_keymap(); }
-
-__attribute__((weak)) void matrix_scan_keymap(void) {}
-
-// No global matrix scan code, so just run keymap's matix
-// scan function
-void matrix_scan_user(void) { matrix_scan_keymap(); }
-
-__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
-
-// Defines actions tor my global custom keycodes. Defined in drashna.h file
-// Then runs the _keymap's recod handier if not processed here,
-// And use "NEWPLACEHOLDER" for new safe range
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case VRSN:
- if (record->event.pressed) {
- SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- return false;
- break;
- }
- return process_record_keymap(keycode, record);
-}
-
-__attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
-
-layer_state_t layer_state_set_user(layer_state_t state) { return layer_state_set_keymap(state); }
-
-__attribute__((weak)) void led_set_keymap(uint8_t usb_led) {}
-
-void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); }
-
-__attribute__((weak)) void suspend_power_down_keymap(void) {}
-
-void suspend_power_down_user(void) { suspend_power_down_keymap(); }
-
-__attribute__((weak)) void suspend_wakeup_init_keymap(void) {}
-
-void suspend_wakeup_init_user(void) {
- suspend_wakeup_init_keymap();
-#ifdef KEYBOARD_ergodox_ez
- wait_ms(10);
-#endif
-}
diff --git a/users/drashna/template.h b/users/drashna/template.h
deleted file mode 100644
index bb08bb3e41..0000000000
--- a/users/drashna/template.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include QMK_KEYBOARD_H
-#include "version.h"
-#include "eeprom.h"
-
-// Define layer names
-#define BASE 0
-
-enum custom_keycodes {
- VRSN = SAFE_RANGE, // can always be here
- QK_MAKE,
- QK_BOOT,
- NEWPLACEHOLDER // use "NEWPLACEHOLDER for keymap specific codes
-};