commit
						1f8602a49c
					
				
					 8 changed files with 306 additions and 339 deletions
				
			
		| 
						 | 
				
			
			@ -12,4 +12,4 @@
 | 
			
		|||
 | 
			
		||||
//Set common configuration for all keyboards
 | 
			
		||||
#define OLED_TIMEOUT 60000 //1 min
 | 
			
		||||
#define OLED_FONT_H "./lib/font.c"
 | 
			
		||||
#define OLED_FONT_H "./lib/font.c"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
 | 
			
		|||
  switch (combo_index) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//  case MOUSE_BUTTON1:
 | 
			
		||||
    case MOUSE_BUTTON1:
 | 
			
		||||
//  case MOUSE_BUTTON2:
 | 
			
		||||
//  case MOUSE_BUTTON3:
 | 
			
		||||
//  case MOUSE_BUTTON4:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
#include "t4corun.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//const uint16_t PROGMEM mou_btn1_combo[] = { KC_D,    KC_F,    COMBO_END };
 | 
			
		||||
const uint16_t PROGMEM mou_btn1_combo[] = { KC_D,    KC_F,    COMBO_END };
 | 
			
		||||
//const uint16_t PROGMEM mou_btn2_combo[] = { KC_S,    KC_D,    COMBO_END };
 | 
			
		||||
//const uint16_t PROGMEM mou_btn3_combo[] = { KC_F,    KC_G,    COMBO_END };
 | 
			
		||||
//const uint16_t PROGMEM mou_btn4_combo[] = { KC_F,    KC_R,    COMBO_END };
 | 
			
		||||
| 
						 | 
				
			
			@ -12,11 +12,11 @@ const uint16_t PROGMEM mou_drg_combo[]  = { KC_X,    KC_C,    COMBO_END };
 | 
			
		|||
 | 
			
		||||
const uint16_t PROGMEM key_ent_combo[]  = { KC_C,    KC_V,    COMBO_END };
 | 
			
		||||
const uint16_t PROGMEM key_bspc_combo[] = { KC_M,    TR_COMM, COMBO_END };
 | 
			
		||||
const uint16_t PROGMEM key_tab_combo[]  = { TR_COMM, TR_DOT,  COMBO_END };
 | 
			
		||||
const uint16_t PROGMEM key_tab_combo[]  = { KC_J,    KC_K,    COMBO_END };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
enum combos {
 | 
			
		||||
//  MOUSE_BUTTON1,
 | 
			
		||||
  MOUSE_BUTTON1,
 | 
			
		||||
//  MOUSE_BUTTON2,
 | 
			
		||||
//  MOUSE_BUTTON3,
 | 
			
		||||
//  MOUSE_BUTTON4,
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ uint16_t COMBO_LEN = COMBO_LENGTH;
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
combo_t key_combos[COMBO_LENGTH] = {
 | 
			
		||||
//  [MOUSE_BUTTON1] = COMBO(mou_btn1_combo, KC_BTN1),
 | 
			
		||||
  [MOUSE_BUTTON1] = COMBO(mou_btn1_combo, KC_BTN1),
 | 
			
		||||
//  [MOUSE_BUTTON2] = COMBO(mou_btn2_combo, KC_BTN2),
 | 
			
		||||
//  [MOUSE_BUTTON3] = COMBO(mou_btn3_combo, KC_BTN3),
 | 
			
		||||
//  [MOUSE_BUTTON4] = COMBO(mou_btn4_combo, KC_BTN4),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,12 +17,12 @@ void render_luna(void) {
 | 
			
		|||
 | 
			
		||||
  if (timer_elapsed32(luna_anim_timer) > OLED_LUNA_ANIM_FRAME_DURATION) {
 | 
			
		||||
    luna_anim_timer = timer_read32();
 | 
			
		||||
    animate_luna(OLED_LUNA_X, OLED_LUNA_Y);
 | 
			
		||||
    animate_luna(OLED_LUNA_COL, OLED_LUNA_LINE);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void animate_luna(int LUNA_X, int LUNA_Y) {
 | 
			
		||||
void animate_luna(uint8_t col, uint8_t line) {
 | 
			
		||||
 | 
			
		||||
  uint8_t current_mod = get_mods();
 | 
			
		||||
  uint8_t current_osm = get_oneshot_mods();
 | 
			
		||||
| 
						 | 
				
			
			@ -31,41 +31,30 @@ void animate_luna(int LUNA_X, int LUNA_Y) {
 | 
			
		|||
  // Only works when Luna is rendered on Master Slide
 | 
			
		||||
  if (isLunaJumping() || !isJumpShown()) {
 | 
			
		||||
    /* clear */
 | 
			
		||||
    oled_set_cursor(LUNA_X, LUNA_Y + 2);
 | 
			
		||||
    oled_set_cursor(col, line + 2);
 | 
			
		||||
    oled_write("     ", false);
 | 
			
		||||
    oled_set_cursor(LUNA_X, LUNA_Y - 1);
 | 
			
		||||
    oled_set_cursor(col, line - 1);
 | 
			
		||||
 | 
			
		||||
    setLunaJumped();
 | 
			
		||||
  } else {
 | 
			
		||||
    /* clear */
 | 
			
		||||
    oled_set_cursor(LUNA_X, LUNA_Y - 1);
 | 
			
		||||
    oled_set_cursor(col, line - 1);
 | 
			
		||||
    oled_write("     ", false);
 | 
			
		||||
    oled_set_cursor(LUNA_X, LUNA_Y);
 | 
			
		||||
    oled_set_cursor(col, line);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  luna_current_frame = (luna_current_frame + 1) % 2;
 | 
			
		||||
 | 
			
		||||
  // Animate based on status
 | 
			
		||||
  if (host_keyboard_led_state().caps_lock || is_caps_word_on()) {
 | 
			
		||||
 | 
			
		||||
    oled_write_raw_P(bark[luna_current_frame], OLED_LUNA_ANIM_SIZE);
 | 
			
		||||
 | 
			
		||||
  } else if ((current_mod | current_osm) & MOD_MASK_CTRL) {
 | 
			
		||||
 | 
			
		||||
    oled_write_raw_P(sneak[luna_current_frame], OLED_LUNA_ANIM_SIZE);
 | 
			
		||||
 | 
			
		||||
  } else if (get_current_wpm() <= OLED_LUNA_MIN_WALK_SPEED) {
 | 
			
		||||
 | 
			
		||||
    oled_write_raw_P(sit[luna_current_frame], OLED_LUNA_ANIM_SIZE);
 | 
			
		||||
 | 
			
		||||
  } else if (get_current_wpm() <= OLED_LUNA_MIN_RUN_SPEED) {
 | 
			
		||||
 | 
			
		||||
    oled_write_raw_P(walk[luna_current_frame], OLED_LUNA_ANIM_SIZE);
 | 
			
		||||
 | 
			
		||||
  } else {
 | 
			
		||||
 | 
			
		||||
    oled_write_raw_P(run[luna_current_frame], OLED_LUNA_ANIM_SIZE);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}  
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,9 +2,22 @@
 | 
			
		|||
 | 
			
		||||
#include "t4corun.h"
 | 
			
		||||
 | 
			
		||||
// LUNA PET Variables
 | 
			
		||||
 | 
			
		||||
#if defined(OLED_DISPLAY_128X64)
 | 
			
		||||
#   define OLED_LUNA_COL              15
 | 
			
		||||
#   define OLED_LUNA_LINE             5
 | 
			
		||||
#else
 | 
			
		||||
#   define OLED_LUNA_COL              0
 | 
			
		||||
#   define OLED_LUNA_LINE             12
 | 
			
		||||
#endif 
 | 
			
		||||
 | 
			
		||||
#define OLED_LUNA_MIN_WALK_SPEED      10
 | 
			
		||||
#define OLED_LUNA_MIN_RUN_SPEED       40
 | 
			
		||||
#define OLED_LUNA_ANIM_FRAME_DURATION 200  // how long each frame lasts in ms
 | 
			
		||||
#define OLED_LUNA_ANIM_SIZE           96   // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024
 | 
			
		||||
 | 
			
		||||
void render_luna(void);
 | 
			
		||||
void animate_luna(int LUNA_X, int LUNA_Y);
 | 
			
		||||
void animate_luna(uint8_t col, uint8_t line);
 | 
			
		||||
 | 
			
		||||
// Luna Sit
 | 
			
		||||
static const char PROGMEM sit[2][OLED_LUNA_ANIM_SIZE] = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,31 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
// Shows the currently enabled Layer name
 | 
			
		||||
void render_layer_state(void) {
 | 
			
		||||
void render_default_layer_state(uint8_t col, uint8_t line, bool moveCursor) {
 | 
			
		||||
  if(moveCursor) {
 | 
			
		||||
    oled_set_cursor(col, line);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  switch (get_highest_layer(default_layer_state)) {
 | 
			
		||||
    case _DEFAULT_LAYER_2:
 | 
			
		||||
      oled_write_P(PSTR(OLED_RENDER_DEFAULT_LAYER2), false);
 | 
			
		||||
      break;
 | 
			
		||||
    case _DEFAULT_LAYER_3:
 | 
			
		||||
      oled_write_P(PSTR(OLED_RENDER_DEFAULT_LAYER3), false);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      oled_write_P(PSTR(OLED_RENDER_DEFAULT_LAYER1), false);
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Shows the currently enabled Layer name
 | 
			
		||||
// This only shows the name that is enabled
 | 
			
		||||
void render_layer_state(uint8_t col, uint8_t line, bool moveCursor) {
 | 
			
		||||
  if(moveCursor) {
 | 
			
		||||
    oled_set_cursor(col, line);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  switch (get_highest_layer(layer_state)) {
 | 
			
		||||
    case _NAVIGATION:
 | 
			
		||||
| 
						 | 
				
			
			@ -22,211 +46,192 @@ void render_layer_state(void) {
 | 
			
		|||
      oled_write_P(PSTR(OLED_RENDER_LAYER_5), false);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      switch (get_highest_layer(default_layer_state)) {
 | 
			
		||||
        case _DEFAULT_LAYER_2:
 | 
			
		||||
          oled_write_P(PSTR(OLED_RENDER_DEFAULT_LAYER2), false);
 | 
			
		||||
          break;
 | 
			
		||||
        case _DEFAULT_LAYER_3:
 | 
			
		||||
          oled_write_P(PSTR(OLED_RENDER_DEFAULT_LAYER3), false);
 | 
			
		||||
          break;
 | 
			
		||||
        default:
 | 
			
		||||
          oled_write_P(PSTR(OLED_RENDER_DEFAULT_LAYER1), false);
 | 
			
		||||
          break;
 | 
			
		||||
      }
 | 
			
		||||
      oled_write_P(PSTR(OLED_RENDER_LAYER_1), false);
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Graphic to show which layer on the stack is enabled
 | 
			
		||||
void render_layer_state_graphic(void) {
 | 
			
		||||
 | 
			
		||||
  switch (get_highest_layer(layer_state)) {
 | 
			
		||||
    case _NAVIGATION:
 | 
			
		||||
      oled_write_P(lyr_nav, false );
 | 
			
		||||
      break;
 | 
			
		||||
    case _NUMBER:
 | 
			
		||||
      oled_write_P(lyr_num, false );
 | 
			
		||||
      break;
 | 
			
		||||
    case _SYMBOL:
 | 
			
		||||
      oled_write_P(lyr_sym, false );
 | 
			
		||||
      break;
 | 
			
		||||
    case _CONFIG:
 | 
			
		||||
      oled_write_P(lyr_cfg, false );
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      oled_write_P(lyr_def, false );
 | 
			
		||||
      break;
 | 
			
		||||
// Shows the currently enabled Layer name
 | 
			
		||||
// Renders a list of all the layers and highlights the active one
 | 
			
		||||
void render_layer_state_list(uint8_t col, uint8_t line, bool moveCursor) {
 | 
			
		||||
  if(moveCursor) {
 | 
			
		||||
    oled_set_cursor(col, line);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_2), get_highest_layer(layer_state) == _NAVIGATION);
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_3), get_highest_layer(layer_state) == _NUMBER);
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_4), get_highest_layer(layer_state) == _SYMBOL);
 | 
			
		||||
  oled_write_P(PSTR(OLED_RENDER_LAYER_5), get_highest_layer(layer_state) == _CONFIG);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Shows the Host LED State (Num lock, caps lock , scroll lock)
 | 
			
		||||
void render_keylock_status(bool vertical) {
 | 
			
		||||
 | 
			
		||||
  if (vertical) {
 | 
			
		||||
    oled_write_ln_P(PSTR(OLED_RENDER_KEYLOCK_NAME), false);
 | 
			
		||||
    oled_write_P(PSTR(" "), false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
void render_lock_status(uint8_t col, uint8_t line) {
 | 
			
		||||
  oled_set_cursor(col, line);
 | 
			
		||||
  host_keyboard_led_state().num_lock ? oled_write_P(num_on, false ) : oled_write_P(num_off, false );
 | 
			
		||||
  host_keyboard_led_state().caps_lock || is_caps_word_on() ? oled_write_P(caps_on, false ) : oled_write_P(caps_off, false );
 | 
			
		||||
  host_keyboard_led_state().scroll_lock ? oled_write_P(scroll_on, false ) : oled_write_P(scroll_off, false );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Indicates which modifies are enabled
 | 
			
		||||
void render_mod_status(bool vertical) {
 | 
			
		||||
 | 
			
		||||
// Indicates which modifies are enabled
 | 
			
		||||
void render_mod_status(uint8_t col, uint8_t line) {
 | 
			
		||||
  uint8_t current_mod = get_mods();
 | 
			
		||||
  uint8_t current_osm = get_oneshot_mods();
 | 
			
		||||
 | 
			
		||||
  if (vertical) {
 | 
			
		||||
    oled_write_ln_P(PSTR(OLED_RENDER_MODS_NAME), false);
 | 
			
		||||
    oled_write_P(PSTR(" "), false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_SHIFT ? oled_write_P(shift_on, false) : oled_write_P(shift_off, false );
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_CTRL ? oled_write_P(ctrl_on, false ) : oled_write_P(ctrl_off, false );
 | 
			
		||||
 | 
			
		||||
  if (vertical) {
 | 
			
		||||
    oled_write_P(PSTR(" "), false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_ALT ? oled_write_P(alt_on, false ): oled_write_P(alt_off, false );
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_GUI ? oled_write_P(gui_on, false ): oled_write_P(gui_off, false );
 | 
			
		||||
  // draw the top line
 | 
			
		||||
  oled_set_cursor(col, line);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_SHIFT ? oled_write_P(shift_on_upper, false) : oled_write_P(shift_off_upper, false );
 | 
			
		||||
  oled_write_P(mod_sep, false);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_CTRL ? oled_write_P(ctrl_on_upper, false ) : oled_write_P(ctrl_off_upper, false );
 | 
			
		||||
  oled_write_P(mod_sep, false);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_ALT ? oled_write_P(alt_on_upper, false ) : oled_write_P(alt_off_upper, false );
 | 
			
		||||
  oled_write_P(mod_sep, false);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_GUI ? oled_write_P(gui_on_upper, false ) : oled_write_P(gui_off_upper, false );
 | 
			
		||||
 | 
			
		||||
  // draw the lower line
 | 
			
		||||
  oled_set_cursor(col, line + 1);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_SHIFT ? oled_write_P(shift_on_lower, false) : oled_write_P(shift_off_lower, false );
 | 
			
		||||
  oled_write_P(mod_sep, false);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_CTRL ? oled_write_P(ctrl_on_lower, false ) : oled_write_P(ctrl_off_lower, false );
 | 
			
		||||
  oled_write_P(mod_sep, false);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_ALT ? oled_write_P(alt_on_lower, false ) : oled_write_P(alt_off_lower, false );
 | 
			
		||||
  oled_write_P(mod_sep, false);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_GUI ? oled_write_P(gui_on_lower, false ) : oled_write_P(gui_off_lower, false );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Indicates which features are turned on or off
 | 
			
		||||
void render_feature_status(bool vertical) {
 | 
			
		||||
// Indicates which modifies are enabled
 | 
			
		||||
void render_mod_status_vertical(uint8_t col, uint8_t line) {
 | 
			
		||||
  uint8_t current_mod = get_mods();
 | 
			
		||||
  uint8_t current_osm = get_oneshot_mods();
 | 
			
		||||
 | 
			
		||||
  if (vertical) {
 | 
			
		||||
    oled_write_ln_P(PSTR(OLED_RENDER_FEATURE_NAME), false);
 | 
			
		||||
    oled_write_P(PSTR(" "), false);
 | 
			
		||||
  }
 | 
			
		||||
  oled_set_cursor(col,line);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_SHIFT ? oled_write_P(shift_on_upper, false) : oled_write_P(shift_off_upper, false );
 | 
			
		||||
  oled_set_cursor(col,line+1);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_SHIFT ? oled_write_P(shift_on_lower, false) : oled_write_P(shift_off_lower, false );
 | 
			
		||||
 | 
			
		||||
  oled_set_cursor(col,line+3);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_CTRL ? oled_write_P(ctrl_on_upper, false ) : oled_write_P(ctrl_off_upper, false );
 | 
			
		||||
  oled_set_cursor(col,line+4);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_CTRL ? oled_write_P(ctrl_on_lower, false ) : oled_write_P(ctrl_off_lower, false );
 | 
			
		||||
 | 
			
		||||
  oled_set_cursor(col,line+6);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_ALT ? oled_write_P(alt_on_upper, false ) : oled_write_P(alt_off_upper, false );
 | 
			
		||||
  oled_set_cursor(col,line+7);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_ALT ? oled_write_P(alt_on_lower, false ) : oled_write_P(alt_off_lower, false );
 | 
			
		||||
 | 
			
		||||
  oled_set_cursor(col,line+9);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_GUI ? oled_write_P(gui_on_upper, false ) : oled_write_P(gui_off_upper, false );
 | 
			
		||||
  oled_set_cursor(col,line+10);
 | 
			
		||||
  (current_mod | current_osm) & MOD_MASK_GUI ? oled_write_P(gui_on_lower, false ) : oled_write_P(gui_off_lower, false );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void render_feature_status(uint8_t col, uint8_t line) {
 | 
			
		||||
  oled_set_cursor(col,line);
 | 
			
		||||
#if defined(RGB_MATRIX_ENABLE)
 | 
			
		||||
  rgb_matrix_is_enabled() ? oled_write_P(rgb_on, false) : oled_write_P(rgb_off, false);
 | 
			
		||||
  rgb_matrix_is_enabled() ? oled_write_P(rgb_matrix_on, false) : oled_write_P(rgb_matrix_off, false);
 | 
			
		||||
#else
 | 
			
		||||
  oled_write_P(rgb_off, false);
 | 
			
		||||
  oled_write_P(rgb_matrix_off, false);
 | 
			
		||||
#endif //RGB_MATRIX_ENABLED
 | 
			
		||||
 | 
			
		||||
  // only works on master side
 | 
			
		||||
  host_keyboard_led_state().scroll_lock ? oled_write_P(dragscr_on, false) : oled_write_P(dragscr_off, false);
 | 
			
		||||
 | 
			
		||||
  if (vertical) {
 | 
			
		||||
    oled_write_P(PSTR(" "), false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  oled_set_cursor(col+3,line);
 | 
			
		||||
#if defined(AUDIO_ENABLE)
 | 
			
		||||
  is_audio_on() ? oled_write_P(sound_on, false) : oled_write_P(sound_off, false);
 | 
			
		||||
#else
 | 
			
		||||
  oled_write_P(sound_off, false);
 | 
			
		||||
#endif //AUDIO_ENABLE
 | 
			
		||||
 | 
			
		||||
  oled_set_cursor(col+6,line);
 | 
			
		||||
#if defined(HAPTIC_ENABLE)
 | 
			
		||||
  haptic_get_enable() ? oled_write_P(haptic_on, false) : oled_write_P(haptic_off, false);
 | 
			
		||||
#else
 | 
			
		||||
  oled_write_P(haptic_off, false);
 | 
			
		||||
#endif //HAPTIC_ENABLE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void render_klor_face_small(uint8_t col, uint8_t line) {
 | 
			
		||||
 | 
			
		||||
  oled_set_cursor(col,line);
 | 
			
		||||
  oled_write_P(klor_small_face_1, false);
 | 
			
		||||
 | 
			
		||||
  oled_set_cursor(col,line+1);
 | 
			
		||||
  oled_write_P(klor_small_face_2, false);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void render_oled_32x128(void) {
 | 
			
		||||
 | 
			
		||||
// Coordinate the OLED rendering
 | 
			
		||||
bool oled_task_user(void) {
 | 
			
		||||
  //process_record_user is only processed on master side
 | 
			
		||||
  //split side OLED does not respond to key presses custom behaviors
 | 
			
		||||
  if (is_keyboard_master()) {
 | 
			
		||||
    render_default_layer_state(0,1,true);
 | 
			
		||||
    render_layer_state_list(0,2,true);
 | 
			
		||||
#if defined(WPM_ENABLE)
 | 
			
		||||
    render_luna();
 | 
			
		||||
#endif //WPM_ENABLE
 | 
			
		||||
  } else {
 | 
			
		||||
    render_mod_status_vertical(1,1);
 | 
			
		||||
    render_lock_status(1,14);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(OLED_DISPLAY_128X64)
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
// 21 x 8
 | 
			
		||||
void render_oled_128x64(void) {
 | 
			
		||||
  if (is_keyboard_master()) {
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,0);
 | 
			
		||||
    render_layer_state();
 | 
			
		||||
/*
 | 
			
		||||
base lyr: current lyr
 | 
			
		||||
---------------------
 | 
			
		||||
                     
 | 
			
		||||
 mod  mod  mod  mod  
 | 
			
		||||
 mod  mod  mod  mod  
 | 
			
		||||
                     
 | 
			
		||||
-------------- xxxxx 
 | 
			
		||||
 NCS xx xx xx  xxxxx 
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
    render_default_layer_state(0,0, true);
 | 
			
		||||
    render_layer_state(0,0, false);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,1);
 | 
			
		||||
    oled_write_P(sep_v, false);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,4);
 | 
			
		||||
    render_mod_status(false);
 | 
			
		||||
    render_mod_status(1,3);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,5);
 | 
			
		||||
    oled_write_P(sep_v, false);
 | 
			
		||||
    oled_set_cursor(0,6);
 | 
			
		||||
    oled_write_P(sep_short_v, false);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,7);
 | 
			
		||||
    render_keylock_status(false);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(13,7);
 | 
			
		||||
    render_feature_status(false);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(15,3);
 | 
			
		||||
    oled_write_P(klor_small_face_1, false);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(15,4);
 | 
			
		||||
    oled_write_P(klor_small_face_2, false);
 | 
			
		||||
    render_lock_status(1,7);
 | 
			
		||||
    render_feature_status(5,7);
 | 
			
		||||
    render_klor_face_small(15,6);
 | 
			
		||||
  } else {
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,0);
 | 
			
		||||
    oled_write_raw_P(klor_face, sizeof(klor_face));
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
  //process_record_user is only processed on master side
 | 
			
		||||
  //split side OLED does not respond to key presses custom behaviors
 | 
			
		||||
  if (is_keyboard_master()) {
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,0);
 | 
			
		||||
    render_keylock_status(true);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,3);
 | 
			
		||||
    render_feature_status(true);
 | 
			
		||||
 | 
			
		||||
#if defined(WPM_ENABLE)
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,7);
 | 
			
		||||
    oled_write_P(PSTR(OLED_RENDER_WPM_NAME), false);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(1,8);
 | 
			
		||||
    oled_write_P(get_u8_str(get_current_wpm(), ' '), false);
 | 
			
		||||
 | 
			
		||||
    render_luna();
 | 
			
		||||
 | 
			
		||||
#endif //WPM_ENABLE
 | 
			
		||||
 | 
			
		||||
  } else {
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,0);
 | 
			
		||||
    render_layer_state();
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,2);
 | 
			
		||||
    render_layer_state_graphic();
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,7);
 | 
			
		||||
    render_mod_status(true);
 | 
			
		||||
 | 
			
		||||
    oled_set_cursor(0,13);
 | 
			
		||||
    oled_write_P(qmk_logo_small, false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return false;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Coordinate the OLED rendering
 | 
			
		||||
bool oled_task_user(void) {
 | 
			
		||||
#if defined(OLED_DISPLAY_128X64)
 | 
			
		||||
  render_oled_128x64();
 | 
			
		||||
#else
 | 
			
		||||
  render_oled_32x128();
 | 
			
		||||
#endif
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 | 
			
		||||
  
 | 
			
		||||
  //OLED_ROTATION_270 for Rollow/Corne/Swoop
 | 
			
		||||
  //OLED_ROTATION_180 for KLOR
 | 
			
		||||
 | 
			
		||||
#if defined(OLED_DISPLAY_128X64)
 | 
			
		||||
  //OLED_ROTATION_180 for KLOR
 | 
			
		||||
  return OLED_ROTATION_180;
 | 
			
		||||
#else
 | 
			
		||||
  //OLED_ROTATION_270 for Rollow/Corne/Swoop
 | 
			
		||||
  return OLED_ROTATION_270;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,16 +2,12 @@
 | 
			
		|||
 | 
			
		||||
#include "t4corun.h"
 | 
			
		||||
 | 
			
		||||
#define OLED_RENDER_KEYLOCK_NAME      "Lock"
 | 
			
		||||
#define OLED_RENDER_MODS_NAME         "Mods"
 | 
			
		||||
#define OLED_RENDER_FEATURE_NAME      "Feat"
 | 
			
		||||
#define OLED_RENDER_WPM_NAME          "Wpm"
 | 
			
		||||
 | 
			
		||||
#if defined(OLED_DISPLAY_128X64)
 | 
			
		||||
#   define OLED_RENDER_DEFAULT_LAYER1    "QWERTY    "
 | 
			
		||||
#   define OLED_RENDER_DEFAULT_LAYER2    "COLEMAK DH"
 | 
			
		||||
#   define OLED_RENDER_DEFAULT_LAYER3    "GAME      "
 | 
			
		||||
#   define OLED_RENDER_DEFAULT_LAYER1    "QWERTY    :"
 | 
			
		||||
#   define OLED_RENDER_DEFAULT_LAYER2    "COLEMAK DH:"
 | 
			
		||||
#   define OLED_RENDER_DEFAULT_LAYER3    "GAME      :"
 | 
			
		||||
 | 
			
		||||
#   define OLED_RENDER_LAYER_1           "Base      "
 | 
			
		||||
#   define OLED_RENDER_LAYER_2           "Navigation"
 | 
			
		||||
#   define OLED_RENDER_LAYER_3           "Number    "
 | 
			
		||||
#   define OLED_RENDER_LAYER_4           "Symbol    "
 | 
			
		||||
| 
						 | 
				
			
			@ -22,110 +18,76 @@
 | 
			
		|||
#   define OLED_RENDER_DEFAULT_LAYER2    "Clmak"
 | 
			
		||||
#   define OLED_RENDER_DEFAULT_LAYER3    "Game "
 | 
			
		||||
 | 
			
		||||
#   define OLED_RENDER_LAYER_1           "     "
 | 
			
		||||
#   define OLED_RENDER_LAYER_2           " Nav "
 | 
			
		||||
#   define OLED_RENDER_LAYER_3           " Num "
 | 
			
		||||
#   define OLED_RENDER_LAYER_4           " Sym "
 | 
			
		||||
#   define OLED_RENDER_LAYER_5           " Cfg "
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// LUNA PET Variables
 | 
			
		||||
#if defined(WPM_ENABLE)
 | 
			
		||||
#   define OLED_LUNA_X                   0
 | 
			
		||||
#   define OLED_LUNA_Y                   13
 | 
			
		||||
#   define OLED_LUNA_MIN_WALK_SPEED      10
 | 
			
		||||
#   define OLED_LUNA_MIN_RUN_SPEED       40
 | 
			
		||||
#   define OLED_LUNA_ANIM_FRAME_DURATION 200  // how long each frame lasts in ms
 | 
			
		||||
#   define OLED_LUNA_ANIM_SIZE           96   // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024
 | 
			
		||||
#endif //WPM_ENABLE
 | 
			
		||||
void render_oled_128x64(void);
 | 
			
		||||
void render_oled_32x128(void);
 | 
			
		||||
 | 
			
		||||
void render_layer_state(void);
 | 
			
		||||
void render_layer_state_graphic(void);
 | 
			
		||||
void render_keylock_status(bool vertical);
 | 
			
		||||
void render_mod_status(bool vertical);
 | 
			
		||||
void render_feature_status(bool vertical);
 | 
			
		||||
void render_default_layer_state(uint8_t col, uint8_t line, bool moveCursor);
 | 
			
		||||
void render_layer_state(uint8_t col, uint8_t line, bool moveCursor);
 | 
			
		||||
void render_layer_state_list(uint8_t col, uint8_t line, bool moveCursor);
 | 
			
		||||
 | 
			
		||||
void render_mod_status(uint8_t col, uint8_t line);
 | 
			
		||||
void render_mod_status_vertical(uint8_t col, uint8_t line);
 | 
			
		||||
void render_keylock_status(uint8_t col, uint8_t line);
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM scroll_off[]  = {0x8D, 0};
 | 
			
		||||
static const char PROGMEM scroll_on[]   = {0x8E, 0};
 | 
			
		||||
void render_klor_face_small(uint8_t col, uint8_t line);
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM num_off[]     = {0xAD, 0};
 | 
			
		||||
static const char PROGMEM num_on[]      = {0xAE, 0};
 | 
			
		||||
static const char PROGMEM scroll_off[]        = {0xC0, 0};
 | 
			
		||||
static const char PROGMEM scroll_on[]         = {0xC1, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM caps_off[]    = {0xCD, 0};
 | 
			
		||||
static const char PROGMEM caps_on[]     = {0xCE, 0};
 | 
			
		||||
static const char PROGMEM num_off[]           = {0xC2, 0};
 | 
			
		||||
static const char PROGMEM num_on[]            = {0xC3, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM shift_off[]   = {0x85, 0x86, 0};
 | 
			
		||||
static const char PROGMEM shift_on[]    = {0x87, 0x88, 0};
 | 
			
		||||
static const char PROGMEM caps_off[]          = {0xC4, 0};
 | 
			
		||||
static const char PROGMEM caps_on[]           = {0xC5, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM ctrl_off[]    = {0xA9, 0xAA, 0};
 | 
			
		||||
static const char PROGMEM ctrl_on[]     = {0xAB, 0xAC, 0};
 | 
			
		||||
static const char PROGMEM rgb_matrix_off[]    = {0xCA, 0xCB, 0};
 | 
			
		||||
static const char PROGMEM rgb_matrix_on[]     = {0xC8, 0xC9, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM alt_off[]     = {0xA5, 0xA6, 0};
 | 
			
		||||
static const char PROGMEM alt_on[]      = {0xA7, 0xA8, 0};
 | 
			
		||||
static const char PROGMEM sound_off[]         = {0xCE, 0xCF, 0};
 | 
			
		||||
static const char PROGMEM sound_on[]          = {0xCC, 0xCD, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM gui_off[]     = {0x89, 0x8A, 0};
 | 
			
		||||
static const char PROGMEM gui_on[]      = {0x8B, 0x8C, 0};
 | 
			
		||||
static const char PROGMEM haptic_off[]        = {0xD2, 0xD3, 0};
 | 
			
		||||
static const char PROGMEM haptic_on[]         = {0xD0, 0xD1, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM rgb_off[]     = {0xC5, 0xC6, 0};
 | 
			
		||||
static const char PROGMEM rgb_on[]      = {0xC7, 0xC8, 0};
 | 
			
		||||
static const char PROGMEM shift_off_upper[]   = {0x80, 0x81, 0x82, 0};
 | 
			
		||||
static const char PROGMEM shift_off_lower[]   = {0xA0, 0xA1, 0xA2, 0};
 | 
			
		||||
static const char PROGMEM shift_on_upper[]    = {0x83, 0x84, 0x85, 0};
 | 
			
		||||
static const char PROGMEM shift_on_lower[]    = {0xA3, 0xA4, 0xA5, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM dragscr_off[] = {0xC9, 0xCA, 0};
 | 
			
		||||
static const char PROGMEM dragscr_on[]  = {0xCB, 0xCC, 0};
 | 
			
		||||
static const char PROGMEM ctrl_off_upper[]    = {0x86, 0x87, 0x88, 0};
 | 
			
		||||
static const char PROGMEM ctrl_off_lower[]    = {0xA6, 0xA7, 0xA8, 0};
 | 
			
		||||
static const char PROGMEM ctrl_on_upper[]     = {0x89, 0x8A, 0x8B, 0};
 | 
			
		||||
static const char PROGMEM ctrl_on_lower[]     = {0xA9, 0xAA, 0xAB, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM sound_off[]   = {0x8F, 0x90, 0};
 | 
			
		||||
static const char PROGMEM sound_on[]    = {0xAF, 0xB0, 0};
 | 
			
		||||
static const char PROGMEM alt_off_upper[]     = {0x8C, 0x8D, 0x8E, 0};
 | 
			
		||||
static const char PROGMEM alt_off_lower[]     = {0xAC, 0xAD, 0xAE, 0};
 | 
			
		||||
static const char PROGMEM alt_on_upper[]      = {0x8F, 0x90, 0x91, 0};
 | 
			
		||||
static const char PROGMEM alt_on_lower[]      = {0xAF, 0xB0, 0xB1, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM haptic_off[]  = {0x91, 0x92, 0};
 | 
			
		||||
static const char PROGMEM haptic_on[]   = {0xB1, 0xB2, 0};
 | 
			
		||||
static const char PROGMEM gui_off_upper[]     = {0x92, 0x93, 0x94, 0};
 | 
			
		||||
static const char PROGMEM gui_off_lower[]     = {0xB2, 0xB3, 0xB4, 0};
 | 
			
		||||
static const char PROGMEM gui_on_upper[]      = {0x95, 0x96, 0x97, 0};
 | 
			
		||||
static const char PROGMEM gui_on_lower[]      = {0xB5, 0xB6, 0xB7, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM lyr_cfg[] = {
 | 
			
		||||
  0xE1, 0xD1, 0xD2, 0xD3, 0xE1,
 | 
			
		||||
  0xE1, 0xBA, 0xBB, 0xBC, 0xE1,
 | 
			
		||||
  0xE1, 0xB7, 0xB8, 0xB9, 0xE1,
 | 
			
		||||
  0xE1, 0xD7, 0xD8, 0xD9, 0xE1, 0x00
 | 
			
		||||
static const char PROGMEM klor_small_face_1[] = {0x98, 0x99, 0x9A, 0x9B, 0x9C, 0};
 | 
			
		||||
static const char PROGMEM klor_small_face_2[] = {0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM mod_sep[]           = {0xC7, 0xC7, 0};
 | 
			
		||||
static const char PROGMEM sep_v[] = {
 | 
			
		||||
    0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM lyr_sym[] = {
 | 
			
		||||
  0xE1, 0x97, 0x98, 0x99, 0xE1,
 | 
			
		||||
  0xE1, 0xDA, 0xDB, 0xDC, 0xE1,
 | 
			
		||||
  0xE1, 0xB7, 0xB8, 0xB9, 0xE1,
 | 
			
		||||
  0xE1, 0xD7, 0xD8, 0xD9, 0xE1, 0x00
 | 
			
		||||
static const char PROGMEM sep_short_v[] = {
 | 
			
		||||
    0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM lyr_num[] = {
 | 
			
		||||
  0xE1, 0x97, 0x98, 0x99, 0xE1,
 | 
			
		||||
  0xE1, 0x9A, 0x9B, 0x9C, 0xE1,
 | 
			
		||||
  0xE1, 0xBA, 0xBB, 0xBC, 0xE1,
 | 
			
		||||
  0xE1, 0xD7, 0xD8, 0xD9, 0xE1, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM lyr_nav[] = {
 | 
			
		||||
  0xE1, 0x97, 0x98, 0x99, 0xE1,
 | 
			
		||||
  0xE1, 0xB7, 0xB8, 0xB9, 0xE1,
 | 
			
		||||
  0xE1, 0xDA, 0xDB, 0xDC, 0xE1,
 | 
			
		||||
  0xE1, 0xD7, 0xD8, 0xD9, 0xE1, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM lyr_def[] = {
 | 
			
		||||
  0xE1, 0x97, 0x98, 0x99, 0xE1,
 | 
			
		||||
  0xE1, 0xB7, 0xB8, 0xB9, 0xE1,
 | 
			
		||||
  0xE1, 0x9A, 0x9B, 0x9C, 0xE1,
 | 
			
		||||
  0xE1, 0xD4, 0xD5, 0xD6, 0xE1, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM qmk_logo_small[] = {
 | 
			
		||||
  0xE1, 0x9D, 0x9E, 0x9F, 0xE1,
 | 
			
		||||
  0xE1, 0xBD, 0xBE, 0xBF, 0xE1,
 | 
			
		||||
  0xE1, 0xDD, 0xDE, 0xDF, 0xE1, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#if defined(OLED_DISPLAY_128X64)
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM sep_v[] = {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM klor_small_face_1[] = {0x80, 0x81, 0x82, 0x83, 0x84, 0xE1, 0};
 | 
			
		||||
static const char PROGMEM klor_small_face_2[] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xE1, 0};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM klor_face[] = {
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
    0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
| 
						 | 
				
			
			@ -159,6 +121,4 @@ static const char PROGMEM klor_face[] = {
 | 
			
		|||
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // OLED_DISPLAY_128X64
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -134,100 +134,100 @@ static const unsigned char PROGMEM font[] = {
 | 
			
		|||
    0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
 | 
			
		||||
    0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
 | 
			
		||||
    0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x80, 0x40, 0x20,
 | 
			
		||||
    0x10, 0x08, 0x04, 0x04, 0x08, 0x10,
 | 
			
		||||
    0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0,
 | 
			
		||||
    0xF0, 0xF8, 0xFC, 0xFC, 0xF8, 0xF0,
 | 
			
		||||
    0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
 | 
			
		||||
    0x20, 0x10, 0x08, 0x08, 0x10, 0x20,
 | 
			
		||||
    0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
 | 
			
		||||
    0xE0, 0xF0, 0xF8, 0xF8, 0xF0, 0xE0,
 | 
			
		||||
    0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0xF8, 0x88, 0x88, 0x88, 0x88,
 | 
			
		||||
    0x08, 0x10, 0x20, 0x40, 0x80, 0x00,
 | 
			
		||||
    0x78, 0x48, 0x48, 0x48, 0x78, 0x00,
 | 
			
		||||
    0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
 | 
			
		||||
    0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00,
 | 
			
		||||
    0x78, 0x78, 0x78, 0x78, 0x78, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x7C, 0x44, 0x44, 0x44,
 | 
			
		||||
    0x44, 0x7C, 0x00, 0x00, 0x7C, 0x44,
 | 
			
		||||
    0x44, 0x44, 0x44, 0x7C, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7C,
 | 
			
		||||
    0x7C, 0x7C, 0x00, 0x00, 0x7C, 0x7C,
 | 
			
		||||
    0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0xE0, 0xF0, 0xF0, 0xF0,
 | 
			
		||||
    0xF0, 0xFE, 0xFF, 0x9F, 0x0F, 0x0F,
 | 
			
		||||
    0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
 | 
			
		||||
    0x0F, 0x0F, 0x9F, 0xFF, 0xFE, 0xF0,
 | 
			
		||||
    0xF0, 0xF0, 0xF0, 0xE0, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x08, 0x0C, 0x7E, 0x7F,
 | 
			
		||||
    0x7E, 0x0C, 0x08, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x7F, 0x7F, 0x77, 0x73, 0x01, 0x00,
 | 
			
		||||
    0x01, 0x73, 0x77, 0x7F, 0x7F, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x77, 0x77, 0x77, 0x00,
 | 
			
		||||
    0x77, 0x77, 0x77, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x7F, 0x7F, 0x08, 0x08, 0x08, 0x7F,
 | 
			
		||||
    0x08, 0x08, 0x08, 0x7F, 0x7F, 0x00,
 | 
			
		||||
    0x00, 0x2E, 0x2A, 0x2A, 0x3A, 0x00,
 | 
			
		||||
    0x7F, 0x51, 0x55, 0x55, 0x45, 0x7F,
 | 
			
		||||
    0x00, 0x38, 0x00, 0x3E, 0x00, 0x38,
 | 
			
		||||
    0x00, 0x3C, 0x00, 0x30, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x24, 0x24, 0x12, 0x12, 0x24,
 | 
			
		||||
    0x24, 0x12, 0x12, 0x24, 0x00, 0x00,
 | 
			
		||||
    0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
 | 
			
		||||
    0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
 | 
			
		||||
    0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0,
 | 
			
		||||
    0xE6, 0xF7, 0xF3, 0xF0, 0x60, 0x00,
 | 
			
		||||
    0x80, 0x80, 0x40, 0x40, 0x20, 0x20,
 | 
			
		||||
    0x10, 0x10, 0x08, 0x08, 0x10, 0x10,
 | 
			
		||||
    0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
 | 
			
		||||
    0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2,
 | 
			
		||||
    0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4,
 | 
			
		||||
    0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
 | 
			
		||||
    0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
 | 
			
		||||
    0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x03, 0x02, 0x02, 0x3E,
 | 
			
		||||
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 | 
			
		||||
    0x3E, 0x02, 0x02, 0x03, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x03, 0x03, 0x03, 0x3F,
 | 
			
		||||
    0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
 | 
			
		||||
    0x3F, 0x03, 0x03, 0x03, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x3C, 0x22, 0x21, 0x20, 0x10,
 | 
			
		||||
    0x08, 0x04, 0x02, 0x02, 0x04, 0x08,
 | 
			
		||||
    0x10, 0x20, 0x21, 0x22, 0x3C, 0x00,
 | 
			
		||||
    0x00, 0x3C, 0x3E, 0x3F, 0x3F, 0x1F,
 | 
			
		||||
    0x0F, 0x07, 0x03, 0x03, 0x07, 0x0F,
 | 
			
		||||
    0x1F, 0x3F, 0x3F, 0x3E, 0x3C, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x01, 0x02, 0x04, 0x08, 0x10, 0x21,
 | 
			
		||||
    0x22, 0x22, 0x22, 0x22, 0x3E, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F,
 | 
			
		||||
    0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x3E, 0x22, 0x22, 0x22,
 | 
			
		||||
    0x22, 0x3E, 0x00, 0x00, 0x3E, 0x22,
 | 
			
		||||
    0x22, 0x22, 0x22, 0x3E, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x3E, 0x3E, 0x3E, 0x3E,
 | 
			
		||||
    0x3E, 0x3E, 0x00, 0x00, 0x3E, 0x3E,
 | 
			
		||||
    0x3E, 0x3E, 0x3E, 0x3E, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x07, 0x0F, 0x0F, 0x0F,
 | 
			
		||||
    0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
 | 
			
		||||
    0x87, 0xE1, 0xF9, 0xF9, 0xE1, 0x87,
 | 
			
		||||
    0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
 | 
			
		||||
    0x0F, 0x0F, 0x0F, 0x07, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x06, 0x06, 0x06, 0x0C, 0x18,
 | 
			
		||||
    0x30, 0x66, 0x66, 0x66, 0x00, 0x00,
 | 
			
		||||
    0x7F, 0x79, 0x79, 0x79, 0x73, 0x67,
 | 
			
		||||
    0x4F, 0x19, 0x19, 0x19, 0x7F, 0x00,
 | 
			
		||||
    0x00, 0x60, 0x70, 0x38, 0x1C, 0x0E,
 | 
			
		||||
    0x1C, 0x38, 0x70, 0x60, 0x00, 0x00,
 | 
			
		||||
    0x7F, 0x1F, 0x0F, 0x47, 0x63, 0x71,
 | 
			
		||||
    0x63, 0x47, 0x0F, 0x1F, 0x7F, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x2E, 0x2A, 0x2A, 0x3A, 0x00,
 | 
			
		||||
    0x7F, 0x51, 0x55, 0x55, 0x45, 0x7F,
 | 
			
		||||
    0x00, 0x3E, 0x04, 0x08, 0x3E, 0x00,
 | 
			
		||||
    0x7F, 0x41, 0x7B, 0x77, 0x41, 0x7F,
 | 
			
		||||
    0x7F, 0x43, 0x7F, 0x41, 0x7F, 0x47,
 | 
			
		||||
    0x7F, 0x43, 0x7F, 0x4F, 0x7F, 0x00,
 | 
			
		||||
    0x7F, 0x5B, 0x5B, 0x6D, 0x6D, 0x5B,
 | 
			
		||||
    0x5B, 0x6D, 0x6D, 0x5B, 0x7F, 0x00,
 | 
			
		||||
    0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
 | 
			
		||||
    0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
 | 
			
		||||
    0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x3F,
 | 
			
		||||
    0x3F, 0x7F, 0x7F, 0x38, 0x10, 0x00,
 | 
			
		||||
    0x88, 0x88, 0x55, 0x55, 0x22, 0x22,
 | 
			
		||||
    0x44, 0x44, 0x88, 0x88, 0x44, 0x44,
 | 
			
		||||
    0x22, 0x22, 0x55, 0x55, 0x88, 0x88,
 | 
			
		||||
    0x88, 0x88, 0x55, 0x55, 0x23, 0x23,
 | 
			
		||||
    0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47,
 | 
			
		||||
    0x23, 0x23, 0x55, 0x55, 0x88, 0x88,
 | 
			
		||||
    0x00, 0xA8, 0xA8, 0xFC, 0xFE, 0x07,
 | 
			
		||||
    0xFE, 0xFF, 0xFE, 0x07, 0xFE, 0xFF,
 | 
			
		||||
    0xFE, 0x07, 0xFE, 0xFC, 0xA8, 0xA8,
 | 
			
		||||
    0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00,
 | 
			
		||||
    0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x00,
 | 
			
		||||
    0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x1C, 0x62, 0x0A,
 | 
			
		||||
    0x62, 0x1C, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x7F, 0x57, 0x7D, 0x67, 0x02, 0x1B,
 | 
			
		||||
    0x02, 0x67, 0x7D, 0x57, 0x7F, 0x00,
 | 
			
		||||
    0x7F, 0x01, 0x01, 0x01, 0x01, 0x3F,
 | 
			
		||||
    0x01, 0x01, 0x01, 0x01, 0x7F, 0x00,
 | 
			
		||||
    0x7F, 0x7F, 0x7F, 0x7F, 0x03, 0x3B,
 | 
			
		||||
    0x03, 0x7F, 0x7F, 0x7F, 0x7F, 0x00,
 | 
			
		||||
    0x00, 0x3E, 0x22, 0x22, 0x22, 0x00,
 | 
			
		||||
    0x7F, 0x41, 0x5D, 0x5D, 0x5D, 0x7F,
 | 
			
		||||
    0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x7F, 0x41, 0x7D, 0x7F, 0x51, 0x55,
 | 
			
		||||
    0x41, 0x7F, 0x41, 0x55, 0x63, 0x7F,
 | 
			
		||||
    0x00, 0x3E, 0x02, 0x00, 0x2E, 0x2A,
 | 
			
		||||
    0x3E, 0x00, 0x3E, 0x2A, 0x1C, 0x00,
 | 
			
		||||
    0x7F, 0x43, 0x7F, 0x41, 0x7F, 0x47,
 | 
			
		||||
    0x7F, 0x43, 0x7F, 0x4F, 0x7F, 0x7F,
 | 
			
		||||
    0x00, 0x3C, 0x00, 0x3E, 0x00, 0x38,
 | 
			
		||||
    0x00, 0x3C, 0x00, 0x30, 0x00, 0x00,
 | 
			
		||||
    0x7F, 0x5B, 0x5B, 0x6D, 0x6D, 0x5B,
 | 
			
		||||
    0x5B, 0x6D, 0x6D, 0x5B, 0x5B, 0x7F,
 | 
			
		||||
    0x00, 0x24, 0x24, 0x12, 0x12, 0x24,
 | 
			
		||||
    0x24, 0x12, 0x12, 0x24, 0x24, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0,
 | 
			
		||||
    0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0,
 | 
			
		||||
    0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80,
 | 
			
		||||
    0x00, 0x00, 0x01, 0x01, 0x03, 0x03,
 | 
			
		||||
    0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07,
 | 
			
		||||
    0x03, 0x03, 0x01, 0x01, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
 | 
			
		||||
    0x04, 0x04, 0x08, 0x08, 0x04, 0x04,
 | 
			
		||||
    0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
 | 
			
		||||
    0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E,
 | 
			
		||||
    0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C,
 | 
			
		||||
    0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88,
 | 
			
		||||
    0x00, 0x0A, 0x0A, 0x1F, 0x3F, 0xFE,
 | 
			
		||||
    0x3D, 0xFB, 0x3B, 0xE0, 0x3B, 0xFB,
 | 
			
		||||
    0x3D, 0xFE, 0x3F, 0x1F, 0x0A, 0x0A,
 | 
			
		||||
};
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
};
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue