summaryrefslogtreecommitdiffstats
path: root/keyboards/crkbd/keymaps/edvorakjp/oled.c
diff options
context:
space:
mode:
authorepaew <epaew@users.noreply.github.com>2018-12-03 17:00:00 +0100
committerMechMerlin <30334081+mechmerlin@users.noreply.github.com>2018-12-03 17:00:00 +0100
commitfe982caf5d69fdb2d6f1dec123a630df11a98282 (patch)
tree61e35e983a228ff60fc619570b04553ba0dbe289 /keyboards/crkbd/keymaps/edvorakjp/oled.c
parent5d47231f2a9353645aab07e14c1de21f00b7fc2f (diff)
downloadqmk_firmware-fe982caf5d69fdb2d6f1dec123a630df11a98282.tar.gz
qmk_firmware-fe982caf5d69fdb2d6f1dec123a630df11a98282.tar.xz
Add edvorakjp kepmap for crkbd (#4537)
* edvorakjp layout for crkbd * bugfix of edvorakjp QMK cannot send keycode that doesn't exists on new layer.
Diffstat (limited to 'keyboards/crkbd/keymaps/edvorakjp/oled.c')
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/oled.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/keyboards/crkbd/keymaps/edvorakjp/oled.c b/keyboards/crkbd/keymaps/edvorakjp/oled.c
new file mode 100644
index 000000000..e4cccf3e7
--- /dev/null
+++ b/keyboards/crkbd/keymaps/edvorakjp/oled.c
@@ -0,0 +1,82 @@
+#include <string.h>
+#include "oled.h"
+
+// NOTE: Redefined to avoid to use snprintf(); It makes size of firmware big.
+const char *read_mode_icon(bool windows_mode) {
+ static const char logo[][2][3] = {{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}};
+ static char mode_icon[10];
+
+ int mode_number = windows_mode ? 1 : 0;
+ strcpy(mode_icon, logo[mode_number][0]);
+
+ strcat(mode_icon, "\n");
+ strcat(mode_icon, logo[mode_number][1]);
+
+ return mode_icon;
+}
+
+const char *read_layer_state(void) {
+ static char layer_state_str[24];
+ char layer_name[17];
+
+ switch (biton32(layer_state)) {
+ case L_BASE:
+ strcpy(layer_name, default_layer_state == 1UL<<_EDVORAK ? "EDVORAK" : "QWERTY");
+ break;
+ case _EDVORAKJ1:
+ case _EDVORAKJ2:
+ strcpy(layer_name, "JP_EXT");
+ break;
+ case _RAISE:
+ strcpy(layer_name, "Raise");
+ break;
+ case _LOWER:
+ strcpy(layer_name, "Lower");
+ break;
+ case _ADJUST:
+ strcpy(layer_name, "Adjust");
+ break;
+ default:
+ snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
+ }
+
+ strcpy(layer_state_str, "Layer: ");
+
+ strcat(layer_state_str, layer_name);
+ strcat(layer_state_str, "\n");
+ return layer_state_str;
+}
+
+const char *read_host_led_state(void) {
+ static char led_str[24];
+ bool ext_status = get_enable_jp_extra_layer() && get_japanese_mode();
+ strcpy(led_str, ext_status ? "EXT" : " ");
+
+ strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? " NMLK" : " ");
+ strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? " CAPS" : " ");
+ strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? " SCLK" : " ");
+ return led_str;
+}
+
+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;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+ matrix_clear(&matrix);
+ if (is_master) {
+ matrix_write(&matrix, read_mode_icon(!get_enable_kc_lang()));
+ matrix_write(&matrix, " ");
+ matrix_write(&matrix, read_layer_state());
+ matrix_write(&matrix, read_host_led_state());
+ } else {
+ matrix_write(&matrix, read_logo());
+ }
+ matrix_update(&display, &matrix);
+}