]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/crkbd/keymaps/edvorakjp/oled.c
Update KBD67 readme so that it mentions the KBD65 PCB (#5143)
[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");
25       break;
26     case _RAISE:
27       strcpy(layer_name, "Raise");
28       break;
29     case _LOWER:
30       strcpy(layer_name, "Lower");
31       break;
32     default:
33       snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
34   }
35
36   strcpy(layer_state_str, "Layer: ");
37
38   strcat(layer_state_str, layer_name);
39   strcat(layer_state_str, "\n");
40   return layer_state_str;
41 }
42
43 const char *read_host_led_state(void) {
44   static char led_str[24];
45   strcpy(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : "    ");
46   strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? " CAPS" : "    ");
47   strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? " SCLK" : "     ");
48   return led_str;
49 }
50
51 void matrix_update(struct CharacterMatrix *dest,
52                    const struct CharacterMatrix *source) {
53   if (memcmp(dest->display, source->display, sizeof(dest->display))) {
54     memcpy(dest->display, source->display, sizeof(dest->display));
55     dest->dirty = true;
56   }
57 }
58
59 void iota_gfx_task_user(void) {
60   struct CharacterMatrix matrix;
61
62   matrix_clear(&matrix);
63 #ifdef MASTER_RIGHT
64   if (!is_master) {
65 #else
66   if (is_master) {
67 #endif // MASTER_RIGHT
68     matrix_write(&matrix, read_mode_icon(!get_enable_kc_lang()));
69     matrix_write(&matrix, " ");
70     matrix_write(&matrix, read_layer_state());
71     matrix_write(&matrix, read_host_led_state());
72   } else {
73     matrix_write(&matrix, read_logo());
74   }
75   matrix_update(&display, &matrix);
76 }