]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/crkbd/keymaps/edvorakjp/oled.c
Update keyboards/kbdfans/kbd67/readme.md
[qmk_firmware.git] / keyboards / crkbd / keymaps / edvorakjp / oled.c
1 #include <string.h>
2 #include "oled.h"
3
4 // NOTE: Redefined to avoid to use snprintf(); It makes size of firmware big.
5 const char *read_mode_icon(bool windows_mode) {
6   static const char logo[][2][3] = {{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}};
7   static char mode_icon[10];
8
9   int mode_number = windows_mode ? 1 : 0;
10   strcpy(mode_icon, logo[mode_number][0]);
11
12   strcat(mode_icon, "\n");
13   strcat(mode_icon, logo[mode_number][1]);
14
15   return mode_icon;
16 }
17
18 const char *read_layer_state(void) {
19   static char layer_state_str[24];
20   char layer_name[17];
21
22   switch (biton32(layer_state)) {
23     case L_BASE:
24       strcpy(layer_name, default_layer_state == 1UL<<_EDVORAK ? "EDVORAK" : "QWERTY");
25       break;
26     case _EDVORAKJ1:
27     case _EDVORAKJ2:
28       strcpy(layer_name, "JP_EXT");
29       break;
30     case _RAISE:
31       strcpy(layer_name, "Raise");
32       break;
33     case _LOWER:
34       strcpy(layer_name, "Lower");
35       break;
36     case _ADJUST:
37       strcpy(layer_name, "Adjust");
38       break;
39     default:
40       snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
41   }
42
43   strcpy(layer_state_str, "Layer: ");
44
45   strcat(layer_state_str, layer_name);
46   strcat(layer_state_str, "\n");
47   return layer_state_str;
48 }
49
50 const char *read_host_led_state(void) {
51   static char led_str[24];
52   bool ext_status = get_enable_jp_extra_layer() && get_japanese_mode();
53   strcpy(led_str, ext_status ? "EXT" : "   ");
54
55   strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? " NMLK" : "     ");
56   strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? " CAPS" : "    ");
57   strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? " SCLK" : "     ");
58   return led_str;
59 }
60
61 void matrix_update(struct CharacterMatrix *dest,
62                    const struct CharacterMatrix *source) {
63   if (memcmp(dest->display, source->display, sizeof(dest->display))) {
64     memcpy(dest->display, source->display, sizeof(dest->display));
65     dest->dirty = true;
66   }
67 }
68
69 void iota_gfx_task_user(void) {
70   struct CharacterMatrix matrix;
71
72   matrix_clear(&matrix);
73   if (is_master) {
74     matrix_write(&matrix, read_mode_icon(!get_enable_kc_lang()));
75     matrix_write(&matrix, " ");
76     matrix_write(&matrix, read_layer_state());
77     matrix_write(&matrix, read_host_led_state());
78   } else {
79     matrix_write(&matrix, read_logo());
80   }
81   matrix_update(&display, &matrix);
82 }