From 5e86a11a8d49928f06609e9ee1b9ef86c45f3f2e Mon Sep 17 00:00:00 2001 From: Jose Luis Adelantado Torres Date: Thu, 24 Jun 2021 11:24:11 +0900 Subject: [keymap] Added new `oled_status` keymap to `nullbitsco/nibble` keyboard (#12824) * Added new oled_status keymap to nullbitsco/nibble keyboard * rm: Removed font from src imports --- .../nibble/keymaps/oled_status/oled_display.c | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 keyboards/nullbitsco/nibble/keymaps/oled_status/oled_display.c (limited to 'keyboards/nullbitsco/nibble/keymaps/oled_status/oled_display.c') diff --git a/keyboards/nullbitsco/nibble/keymaps/oled_status/oled_display.c b/keyboards/nullbitsco/nibble/keymaps/oled_status/oled_display.c new file mode 100644 index 0000000000..1b132a9e62 --- /dev/null +++ b/keyboards/nullbitsco/nibble/keymaps/oled_status/oled_display.c @@ -0,0 +1,117 @@ +/* Copyright 2021 Jose Luis Adelantado Torres + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#include "quantum.h" +#include "oled_display.h" + +static const char PROGMEM oled_mode_messages[5][15] = { + "", + "Volume Up", + "Volume Down", + "RGB ON", + "RGB OFF" +}; + +static const char PROGMEM oled_mode_icons[5][3][5] = { + {{128,129,130,131,0},{160,161,162,163,0},{192,193,194,195,0}}, + {{132,133,134,135,0},{164,165,166,167,0},{196,197,198,199,0}}, + {{136,137,138,139,0},{168,169,170,171,0},{200,201,202,203,0}}, + {{140,141,142,143,0},{172,173,174,175,0},{204,205,206,207,0}}, + {{144,145,146,147,0},{176,177,178,179,0},{208,209,210,211,0}} +}; + +void set_oled_mode(oled_mode_t mode) { + oled_mode = mode; +} + +void process_record_encoder_oled(uint16_t keycode) { + oled_timer = timer_read32(); + switch (keycode) { + case KC_VOLU: + set_oled_mode(OLED_MODE_VOLUME_UP); + break; + case KC_VOLD: + set_oled_mode(OLED_MODE_VOLUME_DOWN); + break; + default: + set_oled_mode(OLED_MODE_IDLE); + break; + } +} + +void process_record_keymap_oled(uint16_t keycode) { + oled_timer = timer_read32(); + if(rgblight_is_enabled()) { + set_oled_mode(OLED_MODE_RGB_OFF); + } else { + set_oled_mode(OLED_MODE_RGB_ON); + } +} + +void render_wpm(void) { + char wpm_str[10]; + + sprintf(wpm_str, "%03d", get_current_wpm()); + oled_write_P(PSTR(" "), false); + oled_write(wpm_str, false); +} + +void render_idle(void) { + // Host Keyboard LED Status + led_t led_state = host_keyboard_led_state(); + + // Printing logo, state + oled_write_P(oled_mode_icons[0][0], false); + oled_write_P(PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR("S ") : PSTR(" "), false); + oled_write_P(led_state.num_lock ? PSTR("N ") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("C ") : PSTR(" "), false); + oled_write_P(PSTR("\n"), false); + oled_write_P(oled_mode_icons[0][1], false); + oled_write_P(PSTR(" Nibble"), false); + oled_write_P(PSTR("\n"), false); + oled_write_P(oled_mode_icons[0][2], false); + oled_write_P(PSTR("\n"), false); + + // Printing WPM + render_wpm(); +} + +void render_status_mode_message(void) { + // Printing state icon with message + oled_write_P(oled_mode_icons[oled_mode][0], false); + oled_write_P(PSTR("\n"), false); + oled_write_P(oled_mode_icons[oled_mode][1], false); + oled_write_P(PSTR(" "), false); + oled_write_P(oled_mode_messages[oled_mode], false); + oled_write_P(PSTR("\n"), false); + oled_write_P(oled_mode_icons[oled_mode][2], false); + oled_write_P(PSTR("\n\n"), false); +} + +void render_frame(void) { + switch (oled_mode) { + case OLED_MODE_VOLUME_UP: + case OLED_MODE_VOLUME_DOWN: + case OLED_MODE_RGB_ON: + case OLED_MODE_RGB_OFF: + render_status_mode_message(); + break; + default: + render_idle(); + break; + } +} -- cgit v1.2.3