128x32 OLED Overhaul and more

- Limit to eight layers to save MCU space
- Tweaked default rules.mk for WPM, Audio, etc
- Added Luna Pet OLED code and modified to my standard
- Enabled Drag Scroll OLED indicator
- Increased Split Communications (layers, LED state, Mods)
- Cleaned up OLED Code and overhauled screen.
- Data is on both halves now, no more split side logo
- Added WPM counter
- Added graphics for layers, mods, features, small QMK logo
- Leveraged KLOR font and added my own images
- Made LTO disabled by default since I'm team RP2040
This commit is contained in:
Victor 2024-05-28 12:43:28 -05:00
parent b3d323769a
commit 2036b62a89
Failed to generate hash of commit
9 changed files with 347 additions and 495 deletions

View file

@ -1,6 +1,7 @@
# override userspace defaults # override userspace defaults
DYNAMIC_MACRO_ENABLE = no DYNAMIC_MACRO_ENABLE = no
WPM_ENABLE = no
# override keyboard defaults # override keyboard defaults
# keyboards\crkbd\info.json # keyboards\crkbd\info.json

View file

@ -16,15 +16,13 @@
#undef LOCKING_SUPPORT_ENABLE #undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE #undef LOCKING_RESYNC_ENABLE
//Clear variables we plan to use that might be set elsewhere //Clear variables we plan to use that might be set elsewhere
#undef USB_POLLING_INTERVAL_MS #undef USB_POLLING_INTERVAL_MS
#undef LAYER_STATE_8BIT
//Set common configuration for all keyboards //Set common configuration for all keyboards
#define USB_POLLING_INTERVAL_MS 1 #define USB_POLLING_INTERVAL_MS 1
#define LAYER_STATE_8BIT

View file

@ -4,12 +4,6 @@
* *
* https://docs.qmk.fm/#/feature_split_keyboard * https://docs.qmk.fm/#/feature_split_keyboard
* *
*
* needed for for the rgb matrix indicators to work
* - SPLIT_LAYER_STATE_ENABLE
* - SPLIT_LED_STATE_ENABLE
* - SPLIT_MODS_ENABLE
*
*/ */
//Clear variables we plan to use that might be set elsewhere //Clear variables we plan to use that might be set elsewhere
@ -24,9 +18,11 @@
//Set common configuration for all keyboards //Set common configuration for all keyboards
#define SPLIT_TRANSPORT_MIRROR #define SPLIT_TRANSPORT_MIRROR
#define SPLIT_LAYER_STATE_ENABLE
#define SPLIT_LED_STATE_ENABLE
#define SPLIT_MODS_ENABLE
#define SPLIT_OLED_ENABLE #define SPLIT_OLED_ENABLE
#define SPLIT_ACTIVITY_ENABLE #define SPLIT_ACTIVITY_ENABLE
#define SPLIT_WPM_ENABLE #define SPLIT_WPM_ENABLE
#define MASTER_RIGHT #define MASTER_RIGHT

View file

@ -1,202 +1,106 @@
#include "oled.h" #include "oled.h"
/* KEYBOARD PET START */ /* LUNA PET START */
/* settings */ #if defined(WPM_ENABLE)
# define MIN_WALK_SPEED 10
# define MIN_RUN_SPEED 40
/* advanced settings */ static uint32_t luna_anim_timer = 0;
# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms static uint8_t luna_current_frame = 0;
# define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024
/* timers */ void render_luna(void) {
uint32_t anim_timer = 0;
/* current frame */ #if OLED_TIMEOUT > 0
uint8_t current_frame = 0; // the animation prevents the normal timeout from occuring
/*
bool isSneaking = false;
bool isJumping = false;
bool showedJump = true;
*/
/* logic */
static void render_luna(int LUNA_X, int LUNA_Y) {
/* Sit */
static const char PROGMEM sit[2][ANIM_SIZE] = {/* 'sit1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x68, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'sit2', 32x22px */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x08, 0x18, 0x60, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
/* Walk */
static const char PROGMEM walk[2][ANIM_SIZE] = {/* 'walk1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x90, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x80, 0x80, 0x70, 0x08, 0x14, 0x08, 0x90, 0x10, 0x10, 0x08, 0xa4, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0xea, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x03, 0x06, 0x18, 0x20, 0x20, 0x3c, 0x0c, 0x12, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'walk2', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x28, 0x10, 0x20, 0x20, 0x20, 0x10, 0x48, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x20, 0xf8, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x30, 0xd5, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x02, 0x1c, 0x14, 0x08, 0x10, 0x20, 0x2c, 0x32, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* Run */
static const char PROGMEM run[2][ANIM_SIZE] = {/* 'run1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0xc8, 0xb0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0xc4, 0xa4, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x58, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x04, 0x04, 0x04, 0x04, 0x02, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'run2', 32x22px */
{
0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x78, 0x28, 0x08, 0x10, 0x20, 0x30, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0xb0, 0x50, 0x55, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x1e, 0x20, 0x20, 0x18, 0x0c, 0x14, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* Bark */
static const char PROGMEM bark[2][ANIM_SIZE] = {/* 'bark1', 32x22px */
{
0x00, 0xc0, 0x20, 0x10, 0xd0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'bark2', 32x22px */
{
0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x2c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x20, 0x4a, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* Sneak */
static const char PROGMEM sneak[2][ANIM_SIZE] = {/* 'sneak1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x21, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x04, 0x04, 0x04, 0x03, 0x01, 0x00, 0x00, 0x09, 0x01, 0x80, 0x80, 0xab, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x02, 0x06, 0x18, 0x20, 0x20, 0x38, 0x08, 0x10, 0x18, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
},
/* 'sneak2', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xa0, 0x20, 0x40, 0x80, 0xc0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x40, 0x55, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x04, 0x18, 0x10, 0x08, 0x10, 0x20, 0x28, 0x34, 0x06, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* animation */
void animate_luna(void) {
/* jump */
if (isLunaJumping() || !isLunaShowedJump()) {
/* clear */
oled_set_cursor(LUNA_X, LUNA_Y + 2);
oled_write(" ", false);
oled_set_cursor(LUNA_X, LUNA_Y - 1);
setLunaShowedJump(true);
} else {
/* clear */
oled_set_cursor(LUNA_X, LUNA_Y - 1);
oled_write(" ", false);
oled_set_cursor(LUNA_X, LUNA_Y);
}
/* switch frame */
current_frame = (current_frame + 1) % 2;
/* current status */
if (host_keyboard_led_state().caps_lock || is_caps_word_on()) {
oled_write_raw_P(bark[current_frame], ANIM_SIZE);
} else if (isLunaSneaking()) {
oled_write_raw_P(sneak[current_frame], ANIM_SIZE);
} else if (get_current_wpm() <= MIN_WALK_SPEED) {
oled_write_raw_P(sit[current_frame], ANIM_SIZE);
} else if (get_current_wpm() <= MIN_RUN_SPEED) {
oled_write_raw_P(walk[current_frame], ANIM_SIZE);
} else {
oled_write_raw_P(run[current_frame], ANIM_SIZE);
}
}
# if OLED_TIMEOUT > 0
/* the animation prevents the normal timeout from occuring */
if (last_input_activity_elapsed() > OLED_TIMEOUT && last_led_activity_elapsed() > OLED_TIMEOUT) { if (last_input_activity_elapsed() > OLED_TIMEOUT && last_led_activity_elapsed() > OLED_TIMEOUT) {
oled_off(); oled_off();
return; return;
} else { } else {
oled_on(); oled_on();
} }
# endif #endif //OLED_TIMEOUT
/* animation timer */ if (timer_elapsed32(luna_anim_timer) > OLED_LUNA_ANIM_FRAME_DURATION) {
if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { luna_anim_timer = timer_read32();
anim_timer = timer_read32(); animate_luna(OLED_LUNA_X, OLED_LUNA_Y);
animate_luna();
} }
} }
void animate_luna(int LUNA_X, int LUNA_Y) {
uint8_t current_mod = get_mods();
uint8_t current_osm = get_oneshot_mods();
// Make Luna Jump when spacebar is pressed
// Only works when Luna is rendered on Master Slide
if (isLunaJumping() || !isJumpShown()) {
/* clear */
oled_set_cursor(LUNA_X, LUNA_Y + 2);
oled_write(" ", false);
oled_set_cursor(LUNA_X, LUNA_Y - 1);
setLunaJumped();
} else {
/* clear */
oled_set_cursor(LUNA_X, LUNA_Y - 1);
oled_write(" ", false);
oled_set_cursor(LUNA_X, LUNA_Y);
}
luna_current_frame = (luna_current_frame + 1) % 2;
// Animate based on status
if (host_keyboard_led_state().caps_lock || is_caps_word_on()) {
oled_write_raw_P(bark[luna_current_frame], OLED_LUNA_ANIM_SIZE);
} else if ((current_mod | current_osm) & MOD_MASK_CTRL) {
oled_write_raw_P(sneak[luna_current_frame], OLED_LUNA_ANIM_SIZE);
} else if (get_current_wpm() <= OLED_LUNA_MIN_WALK_SPEED) {
oled_write_raw_P(sit[luna_current_frame], OLED_LUNA_ANIM_SIZE);
} else if (get_current_wpm() <= OLED_LUNA_MIN_RUN_SPEED) {
oled_write_raw_P(walk[luna_current_frame], OLED_LUNA_ANIM_SIZE);
} else {
oled_write_raw_P(run[luna_current_frame], OLED_LUNA_ANIM_SIZE);
}
}
#endif //WPM_ENABLE
/* KEYBOARD PET END */ /* KEYBOARD PET END */
// Prints the current base layer
// (e.g. Qwerty, Colemak DH, etc)
void render_crkbd_logo(void) {
oled_write_P(crkbd_logo, false);
}
void render_rollow_logo(void) {
oled_write_raw_P(rollow_logo, sizeof(rollow_logo));
}
void render_qmk_logo(void) {
oled_write_raw_P(qmk_logo, sizeof(qmk_logo));
}
void render_default_layer_state(void) { void render_default_layer_state(void) {
switch (get_highest_layer(default_layer_state)) { switch (get_highest_layer(default_layer_state)) {
case _QWERTY: case _QWERTY:
oled_write_P(PSTR(OLED_RENDER_LAYOUT_QWERTY), false); oled_write_P(PSTR(OLED_RENDER_LAYOUT_QWERTY), false);
break; break;
case _COLEMAK_DH: case _COLEMAK_DH:
oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK_DH), false); oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK_DH), false);
break; break;
case _GAME: case _GAME:
oled_write_ln_P(PSTR(OLED_RENDER_LAYOUT_GAME), false); oled_write_ln_P(PSTR(OLED_RENDER_LAYOUT_GAME), false);
break; break;
} }
} }
// Shows the currently enabled Layer name
// Also shows where on the layer stack it is
void render_layer_state(void) { void render_layer_state(void) {
switch (get_highest_layer(layer_state)) { switch (get_highest_layer(layer_state)) {
@ -217,35 +121,42 @@ void render_layer_state(void) {
break; break;
} }
oled_write_ln_P(PSTR(" "),false);
switch (get_highest_layer(layer_state)) {
case _NAVIGATION:
oled_write_P(lyr_nav, false );
break;
case _NUMBER:
oled_write_P(lyr_num, false );
break;
case _SYMBOL:
oled_write_P(lyr_sym, false );
break;
case _CONFIG:
oled_write_P(lyr_cfg, false );
break;
default:
oled_write_P(lyr_def, false );
break;
}
} }
// Shows the Host LED State (Num lock, caps lock , scroll lock)
void render_keylock_status(void) { void render_keylock_status(void) {
oled_write_ln_P(PSTR(OLED_RENDER_KEYLOCK_NAME), false); oled_write_ln_P(PSTR(OLED_RENDER_KEYLOCK_NAME), false);
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
if( host_keyboard_led_state().num_lock ) { host_keyboard_led_state().num_lock ? oled_write_P(num_on, false ) : oled_write_P(num_off, false );
oled_write_P(num_on, false ); host_keyboard_led_state().caps_lock || is_caps_word_on() ? oled_write_P(caps_on, false ) : oled_write_P(caps_off, false );
}else { host_keyboard_led_state().scroll_lock ? oled_write_ln_P(scroll_on, false ) : oled_write_ln_P(scroll_off, false );
oled_write_P(num_off, false );
}
if( host_keyboard_led_state().caps_lock || is_caps_word_on() ) {
oled_write_P(caps_on, false );
}else {
oled_write_P(caps_off, false );
}
if( host_keyboard_led_state().scroll_lock ) {
oled_write_ln_P(scroll_on, false );
}else {
oled_write_ln_P(scroll_off, false );
}
} }
// Indicates which modifies are enabled
void render_mod_status(void) { void render_mod_status(void) {
uint8_t current_mod = get_mods(); uint8_t current_mod = get_mods();
@ -254,120 +165,79 @@ void render_mod_status(void) {
oled_write_ln_P(PSTR(OLED_RENDER_MODS_NAME), false); oled_write_ln_P(PSTR(OLED_RENDER_MODS_NAME), false);
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
if( (current_mod | current_osm) & MOD_MASK_SHIFT ) { (current_mod | current_osm) & MOD_MASK_SHIFT ? oled_write_P(shift_on, false) : oled_write_P(shift_off, false );
oled_write_P(shift_on, false ); (current_mod | current_osm) & MOD_MASK_CTRL ? oled_write_P(ctrl_on, false ) : oled_write_P(ctrl_off, false );
}else {
oled_write_P(shift_off, false );
}
if( (current_mod | current_osm) & MOD_MASK_CTRL ) {
oled_write_P(ctrl_on, false );
}else {
oled_write_P(ctrl_off, false );
}
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
if( (current_mod | current_osm) & MOD_MASK_ALT ) { (current_mod | current_osm) & MOD_MASK_ALT ? oled_write_P(alt_on, false ): oled_write_P(alt_off, false );
oled_write_P(alt_on, false ); (current_mod | current_osm) & MOD_MASK_GUI ? oled_write_P(gui_on, false ): oled_write_P(gui_off, false );
}else {
oled_write_P(alt_off, false );
}
if( (current_mod | current_osm) & MOD_MASK_GUI ) {
oled_write_P(gui_on, false );
}else {
oled_write_P(gui_off, false );
}
} }
// Indicates which features are turned on or off
void render_feature_status(void) { void render_feature_status(void) {
oled_write_ln_P(PSTR(OLED_RENDER_FEATURE_NAME), false); oled_write_ln_P(PSTR(OLED_RENDER_FEATURE_NAME), false);
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
#if defined(RGB_MATRIX_ENABLE) #if defined(RGB_MATRIX_ENABLE)
if (rgb_matrix_is_enabled()) { rgb_matrix_is_enabled() ? oled_write_P(rgb_on, false) : oled_write_P(rgb_off, false);
oled_write_P(rgb_on, false);
} else {
oled_write_P(rgb_off, false);
}
#else #else
oled_write_P(rgb_off, false); oled_write_P(rgb_off, false);
#endif #endif //RGB_MATRIX_ENABLED
if(drag_scroll_is_enabled()) { // only works on master side
oled_write_P(dragscr_on, false); drag_scroll_is_enabled() ? oled_write_P(dragscr_on, false) : oled_write_P(dragscr_off, false);
} else {
oled_write_P(dragscr_off, false);
}
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
#if defined(AUDIO_ENABLE) #if defined(AUDIO_ENABLE)
if (is_audio_on()) { is_audio_on() ? oled_write_P(sound_on, false) : oled_write_P(sound_off, false);
oled_write_P(audio_on, false);
} else {
oled_write_P(audio_off, false);
}
#else #else
oled_write_P(audio_off, false); oled_write_P(sound_off, false);
#endif //AUDIO_ENABLE #endif //AUDIO_ENABLE
#if defined(HAPTIC_ENABLE) #if defined(HAPTIC_ENABLE)
if (haptic_get_enable()) { haptic_get_enable() ? oled_write_P(haptic_on, false) : oled_write_P(haptic_off, false);
oled_write_P(haptic_on, false);
} else {
oled_write_P(haptic_off, false);
}
#else #else
oled_write_P(haptic_off, false); oled_write_P(haptic_off, false);
#endif //AUDIO_ENABLE #endif //HAPTIC_ENABLE
} }
void render_oled_main(void) { // Coordinate the OLED rendering
bool oled_task_user(void) {
//process_record_user is only processed on master side
//split side OLED does not respond to key presses custom behaviors
if (is_keyboard_master()) {
render_keylock_status();
oled_write_ln_P(PSTR(" "), false);
render_feature_status();
#if defined(WPM_ENABLE)
oled_write_ln_P(PSTR(" "), false);
oled_write_ln_P(PSTR(OLED_RENDER_WPM_NAME), false);
oled_write_P(PSTR(" "), false);
oled_write_P(get_u8_str(get_current_wpm(), ' '), false);
render_luna();
#endif //WPM_ENABLE
} else {
render_default_layer_state(); render_default_layer_state();
render_layer_state(); render_layer_state();
oled_write_ln_P(PSTR(" "), false);
render_keylock_status();
oled_write_ln_P(PSTR(" "), false); oled_write_ln_P(PSTR(" "), false);
render_mod_status(); render_mod_status();
oled_write_ln_P(PSTR(" "), false); oled_write_ln_P(PSTR(" "), false);
render_feature_status(); oled_write_P(qmk_logo_small, false);
}
bool oled_task_user(void) {
if (is_keyboard_master()) {
render_oled_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
} else {
#if defined(KEYBOARD_barbellboards_rollow)
render_rollow_logo();
#elif defined(KEYBOARD_crkbd)
render_crkbd_logo();
#else
//render_qmk_logo();
/* KEYBOARD PET RENDER START */
render_luna(0, 13);
/* KEYBOARD PET RENDER END */
#endif
} }
return false; return false;
@ -375,15 +245,6 @@ bool oled_task_user(void) {
} }
oled_rotation_t oled_init_user(oled_rotation_t rotation) { oled_rotation_t oled_init_user(oled_rotation_t rotation) {
#if !defined(KEYBOARD_klor_2040)
if (is_keyboard_master()) {
return OLED_ROTATION_270; return OLED_ROTATION_270;
}
#endif
return OLED_ROTATION_270;
} }

View file

@ -2,10 +2,10 @@
#include "t4corun.h" #include "t4corun.h"
#define OLED_RENDER_KEYLOCK_NAME "Lock" #define OLED_RENDER_KEYLOCK_NAME "Lock"
#define OLED_RENDER_MODS_NAME "Mods" #define OLED_RENDER_MODS_NAME "Mods"
#define OLED_RENDER_FEATURE_NAME "Feat" #define OLED_RENDER_FEATURE_NAME "Feat"
#define OLED_RENDER_WPM_NAME "Wpm"
#define OLED_RENDER_LAYOUT_QWERTY "QWRTY" #define OLED_RENDER_LAYOUT_QWERTY "QWRTY"
#define OLED_RENDER_LAYOUT_COLEMAK_DH "CLMAK" #define OLED_RENDER_LAYOUT_COLEMAK_DH "CLMAK"
@ -17,121 +17,152 @@
#define OLED_RENDER_LAYER_SYMBOL " Sym" #define OLED_RENDER_LAYER_SYMBOL " Sym"
#define OLED_RENDER_LAYER_CONFIG " Cfg" #define OLED_RENDER_LAYER_CONFIG " Cfg"
void render_crkbd_logo(void);
void render_rollow_logo(void); // LUNA PET Variables
void render_qmk_logo(void); #if defined(WPM_ENABLE)
# define OLED_LUNA_X 0
# define OLED_LUNA_Y 13
# define OLED_LUNA_MIN_WALK_SPEED 10
# define OLED_LUNA_MIN_RUN_SPEED 40
# define OLED_LUNA_ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
# define OLED_LUNA_ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024
void render_luna(void);
void animate_luna(int LUNA_X, int LUNA_Y);
#endif //WPM_ENABLE
void render_default_layer_state(void); void render_default_layer_state(void);
void render_layer_state(void); void render_layer_state(void);
void render_keylock_status(void); void render_keylock_status(void);
void render_mod_status(void); void render_mod_status(void);
void render_feature_status(void); void render_feature_status(void);
void render_oled_main(void);
bool oled_task_user(void); bool oled_task_user(void);
oled_rotation_t oled_init_user(oled_rotation_t rotation); oled_rotation_t oled_init_user(oled_rotation_t rotation);
static const char PROGMEM sep_v32[] = {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0};
static const char PROGMEM num_on[] = {0x91, 0};
static const char PROGMEM num_off[] = {0xAD, 0};
static const char PROGMEM caps_on[] = {0x93, 0};
static const char PROGMEM caps_off[] = {0xCD, 0};
static const char PROGMEM scroll_on[] = {0x8F, 0};
static const char PROGMEM scroll_off[] = {0x8D, 0}; static const char PROGMEM scroll_off[] = {0x8D, 0};
static const char PROGMEM scroll_on[] = {0x8E, 0};
static const char PROGMEM num_off[] = {0xAD, 0};
static const char PROGMEM num_on[] = {0xAE, 0};
static const char PROGMEM caps_off[] = {0xCD, 0};
static const char PROGMEM caps_on[] = {0xCE, 0};
static const char PROGMEM shift_on[] = {0x87, 0x88, 0};
static const char PROGMEM shift_off[] = {0x85, 0x86, 0}; static const char PROGMEM shift_off[] = {0x85, 0x86, 0};
static const char PROGMEM shift_on[] = {0x87, 0x88, 0};
static const char PROGMEM ctrl_on[] = {0xAB, 0xAC, 0};
static const char PROGMEM ctrl_off[] = {0xA9, 0xAA, 0}; static const char PROGMEM ctrl_off[] = {0xA9, 0xAA, 0};
static const char PROGMEM ctrl_on[] = {0xAB, 0xAC, 0};
static const char PROGMEM alt_on[] = {0xA7, 0xA8, 0};
static const char PROGMEM alt_off[] = {0xA5, 0xA6, 0}; static const char PROGMEM alt_off[] = {0xA5, 0xA6, 0};
static const char PROGMEM alt_on[] = {0xA7, 0xA8, 0};
static const char PROGMEM gui_on[] = {0x8B, 0x8C, 0};
static const char PROGMEM gui_off[] = {0x89, 0x8A, 0}; static const char PROGMEM gui_off[] = {0x89, 0x8A, 0};
static const char PROGMEM gui_on[] = {0x8B, 0x8C, 0};
static const char PROGMEM rgb_on[] = {0xC7, 0xC8, 0};
static const char PROGMEM rgb_off[] = {0xC5, 0xC6, 0}; static const char PROGMEM rgb_off[] = {0xC5, 0xC6, 0};
static const char PROGMEM rgb_on[] = {0xC7, 0xC8, 0};
static const char PROGMEM dragscr_on[] = {0xBD, 0xBE, 0}; static const char PROGMEM dragscr_off[] = {0xC9, 0xCA, 0};
static const char PROGMEM dragscr_off[] = {0x9D, 0x9E, 0}; static const char PROGMEM dragscr_on[] = {0xCB, 0xCC, 0};
static const char PROGMEM audio_on[] = {0xAF, 0xB0, 0}; static const char PROGMEM sound_off[] = {0x8F, 0x90, 0};
static const char PROGMEM audio_off[] = {0xCF, 0xD0, 0}; static const char PROGMEM sound_on[] = {0xAF, 0xB0, 0};
static const char PROGMEM haptic_off[] = {0x91, 0x92, 0};
static const char PROGMEM haptic_on[] = {0xB1, 0xB2, 0}; static const char PROGMEM haptic_on[] = {0xB1, 0xB2, 0};
static const char PROGMEM haptic_off[] = {0xB3, 0xB4, 0};
static const char PROGMEM lyr_cfg[] = {
static const char PROGMEM crkbd_logo[] = { 0xE1, 0xD1, 0xD2, 0xD3, 0xE1,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0xE1, 0xBA, 0xBB, 0xBC, 0xE1,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xE1, 0xB7, 0xB8, 0xB9, 0xE1,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xE1, 0xD7, 0xD8, 0xD9, 0xE1, 0x00
0
}; };
// copied from Drashna static const char PROGMEM lyr_sym[] = {
static const char PROGMEM qmk_logo[] = { // 128x24 0xE1, 0x97, 0x98, 0x99, 0xE1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xF0, 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, 0xE1, 0xDA, 0xDB, 0xDC, 0xE1,
0xF8, 0x3F, 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0xF0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0xE1, 0xB7, 0xB8, 0xB9, 0xE1,
0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0xE1, 0xD7, 0xD8, 0xD9, 0xE1, 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, static const char PROGMEM lyr_num[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x97, 0x98, 0x99, 0xE1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x9A, 0x9B, 0x9C, 0xE1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xDF, 0xBF, 0xE1, 0xBA, 0xBB, 0xBC, 0xE1,
0xBF, 0x00, 0xBF, 0xBF, 0xDF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0xE1, 0xD7, 0xD8, 0xD9, 0xE1, 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, static const char PROGMEM lyr_nav[] = {
0x03, 0x03, 0x7E, 0x7E, 0x03, 0x03, 0x7F, 0x7E, 0x00, 0x0F, 0x3E, 0x70, 0x3C, 0x06, 0x3C, 0x70, 0xE1, 0x97, 0x98, 0x99, 0xE1,
0x3E, 0x0F, 0x00, 0x32, 0x7B, 0x49, 0x49, 0x3F, 0x7E, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00, 0x1E, 0xE1, 0xB7, 0xB8, 0xB9, 0xE1,
0x3F, 0x69, 0x69, 0x6F, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xDA, 0xDB, 0xDC, 0xE1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07, 0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F, 0xE1, 0xD7, 0xD8, 0xD9, 0xE1, 0x00
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, static const char PROGMEM lyr_def[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x97, 0x98, 0x99, 0xE1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xB7, 0xB8, 0xB9, 0xE1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x9A, 0x9B, 0x9C, 0xE1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0xE1, 0xD4, 0xD5, 0xD6, 0xE1, 0x00
};
static const char PROGMEM qmk_logo_small[] = {
0xE1, 0x9D, 0x9E, 0x9F, 0xE1,
0xE1, 0xBD, 0xBE, 0xBF, 0xE1,
0xE1, 0xDD, 0xDE, 0xDF, 0xE1, 0x00
}; };
static const char PROGMEM rollow_logo[] = { // 128x32
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, #if defined(WPM_ENABLE)
0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Luna Sit
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, static const char PROGMEM sit[2][OLED_LUNA_ANIM_SIZE] = {
0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 'sit1', 32x22px */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x68, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00,
0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 'sit2', 32x22px */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff, 0xff, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x08, 0x18, 0x60, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xe0, 0xe0, 0x80, 0x80, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0xf0, 0xf8, 0xf8,
0xf8, 0x3c, 0xfc, 0xf8, 0xf8, 0xf0, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xf0, 0xf8, 0xf8, 0xfc, 0x3c, 0xf8, 0xf8, 0xf8, 0xf0,
0xc0, 0x08, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0xf8, 0xf8, 0xf8, 0xf8, 0xe0, 0xe0, 0xf8, 0xf8, 0xf8,
0xf8, 0x00, 0x00, 0x80, 0x80, 0xe0, 0xe0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x07, 0x07, 0x01, 0x01, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xff,
0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff,
0x7f, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x07, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x01, 0x01, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03,
0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01,
0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x0f, 0x0f, 0x00,
0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}; };
// Luna Walk
static const char PROGMEM walk[2][OLED_LUNA_ANIM_SIZE] = {
/* 'walk1', 32x22px */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x90, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x80, 0x80, 0x70, 0x08, 0x14, 0x08, 0x90, 0x10, 0x10, 0x08, 0xa4, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0xea, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x03, 0x06, 0x18, 0x20, 0x20, 0x3c, 0x0c, 0x12, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
/* 'walk2', 32x22px */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x28, 0x10, 0x20, 0x20, 0x20, 0x10, 0x48, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x20, 0xf8, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x30, 0xd5, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x02, 0x1c, 0x14, 0x08, 0x10, 0x20, 0x2c, 0x32, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}
};
// Luna Run
static const char PROGMEM run[2][OLED_LUNA_ANIM_SIZE] = {
/* 'run1', 32x22px */
{0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0xc8, 0xb0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0xc4, 0xa4, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x58, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x04, 0x04, 0x04, 0x04, 0x02, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,},
/* 'run2', 32x22px */
{0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x78, 0x28, 0x08, 0x10, 0x20, 0x30, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0xb0, 0x50, 0x55, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x1e, 0x20, 0x20, 0x18, 0x0c, 0x14, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}
};
// Luna Bark
static const char PROGMEM bark[2][OLED_LUNA_ANIM_SIZE] = {
/* 'bark1', 32x22px */
{0x00, 0xc0, 0x20, 0x10, 0xd0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
/* 'bark2', 32x22px */
{0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x2c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x20, 0x4a, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}
};
// Luna Sneak
static const char PROGMEM sneak[2][OLED_LUNA_ANIM_SIZE] = {
/* 'sneak1', 32x22px */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x21, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x04, 0x04, 0x04, 0x03, 0x01, 0x00, 0x00, 0x09, 0x01, 0x80, 0x80, 0xab, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x02, 0x06, 0x18, 0x20, 0x20, 0x38, 0x08, 0x10, 0x18, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,},
/* 'sneak2', 32x22px */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xa0, 0x20, 0x40, 0x80, 0xc0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x40, 0x55, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x04, 0x18, 0x10, 0x08, 0x10, 0x20, 0x28, 0x34, 0x06, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,}
};
#endif //WPM_ENABLE

View file

@ -148,24 +148,24 @@ static const unsigned char PROGMEM font[] = {
0x7F, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x7F, 0x7F, 0x08, 0x08, 0x08, 0x7F,
0x08, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x08, 0x08, 0x08, 0x7F, 0x7F, 0x00,
0x00, 0x2E, 0x2A, 0x2A, 0x3A, 0x00, 0x00, 0x2E, 0x2A, 0x2A, 0x3A, 0x00,
0x3E, 0x20, 0x20, 0x20, 0x00, 0x00,
0x7F, 0x51, 0x55, 0x55, 0x45, 0x7F, 0x7F, 0x51, 0x55, 0x55, 0x45, 0x7F,
0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x38,
0x7F, 0x41, 0x7B, 0x77, 0x41, 0x7F, 0x00, 0x3C, 0x00, 0x30, 0x00, 0x00,
0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, 0x00, 0x24, 0x24, 0x12, 0x12, 0x24,
0x7F, 0x41, 0x5D, 0x5D, 0x5D, 0x7F, 0x24, 0x12, 0x12, 0x24, 0x00, 0x00,
0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0,
0xE6, 0xF7, 0xF3, 0xF0, 0x60, 0x00, 0xE6, 0xF7, 0xF3, 0xF0, 0x60, 0x00,
0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20,
0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x10, 0x10, 0x08, 0x08, 0x10, 0x10,
0xF8, 0x1C, 0xDE, 0x1F, 0xFF, 0xFF, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
0xFF, 0x1F, 0xDE, 0x1C, 0xF8, 0x00, 0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2,
0xC0, 0xE2, 0xB4, 0xF8, 0xF8, 0xF8, 0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4,
0xF8, 0xF8, 0xB4, 0xE2, 0xC0, 0x00, 0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88,
0x7F, 0x01, 0x01, 0x01, 0x01, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x01, 0x01, 0x01, 0x01, 0x7F, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x07, 0x0F, 0x0F, 0x0F,
0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
0x87, 0xE1, 0xF9, 0xF9, 0xE1, 0x87, 0x87, 0xE1, 0xF9, 0xF9, 0xE1, 0x87,
@ -180,54 +180,54 @@ static const unsigned char PROGMEM font[] = {
0x7F, 0x1F, 0x0F, 0x47, 0x63, 0x71, 0x7F, 0x1F, 0x0F, 0x47, 0x63, 0x71,
0x63, 0x47, 0x0F, 0x1F, 0x7F, 0x00, 0x63, 0x47, 0x0F, 0x1F, 0x7F, 0x00,
0x00, 0x3E, 0x04, 0x08, 0x3E, 0x00, 0x00, 0x3E, 0x04, 0x08, 0x3E, 0x00,
0x3E, 0x20, 0x20, 0x20, 0x00, 0x00, 0x7F, 0x41, 0x7B, 0x77, 0x41, 0x7F,
0x7F, 0x43, 0x7F, 0x41, 0x7F, 0x47, 0x7F, 0x43, 0x7F, 0x41, 0x7F, 0x47,
0x7F, 0x43, 0x7F, 0x4F, 0x7F, 0x00, 0x7F, 0x43, 0x7F, 0x4F, 0x7F, 0x00,
0x7F, 0x5B, 0x5B, 0x6D, 0x6D, 0x5B, 0x7F, 0x5B, 0x5B, 0x6D, 0x6D, 0x5B,
0x5B, 0x6D, 0x6D, 0x5B, 0x7F, 0x00, 0x5B, 0x6D, 0x6D, 0x5B, 0x7F, 0x00,
0x00, 0x24, 0x24, 0x12, 0x12, 0x24, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
0x24, 0x12, 0x12, 0x24, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x3F, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x3F,
0x3F, 0x7F, 0x7F, 0x38, 0x10, 0x00, 0x3F, 0x7F, 0x7F, 0x38, 0x10, 0x00,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x44, 0x44, 0x88, 0x88, 0x44, 0x44,
0x0F, 0x14, 0x21, 0x40, 0x45, 0x41, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88,
0x45, 0x40, 0x21, 0x14, 0x0F, 0x00, 0x88, 0x88, 0x55, 0x55, 0x23, 0x23,
0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47,
0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x00, 0x23, 0x23, 0x55, 0x55, 0x88, 0x88,
0x7F, 0x7F, 0x7F, 0x7F, 0x01, 0x3D, 0x00, 0xA8, 0xA8, 0xFC, 0xFE, 0x07,
0x01, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0xFE, 0xFF, 0xFE, 0x07, 0xFE, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xFE, 0xFC, 0xA8, 0xA8,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00,
0x00, 0x00, 0x00, 0x1C, 0x62, 0x0A, 0x00, 0x00, 0x00, 0x1C, 0x62, 0x0A,
0x62, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x62, 0x1C, 0x00, 0x00, 0x00, 0x00,
0x7F, 0x57, 0x7D, 0x67, 0x02, 0x1B, 0x7F, 0x57, 0x7D, 0x67, 0x02, 0x1B,
0x02, 0x67, 0x7D, 0x57, 0x7F, 0x00, 0x02, 0x67, 0x7D, 0x57, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x01, 0x01, 0x01, 0x01, 0x3F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x03, 0x3B,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7F, 0x7F, 0x7F, 0x7F, 0x00,
0x00, 0x3E, 0x22, 0x22, 0x22, 0x00, 0x00, 0x3E, 0x22, 0x22, 0x22, 0x00,
0x3E, 0x20, 0x20, 0x20, 0x00, 0x00, 0x7F, 0x41, 0x5D, 0x5D, 0x5D, 0x7F,
0x00, 0x3C, 0x00, 0x3E, 0x00, 0x38,
0x00, 0x3C, 0x00, 0x30, 0x00, 0x00,
0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00,
0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x00,
0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0x80, 0xC0, 0xC0, 0xE0, 0xE0,
0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0,
0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80,
0x00, 0x00, 0x01, 0x01, 0x03, 0x03,
0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07,
0x03, 0x03, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
0x04, 0x04, 0x08, 0x08, 0x04, 0x04,
0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E,
0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C,
0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88,
0x00, 0x0A, 0x0A, 0x1F, 0x3F, 0xFE,
0x3D, 0xFB, 0x3B, 0xE0, 0x3B, 0xFB,
0x3D, 0xFE, 0x3F, 0x1F, 0x0A, 0x0A,
}; };

View file

@ -10,8 +10,9 @@
# ?= means set the value if its not defined elsewhere # ?= means set the value if its not defined elsewhere
# optional features
LTO_ENABLE ?= yes # use these values if not defined at the keyboard level
LTO_ENABLE ?= no
MAGIC_ENABLE ?= no MAGIC_ENABLE ?= no
CONSOLE_ENABLE ?= no CONSOLE_ENABLE ?= no
UNICODE_ENABLE ?= no UNICODE_ENABLE ?= no
@ -27,15 +28,15 @@ ENCODER_ENABLE ?= no
ENCODER_MAP_ENABLE ?= no ENCODER_MAP_ENABLE ?= no
HAPTIC_ENABLE ?= no HAPTIC_ENABLE ?= no
AUDIO_ENABLE ?= no AUDIO_ENABLE ?= no
WPM_ENABLE ?= yes
# qmk features we will force # qmk features we will force as these are critical for my workflow
EXTRAKEY_ENABLE = yes EXTRAKEY_ENABLE = yes
CAPS_WORD_ENABLE = yes CAPS_WORD_ENABLE = yes
MOUSEKEY_ENABLE = yes MOUSEKEY_ENABLE = yes
COMBO_ENABLE = yes COMBO_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes KEY_OVERRIDE_ENABLE = yes
MUSIC_MODE = no
WPM_ENABLE = yes
# --------------------------------------------------------- # ---------------------------------------------------------
# include my code that will be common across all my keyboards # include my code that will be common across all my keyboards
@ -49,8 +50,12 @@ SRC += \
INTROSPECTION_KEYMAP_C += features/combo.c INTROSPECTION_KEYMAP_C += features/combo.c
# --------------------------------------------------------- # ---------------------------------------------------------
# include my code for enabled features for each keyboard # include optional code for enabled features for each keyboard
ifeq ($(strip $(OLED_ENABLE)), yes) ifeq ($(strip $(OLED_ENABLE)), yes)
SRC += features/oled.c SRC += features/oled.c
endif endif
ifeq ($(strip $(AUDIO_ENABLE)), yes)
MUSIC_MODE = no
endif

View file

@ -1,82 +1,47 @@
#include "t4corun.h" #include "t4corun.h"
// Keeps track of base layer so we can make one key to cycle through them
// instead of making a key for each one */
static uint8_t current_base_layer = _DEFAULT_LAYER_1; static uint8_t current_base_layer = _DEFAULT_LAYER_1;
// Should keep track of the Ploopy Nano drag scroll mode
// There is a possibility of this being out of sync
static bool drag_scroll_enabled = false; static bool drag_scroll_enabled = false;
// Luna Pet Variables
/* Luna variables */
static bool isSneaking = false;
static bool isJumping = false; static bool isJumping = false;
static bool showedJump = true; static bool showedJump = true;
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _NAVIGATION, _NUMBER, _SYMBOL);; // Allows the OLED code to get the drag scroll mode
bool drag_scroll_is_enabled(void) { return drag_scroll_enabled; }
} // Allows the OLED code to see when space bar is pressed
bool isLunaJumping(void) { return isJumping; }
bool isJumpShown(void) { return showedJump; }
bool drag_scroll_is_enabled(void) { // Allows the OLED code to clear the space bar status when render is complete
void setLunaJumped(void) { showedJump = true;}
/* // Hold Navigation and Number to get Symbol
Keeps track of Ploopy Nano drag scroll from the keyboard side layer_state_t layer_state_set_user(layer_state_t state) { return update_tri_layer_state(state, _NAVIGATION, _NUMBER, _SYMBOL); }
It doesn't actually talk to the Ploopy Nano so there is a chance
This may be out of sync
Used to enable OLED indicator
*/
return drag_scroll_enabled;
}
bool isLunaSneaking(void) {
return isSneaking;
}
bool isLunaJumping(void) {
return isJumping;
}
bool isLunaShowedJump(void) {
return showedJump;
}
void setLunaShowedJump(bool state) {
showedJump = state;
}
// Customize behavior for existing keycodes or create new ones
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
/* KEYBOARD PET STATUS START */
case TR_LCTL:
if (record->event.pressed) {
isSneaking = true;
} else {
isSneaking = false;
}
break;
case KC_SPC: case KC_SPC:
if (record->event.pressed) { if (record->event.pressed) {
isJumping = true; isJumping = true;
showedJump = false; showedJump = false;
} else { }
else {
isJumping = false; isJumping = false;
} }
break; break;
/* KEYBOARD PET STATUS END */
case BASELYR: case BASELYR:
if (record->event.pressed) { if (record->event.pressed) {
@ -86,7 +51,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
case RBSELYR: case RBSELYR:
if (record->event.pressed) { if (record->event.pressed) {
@ -96,7 +60,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
case PN_DRGS: case PN_DRGS:
if (record->event.pressed) { if (record->event.pressed) {
@ -110,7 +73,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
case PN_PDPI: case PN_PDPI:
if (record->event.pressed) { if (record->event.pressed) {
@ -168,5 +130,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
// let QMK process the normal behavior if not handled above
return true; return true;
} }

View file

@ -3,12 +3,9 @@
#include "features/taphold.h" #include "features/taphold.h"
bool drag_scroll_is_enabled(void); bool drag_scroll_is_enabled(void);
bool isLunaSneaking(void);
bool isLunaJumping(void); bool isLunaJumping(void);
bool isLunaShowedJump(void); bool isJumpShown(void);
void setLunaJumped(void);
void setLunaShowedJump(bool state);
enum layers { enum layers {
_QWERTY = 0, _QWERTY = 0,