You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.1 KiB

  1. #include <string.h>
  2. #include "oled.h"
  3. // NOTE: Redefined to avoid to use snprintf(); It makes size of firmware big.
  4. const char *read_mode_icon(bool windows_mode) {
  5. static const char logo[][2][3] = {{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}};
  6. static char mode_icon[10];
  7. int mode_number = windows_mode ? 1 : 0;
  8. strcpy(mode_icon, logo[mode_number][0]);
  9. strcat(mode_icon, "\n");
  10. strcat(mode_icon, logo[mode_number][1]);
  11. return mode_icon;
  12. }
  13. const char *read_layer_state(void) {
  14. static char layer_state_str[24];
  15. char layer_name[17];
  16. switch (biton32(layer_state)) {
  17. case L_BASE:
  18. strcpy(layer_name, "Default");
  19. break;
  20. case _RAISE:
  21. strcpy(layer_name, "Raise");
  22. break;
  23. case _LOWER:
  24. strcpy(layer_name, "Lower");
  25. break;
  26. default:
  27. snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
  28. }
  29. strcpy(layer_state_str, "Layer: ");
  30. strcat(layer_state_str, layer_name);
  31. strcat(layer_state_str, "\n");
  32. return layer_state_str;
  33. }
  34. const char *read_host_led_state(void) {
  35. static char led_str[24];
  36. strcpy(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : " ");
  37. strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? " CAPS" : " ");
  38. strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? " SCLK" : " ");
  39. return led_str;
  40. }
  41. void matrix_update(struct CharacterMatrix *dest,
  42. const struct CharacterMatrix *source) {
  43. if (memcmp(dest->display, source->display, sizeof(dest->display))) {
  44. memcpy(dest->display, source->display, sizeof(dest->display));
  45. dest->dirty = true;
  46. }
  47. }
  48. void iota_gfx_task_user(void) {
  49. struct CharacterMatrix matrix;
  50. matrix_clear(&matrix);
  51. #ifdef MASTER_RIGHT
  52. if (!is_master) {
  53. #else
  54. if (is_master) {
  55. #endif // MASTER_RIGHT
  56. matrix_write(&matrix, read_mode_icon(!get_enable_kc_lang()));
  57. matrix_write(&matrix, " ");
  58. matrix_write(&matrix, read_layer_state());
  59. matrix_write(&matrix, read_host_led_state());
  60. } else {
  61. matrix_write(&matrix, read_logo());
  62. }
  63. matrix_update(&display, &matrix);
  64. }