oled_display.c (4055B)
1 /* Copyright 2021 T.Shinohara 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 2 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17 #include "rev1.h" 18 19 // Defines names for use in layer keycodes and the keymap 20 enum layer_names { 21 _QWERTY, 22 _LOWER, 23 _RAISE, 24 _ADJUST 25 }; 26 27 #ifdef OLED_ENABLE 28 29 void render_status(void) { 30 // Render to mode icon 31 static const char os_logo[][2][3] PROGMEM = {{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}}; 32 if (is_mac_mode()) { 33 oled_write_P(os_logo[0][0], false); 34 oled_write_P(PSTR("\n"), false); 35 oled_write_P(os_logo[0][1], false); 36 } else { 37 oled_write_P(os_logo[1][0], false); 38 oled_write_P(PSTR("\n"), false); 39 oled_write_P(os_logo[1][1], false); 40 } 41 42 oled_write_P(PSTR(" "), false); 43 44 // Host Keyboard Layer Status 45 oled_write_P(PSTR("Layer: "), false); 46 47 switch (get_highest_layer(layer_state)) { 48 case _QWERTY: 49 oled_write_P(PSTR("Default\n"), false); 50 break; 51 case _RAISE: 52 oled_write_P(PSTR("Raise\n"), false); 53 break; 54 case _LOWER: 55 oled_write_P(PSTR("Lower\n"), false); 56 break; 57 case _ADJUST: 58 oled_write_P(PSTR("Adjust\n"), false); 59 break; 60 default: 61 // Or use the write_ln shortcut over adding '\n' to the end of your string 62 oled_write_ln_P(PSTR("Undefined"), false); 63 } 64 65 oled_write_P(PSTR("\n"), false); 66 67 // Host Keyboard LED Status 68 led_t led_state = host_keyboard_led_state(); 69 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); 70 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); 71 oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); 72 } 73 74 static void render_logo(void) { 75 static const char PROGMEM qmk_logo[] = { 76 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 77 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 78 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00 79 }; 80 81 oled_write_P(qmk_logo, false); 82 } 83 84 static void render_rgbled_status(bool full) { 85 # ifdef RGBLIGHT_ENABLE 86 if (RGBLIGHT_MODES > 1 && rgblight_is_enabled()) { 87 if (full) { 88 // " LED %d:%d,%d,%d" 89 oled_write_P(PSTR(" LED"), false); 90 oled_write(get_u8_str(rgblight_get_mode(), ' '), false); 91 oled_write_char(':', false); 92 oled_write(get_u8_str(rgblight_get_hue() / RGBLIGHT_HUE_STEP, ' '), false); 93 oled_write_char(',', false); 94 oled_write(get_u8_str(rgblight_get_sat() / RGBLIGHT_SAT_STEP, ' '), false); 95 oled_write_char(',', false); 96 oled_write(get_u8_str(rgblight_get_val() / RGBLIGHT_VAL_STEP, ' '), false); 97 } else { 98 // "[%2d] " 99 oled_write_char('[', false); 100 oled_write(get_u8_str(rgblight_get_mode(), ' '), false); 101 oled_write_char(']', false); 102 } 103 } 104 # endif 105 } 106 107 bool oled_task_kb(void) { 108 if (!oled_task_user()) { 109 return false; 110 } 111 if (is_keyboard_master()) { 112 render_status(); 113 } else { 114 render_logo(); 115 render_rgbled_status(true); 116 } 117 return true; 118 } 119 #endif