keychron_qmk_firmware/keyboards/lily58/keymaps/druotoni
..
boot.c
boot.h
burst.c
burst.h
config.h
draw_helper.c
draw_helper.h
fast_random.c
fast_random.h
gui_state.c
gui_state.h
keymap.c
layer_frame.c
layer_frame.h
navi_font.c
navi_logo.c
navi_logo.h
readme.md
ring.c
ring.h
rules.mk

HELL0 NAVI. Interface

HELL0 NAVI. Interface is a GUI based en Serial Experiments Lain. Turn your Lily58 keyboard into a Navi computer with its own Copland OS.

Ready to dive into the Wired ?

HELL0 NAVI provides interactive animations for both sides :

  • a scope on left side for burst, WPM and active layer
  • a ring on right side for the last key stroke

Typing animation

The scope displays your burst time on a chart. The WPM is represented by an horizontal line.

The ring display the last letter in the upper frame. Each time you enter a key, the Navi searches into the circular database and locks the position. A special animation is displayed when Enter, Backspce or Escape are struck.

Startup animation

Your Navi boots when it leaves the sleep mode. The animation can be canceled by typing.

Waking up animation

After a period of inactivity, the scope and the ring turn off and the Navi runs in Idle mode. A new key stroke wakes them up.

Idle animation

The Copland OS is still in beta test. After a while, some visual glitches will occur.

Shutdown animation

The Navi runs in sleep mode after 10 seconds in Idle mode. A nice (and difficul to render in a gif) animation is run. The OLED display turns off.

How to build & flash

You need to flash each side with a specific version based on config.h configuration.

Left side (master)

IS_RIGHT needs to be commented in config.h

#define IS_LEFT 1
//#define IS_RIGHT 1

Connect the left side and flash

Right side (slave)

Comment IS_LEFT and uncomment IS_RIGHT in config.h

//#define IS_LEFT 1
#define IS_RIGHT 1

Connect the right side and flash

Customization

Logo can be change in navi_logo.c. The new logo must be 32x32 pixels.

static void render_logo_clean(void) {
    // your logo here
    static const char PROGMEM logo_raw[] = {
        0, 0, 0, 0, 0, 0, 128, 128, 0, 0, 128, 128, 192, 192, 204, 222, 222, 204, 192, 192, 128, 0, 0, 0, 128, 128, 0, 0,
        0, 0, 0, 0, 192, 240, 248, 28, 14, 7, 3, 249, 252, 255, 15, 7, 3, 225, 241, 241, 241, 241, 225, 3, 7, 15, 255, 252,
        249, 3, 7, 14, 28, 248, 240, 192, 192, 227, 231, 206, 28, 56, 112, 99, 15, 31, 60, 120, 240, 225, 227, 3, 3, 227,
        225, 240, 120, 60, 31, 15, 103, 112, 56, 28, 206, 231, 227, 192, 0, 1, 1, 0, 0, 0, 56, 120, 96, 192, 192, 192, 
        96, 127, 63, 0, 0, 63, 127, 96, 192, 192, 192, 96, 120, 56, 0, 0, 0, 1, 1, 0,
    };
    oled_write_raw_P(logo_raw, sizeof(logo_raw));
}

Layer names

The current version handle 3 differents layers. Names can be changed in layer_frame.h.

// layer name : must be 3 chars
#define LAYER_NAME_0 "ABC"
#define LAYER_NAME_1 "NAV"
#define LAYER_NAME_2 "SPE"

Timing

You can tweak states timing in gui_state.h.

// states timing
#define BOOTING_TIME_TRESHOLD 7000
#define WAKING_UP_TIME_TRESHOLD 300
#define IDLE_TIME_TRESHOLD 4000
#define HALTING_TIME_TRESHOLD IDLE_TIME_TRESHOLD + 6000
#define SLEEP_TIME_TRESHOLD HALTING_TIME_TRESHOLD + 8000

Need space ?

Boot and gliches can be commented in config.h

// states timing
// logo glitch
//#define WITH_GLITCH
// boot sequence
//#define WITH_BOOT

My Navi

Keyboard : https://github.com/kata0510/Lily58

Case : https://github.com/BoardSodie/Lily58-Acrylic-Case