diff options
author | epaew <epaew@users.noreply.github.com> | 2018-07-08 21:11:02 +0900 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2018-07-08 05:11:02 -0700 |
commit | 0b9b2a6376df286d3a5bc44a99274dc196524fc1 (patch) | |
tree | c8b6077d6e8a5573583ec200986c45a2762e8cb9 /keyboards/helix/rev2/keymaps/edvorakjp/oled.c | |
parent | f28f5696005bdc51b9d1ff3a59c70bf47b8b897a (diff) |
Add edvorakjp keymap for the Helix (rev2) keyboard (#3340)
* add readme.md
* add extern declaration of edvorakjp_config to edvorakjp.h
* add oled.c
* add layout definitions
* add keymap.c
* add rules.mk
* fix rgblight issue: rgblight_setrgb() ignore RGBLIGHT_LIMIT_VAL
Diffstat (limited to 'keyboards/helix/rev2/keymaps/edvorakjp/oled.c')
-rw-r--r-- | keyboards/helix/rev2/keymaps/edvorakjp/oled.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/oled.c b/keyboards/helix/rev2/keymaps/edvorakjp/oled.c new file mode 100644 index 0000000000..5ced1d4fad --- /dev/null +++ b/keyboards/helix/rev2/keymaps/edvorakjp/oled.c @@ -0,0 +1,87 @@ +#include <string.h> +#include "oled.h" + +static void render_logo(struct CharacterMatrix *matrix) { + + static char logo[] = { + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4, + 0}; + matrix_write(matrix, logo); +} + +void matrix_update(struct CharacterMatrix *dest, + const struct CharacterMatrix *source) { + if (memcmp(dest->display, source->display, sizeof(dest->display))) { + memcpy(dest->display, source->display, sizeof(dest->display)); + dest->dirty = true; + } +} + +void render_status(struct CharacterMatrix *matrix) { + + // Render to mode icon + static char logo[][2][3] = {{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}}; + if (edvorakjp_config.enable_kc_lang) { + matrix_write(matrix, logo[0][0]); + matrix_write_P(matrix, PSTR("\n")); + matrix_write(matrix, logo[0][1]); + } else { + matrix_write(matrix, logo[1][0]); + matrix_write_P(matrix, PSTR("\n")); + matrix_write(matrix, logo[1][1]); + } + + // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below + char buf[40]; + snprintf(buf,sizeof(buf), "Undef-%ld", layer_state); + matrix_write_P(matrix, PSTR("\nLayer: ")); + switch (biton32(layer_state)) { + case L_BASE: + matrix_write_P(matrix, + default_layer_state == 1UL<<_EDVORAK ? PSTR("EDVORAK") : PSTR("QWERTY") + ); + break; + case _EDVORAKJ1: + case _EDVORAKJ2: + matrix_write_P(matrix, PSTR("JP_EXT")); + break; + case _RAISE: + matrix_write_P(matrix, PSTR("Raise")); + break; + case _LOWER: + matrix_write_P(matrix, PSTR("Lower")); + break; + case _ADJUST: + matrix_write_P(matrix, PSTR("Adjust")); + break; + default: + matrix_write(matrix, buf); + } + + // Host Keyboard LED Status + char led[40]; + snprintf(led, sizeof(led), "\n%s %s %s %s", + edvorakjp_config.enable_jp_extra_layer && japanese_mode ? "EXT" : " ", + (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : " ", + (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ", + (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " "); + matrix_write(matrix, led); +} + +void iota_gfx_task_user(void) { + struct CharacterMatrix matrix; + +#if DEBUG_TO_SCREEN + if (debug_enable) { return; } +#endif + + matrix_clear(&matrix); + if (is_master) { + render_status(&matrix); + } else { + render_logo(&matrix); + } + matrix_update(&display, &matrix); +} |