# HELL0 NAVI. Interface
HELL0 NAVI. Interface is a GUI based en [Serial Experiments Lain](https://en.wikipedia.org/wiki/Serial_Experiments_Lain). Turn your [Lily58](https://github.com/kata0510/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
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](https://imgur.com/eYkgoZJ.png)
> Keyboard : https://github.com/kata0510/Lily58
>
> Case : https://github.com/BoardSodie/Lily58-Acrylic-Case