mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	Refactor the crkbd/via keymap and fix OLED bugs (#10354)
* Refactor the crkbd/via keymap and fix OLED bugs * Revert "Refactor the crkbd/via keymap and fix OLED bugs" This reverts commit dc9db029fc6b077fc7600b49e920b755c522d100. * Fix OLED display bugs * Remove unused functions * Remove uncessary the key logger * Add new lines at end of file * Remove unnecesary extern for is_master * Remove extern is_master from rev1.h * Remove ssd1306 from common dir because its the legacy lib * Update default keymap based the via keymap * Remove foostan keymap because it will be legacy * Revert Remove unnecesary extern for is_master * Remove unnecessary backslashes.
This commit is contained in:
		
							parent
							
								
									88c09aa892
								
							
						
					
					
						commit
						503b762538
					
				| @ -28,8 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| // #define MASTER_RIGHT
 | // #define MASTER_RIGHT
 | ||||||
| // #define EE_HANDS
 | // #define EE_HANDS
 | ||||||
| 
 | 
 | ||||||
| #define SSD1306OLED |  | ||||||
| 
 |  | ||||||
| #define USE_SERIAL_PD2 | #define USE_SERIAL_PD2 | ||||||
| 
 | 
 | ||||||
| #define TAPPING_FORCE_HOLD | #define TAPPING_FORCE_HOLD | ||||||
| @ -44,3 +42,5 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
|     #define RGBLIGHT_SAT_STEP 17 |     #define RGBLIGHT_SAT_STEP 17 | ||||||
|     #define RGBLIGHT_VAL_STEP 17 |     #define RGBLIGHT_VAL_STEP 17 | ||||||
| #endif | #endif | ||||||
|  | 
 | ||||||
|  | #define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c" | ||||||
| @ -18,218 +18,157 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| 
 | 
 | ||||||
| #include QMK_KEYBOARD_H | #include QMK_KEYBOARD_H | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| #ifdef RGBLIGHT_ENABLE |  | ||||||
| //Following line allows macro to read current RGB settings
 |  | ||||||
| extern rgblight_config_t rgblight_config; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| extern uint8_t is_master; |  | ||||||
| 
 |  | ||||||
| // Each layer gets a name for readability, which is then used in the keymap matrix below.
 |  | ||||||
| // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 |  | ||||||
| // Layer names don't all need to be of the same length, obviously, and you can also skip them
 |  | ||||||
| // entirely and just use numbers.
 |  | ||||||
| #define _QWERTY 0 |  | ||||||
| #define _LOWER 1 |  | ||||||
| #define _RAISE 2 |  | ||||||
| #define _ADJUST 3 |  | ||||||
| 
 |  | ||||||
| enum custom_keycodes { |  | ||||||
|   QWERTY = SAFE_RANGE, |  | ||||||
|   LOWER, |  | ||||||
|   RAISE, |  | ||||||
|   ADJUST, |  | ||||||
|   BACKLIT, |  | ||||||
|   RGBRST |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| enum macro_keycodes { |  | ||||||
|   KC_SAMPLEMACRO, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|   [_QWERTY] = LAYOUT_split_3x6_3( \ |   [0] = LAYOUT_split_3x6_3( | ||||||
|   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 |   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | ||||||
|        KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC,\ |        KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       KC_LCTL,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,\ |       KC_LCTL,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                         KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, KC_RSFT,\ |       KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                         KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,  KC_ESC, | ||||||
|   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | ||||||
|                                           KC_LGUI,   LOWER,  KC_SPC,     KC_ENT,  RAISE,  KC_RALT \ |                                           KC_LGUI,   MO(1),  KC_SPC,     KC_ENT,   MO(2), KC_RALT | ||||||
|                                       //`--------------------------'  `--------------------------'
 |                                       //`--------------------------'  `--------------------------'
 | ||||||
| 
 | 
 | ||||||
|   ), |   ), | ||||||
| 
 | 
 | ||||||
|   [_LOWER] = LAYOUT_split_3x6_3( \ |   [1] = LAYOUT_split_3x6_3( | ||||||
|   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 |   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | ||||||
|        KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC,\ |        KC_TAB,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_LEFT, KC_DOWN,   KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,\ |       KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_LEFT, KC_DOWN,   KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ |       KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||||||
|   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | ||||||
|                                           KC_LGUI,   LOWER,  KC_SPC,     KC_ENT,   RAISE, KC_RALT \ |                                           KC_LGUI, _______,  KC_SPC,     KC_ENT,   MO(3), KC_RALT | ||||||
|                                       //`--------------------------'  `--------------------------'
 |  | ||||||
|     ), |  | ||||||
| 
 |  | ||||||
|   [_RAISE] = LAYOUT_split_3x6_3( \ |  | ||||||
|   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 |  | ||||||
|        KC_ESC, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,\ |  | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |  | ||||||
|       KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_MINS,  KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE,  KC_GRV,\ |  | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |  | ||||||
|       KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,\ |  | ||||||
|   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 |  | ||||||
|                                           KC_LGUI,   LOWER,  KC_SPC,     KC_ENT,   RAISE, KC_RALT \ |  | ||||||
|                                       //`--------------------------'  `--------------------------'
 |                                       //`--------------------------'  `--------------------------'
 | ||||||
|   ), |   ), | ||||||
| 
 | 
 | ||||||
|   [_ADJUST] = LAYOUT_split_3x6_3( \ |   [2] = LAYOUT_split_3x6_3( | ||||||
|   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 |   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | ||||||
|         RESET,  RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ |        KC_TAB, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ |       KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,  KC_GRV, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ |       KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD, | ||||||
|   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | ||||||
|                                           KC_LGUI,   LOWER,  KC_SPC,     KC_ENT,   RAISE, KC_RALT \ |                                           KC_LGUI,   MO(3),  KC_SPC,     KC_ENT, _______, KC_RALT | ||||||
|  |                                       //`--------------------------'  `--------------------------'
 | ||||||
|  |   ), | ||||||
|  | 
 | ||||||
|  |   [3] = LAYOUT_split_3x6_3( | ||||||
|  |   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | ||||||
|  |         RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||||||
|  |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|  |       RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||||||
|  |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|  |       RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||||||
|  |   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | ||||||
|  |                                           KC_LGUI, _______,  KC_SPC,     KC_ENT, _______, KC_RALT | ||||||
|                                       //`--------------------------'  `--------------------------'
 |                                       //`--------------------------'  `--------------------------'
 | ||||||
|   ) |   ) | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| int RGB_current_mode; | #ifdef OLED_DRIVER_ENABLE | ||||||
| 
 | oled_rotation_t oled_init_user(oled_rotation_t rotation) { | ||||||
| void persistent_default_layer_set(uint16_t default_layer) { |   if (!is_master) { | ||||||
|   eeconfig_update_default_layer(default_layer); |     return OLED_ROTATION_180;  // flips the display 180 degrees if offhand
 | ||||||
|   default_layer_set(default_layer); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Setting ADJUST layer RGB back to default
 |  | ||||||
| void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { |  | ||||||
|   if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { |  | ||||||
|     layer_on(layer3); |  | ||||||
|   } else { |  | ||||||
|     layer_off(layer3); |  | ||||||
|   } |   } | ||||||
|  |   return rotation; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void matrix_init_user(void) { | #define L_BASE 0 | ||||||
|     #ifdef RGBLIGHT_ENABLE | #define L_LOWER 2 | ||||||
|       RGB_current_mode = rgblight_config.mode; | #define L_RAISE 4 | ||||||
|     #endif | #define L_ADJUST 8 | ||||||
|     //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
 | 
 | ||||||
|     #ifdef SSD1306OLED | void oled_render_layer_state(void) { | ||||||
|         iota_gfx_init(!has_usb());   // turns on the display
 |     oled_write_P(PSTR("Layer: "), false); | ||||||
|     #endif |     switch (layer_state) { | ||||||
|  |         case L_BASE: | ||||||
|  |             oled_write_ln_P(PSTR("Default"), false); | ||||||
|  |             break; | ||||||
|  |         case L_LOWER: | ||||||
|  |             oled_write_ln_P(PSTR("Lower"), false); | ||||||
|  |             break; | ||||||
|  |         case L_RAISE: | ||||||
|  |             oled_write_ln_P(PSTR("Raise"), false); | ||||||
|  |             break; | ||||||
|  |         case L_ADJUST: | ||||||
|  |         case L_ADJUST|L_LOWER: | ||||||
|  |         case L_ADJUST|L_RAISE: | ||||||
|  |         case L_ADJUST|L_LOWER|L_RAISE: | ||||||
|  |             oled_write_ln_P(PSTR("Adjust"), false); | ||||||
|  |             break; | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
 |  | ||||||
| #ifdef SSD1306OLED |  | ||||||
| 
 | 
 | ||||||
| // When add source files to SRC in rules.mk, you can use functions.
 | char keylog_str[24] = {}; | ||||||
| const char *read_layer_state(void); |  | ||||||
| const char *read_logo(void); |  | ||||||
| void set_keylog(uint16_t keycode, keyrecord_t *record); |  | ||||||
| const char *read_keylog(void); |  | ||||||
| const char *read_keylogs(void); |  | ||||||
| 
 | 
 | ||||||
| // const char *read_mode_icon(bool swap);
 | const char code_to_name[60] = { | ||||||
| // const char *read_host_led_state(void);
 |     ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', | ||||||
| // void set_timelog(void);
 |     'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', | ||||||
| // const char *read_timelog(void);
 |     'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', | ||||||
|  |     '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', | ||||||
|  |     'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', | ||||||
|  |     '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '}; | ||||||
| 
 | 
 | ||||||
| void matrix_scan_user(void) { | void set_keylog(uint16_t keycode, keyrecord_t *record) { | ||||||
|    iota_gfx_task(); |   char name = ' '; | ||||||
| } |     if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || | ||||||
| 
 |         (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; } | ||||||
| void matrix_render_user(struct CharacterMatrix *matrix) { |   if (keycode < 60) { | ||||||
|   if (is_master) { |     name = code_to_name[keycode]; | ||||||
|     // If you want to change the display of OLED, you need to change here
 |  | ||||||
|     matrix_write_ln(matrix, read_layer_state()); |  | ||||||
|     matrix_write_ln(matrix, read_keylog()); |  | ||||||
|     //matrix_write_ln(matrix, read_keylogs());
 |  | ||||||
|     //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
 |  | ||||||
|     //matrix_write_ln(matrix, read_host_led_state());
 |  | ||||||
|     //matrix_write_ln(matrix, read_timelog());
 |  | ||||||
|   } else { |  | ||||||
|     matrix_write(matrix, read_logo()); |  | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   // update keylog
 | ||||||
|  |   snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c", | ||||||
|  |            record->event.key.row, record->event.key.col, | ||||||
|  |            keycode, name); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { | void oled_render_keylog(void) { | ||||||
|   if (memcmp(dest->display, source->display, sizeof(dest->display))) { |     oled_write(keylog_str, false); | ||||||
|     memcpy(dest->display, source->display, sizeof(dest->display)); |  | ||||||
|     dest->dirty = true; |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void iota_gfx_task_user(void) { | void render_bootmagic_status(bool status) { | ||||||
|   struct CharacterMatrix matrix; |     /* Show Ctrl-Gui Swap options */ | ||||||
|   matrix_clear(&matrix); |     static const char PROGMEM logo[][2][3] = { | ||||||
|   matrix_render_user(&matrix); |         {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, | ||||||
|   matrix_update(&display, &matrix); |         {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, | ||||||
|  |     }; | ||||||
|  |     if (status) { | ||||||
|  |         oled_write_ln_P(logo[0][0], false); | ||||||
|  |         oled_write_ln_P(logo[0][1], false); | ||||||
|  |     } else { | ||||||
|  |         oled_write_ln_P(logo[1][0], false); | ||||||
|  |         oled_write_ln_P(logo[1][1], false); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void oled_render_logo(void) { | ||||||
|  |     static const char PROGMEM crkbd_logo[] = { | ||||||
|  |         0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, | ||||||
|  |         0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, | ||||||
|  |         0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, | ||||||
|  |         0}; | ||||||
|  |     oled_write_P(crkbd_logo, false); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void oled_task_user(void) { | ||||||
|  |     if (is_master) { | ||||||
|  |         oled_render_layer_state(); | ||||||
|  |         oled_render_keylog(); | ||||||
|  |     } else { | ||||||
|  |         oled_render_logo(); | ||||||
|  |     } | ||||||
| } | } | ||||||
| #endif//SSD1306OLED
 |  | ||||||
| 
 | 
 | ||||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||||
|   if (record->event.pressed) { |   if (record->event.pressed) { | ||||||
| #ifdef SSD1306OLED |  | ||||||
|     set_keylog(keycode, record); |     set_keylog(keycode, record); | ||||||
| #endif |  | ||||||
|     // set_timelog();
 |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   switch (keycode) { |  | ||||||
|     case QWERTY: |  | ||||||
|       if (record->event.pressed) { |  | ||||||
|         persistent_default_layer_set(1UL<<_QWERTY); |  | ||||||
|       } |  | ||||||
|       return false; |  | ||||||
|     case LOWER: |  | ||||||
|       if (record->event.pressed) { |  | ||||||
|         layer_on(_LOWER); |  | ||||||
|         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); |  | ||||||
|       } else { |  | ||||||
|         layer_off(_LOWER); |  | ||||||
|         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); |  | ||||||
|       } |  | ||||||
|       return false; |  | ||||||
|     case RAISE: |  | ||||||
|       if (record->event.pressed) { |  | ||||||
|         layer_on(_RAISE); |  | ||||||
|         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); |  | ||||||
|       } else { |  | ||||||
|         layer_off(_RAISE); |  | ||||||
|         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); |  | ||||||
|       } |  | ||||||
|       return false; |  | ||||||
|     case ADJUST: |  | ||||||
|         if (record->event.pressed) { |  | ||||||
|           layer_on(_ADJUST); |  | ||||||
|         } else { |  | ||||||
|           layer_off(_ADJUST); |  | ||||||
|         } |  | ||||||
|         return false; |  | ||||||
|     case RGB_MOD: |  | ||||||
|       #ifdef RGBLIGHT_ENABLE |  | ||||||
|         if (record->event.pressed) { |  | ||||||
|           rgblight_mode(RGB_current_mode); |  | ||||||
|           rgblight_step(); |  | ||||||
|           RGB_current_mode = rgblight_config.mode; |  | ||||||
|         } |  | ||||||
|       #endif |  | ||||||
|       return false; |  | ||||||
|     case RGBRST: |  | ||||||
|       #ifdef RGBLIGHT_ENABLE |  | ||||||
|         if (record->event.pressed) { |  | ||||||
|           eeconfig_update_rgblight_default(); |  | ||||||
|           rgblight_enable(); |  | ||||||
|           RGB_current_mode = rgblight_config.mode; |  | ||||||
|         } |  | ||||||
|       #endif |  | ||||||
|       break; |  | ||||||
|   } |   } | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  | #endif // OLED_DRIVER_ENABLE
 | ||||||
|  | |||||||
| @ -1,10 +1 @@ | |||||||
| 
 | OLED_DRIVER_ENABLE  = yes | ||||||
| # If you want to change the display of OLED, you need to change here
 |  | ||||||
| SRC +=  ./lib/glcdfont.c \
 |  | ||||||
|         ./lib/rgb_state_reader.c \
 |  | ||||||
|         ./lib/layer_state_reader.c \
 |  | ||||||
|         ./lib/logo_reader.c \
 |  | ||||||
|         ./lib/keylogger.c \
 |  | ||||||
|         # ./lib/mode_icon_reader.c \ |  | ||||||
|         # ./lib/host_led_state_reader.c \ |  | ||||||
|         # ./lib/timelogger.c \ |  | ||||||
|  | |||||||
| @ -1,44 +0,0 @@ | |||||||
| /*
 |  | ||||||
| This is the c configuration file for the keymap |  | ||||||
| 
 |  | ||||||
| Copyright 2012 Jun Wako <wakojun@gmail.com> |  | ||||||
| Copyright 2015 Jack Humbert |  | ||||||
| 
 |  | ||||||
| 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/>.
 |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| #pragma once |  | ||||||
| 
 |  | ||||||
| //#define USE_MATRIX_I2C
 |  | ||||||
| 
 |  | ||||||
| /* Select hand configuration */ |  | ||||||
| 
 |  | ||||||
| #define MASTER_LEFT |  | ||||||
| // #define MASTER_RIGHT
 |  | ||||||
| // #define EE_HANDS
 |  | ||||||
| 
 |  | ||||||
| #define SSD1306OLED |  | ||||||
| 
 |  | ||||||
| #define USE_SERIAL_PD2 |  | ||||||
| 
 |  | ||||||
| #define TAPPING_FORCE_HOLD |  | ||||||
| #define TAPPING_TERM 100 |  | ||||||
| 
 |  | ||||||
| #undef RGBLED_NUM |  | ||||||
| #define RGBLIGHT_ANIMATIONS |  | ||||||
| #define RGBLED_NUM 27 |  | ||||||
| #define RGBLIGHT_LIMIT_VAL 120 |  | ||||||
| #define RGBLIGHT_HUE_STEP 10 |  | ||||||
| #define RGBLIGHT_SAT_STEP 17 |  | ||||||
| #define RGBLIGHT_VAL_STEP 17 |  | ||||||
| @ -1,241 +0,0 @@ | |||||||
| #include QMK_KEYBOARD_H |  | ||||||
| #ifdef PROTOCOL_LUFA |  | ||||||
|   #include "lufa.h" |  | ||||||
|   #include "split_util.h" |  | ||||||
| #endif |  | ||||||
| #ifdef SSD1306OLED |  | ||||||
|   #include "ssd1306.h" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| extern keymap_config_t keymap_config; |  | ||||||
| 
 |  | ||||||
| #ifdef RGBLIGHT_ENABLE |  | ||||||
| //Following line allows macro to read current RGB settings
 |  | ||||||
| extern rgblight_config_t rgblight_config; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| extern uint8_t is_master; |  | ||||||
| 
 |  | ||||||
| // Each layer gets a name for readability, which is then used in the keymap matrix below.
 |  | ||||||
| // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 |  | ||||||
| // Layer names don't all need to be of the same length, obviously, and you can also skip them
 |  | ||||||
| // entirely and just use numbers.
 |  | ||||||
| #define _QWERTY 0 |  | ||||||
| #define _LOWER 1 |  | ||||||
| #define _RAISE 2 |  | ||||||
| #define _ADJUST 3 |  | ||||||
| 
 |  | ||||||
| enum custom_keycodes { |  | ||||||
|   QWERTY = SAFE_RANGE, |  | ||||||
|   LOWER, |  | ||||||
|   RAISE, |  | ||||||
|   ADJUST, |  | ||||||
|   BACKLIT, |  | ||||||
|   RGBRST |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| enum macro_keycodes { |  | ||||||
|   KC_SAMPLEMACRO, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| #define KC______ KC_TRNS |  | ||||||
| #define KC_XXXXX KC_NO |  | ||||||
| #define KC_LOWER LOWER |  | ||||||
| #define KC_RAISE RAISE |  | ||||||
| #define KC_RST   RESET |  | ||||||
| #define KC_LRST  RGBRST |  | ||||||
| #define KC_LTOG  RGB_TOG |  | ||||||
| #define KC_LHUI  RGB_HUI |  | ||||||
| #define KC_LHUD  RGB_HUD |  | ||||||
| #define KC_LSAI  RGB_SAI |  | ||||||
| #define KC_LSAD  RGB_SAD |  | ||||||
| #define KC_LVAI  RGB_VAI |  | ||||||
| #define KC_LVAD  RGB_VAD |  | ||||||
| #define KC_LMOD  RGB_MOD |  | ||||||
| #define KC_GUIEI GUI_T(KC_LANG2) |  | ||||||
| #define KC_ALTKN ALT_T(KC_LANG1) |  | ||||||
| 
 |  | ||||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |  | ||||||
|   [_QWERTY] = LAYOUT_kc( \ |  | ||||||
|   //,-----------------------------------------.                ,-----------------------------------------.
 |  | ||||||
|         TAB,     Q,     W,     E,     R,     T,                      Y,     U,     I,     O,     P,  BSPC,\ |  | ||||||
|   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
 |  | ||||||
|        LCTL,     A,     S,     D,     F,     G,                      H,     J,     K,     L,  SCLN,  QUOT,\ |  | ||||||
|   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
 |  | ||||||
|        LSFT,     Z,     X,     C,     V,     B,                      N,     M,  COMM,   DOT,  SLSH,   ESC,\ |  | ||||||
|   //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
 |  | ||||||
|                                   GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \ |  | ||||||
|                               //`--------------------'  `--------------------'
 |  | ||||||
|   ), |  | ||||||
| 
 |  | ||||||
|   [_LOWER] = LAYOUT_kc( \ |  | ||||||
|   //,-----------------------------------------.                ,-----------------------------------------.
 |  | ||||||
|         TAB,     1,     2,     3,     4,     5,                      6,     7,     8,     9,     0,  BSPC,\ |  | ||||||
|   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
 |  | ||||||
|        LCTL,    F1,    F2,    F3,    F4,    F5,                   LEFT,  DOWN,    UP, RIGHT, XXXXX, XXXXX,\ |  | ||||||
|   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
 |  | ||||||
|        LSFT,    F6,    F7,    F8,    F9,   F10,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\ |  | ||||||
|   //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
 |  | ||||||
|                                   GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \ |  | ||||||
|                               //`--------------------'  `--------------------'
 |  | ||||||
|   ), |  | ||||||
| 
 |  | ||||||
|   [_RAISE] = LAYOUT_kc( \ |  | ||||||
|   //,-----------------------------------------.                ,-----------------------------------------.
 |  | ||||||
|         TAB,  EXLM,    AT,  HASH,   DLR,  PERC,                   CIRC,  AMPR,  ASTR,  LPRN,  RPRN,  BSPC,\ |  | ||||||
|   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
 |  | ||||||
|        LCTL, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                   MINS,   EQL,  LCBR,  RCBR,  PIPE,   GRV,\ |  | ||||||
|   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
 |  | ||||||
|        LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                   UNDS,  PLUS,  LBRC,  RBRC,  BSLS,  TILD,\ |  | ||||||
|   //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
 |  | ||||||
|                                   GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \ |  | ||||||
|                               //`--------------------'  `--------------------'
 |  | ||||||
|   ), |  | ||||||
| 
 |  | ||||||
|   [_ADJUST] = LAYOUT_kc( \ |  | ||||||
|   //,-----------------------------------------.                ,-----------------------------------------.
 |  | ||||||
|         RST,  LRST, XXXXX, XXXXX, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\ |  | ||||||
|   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
 |  | ||||||
|        LTOG,  LHUI,  LSAI,  LVAI, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\ |  | ||||||
|   //|------+------+------+------+------+------|                |------+------+------+------+------+------|
 |  | ||||||
|        LMOD,  LHUD,  LSAD,  LVAD, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\ |  | ||||||
|   //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
 |  | ||||||
|                                   GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \ |  | ||||||
|                               //`--------------------'  `--------------------'
 |  | ||||||
|   ) |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| int RGB_current_mode; |  | ||||||
| 
 |  | ||||||
| void persistent_default_layer_set(uint16_t default_layer) { |  | ||||||
|   eeconfig_update_default_layer(default_layer); |  | ||||||
|   default_layer_set(default_layer); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Setting ADJUST layer RGB back to default
 |  | ||||||
| void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { |  | ||||||
|   if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { |  | ||||||
|     layer_on(layer3); |  | ||||||
|   } else { |  | ||||||
|     layer_off(layer3); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_init_user(void) { |  | ||||||
|     #ifdef RGBLIGHT_ENABLE |  | ||||||
|       RGB_current_mode = rgblight_config.mode; |  | ||||||
|     #endif |  | ||||||
|     //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
 |  | ||||||
|     #ifdef SSD1306OLED |  | ||||||
|         iota_gfx_init(!has_usb());   // turns on the display
 |  | ||||||
|     #endif |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
 |  | ||||||
| #ifdef SSD1306OLED |  | ||||||
| 
 |  | ||||||
| // When add source files to SRC in rules.mk, you can use functions.
 |  | ||||||
| const char *read_layer_state(void); |  | ||||||
| const char *read_logo(void); |  | ||||||
| void set_keylog(uint16_t keycode, keyrecord_t *record); |  | ||||||
| const char *read_keylog(void); |  | ||||||
| const char *read_keylogs(void); |  | ||||||
| 
 |  | ||||||
| // const char *read_mode_icon(bool swap);
 |  | ||||||
| // const char *read_host_led_state(void);
 |  | ||||||
| // void set_timelog(void);
 |  | ||||||
| // const char *read_timelog(void);
 |  | ||||||
| 
 |  | ||||||
| void matrix_scan_user(void) { |  | ||||||
|    iota_gfx_task(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_render_user(struct CharacterMatrix *matrix) { |  | ||||||
|   if (is_master) { |  | ||||||
|     // If you want to change the display of OLED, you need to change here
 |  | ||||||
|     matrix_write_ln(matrix, read_layer_state()); |  | ||||||
|     matrix_write_ln(matrix, read_keylog()); |  | ||||||
|     matrix_write_ln(matrix, read_keylogs()); |  | ||||||
|     //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
 |  | ||||||
|     //matrix_write_ln(matrix, read_host_led_state());
 |  | ||||||
|     //matrix_write_ln(matrix, read_timelog());
 |  | ||||||
|   } else { |  | ||||||
|     matrix_write(matrix, read_logo()); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { |  | ||||||
|   if (memcmp(dest->display, source->display, sizeof(dest->display))) { |  | ||||||
|     memcpy(dest->display, source->display, sizeof(dest->display)); |  | ||||||
|     dest->dirty = true; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void iota_gfx_task_user(void) { |  | ||||||
|   struct CharacterMatrix matrix; |  | ||||||
|   matrix_clear(&matrix); |  | ||||||
|   matrix_render_user(&matrix); |  | ||||||
|   matrix_update(&display, &matrix); |  | ||||||
| } |  | ||||||
| #endif//SSD1306OLED
 |  | ||||||
| 
 |  | ||||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { |  | ||||||
|   if (record->event.pressed) { |  | ||||||
| #ifdef SSD1306OLED |  | ||||||
|     set_keylog(keycode, record); |  | ||||||
| #endif |  | ||||||
|     // set_timelog();
 |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   switch (keycode) { |  | ||||||
|     case QWERTY: |  | ||||||
|       if (record->event.pressed) { |  | ||||||
|         persistent_default_layer_set(1UL<<_QWERTY); |  | ||||||
|       } |  | ||||||
|       return false; |  | ||||||
|     case LOWER: |  | ||||||
|       if (record->event.pressed) { |  | ||||||
|         layer_on(_LOWER); |  | ||||||
|         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); |  | ||||||
|       } else { |  | ||||||
|         layer_off(_LOWER); |  | ||||||
|         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); |  | ||||||
|       } |  | ||||||
|       return false; |  | ||||||
|     case RAISE: |  | ||||||
|       if (record->event.pressed) { |  | ||||||
|         layer_on(_RAISE); |  | ||||||
|         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); |  | ||||||
|       } else { |  | ||||||
|         layer_off(_RAISE); |  | ||||||
|         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); |  | ||||||
|       } |  | ||||||
|       return false; |  | ||||||
|     case ADJUST: |  | ||||||
|         if (record->event.pressed) { |  | ||||||
|           layer_on(_ADJUST); |  | ||||||
|         } else { |  | ||||||
|           layer_off(_ADJUST); |  | ||||||
|         } |  | ||||||
|         return false; |  | ||||||
|     case RGB_MOD: |  | ||||||
|       #ifdef RGBLIGHT_ENABLE |  | ||||||
|         if (record->event.pressed) { |  | ||||||
|           rgblight_mode(RGB_current_mode); |  | ||||||
|           rgblight_step(); |  | ||||||
|           RGB_current_mode = rgblight_config.mode; |  | ||||||
|         } |  | ||||||
|       #endif |  | ||||||
|       return false; |  | ||||||
|     case RGBRST: |  | ||||||
|       #ifdef RGBLIGHT_ENABLE |  | ||||||
|         if (record->event.pressed) { |  | ||||||
|           eeconfig_update_rgblight_default(); |  | ||||||
|           rgblight_enable(); |  | ||||||
|           RGB_current_mode = rgblight_config.mode; |  | ||||||
|         } |  | ||||||
|       #endif |  | ||||||
|       break; |  | ||||||
|   } |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| @ -1,10 +0,0 @@ | |||||||
| 
 |  | ||||||
| # If you want to change the display of OLED, you need to change here
 |  | ||||||
| SRC +=  ./lib/glcdfont.c \
 |  | ||||||
|         ./lib/rgb_state_reader.c \
 |  | ||||||
|         ./lib/layer_state_reader.c \
 |  | ||||||
|         ./lib/logo_reader.c \
 |  | ||||||
|         ./lib/keylogger.c \
 |  | ||||||
|         # ./lib/mode_icon_reader.c \ |  | ||||||
|         # ./lib/host_led_state_reader.c \ |  | ||||||
|         # ./lib/timelogger.c \ |  | ||||||
| @ -17,5 +17,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| #include "common.h" | #include "common.h" | ||||||
| 
 |  | ||||||
| uint8_t is_master; |  | ||||||
|  | |||||||
| @ -21,4 +21,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| #include "rev1.h" | #include "rev1.h" | ||||||
| 
 | 
 | ||||||
| #define has_usb() is_keyboard_master() | #define has_usb() is_keyboard_master() | ||||||
| extern uint8_t is_master; | #define is_master is_keyboard_master() | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| #include QMK_KEYBOARD_H | #include QMK_KEYBOARD_H | ||||||
| 
 | 
 | ||||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|   [0] = LAYOUT_split_3x6_3( \ |   [0] = LAYOUT_split_3x6_3( | ||||||
|   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 |   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | ||||||
|        KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC, |        KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
| @ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||||
| 
 | 
 | ||||||
|   ), |   ), | ||||||
| 
 | 
 | ||||||
|   [1] = LAYOUT_split_3x6_3( \ |   [1] = LAYOUT_split_3x6_3( | ||||||
|   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 |   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | ||||||
|        KC_TAB,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC, |        KC_TAB,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
| @ -40,11 +40,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, |       KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||||||
|   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | ||||||
|                                           KC_LGUI, _______,  KC_SPC,     KC_ENT, _______, KC_RALT\ |                                           KC_LGUI, _______,  KC_SPC,     KC_ENT, _______, KC_RALT | ||||||
|                                       //`--------------------------'  `--------------------------'
 |                                       //`--------------------------'  `--------------------------'
 | ||||||
|   ), |   ), | ||||||
| 
 | 
 | ||||||
|   [2] = LAYOUT_split_3x6_3( \ |   [2] = LAYOUT_split_3x6_3( | ||||||
|   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 |   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | ||||||
|        KC_TAB, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, |        KC_TAB, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
| @ -56,15 +56,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||||
|                                       //`--------------------------'  `--------------------------'
 |                                       //`--------------------------'  `--------------------------'
 | ||||||
|   ), |   ), | ||||||
| 
 | 
 | ||||||
|   [3] = LAYOUT_split_3x6_3( \ |   [3] = LAYOUT_split_3x6_3( | ||||||
|   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 |   //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | ||||||
|         RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ |         RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ |       RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||||||
|   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | ||||||
|       RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ |       RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||||||
|   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 |   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | ||||||
|                                           KC_LGUI, _______,  KC_SPC,     KC_ENT, _______, KC_RALT\ |                                           KC_LGUI, _______,  KC_SPC,     KC_ENT, _______, KC_RALT | ||||||
|                                       //`--------------------------'  `--------------------------'
 |                                       //`--------------------------'  `--------------------------'
 | ||||||
|   ) |   ) | ||||||
| }; | }; | ||||||
| @ -83,30 +83,28 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) { | |||||||
| #define L_ADJUST 8 | #define L_ADJUST 8 | ||||||
| 
 | 
 | ||||||
| void oled_render_layer_state(void) { | void oled_render_layer_state(void) { | ||||||
|     oled_write_P("Layer: ", false); |     oled_write_P(PSTR("Layer: "), false); | ||||||
|     switch (layer_state) { |     switch (layer_state) { | ||||||
|         case L_BASE: |         case L_BASE: | ||||||
|             oled_write_ln_P("Default", false); |             oled_write_ln_P(PSTR("Default"), false); | ||||||
|             break; |             break; | ||||||
|         case L_LOWER: |         case L_LOWER: | ||||||
|             oled_write_ln_P("Lower", false); |             oled_write_ln_P(PSTR("Lower"), false); | ||||||
|             break; |             break; | ||||||
|         case L_RAISE: |         case L_RAISE: | ||||||
|             oled_write_ln_P("Raise", false); |             oled_write_ln_P(PSTR("Raise"), false); | ||||||
|             break; |             break; | ||||||
|         case L_ADJUST: |         case L_ADJUST: | ||||||
|         case L_ADJUST|L_LOWER: |         case L_ADJUST|L_LOWER: | ||||||
|         case L_ADJUST|L_RAISE: |         case L_ADJUST|L_RAISE: | ||||||
|         case L_ADJUST|L_LOWER|L_RAISE: |         case L_ADJUST|L_LOWER|L_RAISE: | ||||||
|             oled_write_ln_P("Adjust", false); |             oled_write_ln_P(PSTR("Adjust"), false); | ||||||
|             break; |             break; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| char keylog_str[24] = {}; | char keylog_str[24] = {}; | ||||||
| char keylogs_str[21] = {}; |  | ||||||
| int keylogs_str_idx = 0; |  | ||||||
| 
 | 
 | ||||||
| const char code_to_name[60] = { | const char code_to_name[60] = { | ||||||
|     ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', |     ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', | ||||||
| @ -128,25 +126,11 @@ void set_keylog(uint16_t keycode, keyrecord_t *record) { | |||||||
|   snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c", |   snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c", | ||||||
|            record->event.key.row, record->event.key.col, |            record->event.key.row, record->event.key.col, | ||||||
|            keycode, name); |            keycode, name); | ||||||
| 
 |  | ||||||
|   // update keylogs
 |  | ||||||
|   if (keylogs_str_idx == sizeof(keylogs_str) - 1) { |  | ||||||
|     keylogs_str_idx = 0; |  | ||||||
|     for (int i = 0; i < sizeof(keylogs_str) - 1; i++) { |  | ||||||
|       keylogs_str[i] = ' '; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   keylogs_str[keylogs_str_idx] = name; |  | ||||||
|   keylogs_str_idx++; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void oled_render_keylog(void) { | void oled_render_keylog(void) { | ||||||
|     oled_write(keylog_str, false); |     oled_write(keylog_str, false); | ||||||
| } | } | ||||||
| void oled_render_keylogs(void) { |  | ||||||
|     oled_write(keylogs_str, false); |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| void render_bootmagic_status(bool status) { | void render_bootmagic_status(bool status) { | ||||||
|     /* Show Ctrl-Gui Swap options */ |     /* Show Ctrl-Gui Swap options */ | ||||||
| @ -176,8 +160,6 @@ void oled_task_user(void) { | |||||||
|     if (is_master) { |     if (is_master) { | ||||||
|         oled_render_layer_state(); |         oled_render_layer_state(); | ||||||
|         oled_render_keylog(); |         oled_render_keylog(); | ||||||
|         // oled_render_keylogs();
 |  | ||||||
|         // oled_renger_bootmagic_icon(keymap_config.swap_lalt_lgui);
 |  | ||||||
|     } else { |     } else { | ||||||
|         oled_render_logo(); |         oled_render_logo(); | ||||||
|     } |     } | ||||||
| @ -186,7 +168,6 @@ void oled_task_user(void) { | |||||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||||
|   if (record->event.pressed) { |   if (record->event.pressed) { | ||||||
|     set_keylog(keycode, record); |     set_keylog(keycode, record); | ||||||
|     // set_timelog();
 |  | ||||||
|   } |   } | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,360 +0,0 @@ | |||||||
| #ifdef SSD1306OLED |  | ||||||
| 
 |  | ||||||
| #include "ssd1306.h" |  | ||||||
| #include "i2c_master.h" |  | ||||||
| #include <string.h> |  | ||||||
| #include "print.h" |  | ||||||
| #ifdef ADAFRUIT_BLE_ENABLE |  | ||||||
| #include "adafruit_ble.h" |  | ||||||
| #endif |  | ||||||
| #ifdef PROTOCOL_LUFA |  | ||||||
| #include "lufa.h" |  | ||||||
| #endif |  | ||||||
| #include "sendchar.h" |  | ||||||
| #include "timer.h" |  | ||||||
| 
 |  | ||||||
| struct CharacterMatrix display; |  | ||||||
| 
 |  | ||||||
| extern const unsigned char font[] PROGMEM; |  | ||||||
| 
 |  | ||||||
| #ifndef OLED_BLANK_CHAR |  | ||||||
| #define OLED_BLANK_CHAR ' ' |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifndef OLED_BITS_FILTER |  | ||||||
| #define OLED_BITS_FILTER |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| // Set this to 1 to help diagnose early startup problems
 |  | ||||||
| // when testing power-on with ble.  Turn it off otherwise,
 |  | ||||||
| // as the latency of printing most of the debug info messes
 |  | ||||||
| // with the matrix scan, causing keys to drop.
 |  | ||||||
| #define DEBUG_TO_SCREEN 0 |  | ||||||
| 
 |  | ||||||
| //static uint16_t last_battery_update;
 |  | ||||||
| //static uint32_t vbat;
 |  | ||||||
| //#define BatteryUpdateInterval 10000 /* milliseconds */
 |  | ||||||
| 
 |  | ||||||
| // 'last_flush' is declared as uint16_t,
 |  | ||||||
| // so this must be less than 65535
 |  | ||||||
| #ifndef ScreenOffInterval |  | ||||||
| #define ScreenOffInterval 60000 /* milliseconds */ |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #if DEBUG_TO_SCREEN |  | ||||||
| static uint8_t displaying; |  | ||||||
| #endif |  | ||||||
| static uint16_t last_flush; |  | ||||||
| 
 |  | ||||||
| static bool force_dirty = true; |  | ||||||
| 
 |  | ||||||
| // Write command sequence.
 |  | ||||||
| // Returns true on success.
 |  | ||||||
| static inline bool _send_cmd1(uint8_t cmd) { |  | ||||||
|   bool res = false; |  | ||||||
| 
 |  | ||||||
|   if (i2c_start(SSD1306_ADDRESS, 100)) { |  | ||||||
|     xprintf("failed to start write to %d\n", SSD1306_ADDRESS); |  | ||||||
|     goto done; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (i2c_write(0x0 /* command byte follows */, 100)) { |  | ||||||
|     print("failed to write control byte\n"); |  | ||||||
| 
 |  | ||||||
|     goto done; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (i2c_write(cmd, 100)) { |  | ||||||
|     xprintf("failed to write command %d\n", cmd); |  | ||||||
|     goto done; |  | ||||||
|   } |  | ||||||
|   res = true; |  | ||||||
| done: |  | ||||||
|   i2c_stop(); |  | ||||||
|   return res; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #define send_cmd1(c) if (!_send_cmd1(c)) {goto done;} |  | ||||||
| #define send_cmds(c) if (!_send_cmds(c,sizeof(c))) {goto done;} |  | ||||||
| #define cmd1(X) X |  | ||||||
| #define cmd2(X,Y) X,Y |  | ||||||
| #define cmd3(X,Y,Z) X,Y,Z |  | ||||||
| 
 |  | ||||||
| static bool _send_cmds(const uint8_t* p,uint8_t sz) { |  | ||||||
|   for(uint8_t i=sz;i;i--) { |  | ||||||
|     send_cmd1( pgm_read_byte(p++) ); |  | ||||||
|   } |  | ||||||
|   return true; |  | ||||||
| done: |  | ||||||
|   return false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #define SEND_CMDS(...) {static const uint8_t _cmds[] PROGMEM = { __VA_ARGS__,0 };send_cmds(_cmds);} |  | ||||||
| 
 |  | ||||||
| static void clear_display(void) { |  | ||||||
|   matrix_clear(&display); |  | ||||||
| 
 |  | ||||||
|   // Clear all of the display bits (there can be random noise
 |  | ||||||
|   // in the RAM on startup)
 |  | ||||||
|   SEND_CMDS( |  | ||||||
|     cmd3(PageAddr, 0, (DisplayHeight / 8) - 1), |  | ||||||
|     cmd3(ColumnAddr, 0, DisplayWidth - 1) |  | ||||||
|   ); |  | ||||||
| 
 |  | ||||||
|   if (i2c_start(SSD1306_ADDRESS, 100)) { |  | ||||||
|     goto done; |  | ||||||
|   } |  | ||||||
|   if (i2c_write(0x40, 100)) { |  | ||||||
|     // Data mode
 |  | ||||||
|     goto done; |  | ||||||
|   } |  | ||||||
|   for (uint8_t row = MatrixRows;row; row--) { |  | ||||||
|     for (uint8_t col = DisplayWidth; col; col--) { |  | ||||||
|       i2c_write(0, 100); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   display.dirty = false; |  | ||||||
| 
 |  | ||||||
| done: |  | ||||||
|   i2c_stop(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #if DEBUG_TO_SCREEN |  | ||||||
| #undef sendchar |  | ||||||
| static int8_t capture_sendchar(uint8_t c) { |  | ||||||
|   sendchar(c); |  | ||||||
|   iota_gfx_write_char(c); |  | ||||||
| 
 |  | ||||||
|   if (!displaying) { |  | ||||||
|     iota_gfx_flush(); |  | ||||||
|   } |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| bool iota_gfx_init(bool rotate) { |  | ||||||
|   bool success = false; |  | ||||||
| 
 |  | ||||||
|   i2c_init(); |  | ||||||
|   SEND_CMDS( |  | ||||||
|     cmd1(DisplayOff), |  | ||||||
|     cmd2(SetDisplayClockDiv, 0x80), |  | ||||||
|     cmd2(SetMultiPlex, DisplayHeight - 1), |  | ||||||
|     cmd2(SetDisplayOffset, 0), |  | ||||||
|     cmd1(SetStartLine | 0x0), |  | ||||||
|     cmd2(SetChargePump, 0x14 /* Enable */), |  | ||||||
|     cmd2(SetMemoryMode, 0 /* horizontal addressing */) |  | ||||||
|   ); |  | ||||||
| 
 |  | ||||||
|   if(rotate){ |  | ||||||
|     // the following Flip the display orientation 180 degrees
 |  | ||||||
|   SEND_CMDS( |  | ||||||
|     cmd1(SegRemap), |  | ||||||
|     cmd1(ComScanInc) |  | ||||||
|   ); |  | ||||||
|   }else{ |  | ||||||
|     // Flips the display orientation 0 degrees
 |  | ||||||
|   SEND_CMDS( |  | ||||||
|       cmd1(SegRemap | 0x1), |  | ||||||
|       cmd1(ComScanDec) |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   SEND_CMDS( |  | ||||||
| #ifdef SSD1306_128X64 |  | ||||||
| 	cmd2(SetComPins, 0x12), |  | ||||||
| #else |  | ||||||
| 	cmd2(SetComPins, 0x2), |  | ||||||
| #endif |  | ||||||
|     cmd2(SetContrast, 0x8f), |  | ||||||
|     cmd2(SetPreCharge, 0xf1), |  | ||||||
|     cmd2(SetVComDetect, 0x40), |  | ||||||
|     cmd1(DisplayAllOnResume), |  | ||||||
|     cmd1(NormalDisplay), |  | ||||||
|     cmd1(DeActivateScroll), |  | ||||||
|     cmd1(DisplayOn), |  | ||||||
| 
 |  | ||||||
|     cmd2(SetContrast, 0) // Dim
 |  | ||||||
|   ); |  | ||||||
| 
 |  | ||||||
|   clear_display(); |  | ||||||
| 
 |  | ||||||
|   success = true; |  | ||||||
| 
 |  | ||||||
|   iota_gfx_flush(); |  | ||||||
| 
 |  | ||||||
| #if DEBUG_TO_SCREEN |  | ||||||
|   print_set_sendchar(capture_sendchar); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| done: |  | ||||||
|   return success; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool iota_gfx_off(void) { |  | ||||||
|   bool success = false; |  | ||||||
| 
 |  | ||||||
|   send_cmd1(DisplayOff); |  | ||||||
|   success = true; |  | ||||||
| 
 |  | ||||||
| done: |  | ||||||
|   return success; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool iota_gfx_on(void) { |  | ||||||
|   bool success = false; |  | ||||||
| 
 |  | ||||||
|   send_cmd1(DisplayOn); |  | ||||||
|   success = true; |  | ||||||
| 
 |  | ||||||
| done: |  | ||||||
|   return success; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) { |  | ||||||
|   *matrix->cursor = c; |  | ||||||
|   ++matrix->cursor; |  | ||||||
| 
 |  | ||||||
|   if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) { |  | ||||||
|     // We went off the end; scroll the display upwards by one line
 |  | ||||||
|     memmove(&matrix->display[0], &matrix->display[1], |  | ||||||
|             MatrixCols * (MatrixRows - 1)); |  | ||||||
|     matrix->cursor = &matrix->display[MatrixRows - 1][0]; |  | ||||||
|     memset(matrix->cursor, OLED_BLANK_CHAR, MatrixCols); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) { |  | ||||||
|   matrix->dirty = true; |  | ||||||
| 
 |  | ||||||
|   if (c == '\n') { |  | ||||||
|     // Clear to end of line from the cursor and then move to the
 |  | ||||||
|     // start of the next line
 |  | ||||||
|     uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols; |  | ||||||
| 
 |  | ||||||
|     while (cursor_col++ < MatrixCols) { |  | ||||||
|       matrix_write_char_inner(matrix, OLED_BLANK_CHAR); |  | ||||||
|     } |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   matrix_write_char_inner(matrix, c); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void iota_gfx_write_char(uint8_t c) { |  | ||||||
|   matrix_write_char(&display, c); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_write(struct CharacterMatrix *matrix, const char *data) { |  | ||||||
|   while (*data) { |  | ||||||
|     matrix_write_char(matrix, *data); |  | ||||||
|     ++data; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) { |  | ||||||
|   matrix_write(matrix, data); |  | ||||||
|   matrix_write(matrix, "\n"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void iota_gfx_write(const char *data) { |  | ||||||
|   matrix_write(&display, data); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_write_P(struct CharacterMatrix *matrix, const char *data) { |  | ||||||
|   while (true) { |  | ||||||
|     uint8_t c = pgm_read_byte(data); |  | ||||||
|     if (c == 0) { |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
|     matrix_write_char(matrix, c); |  | ||||||
|     ++data; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void iota_gfx_write_P(const char *data) { |  | ||||||
|   matrix_write_P(&display, data); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_clear(struct CharacterMatrix *matrix) { |  | ||||||
|   memset(matrix->display, OLED_BLANK_CHAR, sizeof(matrix->display)); |  | ||||||
|   matrix->cursor = &matrix->display[0][0]; |  | ||||||
|   matrix->dirty = true; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void iota_gfx_clear_screen(void) { |  | ||||||
|   matrix_clear(&display); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void matrix_render(struct CharacterMatrix *matrix) { |  | ||||||
|   last_flush = timer_read(); |  | ||||||
|   iota_gfx_on(); |  | ||||||
| #if DEBUG_TO_SCREEN |  | ||||||
|   ++displaying; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
|   // Move to the home position
 |  | ||||||
|   SEND_CMDS( |  | ||||||
|     cmd3(PageAddr, 0, MatrixRows - 1), |  | ||||||
|     cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1) |  | ||||||
|   ); |  | ||||||
| 
 |  | ||||||
|   if (i2c_write(SSD1306_ADDRESS, 100)) { |  | ||||||
|     goto done; |  | ||||||
|   } |  | ||||||
|   if (i2c_write(0x40, 100)) { |  | ||||||
|     // Data mode
 |  | ||||||
|     goto done; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   for (uint8_t row = 0; row < MatrixRows; ++row) { |  | ||||||
|     for (uint8_t col = 0; col < MatrixCols; ++col) { |  | ||||||
|       const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth); |  | ||||||
| 
 |  | ||||||
|       for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) { |  | ||||||
|         uint8_t colBits = pgm_read_byte(glyph + glyphCol); |  | ||||||
|         i2c_write(colBits OLED_BITS_FILTER, 100); |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       // 1 column of space between chars (it's not included in the glyph)
 |  | ||||||
|       //i2c_master_write(0);
 |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   matrix->dirty = false; |  | ||||||
| 
 |  | ||||||
| done: |  | ||||||
|   i2c_stop(); |  | ||||||
| #if DEBUG_TO_SCREEN |  | ||||||
|   --displaying; |  | ||||||
| #endif |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void iota_gfx_flush(void) { |  | ||||||
|   matrix_render(&display); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| __attribute__ ((weak)) |  | ||||||
| void iota_gfx_task_user(void) { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void iota_gfx_task(void) { |  | ||||||
|   iota_gfx_task_user(); |  | ||||||
| 
 |  | ||||||
|   if (display.dirty|| force_dirty) { |  | ||||||
|     iota_gfx_flush(); |  | ||||||
|     force_dirty = false; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (ScreenOffInterval !=0 && timer_elapsed(last_flush) > ScreenOffInterval) { |  | ||||||
|     iota_gfx_off(); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool process_record_gfx(uint16_t keycode, keyrecord_t *record) { |  | ||||||
|   force_dirty = true; |  | ||||||
|   return true; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| @ -19,3 +19,5 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include "rev1.h" | #include "rev1.h" | ||||||
|  | 
 | ||||||
|  | extern uint8_t is_master; | ||||||
| @ -87,10 +87,6 @@ led_config_t g_led_config = { { | |||||||
| 
 | 
 | ||||||
| void matrix_init_kb(void) { | void matrix_init_kb(void) { | ||||||
| 
 | 
 | ||||||
| #ifdef KEYBOARD_crkbd_rev1_common |  | ||||||
|     is_master = (uint8_t)is_keyboard_master(); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef RGB_MATRIX_ENABLE | #ifdef RGB_MATRIX_ENABLE | ||||||
|     if (!isLeftHand) { |     if (!isLeftHand) { | ||||||
|         g_led_config = (led_config_t){ { |         g_led_config = (led_config_t){ { | ||||||
|  | |||||||
| @ -18,8 +18,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| extern uint8_t is_master; |  | ||||||
| 
 |  | ||||||
| #include "crkbd.h" | #include "crkbd.h" | ||||||
| #if defined(KEYBOARD_crkbd_rev1_legacy) | #if defined(KEYBOARD_crkbd_rev1_legacy) | ||||||
| #    include "legacy.h" | #    include "legacy.h" | ||||||
|  | |||||||
| @ -16,8 +16,6 @@ | |||||||
| 
 | 
 | ||||||
| #include "drashna.h" | #include "drashna.h" | ||||||
| 
 | 
 | ||||||
| extern uint8_t is_master; |  | ||||||
| 
 |  | ||||||
| #ifdef RGBLIGHT_ENABLE | #ifdef RGBLIGHT_ENABLE | ||||||
| // Following line allows macro to read current RGB settings
 | // Following line allows macro to read current RGB settings
 | ||||||
| extern rgblight_config_t rgblight_config; | extern rgblight_config_t rgblight_config; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Kosuke Adachi
						Kosuke Adachi