-
-
Notifications
You must be signed in to change notification settings - Fork 39.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[helix/rev2/keymaps/edvorakjp] Use QMK's native OLED driver instead o…
…f helix/local_drivers/ssd1306.{h,c}
- Loading branch information
Showing
4 changed files
with
51 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,64 +1,68 @@ | ||
#include <stdio.h> | ||
#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); | ||
} | ||
#ifdef OLED_DRIVER_ENABLE | ||
void render_host_led_state(void) { | ||
char led_state_str[24]; | ||
uint8_t leds = host_keyboard_leds(); | ||
|
||
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; | ||
} | ||
bool is_num_lock_enabled = leds & (1 << USB_LED_NUM_LOCK); | ||
bool is_caps_lock_enabled = leds & (1 << USB_LED_CAPS_LOCK); | ||
bool is_scroll_lock_enabled = leds & (1 << USB_LED_SCROLL_LOCK); | ||
|
||
snprintf(led_state_str, sizeof(led_state_str), "NL:%s CL:%s SL:%s", is_num_lock_enabled ? "on" : "- ", is_caps_lock_enabled ? "on" : "- ", is_scroll_lock_enabled ? "on" : "- "); | ||
oled_write(led_state_str, false); | ||
} | ||
|
||
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}}}; | ||
int mode_number = get_enable_kc_lang() ? 0 : 1; | ||
matrix_write(matrix, logo[mode_number][0]); | ||
matrix_write(matrix, "\n"); | ||
matrix_write(matrix, logo[mode_number][1]); | ||
void render_layer_state(void) { | ||
char layer_name[17]; | ||
oled_write_P(PSTR("Layer: "), false); | ||
|
||
// 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_EDVORAKJP_BASE: | ||
matrix_write_P(matrix, PSTR("Default")); | ||
oled_write_ln_P(PSTR("Default"), false); | ||
break; | ||
case L_EDVORAKJP_LOWER: | ||
matrix_write_P(matrix, PSTR("Lower")); | ||
oled_write_ln_P(PSTR("Lower"), false); | ||
break; | ||
case L_EDVORAKJP_RAISE: | ||
matrix_write_P(matrix, PSTR("Raise")); | ||
oled_write_ln_P(PSTR("Raise"), false); | ||
break; | ||
default: | ||
matrix_write(matrix, buf); | ||
snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state); | ||
oled_write_ln(layer_name, false); | ||
} | ||
} | ||
|
||
// Host Keyboard LED Status | ||
char led[40]; | ||
snprintf(led, sizeof(led), "\n%s %s %s", (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 render_logo(void) { | ||
static const char helix_logo[] PROGMEM = {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}; | ||
oled_write_P(helix_logo, false); | ||
} | ||
|
||
void iota_gfx_task_user(void) { | ||
struct CharacterMatrix matrix; | ||
void render_mode_icon(bool is_windows) { | ||
static const char logo[][2][3] = { | ||
{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, | ||
{{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, | ||
}; | ||
static char mode_icon[10]; | ||
|
||
#if DEBUG_TO_SCREEN | ||
if (debug_enable) { | ||
return; | ||
} | ||
#endif | ||
snprintf(mode_icon, sizeof(mode_icon), "%s\n%s ", logo[is_windows][0], logo[is_windows][1]); | ||
oled_write(mode_icon, false); | ||
} | ||
|
||
oled_rotation_t oled_init_user(oled_rotation_t rotation) { | ||
// flips the display 180 degrees if offhand | ||
return is_keyboard_left() ? rotation : rotation ^ OLED_ROTATION_180; | ||
} | ||
|
||
matrix_clear(&matrix); | ||
void oled_task_user(void) { | ||
if (is_keyboard_left()) { | ||
render_status(&matrix); | ||
render_mode_icon(!get_enable_kc_lang()); | ||
render_layer_state(); | ||
render_host_led_state(); | ||
} else { | ||
render_logo(&matrix); | ||
render_logo(); | ||
} | ||
matrix_update(&display, &matrix); | ||
} | ||
#endif // OLED_DRIVER_ENABLE |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,12 @@ | ||
#pragma once | ||
|
||
// SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h | ||
#include "ssd1306.h" | ||
#include "edvorakjp.h" | ||
|
||
extern bool japanese_mode; | ||
extern bool japanese_mode; | ||
|
||
void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source); | ||
void render_status(struct CharacterMatrix *matrix); | ||
void iota_gfx_task_user(void); | ||
void render_host_led_state(void); | ||
void render_layer_state(void); | ||
void render_logo(void); | ||
void render_mode_icon(bool is_windows); | ||
oled_rotation_t oled_init_user(oled_rotation_t rotation); | ||
void oled_task_user(void); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters