summaryrefslogtreecommitdiff
path: root/keyboards/nullbitsco/nibble/keymaps/oled_status/oled_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/nullbitsco/nibble/keymaps/oled_status/oled_display.c')
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/oled_status/oled_display.c117
1 files changed, 117 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>.
+ */
+#include <stdio.h>
+#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;
+ }
+}