aboutsummaryrefslogtreecommitdiff
path: root/keyboards/ein_60
diff options
context:
space:
mode:
authorJames Smith <bronzegears@gmail.com>2021-09-22 00:18:25 -0400
committerGitHub <noreply@github.com>2021-09-21 21:18:25 -0700
commit43e88f34aa2587b16ca3f344ae7c40e2dcb5b622 (patch)
tree872dc0bb63e18e5b9282957aa537d910e1e36666 /keyboards/ein_60
parent208ea0e18cc6725c173e106a88528fb0576f3ce6 (diff)
downloadqmk_firmware-43e88f34aa2587b16ca3f344ae7c40e2dcb5b622.tar.gz
qmk_firmware-43e88f34aa2587b16ca3f344ae7c40e2dcb5b622.zip
[Keyboard] add ein_60 (#14398)
Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'keyboards/ein_60')
-rw-r--r--keyboards/ein_60/config.h98
-rw-r--r--keyboards/ein_60/ein_60.c120
-rw-r--r--keyboards/ein_60/ein_60.h38
-rw-r--r--keyboards/ein_60/glcdfont.c233
-rw-r--r--keyboards/ein_60/keymaps/default/keymap.c208
-rw-r--r--keyboards/ein_60/keymaps/default/readme.md3
-rw-r--r--keyboards/ein_60/keymaps/default/rules.mk4
-rw-r--r--keyboards/ein_60/keymaps/klackygears/config.h28
-rw-r--r--keyboards/ein_60/keymaps/klackygears/keymap.c176
-rw-r--r--keyboards/ein_60/keymaps/klackygears/readme.md1
-rw-r--r--keyboards/ein_60/keymaps/klackygears/rules.mk8
-rw-r--r--keyboards/ein_60/keymaps/ledtest/keymap.c207
-rw-r--r--keyboards/ein_60/keymaps/ledtest/readme.md1
-rw-r--r--keyboards/ein_60/keymaps/ledtest/rules.mk4
-rw-r--r--keyboards/ein_60/readme.md27
-rw-r--r--keyboards/ein_60/rules.mk26
16 files changed, 1182 insertions, 0 deletions
diff --git a/keyboards/ein_60/config.h b/keyboards/ein_60/config.h
new file mode 100644
index 000000000..c701f1f6d
--- /dev/null
+++ b/keyboards/ein_60/config.h
@@ -0,0 +1,98 @@
1/*
2Copyright 2021 klackygears
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0x4A53
24#define PRODUCT_ID 0x0003
25#define DEVICE_VER 0x0001
26#define MANUFACTURER klackygears
27#define PRODUCT EIN_60
28
29/* key matrix size */
30#define MATRIX_ROWS 4
31#define MATRIX_COLS 13
32
33#define MATRIX_ROW_PINS { F1, F2, F3, F4 }
34#define MATRIX_COL_PINS { A3, A2, A1, A0, F6, F5, F0, E0, E1, C0, C1, C2, C3 }
35
36#define DIODE_DIRECTION COL2ROW
37
38#ifdef ENCODER_ENABLE
39# define ENCODERS_PAD_A { B0, C5 }
40# define ENCODERS_PAD_B { E3, C4 }
41# define ENCODER_RESOLUTIONS { 4, 4 }
42#endif
43
44#ifdef OLED_ENABLE
45# define OLED_DISPLAY_128X64
46# define OLED_TIMEOUT 450000
47# define OLED_FONT_H "keyboards/ein_60/glcdfont.c"
48#endif
49
50#ifdef AUDIO_ENABLE
51# define AUDIO_PIN C6
52# define AUDIO_CLICKY
53# define AUDIO_DAC_SAMPLE_MAX 4095U
54#endif
55
56#define RGB_DI_PIN E7
57#ifdef RGB_DI_PIN
58# define RGBLED_NUM 38
59# define RGBLIGHT_HUE_STEP 4
60# define RGBLIGHT_SAT_STEP 8
61# define RGBLIGHT_VAL_STEP 8
62# define RGBLIGHT_LIMIT_VAL 200 /* The maximum brightness level */
63# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
64# define RGBLIGHT_EFFECT_BREATHING
65# define RGBLIGHT_EFFECT_RAINBOW_MOOD
66# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
67# define RGBLIGHT_EFFECT_SNAKE
68# define RGBLIGHT_EFFECT_KNIGHT
69# define RGBLIGHT_EFFECT_CHRISTMAS
70# define RGBLIGHT_EFFECT_STATIC_GRADIENT
71# define RGBLIGHT_EFFECT_RGB_TEST
72# define RGBLIGHT_EFFECT_ALTERNATING
73# define RGBLIGHT_EFFECT_TWINKLE
74// /*== customize breathing effect ==*/
75// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
76// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
77// /*==== use exp() and sin() ====*/
78// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
79// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
80#endif
81
82#ifdef RGB_MATRIX_ENABLE
83# define DRIVER_LED_TOTAL 38
84# define RGB_MATRIX_LED_FLUSH_LIMIT 16
85# define RGB_MATRIX_STARTUP_VAL 150
86# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
87#endif
88
89/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
90#define DEBOUNCE 5
91
92/* define if matrix has ghost (lacks anti-ghosting diodes) */
93//#define MATRIX_HAS_GHOST
94
95/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
96#define LOCKING_SUPPORT_ENABLE
97/* Locking resynchronize hack */
98#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/ein_60/ein_60.c b/keyboards/ein_60/ein_60.c
new file mode 100644
index 000000000..e9431edef
--- /dev/null
+++ b/keyboards/ein_60/ein_60.c
@@ -0,0 +1,120 @@
1/* Copyright 2021 klackygears
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "ein_60.h"
17
18#ifdef RGB_MATRIX_ENABLE
19
20 // Logical Layout
21 // Columns
22 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13
23 // ROWS
24 // 37 0 1 2 3 4 5 6 7 8 9 10 11 12 0
25 // 36 13 1
26 // 35 14 2
27 // 34 15 3
28 // 33 16 3
29 // 32 17 4
30 // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 5
31
32led_config_t g_led_config = { {
33 { 36, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 13 },
34 { 34, 1, 2, 3, 4, 5, NO_LED, 6, 7, 8, 9, 10, 15 },
35 { 33, 30, 29, 28, 27, 26, NO_LED, 23, 22, 21, 20, 19, 16 },
36 { 32, 30, 29, 28, 27, 26, 24, 23, 22, 21, 20, 19, 17 }
37}, {
38 { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 119, 0 }, { 134, 0 }, { 149, 0 }, { 164, 0 }, { 179, 0 }, { 194, 0 }, { 209, 0 }, { 224, 11 },
39 { 224, 21 }, { 224, 32 }, { 224, 43 }, { 224, 53 }, { 209, 64 }, { 194, 64 }, { 179, 64 }, { 164, 64 }, { 149, 64 }, { 134, 64 }, { 119, 64 }, { 105, 64 }, { 90, 64 },
40 { 75, 64 }, { 60, 64 }, { 45, 64 }, { 30, 64 }, { 15, 64 }, { 0, 53 }, { 0, 43 }, { 0, 32 }, { 0, 21 }, { 0, 11 }, { 15, 0 },
41}, {
42 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
43 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
44 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
45 1, 2,
46} };
47#endif
48
49#ifdef AUDIO_ENABLE
50const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT(
51 30, 31, 32, 33, 34, 35, 35, 36, 37, 38, 39, 40, 41,
52 18, 9, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
53 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
54 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
55);
56#endif
57
58#ifdef OLED_ENABLE
59__attribute__((weak)) void oled_task_user(void) {
60 // Host Keyboard Layer Status
61 oled_write_P(PSTR("Layer: "), false);
62 switch (get_highest_layer(layer_state)) {
63 case 0:
64 oled_write_P(PSTR("Default\n"), false);
65 break;
66 case 1:
67 oled_write_P(PSTR("Lower\n"), false);
68 break;
69 case 2:
70 oled_write_P(PSTR("Raise\n"), false);
71 break;
72 case 3:
73 oled_write_P(PSTR("Adjust\n"), false);
74 break;
75 case 4:
76 oled_write_P(PSTR("FN\n"), false);
77 break;
78 default:
79 // Or use the write_ln shortcut over adding '\n' to the end of your string
80 oled_write_ln_P(PSTR("Undefined"), false);
81 }
82
83
84 // Host Keyboard LED Status
85 led_t led_state = host_keyboard_led_state();
86 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
87 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
88 oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
89
90 oled_set_cursor(1,2);
91 oled_advance_page(true);
92 static const char PROGMEM ein60_logo[] = {
93 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
94 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 11,251,139,139,139,139,139,139,139,139,139,139,139, 11, 15, 0,240,240, 16,240, 0,240,240, 16,240,224,192,128, 0, 0, 0, 0,240, 16,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 11,251,139,139,139,139,139,139,139,139,139,139,139,143,128, 0, 0, 0, 0,254,255, 11,251, 11, 11, 11, 11,139,203,235,123,187,219,235,251,255, 7,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
95 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 4,253,197,197,197,197,197,197,197,197,197,197,199,192,192, 0,255,255, 0,255, 0,255,255, 0,254, 13, 27, 55,111,222,188,120,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0,255,197,197,197,197,197,197,197,197,197,197,253,253,255,131,254, 0, 0,255,255, 0,255,184,220,238,247,219,205,198,195,193,192,255,255,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
96 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 3, 3, 2, 3, 0, 3, 3, 2, 3, 0, 0, 0, 0, 0, 1, 3, 2, 2, 3, 0, 8, 28, 20, 20, 20, 20, 20, 28, 8, 0, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97 };
98 oled_write_raw_P(ein60_logo, sizeof(ein60_logo));
99}
100#endif
101
102#ifdef ENCODER_ENABLE
103bool encoder_update_kb(uint8_t index, bool clockwise) {
104 if (!encoder_update_user(index, clockwise)) { return false; }
105 if (index == 0) { /* First encoder */
106 if (clockwise) {
107 tap_code_delay(KC_VOLU, 10);
108 } else {
109 tap_code_delay(KC_VOLD, 10);
110 }
111 } else if (index == 1) { /* Second encoder */
112 if (clockwise) {
113 tap_code(KC_DOWN);
114 } else {
115 tap_code(KC_UP);
116 }
117 }
118 return true;
119}
120#endif
diff --git a/keyboards/ein_60/ein_60.h b/keyboards/ein_60/ein_60.h
new file mode 100644
index 000000000..91bfe3acf
--- /dev/null
+++ b/keyboards/ein_60/ein_60.h
@@ -0,0 +1,38 @@
1/* Copyright 2021 klackygears
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "quantum.h"
19
20/* This is a shortcut to help you visually see your layout.
21 *
22 * The first section contains all of the arguments representing the physical
23 * layout of the board and position of the keys.
24 *
25 * The second converts the arguments into a two-dimensional array which
26 * represents the switch matrix.
27 */
28#define LAYOUT( \
29 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
30 K10, K11, K12, K13, K14, K15, K17, K18, K19, K1A, K1B, K1C, \
31 K20, K21, K22, K23, K24, K25, K27, K28, K29, K2A, K2B, K2C, \
32 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
33) { \
34 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
35 { K10, K11, K12, K13, K14, K15, KC_NO, K17, K18, K19, K1A, K1B, K1C }, \
36 { K20, K21, K22, K23, K24, K25, KC_NO, K27, K28, K29, K2A, K2B, K2C }, \
37 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C } \
38}
diff --git a/keyboards/ein_60/glcdfont.c b/keyboards/ein_60/glcdfont.c
new file mode 100644
index 000000000..f9984b62c
--- /dev/null
+++ b/keyboards/ein_60/glcdfont.c
@@ -0,0 +1,233 @@
1// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
2// See gfxfont.h for newer custom bitmap font info.
3
4#pragma once
5
6#include "progmem.h"
7
8static const char PROGMEM font[] = {
9 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
10 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
11 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
12 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
13 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
14 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
15 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
16 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
17 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
18 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
19 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
20 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
21 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
22 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
23 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
24 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
25 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
26 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
27 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
28 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
29 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
30 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
31 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
32 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
33 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
34 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
35 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
36 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
37 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
38 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
39 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
40 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
43 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
44 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
45 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
46 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
47 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
48 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
49 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
50 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
51 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
52 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
53 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
54 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
55 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
56 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
57 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
58 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
59 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
60 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
61 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
62 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
63 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
64 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
65 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
66 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
67 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
68 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
69 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
70 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
71 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
72 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
73 0x00, 0x41, 0x5D, 0x59, 0x4E, 0x00,
74 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
75 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
76 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
77 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
78 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
79 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
80 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
81 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
82 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
83 0x20, 0x40, 0x40, 0x3F, 0x00, 0x00,
84 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
85 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
86 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
87 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
88 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
89 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
90 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
91 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
92 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
93 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00,
94 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
95 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
96 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
97 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
98 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
99 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
100 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
101 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
102 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
103 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
104 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
105 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
106 0x78, 0x14, 0x14, 0x78, 0x00, 0x00,
107 0x7C, 0x54, 0x54, 0x28, 0x00, 0x00,
108 0x38, 0x44, 0x44, 0x28, 0x00, 0x00,
109 0x7C, 0x44, 0x44, 0x38, 0x00, 0x00,
110 0x7C, 0x54, 0x54, 0x44, 0x00, 0x00,
111 0x7C, 0x14, 0x14, 0x04, 0x00, 0x00,
112 0x38, 0x44, 0x54, 0x34, 0x00, 0x00,
113 0x7C, 0x10, 0x10, 0x7C, 0x00, 0x00,
114 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00,
115 0x20, 0x40, 0x40, 0x3C, 0x00, 0x00,
116 0x7C, 0x10, 0x28, 0x44, 0x00, 0x00,
117 0x7C, 0x40, 0x40, 0x40, 0x00, 0x00,
118 0x7C, 0x08, 0x70, 0x08, 0x7C, 0x00,
119 0x7C, 0x08, 0x10, 0x7C, 0x00, 0x00,
120 0x38, 0x44, 0x44, 0x38, 0x00, 0x00,
121 0x7C, 0x14, 0x14, 0x08, 0x00, 0x00,
122 0x38, 0x44, 0x24, 0x58, 0x00, 0x00,
123 0x7C, 0x14, 0x34, 0x48, 0x00, 0x00,
124 0x48, 0x54, 0x54, 0x24, 0x00, 0x00,
125 0x04, 0x7C, 0x04, 0x00, 0x00, 0x00,
126 0x3C, 0x40, 0x40, 0x3C, 0x00, 0x00,
127 0x3C, 0x40, 0x20, 0x1C, 0x00, 0x00,
128 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
129 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
130 0x0C, 0x10, 0x70, 0x10, 0x0C, 0x00,
131 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
132 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
133 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
134 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
135 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
136 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140 0x00, 0xFC, 0xFC, 0x2C, 0xEC, 0x2C,
141 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
142 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x3C,
143 0x00, 0xC0, 0xC0, 0x40, 0xC0, 0x00,
144 0xC0, 0xC0, 0x40, 0xC0, 0x80, 0x00,
145 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
146 0x40, 0xC0, 0x00, 0x00, 0x00, 0x00,
147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148 0x00, 0xF8, 0xFC, 0x2C, 0xEC, 0x2C,
149 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
150 0x2C, 0x2C, 0x2C, 0x2C, 0x3C, 0x00,
151 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFC,
152 0x2C, 0xEC, 0x2C, 0x2C, 0x2C, 0x2C,
153 0x2C, 0x2C, 0xAC, 0xEC, 0xEC, 0x6C,
154 0xAC, 0xEC, 0xFC, 0x1C, 0xF0, 0x00,
155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
159 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
160 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
161 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
162 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
163 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
164 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
165 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
172 0x00, 0xFF, 0xFF, 0x10, 0xF7, 0x16,
173 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
174 0x16, 0x16, 0x16, 0x1E, 0x00, 0x00,
175 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00,
176 0xFF, 0xFF, 0x00, 0xFB, 0x37, 0x6F,
177 0xDE, 0xBC, 0x78, 0xF0, 0xE0, 0xFF,
178 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x16,
181 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
182 0x16, 0x16, 0x16, 0xF6, 0xF6, 0xFE,
183 0x0C, 0xF8, 0x00, 0x00, 0xFF, 0xFF,
184 0x00, 0xFF, 0xE0, 0x70, 0xB8, 0xDC,
185 0x6E, 0x37, 0x1B, 0x0D, 0x06, 0x03,
186 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00,
187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
191 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
192 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
193 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
194 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
195 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
196 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
197 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204 0x00, 0x0F, 0x0F, 0x08, 0x0B, 0x0B,
205 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
206 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0F,
207 0x00, 0x0F, 0x0F, 0x08, 0x0F, 0x00,
208 0x0F, 0x0F, 0x08, 0x0F, 0x00, 0x00,
209 0x00, 0x01, 0x03, 0x06, 0x0D, 0x0B,
210 0x08, 0x0F, 0x00, 0x20, 0x70, 0x50,
211 0x50, 0x50, 0x50, 0x50, 0x70, 0x20,
212 0x00, 0x07, 0x0F, 0x0C, 0x0B, 0x0B,
213 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
214 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
215 0x0E, 0x03, 0x00, 0x00, 0x07, 0x0F,
216 0x0C, 0x0B, 0x0A, 0x0B, 0x0B, 0x0B,
217 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
218 0x0B, 0x0B, 0x0B, 0x0E, 0x03, 0x00,
219 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
220 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
228 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
231 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233};
diff --git a/keyboards/ein_60/keymaps/default/keymap.c b/keyboards/ein_60/keymaps/default/keymap.c
new file mode 100644
index 000000000..3984dabcb
--- /dev/null
+++ b/keyboards/ein_60/keymaps/default/keymap.c
@@ -0,0 +1,208 @@
1/* Copyright 2021 klackygears
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18enum layer_names {
19 _QWERTY,
20 _LOWER,
21 _RAISE,
22 _ADJUST,
23 _FUNCTION,
24};
25
26enum custom_keycodes {
27 RGBRST = SAFE_RANGE,
28};
29
30const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
31
32 /* Qwerty
33 * ,-----------------------------------------. ,------. ,----------------------------------------.
34 * | Tab | Q | W | E | R | T | | Mute | | Y | U | I | O | P | Bksp |
35 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
36 * | Func | A | S | D | F | G | | H | J | K | L | ; | Enter|
37 * |------+------+------+------+------+------| |------+------+------+------+------+------|
38 * | Shift| Z | X | C | V | B | | N | M | , | . | / | ' |
39 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
40 * | Ctrl | ` | GUI | Alt |Lower |Space | |Space | |Space |Raise | Left | Down | Up |Right |
41 * `-----------------------------------------' `------' `-----------------------------------------'
42 */
43 [_QWERTY] = LAYOUT(
44 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MUTE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
45 MO(_FUNCTION), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
46 OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
47 KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_SPC, KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
48 ),
49 /* Lower
50 * ,-----------------------------------------. ,------. ,-----------------------------------------.
51 * | Esc | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | Del |
52 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
53 * | F1 | F2 | F3 | F4 | F5 | F6 | | | _ | + | { | } |Enter |
54 * |------+------+------+------+------+------| |------+------+------+------+------+------|
55 * | F7 | F8 | F9 | F10 | F11 | F12 | | | | | Mute | | | |
56 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
57 * | | | | |Lower | Bksp | | | | Bksp |Raise | Next | Vol- | Vol+ | Play |
58 * `-----------------------------------------' `------' `-----------------------------------------'
59 */
60 [_LOWER] = LAYOUT(
61 KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
62 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
63 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, KC_MUTE, _______, KC_PIPE,
64 _______, _______, _______, _______, _______, KC_BSPC, _______, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
65 ),
66 /* Raise
67 * ,-----------------------------------------. ,------. ,-----------------------------------------.
68 * | Esc | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | Del |
69 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
70 * | | 4 | 5 | 6 | + | F5 | | F6 | - | = | [ | ] |Enter |
71 * |------+------+------+------+------+------| |------+------+------+------+------+------|
72 * |Enter | 7 | 8 | 9 | - | F11 | | F12 |ISO # |ISO / | Mute | | \ |
73 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
74 * | | , | 0 | . |Lower | Bksp | | | | Bksp |Raise | Next | Vol- | Vol+ | Play |
75 * `-----------------------------------------' `------' `-----------------------------------------'
76 */
77 [_RAISE] = LAYOUT(
78 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
79 _______, KC_4, KC_5, KC_6, KC_PLUS, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
80 KC_ENT, KC_7, KC_8, KC_9, KC_MINS, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_MUTE, _______, KC_BSLS,
81 _______, KC_COMM, KC_0, KC_DOT, _______, KC_BSPC, _______, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
82 ),
83 /* Adjust (Lower + Raise)
84 * ,-----------------------------------------. ,------. ,-----------------------------------------.
85 * | | | | | | | | | |RGBRST|RGBMOD|RGBVAI|RGBSAI|RGBHUI| |
86 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
87 * | | | | | | | | |RGBRMO|RGBVAD|RGBSAD|RGBHUD|RGBTOG|
88 * |------+------+------+------+------+------| |------+------+------+------+------+------|
89 * | | | | | | | | | | | | |BLSTEP|
90 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
91 * | | | | | | | | | | | | | | | RESET|
92 * `-----------------------------------------' `------' `-----------------------------------------'
93 */
94 [_ADJUST] = LAYOUT(
95 _______, _______, _______, _______, _______, _______, _______, RGBRST, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, _______,
96 _______, _______, _______, _______, _______, _______, _______, RGB_RMOD,RGB_VAD, RGB_SAD, RGB_HUD, RGB_TOG,
97 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP,
98 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET
99 ),
100 /* Function
101 * ,-----------------------------------------. ,------. ,-----------------------------------------.
102 * | | | | | | | | | | | | Up | | | |
103 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
104 * | | | | | | | | | Left | Down |Right | | |
105 * |------+------+------+------+------+------| |------+------+------+------+------+------|
106 * | Caps | | | | | | | | | | | | |
107 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
108 * | | | | | | | | | | | | | | | |
109 * `-----------------------------------------' `------' `-----------------------------------------'
110 */
111 [_FUNCTION] = LAYOUT(
112 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
113 _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
114 KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
115 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
116 )
117};
118
119layer_state_t layer_state_set_user(layer_state_t state) {
120 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
121}
122
123#ifdef OLED_ENABLE
124
125
126static void render_ein60_logo(void) {
127 static const char PROGMEM ein60_logo[] = {
128 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
129 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 11,251,139,139,139,139,139,139,139,139,139,139,139, 11, 15, 0,240,240, 16,240, 0,240,240, 16,240,224,192,128, 0, 0, 0, 0,240, 16,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 11,251,139,139,139,139,139,139,139,139,139,139,139,143,128, 0, 0, 0, 0,254,255, 11,251, 11, 11, 11, 11,139,203,235,123,187,219,235,251,255, 7,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
130 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 4,253,197,197,197,197,197,197,197,197,197,197,199,192,192, 0,255,255, 0,255, 0,255,255, 0,254, 13, 27, 55,111,222,188,120,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0,255,197,197,197,197,197,197,197,197,197,197,253,253,255,131,254, 0, 0,255,255, 0,255,184,220,238,247,219,205,198,195,193,192,255,255,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
131 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 3, 3, 2, 3, 0, 3, 3, 2, 3, 0, 0, 0, 0, 0, 1, 3, 2, 2, 3, 0, 8, 28, 20, 20, 20, 20, 20, 28, 8, 0, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
132 };
133 oled_write_raw_P(ein60_logo, sizeof(ein60_logo));
134 }
135
136static void render_status(void) {
137 // Host Keyboard Layer Status
138 oled_write_P(PSTR("Layer: "), false);
139 switch (get_highest_layer(layer_state)) {
140 case _QWERTY:
141 oled_write_P(PSTR("Default\n"), false);
142 break;
143 case _LOWER:
144 oled_write_P(PSTR("Lower\n"), false);
145 break;
146 case _RAISE:
147 oled_write_P(PSTR("Raise\n"), false);
148 break;
149 case _ADJUST:
150 oled_write_P(PSTR("Adjust\n"), false);
151 break;
152 case _FUNCTION:
153 oled_write_P(PSTR("FN\n"), false);
154 break;
155 default:
156 // Or use the write_ln shortcut over adding '\n' to the end of your string
157 oled_write_ln_P(PSTR("Undefined"), false);
158 }
159
160
161 // Host Keyboard LED Status
162 led_t led_state = host_keyboard_led_state();
163 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
164 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
165 oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
166
167 oled_set_cursor(1,2);
168}
169
170void oled_task_user(void) {
171
172 render_status();
173 oled_write_ln_P(PSTR(""), false);
174 render_ein60_logo();
175}
176#endif
177
178
179bool encoder_update_user(uint8_t index, bool clockwise) {
180 if (index == 0) { /* First encoder */
181 if (clockwise) {
182 tap_code(KC_VOLU);
183 } else {
184 tap_code(KC_VOLD);
185 }
186 } else if (index == 1) { /* Second encoder */
187 if (clockwise) {
188 tap_code(KC_DOWN);
189 } else {
190 tap_code(KC_UP);
191 }
192 }
193 return true;
194}
195
196bool process_record_user(uint16_t keycode, keyrecord_t *record) {
197 switch (keycode) {
198 case RGBRST:
199 #ifdef RGBLIGHT_ENABLE
200 if (record->event.pressed) {
201 eeconfig_update_rgblight_default();
202 rgblight_enable();
203 }
204 #endif
205 break;
206 }
207 return true;
208}
diff --git a/keyboards/ein_60/keymaps/default/readme.md b/keyboards/ein_60/keymaps/default/readme.md
new file mode 100644
index 000000000..8f9aab043
--- /dev/null
+++ b/keyboards/ein_60/keymaps/default/readme.md
@@ -0,0 +1,3 @@
1# The default keymap for EIN_60.
2
3It utilizes a nearly identical layout as the Plank. The OLED is enabled, rotary encoders are enabled, and the LEDs are enabled with RGB Matrix. You'll need to alter the rules.mk file in your own keymap to change this or simply cut the jumper pad with a hobby knife to disconnect them completely. There is an option to install a KELIKING KLJ-1102 speaker and enable with "AUDIO_ENABLE = yes" in your rules.mk file.
diff --git a/keyboards/ein_60/keymaps/default/rules.mk b/keyboards/ein_60/keymaps/default/rules.mk
new file mode 100644
index 000000000..04b133f6a
--- /dev/null
+++ b/keyboards/ein_60/keymaps/default/rules.mk
@@ -0,0 +1,4 @@
1# Build Options
2# change yes to no to disable
3RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
4RGB_MATRIX_ENABLE = yes # Enable for pretty RGB matrix effects
diff --git a/keyboards/ein_60/keymaps/klackygears/config.h b/keyboards/ein_60/keymaps/klackygears/config.h
new file mode 100644
index 000000000..d3b1c7b4d
--- /dev/null
+++ b/keyboards/ein_60/keymaps/klackygears/config.h
@@ -0,0 +1,28 @@
1/* Copyright 2021 klackygears
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19
20
21#define PERMISSIVE_HOLD
22#define TAPPING_TERM 150
23#define IGNORE_MOD_TAP_INTERRUPT
24
25
26#ifdef RGB_MATRIX_ENABLE
27 #define RGB_MATRIX_KEYPRESSES
28#endif
diff --git a/keyboards/ein_60/keymaps/klackygears/keymap.c b/keyboards/ein_60/keymaps/klackygears/keymap.c
new file mode 100644
index 000000000..ea1d77dea
--- /dev/null
+++ b/keyboards/ein_60/keymaps/klackygears/keymap.c
@@ -0,0 +1,176 @@
1/* Copyright 2020 klackygears
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18#include "klackygears.h"
19#include "stdio.h"
20
21//For an explanation of what's going on here with the keymap wrappers, check out drashna's user folder.
22const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
23
24 [_WINBASE] = LAYOUT_wrapper(
25 KC_ESC, _______________DVORAK_L1___________________, KC_MUTE, _______________DVORAK_R1___________________, KC_BSPC,
26 AU_TOG, _______________DVORAK_L2___________________, _______________DVORAK_R2___________________, RGB_TOG,
27 CK_TOGG, _______________WINDVK_L3___________________, _______________WINDVK_R3___________________, RGB_MOD,
28 KC_1, KC_2, KC_3, ________WIN_THUMB_L______, KC_SPC, ________WIN_THUMB_R______, KC_1, KC_2, KC_GAMER
29 ),
30 [_MACBASE] = LAYOUT_wrapper(
31 KC_ESC, _______________DVORAK_L1___________________, _______, _______________DVORAK_R1___________________, KC_BSPC,
32 RGB_TOG, _______________DVORAK_L2___________________, _______________DVORAK_R2___________________, RGB_TOG,
33 RGB_MOD, _______________MACDVK_L3___________________, _______________MACDVK_R3___________________, RGB_MOD,
34 _______, _______, _______, ________MAC_THUMB_L______, _______, ________MAC_THUMB_R______, _______, _______, _______
35 ),
36 [_QWERTY] = LAYOUT_wrapper(
37 KC_ESC, _________________COLEMAK_L1________________, KC_ESC, _________________QWERTY_R1_________________, KC_BSPC,
38 KC_CAPS, _________________COLEMAK_L2________________, _________________QWERTY_R2_________________, KC_ENT,
39 KC_LSFT, _________________COLEMAK_L3________________, _________________QWERTY_R3_________________, KC_RSFT,
40 KC_LCTL, KC_LGUI, KC_LALT, _______, MO(_MNMB), MO(_SYMB), KC_SPC, MO(_SYMB), MO(_MNMB), KC_RGUI,_______, MO(_MDIA), MO(_FUNC)
41 ),
42
43 //Borderlands
44 [_GAMER] = LAYOUT_wrapper(
45 KC_ESC, KC_R, KC_G, KC_W, KC_E, KC_1, _______, _________________RGB_1_____________________, KC_WINBASE,
46 KC_TAB, KC_V, KC_A, KC_S, KC_D, KC_2, _________________RGB_2_____________________, _______,
47 KC_C, KC_I, KC_F, KC_Q, KC_4, KC_3, _________________MEDIA_____________________, _______,
48 KC_Z, KC_X, KC_K, KC_LCTL, KC_LSFT, KC_SPC, KC_SPC, KC_F12, KC_P, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
49 ),
50
51 [_SYMB] = LAYOUT_wrapper(
52 _______, _________________PUNC_L1_ALT_______________, _______, _________________PUNC_R1___________________, _______,
53 _______, _________________PUNC_L3___________________, _________________PUNC_R2___________________, _______,
54 RGB_MOD, _________________PUNC_L3_ALT_______________, _________________PUNC_R3___________________, _______,
55 _______, _______, KC_NLCK, KC_SLCK, KC_DEL, _______, _______, _______, KC_CAPS, _______, _______, _______, _______
56 ),
57
58 [_FUNC] = LAYOUT_wrapper(
59 _______, _____________FUNC_L1_______________________, _______, _______, _____________FUNC_1_______________, _______,
60 _______, ________MAC_MISSION_CTRL__________, LGUI(KC_L), _______, _____________FUNC_2_______________, _______,
61 RGB_MOD, _____________FUNC_L3_______________________, _______, _____________FUNC_3_______________, _______,
62 _______, _______, _______, _______, _______, _______, _______, _______, KC_CAPS, _______, _______, _______, _______
63 ),
64
65 [_MNMB] = LAYOUT_wrapper(
66 _______, _________________MACNAV_L1_________________, _______, _________________NUMB_R1___________________, _______,
67 _______, _________________MACNAV_L2_________________, _________________NUMB_R2___________________, _______,
68 RGB_MOD, _________________MACNAV_L3_________________, _________________NUMB_R3_MAC_______________, _______,
69 _______, _______, _______, _______, _______, _______, _______, _______, RSFT_T(KC_ENT), KC_RSFT, _______, _______, _______
70 ),
71
72
73 [_NUMB] = LAYOUT_wrapper(
74 _______, _________________WINNAV_L1_________________, _______, _________________NUMB_R1___________________, _______,
75 _______, _________________WINNAV_L2_________________, _________________NUMB_R2___________________, _______,
76 RGB_MOD, _________________WINNAV_L3_________________, _________________NUMB_R3_WIN_______________, _______,
77 _______, _______, _______, TO(_WINBASE), _______, _______, _______, _______, RSFT_T(KC_ENT), KC_RSFT, _______, _______, _______
78 ),
79
80 [_MDIA] = LAYOUT_wrapper(
81 _______, _________________LYOUT_____________________, _______, _________________RGB_1_____________________, RGB_TOG,
82 _______, MU_TOG, _______, _______, _______, CK_UP, _________________RGB_2_____________________, _______,
83 RGB_MOD, MU_MOD, MU_TOG, CK_TOGG, CK_RST, CK_DOWN, _________________MEDIA_____________________, _______,
84 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
85 )
86
87};
88
89
90#ifdef OLED_ENABLE
91
92 char wpm_str[10];
93
94static void render_ein60_logo(void) {
95 static const char PROGMEM ein60_logo[] = {
96 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 11,251,139,139,139,139,139,139,139,139,139,139,139, 11, 15, 0,240,240, 16,240, 0,240,240, 16,240,224,192,128, 0, 0, 0, 0,240, 16,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 11,251,139,139,139,139,139,139,139,139,139,139,139,143,128, 0, 0, 0, 0,254,255, 11,251, 11, 11, 11, 11,139,203,235,123,187,219,235,251,255, 7,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
98 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 4,253,197,197,197,197,197,197,197,197,197,197,199,192,192, 0,255,255, 0,255, 0,255,255, 0,254, 13, 27, 55,111,222,188,120,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0,255,197,197,197,197,197,197,197,197,197,197,253,253,255,131,254, 0, 0,255,255, 0,255,184,220,238,247,219,205,198,195,193,192,255,255,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
99 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 3, 3, 2, 3, 0, 3, 3, 2, 3, 0, 0, 0, 0, 0, 1, 3, 2, 2, 3, 0, 8, 28, 20, 20, 20, 20, 20, 28, 8, 0, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
100 };
101 oled_write_raw_P(ein60_logo, sizeof(ein60_logo));
102 }
103
104
105
106static void render_status(void) {
107//void oled_task_user(void) {
108
109 // Host Keyboard Layer Status
110 oled_write_P(PSTR("Layer: "), false);
111 switch (get_highest_layer(layer_state)) {
112 case _WINBASE:
113 oled_write_P(PSTR("Base\n"), false);
114 break;
115 case _SYMB:
116 oled_write_P(PSTR("Symbol\n"), false);
117 break;
118 case _FUNC:
119 oled_write_P(PSTR("FN\n"), false);
120 break;
121 case _MNMB:
122 oled_write_P(PSTR("Numbpad Mac\n"), false);
123 break;
124 case _NUMB:
125 oled_write_P(PSTR("Numbpad\n"), false);
126 break;
127 case _MDIA:
128 oled_write_P(PSTR("Media\n"), false);
129 break;
130 default:
131 // Or use the write_ln shortcut over adding '\n' to the end of your string
132 oled_write_ln_P(PSTR("Undefined"), false);
133 }
134
135 // Host Keyboard LED Status
136 led_t led_state = host_keyboard_led_state();
137 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
138 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
139 oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
140
141
142 sprintf(wpm_str, "WPM: %03d", get_current_wpm());
143 oled_set_cursor(1,2);
144 oled_write(wpm_str, false);
145
146}
147
148void oled_task_user(void) {
149
150 render_status();
151 oled_write_ln_P(PSTR(""), false);
152 render_ein60_logo();
153
154}
155
156#endif
157
158
159bool encoder_update_user(uint8_t index, bool clockwise) {
160 if (index == 0) { /* First encoder */
161 if (clockwise) {
162 tap_code(KC_VOLU);
163 } else {
164 tap_code(KC_VOLD);
165 }
166 } else if (index == 1) { /* Second encoder */
167 if (clockwise) {
168 tap_code(KC_DOWN);
169 } else {
170 tap_code(KC_UP);
171 }
172 }
173 return true;
174}
175
176
diff --git a/keyboards/ein_60/keymaps/klackygears/readme.md b/keyboards/ein_60/keymaps/klackygears/readme.md
new file mode 100644
index 000000000..f97a08bd0
--- /dev/null
+++ b/keyboards/ein_60/keymaps/klackygears/readme.md
@@ -0,0 +1 @@
This is the klackygears userspace keymap for EIN_60. My userspace is heavily based on Drashna's userspace and draws a lot of features from him.
diff --git a/keyboards/ein_60/keymaps/klackygears/rules.mk b/keyboards/ein_60/keymaps/klackygears/rules.mk
new file mode 100644
index 000000000..885ab5baf
--- /dev/null
+++ b/keyboards/ein_60/keymaps/klackygears/rules.mk
@@ -0,0 +1,8 @@
1
2# Build Options
3# change yes to no to disable
4ENCODER_ENABLE = yes # Enables the use of one or more encoders
5WPM_ENABLE = yes # Enables the WPM counter on the OLED
6RGB_MATRIX_ENABLE = yes # Enable for pretty RGB matrix effects
7AUDIO_ENABLE = yes
8TAP_DANCE_ENABLE = yes
diff --git a/keyboards/ein_60/keymaps/ledtest/keymap.c b/keyboards/ein_60/keymaps/ledtest/keymap.c
new file mode 100644
index 000000000..6f903124a
--- /dev/null
+++ b/keyboards/ein_60/keymaps/ledtest/keymap.c
@@ -0,0 +1,207 @@
1/* Copyright 2021 klackygears
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18enum layer_names {
19 _QWERTY,
20 _LOWER,
21 _RAISE,
22 _ADJUST,
23 _FUNCTION,
24 };
25
26enum custom_keycodes {
27 RGBRST = SAFE_RANGE
28};
29
30const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
31
32 /* Qwerty
33 * ,-----------------------------------------. ,------. ,----------------------------------------.
34 * | Tab | Q | W | E | R | T | | Esc | |RGBRST|RGBHUI|RGBSAI|RGBVAI|RGBSPI| Bksp |
35 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
36 * | Func | A | S | D | F | G | |RGBRMO|RGBHUD|RGBSAD|RGBVAD|RGBSPD|Enter |
37 * |------+------+------+------+------+------| |------+------+------+------+------+------|
38 * | Shift| Z | X | C | V | B | |RGBTOG| M | , | . | / | ' |
39 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
40 * | Ctrl | ` | GUI | Alt |Lower |Space | |Space | |Space |Raise | Left | Down | Up |Right |
41 * `-----------------------------------------' `------' `-----------------------------------------'
42 */
43 [_QWERTY] = LAYOUT(
44 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MUTE, RGBRST, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_BSPC,
45 MO(_FUNCTION), KC_A, KC_S, KC_D, KC_F, KC_G, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_ENT,
46 OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, RGB_TOG, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
47 KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, KC_SPC, KC_CAPS, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
48 ),
49 /* Lower
50 * ,-----------------------------------------. ,------. ,-----------------------------------------.
51 * | Esc | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | Del |
52 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
53 * | F1 | F2 | F3 | F4 | F5 | F6 | | | _ | + | { | } |Enter |
54 * |------+------+------+------+------+------| |------+------+------+------+------+------|
55 * | F7 | F8 | F9 | F10 | F11 | F12 | | | | | Mute | | | |
56 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
57 * | | | | |Lower | Bksp | | | | Bksp |Raise | Next | Vol- | Vol+ | Play |
58 * `-----------------------------------------' `------' `-----------------------------------------'
59 */
60 [_LOWER] = LAYOUT(
61 KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
62 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
63 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, KC_MUTE, _______, KC_PIPE,
64 _______, _______, _______, _______, _______, KC_BSPC, _______, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
65 ),
66 /* Raise
67 * ,-----------------------------------------. ,------. ,-----------------------------------------.
68 * | Esc | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | Del |
69 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
70 * | | 4 | 5 | 6 | + | F5 | | F6 | - | = | [ | ] |Enter |
71 * |------+------+------+------+------+------| |------+------+------+------+------+------|
72 * |Enter | 7 | 8 | 9 | - | F11 | | F12 |ISO # |ISO / | Mute | | \ |
73 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
74 * | | , | 0 | . |Lower | Bksp | | | | Bksp |Raise | Next | Vol- | Vol+ | Play |
75 * `-----------------------------------------' `------' `-----------------------------------------'
76 */
77 [_RAISE] = LAYOUT(
78 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
79 _______, KC_4, KC_5, KC_6, KC_PLUS, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
80 KC_ENT, KC_7, KC_8, KC_9, KC_MINS, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_MUTE, _______, KC_BSLS,
81 _______, KC_COMM, KC_0, KC_DOT, _______, KC_BSPC, _______, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
82 ),
83 /* Adjust (Lower + Raise)
84 * ,-----------------------------------------. ,------. ,-----------------------------------------.
85 * | | | | | | | | | |RGBRST|RGBMOD|RGBVAI|RGBSAI|RGBHUI| |
86 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
87 * | | | | | | | | |RGBRMO|RGBVAD|RGBSAD|RGBHUD|RGBTOG|
88 * |------+------+------+------+------+------| |------+------+------+------+------+------|
89 * | | | | | | | | | | | | |BLSTEP|
90 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
91 * | | | | | | | | | | | | | | | RESET|
92 * `-----------------------------------------' `------' `-----------------------------------------'
93 */
94 [_ADJUST] = LAYOUT(
95 _______, _______, _______, _______, _______, _______, _______, RGBRST, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, _______,
96 _______, _______, _______, _______, _______, _______, _______, RGB_RMOD,RGB_VAD, RGB_SAD, RGB_HUD, RGB_TOG,
97 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP,
98 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET
99 ),
100 /* Function
101 * ,-----------------------------------------. ,------. ,-----------------------------------------.
102 * | | | | | | | | | | | | Up | | | |
103 * |------+------+------+------+------+------| `------' |------+------+------+------+------+------|
104 * | | | | | | | | | Left | Down |Right | | |
105 * |------+------+------+------+------+------| |------+------+------+------+------+------|
106 * | Caps | | | | | | | | | | | | |
107 * |------+------+------|--------------------+ ,------. +--------------------|------+------+------|
108 * | | | | | | | | | | | | | | | |
109 * `-----------------------------------------' `------' `-----------------------------------------'
110 */
111 [_FUNCTION] = LAYOUT(
112 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
113 _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
114 KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
115 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
116 )
117};
118
119layer_state_t layer_state_set_user(layer_state_t state) {
120 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
121}
122
123#ifdef OLED_ENABLE
124
125
126static void render_ein60_logo(void) {
127 static const char PROGMEM ein60_logo[] = {
128 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
129 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 11,251,139,139,139,139,139,139,139,139,139,139,139, 11, 15, 0,240,240, 16,240, 0,240,240, 16,240,224,192,128, 0, 0, 0, 0,240, 16,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 11,251,139,139,139,139,139,139,139,139,139,139,139,143,128, 0, 0, 0, 0,254,255, 11,251, 11, 11, 11, 11,139,203,235,123,187,219,235,251,255, 7,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
130 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 4,253,197,197,197,197,197,197,197,197,197,197,199,192,192, 0,255,255, 0,255, 0,255,255, 0,254, 13, 27, 55,111,222,188,120,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0,255,197,197,197,197,197,197,197,197,197,197,253,253,255,131,254, 0, 0,255,255, 0,255,184,220,238,247,219,205,198,195,193,192,255,255,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
131 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 3, 3, 2, 3, 0, 3, 3, 2, 3, 0, 0, 0, 0, 0, 1, 3, 2, 2, 3, 0, 8, 28, 20, 20, 20, 20, 20, 28, 8, 0, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
132 };
133 oled_write_raw_P(ein60_logo, sizeof(ein60_logo));
134 }
135
136static void render_status(void) {
137 // Host Keyboard Layer Status
138 oled_write_P(PSTR("Layer: "), false);
139 switch (get_highest_layer(layer_state)) {
140 case _QWERTY:
141 oled_write_P(PSTR("Default\n"), false);
142 break;
143 case _LOWER:
144 oled_write_P(PSTR("Lower\n"), false);
145 break;
146 case _RAISE:
147 oled_write_P(PSTR("Raise\n"), false);
148 break;
149 case _ADJUST:
150 oled_write_P(PSTR("Adjust\n"), false);
151 break;
152 case _FUNCTION:
153 oled_write_P(PSTR("FN\n"), false);
154 break;
155 default:
156 // Or use the write_ln shortcut over adding '\n' to the end of your string
157 oled_write_ln_P(PSTR("Undefined"), false);
158 }
159
160 // Host Keyboard LED Status
161 led_t led_state = host_keyboard_led_state();
162 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
163 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
164 oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
165
166 oled_set_cursor(1,2);
167}
168
169void oled_task_user(void) {
170
171 render_status();
172 oled_write_ln_P(PSTR(""), false);
173 render_ein60_logo();
174}
175#endif
176
177
178bool encoder_update_user(uint8_t index, bool clockwise) {
179 if (index == 0) { /* First encoder */
180 if (clockwise) {
181 tap_code(KC_VOLU);
182 } else {
183 tap_code(KC_VOLD);
184 }
185 } else if (index == 1) { /* Second encoder */
186 if (clockwise) {
187 tap_code(KC_DOWN);
188 } else {
189 tap_code(KC_UP);
190 }
191 }
192 return true;
193}
194
195bool process_record_user(uint16_t keycode, keyrecord_t *record) {
196 switch (keycode) {
197 case RGBRST:
198 #ifdef RGBLIGHT_ENABLE
199 if (record->event.pressed) {
200 eeconfig_update_rgblight_default();
201 rgblight_enable();
202 }
203 #endif
204 break;
205 }
206 return true;
207}
diff --git a/keyboards/ein_60/keymaps/ledtest/readme.md b/keyboards/ein_60/keymaps/ledtest/readme.md
new file mode 100644
index 000000000..17954c332
--- /dev/null
+++ b/keyboards/ein_60/keymaps/ledtest/readme.md
@@ -0,0 +1 @@
# The keymap for testing the LEDs and OLED on the EIN_60
diff --git a/keyboards/ein_60/keymaps/ledtest/rules.mk b/keyboards/ein_60/keymaps/ledtest/rules.mk
new file mode 100644
index 000000000..a62854456
--- /dev/null
+++ b/keyboards/ein_60/keymaps/ledtest/rules.mk
@@ -0,0 +1,4 @@
1# Build Options
2# change yes to no to disable
3RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
4RGB_MATRIX_ENABLE = no # Enable for pretty RGB matrix effects
diff --git a/keyboards/ein_60/readme.md b/keyboards/ein_60/readme.md
new file mode 100644
index 000000000..bbcf05f96
--- /dev/null
+++ b/keyboards/ein_60/readme.md
@@ -0,0 +1,27 @@
1# Ein_60
2
3![Ein_60](https://i.imgur.com/cKPrNwO.jpeg)
4
5The Ein_60 is a 50 key ergo style column stagger keyboard PCB with a combined split layout that is designed to fit into a standard 60% tray mount case. It has USB C and comes in either hotswap or soldered versions. (Soldered version is Alps and MX compatible.) It can have two encoders in either of it's middle keys and an OLED installed in the center below the plate. The PCB supports a bottom mounted KELIKING KLJ-1102 low profile buzzer speaker for audio effects. It has 38 side facing LEDs around the entire outside edge of the PCB for very bright RGB effects as well as solder points for LED strips. The Ein_60 is compatible with the majority of Planck keycap sets and can have a 1U only layout, two 2U and two 1U, or two 3U keys in the thumb cluster (or any combination of those).
6
7
8When flashing the Ein_60 use: make ein_60:default:flash
9
10![Ein_60 in 3D printed 60% case](https://i.imgur.com/3jkrERV.jpeg)
11
12* Keyboard Maintainer: [klackygears](https://github.com/klackygears)
13* Hardware Supported: The Ein_60 PCBs
14* Hardware Availability: [Case Data & firmware](https://github.com/klackygears)
15
16Make example for this keyboard (after setting up your build environment):
17
18 make ein_60:default
19
20Flashing example for this keyboard:
21
22 make ein_60:default:flash
23
24See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
25
26![Ein_60 PCB](https://i.imgur.com/5A1xW8S.jpeg)
27![Ein_60 with FR4 plate](https://i.imgur.com/42DNsLY.jpeg)
diff --git a/keyboards/ein_60/rules.mk b/keyboards/ein_60/rules.mk
new file mode 100644
index 000000000..47cbb0c12
--- /dev/null
+++ b/keyboards/ein_60/rules.mk
@@ -0,0 +1,26 @@
1# MCU name
2MCU = at90usb1286
3
4# Bootloader selection
5BOOTLOADER = qmk-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = yes # Console for debug
14COMMAND_ENABLE = yes # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21AUDIO_ENABLE = no # Audio output
22RGB_MATRIX_ENABLE = no # Enable for pretty RGB matrix effects
23RGB_MATRIX_DRIVER = WS2812 # Define RGB Matrix
24ENCODER_ENABLE = yes # Enables the use of one or more encoders
25OLED_ENABLE = yes # Enables the use of OLED displays
26OLED_DRIVER = SSD1306