oled.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "oled.h"
  4. #ifdef OLED_DRIVER_ENABLE
  5. void render_host_led_state(void) { oled_write(read_host_led_state(), false); }
  6. void render_layer_state(void) {
  7. char layer_name[17];
  8. oled_write_P(PSTR("Layer: "), false);
  9. switch (biton32(layer_state)) {
  10. case L_EDVORAKJP_BASE:
  11. oled_write_ln_P(PSTR("Default"), false);
  12. break;
  13. case L_EDVORAKJP_LOWER:
  14. oled_write_ln_P(PSTR("Lower"), false);
  15. break;
  16. case L_EDVORAKJP_RAISE:
  17. oled_write_ln_P(PSTR("Raise"), false);
  18. break;
  19. default:
  20. snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
  21. oled_write_ln(layer_name, false);
  22. }
  23. }
  24. void render_logo(void) { oled_write(read_logo(), false); }
  25. void render_mode_icon(bool is_windows) {
  26. static const char logo[][2][3] = {
  27. {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
  28. {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
  29. };
  30. static char mode_icon[10];
  31. snprintf(mode_icon, sizeof(mode_icon), "%s\n%s ", logo[is_windows][0], logo[is_windows][1]);
  32. oled_write(mode_icon, false);
  33. }
  34. oled_rotation_t oled_init_user(oled_rotation_t rotation) {
  35. // flips the display 180 degrees if offhand
  36. return is_keyboard_left() ? rotation : rotation ^ OLED_ROTATION_180;
  37. }
  38. void oled_task_user(void) {
  39. if (is_keyboard_left()) {
  40. render_mode_icon(!get_enable_kc_lang());
  41. render_layer_state();
  42. render_host_led_state();
  43. } else {
  44. render_logo();
  45. }
  46. }
  47. #endif // OLED_DRIVER_ENABLE