aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKosuke Adachi <ks@fstn.jp>2020-11-17 14:18:45 +0900
committerGitHub <noreply@github.com>2020-11-16 21:18:45 -0800
commit503b76253891a9820ad2d21a89617654dc4414fb (patch)
treedd5e29cb2584a86486e9c779ccb6f125771365fa
parent88c09aa89232ad9581f5e2313f377443ee6dd0dc (diff)
downloadqmk_firmware-503b76253891a9820ad2d21a89617654dc4414fb.tar.gz
qmk_firmware-503b76253891a9820ad2d21a89617654dc4414fb.zip
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.
-rw-r--r--keyboards/crkbd/keymaps/default/config.h4
-rw-r--r--keyboards/crkbd/keymaps/default/keymap.c265
-rw-r--r--keyboards/crkbd/keymaps/default/rules.mk11
-rw-r--r--keyboards/crkbd/keymaps/foostan/config.h44
-rw-r--r--keyboards/crkbd/keymaps/foostan/keymap.c241
-rw-r--r--keyboards/crkbd/keymaps/foostan/rules.mk10
-rw-r--r--keyboards/crkbd/rev1/common/common.c2
-rw-r--r--keyboards/crkbd/rev1/common/common.h2
-rw-r--r--keyboards/crkbd/rev1/common/keymaps/via/keymap.c47
-rw-r--r--keyboards/crkbd/rev1/common/ssd1306.c360
-rw-r--r--keyboards/crkbd/rev1/legacy/legacy.h2
-rw-r--r--keyboards/crkbd/rev1/legacy/ssd1306.h (renamed from keyboards/crkbd/rev1/ssd1306.h)0
-rw-r--r--keyboards/crkbd/rev1/rev1.c4
-rw-r--r--keyboards/crkbd/rev1/rev1.h2
-rw-r--r--layouts/community/split_3x6_3/drashna/keymap.c2
15 files changed, 122 insertions, 874 deletions
diff --git a/keyboards/crkbd/keymaps/default/config.h b/keyboards/crkbd/keymaps/default/config.h
index 899fde008..937d67e25 100644
--- a/keyboards/crkbd/keymaps/default/config.h
+++ b/keyboards/crkbd/keymaps/default/config.h
@@ -28,8 +28,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
28// #define MASTER_RIGHT 28// #define MASTER_RIGHT
29// #define EE_HANDS 29// #define EE_HANDS
30 30
31#define SSD1306OLED
32
33#define USE_SERIAL_PD2 31#define USE_SERIAL_PD2
34 32
35#define TAPPING_FORCE_HOLD 33#define TAPPING_FORCE_HOLD
@@ -44,3 +42,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
44 #define RGBLIGHT_SAT_STEP 17 42 #define RGBLIGHT_SAT_STEP 17
45 #define RGBLIGHT_VAL_STEP 17 43 #define RGBLIGHT_VAL_STEP 17
46#endif 44#endif
45
46#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c" \ No newline at end of file
diff --git a/keyboards/crkbd/keymaps/default/keymap.c b/keyboards/crkbd/keymaps/default/keymap.c
index a3a9d9535..27e3c8406 100644
--- a/keyboards/crkbd/keymaps/default/keymap.c
+++ b/keyboards/crkbd/keymaps/default/keymap.c
@@ -18,218 +18,157 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
18 18
19#include QMK_KEYBOARD_H 19#include QMK_KEYBOARD_H
20 20
21
22#ifdef RGBLIGHT_ENABLE
23//Following line allows macro to read current RGB settings
24extern rgblight_config_t rgblight_config;
25#endif
26
27extern uint8_t is_master;
28
29// Each layer gets a name for readability, which is then used in the keymap matrix below.
30// The underscores don't mean anything - you can have a layer called STUFF or any other name.
31// Layer names don't all need to be of the same length, obviously, and you can also skip them
32// entirely and just use numbers.
33#define _QWERTY 0
34#define _LOWER 1
35#define _RAISE 2
36#define _ADJUST 3
37
38enum custom_keycodes {
39 QWERTY = SAFE_RANGE,
40 LOWER,
41 RAISE,
42 ADJUST,
43 BACKLIT,
44 RGBRST
45};
46
47enum macro_keycodes {
48 KC_SAMPLEMACRO,
49};
50
51const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
52 [_QWERTY] = LAYOUT_split_3x6_3( \ 22 [0] = LAYOUT_split_3x6_3(
53 //,-----------------------------------------------------. ,-----------------------------------------------------. 23 //,-----------------------------------------------------. ,-----------------------------------------------------.
54 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\ 24 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
55 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 25 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
56 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,\ 26 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
57 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 27 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
58 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,\ 28 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC,
59 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 29 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
60 KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT \ 30 KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT
61 //`--------------------------' `--------------------------' 31 //`--------------------------' `--------------------------'
62 32
63 ), 33 ),
64 34
65 [_LOWER] = LAYOUT_split_3x6_3( \ 35 [1] = LAYOUT_split_3x6_3(
66 //,-----------------------------------------------------. ,-----------------------------------------------------. 36 //,-----------------------------------------------------. ,-----------------------------------------------------.
67 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,\ 37 KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
68 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 38 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
69 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,\ 39 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
70 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 40 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
71 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ 41 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
72 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 42 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
73 KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT \ 43 KC_LGUI, _______, KC_SPC, KC_ENT, MO(3), KC_RALT
74 //`--------------------------' `--------------------------' 44 //`--------------------------' `--------------------------'
75 ), 45 ),
76 46
77 [_RAISE] = LAYOUT_split_3x6_3( \ 47 [2] = LAYOUT_split_3x6_3(
78 //,-----------------------------------------------------. ,-----------------------------------------------------. 48 //,-----------------------------------------------------. ,-----------------------------------------------------.
79 KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,\ 49 KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
80 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 50 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
81 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,\ 51 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
82 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 52 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
83 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,\ 53 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
84 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 54 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
85 KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT \ 55 KC_LGUI, MO(3), KC_SPC, KC_ENT, _______, KC_RALT
86 //`--------------------------' `--------------------------' 56 //`--------------------------' `--------------------------'
87 ), 57 ),
88 58
89 [_ADJUST] = LAYOUT_split_3x6_3( \ 59 [3] = LAYOUT_split_3x6_3(
90 //,-----------------------------------------------------. ,-----------------------------------------------------. 60 //,-----------------------------------------------------. ,-----------------------------------------------------.
91 RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ 61 RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
92 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 62 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
93 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ 63 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
94 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 64 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
95 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ 65 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
96 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 66 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
97 KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT \ 67 KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
98 //`--------------------------' `--------------------------' 68 //`--------------------------' `--------------------------'
99 ) 69 )
100}; 70};
101 71
102int RGB_current_mode; 72#ifdef OLED_DRIVER_ENABLE
103 73oled_rotation_t oled_init_user(oled_rotation_t rotation) {
104void persistent_default_layer_set(uint16_t default_layer) { 74 if (!is_master) {
105 eeconfig_update_default_layer(default_layer); 75 return OLED_ROTATION_180; // flips the display 180 degrees if offhand
106 default_layer_set(default_layer);
107}
108
109// Setting ADJUST layer RGB back to default
110void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
111 if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
112 layer_on(layer3);
113 } else {
114 layer_off(layer3);
115 } 76 }
77 return rotation;
116} 78}
117 79
118void matrix_init_user(void) { 80#define L_BASE 0
119 #ifdef RGBLIGHT_ENABLE 81#define L_LOWER 2
120 RGB_current_mode = rgblight_config.mode; 82#define L_RAISE 4
121 #endif 83#define L_ADJUST 8
122 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h 84
123 #ifdef SSD1306OLED 85void oled_render_layer_state(void) {
124 iota_gfx_init(!has_usb()); // turns on the display 86 oled_write_P(PSTR("Layer: "), false);
125 #endif 87 switch (layer_state) {
88 case L_BASE:
89 oled_write_ln_P(PSTR("Default"), false);
90 break;
91 case L_LOWER:
92 oled_write_ln_P(PSTR("Lower"), false);
93 break;
94 case L_RAISE:
95 oled_write_ln_P(PSTR("Raise"), false);
96 break;
97 case L_ADJUST:
98 case L_ADJUST|L_LOWER:
99 case L_ADJUST|L_RAISE:
100 case L_ADJUST|L_LOWER|L_RAISE:
101 oled_write_ln_P(PSTR("Adjust"), false);
102 break;
103 }
126} 104}
127 105
128//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
129#ifdef SSD1306OLED
130 106
131// When add source files to SRC in rules.mk, you can use functions. 107char keylog_str[24] = {};
132const char *read_layer_state(void);
133const char *read_logo(void);
134void set_keylog(uint16_t keycode, keyrecord_t *record);
135const char *read_keylog(void);
136const char *read_keylogs(void);
137 108
138// const char *read_mode_icon(bool swap); 109const char code_to_name[60] = {
139// const char *read_host_led_state(void); 110 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
140// void set_timelog(void); 111 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
141// const char *read_timelog(void); 112 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
113 '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
114 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
115 '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
142 116
143void matrix_scan_user(void) { 117void set_keylog(uint16_t keycode, keyrecord_t *record) {
144 iota_gfx_task(); 118 char name = ' ';
119 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
120 (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
121 if (keycode < 60) {
122 name = code_to_name[keycode];
123 }
124
125 // update keylog
126 snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
127 record->event.key.row, record->event.key.col,
128 keycode, name);
145} 129}
146 130
147void matrix_render_user(struct CharacterMatrix *matrix) { 131void oled_render_keylog(void) {
148 if (is_master) { 132 oled_write(keylog_str, false);
149 // If you want to change the display of OLED, you need to change here
150 matrix_write_ln(matrix, read_layer_state());
151 matrix_write_ln(matrix, read_keylog());
152 //matrix_write_ln(matrix, read_keylogs());
153 //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
154 //matrix_write_ln(matrix, read_host_led_state());
155 //matrix_write_ln(matrix, read_timelog());
156 } else {
157 matrix_write(matrix, read_logo());
158 }
159} 133}
160 134
161void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { 135void render_bootmagic_status(bool status) {
162 if (memcmp(dest->display, source->display, sizeof(dest->display))) { 136 /* Show Ctrl-Gui Swap options */
163 memcpy(dest->display, source->display, sizeof(dest->display)); 137 static const char PROGMEM logo[][2][3] = {
164 dest->dirty = true; 138 {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
165 } 139 {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
140 };
141 if (status) {
142 oled_write_ln_P(logo[0][0], false);
143 oled_write_ln_P(logo[0][1], false);
144 } else {
145 oled_write_ln_P(logo[1][0], false);
146 oled_write_ln_P(logo[1][1], false);
147 }
166} 148}
167 149
168void iota_gfx_task_user(void) { 150void oled_render_logo(void) {
169 struct CharacterMatrix matrix; 151 static const char PROGMEM crkbd_logo[] = {
170 matrix_clear(&matrix); 152 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
171 matrix_render_user(&matrix); 153 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
172 matrix_update(&display, &matrix); 154 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
155 0};
156 oled_write_P(crkbd_logo, false);
157}
158
159void oled_task_user(void) {
160 if (is_master) {
161 oled_render_layer_state();
162 oled_render_keylog();
163 } else {
164 oled_render_logo();
165 }
173} 166}
174#endif//SSD1306OLED
175 167
176bool process_record_user(uint16_t keycode, keyrecord_t *record) { 168bool process_record_user(uint16_t keycode, keyrecord_t *record) {
177 if (record->event.pressed) { 169 if (record->event.pressed) {
178#ifdef SSD1306OLED
179 set_keylog(keycode, record); 170 set_keylog(keycode, record);
180#endif
181 // set_timelog();
182 }
183
184 switch (keycode) {
185 case QWERTY:
186 if (record->event.pressed) {
187 persistent_default_layer_set(1UL<<_QWERTY);
188 }
189 return false;
190 case LOWER:
191 if (record->event.pressed) {
192 layer_on(_LOWER);
193 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
194 } else {
195 layer_off(_LOWER);
196 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
197 }
198 return false;
199 case RAISE:
200 if (record->event.pressed) {
201 layer_on(_RAISE);
202 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
203 } else {
204 layer_off(_RAISE);
205 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
206 }
207 return false;
208 case ADJUST:
209 if (record->event.pressed) {
210 layer_on(_ADJUST);
211 } else {
212 layer_off(_ADJUST);
213 }
214 return false;
215 case RGB_MOD:
216 #ifdef RGBLIGHT_ENABLE
217 if (record->event.pressed) {
218 rgblight_mode(RGB_current_mode);
219 rgblight_step();
220 RGB_current_mode = rgblight_config.mode;
221 }
222 #endif
223 return false;
224 case RGBRST:
225 #ifdef RGBLIGHT_ENABLE
226 if (record->event.pressed) {
227 eeconfig_update_rgblight_default();
228 rgblight_enable();
229 RGB_current_mode = rgblight_config.mode;
230 }
231 #endif
232 break;
233 } 171 }
234 return true; 172 return true;
235} 173}
174#endif // OLED_DRIVER_ENABLE
diff --git a/keyboards/crkbd/keymaps/default/rules.mk b/keyboards/crkbd/keymaps/default/rules.mk
index f84e5b2af..9444b88d5 100644
--- a/keyboards/crkbd/keymaps/default/rules.mk
+++ b/keyboards/crkbd/keymaps/default/rules.mk
@@ -1,10 +1 @@
1 OLED_DRIVER_ENABLE = yes
2# If you want to change the display of OLED, you need to change here
3SRC += ./lib/glcdfont.c \
4 ./lib/rgb_state_reader.c \
5 ./lib/layer_state_reader.c \
6 ./lib/logo_reader.c \
7 ./lib/keylogger.c \
8 # ./lib/mode_icon_reader.c \
9 # ./lib/host_led_state_reader.c \
10 # ./lib/timelogger.c \
diff --git a/keyboards/crkbd/keymaps/foostan/config.h b/keyboards/crkbd/keymaps/foostan/config.h
deleted file mode 100644
index 644e81365..000000000
--- a/keyboards/crkbd/keymaps/foostan/config.h
+++ /dev/null
@@ -1,44 +0,0 @@
1/*
2This is the c configuration file for the keymap
3
4Copyright 2012 Jun Wako <wakojun@gmail.com>
5Copyright 2015 Jack Humbert
6
7This program is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#pragma once
22
23//#define USE_MATRIX_I2C
24
25/* Select hand configuration */
26
27#define MASTER_LEFT
28// #define MASTER_RIGHT
29// #define EE_HANDS
30
31#define SSD1306OLED
32
33#define USE_SERIAL_PD2
34
35#define TAPPING_FORCE_HOLD
36#define TAPPING_TERM 100
37
38#undef RGBLED_NUM
39#define RGBLIGHT_ANIMATIONS
40#define RGBLED_NUM 27
41#define RGBLIGHT_LIMIT_VAL 120
42#define RGBLIGHT_HUE_STEP 10
43#define RGBLIGHT_SAT_STEP 17
44#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/crkbd/keymaps/foostan/keymap.c b/keyboards/crkbd/keymaps/foostan/keymap.c
deleted file mode 100644
index 5235b7836..000000000
--- a/keyboards/crkbd/keymaps/foostan/keymap.c
+++ /dev/null
@@ -1,241 +0,0 @@
1#include QMK_KEYBOARD_H
2#ifdef PROTOCOL_LUFA
3 #include "lufa.h"
4 #include "split_util.h"
5#endif
6#ifdef SSD1306OLED
7 #include "ssd1306.h"
8#endif
9
10extern keymap_config_t keymap_config;
11
12#ifdef RGBLIGHT_ENABLE
13//Following line allows macro to read current RGB settings
14extern rgblight_config_t rgblight_config;
15#endif
16
17extern uint8_t is_master;
18
19// Each layer gets a name for readability, which is then used in the keymap matrix below.
20// The underscores don't mean anything - you can have a layer called STUFF or any other name.
21// Layer names don't all need to be of the same length, obviously, and you can also skip them
22// entirely and just use numbers.
23#define _QWERTY 0
24#define _LOWER 1
25#define _RAISE 2
26#define _ADJUST 3
27
28enum custom_keycodes {
29 QWERTY = SAFE_RANGE,
30 LOWER,
31 RAISE,
32 ADJUST,
33 BACKLIT,
34 RGBRST
35};
36
37enum macro_keycodes {
38 KC_SAMPLEMACRO,
39};
40
41#define KC______ KC_TRNS
42#define KC_XXXXX KC_NO
43#define KC_LOWER LOWER
44#define KC_RAISE RAISE
45#define KC_RST RESET
46#define KC_LRST RGBRST
47#define KC_LTOG RGB_TOG
48#define KC_LHUI RGB_HUI
49#define KC_LHUD RGB_HUD
50#define KC_LSAI RGB_SAI
51#define KC_LSAD RGB_SAD
52#define KC_LVAI RGB_VAI
53#define KC_LVAD RGB_VAD
54#define KC_LMOD RGB_MOD
55#define KC_GUIEI GUI_T(KC_LANG2)
56#define KC_ALTKN ALT_T(KC_LANG1)
57
58const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
59 [_QWERTY] = LAYOUT_kc( \
60 //,-----------------------------------------. ,-----------------------------------------.
61 TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,\
62 //|------+------+------+------+------+------| |------+------+------+------+------+------|
63 LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT,\
64 //|------+------+------+------+------+------| |------+------+------+------+------+------|
65 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ESC,\
66 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
67 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
68 //`--------------------' `--------------------'
69 ),
70
71 [_LOWER] = LAYOUT_kc( \
72 //,-----------------------------------------. ,-----------------------------------------.
73 TAB, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,\
74 //|------+------+------+------+------+------| |------+------+------+------+------+------|
75 LCTL, F1, F2, F3, F4, F5, LEFT, DOWN, UP, RIGHT, XXXXX, XXXXX,\
76 //|------+------+------+------+------+------| |------+------+------+------+------+------|
77 LSFT, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
78 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
79 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
80 //`--------------------' `--------------------'
81 ),
82
83 [_RAISE] = LAYOUT_kc( \
84 //,-----------------------------------------. ,-----------------------------------------.
85 TAB, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\
86 //|------+------+------+------+------+------| |------+------+------+------+------+------|
87 LCTL, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, MINS, EQL, LCBR, RCBR, PIPE, GRV,\
88 //|------+------+------+------+------+------| |------+------+------+------+------+------|
89 LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, UNDS, PLUS, LBRC, RBRC, BSLS, TILD,\
90 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
91 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
92 //`--------------------' `--------------------'
93 ),
94
95 [_ADJUST] = LAYOUT_kc( \
96 //,-----------------------------------------. ,-----------------------------------------.
97 RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
98 //|------+------+------+------+------+------| |------+------+------+------+------+------|
99 LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
100 //|------+------+------+------+------+------| |------+------+------+------+------+------|
101 LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
102 //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
103 GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
104 //`--------------------' `--------------------'
105 )
106};
107
108int RGB_current_mode;
109
110void persistent_default_layer_set(uint16_t default_layer) {
111 eeconfig_update_default_layer(default_layer);
112 default_layer_set(default_layer);
113}
114
115// Setting ADJUST layer RGB back to default
116void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
117 if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
118 layer_on(layer3);
119 } else {
120 layer_off(layer3);
121 }
122}
123
124void matrix_init_user(void) {
125 #ifdef RGBLIGHT_ENABLE
126 RGB_current_mode = rgblight_config.mode;
127 #endif
128 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
129 #ifdef SSD1306OLED
130 iota_gfx_init(!has_usb()); // turns on the display
131 #endif
132}
133
134//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
135#ifdef SSD1306OLED
136
137// When add source files to SRC in rules.mk, you can use functions.
138const char *read_layer_state(void);
139const char *read_logo(void);
140void set_keylog(uint16_t keycode, keyrecord_t *record);
141const char *read_keylog(void);
142const char *read_keylogs(void);
143
144// const char *read_mode_icon(bool swap);
145// const char *read_host_led_state(void);
146// void set_timelog(void);
147// const char *read_timelog(void);
148
149void matrix_scan_user(void) {
150 iota_gfx_task();
151}
152
153void matrix_render_user(struct CharacterMatrix *matrix) {
154 if (is_master) {
155 // If you want to change the display of OLED, you need to change here
156 matrix_write_ln(matrix, read_layer_state());
157 matrix_write_ln(matrix, read_keylog());
158 matrix_write_ln(matrix, read_keylogs());
159 //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
160 //matrix_write_ln(matrix, read_host_led_state());
161 //matrix_write_ln(matrix, read_timelog());
162 } else {
163 matrix_write(matrix, read_logo());
164 }
165}
166
167void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
168 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
169 memcpy(dest->display, source->display, sizeof(dest->display));
170 dest->dirty = true;
171 }
172}
173
174void iota_gfx_task_user(void) {
175 struct CharacterMatrix matrix;
176 matrix_clear(&matrix);
177 matrix_render_user(&matrix);
178 matrix_update(&display, &matrix);
179}
180#endif//SSD1306OLED
181
182bool process_record_user(uint16_t keycode, keyrecord_t *record) {
183 if (record->event.pressed) {
184#ifdef SSD1306OLED
185 set_keylog(keycode, record);
186#endif
187 // set_timelog();
188 }
189
190 switch (keycode) {
191 case QWERTY:
192 if (record->event.pressed) {
193 persistent_default_layer_set(1UL<<_QWERTY);
194 }
195 return false;
196 case LOWER:
197 if (record->event.pressed) {
198 layer_on(_LOWER);
199 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
200 } else {
201 layer_off(_LOWER);
202 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
203 }
204 return false;
205 case RAISE:
206 if (record->event.pressed) {
207 layer_on(_RAISE);
208 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
209 } else {
210 layer_off(_RAISE);
211 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
212 }
213 return false;
214 case ADJUST:
215 if (record->event.pressed) {
216 layer_on(_ADJUST);
217 } else {
218 layer_off(_ADJUST);
219 }
220 return false;
221 case RGB_MOD:
222 #ifdef RGBLIGHT_ENABLE
223 if (record->event.pressed) {
224 rgblight_mode(RGB_current_mode);
225 rgblight_step();
226 RGB_current_mode = rgblight_config.mode;
227 }
228 #endif
229 return false;
230 case RGBRST:
231 #ifdef RGBLIGHT_ENABLE
232 if (record->event.pressed) {
233 eeconfig_update_rgblight_default();
234 rgblight_enable();
235 RGB_current_mode = rgblight_config.mode;
236 }
237 #endif
238 break;
239 }
240 return true;
241}
diff --git a/keyboards/crkbd/keymaps/foostan/rules.mk b/keyboards/crkbd/keymaps/foostan/rules.mk
deleted file mode 100644
index f84e5b2af..000000000
--- a/keyboards/crkbd/keymaps/foostan/rules.mk
+++ /dev/null
@@ -1,10 +0,0 @@
1
2# If you want to change the display of OLED, you need to change here
3SRC += ./lib/glcdfont.c \
4 ./lib/rgb_state_reader.c \
5 ./lib/layer_state_reader.c \
6 ./lib/logo_reader.c \
7 ./lib/keylogger.c \
8 # ./lib/mode_icon_reader.c \
9 # ./lib/host_led_state_reader.c \
10 # ./lib/timelogger.c \
diff --git a/keyboards/crkbd/rev1/common/common.c b/keyboards/crkbd/rev1/common/common.c
index 5ea7347de..ddc0b5fe9 100644
--- a/keyboards/crkbd/rev1/common/common.c
+++ b/keyboards/crkbd/rev1/common/common.c
@@ -17,5 +17,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/ 17*/
18 18
19#include "common.h" 19#include "common.h"
20
21uint8_t is_master;
diff --git a/keyboards/crkbd/rev1/common/common.h b/keyboards/crkbd/rev1/common/common.h
index af1795f48..71779e2e0 100644
--- a/keyboards/crkbd/rev1/common/common.h
+++ b/keyboards/crkbd/rev1/common/common.h
@@ -21,4 +21,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
21#include "rev1.h" 21#include "rev1.h"
22 22
23#define has_usb() is_keyboard_master() 23#define has_usb() is_keyboard_master()
24extern uint8_t is_master; 24#define is_master is_keyboard_master()
diff --git a/keyboards/crkbd/rev1/common/keymaps/via/keymap.c b/keyboards/crkbd/rev1/common/keymaps/via/keymap.c
index a3b2e52ce..ecd1f17a5 100644
--- a/keyboards/crkbd/rev1/common/keymaps/via/keymap.c
+++ b/keyboards/crkbd/rev1/common/keymaps/via/keymap.c
@@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
19#include QMK_KEYBOARD_H 19#include QMK_KEYBOARD_H
20 20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22 [0] = LAYOUT_split_3x6_3( \ 22 [0] = LAYOUT_split_3x6_3(
23 //,-----------------------------------------------------. ,-----------------------------------------------------. 23 //,-----------------------------------------------------. ,-----------------------------------------------------.
24 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, 24 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
25 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 25 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
32 32
33 ), 33 ),
34 34
35 [1] = LAYOUT_split_3x6_3( \ 35 [1] = LAYOUT_split_3x6_3(
36 //,-----------------------------------------------------. ,-----------------------------------------------------. 36 //,-----------------------------------------------------. ,-----------------------------------------------------.
37 KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 37 KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
38 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 38 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
@@ -40,11 +40,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
40 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 40 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
41 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 41 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
42 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 42 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
43 KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT\ 43 KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
44 //`--------------------------' `--------------------------' 44 //`--------------------------' `--------------------------'
45 ), 45 ),
46 46
47 [2] = LAYOUT_split_3x6_3( \ 47 [2] = LAYOUT_split_3x6_3(
48 //,-----------------------------------------------------. ,-----------------------------------------------------. 48 //,-----------------------------------------------------. ,-----------------------------------------------------.
49 KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, 49 KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
50 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 50 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
@@ -56,15 +56,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
56 //`--------------------------' `--------------------------' 56 //`--------------------------' `--------------------------'
57 ), 57 ),
58 58
59 [3] = LAYOUT_split_3x6_3( \ 59 [3] = LAYOUT_split_3x6_3(
60 //,-----------------------------------------------------. ,-----------------------------------------------------. 60 //,-----------------------------------------------------. ,-----------------------------------------------------.
61 RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ 61 RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
62 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 62 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
63 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ 63 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
64 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 64 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
65 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ 65 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
66 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 66 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
67 KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT\ 67 KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
68 //`--------------------------' `--------------------------' 68 //`--------------------------' `--------------------------'
69 ) 69 )
70}; 70};
@@ -83,30 +83,28 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
83#define L_ADJUST 8 83#define L_ADJUST 8
84 84
85void oled_render_layer_state(void) { 85void oled_render_layer_state(void) {
86 oled_write_P("Layer: ", false); 86 oled_write_P(PSTR("Layer: "), false);
87 switch (layer_state) { 87 switch (layer_state) {
88 case L_BASE: 88 case L_BASE:
89 oled_write_ln_P("Default", false); 89 oled_write_ln_P(PSTR("Default"), false);
90 break; 90 break;
91 case L_LOWER: 91 case L_LOWER:
92 oled_write_ln_P("Lower", false); 92 oled_write_ln_P(PSTR("Lower"), false);
93 break; 93 break;
94 case L_RAISE: 94 case L_RAISE:
95 oled_write_ln_P("Raise", false); 95 oled_write_ln_P(PSTR("Raise"), false);
96 break; 96 break;
97 case L_ADJUST: 97 case L_ADJUST:
98 case L_ADJUST|L_LOWER: 98 case L_ADJUST|L_LOWER:
99 case L_ADJUST|L_RAISE: 99 case L_ADJUST|L_RAISE:
100 case L_ADJUST|L_LOWER|L_RAISE: 100 case L_ADJUST|L_LOWER|L_RAISE:
101 oled_write_ln_P("Adjust", false); 101 oled_write_ln_P(PSTR("Adjust"), false);
102 break; 102 break;
103 } 103 }
104} 104}
105 105
106 106
107char keylog_str[24] = {}; 107char keylog_str[24] = {};
108char keylogs_str[21] = {};
109int keylogs_str_idx = 0;
110 108
111const char code_to_name[60] = { 109const char code_to_name[60] = {
112 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 110 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
@@ -128,25 +126,11 @@ void set_keylog(uint16_t keycode, keyrecord_t *record) {
128 snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c", 126 snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
129 record->event.key.row, record->event.key.col, 127 record->event.key.row, record->event.key.col,
130 keycode, name); 128 keycode, name);
131
132 // update keylogs
133 if (keylogs_str_idx == sizeof(keylogs_str) - 1) {
134 keylogs_str_idx = 0;
135 for (int i = 0; i < sizeof(keylogs_str) - 1; i++) {
136 keylogs_str[i] = ' ';
137 }
138 }
139
140 keylogs_str[keylogs_str_idx] = name;
141 keylogs_str_idx++;
142} 129}
143 130
144void oled_render_keylog(void) { 131void oled_render_keylog(void) {
145 oled_write(keylog_str, false); 132 oled_write(keylog_str, false);
146} 133}
147void oled_render_keylogs(void) {
148 oled_write(keylogs_str, false);
149}
150 134
151void render_bootmagic_status(bool status) { 135void render_bootmagic_status(bool status) {
152 /* Show Ctrl-Gui Swap options */ 136 /* Show Ctrl-Gui Swap options */
@@ -176,8 +160,6 @@ void oled_task_user(void) {
176 if (is_master) { 160 if (is_master) {
177 oled_render_layer_state(); 161 oled_render_layer_state();
178 oled_render_keylog(); 162 oled_render_keylog();
179 // oled_render_keylogs();
180 // oled_renger_bootmagic_icon(keymap_config.swap_lalt_lgui);
181 } else { 163 } else {
182 oled_render_logo(); 164 oled_render_logo();
183 } 165 }
@@ -186,7 +168,6 @@ void oled_task_user(void) {
186bool process_record_user(uint16_t keycode, keyrecord_t *record) { 168bool process_record_user(uint16_t keycode, keyrecord_t *record) {
187 if (record->event.pressed) { 169 if (record->event.pressed) {
188 set_keylog(keycode, record); 170 set_keylog(keycode, record);
189 // set_timelog();
190 } 171 }
191 return true; 172 return true;
192} 173}
diff --git a/keyboards/crkbd/rev1/common/ssd1306.c b/keyboards/crkbd/rev1/common/ssd1306.c
deleted file mode 100644
index 4a889da67..000000000
--- a/keyboards/crkbd/rev1/common/ssd1306.c
+++ /dev/null
@@ -1,360 +0,0 @@
1#ifdef SSD1306OLED
2
3#include "ssd1306.h"
4#include "i2c_master.h"
5#include <string.h>
6#include "print.h"
7#ifdef ADAFRUIT_BLE_ENABLE
8#include "adafruit_ble.h"
9#endif
10#ifdef PROTOCOL_LUFA
11#include "lufa.h"
12#endif
13#include "sendchar.h"
14#include "timer.h"
15
16struct CharacterMatrix display;
17
18extern const unsigned char font[] PROGMEM;
19
20#ifndef OLED_BLANK_CHAR
21#define OLED_BLANK_CHAR ' '
22#endif
23
24#ifndef OLED_BITS_FILTER
25#define OLED_BITS_FILTER
26#endif
27
28// Set this to 1 to help diagnose early startup problems
29// when testing power-on with ble. Turn it off otherwise,
30// as the latency of printing most of the debug info messes
31// with the matrix scan, causing keys to drop.
32#define DEBUG_TO_SCREEN 0
33
34//static uint16_t last_battery_update;
35//static uint32_t vbat;
36//#define BatteryUpdateInterval 10000 /* milliseconds */
37
38// 'last_flush' is declared as uint16_t,
39// so this must be less than 65535
40#ifndef ScreenOffInterval
41#define ScreenOffInterval 60000 /* milliseconds */
42#endif
43
44#if DEBUG_TO_SCREEN
45static uint8_t displaying;
46#endif
47static uint16_t last_flush;
48
49static bool force_dirty = true;
50
51// Write command sequence.
52// Returns true on success.
53static inline bool _send_cmd1(uint8_t cmd) {
54 bool res = false;
55
56 if (i2c_start(SSD1306_ADDRESS, 100)) {
57 xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
58 goto done;
59 }
60
61 if (i2c_write(0x0 /* command byte follows */, 100)) {
62 print("failed to write control byte\n");
63
64 goto done;
65 }
66
67 if (i2c_write(cmd, 100)) {
68 xprintf("failed to write command %d\n", cmd);
69 goto done;
70 }
71 res = true;
72done:
73 i2c_stop();
74 return res;
75}
76
77#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;}
78#define send_cmds(c) if (!_send_cmds(c,sizeof(c))) {goto done;}
79#define cmd1(X) X
80#define cmd2(X,Y) X,Y
81#define cmd3(X,Y,Z) X,Y,Z
82
83static bool _send_cmds(const uint8_t* p,uint8_t sz) {
84 for(uint8_t i=sz;i;i--) {
85 send_cmd1( pgm_read_byte(p++) );
86 }
87 return true;
88done:
89 return false;
90}
91
92#define SEND_CMDS(...) {static const uint8_t _cmds[] PROGMEM = { __VA_ARGS__,0 };send_cmds(_cmds);}
93
94static void clear_display(void) {
95 matrix_clear(&display);
96
97 // Clear all of the display bits (there can be random noise
98 // in the RAM on startup)
99 SEND_CMDS(
100 cmd3(PageAddr, 0, (DisplayHeight / 8) - 1),
101 cmd3(ColumnAddr, 0, DisplayWidth - 1)
102 );
103
104 if (i2c_start(SSD1306_ADDRESS, 100)) {
105 goto done;
106 }
107 if (i2c_write(0x40, 100)) {
108 // Data mode
109 goto done;
110 }
111 for (uint8_t row = MatrixRows;row; row--) {
112 for (uint8_t col = DisplayWidth; col; col--) {
113 i2c_write(0, 100);
114 }
115 }
116
117 display.dirty = false;
118
119done:
120 i2c_stop();
121}
122
123#if DEBUG_TO_SCREEN
124#undef sendchar
125static int8_t capture_sendchar(uint8_t c) {
126 sendchar(c);
127 iota_gfx_write_char(c);
128
129 if (!displaying) {
130 iota_gfx_flush();
131 }
132 return 0;
133}
134#endif
135
136bool iota_gfx_init(bool rotate) {
137 bool success = false;
138
139 i2c_init();
140 SEND_CMDS(
141 cmd1(DisplayOff),
142 cmd2(SetDisplayClockDiv, 0x80),
143 cmd2(SetMultiPlex, DisplayHeight - 1),
144 cmd2(SetDisplayOffset, 0),
145 cmd1(SetStartLine | 0x0),
146 cmd2(SetChargePump, 0x14 /* Enable */),
147 cmd2(SetMemoryMode, 0 /* horizontal addressing */)
148 );
149
150 if(rotate){
151 // the following Flip the display orientation 180 degrees
152 SEND_CMDS(
153 cmd1(SegRemap),
154 cmd1(ComScanInc)
155 );
156 }else{
157 // Flips the display orientation 0 degrees
158 SEND_CMDS(
159 cmd1(SegRemap | 0x1),
160 cmd1(ComScanDec)
161 );
162 }
163
164 SEND_CMDS(
165#ifdef SSD1306_128X64
166 cmd2(SetComPins, 0x12),
167#else
168 cmd2(SetComPins, 0x2),
169#endif
170 cmd2(SetContrast, 0x8f),
171 cmd2(SetPreCharge, 0xf1),
172 cmd2(SetVComDetect, 0x40),
173 cmd1(DisplayAllOnResume),
174 cmd1(NormalDisplay),
175 cmd1(DeActivateScroll),
176 cmd1(DisplayOn),
177
178 cmd2(SetContrast, 0) // Dim
179 );
180
181 clear_display();
182
183 success = true;
184
185 iota_gfx_flush();
186
187#if DEBUG_TO_SCREEN
188 print_set_sendchar(capture_sendchar);
189#endif
190
191done:
192 return success;
193}
194
195bool iota_gfx_off(void) {
196 bool success = false;
197
198 send_cmd1(DisplayOff);
199 success = true;
200
201done:
202 return success;
203}
204
205bool iota_gfx_on(void) {
206 bool success = false;
207
208 send_cmd1(DisplayOn);
209 success = true;
210
211done:
212 return success;
213}
214
215void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
216 *matrix->cursor = c;
217 ++matrix->cursor;
218
219 if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) {
220 // We went off the end; scroll the display upwards by one line
221 memmove(&matrix->display[0], &matrix->display[1],
222 MatrixCols * (MatrixRows - 1));
223 matrix->cursor = &matrix->display[MatrixRows - 1][0];
224 memset(matrix->cursor, OLED_BLANK_CHAR, MatrixCols);
225 }
226}
227
228void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
229 matrix->dirty = true;
230
231 if (c == '\n') {
232 // Clear to end of line from the cursor and then move to the
233 // start of the next line
234 uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols;
235
236 while (cursor_col++ < MatrixCols) {
237 matrix_write_char_inner(matrix, OLED_BLANK_CHAR);
238 }
239 return;
240 }
241
242 matrix_write_char_inner(matrix, c);
243}
244
245void iota_gfx_write_char(uint8_t c) {
246 matrix_write_char(&display, c);
247}
248
249void matrix_write(struct CharacterMatrix *matrix, const char *data) {
250 while (*data) {
251 matrix_write_char(matrix, *data);
252 ++data;
253 }
254}
255
256void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) {
257 matrix_write(matrix, data);
258 matrix_write(matrix, "\n");
259}
260
261void iota_gfx_write(const char *data) {
262 matrix_write(&display, data);
263}
264
265void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
266 while (true) {
267 uint8_t c = pgm_read_byte(data);
268 if (c == 0) {
269 return;
270 }
271 matrix_write_char(matrix, c);
272 ++data;
273 }
274}
275
276void iota_gfx_write_P(const char *data) {
277 matrix_write_P(&display, data);
278}
279
280void matrix_clear(struct CharacterMatrix *matrix) {
281 memset(matrix->display, OLED_BLANK_CHAR, sizeof(matrix->display));
282 matrix->cursor = &matrix->display[0][0];
283 matrix->dirty = true;
284}
285
286void iota_gfx_clear_screen(void) {
287 matrix_clear(&display);
288}
289
290void matrix_render(struct CharacterMatrix *matrix) {
291 last_flush = timer_read();
292 iota_gfx_on();
293#if DEBUG_TO_SCREEN
294 ++displaying;
295#endif
296
297 // Move to the home position
298 SEND_CMDS(
299 cmd3(PageAddr, 0, MatrixRows - 1),
300 cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1)
301 );
302
303 if (i2c_write(SSD1306_ADDRESS, 100)) {
304 goto done;
305 }
306 if (i2c_write(0x40, 100)) {
307 // Data mode
308 goto done;
309 }
310
311 for (uint8_t row = 0; row < MatrixRows; ++row) {
312 for (uint8_t col = 0; col < MatrixCols; ++col) {
313 const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth);
314
315 for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) {
316 uint8_t colBits = pgm_read_byte(glyph + glyphCol);
317 i2c_write(colBits OLED_BITS_FILTER, 100);
318 }
319
320 // 1 column of space between chars (it's not included in the glyph)
321 //i2c_master_write(0);
322 }
323 }
324
325 matrix->dirty = false;
326
327done:
328 i2c_stop();
329#if DEBUG_TO_SCREEN
330 --displaying;
331#endif
332}
333
334void iota_gfx_flush(void) {
335 matrix_render(&display);
336}
337
338__attribute__ ((weak))
339void iota_gfx_task_user(void) {
340}
341
342void iota_gfx_task(void) {
343 iota_gfx_task_user();
344
345 if (display.dirty|| force_dirty) {
346 iota_gfx_flush();
347 force_dirty = false;
348 }
349
350 if (ScreenOffInterval !=0 && timer_elapsed(last_flush) > ScreenOffInterval) {
351 iota_gfx_off();
352 }
353}
354
355bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
356 force_dirty = true;
357 return true;
358}
359
360#endif
diff --git a/keyboards/crkbd/rev1/legacy/legacy.h b/keyboards/crkbd/rev1/legacy/legacy.h
index 6c6308e59..08dfcefbc 100644
--- a/keyboards/crkbd/rev1/legacy/legacy.h
+++ b/keyboards/crkbd/rev1/legacy/legacy.h
@@ -19,3 +19,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
19#pragma once 19#pragma once
20 20
21#include "rev1.h" 21#include "rev1.h"
22
23extern uint8_t is_master; \ No newline at end of file
diff --git a/keyboards/crkbd/rev1/ssd1306.h b/keyboards/crkbd/rev1/legacy/ssd1306.h
index 11a3cc67f..11a3cc67f 100644
--- a/keyboards/crkbd/rev1/ssd1306.h
+++ b/keyboards/crkbd/rev1/legacy/ssd1306.h
diff --git a/keyboards/crkbd/rev1/rev1.c b/keyboards/crkbd/rev1/rev1.c
index 5e4e6560f..f2df8942a 100644
--- a/keyboards/crkbd/rev1/rev1.c
+++ b/keyboards/crkbd/rev1/rev1.c
@@ -87,10 +87,6 @@ led_config_t g_led_config = { {
87 87
88void matrix_init_kb(void) { 88void matrix_init_kb(void) {
89 89
90#ifdef KEYBOARD_crkbd_rev1_common
91 is_master = (uint8_t)is_keyboard_master();
92#endif
93
94#ifdef RGB_MATRIX_ENABLE 90#ifdef RGB_MATRIX_ENABLE
95 if (!isLeftHand) { 91 if (!isLeftHand) {
96 g_led_config = (led_config_t){ { 92 g_led_config = (led_config_t){ {
diff --git a/keyboards/crkbd/rev1/rev1.h b/keyboards/crkbd/rev1/rev1.h
index ce88068e6..c805efccc 100644
--- a/keyboards/crkbd/rev1/rev1.h
+++ b/keyboards/crkbd/rev1/rev1.h
@@ -18,8 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
18 18
19#pragma once 19#pragma once
20 20
21extern uint8_t is_master;
22
23#include "crkbd.h" 21#include "crkbd.h"
24#if defined(KEYBOARD_crkbd_rev1_legacy) 22#if defined(KEYBOARD_crkbd_rev1_legacy)
25# include "legacy.h" 23# include "legacy.h"
diff --git a/layouts/community/split_3x6_3/drashna/keymap.c b/layouts/community/split_3x6_3/drashna/keymap.c
index 30e3958fe..e53d05397 100644
--- a/layouts/community/split_3x6_3/drashna/keymap.c
+++ b/layouts/community/split_3x6_3/drashna/keymap.c
@@ -16,8 +16,6 @@
16 16
17#include "drashna.h" 17#include "drashna.h"
18 18
19extern uint8_t is_master;
20
21#ifdef RGBLIGHT_ENABLE 19#ifdef RGBLIGHT_ENABLE
22// Following line allows macro to read current RGB settings 20// Following line allows macro to read current RGB settings
23extern rgblight_config_t rgblight_config; 21extern rgblight_config_t rgblight_config;