2019.c (3033B)
1 /* Copyright 2019 ishtob 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 #include "quantum.h" 17 18 #ifdef OLED_ENABLE 19 oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return OLED_ROTATION_180; } 20 21 bool oled_task_kb(void) { 22 if (!oled_task_user()) { 23 return false; 24 } 25 oled_write_P(PSTR("BOSTON MK LAYER"), false); 26 oled_advance_char(); 27 oled_write_char(get_highest_layer(layer_state) + 0x30, true); 28 29 led_t led_state = host_keyboard_led_state(); 30 oled_set_cursor(18, 0); 31 oled_write_P(PSTR("NUM"), led_state.num_lock); 32 oled_set_cursor(18, 1); 33 oled_write_P(PSTR("CAP"), led_state.caps_lock); 34 oled_set_cursor(18, 2); 35 oled_write_P(PSTR("SCR"), led_state.scroll_lock); 36 37 uint8_t mod_state = get_mods(); 38 oled_set_cursor(10, 3); 39 oled_write_P(PSTR("S"), mod_state & MOD_MASK_SHIFT); 40 oled_advance_char(); 41 oled_write_P(PSTR("C"), mod_state & MOD_MASK_CTRL); 42 oled_advance_char(); 43 oled_write_P(PSTR("A"), mod_state & MOD_MASK_ALT); 44 oled_advance_char(); 45 oled_write_P(PSTR("G"), mod_state & MOD_MASK_GUI); 46 oled_advance_char(); 47 48 /* Matrix display is 12 x 12 pixels */ 49 #define MATRIX_DISPLAY_X 8 50 #define MATRIX_DISPLAY_Y 16 51 52 // matrix 53 for (uint8_t x = 0; x < MATRIX_ROWS; x++) { 54 for (uint8_t y = 0; y < MATRIX_COLS; y++) { 55 bool on = (matrix_get_row(x) & (1 << y)) > 0; 56 57 // force on for oled location 58 if((x == 0) && (y >= (MATRIX_COLS - 2))) on = 1; 59 60 oled_write_pixel(MATRIX_DISPLAY_X + y + y + 2, MATRIX_DISPLAY_Y + x + x + 2, on); 61 oled_write_pixel(MATRIX_DISPLAY_X + y + y + 3, MATRIX_DISPLAY_Y + x + x + 2, on); 62 oled_write_pixel(MATRIX_DISPLAY_X + y + y + 2, MATRIX_DISPLAY_Y + x + x + 3, on); 63 oled_write_pixel(MATRIX_DISPLAY_X + y + y + 3, MATRIX_DISPLAY_Y + x + x + 3, on); 64 } 65 } 66 67 // outline 68 for (uint8_t x = 0; x < 12; x++) { 69 oled_write_pixel(MATRIX_DISPLAY_X + x, MATRIX_DISPLAY_Y, true); 70 oled_write_pixel(MATRIX_DISPLAY_X + x, MATRIX_DISPLAY_Y + 12, true); 71 } 72 for (uint8_t y = 0; y < 12; y++) { 73 oled_write_pixel(MATRIX_DISPLAY_X, MATRIX_DISPLAY_Y+y, true); 74 oled_write_pixel(MATRIX_DISPLAY_X + 12, MATRIX_DISPLAY_Y+y, true); 75 } 76 77 // bodge for layer number left hand side 78 for (uint8_t y = 0; y < 8; y++) { 79 oled_write_pixel(95, 0 + y, true); 80 } 81 return false; 82 } 83 #endif